如果有 2 个或更多个时钟驱动到某 1 个多路复用器(或者更普遍的情况下,驱动到组合单元内)中,这些时钟全部都能顺利完成传输,并在单元扇出上重叠。实际上,每次只能传输 1 个时钟,但时序分析允许同时报告多种时序模式。
因此,您必须审查 CDC 路径,并添加新约束,以忽略部分时钟关系。正确的约束取决于设计中时钟交互的方式和位置。
下图演示了 2 个时钟驱动到同一个多路复用器中的示例,并演示了在此多路复用器前后这 2 个时钟之间可能发生的交互。
图 1. 多路复用时钟
- 路径 A、B 和 C 都不存在的情况
clk0
和clk1
仅在多路复用器(FDM0 和 FDM1)的扇出中交互。毋庸置疑,时钟组约束可直接应用到clk0
和clk1
中。set_clock_groups -logically_exclusive -group clk0 -group clk1
- 仅存在路径 A、B 或 C 之一的情况
clk0
和/或clk1
与多路复用时钟直接交互。为了保留时序路径 A、B 和 C,无法直接向clk0
和clk1
直接应用约束。而是改为必须将其应用于多路复用器的扇出中需要额外的时钟定义的时钟部分。create_generated_clock -name clk0mux -divide_by 1 \ -source [get_pins mux/I0] [get_pins mux/O] create_generated_clock -name clk1mux -divide_by 1 \ -add -master_clock clk1 \ -source [get_pins mux/I1] [get_pins mux/O] set_clock_groups -physically_exclusive -group clk0mux -group clk1mux