实例代码如下:
1
2
|
reg [63:0] reg_file;
reg_file[((avs_s1_address << 3) + 7 ):(avs_s1_address << 3)] <= avs_s1_writedata[7:0];
|
如果这样写编译时会报错:
Error: Error (10734): Verilog HDL error at seg7_controller.v(82): avs_s1_address is not a constant
File: f:/fpga/niosii_mpc/de3_seg/ip/seg7_controller/seg7_controller.v Line: 82
错误提示解释说avs_s1_address不是常值。代码可以修改为:
1
2
3
|
integer j;
for
(j = 0; j < 8; j = j + 1)
reg_file[(avs_s1_address << 3) + j] <= avs_s1_writedata[j];
|
总结: reg型变量对其一段数据操作时,不可以用变量规定其段范围;而对其某一位操作时,位索引号可以用变量。跟C语言中数组类似,定义时其大小不可以用变量声明,访问时可以。