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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM