System Verilog中的packed array和unpacked array

packed array: 维度声明在标识符名字之前。

unpacked array:维度声明在标识符名字之后。

例如一维数组的例子:

bit [7:0] c1; // packed array of scalar bit types
real u [7:0]; // unpacked array of real types

多维数组同样是支持的,例如多维的packed array:

bit [0:11] [7:0] string var = "Hello world\n";

Packed Array

packed array是一种将向量细分为子字段的机制,子字段可以作为数组元素方便地访问。因此,packed array 需要确保被表示为一组连续的bits位。unpacked array可以这样表示,也可以不这样表示。packed array与unpacked array的不同之处在于,当packed array显示为主数组时,它被视为单个向量。

如果一个packed array被声明为有符号的,那么这个数组将被视为一个有符号的向量。而这个数组中的各个元素都是无符号的,除非它们被声明为有符号的类型。选择packed array的一部分也应该是无符号的。

packed array允许任意长度的整数类型,因此,48位整数可以由48位组成。这些整数可以用于48位运算。封装阵列的最大尺寸可以是有限的,但是应当是至少65536(2^16)个bits。

packed array只能由单个位数据类型bit、logic、reg)、枚举类型递归的其他packed arraypacked结构

Unpacked Array

unpacked array可以是任意的数据类型,unpacked array通过在声明的标识符之后指定元素地址范围来声明元素地址范围。每一个固定大小的维度由一个地址范围表示,例如[1:1024]或者单个正数[1024],来指定一个固定大小的unpacked array数组的大小,这与C语言是类似的。换言之,[size]和[0,size-1]是一样的。

整型变量的固定尺寸2维阵列:

int Array[0:7][0:31]; // 使用ranges的array声明
int Array[8][32]; //使用sizes的array声明

指定地址范围的表达式应为常量整数表达式,常量表达式的值可以是正整数、负整数或者0,包含任何未知(x)或高阻抗位都是非法的。

你可能感兴趣的:(verilog,System,Verilog)