具有独特参数的SystemVerilog接口数组

问题描述 投票:0回答:1

我有一个模块(我们称之为“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


我尝试像示例中那样连接所有内容,但它无法编译或合成。

verilog system-verilog hdl
1个回答
0
投票

建议使用参数数组:

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

您可以在模块中声明它或作为参数传递给模块。 否则,您可以继续使用您的案例陈述。但维护比较困难。

© www.soinside.com 2019 - 2024. All rights reserved.