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):用來返回數組存儲的比特數目