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