跟进这个关于 SV 中压缩向量和非压缩向量之间的区别的问题,我为什么要使用解压缩向量?
压缩向量具有未压缩向量所没有的这些优点:
- 您可以对它们执行按位操作
- 您可以对它们执行算术运算
- 你可以把它们切片
- 您可以将它们复制为一个整体矢量
- 您可以使用未打包的向量做任何事情(据我所知)
解压向量比打包向量有什么优势?
跟进这个关于 SV 中压缩向量和非压缩向量之间的区别的问题,我为什么要使用解压缩向量?
压缩向量具有未压缩向量所没有的这些优点:
解压向量比打包向量有什么优势?
我喜欢使用 unpacked 的还有另一个原因。解压后,不会有将整个数组名视为变量并进行错误赋值的诱惑(和偶然的可能性)。当您可能认为您正在访问元素 N 的 B 位时,也没有从一个元素到另一个元素的位流的可能性,但实际上您可能正在访问元素 N 的 K 位和元素 N+-1 的 BK 位。 .
我的理念是仅将属于一起的事物作为“信息单元”保留在打包维度中。未包装维度中的其他所有内容。默认思维应该是解包的,只打包你需要的。
例如,如果我有 9 个端口,每个端口都有 21 位信息,我想将其声明为:
input logic [20:0] p1 [9];
该20:0
部分构成一个信息单元,一起分配和采样(名义上)。将这些位分开将破坏协议或端口的字符。另一方面,将端口数从 9 个更改为 16 个,不会影响每个端口中信息的性质,因此 9 个端口在我看来确实属于未打包维度。
希望这可能会给你一个思考的范式......在这个范式中,你会惊讶地发现有多少东西开始变得没有包装,而你一直认为它是包装好的!
解压数组的存在有几个原因。
1) 压缩数组作为连续的位序列存储在内存中。解包数组可以让每个元素独立存储,从而产生更好的模拟性能。
2) 解包数组可以是不是位向量的类型。整数、字节、事件、结构、类等数组只能被解包。
3) 大多数数组操作方法仅适用于解包数组。
4)也许,只有解压的数组可以分配给使用数组文字。我不知道。
可能还有其他原因。