在寄存器的声明,示例代码显示了这个:我们如何在verilog中声明多位寄存器?
reg[15:0] regfile[0:15];
我不明白为什么[0:15]的变量名后反转。 reg [15:0]声明了一个16位的寄存器,但为什么变量名是相反的呢?
在寄存器的声明,示例代码显示了这个:我们如何在verilog中声明多位寄存器?
reg[15:0] regfile[0:15];
我不明白为什么[0:15]的变量名后反转。 reg [15:0]声明了一个16位的寄存器,但为什么变量名是相反的呢?
通过SystemVerilog的所使用的术语中,[15:0]的数据类型后reg
表示填充阵列尺寸。 reg [15:0]
是一个16位的包装的或整型。一个整数类型可以用在算术表达式中。 15是最高有效位(MSB),0是最低有效位(LSB)。索引积分值时,大多数计算机系统的LSB都为0。
显示在声明的变量名称右侧的[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位存储器。
reg[15:0] regfile[A:B];
是宣称可使用A,A+1..B
reg[15:0] regfile[0:15];
索引(B-A+1)
16位寄存器快捷声明
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];