【随笔】Verilog HDL中reg型变量赋值问题
实例代码如下:
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不是常值。代码可以修改为:
integer j; for(j = 0; j < 8; j = j + 1) reg_file[(avs_s1_address << 3) + j] <= avs_s1_writedata[j];
总结: reg型变量对其一段数据操作时,不可以用变量规定其段范围;而对其某一位操作时,位索引号可以用变量。跟C语言中数组类似,定义时其大小不可以用变量声明,访问时可以。
posted on 2010-11-03 19:03 stone_xiyi 阅读(9636) 评论(0) 编辑 收藏 举报