维度列表中的短语 "Varies most rapidly" 是什么意思?
What does the phrase "Varies most rapidly" in a list of dimension mean?
例如:
bit [1:10] v1 [1:5]; //1 to 10 varies most rapidly; compatible with memory arrays
bit v2 [1:5][1:10]; //1 to 10 varies most rapidly, compatible with C;
如果您按内存中的顺序排列所有元素(或作为比特流),其索引在每个元素之间变化的维度是变化最快的维度。内存布局并不重要,因为 SystemVerilog 没有指针。但是,当您尝试 select 数组的一部分时,索引 selecting 从最小到最大变化是很重要的。
v1[2][3]
是 5 个中的 2 个,然后是 10 个中的 3 个。
除了@dave_59说的,用foreach
也有关系,eg:
module M;
bit [1:10] v1 [1:5];
initial
foreach(v1[i,j])
$display("v1[%0d][%0d]= %b", i, j, v1[i][j]);
endmodule
https://www.edaplayground.com/x/5b9m
显示
# KERNEL: v1[1][1]= 0
# KERNEL: v1[1][2]= 0
# KERNEL: v1[1][3]= 0
# KERNEL: v1[1][4]= 0
# KERNEL: v1[1][5]= 0
# KERNEL: v1[1][6]= 0
# KERNEL: v1[1][7]= 0
# KERNEL: v1[1][8]= 0
# KERNEL: v1[1][9]= 0
# KERNEL: v1[1][10]= 0
# KERNEL: v1[2][1]= 0
# KERNEL: v1[2][2]= 0
...
# KERNEL: v1[5][7]= 0
# KERNEL: v1[5][8]= 0
# KERNEL: v1[5][9]= 0
# KERNEL: v1[5][10]= 0
您可以看到 j
维度、大小 10 维度、packed 维度 "varies most rapidly"。
例如:
bit [1:10] v1 [1:5]; //1 to 10 varies most rapidly; compatible with memory arrays
bit v2 [1:5][1:10]; //1 to 10 varies most rapidly, compatible with C;
如果您按内存中的顺序排列所有元素(或作为比特流),其索引在每个元素之间变化的维度是变化最快的维度。内存布局并不重要,因为 SystemVerilog 没有指针。但是,当您尝试 select 数组的一部分时,索引 selecting 从最小到最大变化是很重要的。
v1[2][3]
是 5 个中的 2 个,然后是 10 个中的 3 个。
除了@dave_59说的,用foreach
也有关系,eg:
module M;
bit [1:10] v1 [1:5];
initial
foreach(v1[i,j])
$display("v1[%0d][%0d]= %b", i, j, v1[i][j]);
endmodule
https://www.edaplayground.com/x/5b9m
显示
# KERNEL: v1[1][1]= 0
# KERNEL: v1[1][2]= 0
# KERNEL: v1[1][3]= 0
# KERNEL: v1[1][4]= 0
# KERNEL: v1[1][5]= 0
# KERNEL: v1[1][6]= 0
# KERNEL: v1[1][7]= 0
# KERNEL: v1[1][8]= 0
# KERNEL: v1[1][9]= 0
# KERNEL: v1[1][10]= 0
# KERNEL: v1[2][1]= 0
# KERNEL: v1[2][2]= 0
...
# KERNEL: v1[5][7]= 0
# KERNEL: v1[5][8]= 0
# KERNEL: v1[5][9]= 0
# KERNEL: v1[5][10]= 0
您可以看到 j
维度、大小 10 维度、packed 维度 "varies most rapidly"。