如何限制我的时钟域交叉?

必须对多位时钟域交叉应用时序约束,如果此总线具有set_false_path约束,则总线上的时滞可能超过1个时钟周期,这可能导致功能错误。

第一个要求是在两个时钟域之间没有set_false_path约束,如果您不希望分析它们之间的路径进行设置和保持,那么您可以使用优先级较低的set_clock_groups。

接下来,使用set_net_delay约束路径,使其尽可能短,并使用set_max_skew 。 Set_max_skew不会约束fitter,但您可以在Timing Analyzer中分析此约束。

时钟dimain 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

实际的偏斜要求取决于您的设计以及如何处理时钟域交叉。

最后,通过在时序分析器中运行Report Max Skew Summary和Report Net Delay Summary来检查时钟域跨越的时间。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-08-02 13:55:27 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它