看一下我在System Verilog中维护的一些代码,我看到一些定义如下的信号:
node [range_hi:range_lo]x;
和其他定义如下:
node y[range_hi:range_lo];
据我所知,它x
被定义为packed,而y
被定义为unpacked.但是,我不知道这意味着什么.
System Verilog中的打包和解包矢量有什么区别?
编辑:回应@Empi的答案,为什么要在SV中编写的硬件设计师关心数组的内部表示?有没有时候我不应该或不能使用打包信号?
本文提供了有关此问题的更多详细信息:http: //electrosofts.com/systemverilog/arrays.html,尤其是第5.2节.
打包数组是一种将矢量细分为子字段的机制,可以方便地将其作为数组元素进行访问.因此,保证打包数组被表示为连续的位组.解包的阵列可能会也可能不会如此表示.打包数组与解压缩数组的不同之处在于,当打包数组作为主数组出现时,它被视为单个向量.
在了解完全打包和解包的数组之前,还可以看看如何通过声明来了解哪个数组是什么.打包数组在大小声明之前有一个对象名称.例如:
bit [3][7] a;
解包后的数组在大小声明后有一个对象名.例如:
bit a[3];
打包的数组使内存,而解压缩不.您也可以像这样访问/声明解压缩的数组
reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1};
您可以混合打包和解压缩的数组来创建多维内存.例如:
bit [3:0][7:0]a[2:0].
它产生一个4(即4*8)字节的数组,深度为3.