亚稳态

跨时钟域

多级触发器同步技术

image-20240521200646179

虚拟时钟(Virtual Clocks)

需要虚拟时钟是因为DUA的时钟和驱动DUA输入端口的时钟之间有延迟。

以下图为例,DUA(design under analysis)的时钟来自CLK_CORE,但是驱动输入端口(ROW_IN)的时钟是CLK_SAD。如何指定输入端口ROW_IN和输出端口STATE_O的IO约束?

image-20240519152948738

定义没有源端口或源引脚的虚拟时钟。在这个例子里,为CLK_SAD和CLK_CFG定义虚拟时钟。

1
2
3
create_clock -name VIRTUAL_CLK_SAD -period 10 -waveform {2 8}
create_clock -name VIRTUAL_CLK_CFG -period 8 -waveform {0 4}
create_clock -period 10 [get_ports CLK_CORE]

再相对于这些虚拟时钟定义IO约束(IO constraints)。2.7=CK->Q + Tc1;4.5=Tc2+Tsetup。

1
2
set_input_delay -clock VIRTUAL_CLK_SAD -max 2.7  [get_ports ROW_IN]
set_output_delay -clock VIRTUAL_CLK_CFG -max 4.5 [get_ports STATE_O]
image-20240519154216185 image-20240519154720667

如上图所示,DUA的输入路径被约束为5.3ns,输出路径被约束为3.5ns。

虚拟时钟只是一种用来约束IO的方法。