对多位时钟域交叉应用时序约束至关重要。如果此总线具有 set_false_path 约束,则总线上的偏移可能超过 1 个时钟周期,这可能导致功能错误。
第一个要求是两个时钟域之间没有 set_false_path 约束。如果不希望分析它们之间的路径以进行建立和保持,则可以使用 set_clock_groups,其优先级较低。
接下来,用 set_net_delay 约束路径以使其尽可能短,并用 set_max_skew 约束路径。et_max_skew 不约束拟合器,但可以在 Timing Analyzer 中针对此约束进行分析。
时钟域内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 -asynchronous -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
偏移要求取决于您的设计以及处理时钟域交叉的方式。
最后,在 Timing Analyzer 中运行“报告最大偏移汇总”和“报告网络延迟汇总”,检查时钟域交叉的时序。