矢量输入端口驱动单比特网的输出端口

时间:2015-04-16 10:43:41

标签: verilog equivalence

为什么这两个代码不相同?我正在检查两者之间的逻辑等价,它们是失败的,可能是什么错误? 是否会将其视为宽度不匹配,或由多个驱动程序驱动的网络?我正在使用cadence LEC进行正式验证

module driver (a, b);
  input [3:0] a;
  output wand b;

  assign b = a;
endmodule
module driver (a, b);
  input [3:0] a;
  output wand b;

  assign b = a[3];
  assign b = a[2];
  assign b = a[1];
  assign b = a[0];
endmodule

1 个答案:

答案 0 :(得分:1)

assign b = a相当于assign b = a[0]a的高位超出了b的范围。

溢出的原因相同。例如assign sum[3:0]=a[3:0]+b[3:0]如果a = 15且b = 2,则sum将为1,因为没有足够的位来表示17(17 mod(2 ^ bitwidth(4))= 1)。