关于verilog加法运算溢出的问题
时间:10-02
整理:3721RD
点击:
有一个3bits的寄存器cnt,如果cnt此时的值为3'b111,那么当cnt+1执行后,cnt应该是3'b000吧?
假设此时有一个reg [2:0] temp=3'b000;
那么if( temp == cnt+1 )的判定结果是否应该是真?
为何我用modelsim进行function simulation时,发现if此时的判定是假
问题就出在小编的+1上。
不指明位宽的1默认是32位的,也就是32'h0000_0001。
cnt+1是一个3比特加32比特的加法,会将cnt扩展为32比特后相加,因此结果是32'h0000_1000。
最后,tmp==cnt+1,是一个3比特数和32比特数的比较,会将3比特熟扩展成32比特,也就是比较32'h0000_0000与32'h0000_1000。这个当然是假的。
所以小编应该用+1'b1。
解答犀利~学习了
2楼正解,在verilog中位宽相当的重要。要好不要使用整型的,因为用工具来扩展位宽太危险了。
2楼高人也。
明白了,多谢楼上赐教
以后提问的朋友,请把你们的源码都放上来....
这个一看就是位宽问题...
不要大家讨论半天,结果是你信号申明的时候没做...
当然,如果你非常确定你能表述清楚问题以及清楚问题一定不是在XXX地方的除外...
