未完待续……
按状态、有无符号分类
括号里为数据所占空间,单位是bit。
二值 | 四值 | |
---|---|---|
有符号 | byte (8), shortint (16), int (32), longint (64) | integer (32) |
无符号 | bit (1) | logic (2), reg (2), net-type(2) |
按状态分:
类型 | 定义 | 常见数据类型 |
---|---|---|
二值逻辑 | 可以有二种取值:0, 1 | bit, byte, shortint, int, longint |
四值逻辑 | 可以有四种取值:0, 1,Z, X | logic, reg, integer, net-type (如 wire 和 tri) |
- Verilog中只有四值逻辑。SystemVerilog引入二值逻辑可以提高仿真器的性能,减少内存使用量
按有无符号分:
如何记忆有无符号呢?
按位数去定义的变量,或者说不特别声明就是一位的变量,比如bit,reg,logic,wire等,都是无符号变量。
而其他的,本身就已经确定是8、16、32、64位的,就是有符号变量。
(是不是很好记!)
类型 | 数据类型 |
---|---|
有符号数 | byte, shortint, int, longint, integer |
无符号数 | bit, logic, reg, net-type (如 wire 和 tri) |
有无符号数最大的影响是取值范围,特别要注意最大值。
声明 | 解释 |
---|---|
byte a; | 由于byte是8比特有符号整数,那么其取值范围就是(-128~127),也就是最大值是127,而不是255. |
bit [7:0] a; | 由于bit是无符号数,其取值范围为0~255,最大值就是255. |
有无符号可以相互转化
??
有符号数与无符号数之间的转换,都要看要转换的数的最高位是否为1,如果不为1,则转换结果就是要转换的数的本身;如果为1,则转换结果就是转换的数(看作是负数)的补码。