什么是单端口RAM和双单口RAM?二者有何区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是单端口RAM和双单口RAM?二者有何区别?相关的知识,希望对你有一定的参考价值。

双口ram有安全保护啊.里面有两个时钟哦,为了不出现亚稳态,里面有保存锁存逻辑. 参考技术A FPGA设计中,常用到的数据缓存IP有FIFO和RAM,其中RAM又分单口RAM、伪双口RAM、双口RAM。
单口与双口的区别在于,单口只有一组数据线与地址线,因此读写不能同时进行。而双口有两组数据线与地址线,读写可同时进行。FIFO读写可同时进行,可以看作是双口。
双口RAM分伪双口RAM(Xilinx称为Simple two-dual RAM)与双口RAM(Xilinx称为true two-dual RAM)。伪双口RAM,一个端口只读,另一个端口只写;而双口RAM两个端口都可以读写。
FIFO也是一个端口只读,另一个端口只写。FIFO与伪双口RAM的区别在于,FIFO为先入先出,没有地址线,不能对存储单元寻址;而伪双口RAM两个端口都有地址线,可以对存储单元寻址。
异步时钟域的缓存只要是双口器件都可以完成。但FIFO不需对地址进行控制,是最方便的。

FPGA的嵌入式RAM

       FPGA中的嵌入式RAM分为两种:专用的BRAM和分布是RAM(用LUT实现的)。这两种RAM又可以配置成单端口和双端口的RAM和ROM。双端口RAM又可以根据读写地址是否在同一块分为Double Port 和Two Port。读取方式也有多种方式,包括:Read first, Write first, No change 等。

Block RAM和分布式RAM

       在FPGA实现RAM时,可在专用Block RAM和分布式RAM中实现。这两者的选择不仅会影响资源选择,同时还会严重地影响性能和功耗。哪如何选用BRAM和分布式RAM呢?一般而言,容量需求大时采用BRAM,对读写性能有要求时,用分布式RAM。一般来说RAM要求的深度是首要标准。RAM的深度比较小时,在LUTRAM中实现,深度超过256位的存储器阵列时用BlockRAM实现。Xilinx和Altera 的FPGA器件能够灵活地以多种宽度深度组合实现各种类型的RAM。

       嵌入式RAM的使用方式有三种:原语,FPGA厂商提供的例化工具以及综合工具根据RTL代码推译出RAM。下面是一个简单的单端口RAM,在综合时会被综合工具推译出BRAM。

 1 module bram_inference(
 2       input clk,
 3       input [15:0] mem_din,
 4       input [9:0] mem_addr,
 5       input mem_we,
 6       output reg [15:0] mem_dout );
 7 
 8 reg [15:0] ram [0:1023];
 9 
10 always (posedge clk)
11 begin
12       if(mem_we)
13            ram[mem_addr] <= mem_din;
14       mem_dout <= ram[mem_addr];
15 end
16 
17 endmodule

 

嵌入式RAM的初始化

      XILINX 的RAM初始文件格式是coe,在Vivado中例化RAM时会将coe 文件转换成*.mif 文件,mif 文件的文件名和RAM的名字一样。但XILINX的mif 文件和ALTERA RAM的mif 文件格式不同。

小结

       当今FPGA中所使用的嵌入式存储器具有宽存储器带宽特性,以及通用性,能够实现各种存储器功能,包括:随机访问存储器(RAM),ROM,CAM,FIFO(FIFO是由FIFO控制器逻辑和真双端口RAM实现的),真双端口存储器,移位寄存器,异步工作模式,同步工作模式。还可以选择输出是否寄存一拍。各家FPGA厂商的RAM具体实现有所不同但功能都一样,对RAM的控制信号做简单的修改就能操作不同厂家的嵌入式RAM了。

 

问题:

1 Altera的FPGA有没有真双端口RAM的原语?如果没有,是否可以由单端口RAM组成真双端口RAM?

2 在Vivado中,如何用脚本语言生成RAM IP?

3 如何不从新综合布局布线更新RAM中初始化数据 ?

 

参考文献:

[1] 阿昏豆. FPGA研发之道(13)-设计不是凑波形(三)RAM. http://www.eetop.cn/blog/html/60/1494260-52826.html. 2015,12,24.

[2] Xilinx. UG949 vivado设计套件的UltraFAST设计方法指南. 2014,04,02.

以上是关于什么是单端口RAM和双单口RAM?二者有何区别?的主要内容,如果未能解决你的问题,请参考以下文章

FPGA设计中RAM的一些基本概念

ARM里的ram和SDRAM之间有何区别

Xilinx之RAM使用指南

iCore3 双核心板_FPGA实验十八:基于单口RAM的ARM+FPGA数据存取实验

FPGA的嵌入式RAM

调用ISE的IP核,配置RAM。(实例化)