2009-01-25 53 views
23

看一些代码,我保持系统的Verilog我看到的是这样定义的一些信号:包装VS解压矢量系统的Verilog

node [range_hi:range_lo]x; 

和其他人都是这样定义的:

node y[range_hi:range_lo]; 

据我所知,x被定义为打包,而y被定义为解压缩。但是,我不知道这意味着什么。

System Verilog中的压缩和非压缩向量有什么区别?

编辑:回应@ Empi的回答,为什么要写一个SV的硬件设计师关心数组的内部表示呢?有没有什么时候我不应该不能使用打包信号?

回答

13

本文提供有关此问题的更多详细信息: http://electrosofts.com/systemverilog/arrays.html,特别是第5.2节。

打包数组是一种将矢量细分为子域的机制,它可以方便地作为数组元素访问。因此,打包数组保证被表示为连续的一组位。解压后的数组可能会或可能不会被如此表示。打包数组与打包数组的不同之处在于,当打包数组显示为主数组时,它被视为单个向量。

5

在知道包装和拆包的数组是什么之前,让我们看看如何通过声明知道哪个数组是什么。 打包数组的对象名称在大小声明之前。例如:

bit [3][7] a; 

解包数组的对象名称在大小声明后出现。例如:

bit a[3]; 

打包数组使存储器,而解压缩dont。 您可以访问/解压声明数组这样也

reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1}; 

你可以混合使用这两种包装和拆包阵列进行多维的记忆。例如:

bit [3:0][7:0]a[2:0]. 

它使阵列4(即4×8),用深度字节3.

+0

“Packed array make memory,Unpacked dont。”那是什么意思?有很多FPGA综合工具会将未打包的阵列转换成某种内存(FF或RAM)。 – 2017-05-30 19:22:16

1

盒装阵列主要用于有效内存使用情况时,我们正在编写一个[3:0 ] [7:0] A [4:0]表示在32位存储单元中4个8位的每一个都打包形成一个32位。右侧值意味着有5个这样的切片在那里。

0

解压后的数组将给您比打包数组更多的编译时错误检查。

由于这个原因,我在模块的端口定义上看到了解压缩数组。如果信号的尺寸与解包阵列的端口不完全相同,那么编译器会报错。对于打包的数组,它通常会继续,并且尽可能地将事物连接起来,而不是发出错误。