什么是单端口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?二者有何区别?的主要内容,如果未能解决你的问题,请参考以下文章