微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog中reg变量在理解的时候是按照补码的方式理解的吗?

verilog中reg变量在理解的时候是按照补码的方式理解的吗?

时间:10-02 整理:3721RD 点击:
是不是verilog按照补码的意义解释reg的值?比如说把10000000理解为-128?(假设定义的变量是8位的,reg中各位值为10000000,下面类似)                                                                把10011001理解为-103?
但是书上有这么一句话“当一个reg型数据是一个是一个表达式中的操作数时,它的值被当做是无符号数”

可以这么和你说吧。reg[3:0] data;
data取值是0:15,所以书上说的是对的,自己多验证,或者看别人代码,不要胡思乱想。



不管如何理解,都不会影响这个reg变量存放的二进制值。是否理解为补码只在算术运算时才有意义,应该根据实际设计来判断。举个例子:

  1. reg [7:0] a;
  2. reg [7:0] b;
  3. reg [7:0] c;
  4. ...
  5. always @(a or b) begin
  6.   c = a - b;
  7. end...

复制代码

假设a='b0000_0000, b='b0000_0001,c的值一定是'bffff_ffff。
如果设计的是有符号数算术运算,那么c的值按照补码理解就是-1;
但是如果设计的是一套无符号数运算,那么此时结果发生了溢出,c的值没有意义。

rvnistelrooy说的很好,赞同
reg里的值是多少,完全取决于你怎么看他



   两个补码是不是也可以机械的直接相减?

机器不懂什么是补码,只懂得二进制,,这些都是在操作时为了运算有符号数,人为理解的

要视使用环境来理解reg的值


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top