使用Verilog实现RAM的构造并读写数据

您所在的位置:网站首页 下降沿verilog 使用Verilog实现RAM的构造并读写数据

使用Verilog实现RAM的构造并读写数据

2023-12-14 23:01| 来源: 网络整理| 查看: 265

目的

        1模拟实现一个宽度为32,深度为256的内存空间,先向内存空间写一批数据,再读出这批数据,并比较数据是否正确;         2完成ram的实现代码和tb_ram的仿真测试代码;

说明

提供输入: clk_i 时钟信号,100MHz;        rst_i 复位信号,高电平复位;        wr_en_i 写使能,表示data_io的数据有效;        rd_en_i 读使能,表示要求读出内存中的数据;        addr_i 地址信号表示要访问的数据所在地址; 要求 输出: data_io 当wr_en_i有效时,表示为写入到内存的数据;当rd_en_i有效时,表示要求读出在addr_i的内存数据;

ram

实现

1 top模块 只需要定义好两个子模块之间的连线即可,不做过多描述。Verilog描述如下:

//tb_top module tb_top; wire clk; wire rst; wire wr_en; wire rd_en; wire[7:0] addr; wire[31:0] data; ram inst_ram( .clk_i(clk), .rst_i(rst), .wr_en_i(wr_en), .rd_en_i(rd_en), .addr_i(addr), .data_io(data) ); tb_ram inst_tb_ram( .clk_o(clk), .rst_o(rst), .wr_en_o(wr_en), .rd_en_o(rd_en), .addr_o(addr), .data_io(data) ); Endmodule

2 ram模块 使用双向口的话需要利用三态门进行输入输出的控制。使用条件操作符实现三态门的构造。在时钟上升沿,若写信号有效,则将当前地址线对应存储器的空间存入当前data_io上的数据;若读信号有效,则将地址线对应存储器空间的数据输出至data_io,读写无效时为高阻态。编写代码如下,部分说明包含在注释中:

//ram.v module ram( input clk_i, input rst_i, input wr_en_i, input rd_en_i, input [7:0] addr_i, inout [31:0] data_io ); reg [31:0] bram[255:0]; integer i; reg [31:0] data; //add implementation code here always @(posedge clk_i or posedge rst_i) begin if (rst_i) begin for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3