仔细讨论下逻辑互斥和物理互斥的区别。
logical exclusive
如果一个电路中有两个 clock, 但是有一个选择信号控制这两个 clock,如下图:
这样的两个 clock 是应该声明成 logical exclusive 的,命令如下:
create_clock -period 10 -name C1 -waveform {0 5} [get_ports C1] create_clock -period 20 -name C2 -waveform {0 12} [get_ports C2] set_clock_groups -logically_exclusive -group C1 -group C2
physical exclusive
如果两个 clock 定义在同一个端口上,那么这两个 clock 在物理层面就是不可能同时存在的,此时就需要声明成 physical exclusive
比如在如下电路中,由于 C1 C2 在 F3 F4 之间是有交互的,而在 F1 F2 之间,只能是 C1-C1 或者 C2-C2,不可能出现 C1-C2 或 C2-C1
这时就需要在 MUX 的输出端创建两个 generated clock,然后声明成 physical exclusive
create_clock -period 10 -name C1 -waveform {0 5 } [get_ports C1] create_clock -period 20 -name C2 -waveform {0 12} [get_ports C2] create_generated_clock -name GC1 -divide_by 1 \ -source [get_pins mux1/A] [get_pins mux1/Z] -combinational create_generated_clock -name GC2 -divide_by 1 \ -source [get_pins mux1/B] [get_pins mux1/Z] -combinational -add set_clock_groups -physically_exclusive -group GC1 -group GC2