Vivado从此开始(进阶篇)读书笔记-RAM的三种工作模式

作者:十年老鸟的CSDN博客

注:本文由作者授权转发,如需转载请联系作者本人

前言

书本中对于RAM的三种操作读优先级(read_first)、写优先(write_first)和保持(no_change)使用等效的verilog来描述,简单明了,记录于此。

RAM的三种操作模式

BLOCK RAM的ip核有一个操作模式的选择

RAM.png

不管是单端口(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


最新文章

最新文章