0% found this document useful (0 votes)
29 views

Vlsi Lab

VLSI lab report

Uploaded by

udemycoursewala
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views

Vlsi Lab

VLSI lab report

Uploaded by

udemycoursewala
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 33

LAB - 1

Aim: To simulate and synthesize all the logic gates using Verilog HDL

module lab1(a,b,and_out,or_out,not_out,nand_out,xor_out,xnor_out,nor_out);

input a,b;
output and_out,or_out,not_out,nand_out,xor_out,xnor_out,nor_out;
assign and_out=a&b;
assign or_out=a|b;
assign not_out=~a;
assign nand_out=~(a&b);
assign xor_out=a^b;
assign xnor_out=~(a^b);
assign nor_out=~(a|b);
endmodule

module lab1_tb();
reg a,b;
wire and_out,or_out,not_out,nand_out,xor_out,xnor_out,nor_out;
lab1 uut(a,b,and_out,or_out,not_out,nand_out,xor_out,xnor_out,nor_out);
initial begin
a=0;b=0;#10;
a=0;b=1;#10;
a=1;b=0;#10;
a=1;b=1;#10;
#10 $finish;
end
endmodule

LAB - 2

(A) Design of Half adder


module half_add(a,b,sum,carry);
input a, b;
output sum,carry;
assign sum=a^b;
assign carry=a&b;
endmodule

module half1_tb();
reg a,b;
wire sum,carry;
half_add dut(.a(a) , .b(b) , .sum(sum) ,.carry(carry));
initial begin
a=0;b=0;
#10 a=0; b=1;
#10 a=1; b=0;
#10 a=1; b=1;
#10 $finish;
end
endmodule

(B)Design of a Full Adder Using Different Modeling Styles in Verilog and Simulation

(a) Gate-level Modeling:

module lab2a( a, b, cin, sum, carry );

input a,b,cin;

output sum,carry;

wire sum1, carry1, carry2;

// Gate-level implementation using XOR and AND gates

xor (sum1, a, b); // sum1 = a ⊕ b

xor (sum, sum1, cin); // sum = sum1 ⊕ cin

and (carry1, a, b); // carry1 = a ⋅ b

and (carry2, sum1, cin); // carry2 = sum1 ⋅ cin

or (carry, carry1, carry2); // carry = carry1 + carry2

Endmodule
module lab2a_tb();

reg a, b, cin;

wire sum, carry;

// Instantiate the Full Adder (Gate-level)

lab2a uut (.a(a), .b(b), .cin(cin), .sum(sum), .carry(carry));

initial begin

a = 1'b0; b = 1'b0; cin = 1'b0; #10;

a = 1'b0; b = 1'b0; cin = 1'b1; #10;

a = 1'b0; b = 1'b1; cin = 1'b0; #10;

a = 1'b0; b = 1'b1; cin = 1'b1; #10;

a = 1'b1; b = 1'b0; cin = 1'b0; #10;

a = 1'b1; b = 1'b0; cin = 1'b1; #10;

a = 1'b1; b = 1'b1; cin = 1'b0; #10;

a = 1'b1; b = 1'b1; cin = 1'b1; #10;

#10 $finish;

end

Endmodule
(b) Dataflow Modeling:

module lab2a( a, b, cin, sum, carry );

input a,b,cin;

output sum,carry;

// Dataflow modeling using Boolean expressions

assign sum = (a ^ b) ^ cin; // sum = (A ⊕ B) ⊕ Cin

assign carry = (a & b) | (cin & (a ^ b)); // carry = (A ⋅ B) + (Cin ⋅ (A ⊕ B))

endmodule

© Behavioral Modeling:

module lab2a( a, b, cin, sum, carry );

input a,b,cin;

output reg sum,carry;

// Behavioral modeling using procedural block


always @(*) begin

sum = (a ^ b) ^ cin; // Sum calculation

carry = (a & b) | (cin & (a ^ b)); // Carry calculation

end

endmodule

© To design full adder using half adder and simulate the design

module full_adder1 (

input A, B, Cin,

output Sum, Cout

);

wire sum1, carry1, carry2;

half_adder ha1 (

.A(A),

.B(B),

.Sum(sum1),

.Carry(carry1)

);

half_adder ha2 (

.A(sum1),

.B(Cin),

.Sum(Sum),

.Carry(carry2)

);

assign Cout = carry1 | carry2;

endmodule

module half_adder (

input A, B,
output Sum, Carry

);

assign Sum = A ^ B;

assign Carry = A & B;

endmodule
LAB - 3

(A)Design of a 2 to 4 Decoder Using Dataflow Modeling in Verilog

TRUTH TABLE

module decoder_2_4c(

input A0,A1,E,

output D3,D2,D1,D0

);

assign D0 = E && !A0 && !A1;

assign D2 = E && A0 && !A1;

assign D1 = E && !A0 && A1;

assign D3 = E && A0 && A1;

endmodule

module decoder_2_4_tb;

reg E,A0,A1;

wire D3,D2,D1,D0;

decoder_2_4c dut(.E(E),.A0(A0),.A1(A1),.D0(D0),.D1(D1),.D2(D2),.D3(D3));

initial

begin
A0 = 1'bx; A1 =1'bx; E = 1'b0;

#10 A0 = 1'b0; A1 =1'b0; E = 1'b1;

#10 A0 = 1'b0; A1 =1'b1; E = 1'b1;

#10 A0 = 1'b1; A1 =1'b0; E = 1'b1;

#10 A0 = 1'b1; A1 =1'b1; E = 1'b1;

#10 $finish;

end

Endmodule

(B) To design 2 to 4 decoder using case statement (behavior level)

module decoder_2_to_4 (

input wire A1, A0, EN,

output reg Y0, Y1, Y2, Y3

);

// Behavioral modeling using case statement

always @(*) begin

// Initialize outputs to zero

Y0 = 1'b0;

Y1 = 1'b0;

Y2 = 1'b0;

Y3 = 1'b0;

if (EN) begin

case ({A1, A0}) // Combine inputs into a 2-bit vector

2'b00: Y0 = 1'b1; // When A1 = 0, A0 = 0


2'b01: Y1 = 1'b1; // When A1 = 0, A0 = 1

2'b10: Y2 = 1'b1; // When A1 = 1, A0 = 0

2'b11: Y3 = 1'b1; // When A1 = 1, A0 = 1

default: begin

Y0 = 1'b0;

Y1 = 1'b0;

Y2 = 1'b0;

Y3 = 1'b0;

end

endcase

end

end

endmodule
Lab - 4
1. Design of 8x3 encoder and simulate the design.

module encoder(y0,y1,y2,y3,y4,y5,y6,y7,a,b,c);

input y0,y1,y2,y3,y4,y5,y6,y7;

output a,b,c;

assign a=y4|y5|y6|y7;

assign b=y2|y3|y6|y7;

assign c=y1|y3|y5|y7;

endmodule

module testbench();

reg y0,y1,y2,y3,y4,y5,y6,y7;

wire a,b,c;

encoder uut(y0,y1,y2,y3,y4,y5,y6,y7,a,b,c);

initial begin

y0=1; y1=0; y2=0; y3=0; y4=0; y5=0; y6=0; y7=0;

#10 y0=0; y1=1; y2=0; y3=0; y4=0; y5=0; y6=0; y7=0;

#10 y0=0; y1=0; y2=1; y3=0; y4=0; y5=0; y6=0; y7=0;

#10 y0=0; y1=0; y2=0; y3=1; y4=0; y5=0; y6=0; y7=0;

#10 y0=0; y1=0; y2=0; y3=0; y4=1; y5=0; y6=0; y7=0;

#10 y0=0; y1=0; y2=0; y3=0; y4=0; y5=1; y6=0; y7=0;

#10 y0=0; y1=0; y2=0; y3=0; y4=0; y5=0; y6=1; y7=0;

#10 y0=0; y1=0; y2=0; y3=0; y4=0; y5=0; y6=0; y7=1;


#10 $finish;

end

endmodule

LAB - 5

1. Design of 2x1 & 4x1 multiplexer & Demultiplexer and simulate the design

(A) 2x1 multiplexer

module mux2_to_1(a,b,s,y );

input a,b,s;

output y;

assign y=s?a:b;

Endmodule
module mux2_to_1_tb();

reg a, b, s;

wire y;

mux2_to_1 uut (.a(a), .b(b), .s(s), .y(y));

initial begin

a = 1'b0; b = 1'b0; s = 1'b0;

#10 a = 1'b0; b = 1'b1; s = 1'b1;

#10 a = 1'b1; b = 1'b0; s = 1'b0;

#10 a = 1'b1; b = 1'b1; s = 1'b1;

#10 $finish;

end

endmodule

(B) 4x1 multiplexer

module Mux4(A,B,C,D,S,Z);

input A,B,C,D;

input [0:1]S;

output reg Z;
always @(*) begin

case(S)

2'b00: Z = A;

2'b01: Z = B;

2'b10: Z = C;

2'b11: Z = D;

default: Z = 2'bxx;

endcase

end

endmodule

module Mux4_tb( );

reg A,B,C,D;

reg[0:1]S;

wire Z;

Mux4 uut(A,B,C,D,S,Z);

initial begin

S = 2'b00; A = 1'b0; B = 1'bx; C = 1'bx; D = 1'bx;

#10 S = 2'b00; A = 1'b1; B = 1'bx; C = 1'bx; D = 1'bx;

#10 S = 2'b01; A = 1'bx; B = 1'b0; C = 1'bx; D = 1'bx;

#10 S = 2'b01; A = 1'bx; B = 1'b1; C = 1'bx; D = 1'bx;

#10 S = 2'b10; A = 1'bx; B = 1'bx; C = 1'b0; D = 1'bx;

#10 S = 2'b10; A = 1'bx; B = 1'bx; C = 1'b1; D = 1'bx;


#10 S = 2'b11; A = 1'bx; B = 1'bx; C = 1'bx; D = 1'b0;

#10 S = 2'b11; A = 1'bx; B = 1'bx; C = 1'bx; D = 1'b1;

#10 $finish; $stop;

end

endmodule

© Design of 2x1 Demultiplexer and simulate the design

module demux2x1_dataflow (

input wire d,

input wire sel,

output wire y0,

output wire y1

);

assign y0 = (~sel) & d;

assign y1 = sel & d;

endmodule

module tb_demux2x1_dataflow;

reg d;
reg sel;

wire y0, y1;

demux2x1_dataflow uut (

.d(d),

.sel(sel),

.y0(y0),

.y1(y1)

);

initial begin

d = 1; sel = 0; #10;

d = 1; sel = 1; #10;

d = 0; sel = 0; #10;

d = 0; sel = 1; #10;

$finish;

end

endmodule

(d) Design of 4x1 Demultiplexer and simulate the design

module demux4x1_dataflow (
input wire d, // Input data

input wire [1:0] sel, // Select lines

output wire y0, // Output 0

output wire y1, // Output 1

output wire y2, // Output 2

output wire y3 // Output 3

);

assign y0 = (~sel[1] & ~sel[0]) & d;

assign y1 = (~sel[1] & sel[0]) & d;

assign y2 = ( sel[1] & ~sel[0]) & d;

assign y3 = ( sel[1] & sel[0]) & d;

endmodule

module tb_demux4x1_dataflow;

reg d;

reg [1:0] sel;

wire y0, y1, y2, y3;

demux4x1_dataflow uut (

.d(d),

.sel(sel),

.y0(y0),

.y1(y1),
.y2(y2),

.y3(y3)

);

initial begin

d = 1; sel = 2'b00; #10;

d = 1; sel = 2'b01; #10;

d = 1; sel = 2'b10; #10;

d = 1; sel = 2'b11; #10;

d = 0; sel = 2'b00; #10;

d = 0; sel = 2'b01; #10;

d = 0; sel = 2'b10; #10;

d = 0; sel = 2'b11; #10;

$finish;

end

endmodule
LAB - 6

(a) To design and simulate Verilog coding for 8x1 multiplexer using 2x1
multiplexer

module mux2x1(a,b,s,y);

input a,b,s;

output y;

assign y=s?a:b;

endmodule

module mux8x1 (

input wire [7:0] d, // 8 inputs

input wire [2:0] s, // 3 select lines

output wire y // Output

);

wire y0, y1, y2, y3, y4, y5;

mux2x1 mux0 (.a(d[0]), .b(d[1]), .s(s[0]), .y(y0));

mux2x1 mux1 (.a(d[2]), .b(d[3]), .s(s[0]), .y(y1));

mux2x1 mux2 (.a(d[4]), .b(d[5]), .s(s[0]), .y(y2));

mux2x1 mux3 (.a(d[6]), .b(d[7]), .s(s[0]), .y(y3));

mux2x1 mux4 (.a(y0), .b(y1), .s(s[1]), .y(y4));

mux2x1 mux5 (.a(y2), .b(y3), .s(s[1]), .y(y5));

mux2x1 mux6 (.a(y4), .b(y5), .s(s[2]), .y(y));

endmodule
module tb_mux8x1;

reg [7:0] d; // 8 inputs

reg [2:0] s; // 3 select lines

wire y; // Output

mux8x1 uut (

.d(d),

.s(s),

.y(y)

);

initial begin

// Display the inputs and output

$monitor("d=%b, sel=%b, y=%b", d, s, y);

d = 8'b11011011; s = 3'b000; #10;

d = 8'b11011011; s = 3'b001; #10;

d = 8'b11011011; s = 3'b010; #10;

d = 8'b11011011; s = 3'b011; #10;

d = 8'b11011011; s = 3'b100; #10;

d = 8'b11011011; s = 3'b101; #10;

d = 8'b11011011; s= 3'b110; #10;

d = 8'b11011011; s= 3'b111; #10;

$finish;

end

endmodule
(b) To design and simulate Verilog coding for 8x1 multiplexer using case/ if else
statement (behavior level)

module lab6b(

input wire [7:0] d, // 8 inputs

input wire [2:0] sel, // 3 select lines

output reg y

);

always @(*) begin

if (sel == 3'b000)

y = d[0];

else if (sel == 3'b001)

y = d[1];

else if (sel == 3'b010)

y = d[2];

else if (sel == 3'b011)

y = d[3];

else if (sel == 3'b100)

y = d[4];

else if (sel == 3'b101)

y = d[5];
else if (sel == 3'b110)

y = d[6];

else if (sel == 3'b111)

y = d[7];

else

y = 1'b0;

end

endmodule

module tb_mux8x1_if;

reg [7:0] d;

reg [2:0] sel;

wire y;

lab6b uut (

.d(d),

.sel(sel),

.y(y)

);

initial begin

d = 8'b11010101; sel = 3'b000; #10;

d = 8'b11010101; sel = 3'b001; #10;

d = 8'b11010101; sel = 3'b010; #10;


d = 8'b11010101; sel = 3'b011; #10;

d = 8'b11010101; sel = 3'b100; #10;

d = 8'b11010101; sel = 3'b101; #10;

d = 8'b11010101; sel = 3'b110; #10;

d = 8'b11010101; sel = 3'b111; #10;

$finish;

end

endmodule

©To design and simulate Verilog coding for 8x1 Demultiplexer:using 2x1
Demultiplexer:

module demux2x1_dataflow (

input wire d,

input wire sel,

output wire y0,

output wire y1

);

assign y0 = (~sel) & d;

assign y1 = sel & d;

endmodule

module demux8x1 (

input wire d, input

wire [2:0] sel,

output wire y0,


output wire y1,

output wire y2,

output wire y3,

output wire y4,

output wire y5,

output wire y6,

output wire y7

);

wire w0, w1, w2, w3;

demux2x1_dataflow demux0 (

.d(d),

.sel(sel[2]),

.y0(w0),

.y1(w1)

);

demux2x1_dataflow demux1 (

.d(w0),

.sel(sel[1]),

.y0(w2),

.y1(w3)

);

demux2x1_dataflow demux2 (

.d(w1),

.sel(sel[1]),

.y0(w4),

.y1(w5)

);

demux2x1_dataflow demux3 (

.d(w2),
.sel(sel[0]),

.y0(y0),

.y1(y1)

);

demux2x1_dataflow demux4 (

.d(w3),

.sel(sel[0]),

.y0(y2),

.y1(y3)

);

demux2x1_dataflow demux5 (

.d(w4),

.sel(sel[0]),

.y0(y4),

.y1(y5)

);

demux2x1_dataflow demux6 (

.d(w5),

.sel(sel[0]),

.y0(y6),

.y1(y7)

);

endmodule
module tb_demux8x1;

reg d;

reg [2:0] sel;

wire y0, y1, y2, y3, y4, y5, y6, y7;

demux8x1 uut (

.d(d),

.sel(sel),

.y0(y0),

.y1(y1),

.y2(y2),

.y3(y3),

.y4(y4),

.y5(y5),

.y6(y6),

.y7(y7)

);

initial begin

d = 1; sel = 3'b000; #10;

d = 1; sel = 3'b001; #10;

d = 1; sel = 3'b010; #10;

d = 1; sel = 3'b011; #10;


d = 1; sel = 3'b100; #10;

d = 1; sel = 3'b101; #10;

d = 1; sel = 3'b110; #10;

d = 1; sel = 3'b111; #10;

$finish;

end

endmodule

(d) To design and simulate Verilog coding for 8x1 Demultiplexer using case/ if
else statement (behavior level)

module demux8x1_case (

input wire d,

input wire [2:0] sel,

output reg y0,

output reg y1,

output reg y2,

output reg y3,


output reg y4,

output reg y5,

output reg y6,

output reg y7

);

always @(*) begin

y0 = 0;

y1 = 0;

y2 = 0;

y3 = 0;

y4 = 0;

y5 = 0;

y6 = 0;

y7 = 0;

case (sel)

3'b000: y0 = d;

3'b001: y1 = d;

3'b010: y2 = d;

3'b011: y3 = d;

3'b100: y4 = d;

3'b101: y5 = d;

3'b110: y6 = d;

3'b111: y7 = d;

default: ;

endcase

end

endmodule
module tb_demux8x1_case;

reg d;

reg [2:0] sel;

wire y0, y1, y2, y3, y4, y5, y6, y7;

demux8x1_case uut (

.d(d),

.sel(sel),

.y0(y0),

.y1(y1),

.y2(y2),

.y3(y3),

.y4(y4),

.y5(y5),

.y6(y6),

.y7(y7)

);

initial begin

d = 1;

sel = 3'b000; #10;

sel = 3'b001; #10;

sel = 3'b010; #10;

sel = 3'b011; #10;

sel = 3'b100; #10;


sel = 3'b101; #10;

sel = 3'b110; #10;

sel = 3'b111; #10;

d = 0;

sel = 3'b000; #10;

sel = 3'b001; #10;

sel = 3'b010; #10;

sel = 3'b011; #10;

sel = 3'b100; #10;

sel = 3'b101; #10;

sel = 3'b110; #10;

sel = 3'b111; #10;

$finish; // End simulation

end

endmodule
LAB - 7

Design of 4 bit binary to gray converter & Gray to Binary Code Converter using Verilog
and simulate the design.

(A) 4 bit binary to gray converter

module binary_to_gray (

input [3:0] binary,

output [3:0] gray

);

assign gray[3] = binary[3];

assign gray[2] = binary[3] ^ binary[2];

assign gray[1] = binary[2] ^ binary[1];

assign gray[0] = binary[1] ^ binary[0];

endmodule

module binary_to_gray_tb();
reg [3:0] binary;

wire [3:0] gray;

binary_to_gray uut(.binary(binary),.gray(gray));

always

begin

binary = 4'b0000 ; #10;

binary = 4'b0001 ; #10;

binary = 4'b0010 ; #10;

binary = 4'b0100 ; #10;

binary = 4'b1000 ; #10;

binary = 4'b1111 ; #10;

binary = 4'b1100 ; #10;

$finish;

end

Endmodule
(B)Gray to Binary Code Converter

module gray_to1_binary (

input wire [3:0] gray,

output wire [3:0] binary

);

assign binary[3] = gray[3];

assign binary[2] = binary[3] ^ gray[2];

assign binary[1] = binary[2] ^ gray[1];

assign binary[0] = binary[1] ^ gray[0];

endmodule

module gray_to_binary_tb1;

reg [3:0] gray;

wire [3:0] binary;

gray_to1_binary uut (

.gray(gray),

.binary(binary)

);
initial begin

gray= 4'b0000; #10;

gray= 4'b0001; #10;

gray= 4'b0011; #10;

gray= 4'b0010; #10;

gray= 4'b0110; #10;

gray= 4'b0111; #10;

gray= 4'b0101; #10;

$finish;

end

endmodule

You might also like