一、内建数据类型
小结:
1.逻辑类型logic
2.双状态和四状态类型
1.逻辑类型(logic)
logic功能
(1)被作为变量
(2)连续赋值
(3)门单元
(4)模块驱动
logic注意:
不能有多个结构性的驱动,如双向总线建模,双向总线建模只能用wire类型。
*2.双状态数据类型(bit,shortint,byte,int,longint)和四状态数据类型(integer)
(1)bit 双状态,(即只有两个状态,1或者0)无符号
bit b;//单比特;
bit [31:0] b;//32比特无符号整数
……
(2)int 双状态,有符号,32比特
(3)byte 双状态,有符号,8比特
(4)shortint 双状态,有符号,16比特
(5)longint 双状态,有符号,64比特
(6)integer 四状态,有符号,32比特
(7)real 双状态,双精度浮点数
注意:byte的引入可以减少内存,其大小最大值为127,因为它有符号。
二、定宽数组
小结:
1.定宽数组的声明和初始化
2.常量数组
3.基本的数组操作——for 和foreach,比较
4.同时使用位下标和数组下标
5.合并数组
6.合并数组和非合并数组的选择
1.定宽数组的声明和初始化
(1)一维数组的声明和使用
int a [0:15];//16个int类型的整数
int a [16];//同上
int a[0]=1;//设置第一个元素
(2)多维数组的声明和使用
int a [0:5] [0:2];//6行3列
int a [6] [3];//同上
a[5][1]=1;//设置其中一个元素
(3)非合并数组的声明
bit [7:0] a [3];
2.常量数组
一个单引号加大括号来初始化数组。
int a [4]='{0,1,2,4};//对4个元素进行初始化
3.基本的数组操作——for 和foreach
(1)for和freach主要用来循环,是操作数组最常见的方式。
其中forreach 语法使用多维数组,不是[i][j],而是[i,j].
//打印一个多维数组
initial begin
byte a[4][6];
foreach(a[4,6])
a[i][j]=i*10+j;
foreach (a[i]) //遍历第一个维度
begin
$write("%2d:",i);
foreach(a[ ,j]);//遍历第二个维度
$write("%3d",a[i][j]);
$display;
end
end
(2)正在不使用循环的情况下对数组进行聚合比较和复制。其中的比较只限于等于比较或不等于比较。
注意:sv仿真器一般存放数组元素使用32比特的字边界,而上述bit 只声明了8个bit,所以前面高位都不实用,低8位来存储数据。
4.同时使用位下标和数组下标
initial begin
bit [31:0] a[4]={1,2,3,4};
end
5.合并数组
三、动态数组
四、队列