將時序約束應用於多位頻率域交叉至關重要。如果此總線具有 set_false_path 約束,則總線上的偏差可能超過1個時鐘週期,這可能會導致功能錯誤。
第一個要求是兩個時鐘域之間沒有 set_false_path 約束。如果不希望分析它們之間的路徑以進行設置和保持,則可以使用 set_clock_groups,其優先順序較低。
接下來,使用 set_net_delay 約束路徑以使它們盡可能短,並使用 set_max_skew. set_max_skew 不會約束擬合者,但您可以在時序分析器中針對此約束進行分析。
時鐘域clk_a中的data_a和時鐘域clk_b中的data_b之間的時鐘域約束可能如下所示。
create_clock -name clk_a -period 4.000 [get_ports {clk_a}]
create_clock -name clk_b -period 4.500 [get_ports {clk_b}]
set_clock_groups -異步 -group [get_clocks {clk_a}] -group [get_clocks {clk_b}]
set_net_delay -from [get_registers {data_a[*]}] -to [get_registers {data_b[*]}] -max -get_value_from_clock_period dst_clock_period -value_multiplier 0.8
set_max_skew -from [get_keepers {data_a[*]}] -to [get_keepers {data_b[*]}] -get_skew_value_from_clock_period min_clock_period -skew_value_multiplier 0.8
偏斜要求將取決於您的設計以及您如何處理時鐘域交叉。
最後,通過在時間分析器中運行「報告最大偏差摘要」和「報告淨延遲摘要」來檢查時鐘域交叉的計時。