FPGA的BRAM和LUT等資源都是有限的,在FPGA開發過程中,可能經常遇到BRAM或者LUT資源不夠用的情況。
一般建議BRAM和LUT資源的消耗不要超過80%,當然高端一點的FPGA芯片也可以放寬到90%,超過這個限制,可能就會出現時序違例較嚴重的情況,導致上板運行出現異常的情況。
今天分享一下BRAM資源使用優化策略,以Vivado的 Block Memory Generator為例 。
1、Distribute BRAM或URAM 替代BRAM
存儲深度和寬度較小,且LUT資源或URAM有富裕,可以用“Distribute BRAM”或“URAM”來替代。
這里需要注意使用的FPGA芯片型號,是否帶URAM資源。
- (* ram_style = "block" *)表示用Block RAM實現
- (* ram_style = "reg" *)表示用寄存器實現
- (* ram_style = "distributed" *)表示用分布式 RAM實現
- (* ram_style = "uram" *)表示用uram實現
這里給出代碼示例:
// FPGA 雙口 RAM
module dual_port_ram(
input clk,
input [7:0] data_in,
input [5:0] wr_addr,
input wr_en,
input [5:0] rd_addr,
output reg [7:0] data_out
);
// 聲明雙口 RAM 存儲器
(* ram_style = "block" *)reg [7:0] ram[63:0];
// 時鐘上升沿寫入
always @(posedge clk) begin
if (wr_en)
ram[wr_addr] <= data_in;
end
// 讀取;
always @(posedge clk) begin
data_out <= ram[rd_addr];
end
endmodule
2、雙口ROM替代單口ROM
如果工程中,有兩個以上的ROM或RAM使用的是相同的數據,可以使用雙口替代單口模式,資源消耗是一樣的,這樣就可以節省一個或多個ROM IP。
這里對比一下“數據寬度為32,存儲深度為1024”的單口和雙口模式下的資源消耗。
3、合理的數據寬度和深度設置
要想FPGA BRAM資源消耗優化,更關鍵的是優化FPGA工程的緩存大小設計,計算理論上緩存數據的位寬和最大深度,選擇出合適的參數。
-
FPGA
+關注
關注
1629文章
21729瀏覽量
603005 -
芯片
+關注
關注
455文章
50714瀏覽量
423152 -
ROM
+關注
關注
4文章
563瀏覽量
85732 -
資源
+關注
關注
0文章
59瀏覽量
17781 -
BRAM
+關注
關注
0文章
41瀏覽量
10956
發布評論請先 登錄
相關推薦
評論