# Lab 8
Name: M V Sonith
Roll No.: CS22B036
---
## Question 1
**Half adder Code**
```verilog=
module half_adder1(a,b,s,c);
input a,b;
output s,c;
assign s = a^b;
assign c = a&b;
endmodule
```
**Full adder Code**
```verilog=
module full_adder1(a,b,cin,s,cout);
input a,b,cin;
output s,cout;
wire s1,c1,c0;
half_adder1 h0(a,b,s1,c0);
half_adder1 h1(s1,cin,s,c1);
or(cout,c0,c1);
endmodule
```
**Test Bench Code**
```verilog=
module FA_TB();
reg A,B,C;
wire S,Cout;
full_adder1 h01(.a(A),.b(B),.cin(C),.s(S),.cout(Cout));
initial
begin
$monitor("A=%b,B=%b,C=%b,S=%b,Cout=%b",A,B,C,S,Cout);
A=1'b0;B=1'b0;C=1'b0;
#100;
A=1'b0;B=1'b0;C=1'b1;
#100;
A=1'b0;B=1'b1;C=1'b0;
#100;
A=1'b0;B=1'b1;C=1'b1;
#100;
A=1'b1;B=1'b0;C=1'b0;
#100;
A=1'b1;B=1'b0;C=1'b1;
#100;
A=1'b1;B=1'b1;C=1'b0;
#100;
A=1'b1;B=1'b1;C=1'b1;
end
endmodule
```
**Output**

---
## Question 2
**Ripple Adder Code**
```verilog=
module Nbit_adder(a1,b1,s1);
input [3:0]a1;
input [3:0]b1;
output [4:0]s1;
wire [4:0]c1;
assign c1[0] = 1'b0;
genvar i;
generate
for(i=0;i<4;i=i+1)
begin
full_adder1 DUT1(.a(a1[i]),.b(b1[i]),.cin(c1[i]),.s(s1[i]),.cout(c1[i+1]));
end
endgenerate
assign s1[4] = c1[4];
endmodule
```
**Test Bench Code**
```verilog=
module adderTB();
reg [3:0] A;
reg [3:0] B;
wire [4:0] AS;
Nbit_adder H0(.a1(A),.b1(B),.s1(AS));
initial
begin
$monitor("A=%d,B=%d,S=%d",A,B,AS);
A=4'b0000;B=4'b0001;
#100;
A=4'b0011;B=4'b0001;
#100;
A=4'b1111;B=4'b0001;
#100;
A=4'b0110;B=4'b1001;
end
endmodule
```
**Output**

---
## Question 3
**Multiplexer Code**
```verilog=
module multiplexer(a0,a1,s,out1);
input a0,a1,s;
output out1;
wire w1,w2,w3;
not(w1,s);
and(w2,w1,a0);
and(w3,s,a1);
or (out1,w2,w3);
endmodule
```
**Test Bench Code**
```verilog=
module MultiTB();
reg b0,b1,s1;
wire y;
multiplexer M1(.a0(b0),.a1(b1),.s(s1),.out1(y));
initial
begin
$monitor("a0=%b,a1=%b,s=%b,out=%b",b0,b1,s1,y);
b0=1'b0;b1=1'b0;s1=1'b0;
#100;
b0=1'b0;b1=1'b0;s1=1'b1;
#100;
b0=1'b0;b1=1'b1;s1=1'b0;
#100;
b0=1'b0;b1=1'b1;s1=1'b1;
#100;
b0=1'b1;b1=1'b0;s1=1'b0;
#100;
b0=1'b1;b1=1'b0;s1=1'b1;
#100;
b0=1'b1;b1=1'b1;s1=1'b0;
#100;
b0=1'b1;b1=1'b1;s1=1'b1;
end
endmodule
```
**Output**

---