always@(posedge clk or negedge rst_b)
if(!rst_b)
ram_ren_d1 <= 1'b0;
else
ram_ren_d1 <= ram_ren;
always@(posedge clk or negedge rst_b)
if(!rst_b)
ram_dout_d1 <= {(WIDTH){1'B0}};
else(ram_ren_d1)
ram_dout_d1 <= ram_dout;
assign rdat <= (ram_ren_d1)?ram_dout_d1:ram_dout;
寄存器中的数据读取出来,比总线数据慢一拍,但是可以一直保存到下一个读使能数据才会改变,这种数据保持主要是适合读数据不连续,读取频率不高的情况,才有意义,如果是连续读取,那么这个操作只是相当于慢了一拍的读取操作。
上面代码是读数据保持功能,也就是先把数据读取到D触发器中保存起来,只有等到下一个读使能,才会更新D触发器中的数据