【数据类型】–【四值逻辑还是二值逻辑】
对Verilog的复习****************
verilog到底什么时候用reg还是wire的区分:
(1):
在Verilog中,wire永远是wire,就是相当于一条连线,用来连接电路,不能存储数据,无驱动能力,是组合逻辑;并且只能在assign左侧赋值,不能在always @ 中赋值。
(2):
reg可以综合成register,latch,甚至是wire(当其只是中间变量的时候),能存储数据,有驱动能力,可以用于组合逻辑或者时序逻辑;在always @模块表达式左侧被赋值。
【大总结reg 和 wire】
- 功能文件:由本模块产生,并且用always产生的信号,定义成reg;
- 测试文件:由初始化产生(一般是对被测试模块(DUT)的输入)的信号用 reg;
- 除了以上两种情况,就定义成wire 类型。
对Verilog的复习结束****
logic
【1】在SV中,直接用logic(数据类型)来达到通用的存储数据的目的。遇到的logic都有可能是四值逻辑(即每一位都有可能存放 0 1 X Z)。每一个bit 位都是独立的。
【二值逻辑【bit】(0.1)数据类型】(Verilog没有二值逻辑)
它用于RTL更更高的抽象级的模型建模,更像是软件层面。
1: RTL来表示硬件,必须要采用四肢逻辑,因为它对应的是真实的电路;
2: 二值逻辑bit虽然可以仿真和综合,但是与实际的电路会有出入,更严重的是综合出来的电路有失真的可能;比如竞争,亚稳态,没有驱动等这些电路是没办法进行表征。这将导致电路的一些意外没有办法发现。
一般不需要表征硬件逻辑或者不需要表正这么低层次的逻辑的时候用二值逻辑bit来-------比如验证的世界。
二值逻辑的数据类型包括:
Systemverig ----------------------------------------C语言
Bit-------------------------------------不关心bit
byte -----------------------------------char
Shortint-------------------------------short
int-------------------------------------int
longint--------------------------------longlong
Int integer byte shortint 都是有符号类型
Note:
logic 和 bit 都是默认变量类型。
Int 是二值逻辑,但是integer是四肢逻辑。【谁的名字长,谁就是是指逻辑】
【有符号类型和无符号类型】
1:logic和bit是无符号类型
2:Int integer byte shortint longint 都是有符号类型
3:可以加unsigned 将有符号类型转成无符号类型 byte unsigned 等同于bit[7:0] .表示的数据范围是【0-255】
巧记:最常见的两个logic和bit是无符号类型。
note: 验证的时候,电路的驱动(激励)都是0或者1,没有必须要用Z或者X。
类型 数据类型
四值逻辑 integer logic reg net-type(如 wire 和 tri )
二值逻辑 bit byte shortint int longint (和C语言和对应)
无符号位 logic bit reg net-type(如 wire 和 tri ) (单个向量)
有符号位 byte(8bit) shortint(16bit) int(32bit) longint(64bit) integer(32bit) (多个向量)
四值逻辑在仿真的初始时期是X;
二值逻辑在仿真的初始时期是0;
如果四值逻辑转换成二值逻辑,那么Z和X将会转化成二值逻辑的0.
【SV中的其他数据类型】
void表示空类型。不会有返回值
sv还有shortreal 表示的是32位单精度浮点------类似C的float
sv还有real 表示的是32位双精度浮点------类似C的double
【DPI-C接口可以让C和SV互相调用】