Arrays 不同大小向量的Verilog数组

Arrays 不同大小向量的Verilog数组,arrays,multidimensional-array,vector,verilog,system-verilog,Arrays,Multidimensional Array,Vector,Verilog,System Verilog,我有一个问题,需要将电线分阶段汇聚,每个阶段的输入和输出数量是前一阶段的一半(类似于阶段选择器)。我不希望模块中有未连接的电线 我可以声明一个向量大小numStages数组,然后在generate循环中定义每个向量的大小吗?例如: module Log2Alg(x, a, b); parameter N = 1; localparam numStages = $clog2(N); output x; input [N-1:0] a, b; wire [??

我有一个问题,需要将电线分阶段汇聚,每个阶段的输入和输出数量是前一阶段的一半(类似于阶段选择器)。我不希望模块中有未连接的电线

我可以声明一个向量大小numStages数组,然后在generate循环中定义每个向量的大小吗?例如:

module Log2Alg(x, a, b);
    parameter N = 1;
    localparam numStages = $clog2(N);
    output x;
    input [N-1:0] a, b;
    wire [???] stageInputs [0:numStages-1];
    wire [???] stageOutputs [0:numStages-1];

    genvar i, j;
    generate
        for(i = 0; i < numStages; i = i + 1)
        begin: generateStage
            stageInputs[i] = [2**(N-i):0]; // ???
            stageOutputs[i+1] = [2**(N-i-1)-1:0] // ???

            // Do stuff. Loop over j = i**2-1:0
        end
    endgenerate

endmodule
模块Log2Alg(x,a,b);
参数N=1;
localparam numStages=$clog2(N);
输出x;
输入[N-1:0]a,b;
导线[???]级输入[0:numStages-1];
导线[???]分段输出[0:numStages-1];
genvar i,j;
生成
对于(i=0;i

我是否应该考虑另一种方法,或者一种实现我所尝试的方法

您可以将导线的声明移动到
generate
循环中,而不是使其成为数组

module Log2Alg #(N=1) (
    output x, 
    input [N-1:0] a, b
    );
    localparam numStages = $clog2(N);


    genvar i, j;
    generate
        for(i = 0; i < numStages; i = i + 1)
        begin: generateStage
        wire stageInputs [2**(N-i):0];
        wire stageOutputs [2**(N-i-1)-1:0];
            // Do _stuff_. Loop over j = i**2-1:0
            //
        end
    endgenerate

endmodule
模块Log2Alg#(N=1)(
输出x,
输入[N-1:0]a,b
);
localparam numStages=$clog2(N);
genvar i,j;
生成
对于(i=0;i

然后,如果需要在与当前内容不同的阶段访问导线,可以使用类似于
generateStage[i+1].stageInputs的方法。使用access
generateStage
的索引必须是常量,因为它实际上不是相同元素的数组

为什么不在生成块中定义导线?这样,您就可以调整导线尺寸,并可以像访问阵列一样访问导线。(例如,
generateStage[3]。stageInputs
)您可以合并一个stage的两条输出线,还是所有输出都不同?你有多少个阶段?接下来的问题:我有没有办法创建或访问隐式generateStage[-1]?你可以在-1开始生成循环。您还可以在填充代码周围放置条件生成。