Bcdadd100
You are provided with a BCD one-digit adder named bcd_fadd that adds two BCD digits and carry-in, and produces a sum and carry-out.
module bcd_fadd ( input [3:0] a, input [3:0] b, input cin, output cout, output [3:0] sum );
Instantiate 100 copies of bcd_fadd to create a 100-digit BCD ripple-carry adder. Your adder should add two 100-digit BCD numbers (packed into 400-bit vectors) and a carry-in to produce a 100-digit sum and carry out.
Module Declaration
module top_module( input [399:0] a, b, input cin, output cout, output [399:0] sum );
Write your solution here
module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum );
genvar j;
reg [99:0] cout_r;
generate
bcd_fadd(.a(a[3:0]),.b(b[3:0]),.sum(sum[3:0]),.cin(cin),.cout(cout_r[0]));
for(j=1;j<100;j++)begin:bcd_fadd_inst
bcd_fadd(.a(a[4*j+3:4*j]),.b(b[4*j+3:4*j]),.sum(sum[4*j+3:4*j]),.cin(cout_r[j-1]),.cout(cout_r[j]));
end
endgenerate
assign cout=cout_r[99];
endmodule