HDL-Bits Solution : 3-Bits Adder

In this quiz, I was required to instantiate three blocks of full adder, which forms 3-bit adder. Here is my code.

module full_adder (
input a,b,
    input cin,
    output cout,
    output sum);
    assign sum = a^b^cin;
    assign cout = (a&b)|(cin&(a^b));
 
endmodule
 
module top_module( 
    input [2:0] a, b,
    input cin,
    output [2:0] cout,
    output [2:0] sum );
 
    wire wire1;
    wire wire2;
    wire wire3;
 
 
    full_adder instance1 ( .a(a[0]), .b(b[0]), .cin(cin), .sum(sum[0]), .cout(wire1)   );
    full_adder instance2 ( .a(a[1]), .b(b[1]), .cin(wire1), .sum(sum[1]), .cout(wire2)   );
    full_adder instance3 ( .a(a[2]), .b(b[2]), .cin(wire2), .sum(sum[2]), .cout(wire3)   );
   
    assign cout[0] = wire1;
    assign cout[1] = wire2;
    assign cout[2] = wire3;
 
endmodule

The code above is an example of using “wire” signal to connect to two terminals. This code below is also usable without declaring “wire” signal. 

 

module full_adder (
input a,b,
    input cin,
    output cout,
    output sum);
    assign sum = a^b^cin;
    assign cout = (a&b)|(cin&(a^b));
 
endmodule
 
module top_module( 
    input [2:0] a, b,
    input cin,
    output [2:0] cout,
    output [2:0] sum );
 
    full_adder instance1 ( .a(a[0]), .b(b[0]), .cin(cin), .sum(sum[0]), .cout(cout[0])   );
    full_adder instance2 ( .a(a[1]), .b(b[1]), .cin(cout[0]), .sum(sum[1]), .cout(cout[1])   );
    full_adder instance3 ( .a(a[2]), .b(b[2]), .cin(cout[1]), .sum(sum[2]), .cout(cout[2])   );
 
endmodule

Reference: https://hdlbits.01xz.net/wiki/Adder3

Leave a Reply

Your email address will not be published. Required fields are marked *