我遇到的问题是需要分阶段收敛导线,每个阶段的输入和输出都是前一阶段的一半(想想类似于分阶段选择器)。我不希望我的模块中有未连接的电线。
我可以声明一个大小为numStages的向量数组,然后在生成循环中定义每个向量的大小吗?例如:
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
我应该考虑另一种方法,还是一种方法来完成我的尝试?
答案 0 :(得分:1)
您可以将电线的声明移动到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
然后,如果您需要访问与当前内容不同的阶段的电线,您可以使用类似generateStage[i+1].stageInputs
的内容。您使用访问generateStage
的索引必须是常量,因为它实际上不是相同元素的数组。