尝试从 env(SystemVerilog、OVM)访问接口内部接口

Trying to access an interface inside interface from the env (SystemVerilog, OVM)

在我的环境 class 的构建函数中尝试连接接口:

   virtual my_if  my_vif;

   for (int i = 0; i<32; i++) begin
     _agent[i]._vif = my_vif._if[i];
   end

里面 my_if:

  interface my_if();
      if     _if[32]();
  endinterface :my_if

当运行模拟时我得到这个错误:

Error-[MFNF] Member not found
my_env.sv, 229 "this.my_vif." 
Could not find member '_if' in interface 'my_if', at "my_if.sv", 1.

_if 也是与下一个信号的接口:

interface if(); 
 logic                   clk;
 logic                   rstn;
 logic [101:0] requests;
 logic [63:0]  dataOut;
endinterface :if

问题是,当接口 _if 未包装在 my_if 接口下时,一切正常。

看起来您正在尝试使用数组实例在界面中实例化某些类型为 _if 的设计元素 32 次。

array instancesgenerate 个区块相关。因此,索引它们的唯一方法是从另一个 generate 块开始。您不能使用带索引的简单 for 循环来执行此操作。

生成块是 rtl 设计的一部分,通常对测试平台的适用性非常有限,特别是作为 agent 的动态结构。

您需要重新考虑您想要实施它的方式。