Logically exclusive时钟在设计中是同时存在的,但不能相互交互。在处理Logically exclusive时钟时,人们经常看到一个带有选择端的mux,确定哪个时钟处于有效状态。在处理Logically exclusive时钟时需要记住的一个重要准则是,Logically exclusive时钟不应该在mux之外进行交互。
考虑上图所示的电路,我们有两个时钟——CLKA和CLKB,设计要么在CLKA,要么在CLKB运行。用户可以选择使用set_case_analysis约束,并应用0或1的值在CLKA或CLKB之间进行选择;如果这样做,那么综合工具将仅使用选定的时钟进行时序分析。然而,如果选择端口不受约束,那么两个时钟都可以到达触发器的时钟引脚,两个时钟中的任何一个都可以独立用作launch或capture时钟边沿,因此时序分析将考虑所有可能的组合,以适应最坏情况的时序;换句话说,mux时钟不会自动推断为用于时序分析的exclusive时钟。因此,综合优化将考虑以下所有四种情况——
当然,两个中间场景永远不会发生。因此,为了指导综合工具只考虑CLKA → CLKA和CLKB → CLKB,并只优化这两种情况中最糟糕的情况,我们需要使用-
set_clock_groups -logically_exclusive -group CLKA -group CLKB
通过这样做,两个寄存器之间的延迟将针对CLKA → CLKA或CLKB → CLKB的最坏情况进行优化
注意:在这种情况下,我们也可以应用两个false path——
set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]
set_false_path -from [get_clocks CLKB] -to [get_clocks CLKA]