需要概念来理解系统verilog中的数组声明

时间:2013-12-30 13:27:54

标签: system-verilog

在SystemVerilog中声明数组和数组查询功能时,我总是感到困惑。你能否详细解释我给出的例子:

示例1

integer matrix[7:0][0:31][15:0];

// 3-dimensional unpacked array of integers i am confuse in size 
// and dimension of given array for 1 and 2 dimension its easy to 
// understand but for 3 and 4-dimension its little bit confusing...

示例-2

//bit [1:5][10:16] foo [21:27][31:38]; 

示例-3

//module array(); 

bit [1:5][10:16] foo1 [21:27][31:38],foo2 [31:27][33:38]; 

initial 

begin 

$display(" dimensions of foo1 is %d foo2 is %d",$dimensions(foo1),$dimensions(foo2) );

end 

输出......

dimensions of foo1 is 4 foo2 is 4

我也没有得到这个......

2 个答案:

答案 0 :(得分:1)

有些事情可能让你感到困惑。

来自Verilog,打包类型是后面所有变量的数据类型的一部分

reg [7:0]  rega, regb, regc[0:9]; // rega, regb are 8-bit variables, regc is an unpacked array of 10 8-bit variables

SystemVerilog添加了多个打包维度,但它仍然是基本数据类型的一部分

reg [7:0][0:3]  rega, regb, regc[0:9]; // rega, regb are 32-bit variables, regc is an unpacked array of 10 32-bit variables

$ dimensions函数为您提供打包和解压缩的维度总数,$ unpacked_dimensions只为您提供已解压缩的维度数。

integerreg [31:0]的快捷方式,intbit [31:0]的快捷方式。所以

integer matrix[7:0][0:31][15:0];

是具有1个打包维度(也称为向量)和3个未打包维度的4维数组。

答案 1 :(得分:1)

参见第7.4.5节“IEEE 1800-2009的多维数组”

标识符前面的尺寸设置打包尺寸。 标识符后面的尺寸设置了解压缩的尺寸。

bit [3:0] [7:0] joe [1:10]; // 10 elements of 4 8-bit bytes 

在多维声明中,在类型之后和名称之前声明的维度 (前面的声明中的[3:0][7:0])变化比名称后面的维度更快 (前一声明中的[1:10])。 引用时,打包尺寸([3:0], [7:0])如下 解压缩的尺寸([1:10])。

即。在维度列表中,最右边的一个变化最快,如在C. 但是,打包维度的变化速度比解压缩的维度更快

bit [1:10] v1 [1:5]; // 1 to 10 varies most rapidly
bit v2 [1:5] [1:10]; // 1 to 10 varies most rapidly
bit [1:5] [1:10] v3 ; // 1 to 10 varies most rapidly
bit [1:5] [1:6] v4 [1:7] [1:8]; // 1 to 6 varies most rapidly, followed by 1 to 5, then 1 to 8 and then 1 to 7

示例1:您可以按以下方式查看设置:

Example 1 illustration

示例2:

bit [1:5][10:16] foo [21:27][31:38];

这与示例1类似。

Example 2 illustration

示例3:

module array(); 

bit [1:5][10:16] foo1 [21:27][31:38],foo2 [31:27][33:38]; 

initial 

begin 

$display(" dimensions of foo1 is %d foo2 is %d",$dimensions(foo1),$dimensions(foo2) );

end 

上述模块中的声明与

相同
bit [1:5][10:16] foo1 [21:27][31:38];
bit [1:5][10:16] foo2 [31:27][33:38];

正如Dave所提到的,$dimensions函数为您提供打包和解包的维度总数。两个foo1和foo2都是4维,显示值为4。

有关此主题的更多信息,请访问以下链接。这将清除你所有的疑虑。这里提供了一个很好的表示。 http://testbench.in/SV_09_ARRAYS.html