数据类型
Verilog语言两种基本的数据类型:
- 变量类型(variables)【reg,integer和time等变量类型可以用来存储组合逻辑或者时序逻辑的值。】
- 线网类型(nets)【例如wire,wor,wand和其它线网类型用来连接硬件模块,以及提供特殊的线网驱动解决方案。】
这两种类型都是四值逻辑,即可表示0、1、X和Z值。
线网类型(nets)
线网用于建模硬件设计中的连接线路,而线网的值由线网驱动器所决定。(驱动器可以是门或模块的实例,或者连续赋值的输出。)
在这个路科课程中,线网类型用的最多的是DUT的输出端口,多数情况下,设计的端口方向是单向的,使用wire类型。
变量类型(variables)
- 变量类型保存在initial、always、task 和function内赋的值。
- 变量只能用过程赋值来完成。
- 类型是integer或time的变量一般像有相同数量位数的reg 一样运转。
- 在表达式中integer 的值作为有符号数处理,而reg或time的值作为无符号数处理。
- 用reg描述逻辑,integer描述循环变量和计算,real 在系统模型中使用,time和realtime保存测试装置的仿真时间。
systemVerilog SV
SV添加了新的数据类型来帮助设计和验证工程师。
SV将硬件信号区分为
- **“类型”:**表示该信号为变量(var)或者线网类型(wire) 。
- “数据类型”:表示该数据是四值逻辑(logic)或者二值逻辑(bit) 。
四值逻辑 数据类型
Verilog和SV中表示存储的变量:
Verilog中:
**reg:**经常用来表示存储组合逻辑或者时序逻辑的变量
注意:实际上,reg并不一定会被综合为register,它只是用来与线网类型相对,表示存储数据的变量。
SV中:
**logic(数据类型,四值逻辑)😗*实现通用的存储硬件数据
logic resetN;//1位宽的四值逻辑logic [63:0] data; //64位宽的变量logic [0:7] array [0: 255];//由8位向量元素构成的数组
logic虽然只是表示数据类型,而在声明时,它默认会表示变量类型(variable) ,用户也可以显式声明其类型:
var logic [63:0] addr; // 64位宽的变量类型wire logic [63:0] data; // 64位宽的线网类型
SV二值逻辑数据类型:
SV添加了二值逻辑数据类型,帮助更高抽象级的建模,例如事务级模型。
二值逻辑数据类型:
- bit : 1位二值逻辑变量
- **byte : 8位二值逻辑(**类似于C语言char类型)
- **shortint : 16位二值逻辑(**类似于C语言short类型)
- **int : 32位二值逻辑(**类似于C语言int类型)
- **longint : 64位二值逻辑(**类似于C语言longlong类型)
X值和Z值的作用:
在RTL级别,
- X值用来捕捉设计错误,例如寄存器未初始化,
- Z值用来表示未连接或者三态的设计逻辑,但是在系统级或者事务级,Z和X很少被使用。
默认为变量类型
- logic类型默认为变量类型,
- bit类型默认也为变量类型。
无符号类型与有符号类型
- 无符号类型:logic或者bit构成的向量(vector)
- 有符号类型:integer、 byte、 shortint、int、 longint为。
有符号类型转换成无符号类型:
可以在有符号类型后添加unsigned来表示无符号类型
举例:
byte//有符号类型,表示的数值范围是[-128,127]。byte unsigned//表示无符号类型,等同于bit[7:0],表示的数值范围是[0,255]。
二值逻辑用法:
- 在构建验证驱动组件时,无需关注硬件底层逻辑(X或者Z值),所以可使用二值逻辑实现。
- SV在与C在发生交互时,也可以使用二值逻辑来使得两种语言的函数接口参数类型传输更为简单。
仿真行为
四值逻辑和二值逻辑仿真开始的初值:
- 四值逻辑变量(例如reg、 logic或者integer等),在仿真开始时的初值为X。
- 二值逻辑变量(例如bit等),在仿真开始时的初值为0。
四值逻辑赋值给二值逻辑,会有什么情况:
如果四值逻辑与二值逻辑的数据类型之间发生的默认转换,那么Z和X值将转换为0。
问题:二值逻辑是否可以用来综合电路?会有什么样的情况
二值逻辑也可以用来实现可综合电路,只是二值逻辑由于没有X和Z值,因此可能会出现仿真行为同综合电路结果不一致的情况。
SV的 其他数据类型
- SV添加void类型来表示空类型,经常用在函数定义时表示不会返回数值,同C语言的void使用方法。
- SV添加shortreal表示32位单精度浮点类型,同C语言的float;而Verilog的real类型表示双精度浮点类型,同C语言的double。
---------------------
作者:桐桐花
来源:CSDN
原文:https://blog.csdn.net/weixin_41788560/article/details/123842915
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件