我有一个带时钟输入的参数化接口。例如:具有不同参数的SystemVerilog接口阵列
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
但是,在这种情况下,接口阵列interfaces[xxx].itf_inst
(和.slave
如果我要选择“从” modport)和的instanciation MyModule
使用interfaces[NB_ITFS].itf_inst.slave
会产生错误。
我也尝试没有成功: - 一个通用的定义itf itf_inst[NB_ITFS] (.clk(clk));
并试图修改使用defparam
里面的参数生成块 - “虚拟接口”功能
什么建议吗?
我同意这个解决方案。 – Robby
另外,你有什么想法仍然在itfa中实现它吗?我想为itfa创建一个“slave”modport,它是itf_inst“slave”modports的数组... – Robby