1. 前言
在上一篇文章里《如何使用UltraScale+芯片中UltraRam資源》,我們向大家介紹了在RTL設計中使用URAM的方法。其中,我們推薦大家使用Xilinx參數化宏(XPM)的方法來調用URAM。通過XPM調用的URAM的方法如下:
在模板中選擇“Verilog”->“Xilinx Parameterized Macros (XPM)”->“XPM”->“XPM_MEMORY” ->“Simple Dual Port Ram”
用戶必須在MEMORY_PRIMITIVE類屬上指定值 ”ultra”,以明確指示vivado 綜合使用 UltraRam。
那么問題來了,還有個參數“READ_LATENCY_A/B”該設多少?這個參數影響URAM的讀操作需要滯后多少時鐘周期才能將讀數據輸出。
2. 級聯URAM須知
單個URAM器件的數據位寬為72bit,地址深度為4096,存儲容量為288Kb。因此,當用戶需要大于288Kb存儲容量空間時,需要級聯多個URAM器件。在Kintex UltraScale+和Zynq UltraScale+器件中,級聯得到的RAM陣列可高達36Mb,在Virtex UltraScale+系列中,所有UltraRAM列都可通過光纖路由連接在一起,在最大器件中可構成容量達360Mb的存儲器陣列。
下圖展示了一個4 x 4的URAM陣列級聯結構,在縱向的一列中,每個URAM使用內置級聯電路進行級聯。在橫向多列之間,URAM通過外部級聯電路進行互連,即水平級聯電路。
但是,URAM和Bram (block ram)不太一樣。在工作時鐘頻率不變情況下,深度級聯URAM陣列會使得數據輸出延遲越來越大,因為需要在級聯的URAM模塊中插入多級流水線,以保證模塊能時序收斂。
同樣,想保證輸出延遲固定,級聯越多的URAM會導致整個級聯的URAM可工作的時鐘頻率越低。
因此,我們需要謹慎的設置“READ_LATENCY_A/B”參數,來保證級聯的URAM模塊能按自己的需求時序收斂并正常地工作。
注意: 如果使用XPM來調用URAM模塊,則URAM內部可用的流水線階數是設定的LATENCY值減去2。例如,如果“READ_LATENCY_A/B”參數設為10,則允許8個寄存器階段用于流水線操作。
3. URAM性能估計
從上文,我們知道,LATENCY值的設置取決于URAM級聯的深度、工作頻率。下表以4x4的URAM矩陣為例,總結了流水線級數與可實現的最大工作頻率之間的關系。
注: 實際的延遲仍取決于設計中最終的布局布線結果。
注: 下表是基于Virtex UltraScale+ speed -2器件為基礎給的結果。
注: 該級聯的URAM陣列最大只支持8級流水線**。**
注: LATENCY取值為表中流水級數值加2。
4. 檢查設計是否達到最優時序
第3節中的表只是一個參考,讓大家大致了解級聯的流水線級數、輸出延遲、工作頻率之間的關系。如果我已經完成了設計,指定好了“READ_LATENCY_A/B”參數的值,如何確定該延遲值是否設置的最優呢?
Vivado工具是提供了相應的綜合報告來告知工程師級聯的URAM模塊是否能到達最優時序。工程師在Vivado的GUI里,選中“Messages”一欄,查找有關URAM的提示。
一般提示如下,對應的解決方法附在其后:
相信經過這兩篇文章總結,大家在如何使用URAM問題上應該不會有太多的疑惑。
5.總結
本文向大家介紹了如何通過XPM調用URAM,并讓級聯URAM獲得最佳時序性能,如果覺得我們原創或引用的文章寫的還不錯,幫忙點贊和推薦吧,謝謝您的關注。
-
芯片
+關注
關注
456文章
50879瀏覽量
424133 -
Xilinx
+關注
關注
71文章
2167瀏覽量
121551 -
RTL
+關注
關注
1文章
385瀏覽量
59827 -
時序
+關注
關注
5文章
388瀏覽量
37346 -
UltraScale
+關注
關注
0文章
118瀏覽量
31475
發布評論請先 登錄
相關推薦
評論