数组
数组是一些基本数据类型的变量集合,有很多不同类型的数组,如下举了一些例子:
int array1 [6]; //fixed size single dimension array
int array2 [5:0]; //fixed size single dimension array
int array3 [3:0][2:0]; //fixed size multi dimension array
bit [7:0] array4[2:0]; //unpacked array declaration
bit [2:0][7:0] array5; //packed array declaration
bit [2:0][7:0] array6 [3]; //mixed packed and unpacked array
packed array的定义为:变量名前面有宽度/维度的声明。
unpacked array的定义为:变量名前面只有维度的声明。
fixed size array
在固定大小的数组中,数组的大小在整个模拟期间将是一个常数。默认情况下,数组中的元素将被初始化为0。同时还,数组的维度是有一维和多维的。
一维数组的声明如下:
int array1 [6]; // compact declaration
int array2 [5:0]; // Verbose declaration
二维数组的声明如下:
int arr[2][3];
三维数组的声明如下:
int arr[2][4][2];
下面用一张图来具体表示一个二维数组:
数组的初始化
array1 = '{0, 1, 2, 3, 4, 5};
array2 = '{0, 1, 2, 3, 4, 5};
array3 = '{'{0,1,2,3}, '{4,5,6,7}, '{8,9,10,11}};
固定大小数组的例子
例子的代码如下:
module array;
// declaration of array's
int array1[6] ; // single dimension array
int array2[5:0] ; // single dimension array
int array3[2:0][3:0]; // multi dimension array
int array4[4:0];
initial begin
//array initialization
array1 = '{0, 1, 2, 3, 4, 5};
array2 = '{0, 1, 2, 3, 4, 5};
array3 = '{'{0, 1, 2, 3}, '{4, 5, 6, 7}, '{8, 9, 10, 11}};
//diplaying array elements
$display("------------displaying array1-----------");
foreach(array1[i])
$display("\t array1[%0d] = %0d", i, array1[i]);
$display("------------displaying array2-----------");
for (int i = 0; i < 6; i++) begin
$display("\t array2[%0d] = %0d", i, array2[i]);
end
$display("------------displaying array3-----------");
foreach(array3[i,j])
$display("\t array3[%0d][%0d] = %0d", i, j, array3[i][j]);
$display("------------displaying uninitialized array4-----------");
for (int i = 0; i < 5; i++) begin
$display("\t array4[%0d] = %0d", i , array4[i]);
end
end
endmodule
仿真输出的结果如下:
packed array and unpacked array
维度声明在变量前面是packed array,声明在变量后面是unpacked array。
bit [7:0] temp_var; // packed array of bit types
bit temp_var [7:0]; // unpacked array of real types
packed 数组可以保证为一个连续的比特集合。如下举一个例子:
bit [2:0][7:0] array5;
可以表示为:
而unpacked 数组不可以表示连续的比特集合,一个例子如下:
bit [7:0] array4[2:0];