一、数组操作
1.非组合型数组
Reg [15:0] RAM [0:4095] //存储数组
- SV将verilog这种声明数组的方式称为非组合型声明,即数组中的成员之间存储数据都是相互独立的;
(优点:易于查找元素; 缺点:消耗更多存储空间)
- SV保留了非组合型的数组声明方式,并扩展了允许的类型:event、logic、bit、byte、int、longint、shortint和real;
- SV保留了verilog索引非组合型数组或者数组片段的能力,这种方式为数组以及数组片段的拷贝带来了方便;
Int a1[7:0] [1023:0] //非组合型数组
Int a2[1:8] [1:1024] //非组合型数组
a2=a1; //拷贝整个数组;
a2[3]=a1[0]; //拷贝某个元素或者一个数组片段
- 声明数组的方式,以下两种都可:
Logic [31:0] data [1024];
Logic [31:0] data [0:1024];
可以指定其内部元素个数或者元素索引值的范围;
2.组合型数组
- SV将Verilog的向量作为组合型数组声明方式;
Wire [3:0] select;//4bit组合型数组
Reg [63:0] data;// 64bit组合型数组
- SV允许多维组合型数组的声明;
Logic [3:0] [7:0] data;//2维组合数组 32bit字
组合型数组更节省空间
- 组合型还可以用来定义结构体的存储方式:
Typedef struct packed {
Logic [7:0] crc;
Logic [63:0] data;
}data_word;
Data_word [7:0] darray;//1位组合型数组,元素也为组合型结构体
- 组合型数组中的元素和片段也可以单独拷贝和赋值;
Logic [3:0] [7:0] data;//2维组合型数组
Wire [31:0] out=data; //整个数组赋值
Wire sign=data[3] [7]; //单个bit
Wire [3:0] nib=data[0] [3:0]; //数组片段
Byte high_byte;
Assign high_byte=data[3] ;//8bit数组片段
Logic [15:0] word;
Assign word=data[1:0]; //2个数组片段、
3.初始化
- 组合型数组初始化,可以对其所有元素统一赋值;
logic [3:0] [7:0] a=32’h0; //向量赋值
logic [3:0]