systemverilog学习 ----数组(1)

数组

数组是一些基本数据类型的变量集合,有很多不同类型的数组,如下举了一些例子:

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];

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值