深圳大学网站建设,如何建立免费的网站,德阳移动网站建设,开公司要多少钱牛客网Verilog刷题——VL54 题目答案 题目 实现一个深度为8#xff0c;位宽为4bit的双端口RAM#xff0c;数据全部初始化为0000。具有两组端口#xff0c;分别用于读数据和写数据#xff0c;读写操作可以同时进行。当读数据指示信号read_en有效时#xff0c;通过读地址信号… 牛客网Verilog刷题——VL54 题目答案 题目 实现一个深度为8位宽为4bit的双端口RAM数据全部初始化为0000。具有两组端口分别用于读数据和写数据读写操作可以同时进行。当读数据指示信号read_en有效时通过读地址信号read_addr读取相应位置的数据read_data并输出当写数据指示信号write_en有效时通过写地址信号write_addr 和写数据write_data向对应位置写入相应的数据。 模块的信号接口图如下 模块的时序图如下 输入输出描述。
信号类型输入/输出位宽描述clkwireInput1系统时钟信号rst_nwireInput1异步复位信号低电平有效read_enwireInput1读使能信号高电平表示进行读操作write_enwireInput1写使能信号高电平表示进行写操作read_addrwireInput8读地址write_addrwireInput8写地址write_datawireInput4写数据在写使能信号拉高时同时输入写数据read_dataregOutput4读数据
答案 在题目中并未指出数据的读写操作是同步的还是异步的从题目中给出的时序图看题目要求在读使能有效的该时钟内读出数据比如在读使能read_en有效时地址为0立刻读出地址0中的数据1地址为1则立刻读出地址1中的数据2可见时序图要求的是异步读但是在程序中我们设置为同步读仿真也是通过的个人觉得题目有问题没有指出读写是同步还是异步仿真也有问题。
timescale 1ns/1ns
module ram_mod(input clk,input rst_n,input write_en,input [7:0]write_addr,input [3:0]write_data,input read_en,input [7:0]read_addr,output reg [3:0]read_data
);
integer i;
reg [3:0] mem [255:0];//写操作
always (posedge clk or negedge rst_n)if(!rst_n)for(i0;i256;ii1) beginmem[i] d0;endelse if(write_en)mem[write_addr] write_data;//同步读操作
always (posedge clk or negedge rst_n) if(!rst_n)read_data d0;else if(read_en)read_data mem[read_addr];elseread_data d0;//异步读操作
/*
always (*) if(read_en)read_data mem[read_addr];elseread_data d0;
*/endmodule