作者:十年老鸟的CSDN博客
注:本文由作者授权转发,如需转载请联系作者本人
前言
书本中对于RAM的三种操作读优先级(read_first)、写优先(write_first)和保持(no_change)使用等效的verilog来描述,简单明了,记录于此。
RAM的三种操作模式
BLOCK RAM的ip核有一个操作模式的选择
不管是单端口(SP)、简单双端口(SDP)还是真正双端口(TDP)的RAM,都有三种工作模式、即读优先级(read_first)、写优先(write_first)和保持(no_change)。这三种模式体现了针对同一地址同时进行读/写操作时的不同处理方式:处于读优先级模式时,读出的是该地址上的原有数据;处于写优先级时,读出的是将要写入该地址的新数据;处于保持模式时,输出端口数据保持不变。
这三种模式对应的RTL描述如下:
//read_first: generate if (MODE == "read_first") always_ff @(posedge clk) begin if(we) begin myram[addr] <= din; end dout <= myram[addr]; end endgenerate //write_first: generate if (MODE == "write_first") always_ff @(posedge clk) begin if(we) begin myram[addr] <= din; dout <= din; end else begin dout <= myram[addr]; end end endgenerate //no change: generate if (MODE == "no_change") always_ff @(posedge clk) begin if(we) begin myram[addr] <= din; end else begin dout <= myram[addr]; end end endgenerate