# Lab 8
Name: Bilwani k
Roll no.: CS22B013
---
## Question 1
**Code of a full adder with two half adders**
```
module Full_Adder(a, b, cin, Sum, Cout);
input a, b, cin;
output Sum, Cout;
wire S0, C1;
wire C2;
// Call Half Adder
Half_Adder HA1 (.a(a), .b(b), .Sum(S0), .Cout(C1));
Half_Adder HA2 (.a(cin), .b(S0), .Sum(Sum), .Cout(C2));
OR_2in R1 (.a(C1),.b(C2), .y(Cout));
endmodule
```
**Test bench code**
```
module test_full_adder;
reg a, b, cin;
wire Sum, Cout;
Full_Adder FA (.a(a), .b(b), .cin(cin), .Sum(Sum), .Cout(Cout));
initial begin
$display("A B Cin | Sum Cout");
$display("---------|--------");
// Test all possible input combinations
a = 0; b = 0; cin = 0; #10;
a = 0; b = 0; cin = 1; #10;
a = 0; b = 1; cin = 0; #10;
a = 0; b = 1; cin = 1; #10;
a = 1; b = 0; cin = 0; #10;
a = 1; b = 0; cin = 1; #10;
a = 1; b = 1; cin = 0; #10;
a = 1; b = 1; cin = 1; #10;
$finish;
end
endmodule
```
---
## Question 2
**Code for 4 bit Ripple carry**
```
module rca(s,c,a,b,cin);
input[3:0]a,b;
input cin;
output[3:0]s;
output c;
wire c0,c1,c2;
fa g1(s[0],c0,a[0],b[0],cin);
fa g2(s[1],c1,a[1],b[1],c0);
fa g3(s[2],c2,a[2],b[2],c1);
fa g4(s[3],c,a[3],b[3],c2);
endmodule
```
**Test bench**
```
module rca_tb;
reg [3:0] a;
reg [3:0] b;
reg cin;
wire [3:0] s;
wire c;
rca uut (
.s(s),
.c(c),
.a(a),
.b(b),
.cin(cin)
);
a=4'b0001;
b=4'b1001;
cin=0;
#100
a=4'b0011;
b=4'b1001;
cin = 0;
end
endmodule
```
---
## Question 3
**Code for 2:1 Mux**
```
module MUX_2in_Nbit #(parameter N = 8) (a,b,s,y);
input [N-1:0]a;
input [N-1:0]b;
input wire s;
output [N-1:0]y; // Y = (s_bar AND a ) OR (s AND b ) = Y_r OR Y_l
assign y = s?b:a;
endmodule
```
**Test bench**
```
module mux21_df_bench();
reg [1:0] a1;
reg [1:0] b1;
reg s1;
wire [1:0] y1;
MUX_2in_Nbit #(2) dUT_1 (.a(a1), .b(b1), .s(s1), .y(y1));
initial begin
$display("a b s | y");
$display("-------|---");
a1 = 2'b00; b1 = 2'b00; s1 = 0; #10;
a1 = 2'b00; b1 = 2'b01; s1 = 0; #10;
a1 = 2'b00; b1 = 2'b10; s1 = 0; #10;
a1 = 2'b00; b1 = 2'b11; s1 = 0; #10;
a1 = 2'b01; b1 = 2'b00; s1 = 1; #10;
a1 = 2'b01; b1 = 2'b01; s1 = 1; #10;
a1 = 2'b01; b1 = 2'b10; s1 = 1; #10;
a1 = 2'b01; b1 = 2'b11; s1 = 1; #10;
$finish;
end
endmodule