我有一个带时钟输入的参数化接口。例如:
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
修改参数
- “虚拟界面”功能
有什么建议吗?
答案 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