SystemVerilog 约束溢出

Overflow in SystemVerilog constraints

与大多数语言一样,SystemVerilog 中的整数类型在溢出时回绕。我想知道这在约束中是否也是如此。例如:

class Test;
  rand bit [3:0] a;
  rand bit [3:0] b;

  constraint c { a + b <= 4'h6; }
endclass;

当随机化这个 class 的对象时,是否有可能得到 a == 7b == 12 的解决方案,这将满足约束条件,因为 7 + 12 = 19 包含大约为 3,而 3 小于 6?

如果是这样,将约束表述为

是否有帮助
constraint c { a + b <= 6; }

其中 6 是一个 32 位有符号整数并且强制以 32 位精度计算和? (如果随机变量的类型是int,这当然不是解决方案)

你是对的。无论您是否在约束内,表达式评估都是相同的。除了溢出,还需要关注截断和符号转换。积分表达式在 SystemVerilog 中是弱类型的。