本文主要介紹FPGA中常用的RAM、ROM、CAM、SRAM、DRAM、FLASH等資源,包括特性、工作原理、應(yīng)用場景等。
一、RAM
RAM(Random Access Memory)是FPGA中最基本和常用的內(nèi)部存儲(chǔ)塊,根據(jù)不同架構(gòu)可以實(shí)現(xiàn)不同容量,最大可達(dá)幾十Mb。
FPGA中的RAM主要包括:
- 分布式RAM:存在于邏輯塊(LE)中的小容量RAM,通常為幾百比特到幾千比特。
- 塊RAM:FPGA中專門用于實(shí)現(xiàn)RAM功能的大容量存儲(chǔ)塊,每個(gè)塊RAM容量從幾kb到幾十kb不等。
- UltraRAM:某些高端FPGA特有的大容量RAM塊,比塊RAM具有更高的密度和帶寬。
1、分布式RAM(Distributed RAM)
分布式RAM利用查找表(LUT)的功能實(shí)現(xiàn),不需要占用額外Flip-Flop,但會(huì)占用可用于邏輯實(shí)現(xiàn)的LUT資源。
每個(gè)LUT可以實(shí)現(xiàn)一個(gè)小容量的RAM,例如6輸入LUT實(shí)現(xiàn)64位RAM。
注意分布式RAM只能實(shí)現(xiàn)同步讀寫操作。
2、塊RAM(Block RAM)
每個(gè)塊RAM通常有單端口、雙端口和四端口版本。
支持同步讀寫操作,可以通過多端口實(shí)現(xiàn)FIFO等功能。
例如Xilinx UltraScale FPGA中一個(gè)塊RAM容量為36kb,位寬可配置,延時(shí)很小,頻率可以達(dá)到550MHz。
3、UltraRAM
UltraRAM集成在部分高端FPGA中,每個(gè)UltraRAM可以達(dá)到數(shù)十Mb的容量,具有比塊RAM更高的密度和帶寬。
UltraRAM可以與塊RAM一起使用,實(shí)現(xiàn)更大容量的存儲(chǔ)解決方案。
Verilog 代碼示例
(* ram_style = "distributed" *) reg [7:0] dist_ram[0:63]; // 64 x 8 的分布式RAM
(* ram_style = "block" *) reg [31:0] block_ram[0:1023]; // 1K x 32 的塊RAM
(* ram_style = "ultra" *) reg [7:0] ultra_ram[0:262143]; // 256K x 8 的UltraRAM
二、 ROM
ROM(Read-Only Memory)是只讀存儲(chǔ)器,用于存放不需修改的數(shù)據(jù)。
FPGA中的ROM主要有:
- 分布式ROM:使用LUT實(shí)現(xiàn),容量很小。
- 塊ROM:使用塊RAM實(shí)現(xiàn),容量較大。
ROM在配置時(shí)寫入數(shù)據(jù)之后數(shù)據(jù)不能修改。ROM主要用于存放程序代碼等不變數(shù)據(jù)。
Verilog 代碼示例
(* rom_style = "distributed" *) reg [7:0] dist_rom[0:31]; // 32 x 8 分布式ROM
(* rom_style = "block" *) reg [31:0] block_rom[0:2047]; // 2K x 32 塊ROM
三、CAM
CAM(Content-Addressable Memory)是一種特殊類型的內(nèi)存結(jié)構(gòu),也稱為內(nèi)容可尋址存儲(chǔ)器,可以通過內(nèi)容查找數(shù)據(jù)所在位置。
CAM主要應(yīng)用:
- 網(wǎng)絡(luò)查找:根據(jù)目的地址查找路由端口。
- 緩存查詢:根據(jù)TAG查詢緩存中是否存在數(shù)據(jù)。
CAM的工作原理:
基于硬件電路的快速匹配,當(dāng)輸入一串?dāng)?shù)據(jù)時(shí),CAM會(huì)同時(shí)比較這串?dāng)?shù)據(jù)與內(nèi)部存儲(chǔ)的所有數(shù)據(jù)項(xiàng)。如果找到完全匹配的數(shù)據(jù)項(xiàng),CAM就會(huì)輸出該數(shù)據(jù)項(xiàng)的地址。
CAM的優(yōu)點(diǎn):高速查找、精確匹配、并行處理。
CAM的缺點(diǎn):容量受限、功耗較高、價(jià)格昂貴。
四、SRAM
SRAM(Static RAM)是一種常用的隨機(jī)訪問存儲(chǔ)器(RAM)類型,它以靜態(tài)方式存儲(chǔ)數(shù)據(jù),不需要定期刷新。也稱為靜態(tài)隨機(jī)存儲(chǔ)器。
SRAM在速度和功率消耗方面表現(xiàn)優(yōu)異,但是容量較小,成本較高。
SRAM通常用于存儲(chǔ)CPU或FPGA內(nèi)部的寄存器、緩存或臨時(shí)變量等。
SRAM主要由存儲(chǔ)單元陣列、地址解碼器和讀寫控制電路等組成。每個(gè)存儲(chǔ)單元都包含一個(gè)雙口RAM,可以獨(dú)立地進(jìn)行讀/寫操作。每個(gè)RAM有兩位,即一個(gè)存儲(chǔ)單元可以存儲(chǔ)一個(gè)比特(bit)的數(shù)據(jù)。
SRAM還可以實(shí)現(xiàn)預(yù)讀取功能,即在讀取數(shù)據(jù)的同時(shí),預(yù)讀下一個(gè)數(shù)據(jù),從而提高訪問速度。此外,SRAM還可以實(shí)現(xiàn)雙端口訪問,即同時(shí)對兩個(gè)不同的存儲(chǔ)單元進(jìn)行讀寫操作。
Verilog 代碼示例
sram_controller sram_inst (
.clk (clk),
.addr (addr),
.dout (dout),
.din (din),
.we (we),
.ce (ce),
.oe (oe)
);
五、 DRAM
全稱動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(Dynamic Random Access Memory),是一種用于存儲(chǔ)和訪問大規(guī)模數(shù)據(jù)的主要存儲(chǔ)器技術(shù)。
DRAM以其高密度、容量大和低功耗等特點(diǎn),以Gigabit(Gb)為單位提供大容量存儲(chǔ),在FPGA中得到廣泛的應(yīng)用,比如常見的DDR3、DDR4等等。
FPGA的DRAM可以使用不同的接口標(biāo)準(zhǔn),如DDR3、DDR4、LPDDR、HBM等。這些接口標(biāo)準(zhǔn)定義了DRAM與其他系統(tǒng)組件(如處理器、其他存儲(chǔ)器、外設(shè)等)之間的通信協(xié)議和物理連接。
相比SRAM,DRAM擁有更大的容量,順序讀寫速度快,隨機(jī)讀寫速度慢。
Verilog 代碼示例
ddr3_controller ddr3_inst(
.clk (clk),
.reset_n (reset_n),
.s_axi_awid (s_axi_awid),
.s_axi_awaddr (s_axi_awaddr),
.s_axi_awlen (s_axi_awlen),
.s_axi_awsize (s_axi_awsize),
.s_axi_awburst (s_axi_awburst),
.s_axi_awlock (s_axi_awlock),
.s_axi_awcache (s_axi_awcache),
.s_axi_awprot (s_axi_awprot),
.s_axi_awvalid (s_axi_awvalid),
.s_axi_awready (s_axi_awready),
// Write data channel
.s_axi_wdata (s_axi_wdata),
.s_axi_wstrb (s_axi_wstrb),
.s_axi_wlast (s_axi_wlast),
.s_axi_wvalid (s_axi_wvalid),
.s_axi_wready (s_axi_wready)
);
六、FLASH
FLASH是一種非易失存儲(chǔ)器,斷電后保持?jǐn)?shù)據(jù),容量小,但成本低廉。
FPGA中的FLASH主要用于:
- 存儲(chǔ)配置文件:許多FPGA使用FLASH來保存配置文件。
- 程序存儲(chǔ):用于存儲(chǔ)代碼和數(shù)據(jù)。
FLASH存儲(chǔ)器以塊為單位進(jìn)行擦除和寫入操作。擦除操作需要將整個(gè)塊中的數(shù)據(jù)清除,而寫入操作只需修改需要更新的部分?jǐn)?shù)據(jù)。
寫入操作通常采用位編程(bit programming)的方式進(jìn)行。在位編程中,根據(jù)需要將存儲(chǔ)單元的電荷狀態(tài)改變,以表示0或1的值。
與其他存儲(chǔ)器類型相比,F(xiàn)LASH存儲(chǔ)器的讀取延遲較高,而擦除和寫入操作的速度也相對較慢。此外,F(xiàn)LASH存儲(chǔ)器的擦寫次數(shù)有限,通常在百萬到數(shù)十億之間。
Verilog 代碼示例
flash_controller flash_inst(
.clk(clk),
.flash_cs(flash_cs),
.flash_clk(flash_clk),
.flash_io(flash_io),
.addr(addr),
.dout(dout),
.din(din),
.oe(oe),
.we(we)
);
七、總結(jié)
FPGA提供了多種內(nèi)部和外部的存儲(chǔ)器解決方案,根據(jù)需要可以靈活使用,構(gòu)建存儲(chǔ)器系統(tǒng)。合理利用各類存儲(chǔ)器的優(yōu)缺點(diǎn),可以在成本、容量和速度上取得最佳平衡。
評論
查看更多