使用Verilog实现RAM的构造并读写数据 |
您所在的位置:网站首页 › 下降沿verilog › 使用Verilog实现RAM的构造并读写数据 |
目的
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的内存数据; 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) ); Endmodule2 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 |