前言
在学习sv过程中,感觉绿皮书的数据类型部分比较凌乱,故自己小结了一下。本文主要内容如下:
1、常用的数据类型
2、数组是什么
3、合并数组、非合并数组
4、for 与 foreach的使用
一、常用的数据类型
注意: 数据类型包含了两个方面:1、该变量是二值变量还是四值变量;2、该变量是有符号还是无符号!!!!
二、数组是什么
1.数组的定义
数组(Array)是一组数据元素的集合,这些数据元素通常是同一类型,可以通过索引来访问它们。每个元素都可以通过数组名和索引的组合来唯一确定。
2.数组的重要属性
1、元素类型(Type):数组中元素的数据类型,如整型、字符串等。
2、维度(Dimension):数组的维数,一维、二维或多维。
3、大小(Size):数组中元素的数量。
4、索引(Index):用于访问数组元素的整数索引,从0开始。
三、合并数组、非合并数组
1、合并数据与非合并数组的定义
合并数组:在内存中连续存放的数组。
例如:bit [3:0] [7:0] arr;
非合并数组:在内存中独立存放的数组。
bit [7:0] b_unpack [3]:
2、如何区别合并数组与非合并数组
结论:若数组的维数全部在数组名的左侧,则为合并数组,若数组的维数有在数组名的右侧,则为非合并数组。
/=======合并数组===========/
bit [7:0] [3:0] a;该数组为合并数组,且为二维数组,其中[7:0]为高维,[3;0]为低维度。
/=======非合并数组========/
logic b [3:0] [4:0];该数组为非合并数组,且为二维数组,其中[3:0]为高维,[4:0]为低维。
logic [3:0] c [5:0];该数组为非合并数组,其中[5:0]为高维,[3:0]为低维。
3、合并数组与非合并数组的初始化区别
结论:合并数组可以按照矢量的方式直接进行初始化,非合并数组需要使用'{}来对每一个元素进行初始化。
/========合并数组的初始化======/
logic [3:0] [3:0] a ; a = 16'd22;
/========非合并数组的初始化====/
int b [1:0] [2:0] ; b = ‘{'{1,2,7},'{8,8,8}}
注意:合并数组的数据类型只能是logic 或者 bit!!!!
四、for 与foreach
/*练习for 与 foreach8*/
module test;
bit [31:0] scr [5];
bit [32] data [5];
bit [2:0] [3:0] a;
initial begin
for (int i=0; i<5; i++) begin
scr[i] = i;
$display("scr[%0d] = %0d", i, scr[i]);
end
end
// 使用 foreach 循环初始化和打印,其中, bit [31:0] scr [4:0],则foreach将从4开始循环
initial begin
foreach (scr[i]) begin
scr[i] = i;
$display("scr[%0d] = %0d", i, scr[i]);
end
end
initial begin
foreach (data[i,j]) begin
data[i][j] = 0;
$display("data[%0d][%0d] = %0d", i, j, data[i][j]);
end
end
endmodule