我有一个模块(我们称之为“mem”),它具有作为端口的接口(interface)数组、声明接口(interface)数量的参数 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
如何创建一个接口(interface)数组,其中每个接口(interface)都有唯一的参数? 如何将它们传递给“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
您可以在模块中声明它或作为参数传递给模块。
否则,您可以继续使用 case
语句。但维护起来比较困难。
关于verilog - 具有独特参数的 SystemVerilog 接口(interface)数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77646173/