$setuphold 是 SystemVerilog 中的一个时序检查指令,用于在仿真中验证信号之间的时序关系。这个指令特别用于检查信号 CK 和 D 之间的 setup 和 hold 时间。
语法要点解释:
$setuphold: 这是指令的名称,用于执行 setup 和 hold 时间检查。
: 这表示正在检查 setup 时间。如果想检查 hold 时间,可以使用 。
(posedge CK:105446753233 ps, posedge D:105446753066 ps): 这部分指定了触发检查的事件和它们的时间。在这里,我们关心的是 CK 和 D 的上升沿(posedge)。CK 的上升沿发生在 105446753233 ps,而 D 的上升沿发生在 105446753066 ps。
17.1:171PS: 这部分指定了 setup 时间的检查范围。意思是 setup 时间应该大于或等于 17.1 ns。
-12.6:-126PS: 这部分指定了 hold 时间的检查范围。注意,尽管我们在这里使用了 $setuphold,但 hold 时间的检查范围也被提供了。这意味着如果仿真器支持,这个指令可能会同时检查 setup 和 hold 时间。这里,hold 时间应该小于或等于 -12.6 ns。
本句话的含义:
当 D 的上升沿发生在 105446753066 ps,并且随后 CK 的上升沿发生在 105446753233 ps 时,本指令将检查这两个信号之间的 setup 和 hold 时间。具体来说,它会验证:
D 相对于 CK 的上升沿的 setup 时间是否大于或等于 17.1 ns。
D 相对于 CK 的上升沿的 hold 时间是否小于或等于 -12.6 ns。
注意:hold 时间通常是一个正数,表示在时钟边缘之后数据必须保持稳定的时间。但在这里,-12.6 ns 似乎是一个错误或特殊用法,一个负的 hold 时间是没有意义的?