考虑上图所示的例子,我们有多个时钟。
PLL正在生成一个名为CLKA的主时钟,频率为3 GHz,有4个分频器从主时钟中生成频率分别为333.3 MHz、500 MHz、750 MHz和1 GHz的CLKB、CLKC、CLKD和CLKE。由于所有这些时钟都来自同一个时钟源,它们都是相互同步的。
我们IP的时钟是CLKC,但输入是从IP-2中的CLKB启动的,输出由不同的时钟捕获——IP-3中的CLKD和CLKE。
约束输入端口
假设FF-3的CK到Q延迟为0.05ns,combo logic-4引起的延迟为0.5ns,FF-1的setup时间为0.1ns。
驱动启动触发器的时钟是CLKB,而我们IP的时钟是CLKC。我们首先为我们的IP创建了周期为2ns(相当于CLKC的500 MHz频率)的时钟,并将其应用于我们的输入端口CLKC-
create_clock -period 2 [get_ports CLKC]
然后,我们创建一个3ns的虚拟时钟(对应于CLKB的333.3 MHz频率),该时钟可用作输入延迟的参考时钟,并将虚拟时钟命名为CLKB-
create_clock -period 3 -name CLKB
现在,我们只需指定相对于虚拟时钟CLKB的输入延迟,然后将其应用于我们的输入端口Input1 –
set_input_delay -max 0.55 -clock CLKB [get_ports Input1]
现在让我们看看综合工具如何确定涉及combo logic-1的setup时序检查。
当面对具有多个时钟的时序路径时,该工具做的第一件事就是推导base周期。base周期被定义为所涉时钟周期的最小公倍数。对于2ns和3ns的时钟周期,最小公倍数为6ns。base周期的意义在于,它代表了具有各个时钟波形关系的最小时间。如下图所示,两个时钟在0ns时启动,在6ns时再次上升。基本上,0-6ns之间的时钟波形将与6-12ns、12-18ns等之间的波形相同;这意味着该工具只需要找到0-6ns之间的最坏情况,这将定义所有时钟周期的最坏情况。
由于0-6ns之间有多个launch和 capture时钟边沿,以下是该工具如何找出最坏的情况——在我们的示例中,CLKB是启动时钟,因此第一个启动边沿发生在0ns,CLKC的第一个捕获边沿发生在2ns,因此第一个有效时钟周期是2ns。CLKB的下一个可能的launch边沿发生在3ns,下一个capture CLKC边沿发生在4ns,因此这个有效时钟周期为1ns,小于2ns。由于在0-6ns内没有进一步的launch- capture关系,因此最坏的情况是1ns。
因此,为了满足setup timing-
→
(Delay due to combo logic-1) ≤ {(worst effective clock period) – (setup time of FF-1) – (Input delay)}
→
因此combo logic-1组合逻辑-1可以引入的最大可能延迟是0.35ns。
约束输出端口