【注】因为在很多书籍资料中关于packed array和unpacked array有不同的翻译,有的称之为压缩数组和非压缩数组,有的称之为合并数组和非合并数组,为了避免混淆,本文不采用任何翻译名称,仅使用packed array和unpacked array。
在SystemVerilog中一般认为数组维数声明位于数组名左侧的数组为packed array,并且在使用时经常也将一维的packed array作为vector;维数位于数组名右侧的数组称之为unpacked array,当维数同时出现在数组名左右两侧时,该数组也是unpacked array。packed array和unpacked array的常见格式如下例所示:
bit [7:0] packed_array; // packed array
event unpacked_array[0:7]; // unpacked array
下面我们将分别讨论学习packed array和unpacked array的异同。
1 packed array
packed array常由按位(bit-wise)类型(logic、bit、reg,etc)、线网(wire、uwire、wand、tri、triand,etc)、枚举类型和其他的packed数据结构等构成,而像byte、shortint、int、longint、integer和time等这些数据类型,因为其本身就已经包含特定的位宽信息,所以不能在这些类型和数组名之间指定维数,也就不能指定这些类型为packed array,但是这并不影响这些类型声明的变量在满足一定要求的情况下同packed array进行交互的。</