我有一个模块(我们称之为“mem”),它有一个接口数组作为端口,参数 NB_ITFS 声明接口数量和一个数据 WIDTH 参数。
module mem
#(NB_ITFS=2)
(itf itfa [NB_ITFS-1:0]);
logic [31:0] data [NB_ITFS-1:0];
always_comb
begin
data[0] = {4{itfa[0].data}};
data[1] = {2{itfa[1].data}};
data[2] = itfa[2].data;
end
endmodule
界面如下:
interface itf #(WIDTH = 8)();
logic [WIDTH-1:0] data;
endinterface
如何创建一个接口数组,其中每个接口都有唯一的参数? 我如何将它们传递给“mem”模块?
示例:
module MyModule #(NB_ITFS=2) ();
for (genvar i = 0; i<NB_ITFS; i++) begin : ITFA_GEN
case (i)
0: itf #(8) itf_if();
1: itf #(16) itf_if();
default: itf #(32) itf_if();
endcase
end
mem #(.NB_ITFS(NB_ITFS)) my_mem (.itfa(itf_if));
endmodule
我尝试像示例中那样连接所有内容,但它无法编译或合成。
建议使用参数数组:
module MyModule #(NB_ITFS=2) ();
localparam int iparam[] = '{8,16};
for (genvar i = 0; i<NB_ITFS; i++) begin : ITFA_GEN
itf #(iparam[i]) itf_if();
end
endmodule
您可以在模块中声明它或作为参数传递给模块。 否则,您可以继续使用您的案例陈述。但维护比较困难。