所以,我正在尝试在verilog中编写一个加法器树。它的通用部分是它具有可配置数量的要添加的元素和可配置的字长。但是,我遇到一个又一个问题,我开始质疑这是解决我的问题的正确方法。(我将在一个更大的项目中使用它。)绝对可以对加法器树进行硬编码,尽管这会占用大量文本。
所以,我虽然会和你核对一下你对它的看法。这是“这样做的方法”吗?我也愿意就不同的方法提出建议。
我还可以提到我对verilog很陌生。
如果有人感兴趣,这是我当前的非工作代码:(我不指望你解决问题;我只是为了方便起见。)
module adderTree(
input clk,
input [`WORDSIZE * `BANKSIZE - 1 : 0] terms_flat,
output [`WORDSIZE - 1 : 0] sum
);
genvar i, j;
reg [`WORDSIZE - 1 : 0] pipeline [2 * `BANKSIZE - 1 : 0]; // Pipeline array
reg clkPl = 0; // Pipeline clock
assign sum = pipeline[0];
// Pack flat terms
generate
for (i = `BANKSIZE; i < 2 * `BANKSIZE; i = i + 1) begin
always @ (posedge clk) begin
pipeline[i] <= terms_flat[i * `WORDSIZE +: `WORDSIZE];
clkPl = 1;
end
end
endgenerate
// Add terms logarithmically
generate
for (i = 0; i < $clog2(`BANKSIZE); i = i + 1) begin
for (j = 0; j < 2 ** i; j = j + 1) begin
always @ (posedge clkPl) begin
pipeline[i * (2 ** i) + j] <= pipeline[i * 2 * (2 ** i) + 2 * j] + pipeline[i * 2 * (2 ** i) + 2 * j + 1];
end
end
end
endgenerate
endmodule