# Lab 8
Name: Guru Rohith.G
Roll No: CS22B022
---
## Question 1
### Verilog Code
```verilog=
module fwithh(sum,cout,a,b,c);
input a,b,c;
output sum,cout;
wire w1,w2,s;
halfadder h1(w1,w2,a,b);
halfadder h2(sum,s,w1,c);
assign cout = (w2|s);
endmodule
```
#### Test bench
```verilog=
module fullwithhalftb();
reg a1,b1,c1;
wire sum1,cout1;
fwithh out(.sum(sum1),.cout(cout1),.a(a1),.b(b1),.c(c1));
initial
begin
a1 = 0; b1 = 0; c1 = 0;
#100
a1 = 0; b1 = 0; c1 = 1;
#100
a1 = 0; b1 = 1; c1 = 0;
#100
a1 = 0; b1 = 1; c1 = 1;
#100
a1 = 1; b1 = 0; c1 = 0;
#100
a1 = 1; b1 = 0; c1 = 1;
#100
a1 = 1; b1 = 1; c1 = 0;
#100
a1 = 1; b1 = 1; c1 = 1;
end
endmodule
```

---
## Question 2
### Verilog Code
```verilog=
module rca4bitadder(
input [3:0]a,b,
input cin,
output [3:0]sum,
output c4);
wire c1,c2,c3;
fulladder fa0(a[0],b[0],cin,sum[0],c1);
fulladder fa1(a[1],b[1],c1,sum[1],c2);
fulladder fa2(a[2],b[2],c2,sum[2],c3);
fulladder fa3(a[3],b[3],c3,sum[3],c4);
endmodule
####
module fulladder (
input a,b,cin,
output sum,carry
);
assign sum = a ^ b ^ cin;
assign carry = (a & b) | (b & cin) | (cin & a) ;
endmodule
```
##### Testbench
```verilog=
module rca4bittb;
reg [3:0] a, b;
reg cin;
wire [3:0] sum;
wire c4;
rca4bitadder uut(a, b, cin, sum, c4);
initial begin
cin = 0;
a = 4'b0110;
b = 4'b1000;
#10;
a = 4'b1010;
b = 4'b1010;
#10;
a = 4'b0111;
b = 4'b1111;
#10;
a = 4'b1011;
b = 4'b1001;
#10;
end
endmodule
```

---
# QUESTION 3
### Code
```verilog=
module m21(Y, D0, D1, S);
output Y;
input D0, D1, S;
wire T1, T2, T3;
and_gate u1(T1, D1, S);
not_gate u2(T2, S);
and_gate u3(T3, D0, T2);
or_gate u4(Y, T1, T3);
endmodule
```
#### Testbench
```verilog=
`timescale 1ns/1ns
module tb_muxtb;
// Define inputs
reg D0, D1, S;
// Define output
wire Y;
m21 uut (
.Y(Y),
.D0(D0),
.D1(D1),
.S(S)
);
initial begin
// Test vector 1
D0 = 1'b0;
D1 = 1'b0;
S = 1'b0;
#5;
// Test vector 2
D0 = 1'b0;
D1 = 1'b0;
S = 1'b1;
#5;
// Test vector 3
D0 = 1'b0;
D1 = 1'b1;
S = 1'b0;
#5;
// Test vector 4
D0 = 1'b0;
D1 = 1'b1;
S = 1'b1;
#5;
// Test vector 5
D0 = 1'b1;
D1 = 1'b0;
S = 1'b0;
#5;
// Test vector 6
D0 = 1'b1;
D1 = 1'b0;
S = 1'b1;
#5;
// Test vector 7
D0 = 1'b1;
D1 = 1'b1;
S = 1'b0;
#5;
// Test vector 8
D0 = 1'b1;
D1 = 1'b1;
S = 1'b1;
#5;
end
endmodule
```
