# Lab 8
Name: SUDDULA VINEETH RAGHAVENDRA
Roll No.: CS22B045
---
## Question 1
**Verilog Code of Full Adder by using Two Half Adders.**
```
module half_adder (a,b,sum,carry);
input a,b;
output sum,carry;
assign sum = a^b;
assign carry = a&b;
endmodule
```
```
module full_adder(a,b,cin,sum,carry);
input a,b,cin;
output sum,carry;
wire c,c1,s;
half_adder ha0(a,b,s,c);
half_adder ha1(cin,s,sum,c1);
assign carry = c | c1 ;
endmodule
```
```
module full_adder_testbench;
reg a,b,cin;
wire sum,carry;
full_adder uut(a,b,cin,sum,carry);
initial begin
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
end
endmodule
```
---
## Question 2
**Verilog Code of Ripple Carry Adder**
```
module full_adder(input a,b,cin,output sum,carry);
assign sum = a ^ b ^ cin;
assign carry = (a & b)|(b & cin)|(cin & a);
endmodule
```
```
module rca( // this is the code for ripple carry adder.
input [3:0]a,b,
input cin,
output [3:0]sum,
output c4);
wire c1,c2,c3; //Carry_out of the each full adder
full_adder fa0(a[0],b[0],cin,sum[0],c1);
full_adder fa1(a[1],b[1],c1,sum[1],c2);
full_adder fa2(a[2],b[2],c2,sum[2],c3);
full_adder fa3(a[3],b[3],c3,sum[3],c4);
endmodule
```
```
module rca_tb; // this is the code for the testbench.
reg [3:0]a,b;
reg cin;
wire [3:0]sum;
wire c4;
rca uut(a,b,cin,sum,c4);
initial begin
cin = 0;
a = 4'b0110;
b = 4'b1100;
#10
a = 4'b1110;
b = 4'b1000;
#10
a = 4'b0111;
b = 4'b1110;
#10
a = 4'b0010;
b = 4'b1001;
#10
$finish();
end
endmodule
```
---
## Question 3
**Verilog Code of 2:1 Multiplexer**
```
module mux_2x1( // code for multiplixer.
input I0,I1,S,
output Y);
assign Y = S?I1:I0;
endmodule
```
```
module mux_tb; // code for test bench.
reg I0,I1,S;
wire Y;
mux_2x1 uut(I0,I1,S,Y);
initial begin
S = 0; I0 = 1; I1 = 0;
#10
I0 = 0; I1 = 1;
#10
S = 1; I0 = 1; I1 = 0;
#10
I0 = 0; I1 = 1;
#10
$finish();
end
endmodule
```
---