SystemVerilog具有不同参数的接口数组

时间:2017-02-27 11:30:48

标签: arrays interface system-verilog

我有一个带时钟输入的参数化接口。例如:

interface itf # (PARAM1 = 16, PARAM2 = 8)(input logic clk);

此接口有一个名为“slave”的modport。

我的模块将此接口的数组作为输入(modport“slave”)。

module MyModule #(NB_ITFS = 4)(... itf.slave itfs[NB_ITFS]...);

MyModule的测试平台模块中,我想要一个能够测试NB_ITFS的不同值的通用代码。

问题:如何为MyModule instanciation创建我的接口数组(考虑到元素具有不同参数的事实)?

例如,我尝试使用生成语句:

module testbench()
...
generate
    genvar i;
    for (i = 0; i < NB_ITFS; i++)
    begin : interfaces
        itf #(.PARAM1(PARAM1_TABLE[i]), 
              .PARAM2(PARAM2_TABLE[i])) itf_inst (.clk(clk));
    end
endgenerate
...
endmodule

但在这种情况下,如果我想选择“slave”modport,接口数组为interfaces[xxx].itf_inst.slave,使用MyModule interfaces[NB_ITFS].itf_inst.slave的实例化引发错误。

我也尝试过没有成功:   - 通用定义itf itf_inst[NB_ITFS] (.clk(clk));并尝试使用生成块内的defparam修改参数   - “虚拟界面”功能

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如何将generate放入另一个界面:

interface itfa #(NB_ITFS = 4)(input logic clk);
  ...
  generate
    genvar i;
    for (i = 0; i < 4; i++)
    begin : interfaces
      itf #(.PARAM1(i), 
            .PARAM2(i)) itf_inst (.clk(clk));
    end
  endgenerate
  ...
endinterface

然后将其用作MyModule的接口:

module MyModule #(NB_ITFS = 4)(itfa itfs);
  ...
endmodule

然后您可以实例化外部接口(itfa)并以通常的方式将其连接到MyModule的实例:

module testbench;
  ...
  logic clk;
  ...
  itfa #(4) itfa_inst (.clk(clk));
  ...
  MyModule #(4) MyModule0 (.itfs(itfa_inst));
  ...
endmodule

https://www.edaplayground.com/x/254C