跨模块引用中的索引无效

时间:2015-01-07 14:14:38

标签: system-verilog

下面的

是我的top_file的代码片段

`define NUM_SENSORS 2;

module test_top();

  svt_configuration multiple_top_cfg[`NUM_SENSORS]; // configuration class instance

  svt_xmtr_if xmtr_if[`NUM_OF_SENSORS]();  // interface instance
  svt_rcvr_if rcvr_if[`NUM_OF_SENSORS](); 

  always begin
    fork
      change_clock_speed();
    join_none
  end

  task automatic change_clock_speed();

    for(i=0; i<`NUM_OF_SENSORS; i++) begin
      wait(multiple_top_cfg[i] != null);
      @(multiple_new_dphy_ui[i]) begin 
        if(multiple_top_cfg[i].xmtr_cfg.lane_cfg.clock_type == svt_mipi_lane_configuration::NON_CONTINUOUS) begin
          wait({xmtr_if[i].serial_if.serial_tx_clk_if.dp,xmtr_if[i].serial_if.serial_tx_clk_if.dn} === 2'b11);
        end
        else begin
          if(multiple_top_cfg[i].xmtr_cfg.lane_cfg.clock_type == svt_mipi_lane_configuration::CONTINUOUS) begin
            wait({xmtr_if[i].serial_if.serial_if[0].dp,xmtr_if[i].serial_if.serial_if[0].dn} === 2'b11);
          end
        end
        multiple_change_dphy_ui[i] = 1;   //  this is a local reg
        multiple_tx_clock_period[i] = multiple_new_dphy_ui[i]; // this is a local reg
        multiple_quadrature[i] = multiple_new_dphy_ui[i];  // this is a local reg
      end
    end

  endtask
  // ... other lines
endmodule

当我运行测试时,我收到此错误:

Error-[IIXMR] Invalid index in cross-module reference top.serial.sv, 311 Invalid index in cross-module reference due to index is not constant. Argument: xmtr_if[i].serial_if.serial_tx_clk_if.dp Source info: : wait (({xmtr_if[i].serial_if.serial_tx_clk_if.dp, xmtr_if[i].serial_if.serial_tx_clk_if.dn} === 2'b11))

我理解为什么会出现这个错误,但我没有任何解决方案......任何人都可以提供帮助......

我试图将always块放在generate块中。但另一个错误即将来临。 任何解决这个错误的方法请...

谢谢, 俾人

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我做的是:

genvar i;
generate
  for(i=0; i<`NUM_SENSORS; i++) begin
    always begin
      change_clock_speed();
    end
  end
endgenerate

现在它正在运作。 :)