verilog中reg变量在理解的时候是按照补码的方式理解的吗?
时间:10-02
整理:3721RD
点击:
是不是verilog按照补码的意义解释reg的值?比如说把10000000理解为-128?(假设定义的变量是8位的,reg中各位值为10000000,下面类似) 把10011001理解为-103?
但是书上有这么一句话“当一个reg型数据是一个是一个表达式中的操作数时,它的值被当做是无符号数”
如果设计的是有符号数算术运算,那么c的值按照补码理解就是-1;
但是如果设计的是一套无符号数运算,那么此时结果发生了溢出,c的值没有意义。
但是书上有这么一句话“当一个reg型数据是一个是一个表达式中的操作数时,它的值被当做是无符号数”
可以这么和你说吧。reg[3:0] data;
data取值是0:15,所以书上说的是对的,自己多验证,或者看别人代码,不要胡思乱想。
不管如何理解,都不会影响这个reg变量存放的二进制值。是否理解为补码只在算术运算时才有意义,应该根据实际设计来判断。举个例子:
- reg [7:0] a;
- reg [7:0] b;
- reg [7:0] c;
- ...
- always @(a or b) begin
- c = a - b;
- end...
如果设计的是有符号数算术运算,那么c的值按照补码理解就是-1;
但是如果设计的是一套无符号数运算,那么此时结果发生了溢出,c的值没有意义。
rvnistelrooy说的很好,赞同
reg里的值是多少,完全取决于你怎么看他
两个补码是不是也可以机械的直接相减?
机器不懂什么是补码,只懂得二进制,,这些都是在操作时为了运算有符号数,人为理解的
要视使用环境来理解reg的值
哦
