Generate for loop 100 digit BCD adder
/*注释
a[(i*4)+3:(i*4)]:从400位输入向量a中提取第i个4位BCD数字。这里使用了Verilog的位选择语法[high:low]。
(i*4)+3:高位索引,表示第i个4位数字的最高位。
(i*4):低位索引,表示第i个4位数字的最低位。
*/
module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum
);
// 用于连接每个BCD加法器的进位
wire [99:0] internal_cout;
// 实例化100个BCD加法器
genvar i;
generate
for (i = 0; i < 100; i = i + 1) begin : gen_bcd_adder
bcd_fadd bcd_adder (
.a(a[(i*4)+3:(i*4)]), // 从400位向量中提取第i个4位BCD数字
.b(b[(i*4)+3:(i*4)]), // 从400位向量中提取第i个4位BCD数字
.cin((i == 0) ? cin : internal_cout[i-1]), // 第一个加法器使用cin,其余使用前一个加法器的进位
.cout(internal_cout[i]), // 当前加法器的进位输出
.sum(sum[(i*4)+3:(i*4)]) // 当前加法器的和输出
);
end
endgenerate
// 最终的进位输出
assign cout = internal_cout[99];
endmodule