跟踪this关于SV中打包和解包矢量之间差异的问题,我为什么要使用解压缩矢量?
打包的载体具有以下优点:解包的载体没有:
解包载体对打包载体有什么好处?
答案 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)也许,只能将解压缩的数组分配给使用数组文字。我不确定。
可能还有其他原因。