【随笔】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  阅读(...)  评论(...编辑  收藏

导航