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