在PR后仿时,经常会遇到讨厌的红色X(不定态)。而debug不定态的起因又很麻烦,有可能用Verdi调试半天还是没能找到根本的原因。
今天我们就来分析一下异步D触发器采样不稳定(setup或hold时序不满足)引起的不定态,及后仿时的处理方法。跨时钟域采样或者时钟域同步电路的第一级D触发器,就是典型的可能会出现不定态的情况,如下图所示。
而设计中似乎又没法避免这种电路。由于clk_a
和clk_b
是异步的,所以图中的DFF2就无法保证setup和hold时序关系。所以在后仿时就需要设置DFF2为notimingcheck。假设DFF2的路径为tb.dut.u_dff2_reg
。
在cadence的Incisive(NC)中,用-tfile <file>
来指定。
1. Incisive仿真增加参数
代码语言:txt复制-tfile notimingcheck.tfile
2. 编辑notimingcheck.tfile文件
代码语言:txt复制PATH tb.dut.u_dff2_reg -tcheck
在synopsys的vcs中,用 optconfigfile <file>
来指定。
- vcs仿真增加参数
optconfigfile notimingcheck.cfg
- 编辑notimingcheck.cfg文件
instance {tb.dut.u_dff2_reg} {noTiming};
如果有多个异步D触发器,就写多行,一行写一条约束。
注意:
notimingcheck本质就是指定不检查局部的timing关系,所以在使用之前一定要确认这条路径是不是真正的异步关系,否则可能隐藏了背后的BUG。