什么是x态和z态?
x态:表示Unknown,仿真发生了不能解决的逻辑冲突。
z态:表示HiZ、High Impedance、Tri-State、Disabled Driver。
在 Verilog 中,IC设计工程师使用 RTL 构造和描述硬件行为。但是 RTL 代码中的一些语义,并不能够准确地为硬件行为建模。Verilog 中定义了 4 种不同的逻辑值:1、0、X 和 Z,1 和 0 是真实存在的逻辑电平,Z 表示高阻态,X 表示未知态。
X 态的存在使得仿真结果要么太过于乐观,要么太过于悲观。因此 X 态如何通过 RTL 级和门级仿真模型中的逻辑进行传播的,是需要特别关注的。为此,还产生了两种观念, X-optimism 和 X-pessimism。前者将 X 值转换为 0 或 1,后者将 X 值一直传播出去。
X 态产生的原因主要分为以下几种情况:
四值变量、寄存器和锁存器未初始化
模块输入端口未连接
总线争用
超出范围的位选择和数组索引
setup/hold timing violation
testbench 中注入 X 态
VCS 对于 RTL 仿真提供了支持 X-Propagation 的选项,因为 RTL 仿真偏向于乐观,导致一些 X 态传播的 bug,无法在正常的 RTL 仿真阶段发现。但是在 Gate-level 仿真时会暴露出来,因为 Gate-level 仿真也更接近实际硬件行为。
什么是X态传播?
原文链接: https://xie.infoq.cn/article/fca379597a14aaa6472e4e719
条件信号为X不定态时if-else,case,assign语句的不同传递规定
当条件信号(例中为in)出现不定态X时,if-else, case, assign 语句对其的传递规定不相同。
只有 assign 连续幅值语句,可以将不定态传播到输出位置。
assign 可以传递条件信号的不定态,如此便易于在前仿真的时候就发现一些设计上的错误,几种语句可以看需求与场景按实际条件选用。