为什么我应该在System Verilog中使用解压缩的向量?

时间:2009-02-04 14:20:48

标签: system-verilog

跟踪this关于SV中打包和解包矢量之间差异的问题,我为什么要使用解压缩矢量?
打包的载体具有以下优点:解包的载体没有:

  • 您可以对它们执行按位操作
  • 您可以对它们执行算术运算
  • 您可以拍摄片段
  • 您可以将它们复制为整个矢量
  • 你可以用 un 打包的矢量做任何事情(据我所知)

解包载体对打包载体有什么好处?

2 个答案:

答案 0 :(得分:10)

还有另一个原因,我喜欢使用unpacked。在解压缩的情况下,没有将整个数组名称视为变量的诱惑(并且意外可能),并进行错误的赋值。当你可能认为你正在访问元素N的B位时,也不存在从一个元素到另一个元素的位流失的可能性,但实际上你可能正在访问元素N + -1的元素N和BK位的K位。

我的理念是只将属于一起的东西保留在包装维度中作为“信息单元”。解压缩维度中的其他所有内容。默认思维应该解压缩,并且只打包你需要的东西。

例如,如果我有9个端口,每个端口有21位信息,我想将其声明为:

input logic [20:0] p1 [9];

20:0部分构成一个信息单元,一起分配和采样(名义上)。拆分这些位会破坏协议或端口的特性。另一方面,将端口数从9改为16,不会影响每个端口信息的性质,因此我认为9个端口确实属于解压缩的维度。

希望这可能会给你一个思考的范例......在这个范例中,你会惊讶地发现有多少东西开始出现,你总是认为它已经被打包了!!

答案 1 :(得分:7)

存在解包数组有几个原因。

1)打包的数组作为连续的位序列存储在存储器中。解包数组可以使每个元素独立存储,从而产生更高的仿真性能。

2)未打包的数组可以是不是位向量的类型。内联,字节,事件,结构,类等的数组只能解压缩。

3)大多数数组操作方法仅适用于解包数组。

4)也许,只能将解压缩的数组分配给使用数组文字。我不确定。

可能还有其他原因。