systemverilog 中 bit 比 reg 有什么优势?

What's the advantage of bit over reg in systemverilog?

testbench 中的变量大多被实例化为 bit 而不是 reg。但是 bit 只是 2 个状态变量(0 和 1),reg 是 4 个状态变量(0,1,x 和 z)。为什么人们使用 bit 作为测试平台变量?我接手了一个旧项目,所有的testbench变量都是bit。因此,当检查器执行

这样的检查时

if (data_rtl === data_expected) // reg[63:0] data_rtl, bit[63:0] data_expected

我无法在 data_expected 端执行 X 检查。当然使用bit很常见,为什么人们要这样做? bit 在 systemverilog 中比 reg 有什么优势?

在某种程度上你回答了你自己的问题。位是一个二态变量。对于很多验证测试平台应用,x 和 z 值不是必需的。不需要额外两个状态的 computational/memory 开销,以及对变量设置为 z 或 x 的可能性的额外关注,因此不使用。

通常,在测试平台的刺激生成和预测组件中不需要 4 态类型。双态模拟的好处是内存开销较少,这有效地将数据缓存的大小加倍。您基本上只需要在适当的时间在测试台和 DUT 之间的接口中检查 X。 设计中 X 的生成和传播本身就是一个广泛的话题。当涉及到设计的不同区域中的 X 时,大多数模拟都非常不准确,要么过于乐观,要么过于悲观。有时,在这些情况下最好使用静态分析(时序或形式)工具。

bit 和 reg 有一些关键区别

  • reg 是一个 4 状态变量(1 或 0 或 X 或 Z,默认为 X),但 bit 是一个 2 状态变量(0 或 1,默认为 0)

现在这对我们有什么影响。

  • 4 状态变量,是硬件所必需的,在硬件中,取决于电线的电压电平和驱动器,电线可以具有逻辑值 1 或 0 或 X 或 Z。所以 从硬件的角度来看,应该使用reg

  • 但从刺激的角度来看,我们通常不需要 X 或 Z 状态,因为您永远不会驱动带有未知 (X) 或没有任何驱动器 (Z) 的电线。所以在那种情况下,可以使用位,因为 bit 只包含 2 个状态。

希望你能有所不同