跳转到主要内容
--## 电子创新网图库均出自电子创新网,版权归属电子创新网,欢迎其他网站、自媒体使用,使用时请注明“图片来自电子创新网图库”,不过本图库图片仅限于网络文章使用,不得用于其他用途,否则我们保留追诉侵权的权利。 ##--

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
judy 提交于

作者:十年老鸟的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


精彩推荐

2026英伟达GTC大会专题

CES 2026(国际消费类电子产品展览会)专题

第四届南渡江智慧医疗与康复产业高峰论坛

第十五届松山湖中国IC创新高峰论坛

第四届滴水湖中国RISC-V产业论坛

Recent comments

  • 1873774516_516738
  • 2460440665_516737
  • 1457585548_516736
  • 780289498_516735
  • 2283262460_516734