0

在寄存器的声明中,示例代码显示了这一点:

reg[15:0]  regfile[0:15];

我不明白为什么 [0:15] 在变量名之后倒置。reg[15:0] 声明了一个 16 位寄存器,但为什么它与变量名相反呢?

4

3 回答 3

1
reg[15:0]  regfile[A:B];

是声明(B-A+1)可以使用索引的 16 位寄存器的快捷方式A,A+1..B

reg[15:0]  regfile[0:15];

宣布

reg[15:0]  regfile[0];
reg[15:0]  regfile[1];
..................... 
reg[15:0]  regfile[14];
reg[15:0]  regfile[15];

如果您将索引反转如下

reg[15:0]  regfile[15:0]; 

以下声明相同但具有不同的索引10..24,25。索引0,1..9无效。

reg[15:0]  regfile[25:10];
于 2013-10-06T13:42:13.620 回答
1

考虑到 SystemVerilog 使用的术语,数据类型后面的 [15:0]reg表示打包数组维度。reg [15:0]是 16 位压缩或整数类型。整数类型可用于算术表达式。15 是最高有效位 (MSB),0 是最低有效位 (LSB)。大多数计算机系统在索引整数值时将 0 作为其 LSB。

出现在已声明变量名称右侧的 [0:15] 是未压缩维度。reg [15:0] regfile[0:15]正在声明打包数组的未打包数组。在 Verilog 中,您一次只能选择解压缩数组的一个元素来读取或写入。因此,解压缩维度的数字排序的唯一意义是当您调用诸如$readmemh. 左边的第一个索引表示默认加载的第一个元素,您通常希望它为 0。在 SystemVerilog 中,您可以将解压缩的数组作为一个整体执行操作,因此索引排序变得更加重要。

Verilog-2001 允许您声明多个未打包的维度,但您一次只能选择一个数组元素。SystemVerilog 还允许多个打包维度,以及对解包数组的全部或部分执行某些操作(例如赋值和比较)的能力。

于 2013-10-07T16:18:47.683 回答
0

我相信这更像是一种约定而不是一种要求。例如,请参阅IEEE Std 1800-2012中的第 7.4.4 节“内存” 。您regfile被认为是具有 16 个位置的 16 位宽内存。

于 2013-10-06T13:32:58.867 回答