如何在verilog中使用数组的力?

时间:2016-12-07 07:04:02

标签: verilog

我想通过在verilog中派生多个实例强制一些信号,如下所示。

integer ii;

    initial begin
        for (ii=0; ii<19; ii=ii+1) begin                                                                        
         force sydnney.top.vx1.mpg.jpg[ii].trig.be[3]                = 1'b1;
        end 
    end

但是,我有以下错误:

Illegal operand for constant expression [4(IEEE)].

使用那种不可能的方法吗?

更新

我在使用时遇到了一些错误,

         generate                                                                            
          wire val;                                                                    
          genvar xidx;                                                                       
          for(val=0; val<3; val=val+1) begin : force_be3y_loop                               
          #10                                                                                
          for(xidx=0; xidx<3; xidx=xidx+1) begin : force_be3x_loop                           
         initial force top.comp.img.tc[xidx].t1c.b2tc  = val;      
         initial force top.comp.img.tc[xidx].t1c.b2tc[23] = val;   
         initial force top.comp.img.tc[xidx].t1c.b2tc[22] = val;   
         initial force top.comp.img.tc[xidx].t1c.b2tc[21] = val;  
         initial force top.comp.img.tc[xidx].t1c.b2tc[20] = val;   
    end

end
endgenerate

错误消息:

 Expecting the keyword 'end' [12.1.3(IEEE 2001)].
An 'endgenerate' is expected [12.1.3(IEEE 2001)].
 expecting the keyword 'endmodule' [12.1(IEEE)].
An 'endgenerate' is expected [12.1.3(IEEE 2001)].

我做错了吗?

UPDATE2

我的原始概念如下,

整数ii;

initial begin
    for (bb=0; bb<3; bb=bb+1) begin                                                                        
     #10
     for (ii=0; ii<19; ii=ii+1) begin                                                                        
      force sydnney.top.vx1.mpg.jpg[ii].trig.be[3]                = bb;
      ...
     end 
end

但这不适用于

  

常量表达式[4(IEEE)]错误消息的非法操作数。

所以我正在寻找解决方案。

1 个答案:

答案 0 :(得分:1)

分层引用的模块部分必须是常量。您无法在模拟时循环遍历阵列模块实例的索引或生成循环。您可以在编译的精化阶段使用generate-for-loops循环遍历它们。

generate
  genvar gidx;
  for(gidx=0; gidx<19; gidx=gidx+1) begin : force_be3_loop
    initial force sydnney.top.vx1.mpg.jpg[gidx].trig.be[3] = 1'b1;
  end
endgenerate