真双口RAM IP的使用

article/2025/9/28 21:59:20

真双口RAM IP的使用

  • 1 IP的例化
  • 2 源代码
    • 2.1 顶层文件
    • 2.2 testbench文件
  • 3 仿真结果

1 IP的例化

第一个配置界面:
Block Memory Gnerator一共可以产生5种不同类型的内存空间,
其中block RAM有三种:单口RAM、简化双口RAM和真双口RAM。
单口RAM只有一个端口(A端口),可以对A端口进行读写。
简化双口RAM有两个端口(A和B端口),但是A端口只能进行写入操作,不能进行读出操作,而B端口则只能进行读出操作,不能进行写入操作。
真双口RAM有两个端口(A和B端口),A和B端口都能进行读写操作。
在这里插入图片描述
第二个配置界面:
Operating Mode(操作模式)一共有三种:Write First,Read First,No Change。
在Write First模式中,在一个时钟周期里,写入内存单元的数据被同步输出到输出数据总线上;
在Read First模式中,在一个时钟周期里,写入到内存单元的数据是当前输入数据总线上的数据,
而输出到输出数据总线上的数据则是上一个时钟周期存储在内存单元中的数据。
细节可参考PG058的49到50页4。Enable Port Type设置为Always Enabled,一直使能端口A。

在这里插入图片描述

第三个配置界面:

在这里插入图片描述

其他窗口保持默认。

在这里插入图片描述

2 源代码

2.1 顶层文件


```cpp
`timescale 1ns / 1ps/*
注意点:(1)Block Memory Gnerator一共可以产生5种不同类型的内存空间,
其中block RAM有三种:单口RAM、简化双口RAM和真双口RAM[4]。
单口RAM只有一个端口(A端口),可以对A端口进行读写。
简化双口RAM有两个端口(A和B端口),但是A端口只能进行写入操作,不能进行读出操作,而B端口则只能进行读出操作,不能进行写入操作。
真双口RAM有两个端口(A和B端口),A和B端口都能进行读写操作(2)Operating Mode(操作模式)一共有三种:Write First,Read First,No Change。
在Write First模式中,在一个时钟周期里,写入内存单元的数据被同步输出到输出数据总线上;
在Read First模式中,在一个时钟周期里,写入到内存单元的数据是当前输入数据总线上的数据,
而输出到输出数
##据总线上的数据则是上一个时钟周期存储在内存单元中的数据。
细节可参考PG058的49到50页4。Enable Port Type设置为Always Enabled,一直使能端口A。*/module True_TwoPort_RAM(input   clk,input   rst_n,input   trig  //RAM工作信号
);/*模块功能:count=0到99,RAM不工作count=100到199,RAM写数据count=200到299,RAM不工作count=300到399,RAM读数据count=其他值,RAM不工作
*/    
reg            RAM_en      ;  // RAM 使能信号
reg            wea         ;  // wea=1,RAM写数据;  wea=0,RAM读数据。
reg [15:0]     addr        ;  // RAM的读写地址
reg [15:0]     Write_Data  ;  // RAM写入数据
reg [15:0]     count       ;  
always @ (posedge clk)  
beginif(!rst_n)beginRAM_en      <=1'b0;// RAM 使能信号wea         <=1'b0;addr        <=16'd0;Write_Data  <=16'd0;count       <=16'd0; endelse if(trig==1'b1) begincount <= count + 1'd1;  if( count<10'd100 )  //count=0到99,RAM不工作begin  RAM_en  <= 1'b0;  // RAM 使能信号wea     <= 1'b0;   // wea=1,RAM写数据;  wea=0,RAM读数据。end  else if( (count >=10'd100) && (count < 10'd200))//count=100到199,RAM写数据begin  RAM_en <= 1'b1;  // RAM 使能信号wea    <= 1'b1;   // wea=1,RAM写数据;  wea=0,RAM读数据。addr <= addr + 10'd1;  Write_Data <= Write_Data + 1'd1;  end  else if( (count >=10'd200) && (count < 10'd300) ) // count=200到299,RAM不工作begin  RAM_en <= 1'b0;     //RAM IP不工作wea    <= 1'b0;   // wea=1,RAM写数据;  wea=0,RAM读数据。addr <= 10'd0;      //地址清零Write_Data <= 128'd0;    //数据清零end  else if((count >=10'd300) && (count < 10'd400) )//count=300到399,RAM读数据begin  RAM_en <= 1'b1;  wea    <= 1'b0;   // wea=1,RAM写数据;  wea=0,RAM读数据。addr <= addr + 10'd1;  end  else     //count=其他值,RAM不工作begin  RAM_en <= 1'b0;  //RAM IP不工作count <= count;  //          endendelsebeginRAM_en      <=RAM_en    ;// RAM 使能信号wea         <=wea       ;addr        <=addr      ;Write_Data  <=Write_Data;count       <=count     ; end                     
end  // ena:RAM IP 使能信号  ,ena=1,RAM IP工作 
// wea:wea=1,写数据;wea=0,读数据。
wire[15:0]     Read_Data   ;  // RAM读出数据    
True_TwoPort_RAM_ip Inst_True_TwoPort_RAM_ip (.clka    (clk        ),      // input wire clka.ena     (RAM_en     ),      // input wire ena   RAM IP 使能信号.wea     (wea        ),      // input [0 : 0]    wea=1,写数据;wea=0,读数据。.addra   (addr       ),      // input [15 : 0] addra  .dina    (Write_Data ),      // input [15 : 0] dina   .douta   (Read_Data  ),      // output [15 : 0] douta .clkb(clk),    // input wire clkb.enb(),      // input wire enb.web(),      // input wire [0 : 0] web.addrb(),  // input wire [9 : 0] addrb.dinb(),    // input wire [127 : 0] dinb.doutb()  // output wire [127 : 0] doutb
); endmodule

2.2 testbench文件

`timescale 1ns / 1psmodule sim_top;//input
reg clk;
reg rst_n;
reg trig;True_TwoPort_RAM Inst_True_TwoPort_RAM(.clk    (clk    ),.rst_n  (rst_n  ),.trig   (trig   )
);// 初始化   
initial
begin//初始化输入clk<=1'b0;rst_n<=1'b0;trig<=1'b0;#20;rst_n<=1'b1;trig<=1'b1;
end// create clock;
always #5 clk=~clk;//10ns一个周期,clk的频率为100Mendmodule

3 仿真结果

在这里插入图片描述


http://chatgpt.dhexx.cn/article/MQm2FDPN.shtml

相关文章

FPGA双口RAM使用

模块名称&#xff1a; dpram() IP Core 双口RAM&#xff0c;有俩组数据线和地址线&#xff0c;读写可以同时进行&#xff0c;FIFO读写可以同时进行&#xff0c;可以看作是双口。分为Simple two-dual RAM和true two-dual RAM。简单双口RAM&#xff0c;一个端口只读&#xff0c;…

FPGA之RAM详解,伪双口RAM的使用

伪双口RAM从灵活度上来说&#xff0c;刚好介于单口RAM和真双口RAM之间&#xff0c;但是不得不说它是RAM中应用最广的配置类型&#xff0c;其难能可贵地兼顾了真双口RAM的读写灵活性&#xff0c;也兼顾了单口RAM的设计稳定性。因为伪双口RAM只有一个端口可以向地址中写入数据&am…

数字 IC 技能拓展(24)单口、伪双口、真双口 RAM、单口、双口 ROM 的区别与联系

正文 打开 IP Catalog,搜索 Block Memory Generator,即可看到其 Memory Type 可分为 5 中,分别是单口 RAM(Single Port RAM)、伪双口 RAM(Simple Dual Port RAM)、真双口 RAM(True Dual Port RAM)、单口 ROM(Single Port ROM)、双口 ROM(Dual Port ROM)。 一、单口…

FPGA系列8——Block RAM(单口RAM、伪双口RAM、真双口RAM)区别

1、Block RAM Xlinx的BRAM可以配置成单口RAM、伪双口RAM、真双口RAM、单口ROM和双口ROM五种类型。 2、Block RAM使用的资源 下图以36Kb的BRAM为例&#xff0c;不论BRAM配置成什么模式(上面提到的五种模式)&#xff0c;存储的阵列的大小只和数据位宽和地址大小配置有关&#x…

双口RAM,值得研究

在FPGA设计过程中&#xff0c;使用好双口RAM&#xff0c;也是提高效率的一种方法。 官方将双口RAM分为简单双口RAM和真双口RAM。 简单双口RAM只有一个写端口&#xff0c;一个读端口。 真双口RAM分别有两个写端口和两个读端口。 无论是简单双口RAM还是真双口RAM&#xff0c;在…

单端口和双端口RAM的区别

1---不详细的讲一下Xilinx的BMG&#xff1a;单端口和双端口RAM的区别 真双口 RAM 有两个时钟&#xff08;clka & clkb&#xff09;、两组输入输出数据线&#xff08;dina & douta & dinb & doutb&#xff09;、两组地址线&#xff08;addra & addrb&#x…

如何实现三种不同RAM?(单端口RAM、伪双端口RAM、真双端口RAM|verilog代码|Testbench|仿真结果)

如何实现三种不同RAM&#xff1f; 一、前言二、单端口2.1 原理2.2 verilog代码2.3 Testbench2.4 仿真结果 三、真双端口3.1 原理3.2 verilog代码3.3 Testbench3.4 仿真结果 四、伪双端口4.1 原理4.2 verilog代码4.3 Testbench4.4仿真结果 五、总结 数字IC经典电路设计 经典电路…

真双口RAM读写设计

dual port ram ---DP RAM 1.1 概念1.2 读写冲突处理1.3 三种端口比较1.4 真双口RAM读写代码1.5 仿真波形 1.1 概念 真双端口RAM有两个独立的读写端口&#xff0c;每个端口都可以独立发起读或者写。1.2 读写冲突处理 1、读和写冲突&#xff1a;如果读和写同时有效&#xff0c;且…

计算机组成原理_双口RAM和多模块存储器

计算机组成原理总目录 双口RAM和多模块存储器 1. 双口RAM 双口RAM&#xff0c;即RAM存储器有两个可供CPU读写的端口 在这样的结构体下&#xff0c;CPU在读写RAM时会出现以下四种情况 两个端口对不同地址单元进行读写操作&#xff0c;则二者互不影响两个端口对同一地址单元进行…

双口ram读写

项目名称 双口ram读写 具体要求 将0-1023存入ram并读出,a端口写入数据&#xff0c;b端口读出数据&#xff0c;两个端口的时钟频率设置相同&#xff0c;仿真时以50m写入12.5m读取 单端口时读和写不能同时进行&#xff0c;双端口ram多了一个读地址&#xff0c;可以同时读写 …

单口RAM、双口RAM、FIFO

单口RAM、双口RAM、FIFO 单口与双口 单口与双口的区别在于&#xff0c;单口只有一组数据线与地址线&#xff0c;因此读写不能同时进行&#xff1b;而双口有两组数据线与地址线&#xff0c;读写可同时进行&#xff1b;FIFO读写可同时进行&#xff0c;可以看作是双口&#xff1…

双口RAM浅谈

双口RAM&#xff0c; 基本上是10年前的东西了&#xff0c;当前设计的项目应该很少会用到这类器件了&#xff0c;不光是双口RAM&#xff0c;其它随着MCU性能的不断增加&#xff0c;很多器件都会被替代到&#xff0c;不再需要了&#xff0c;比如CPLD&#xff0c;之前公司的板子上…

FPGA之RAM详解,真双口RAM的使用

真双口RAM IP练习 真双口RAM可以说是灵活性最大的RAM IP核&#xff0c;因为它赋予了用户最大的设计空间&#xff0c;两个可以独立读写地址空间的端口&#xff0c;充分释放了FPGA程序设计上的可能。 但是实际上真双口RAM在工程项目中还是和单双口RAM一样使用频率比较低的&#x…

双口ram

双口ram的功能实在很妙&#xff0c;能把二个除理器合二为一&#xff0c;强强联合&#xff0c;发挥更强的功能。如小时候看过的动画片&#xff0c;当打不过怪物时&#xff0c;动画的主角总会合体&#xff0c;增加战斗力&#xff0c;把怪物打败。又口ram提供了处理器“合体”的方…

数字IC笔面基础,项目常用IP——双口RAM(简介及Verilog实现)

双口RAM简介及Verilog实现 写在前面的话双口RAM简介伪双口RAM框图&#xff1a;&#xff08;Xilinx FPGA&#xff09;真双口RAM框图&#xff1a;&#xff08;Xilinx FPGA&#xff09;RAM读写时序图伪双口RAM读写实列 简单的双口RAM的Verilog实现总结 写在前面的话 RAM&#xff…

双口RAM及Vivado RAM IP核的使用

目录 1.双口RAM概述 2.Vivado 双口RAM IP核 2.1 Block Memory Generator概述 2.2 真双口RAM的设置 2.2.1 Basic设置 2.2.2 Port设置 3.双口RAM例程 4.仿真 4.后记 5.参考文献 1.双口RAM概述 双口RAM&#xff08;dual port RAM&#xff09;在异构系统中应用广泛&…

网络原理(一):初识网络

网络发展史 独立模式 独立模式&#xff1a;计算机之间相互独立&#xff1b; 在计算机最初的时候&#xff0c;每个计算机都是独立存在的。 我们拿游戏来举例&#xff0c;但是的计算机只能玩玩单机游戏&#xff0c;游戏通过了就没意思了。 随着时代的发展&#xff0c;来到了…

网络原理(小结)

网络原理 前言网络七层/五层模型OSI七层网络模型TCP/IP 五层网络模型封装和分用 TCP/IP五层网络模型各层代表协议的详解应用层常见状态码HTTP常见Header头ServletSession和CookieHTTP协议的特点HTTPSHTTP与HTTPS的区别 传输层网络传输的五元组端口号UDP协议TCP协议TCP如何保证数…

网络原理 | 网络初识之网络基础概念学习

目录 局域网与广域网 网络通信基础 IP地址 端口号 网络协议 五元组 局域网与广域网 根据网络互联的规模&#xff0c;可以将网络划分为局域网(LAN)和广域网(WAN). 网络互连即将多台计算机连接在一起&#xff0c;完成数据共享&#xff0c;数据共享的本质是网络数据传输&…

网络的基本原理

文章目录 一、计算机网络背景二、局域网和广域网1.局域网(LAN)2.广域网(WAN) 三、认识协议1.协议的概念2.协议分层3.网络OSI七层模型4.TCP/IP五层模型5.数据的封装和解包 四、局域网内主机交互与跨网段主机交互 一、计算机网络背景 我们用计算机完成一项工作时&#xff0c;不可…