为什么这两个代码不相同?我正在检查两者之间的逻辑等价,它们是失败的,可能是什么错误? 是否会将其视为宽度不匹配,或由多个驱动程序驱动的网络?我正在使用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
答案 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)。