在本篇博文中,我們來聊聊“RQS_CLOCK-12”時鐘設置建議以及它如何幫助達成時序收斂。
要求:
掌握如何生成和應用 report_qor_suggestions。
基本掌握 CLOCK_LOW_FANOUT 約束。
RQS_CLOCK-12:
RQS_CLOCK-12 建議屬于專為 UltraScale 和 UltraScale+ 器件生成的自動增量式友好建議。
它使用“CLOCK_LOW_FANOUT”屬性,并將該屬性分配給時鐘信號線或者一組寄存器,由全局時鐘緩沖器根據其負載數目來驅動。
將該屬性應用于時鐘信號線時,全局時鐘緩沖器的負載將被約束并放置到單個時鐘區域內。
將該屬性應用于一組寄存器時,在 opt_design 期間創建的現有全局時鐘緩沖器的基礎上,還會并行復制一個全新的全局時鐘緩沖器。新全局時鐘緩沖器的負載僅適用于該屬性應用到的各組寄存器,并約束到單個時鐘區域。
現在我們來看看 RQS_CLOCK-12 建議如何應用 CLOCK_LOW_FANOUT 來降低時鐘偏差,進而幫助設計達成時序收斂。
假設已布線的設計中存在如下兩個場景,其中存在錯誤的時鐘偏差,導致從寄存器到全局緩沖器的控制管腳 (CE/CLR) 的路徑上存在時序違例。
場景 1:
在這條時序收斂失敗的路徑中,時鐘緩沖器 BUFGCE1 (clockout3_buf)、寄存器及其驅動程序 BUFGCE2 (bufce_i) 全都布局在同一個時鐘區域內。驅動寄存器的 BUFGCE1 存在高扇出 (6419),且負載導致其時鐘信號線遍布整個器件,如圖高亮所示。
該工具所選的 CLOCK_ROOT 位置遠離驅動它的全局時鐘緩沖器,導致時鐘信號線延遲過高且時鐘偏差過高。
場景 1 的解決辦法:
對寄存器應用 CLOCK_LOW_FANOUT,這樣即可復制 opt_design 期間創建的原始 BUFGCE1 以創建新的 BUFGCE (clkout3_buf_replica),且僅將其用于驅動此關鍵寄存器。這樣將把信號線約束到單個時鐘區域內,從而減少時鐘信號線延遲。
并且,由于時鐘源和負載都位于相同時鐘區域內,CLOCK_LOW_FANOUT 會強制將 clock root(時鐘根)包含在相同時鐘區域內,從而幫助降低時鐘偏差。
對關鍵寄存器應用CLOCK_LOW_FANOUT后的板級原理圖:
在 opt_design 的 BUFG 最優化階段,在為 CLOCK_LOW_FANOUT 屬性創建的全局時鐘緩沖器上應該會顯示一條消息。
例如:
語法:
場景 2:
在這條時序收斂失敗的路徑中,時鐘緩沖器 BUFGCE1 (clkout1_BUFG_inst)、寄存器及其驅動程序 BUFGCE2 同樣全都布局在同一個時鐘區域內。BUFGCE1 驅動寄存器的扇出較低 (16),但負載分布于多個時鐘區域(以紅色標記)。由此導致該工具所選的 CLOCK_ROOT 不同于驅動它的全局時鐘緩沖器,進而導致時鐘信號線延遲過高且時鐘偏差過高。
場景 2 的解決辦法:
當BUFGCE1扇出較低 (<2000) 但時鐘負載遍布多個時鐘區域時,對?BUFGCE1?直接驅動的時鐘信號線應用?CLOCK_LOW_FANOUT?即可將其所有負載的布局都約束到單個時鐘區域內。這將減少時鐘信號線延遲。
現在,時鐘源和負載都位于相同時鐘區域內,因此CLOCK_LOW_FANOUT會強制將clock root包含在相同時鐘區域內,從而幫助降低時鐘偏差。
對時鐘信號線應用CLOCK_LOW_FANOUT后的板級原理圖:
語法:
總結:
在本篇博文中,我們學習了 2 個設計示例,其中演示了如何生成 RQS_CLOCK-12 建議以將 CLOCK_LOW_FANOUT 屬性應用于由全局時鐘緩沖器直接驅動的寄存器或時鐘信號線。
審核編輯:湯梓紅
-
寄存器
+關注
關注
31文章
5317瀏覽量
120001 -
緩沖器
+關注
關注
6文章
1917瀏覽量
45449 -
時鐘
+關注
關注
10文章
1720瀏覽量
131360 -
信號線
+關注
關注
2文章
168瀏覽量
21421
原文標題:開發者分享|RQS 設計收斂建議 ID RQS_CLOCK-12
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論