在系统verilog中打包vs unpacked向量

Nat*_*man 27 vector system-verilog

看一下我在System Verilog中维护的一些代码,我看到一些定义如下的信号:

node [range_hi:range_lo]x;
Run Code Online (Sandbox Code Playgroud)

和其他定义如下:

node y[range_hi:range_lo];
Run Code Online (Sandbox Code Playgroud)

据我所知,它x被定义为packed,而y被定义为unpacked.但是,我不知道这意味着什么.

System Verilog中的打包和解包矢量有什么区别?

编辑:回应@Empi的答案,为什么要在SV中编写的硬件设计师关心数组的内部表示?有没有时候我不应该不能使用打包信号?

emp*_*mpi 14

本文提供了有关此问题的更多详细信息:http: //electrosofts.c​​om/systemverilog/arrays.html,尤其是第5.2节.

打包数组是一种将矢量细分为子字段的机制,可以方便地将其作为数组元素进行访问.因此,保证打包数组被表示为连续的位组.解包的阵列可能会也可能不会如此表示.打包数组与解压缩数组的不同之处在于,当打包数组作为主数组出现时,它被视为单个向量.

  • > 压缩数组与未压缩数组的不同之处在于,当压缩数组作为主数组出现时,它被视为单个向量。这句话的意思是什么? (3认同)

小智 5

在了解完全打包和解包的数组之前,还可以看看如何通过声明来了解哪个数组是什么.打包数组在大小声明之前有一个对象名称.例如:

bit [3][7] a;
Run Code Online (Sandbox Code Playgroud)

解包后的数组在大小声明后有一个对象名.例如:

bit a[3];
Run Code Online (Sandbox Code Playgroud)

打包的数组使内存,而解压缩不.您也可以像这样访问/声明解压缩的数组

reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1};
Run Code Online (Sandbox Code Playgroud)

您可以混合打包和解压缩的数组来创建多维内存.例如:

bit [3:0][7:0]a[2:0].
Run Code Online (Sandbox Code Playgroud)

它产生一个4(即4*8)字节的数组,深度为3.

  • “打包的阵列可以存储内存,而未打包的则不可以。” 这意味着什么?有许多FPGA综合工具可将解压缩后的阵列转换为某种存储器(FF或RAM)。 (2认同)