# Lab 8
Name: SHIVADHARSHAN S
Roll No.: CS22B057
---
## Question 1
**HalfAdder:**
```verilog=
module halfadder(a,b,s,c);
input a,b;
output s,c;
xor(s,a,b);
and(c,a,b);
endmodule
```
**FullAdder:**
```verilog=
module fulladder(a,b,cin,s,cout);
input a,b,cin;
output s,cout;
wire w1,w2,w3;
halfadder h1(a,b,w1,w2);
halfadder h2(cin,w1,s,w3);
assign cout = w2|w3;
endmodule
```
___
**TestBench:**
```verilog=
module fulladder_bench();
reg a1,b1,c1;
wire s,co;
fulladder fulladder(a1,b1,c1,s,co);
initial
begin
$monitor("a=%b,b=%b,cin=%b,co=%b,s=%b",a1,b1,c1,co,s);
a1=1'b0;b1=1'b0;c1='b0;
#100 a1=1'b0;b1=1'b0;c1='b1;
#100 a1=1'b0;b1=1'b1;c1='b0;
#100 a1=1'b0;b1=1'b1;c1='b1;
#100 a1=1'b1;b1=1'b0;c1='b0;
#100 a1=1'b1;b1=1'b0;c1='b1;
#100 a1=1'b1;b1=1'b1;c1='b0;
#100 a1=1'b1;b1=1'b1;c1='b1;
end
endmodule
```
**Output:**

___
## Question 2
**4-bit Ripple Carry Adder:**
```verilog=
module rippleadder(a,b,s,carry_out);
parameter n=4;
input [n-1:0] a;
input [n-1:0]b;
output [n-1:0] s;
output carry_out;
wire [n-1:0] c;
genvar i;
generate
for (i = 0 ;i<n ;i=i+1 )
begin
if (i==0) begin
halfadder f(a[0],b[0],s[0],c[0]);
end
else begin
fulladder f(a[i],b[i],c[i-1],s[i],c[i]);
end
end
assign carry_out = c[n-1];
endgenerate
endmodule
```
**TestBench:**
```verilog=
module rippleadder_bench();
parameter n=4;
reg [n-1:0] a1;
reg [n-1:0] b1;
wire [n-1:0] s;
wire co;
rippleadder gate(a1,b1,s,co);
initial
begin
$monitor("a=%b,b=%b,co=%b,s=%b",a1,b1,co,s);
a1[3]=1'b0;a1[2]=1'b1;a1[1]=1'b1;a1[0]=1'b0;
b1[3]=1'b0;b1[2]=1'b0;b1[1]=1'b1;b1[0]=1'b0;
#100 a1[3]=1'b1;a1[2]=1'b1;a1[1]=1'b1;a1[0]=1'b1;
b1[3]=1'b0;b1[2]=1'b0;b1[1]=1'b0;b1[0]=1'b1;
end
endmodule
```
**Output:**

___
## Question 3
**2-1 multiplexer:**
```verilog=
module multiplexer(i1,i2,s0,y);
input s0;
input i1,i2;
output y;
wire y1,y2,y3;
not(y3,s0);
and(y2,i2,s0);
and(y1,i1,y3);
or(y,y1,y2);
endmodule
```
**Testbench:**
```verilog=
module multiplexer_tb();
reg a,b,s;
wire y;
multiplexer mux(a,b,s,y);
initial
begin
$monitor("a=%b,b=%b,s=%b,y=%b",a,b,s,y);
a=1'b0;b=1'b0;s='b0;
#100 a=1'b0;b=1'b0;s='b1;
#100 a=1'b0;b=1'b1;s='b0;
#100 a=1'b0;b=1'b1;s='b1;
#100 a=1'b1;b=1'b0;s='b0;
#100 a=1'b1;b=1'b0;s='b1;
#100 a=1'b1;b=1'b1;s='b0;
#100 a=1'b1;b=1'b1;s='b1;
end
endmodule
```
**Output:**
