Q;为什么要引入X态?
A:仿真可以用2态增加仿真性能,电路如果纯粹-01,有可能出现假正状态,无法描述异步电路这种亚稳态传播,0,1会稳定下来肯定在状态机下面,如果仿真不充分,可能就是假正,x态传播,就能马上发现。
不定态X的来源:
大多数设计在上电时不能保证cell的特定的逻辑状态。flip flop或memory根据环境因素,芯片间的工艺差异等可能会有不同的初始态。
在现实中不会存着真正的X逻辑值,只是cell library考虑到所有可能组合,最终无法确定输出的逻辑值。
在仿真中还有其他一些常见的不定态X来源:
•缺少仿真模型,或仿真设置中出现其他错误。
•对于testbench外部输入信号没有设置初始值
•一些锁相环时钟仿真模型输出X ,直到lock
•发生时序违例(timing violation)
•当使用back annotated时序进行仿真时,输入信号传播到之前还是不定态X
•一些cell library在任何一个输入是X时,就会输出X,即使已知输出的逻辑值。
不定态也就是unknown,或者叫亚稳态,指的是无法确定的0或1,无法确定的0或1里可能包含0与1的中间值,反正不确定。
X 是不定态, Z 是高阻态。 仿真时出现X ,应该是你的激励有问题,或者信号有冲突,就会出现'X', 修改激励或程序就可以清除。 ‘Z', 需要根据程序进行分析,有些需要上下拉,或者三态的地方,是需要看到'Z’的。
另外,真正的硬件里,是没有X态的。Z 一般也是通过开关控制进行的。 因此,这两个状态主要是为了理解硬件方便些。
链接:https://www.zhihu.com/question/278655367/answer/401561245
高阻态:高阻态可以理解为在数字电路中,I/O悬空或者电阻无限大。好比I/O连接了一个阻值巨大的电阻,理论上I/O不悬空,但实际上等效于I/O悬空。重要的是,当电路某处出现高阻态,对后续的电路是没有影响的,只是少了一个输入或者输出。不定态:在数字电路中,信号或者寄存器的赋值需要满足建立时间和保持时间。建立时间(setup-time):输入信号应该在时钟上升沿之前一段时间内到达端口保持时间(hold-time):信号在被时钟沿采到以后应当保持一段时间如果输入信号不满足建立时间和保持时间,那么电路就会进入不定态。在不定态中,你希望采到的信号为高电平,但实际你采到的可能是低电平也可能是高电平,无法预估。若采到的是低电平,该低电平会对后续的电路产生影响(因为输入错误),这个影响是不可逆的,也就是说不定态可能会引发后续电路不可逆的错误。
作者:贾贾贾
来源:知乎;链接:https://www.zhihu.com/question/278655367/answer/401561245
仿真出现X态的场景:
赋值冲突出现X
未赋值以及初始化可能出现Z
这篇文章写的挺好的:
X态详解 与 X态传播 VCS X-Propagation_xprop-CSDN博客