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

Nat*_*man 7 system-verilog

跟进有关SV紧缩和非紧缩向量之间的差异问题,为什么我会永远想用解压载体?
打包向量具有以下优点:解压缩的向量不具有:

  • 您可以对它们执行按位操作
  • 您可以对它们执行算术运算
  • 你可以把它们切成片
  • 您可以将它们复制为整个矢量
  • 你可以用un packed矢量做任何事情(据我所知)

解包载体有多大优势?

小智 10

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

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

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

input logic [20:0] p1 [9];
Run Code Online (Sandbox Code Playgroud)

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

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


Ste*_*e K 7

出于多种原因存在解压缩的阵列.

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

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

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

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

可能还有其他原因.