引言:
UltraRAM 原語(也稱為 URAM)可在 Xilinx UltraScale +? 架構(gòu)中使用,而且可用來高效地實現(xiàn)大容量深存儲器。
由于大小和性能方面的要求,通常這類存儲器不適合使用其他存儲器資源來實現(xiàn)。
URAM 原語具有實現(xiàn)高速內(nèi)存訪問所需的可配置流水線屬性和專用級聯(lián)連接。 流水線階段和級聯(lián)連接是使用原語上的屬性來配置的。
本篇博文描述的是通過將 URAM 矩陣配置為使用流水線寄存器來實現(xiàn)最佳時序性能的方法。
注意:本文由 Pradip K Kar、Satyaprakash Pareek 和 Chaithanya Dudha 共同撰寫。
流水線需求:
通過在矩陣結(jié)構(gòu)中連接多個 URAM,從可用的 URAM 原語實現(xiàn)大容量深存儲器。
矩陣由 URAM 的行和列組成。一列中的 URAM 使用內(nèi)置級聯(lián)電路級聯(lián),且多列 URAM 通過外部級聯(lián)電路互連,這被稱為水平級聯(lián)電路。
作為示例,圖 1 示出了針對 64K 深 x 72 位寬存儲器的 4x4 URAM 矩陣的矩陣分解。
圖 1:4 行 4 列的 URAM 矩陣(可實現(xiàn) 64K 深 72 位寬的存儲器)
在沒有流水線設(shè)計的情況下,深度聯(lián)結(jié)構(gòu)會導(dǎo)致內(nèi)存訪問出現(xiàn)大的時鐘輸出延遲。 例如,在默認(rèn)情況下,上述 URAM 矩陣可以達(dá)到約 350 MHz。要以更快的速度訪問內(nèi)存,應(yīng)插入流水線。如果在網(wǎng)表中指定了一定數(shù)量的輸出時延,Vivado Synthesis 即會自動實現(xiàn)此功能。
指定 RTL 設(shè)計中的流水線:
有兩種方法可以用來指定 RTL 設(shè)計中的流水線的用途,可以通過使用 XPM 流程,也可以通過行為 RTL 來推斷內(nèi)存。
如果 RTL 設(shè)計通過 XPM 流程來創(chuàng)建 URAM 內(nèi)存,則用戶可以將對流水線的要求指定為 XPM 實例的參數(shù)。參數(shù)“READ_LATENCY_A/B”用于捕獲內(nèi)存的時延要求。
可用的流水線階段數(shù)是 LATENCY 值減去 2。 例如,如果 Latency 設(shè)置為 10,則允許 8 個寄存器階段用于流水線操作。另外兩個寄存器可用來創(chuàng)建 URAM 本身。
圖 2:使用 XPM 設(shè)置流水線設(shè)計
如果用戶使用 Vivado 用戶指南中提供的模板來編寫 RTL,并通過此方法來創(chuàng)建 URAM,那么,他們可以在 URAM 的輸出時創(chuàng)建盡可能多的寄存器階段。唯一的要求是,與數(shù)據(jù)一起,流水線寄存器的啟用也需要流水線化。
圖 3 顯示數(shù)據(jù)和流水線的啟用。
圖 3:URAM 塊輸出時的數(shù)據(jù)及流水線啟用規(guī)范
圖 4 示出了 RTL 級 RAM 流水線設(shè)計示例。
圖 4:用來指定數(shù)據(jù)和流水線啟用的 verilog 模板
分析日志文件:
Vivado Synthesis 根據(jù)上下文環(huán)境和場景發(fā)布與 URAM 流水線相關(guān)的不同消息。下表說明要在 vivado.log 文件中查找的一些消息和要采取的相應(yīng)操作。
請注意,推薦的流水線階段基于可實現(xiàn)最高性能 (800 MHz+) 的完全流水線化的矩陣。此建議不受實際時序約束的限制。
情況 | 消息 | 操作 |
無流水線設(shè)計的 URAM | WARNING: [Synth 8-6057] Memory: "uram00/ram1/mem_reg" defined in module: "top_sp_no_pipe" implemented as Ultra-Ram has no pipeline registers. It is recommended to use pipeline registers to achieve high performance | 增加時延或插入一些流水線階段。 |
URAM 嚴(yán)重受流水線限制 | CRITICAL WARNING: [Synth 8-6013] UltraRAM uram00/ram1/mem_reg is under-pipelined and may not meet performance target :?Pipeline stages found = 1; Recommended pipeline stages =8 | 增加時延或插入一些流水線階段。 |
帶有合理流水線設(shè)計的 URAM | INFO: [Synth 8-5813] UltraRAM uram00/ram1/mem_reg:?Pipeline stages found = 4; Recommended pipeline stages =8 | 檢查是否滿足時間要求。如果不滿足性能,則增加時延。 |
流水線多于需要的 URAM | INFO: [Synth 8-5813] UltraRAM uram00/ram1/mem_reg:?Pipeline stages found = 10; Recommended pipeline stages =8 | 減少時延,否則 FF 利用率將顯著增加。 |
流水線設(shè)計結(jié)果 | INFO: [Synth 8-5814] Pipeline result for URAM (uram00/ram1/mem_reg): Matrix size= (4 cols x 4 rows) | Pipeline stages => ( available = 10, absorbed = 8 ) | ? |
時間性能估計:
下表說明流水線寄存器的數(shù)量與可實現(xiàn)的最大估計頻率之間的關(guān)系。
請注意,實際的時間數(shù)仍將取決于最終地點和路線結(jié)果。
下列數(shù)字基于 speedgrade-2 Virtex? UltraScale+? 部件以及我們使用 4x4 矩陣實現(xiàn)的 64K x 72 URAM 示例工程。
流水線階段 | URAM 中吸收的流水線 | 所用流水線資源 | 關(guān)鍵路徑上的數(shù)據(jù)路徑延遲 (ns) | 估計的最大頻率 |
0 | 0 | 不適用 | 2.7 | 370 MHz |
1 | 1/1 | OREG | 2.15 | 465 MHz |
2 | 2/2 | OREG,F(xiàn)DRE | 1.632 | 612 MHz |
4 | 4/4 | OREG,REGCAS,F(xiàn)DRE,IREG_PRE | 1.376 | 726 MHz |
6 | 6/6 | OREG,REGCAS,F(xiàn)DRE,IREG_PRE | 1.376 | 726 MHz |
8 | 8/8 | OREG,REGCAS,F(xiàn)DRE,IREG_PRE | 1.1 | 909 MHz |
10+ | 8/10+ | OREG,REGCAS,F(xiàn)DRE,IREG_PRE | 1.1 | 909 MHz |
數(shù)據(jù)路徑延遲具有以下一個或多個組件。
Tco = 1.38 ns, Clk To CascadeOut on URAM
Tco = 0.82 ns, Clk To CascadeOut on URAM with OREG=true
Tco = 0.726 ns, Clk to Dataout on URAM with OREG=true, CASCADE_ORDER = LAST
URAM -> URAM 級聯(lián)延遲 = 0.2 ns
URAM -> LUT 信號網(wǎng)絡(luò)延遲 = 0.3 ns
LUT 傳輸延遲 = 0.125 ns
LUT -> LUT 信號網(wǎng)絡(luò)延遲 = 0.2 ns
LUT5 -> FF 延遲 = 0.05
結(jié)論:
URAM 原語是創(chuàng)建容量非常大的 RAM 結(jié)構(gòu)的有效方法。 它們被設(shè)置為易于級聯(lián)以便在您的設(shè)計中創(chuàng)建容量更大的 RAM。
但是,太多這類結(jié)構(gòu)級聯(lián)在一起可能會通過 RAM 產(chǎn)生很大的延遲。從長遠(yuǎn)來看,花時間讓您的 RAM 完全流水線化會帶來很多好處。
URAM 原語是創(chuàng)建容量非常大的 RAM 結(jié)構(gòu)的有效方法。 它們被設(shè)置為易于級聯(lián)以便在您的設(shè)計中創(chuàng)建容量更大的 RAM。
但是,太多這類結(jié)構(gòu)級聯(lián)在一起可能會通過 RAM 產(chǎn)生很大的延遲。從長遠(yuǎn)來看,花時間讓您的 RAM 完全流水線化會帶來很多好處。
評論
查看更多