Verilog-2001中的signed的理解

一、Verilog四值逻辑

0

1

X:未知,亚稳态

Z:高阻,三态,无驱动

二、常数

整数

实数

字符串:双引号括起的8位ASCII码值

parameter:参数,仅定义模块有效

`define:全局定义,所有模块有效

1、整数

(1)十进制表示法:可表示有符号数

(2)基数表示法:符号 长度'进制 数。表示无符号数

2、实数

(1)十进制表示法

(2)科学计数法

三、变量

(1)线网型变量(一般为无符号数)

wire tri 

(2)寄存器型变量(一般为无符号数)

reg:一般表示无符号数,但在Verilog-2001中可被signed修饰,表示为有符号数

integer:一般表示32位有符号数

四、signed

  在verilog中有时会用signed修饰符来修饰定义的数据,运算的时候也会用$signed()任务来强制转换数据,signed的真正作用是决定如何对操作数扩位的问题。

  verilog中的加法和乘法操作前,会先对操作数据扩位成结果相同的位宽,然后进行加法或者乘法处理。比如a/b都为4位数据,c为5位数据,c = a + b,这个运算的时候会先把a和b扩位成5位,然后按照无符号加法进行相加。a/b没有被signed修饰的时候会按照无符号数的扩位方式进行扩位,即高位补0,加法的结果当然也是a、b为无符号数相加的结果。

  如果想把a、b作为有符号数来相加,那么就得在a/b数据定义的时候用signed修改,或者在计算的时候用$signed()来修饰,这样在c = a + b,这个运算开始的扩位就会按照有符号数的方式进行扩位,在高位补符号位,加法得出的结果就是a、b视为有符号数的结果。当然c要视为有符号数据。

 

参考:

https://www.cnblogs.com/yuandonghua/p/signed.html

https://www.cnblogs.com/lianjiehere/p/3968103.html

posted @ 2019-04-07 16:28  helloamigos  阅读(1540)  评论(0编辑  收藏  举报