Bcdadd100

2023. 6. 26. 15:17FPGA/HDLBits

728x90

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 top_module( 
    input [399:0] a, b,
    input cin,
    output cout,
    output [399:0] sum );
    wire [399:0] cout_tmp;
    bcd_fadd fadd(a[3:0], b[3:0], cin, cout_tmp[0], sum[3:0]);
    assign cout = cout_tmp[396];
    
    generate 
        genvar i;
        for(i = 4; i<400;i=i+4) begin : add
            bcd_fadd fadd(a[i+3:i], b[i+3:i], cout_tmp[i-4], cout_tmp[i], sum[i+3:i]);
        end
    endgenerate
endmodule

 


 

module top_module( 
    input [399:0] a, b,         // 400비트 입력 벡터 a와 b
    input cin,                 // 입력 캐리 비트
    output cout,               // 출력 캐리 비트
    output [399:0] sum         // 400비트 출력 벡터 sum
);
    wire [399:0] cout_tmp;     // 중간 캐리 비트를 저장하는 와이어
    
    // bcd_fadd 모듈을 인스턴스화하여 a와 b의 첫 4비트를 더하고
    // 그 결과를 sum[3:0]에 저장하고 캐리 비트를 cout_tmp[0]에 저장.
    bcd_fadd fadd(a[3:0], b[3:0], cin, cout_tmp[0], sum[3:0]);
    
    assign cout = cout_tmp[396];  // 가장 상위 비트의 캐리 비트를 cout에 할당.
    
    // 나머지 비트에 대해 추가적인 bcd_fadd 인스턴스를 생성.
    generate 
        genvar i;                          // generate 변수 i를 선언.
        for(i = 4; i < 400; i = i + 4) begin : add
            // bcd_fadd 모듈을 인스턴스화하여 a[i+3:i]와 b[i+3:i]를 더한다.
            // 이전의 캐리 비트 cout_tmp[i-4]를 사용.
            // 결과를 sum[i+3:i]에 저장하고 캐리 비트를 cout_tmp[i]에 저장.
            bcd_fadd fadd(a[i+3:i], b[i+3:i], cout_tmp[i-4], cout_tmp[i], sum[i+3:i]);
        end
    endgenerate
endmodule

module bcd_fadd (
    input [3:0] a,        // 4비트 입력 벡터 a
    input [3:0] b,        // 4비트 입력 벡터 b
    input cin,            // 입력 캐리 비트
    output cout,          // 출력 캐리 비트
    output [3:0] sum      // 4비트 출력 벡터 sum
);

'FPGA > HDLBits' 카테고리의 다른 글

Bcdadd4  (0) 2023.06.26
Adder100  (0) 2023.06.26
Adder100i  (0) 2023.06.25
Reduction  (0) 2023.06.24
Conditional  (0) 2023.06.24