编写 CDC 约束时,请验证是否遵循相应的优先顺序。如果在 2 个时钟之间至少 1 条路径上使用 set_max_delay -datapath_only
,那么无法在相同时钟之间使用 set_clock_groups
约束,并且只能在 2 个时钟之间的其他路径上使用 set_false_path
约束。
在下图中,时钟 clk0
的周期为 5 ns,并且与 clk1
之间处于异步关系。从 clk0
域到 clk1
域存在两条路径。第 1 条路径为 1 位数据同步。第 2 条路径为多位格雷编码总线传输。
图 1. 2 个异步时钟之间的多次交互
设计师判定格雷编码总线传输需要“Max Delay Datapath Only”(仅最大延迟数据路径)来限制比特间延迟变动,因此无法在时钟之间直接使用“Clock Group”(时钟组)或“False Path”(伪路径)约束。而改为必须定义以下 2 个约束:
set_max_delay -from [get_cells GCB0[*]] -to [get_cells [GCB1a[*]] \
-datapath_only 5
set_false_path -from [get_cells REG0] -to [get_cells REG1a]
无需设置从 clk1
到 clk0
的伪路径,因为在此示例中不含任何路径。