# Ripple Carry Adder ## Source Code ``` module RCA(a1,a2,a3,a4,b1,b2,b3,b4,cin,s1,s2,s3,s4,cout); input a1,a2,a3,a4,b1,b2,b3,b4,cin; output s1,s2,s3,s4,cout; wire c1,c2,c3; FullAdder A ( .a(a1), .b(b1), .c(cin), .sum(s1), .carry(c1) ); FullAdder B ( .a(a2), .b(b2), .c(c1), .sum(s2), .carry(c2) ); FullAdder C ( .a(a3), .b(b3), .c(c2), .sum(s3), .carry(c3) ); FullAdder D ( .a(a4), .b(b4), .c(c3), .sum(s4), .carry(cout) ); endmodule ``` ## Test Fixture ``` module RCA_Test; // Inputs reg a1; reg a2; reg a3; reg a4; reg b1; reg b2; reg b3; reg b4; reg cin; // Outputs wire s1; wire s2; wire s3; wire s4; wire cout; // Instantiate the Unit Under Test (UUT) RCA uut ( .a1(a1), .a2(a2), .a3(a3), .a4(a4), .b1(b1), .b2(b2), .b3(b3), .b4(b4), .cin(cin), .s1(s1), .s2(s2), .s3(s3), .s4(s4), .cout(cout) ); initial begin // Initialize Inputs a1 = 0; a2 = 0; a3 = 1; a4 = 1; b1 = 0; b2 = 0; b3 = 1; b4 = 0; cin = 0; #100; a1 = 1; a2 = 1; a3 = 1; a4 = 1; b1 = 1; b2 = 1; b3 = 1; b4 = 1; cin = 0; #100; // Add stimulus here end endmodule ``` ## Simulation ![](https://i.imgur.com/RA2nHrn.png) # Binary Coded Decimal ## Source Code ``` module BCD(a1,a2,a3,a4,b1,b2,b3,b4,cin,s1,s2,s3,s4,cout); input a1,a2,a3,a4,b1,b2,b3,b4,cin; output s1,s2,s3,s4,cout; wire c1,c2,c3,c4, temp1, temp2; RCA A ( .a1(a1), .a2(a2), .a3(a3), .a4(a4), .b1(b1), .b2(b2), .b3(b3), .b4(b4), .cin(cin), .s1(c1), .s2(c2), .s3(c3), .s4(c4), .cout(temp2) ); assign temp1=((c4&c3)|(c4&c2)|temp2); RCA B ( .a1(c1), .a2(c2), .a3(c3), .a4(c4), .b1(0), .b2(temp1), .b3(temp1), .b4(0), .cin(0), .s1(s1), .s2(s2), .s3(s3), .s4(s4), .cout(cout) ); endmodule ``` ## Test Fixture ``` module BCD_Test; // Inputs reg a1; reg a2; reg a3; reg a4; reg b1; reg b2; reg b3; reg b4; reg cin; // Outputs wire s1; wire s2; wire s3; wire s4; wire cout; // Instantiate the Unit Under Test (UUT) BCD uut ( .a1(a1), .a2(a2), .a3(a3), .a4(a4), .b1(b1), .b2(b2), .b3(b3), .b4(b4), .cin(cin), .s1(s1), .s2(s2), .s3(s3), .s4(s4), .cout(cout) ); initial begin // Initialize Inputs a1 = 0; a2 = 0; a3 = 0; a4 = 0; b1 = 1; b2 = 1; b3 = 1; b4 = 1; cin = 0; // Wait 100 ns for global reset to finish #100; // Add stimulus here end endmodule ``` ## Simulation ![](https://i.imgur.com/pwGfqoq.png) # Carry Loop Adder ## Source Code ``` module CLA(a0,a1,a2,a3,b0,b1,b2,b3,cin,s1,s2,s3,s4); input a0,a1,a2,a3,b0,b1,b2,b3,cin; output s1,s2,s3,s4; wire g0,g1,g2,g3,p0,p1,p2,p3,c1,c2,c3,c4,temp1,temp2,temp3,temp4; assign g0 = a0&b0; assign p0 = a0^b0; assign c1 = cin&p0+g0; FullAdder A ( .a(a0), .b(b0), .c(c1), .sum(s1), .carry(temp1) ); assign g1 = a1&b1; assign p1 = a1^b1; assign c2 = c1&p1+g1; FullAdder B ( .a(a1), .b(b1), .c(c2), .sum(s2), .carry(temp2) ); assign g2 = a2&b2; assign p2 = a2^b2; assign c3 = c2&p2+g2; FullAdder C ( .a(a2), .b(b2), .c(c3), .sum(s3), .carry(temp3) ); assign g3 = a3&b3; assign p3 = a3^b3; assign c4 = c3&p3+g3; FullAdder D( .a(a2), .b(b3), .c(c4), .sum(s4), .carry(temp4) ); endmodule ``` ## Test Fixture ``` module CLA_Test; // Inputs reg a0; reg a1; reg a2; reg a3; reg b0; reg b1; reg b2; reg b3; reg cin; // Outputs wire s1; wire s2; wire s3; wire s4; // Instantiate the Unit Under Test (UUT) CLA uut ( .a0(a0), .a1(a1), .a2(a2), .a3(a3), .b0(b0), .b1(b1), .b2(b2), .b3(b3), .cin(cin), .s1(s1), .s2(s2), .s3(s3), .s4(s4) ); initial begin // Initialize Inputs a0 = 0; a1 = 0; a2 = 0; a3 = 0; b0 = 1; b1 = 1; b2 = 1; b3 = 1; cin = 0; // Wait 100 ns for global reset to finish #100; // Add stimulus here end endmodule ``` ## Simulation ![](https://i.imgur.com/HK6tg5f.png) # 4-Bit Comparator ## Source Code ``` module Comparator( ); input [3:0] a,b; output aeqb,agtb,altb; reg aeqb,agtb,altb; always @(a or b) begin aeqb=0; agtb=0; altb=0; if(a==b) aeqb=1; else if (a>b) agtb=1; else altb=1; end endmodule ``` ## RTL ![](https://i.imgur.com/hAEgIji.png) ## Test Fixture ``` module comparator_test; // Inputs reg [3:0] a; reg [3:0] b; // Outputs wire aeqb; wire agtb; wire altb; // Instantiate the Unit Under Test (UUT) Comparator uut ( .a(a), .b(b), .aeqb(aeqb), .agtb(agtb), .altb(altb) ); initial begin // Initialize Inputs a = 4'b0000; b = 4'b0001; // Wait 100 ns for global reset to finish #100; a = 4'b0011; b = 4'b0010; #100; a = 4'b0001; b = 4'b0101; #100; a = 4'b0011; b = 4'b0011; // Add stimulus here end endmodule ``` ## Simulation ![](https://i.imgur.com/YY8g3SG.png)