写点什么

什么是 X 态传播?

作者:Java-fenn
  • 2022 年 9 月 12 日
    湖南
  • 本文字数:1447 字

    阅读完需:约 5 分钟

在 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 仿真也更接近实际硬件行为。

我们知道越早的发现 bug,所消耗的成本也越低的,故 VCS 的 X-Propagation 功能可以更接近 Gate-level 的 X 态传播行为,是一种在后仿之前 debug 的低成本仿真策略。

通常使用带 xprop 的仿真选项为:

vcs -xprop[=tmerge|xmerge|xprop_config_file]

[-xprop=flowctrl]

[-xprop=nestLimit=<limit>]

other_vcs_options

这里就不深入介绍各个选项了,而是介绍三种 merge mode:

vmerge mode : 就是 Verilog 协议规定的 X 态处理行为;

tmerge mode : 更接近 Gate-level 仿真,也就是实际硬件行为;

xmerge mode

 : 相比 tmerge mode

,对于 X 态的处理更悲观;

下面举几个实例来看看这三种 mode 的具体区别

  • if 语句

always @*    if(s)      r=a;    else      r=b;
复制代码



在 vmerge 模式下,使用标准的 HDL 模拟语义。当控制信号 s 未知时,输出信号 r 总是被赋给 else 语句的值。此时 r 的值与信号 b 相同。

在 tmerge 模式下,当控制信号 s 未知时,如果输入信号 a 和 b 同,则 r 的值与 a(或 b) 相同。如果 a 和 b 不相同,则 r 的值为 X。

在 xmerge 模式下,当控制信号 s 未知时,输出信号 r 的值始终为 X。

  • case 语句

  • case (s) 1'b0: r=a; 1'b1: r=b; endcase



在 vmerge 模式中,使用标准的 HDL 模拟语义。当控制信号 s 未知时,输出信号 r 的值与执行 case 语句之前保持一致。

在 tmerge 模式中,当控制信号 s 未知时, 如果 a 和 b 相同,r 的合并和最终值与 a 和 b 相同。如果 a 和 b 不相同,r 的合并和最终值为 X。

在 xmerge 模式下,当控制信号 s 未知时,输出信号 r 的值始终为 X。

  • 边沿敏感表达式

在标准的 Verilog 中,对于时钟信号中以下值的变化会触发上升沿转换:

0 -> 10 -> X0 -> ZX -> 1Z -> 1
复制代码

如果 X 被认为是 0 或 1 值,那么在 0 -> X 转换中,X 可能表示 0 值,这表示没有转换。X 可以表示 1 值,此时表示上升沿。Xprop 仿真考虑了这两种行为并合并了结果。

以下为一个低有效复位的 D 触发器示例:



在三种模式中,如果时钟信号 clk 从 0 变成 1,即一个上升沿触发, D 触发器的输出信号 q 被赋值为输入信号 d。

对于其余四种时钟信号的变化,vmerge 模式中, 输出信号 q 被赋值为输入信号 d;xmerge 模式中, 输出信号 q 被赋值为 X;tmerge 模式中, q 端的结果是当前拍 d 端和上一拍 q 端值得 merge 的结果,如果两者不同,则当前拍锁存 X。

  • latch

always @(*)    if(g)      q <= d;
复制代码



在 vmerge 模式下,当控制信号 g 未知时,输出信号 q 的值不变。

在 tmerge 模式下, 当控制信号 g 未知时,分配给 q 的合并值取决于 q 和 d 的值。

在 xmerge 模式下,当控制信号 g 未知时,输出信号 q 的值始终为 X。



当 xprop 仿真过程中出现 X 态报错时,需要看波形以具体分析是寄存器没有初始化值,存在 X 态导致的,还是代码逻辑中存在问题导致的。

用户头像

Java-fenn

关注

需要Java资料或者咨询可加我v : Jimbye 2022.08.16 加入

还未添加个人简介

评论

发布
暂无评论
什么是X态传播?_Java_Java-fenn_InfoQ写作社区