文章目录
一、变量类型——四值变量与二值变量
变量(信号)类型分为:四值变量和二值变量;
四值变量:(0、1、x、z)四种状态
wire——主要用在assign语句中,起连接作用,类似金属线;
reg——主要用在initial和always语句中,对线路建模;
logic——logic是对reg类型的增强,可以被连续赋值语句驱动,可用在assign、initial、always语句中,但不能多驱动。(SV增补)
二值变量:(0、1)两种状态
- bit——用户自定义位宽大小,无符号变量;
- byte——8位宽,有符号变量,取值范围:-128~127;
- shortint——16位宽,有符号变量,取值范围:-215~215-1;
- int——32位宽,有符号变量,取值范围:-231~231-1;
- longint——64位宽,有符号变量,取值范围:-263~263-1;
有符号变量与无符号变量之间的转化示例:
byte b8; «等价» bit signed [7:0] b8;
四值变量与二值变量的特性:
- 四值变量的默认初始值为x,二值变量的默认初始值为0;
- 将四值变量赋值给二值变量,x和z状态会转变为0;
- 系统函数$inunknown(变量名)可以检查表达式中是否存在x或z;
二、固定数组——非压缩数组与压缩数组
非压缩数组和压缩数组又称非填充数组和填充数组;
2.1.非压缩数组
- 分为一维数组和多维数组;
- 超出数组边界的写操作被忽略 掉;
- 初始化可以直接赋值,也可以通过for循环或者foreach循环进行初始化;
- 系统函数$size(数组名)可以返回数组大小;
- byte、shortint、int型变量都被存放在32位的存储空间中;(浪费存储空间)
- longint型变量存储在64位空间;
一位数组如下示例:
多维数组声明的示例:
2.2.压缩数组
- 将一个数组当成一个值,即一个存储空间,连续存储;
示例如下:
bit [3:0][7:0] bytes; //数组的维度定义在定量的左侧——压缩数组
bytes = 32'habcd_efab;
$display(bytes,
bytes[3],
bytes[3][7]);
- 1
- 2
- 3
- 4
- 5
除了非压缩数组和压缩数组之外,还有混合数组,即将非压缩数组与压缩数组混用。如下:
bit [3:0][7:0] p_array [0:2]; 即为一个混合数组
三、动态数组
- 声明时使用[ ]进行动态数组声明;
- 在仿真过程中进行分配内存空间和设置数组元素个数;
- 使用new[]来分配内存空间,传递数组元素的个数;
- 通过数组名称可以实现整个数组的赋值;
- $size系统函数返回数组元素个数;
- 动态数组和固定数组之间可以进行相互赋值,但需要满足:(数据类型相同,元素数目相同);
四、队列
- 声明时使用[$]进行动态数组声明;
- 能够迅速分配额外的空间和额外的元素;
- 不需要new[]进行分配空间;
- 支持push(数据入队——写)和pop(数据出对——读)操作;push时自动增补空间,pop后空间不消失;
- 具有排序和搜索的功能;
- 支持add和remove元素操作;
- - function int size( ):返回队列中成员数目。如果队列是空的,返回0 。 (对于上述队列 q = `{ };语句即清空队列;)
- function void insert(int index, queue_type item):在指定的索引位置插入索引成员;
- function void delete( int index):删除指定索引位置的成员;
- function queue_type pop_front():删除并返回队列的第一个成员;
- function queue_type pop_back():删除并返回队列的最后一个成员;
- function void push_front(queue_type item):在队列的前段插入指定的成员;
- function void push_back(queue_type item):在队列的后端插入指定的成员;
五、联合数组
- 声明时使用[*]进行动态数组声明, *为通配符,指代数据变量类型;
- 动态分配非连续元素,内存空间不连续;
- 联合数组一般较少运用;
六、数组方法
6.1.数组运算方法
- 求和sum、求积product、与and、或or、异或xor
- a.sum——单bit数组的求和返回单bit的数值;
- 求最大值max,求最小值min,唯一化unique;
-
6.2.数组排序方法
- 翻转:reverse
- 乱序:shuffle
- 升序排列:sort
- 降序排列:rsort
6.3.数组定位方法
- 查找元素:find
- 查找第一个元素:find_first
- 查找第一个元素的索引:find_first_with_index
七、结构体
- 结构体相当于是对一组数据类型的封装,是一组变量的集合,可以作为一个整体进行操作;
- 一般使用结构体的名字对其中的变量进行操作;
- 结构体默认情况下是非填充的,当然也可以使用关键字packed将其声明为填充型的;
- 可以使用关键词
typedef来定义结构体
,实现对同一个结构体的多次例化
,增强结构体的重用性;
使用关键词typedef来定义结构体:
八、枚举类型
抽象变量代表一个数值序列,也可以自定义每一个变量的数值,所有的
数值必须唯一
;枚举类型中的
各个变量默认类型为int型
;允许显示指定各个变量的基础类型,如bit、logic等;
使用方法同结构体类似,也可以通过typedef关键字进行定义;
注意$cast()强制类型转换的使用方法
九、字符串变量
- 字符串类型(string)是一个大小可变、动态分配的字节数组。字符串文本为一个具有宽度为8的整数倍的压缩数组。
- 在未赋值的情况下,string类型的变量初始值为
空字符 “ ”
- 可以使用
系统函数$psprintf()
生成字符串; - 字符串类型变量具有内建的操作符和函数,len(), getc(), putc(),substr()等;
</div><div data-report-view="{"mod":"1585297308_001","dest":"https://blog.csdn.net/weixin_46022434/article/details/105387646","extend1":"pc","ab":"new"}"><div></div></div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-ff98e99283.css" rel="stylesheet">
</div>