同步時鐘是彼此聯絡的時鐘。例如,由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的靜態時鐘分析工具會自動的設定路徑的時序。
同步時鐘是彼此聯絡的時鐘。例如,由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的靜態時鐘分析工具會自動的設定路徑的時序。