module top_module( input [ 399: 0 ] a, b, input cin, output cout, output [ 399: 0 ] sum ); wire [ 99: 0 ] temp_co; genvar i; generate for ( i = 0; i < 100 ; i = i + 1 ) begin:ppp if ( i == 0 ) bcd_add bcd_add_inst( a[ i * 4 + 3 : i * 4 ], b[ i * 4 + 3 : i * 4 ], cin, temp_co[ i ], sum[ i * 4 + 3 : i * 4 ] ); else bcd_add bcd_add_inst( a[ i * 4 + 3 : i * 4 ], b[ i * 4 + 3 : i * 4 ], temp_co[ i - 1 ], temp_co[ i ], sum[ i * 4 + 3 : i * 4 ] ); end endgenerate assign cout = temp_co[ 99 ]; endmodule module bcd_add( input [ 3: 0 ] x, input [ 3: 0 ] y, input ci, output co, output reg [ 3: 0 ] sum ); wire [ 4: 0 ] temp = x + y + ci; always @ ( * ) if ( temp >= 10 ) begin sum = temp - 10; co = 1; end else begin sum = temp; co = 0; end endmodule