【问题标题】:How can I use the force with array in verilog?如何在verilog中使用带有数组的力?
【发布时间】:2016-12-07 07:04:01
【问题描述】:

我想通过在 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)].

我是不是做错了什么?

更新2

我原来的概念如下,

整数 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

但这不适用于

Illegal operand for constant expression [4(IEEE)] 错误消息。

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

【问题讨论】:

    标签: verilog


    【解决方案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
    

    【讨论】:

    • 不能在生成语句中使用wire吗?我已经更新了问题。
    • 您不能使用连线作为循环索引。 #10 需要在程序块内;用于生成 for 循环的 begin-end 不是程序性的。您需要解释为什么需要强制内部信号以及您的意图是什么,然后我才能提出更完整的解决方案。
    • 我需要在程序块中运行它。运行覆盖范围。
    • 强制内部信号来提高覆盖率收集是完全错误的方法。覆盖是通过端口上的刺激来实现的。如果您无法获得所需的覆盖范围,则说明您没有施加足够的刺激,或者条件因设计或错误而不合理。
    • 我知道完全理解它。但这是我们唯一的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多