建立时间和保持时间的概念都是出现在同步电路的设计中。
对于异步复位的触发器来说,异步复位信号也需要满足 recovery time(恢复时间)和 removal time(去除时间),才能有效的复位和释放复位,防止出现亚稳态。
释放复位时,复位信号在时钟有效沿来临之前就需要提前一段时间恢复到非复位状态,这段时间为 recovery time。类似于同步时钟下触发器的 setup time。
复位时,复位信号在时钟有效沿来临之后,还需要在一段时间内保持不变,这段时间为 removal time。类似于同步时钟下触发器的 hold time。
recovery 与 removal time 示意图如下所示。
系统任务 $recovery 与 $removal 分别用于 recovery 和 removal time 的检查,用法如下:
$recovery (ref_event, data_event, recovery_limit) ;
- ref_event: 用于检查的参考信号,一般为清零或复位信号跳变沿;
- data_event: 被检查的信号,一般为时钟信号跳变沿。
- recovery_limit:设置的最小 recovery time。
当 ref_event (reset) < data_event (clock) 且 T(data_event - ref_event) < recovery_limit 时,即复位信号在时钟信号到来之前如果不满足 recovery time,则报告中会打印 violation。
$removal (ref_event, data_event, removal_limit) ;
- ref_event: 用于检查的参考信号,一般为清零或复位信号跳变沿;
- data_event: 被检查的信号,一般为时钟信号跳变沿。
- removal_limit:设置的最小 removal time。
当 ref_event (reset) > data_event (clock) 且 T(ref_event - data_event) > removal_limit 时,即复位信号在时钟信号到来之后如果不满足 removal time,则报告中会打印 violation。
Verilog 提供了同时检查 revomal 和 recovery 的系统任务:
$recrem (ref_event, data_event, recovery_limit, removal_limit);