2013-10-06 119 views

回答

1
考虑

通过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还允许多个打包维度,以及执行某些操作(如分配和比较整个或部分解压缩数组)的功能。

0

我认为这是一个比规定更多的约定。例如,请参阅IEEE Std 1800-2012中的第7.4.4节“存储器”。您的regfile被认为是一个16位宽的16位存储器。

1
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];