0% found this document useful (0 votes)
60 views33 pages

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)
60 views33 pages

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

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