本文主要是介绍V0 第5节 数据类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. Verilog的数据类型
- Verilog语言提供两种基本的数据类型, 变量类型variables和线网类型nets,这两种类型都是四值逻辑,即可表示0、1、X和Z值
- 例如reg,integer和time等变量类型可以用来存储组合逻辑或者时序逻辑的值
- 例如wire,wor,wand和其它线网类型用来连接硬件模块,以及提供特殊的线网驱动解决方案
1.1 Verilog线网类型
- 线网用于建模硬件设计中的连接线路,而线网的值由线网驱动器所决定
- 驱动器可以是门或模块的实例,或者连续赋值的输出
1.2 Verilog变量类型
- 变量类型保存在initial、always、task和function内赋的值
- 变量只能用过程赋值来完成
- 类型是integer或time 的变量一般像有相同数量位数的reg一样运转
- 在表达式中integer的值作为有符号数处理,而reg或time的值作为无符号数处理
- 用reg描述逻辑,integer描述循环变量和计算,real在系统模型中使用,time和realtime保存测试装置的仿真时间
2. SV新添加的数据类型
- Verilog中的变量和线网类型均是四值逻辑
- SV添加了新的数据类型来帮助设计和验证工程师
- SV将硬件信号区分为类型和数据类型
- 类型即表示该信号为变量var或者线网类型wire
- 数据类型则表示该数据是四值逻辑logic或者二值逻辑bit
2.1. 四值逻辑数据类型
-
在Verilog中,reg经常用来表示存储组合逻辑或者时序逻辑的变量,初学者容易混淆其综合后的硬件单元,实际上,reg并不一定会被综合为register,而它只是用来与线网类型相对,表示存储数据的变量
-
在SV中,我们可以直接使用logic(数据类型)来实现通用的存储硬件数据
logic resetN; //1位宽的四值逻辑
logic [63:0] data; //64位宽的变量
logic [0:7] array [0:255]; //由8位向量元素构成的数组, 256个8位的数组 -
logic虽然只是表示数据类型,而在声明时,它默认会表示变量类型variable,用户也可以显式声明其类型:
var logic [63:0] addr; //64位宽的变量类型
wire logic [63:0] data; //64位完的线网类型
2.2. 二值逻辑数据类型
- 在RTL级别,X值用来捕捉设计错误,例如寄存器未初始化,Z值用来表示未连接或者三态的设计逻辑,但是在系统级或者事务级,Z和X少被使用
- 类似于logic类型默认为变量类型,bit类型默认也为变量类型
3.有符号类型和无符号类型
- logic或者bit构成的向量vector是无符号类型
- integer、byte、shortint、int、longint为有符号类型
- 可以在有符号类型后添加 unsigned来表示无符号类型,例如:
byte有符号类型,表示的数值范围是[-128,127]
byte unsigned 表示无符号类型,等同于bit[7:0],表示的数值范围是[0,255] - 在构建验证驱动组件时,无需关注硬件底层逻辑(X或者Z值),所以可使用二值逻辑实现
- SV在与C在发生交互时,也可以使用二值逻辑来使得两种语言的函数接口参数类型传输更为简单
4. 仿真行为
- 四值逻辑变量例如reg、logic或者integer等,在仿真开始时的初值为X
- 二值逻辑变量例如bit等,在仿真开始时的初值为0
- 如果四值逻辑与二值逻辑的数据类型之间发生的默认转换,那么Z和X值将转换为0
4-state value | converts To |
---|---|
0 | 0 |
0 | 1 |
Z | 0 |
X | 0 |
- 二值逻辑也可以用来实现可综合电路,只是二值逻辑由于没有X和Z值,因此可能会出现仿真行为同综合电路结果不一致的情况
5. 其它类型
- SV添加void类型来表示空类型,经常用在函数定义时表示不会返回数值,同C语言的void使用方法
- SV添加shortreal表示32位单精度浮点类型,同C语言float,而Verilog的real类型表示双精度浮点类型,同C语言的double
这篇关于V0 第5节 数据类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!