現在的硬件設計中,大量的時鐘之間彼此相互連接是很典型的現象。為了保證Vivado優化到關鍵路徑,我們必須要理解時鐘之間是如何相互作用,也就是同步和異步時鐘之間是如何聯系。
同步時鐘是彼此聯系的時鐘。例如,由MMCM或PLL生成的兩個相同周期的時鐘是典型的同步時鐘。如果MMCM或PLL生成了不同周期的時鐘,那么我們最好把他們當作異步時鐘處理,需要用到相應的同步技術。你可以通過運行report_clock_interaction生成報告,然后看報告中的“Path Req (WNS)”列、“Clock Pair Classification”列和 “Clock Pair Classification”列可以容易的辨別出同步時鐘。下面是3個場景,你需要使用合適的時鐘約束處理異步時鐘之間的關系。
1. 如果時鐘互聯報告有很多(或者一個)紅色的"Timed (unsafe)" 或者還有桔色的"Partial False Path (unsafe)"方框,那你應該是沒有正確地對異步時鐘約束。如果你的設計中有大量的跨時鐘域的異步時鐘,那么你需要對那些時鐘互聯約束。
2. 在時鐘互聯報告中看"Clock Pair Classification" 和 "Inter-Clock Constraints"這兩列。如果時鐘對類型是"No Common Clock" 或者 "No Common Period"或者Inter-clock約束顯示"Timed (unsafe)",就要把這種互聯當作異步時鐘。
3. 如果“Path Requirement (WNS)”列顯示時序非常緊,典型的是小于1ns,或者“Inter-Clock Constraints”列標記為時序“Unsafe”,或者“Partial False Path (unsafe)”,那么你需要把這種時鐘互聯看作異步時鐘。
如果“WNS Path Requirement (ns)”這一列的值是合理的(>1 ns), 并且"Inter-Clock Constraints”是滿足的,同時,“Clock Pair Classification”是“干凈”的,那么這樣的時鐘互聯可以被看作是同步的,你不需要添加任何時序約束。時序工具會自動的把那些路徑當作同步路徑處理。
為了正確約束跨時鐘域的路徑,需要考慮以下4個方面:
1. 如果兩個時鐘之間沒有路徑,在兩個時鐘之間可以簡單的使用set_clock_groups 或者set_false_path約束
2. 如果跨時鐘域路徑都是一位的,那么你可以在兩個時鐘之間使用set_clock_groups 或者 set_false_path。
3. 如果路徑都是多位的路徑,你需要考慮延遲和數據位的偏移,然后使用set_max_delay –datapath_only 和set_bus_skew約束。
4. 如果在兩個時鐘域之間存在單位和多位混合的跨時鐘域路徑,那么對于單位的跨時鐘域路徑要明確的對每一條路徑設置偽路徑來約束,對于多位的跨時鐘域路徑,使用set_max_delay –datapath_only 和 set_bus_skew約束。
如果時鐘是同步的,不需要任何約束。vivado的靜態時鐘分析工具會自動的設定路徑的時序。
-
異步時鐘
+關注
關注
0文章
17瀏覽量
9404
發布評論請先 登錄
相關推薦
評論