System Verilog学习笔记(十一)——数组(1)
非组合型(unpacked)
- 成员之间存储数据都是相互独立的
- 可以索引非组合型数组或者数组片段的能力
- 声明方式:
logic [31:0] data [1024];
logic [31:0] data [0:1023];
int d [0:1][0:3] ='{'{7,3,0,5},'{2,0,1,6}};
- 用’{ }和default关键词对其进行初始化
- 非组合型数组在发生数组间拷贝时,要求左右两侧操作数的维度和大小必须一致。
组合型(packed)
wire [3:0] select;
reg [63:0] data;
logic [3:0][7:0] data;
typedef struct packed{
logic [7:0] crc;
logic [63:0] data;
} data_word;
data_word [7:0] darray;
logic [3:0][7:0] a =32'h0;
logic [3:0][7:0] b ={16'hz, 16'h0};
logic [3:0][7:0] c ={16{2'b01}};
- 组合型数组会被视为向量,因此当赋值左右两侧操作数的大小和维度不同时也可以做赋值。
foreach循环结构
- SV添加foreach循环来对一维或者多维数组进行循环索引,而不需要指定该数组的维度大小。
- foreach循环结构中的变量无需声明
- foreach循环结构中的变量是只读的,其作用域只在此循环结构中。
系统函数
- $dimensions(array_name):用来返回数组的维度
- $left(array_name, dimension):返回指定维度的最左索引值
- $right,low,high
- $size(array_name, dimension):用来返回指定维度的尺寸大小
- $increment(array_name,dimension):如果指定维度的最左索引值大于或者等于最右索引值,那么返回1,否则返回-1.
- $bits(expression):用来返回数组存储的比特数目