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