在寄存器的声明中,示例代码显示了这一点:
reg[15:0] regfile[0:15];
我不明白为什么 [0:15] 在变量名之后倒置。reg[15:0] 声明了一个 16 位寄存器,但为什么它与变量名相反呢?
在寄存器的声明中,示例代码显示了这一点:
reg[15:0] regfile[0:15];
我不明白为什么 [0:15] 在变量名之后倒置。reg[15:0] 声明了一个 16 位寄存器,但为什么它与变量名相反呢?
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];
考虑到 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 还允许多个打包维度,以及对解包数组的全部或部分执行某些操作(例如赋值和比较)的能力。
我相信这更像是一种约定而不是一种要求。例如,请参阅IEEE Std 1800-2012中的第 7.4.4 节“内存” 。您regfile
被认为是具有 16 个位置的 16 位宽内存。