verilog - 具有独特参数的 SystemVerilog 接口(interface)数组

标签 verilog system-verilog hdl

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

相关文章:

c - Verilog 中的 $display 和 C 中的 printf

system-verilog - 动态数组构造函数是否调用delete?

verilog - 什么是在编译时抛出错误的 LINT/综合安全语句?

verilog - 硬件描述语言(Verilog、VHDL 等)的最佳实践是什么?

verilog - `always` block 的合成

algorithm - 快速、小面积、低延迟的部分排序算法

module - 我的测试平台始终将 X 显示为输出

sorting - 对 SystemVerilog 关联数组进行排序的最佳方法?

conditional-statements - verilog模块的条件实例化

embedded - 我应该从哪里开始使用 HDL?