1、仿真pattern自身原因,比如程序使用了未初始化(写)的存储区,读出红X的数据并使用,导致红X传播;
2、仿真环境或者平台原因,模型或者整chip顶层PIN脚的信号没有驱动,是高阻Z态,进入数字逻辑内部变成红X传播;
3、DFF、gating cell等由于setup/hold不满足,或者rst信号的recovery/removal不满足,或者异步逻辑同步的第一拍DFF,产生红X引起传播;
4、信号的电平宽度比这个cell的门延时还短的时候,信号经过这个cell后的输出是红X
5、不带复位端的DFF引起X传播
6.若某些寄存器时钟的gating信号的latch clk输入初始状态为1,导致latch在上电后一直为1,而latch是:电平触发,为1是保持为0是通过;而时钟一直为1,导致自上电开始一直保持,导致latch没有被复位过,输出就会是X态,然后寄存器输出X态,若寄存器与系统有关,导致系统跑飞(跑红)。
例如:I2C时钟引起的,初始为1,无时钟方案参与了寄存器gating,由于latch是1保持,0通过,I2C时钟从来没拉低过,导致LATCH从复位开始一直保持,没被复位过导致寄存器输出出问题;
解决方法,就是上电的时候force I2C时钟为0再force 1。就可以了
X态也就是亚稳态,他是会传播的:亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。