首页 > 解决方案 > 是否可以在编译时在 verilog 中声明模块输入?

问题描述

例如,我有以下生成块:

localparam N = 4
localparam P = 16
genvar i;
generate 
    for(i=0;i<P;i=i+1)
        begin: dmnGen
        localparam [N-1:0]r = func_r(i);   
        and dmn(OUT[i], S[3][r[3]], S[2][r[2]], S[1][r[1]], S[0][r[0]], EN);
    end
endgenerate

我想S[x][r[x]]根据参数 N 向和门添加输入。是否可以在编译时以编程方式添加输入?

标签: verilog

解决方案


您不能根据参数更改端口连接数。但是您可以生成一组级联and门,更好的是,使用归约 & 运算符。

localparam N = 4
localparam P = 16

genvar i,j;
  for(i=0;i<P;i=i+1) begin: dmnGen
    localparam [N-1:0]r = func_r(i);
    wire [N-1:0] p;
    assign OUT[i] = &p;
    for(j=0;j<N;j=j+1)
     assign p[j] = S[j][r[j]];
  end
endgenerate

推荐阅读