VLSI Design and Testing Lab Overview
VLSI Design and Testing Lab Overview
BECL606
6th SEMESTER, EVEN 2025
Prepared by
Dr. G Manjula, Associate Professor, Dept. of ECE,
Mr. Bore Gowda H B , Assistant Professor, Dept. of ECE,
Mrs. Padma R, Assistant Professor, Dept. of ECE,
GSSSIETW, Mysuru
DEPARTMENT VISION & MISSION
VISION
"To foster professional level competence in all areas of Electronics and Communication
Engineering and to benchmark the Department as a centre for nurturing Women Engineers
in the Country"
MISSION
M1: To impart value based Technical education and training.
M4: To sensitize the Students regarding Social, Moral and Professional ethics.
PEO 2: To make the students capable of managing their profession based on existing as well
as new emerging technologies in the area of Electronics and Communication
Engineering.
Vision
"To become a recognized world class Women Educational Institution, by
imparting professional education to the students, creating technical
opportunities through academic excellence and technical achievements,with
ethical values"
Mission
To support value based education with state of art infrastructure.
To empower women with the additional skill for professional future career.
To enrich students with research blends in order to fulfill the International
Challenges.
To create multidisciplinary center of excellence.
To achieve Accreditation standards towards International education
recognition.
To establish more Post Graduate & Research course.
To increase Doctorates numbers towards the Research quality of academics.
PROGRAM OUTCOMES
2. Problem analysis: Identify, formulate, review research literature, and analyze complex
engineering problems reaching substantiated conclusions using first principles of mathematics,
natural sciences, and engineering sciences.
5. Modern tool usage: Create, select, and apply appropriate techniques, resources, and modern
engineering and IT tools including prediction and modeling to complex engineering activities
with an understanding of the limitations.
6. The engineer and society: Apply reasoning informed by the contextual knowledge to assess
societal, health, safety, legal and cultural issues and the consequent responsibilities relevant to
the professional engineering practice.
8. Ethics: Apply ethical principles and commit to professional ethics and responsibilities and
norms of the engineering practice.
9. Individual and team work: Function effectively as an individual, and as a member or leader
in diverse teams, and in multidisciplinary settings.
11. Project management and finance: Demonstrate knowledge and understanding of the
engineering and management principles and apply these to one’s own work, as a member and
leader in a team, to manage projects and in multidisciplinary environments.
12. Life-long learning: Recognize the need for, and have the preparation and ability to engage in
independent and life-long learning in the broadest context of technological change.
SEMESTER & YEAR: VI, EVEN SEM 2025 FACULTY NAME: Dr. G Manjula , Mr. Bore Gowda H B, Mrs. Padma R
COURSE NAME/CODE: VLSI Design and Testing Lab / BECL606(C316)
Design and simulate combinational and sequential digital circuits using Verilog HDL
Understand the synthesis process of digital circuits using EDA tool
Perform ASIC design flow and understand the process of synthesis, synthesis
constraints and evaluating the synthesis reports to obtain optimum gate level netlist.
Design and simulate basic CMOS circuits lie inverter, common source amplifier
differential amplifier, SRAM.
Perform RTL_GDSII flow and understand the stages in ASIC design.
VLSI Design and Testing Lab/BECL606
Introduction to Cadence
Cadence Design Systems provides tools for different design styles. In this tutorial you will
learn to use three Cadence products: Composer Symbol, Composer Schematic and the
Virtuoso Layout Editor. This tutorial will help you to get started with Cadence and
successfully create symbol, schematic and layout views of an inverter. You will also learn
how to simulate your design using Hspice. The final check will be seeing if your layout
matches your schematic. Figure 1 shows the normal design sequence from design
specifications to final layout simulation. This tutorial will take you through all the steps
(except the last). In addition, there are chapters on Verilog, VHDL, bipolar current mode
logic (CML), standard cells, and auto placement and routing.
Using the UNIX operating system is similar to using other operating systems such as DOS.
UNIX commands are issued to the system by typing them in a “shell” or “xterm”. UNIX
commands are case sensitive so be careful when issuing a command, usually they are given in
lower-case. The following list summarizes all the basic commands required to manage the
data files you will be creating in this lab course. All UNIX commands are entered from the
shell or xterm window. Do not use UNIX commands for modifying, deleting, or moving any
Cadence data files.
ls [–la] Lists files in the current directory. ”l” lists with properties and “a”
also lists hidden files (ones beginning with a “.”).
cd XXXX Changes the current directory to XXXX.
cd .. Changes the current directory back one level.
cp XXXX YYYY Copies the file XXXX to YYYY.
mv XXXX YYYY Move file XXXX to YYYY. Also used for rename
rm XXXX Deletes the file XXXX
mkdir XXXX Creates the directory XXXX.
lp -dXXXX YYYY Prints the textfile or postscript file YYYY to the printer named
XXXX, where XXXX can be either “ipszac” or “hpszac”.
gedit XXXX& Starts the gedit text editor program and loads file XXXX.
top Check available processes and memory usage.
quota –v Check for disk space available
In Desktop Create a folder to do the digital design flow. Right click in the Desktop and select
Create Folder
Inside Asic_Counter folder paste your HDL files or Right click in the desktop and select
create document -> empty file
Inside this text file you can type your HDL Coding
Functional Simulation :
Use the following command to invoke user friendly GUI : nclaunch –new
It will invoke the nclaunch window for functional simulation we can compile, elaborate and
simulate it using Multistep
Left side you can see the HDL [Link] side of the window has worklib and snapshots
directories listed.
Worklib is the directory where all the compiled codes are stored while Snapshot will have
output of elaboration which in turn goes for simulation
Compilation:
left side select the file and in Tools : launch verilog compiler with current selection will get
enable. Click it to compile the code
Select the test bench and compile it. It will come under worklib. Under Worklib you can see
the module and testbench. Next is to elaborate the design.
Elaboration:
select the file under worklib and in Tools : launch elaborator with current selection will get
enable. select the elaborator to elaborate the design.
Choose the module and test bench and elaborate the design.
After elaboration the file will come under snapshot. Select the test bench and elaborate it.
Simulation:
Select the testbench file under snapshot and in Tools : Launch simulator with current
selection will get enable.
select simulator to simulate the design. After simulation you will get the two windows like
below image
you will get the two windows Design Browser and Simvision .In design browser you can see
the test bench in left side window.
select the test bench for the counter and Right click it. Select the send to waveform window
or select the waveform icon
you can see the waveform window after that click the run tool to see the functional simulation
for the counter
The equivalent command terminal output can be observed in the Simvision console window
and also in the nclaunch console terminal.
Aim: To write a verilog code for 4bit adder and verify the functionality using Test bench.
• Synthesize, Analyse Reports and Netlist and Max Operating Frequency.
• From the report generated find the total number of cells, power requirement and total
area requirement.
Tool Required:
Functional Simulation: Incisive Simulator (ncvlog, ncelab, ncsim)
Synthesis: Genus
module four_bit_adder(A,B,C0,S,C4);
input [3:0] A,[3:0] B,C0;
output [3:0] S,C4;
wire C1,C2,C3;
full_adder fa0 (A[0],B[0],C0,S[0],C1);
full_adder fa1 (A[1],B[1],C1,S[1],C2);
full_adder fa2 (A[2],B[2],C2,S[2],C3);
full_adder fa3 (A[3],B[3],C3,S[3],C4);
endmodule
Aim: To write a verilog code for 4-bit shift and add multiplier and verify the functionality using test bench
Synthesize, Analyse reports and netlist, critical path and max operating point.
From the generated report, find the total number of cells, power requirement and total area requirement.
Tools required:
Functional Simulation: Incisive Simulator (ncvlog, nclab, ncsim)
Synthesis: Genus
Start
Shift A Left
Shift B Right
N=N-1
No
N=0
Yes
Stop
Source Code:
`timescale 1ns/1ps
module shift_and_add_binary_multiplier (clk, rst, A, B, C);
parameter m=4, n=4;
integer i;
input clk, rst;
input [m-1:0] A;
input [n-1:0] B;
output reg [m+n-1:0] c;
reg [m+n-1:0] A1;
reg [n-1:0] B1;
always@(posedge clk or posedge rst)
begin
if (rst)
begin
c=0;
end
else
begin
c=0;
A1[m-1:0]=A;
A1[m+n-1:m]=0;
B1=B;
for(i=0; i<n;i=i+1)
begin
If(B1[i]==1’b0)
begin
c=c+0;
end
else if (B1[i]==1’b1)
begin
c=c+(A1<<i);
end
end
end
end
endmodule
Testbenh
`timescale 1ns/1ps
module shift_and_add_binary_multiplier_tb;
parameter m=4, n=4;
reg clk, rst;
reg [m-1:0] A;
reg [n-1:0] B;
wire [m+n-1:0] c;
shift_and_add_binary_multiplier uut(clk, rst, A, B, C);
initial
begin
clk=1’b1;
forever #4 clk=~clk;
Dept. of ECE, GSSSIETW, Mysuru Page 16
VLSI Design and Testing LAB Manual BECL606
end
initial
begin
rst=1;
#2 rst=0;
A=4b’1111;
B=4b’1111;
#20 rst 1;
#2 rst=0;
A=4b’0011;
B=4b’0011;
#20 rst 1;
#2 rst=0;
A=4b’1100;
B=4b’0010;
#20
end
Initial
begin
#100 $ finish;
end
endmodule
Aim: Write a verilog code for 32 bit ALU supporting four logical and four arithmetic
operations, use case statement and if statement for ALU behavioral modeling.
• To Verify the Functionality using Test Bench
• Synthesize and compare the results using if and case statements
Tool Required:
Functional Simulation: Incisive Simulator (ncvlog, ncelab, ncsim)
Synthesis: Genus
Design Information and Bock Diagram:
The ALU will take in two 32-bit values, and control line. An Arithmetic unit does the following task like
addition subtraction, multi-fiction and logical operations. As the input is given in 32 bit we get 32 bit output.
The arithmetic will show only one output at a time so a selector is necessary to select one of the operator.
Test Bench :
module alu_32bit_tb_case;
reg [31:0]a;
reg [31:0]b;
reg [2:0]f;
wire [31:0]y;
alu_32bit_case test2(.y(y),.a(a),.b(b),.f(f));
initial
begin
a=32'h00000000;
b=32'hFFFFFFFF;
#10 f=3'b000;
#10 f=3'b001;
#10 f=3'b010;
#10 f=3'b100;
end
initial
#50 $finish;
endmodule
module alu_32bit_if(y,a,b,f);
input [31:0]a;
input [31:0]b;
input [2:0]f;
output reg [31:0]y;
always@(*)
begin
if(f==3'b000)
y=a&b; //AND Operation
else if (f==3'b001)
y=a|b; //OR Operation
else if (f==3'b010)
y=a+b; //Addition
else if (f==3'b011)
y=a-b; //Subtraction
else if (f==3'b100)
y=a*b; //Multiply
else
y=32'bx;
end
endmodule
Test bench :
Dept. of ECE, GSSSIETW, Mysuru Page 19
VLSI Design and Testing LAB Manual BECL606
module alu_32bit_tb_if;
reg [31:0]a;
reg [31:0]b;
reg [2:0]f;
wire [31:0]y;
alu_32bit_if test(.y(y),.a(a),.b(b),.f(f));
initial
begin
a=32'h00000000;
b=32'hFFFFFFFF;
#10 f=3'b000;
#10 f=3'b001;
#10 f=3'b010;
#10 f=3'b100;
end
initial
#50 $finish;
endmodule
Aim : Write a verilog code for Flip-flops (D, SR, JK), Synthesize the design and compare the
synthesis report.
Tool Required:
Functional Simulation: Incisive Simulator (ncvlog, ncelab, ncsim)
Synthesis: Genus
Latches and flip-flops are the basic elements for storing information. One latch or flip-
flop can store one bit of information. The main difference between latches and flip-flops is that
for latches, their outputs are constantly affected by their inputs as long as the enable signal is
asserted.
In other words, when they are enabled, their content changes immediately when their
inputs change. Flip-flops, on the other hand, have their content change only either at the rising
or falling edge of the enable signal. This enable signal is usually the controlling clock signal.
After the rising or falling edge of the clock, the flip-flop content remains constant even if the
input changes.
There are basically four main types of latches and flip-flops: SR, D, and JK. The major
differences in these flip-flop types are the number of inputs they have and how they change
state. For each type, there are also different variations that enhance their operations.
Example: D-Flip-flop
a) Verilog Codes for D-Flip Flop, JK-Flip Flop and SR-Flip Flop.
Aim: Write a verilog code for 4-bit synchronous MOD-N counter with asynchronous reset, verify the
functionality using test bench and synthesize the design and compare the synthesis report.
Tools Required:
Functional Simulation: Incisive Simulator (ncvlog, ncelab, ncsim)
Synthesis: Genus
MOD-N Counter
Counters are sequential logic devices that follow a predetermined sequence of counting states triggered by
an external clock (CLK) signal. The number of states or counting or counting sequences through which a
particular counter advances before returning to its original first state is called modulus (MOD). In other
words, the modulus (or modulo) is the number of states the counter counts and is the dividing number of the
counter.
Modulus counters, or MOD counters, are defined based on the number of states that the counter will
sequence before returning to its original value.
The MOD-N counter will require N number of flip flops connected to count a single data bit while
providing 2n different output states.
Source code
module modN_ctr
# (parameter N=10, parameter WIDTH=4)
(input clk, input rstn, output reg [WIDTH-1:0] out);
always @ (posedge clk)
begin
if(!rst)
begin
out <=0;
end
else begin
if (out = = N-1)
out<=0;
else
out<=out +1;
end
end
endmodule
Test bench
module modN_ctr_tb;
parameter N=10;
parameter WIDTH =4;
reg clk;
reg rstn;
wire [WIDTH-1:0] out;
modN_ctr uut (.clk(clk), .rstn(rstn), .out(out));
always #10 clk=~clk;
initial begin
{clk, rstn}<= 0;
$monitor (“T = %0t rstn = %0b out = 0x%0h” =$ time, rstn, out);
Dept. of ECE, GSSSIETW, Mysuru Page 23
VLSI Design and Testing LAB Manual BECL606
Analog Design
. /[Link] Contains a technology library for the design (gpdk 180 nm).
The virtuoso or Command Interpreter Window (CIW) appears at the bottom of the
screen.
form appears.
b. In the “New Library” form, type your .library name in the Name section. In the
field of Directory section, verify that the path to the library is set to
~/cadence_analog_labs_613 and click OK.
Note: A technology file is not required if you are not interested to do the layouts for the design
c. In the next “Technology File for New library” form, select option Attach to
an existing techfile and click OK.
e. Do not edit the Library path file and the one above might be different from
the path shown in your form.
f. Click OK when done the above settings. A blank schematic window for the
Inverter design appears.
6. Add components for the design in concern from libraries available. Edit component
parameters to those specified. Complete the wiring and verify the design connection.
7. Click the Check and Save icon in the schematic editor window.
8. Observe the CIW output area for any errors. If any errors are found make suitable
corrections.
9. Create Symbol for the schematic created and saved. In the created designs schematic
window execute Create — Cellview— From Cellview.
a. The Cellview From Cellview form appears. With the Edit Options
function active, you can control the appearance of the symbol to generate.
b. Verify that the From View Name field is set to schematic, and the
c. To View Name field is set to symbol, with the Tool/Data Type set as
Schematic Symbol.
h. Edit the symbol if required. Save the symbol. After creating symbol, click on
the save icon in the symbol editor window to save the symbol. In the symbol
editor, execute File — Close to close the symbol view window.
c. Click OK when done. A blank schematic window for the new design appears.
d. Using the component list and Properties for the simulation given, build the test
bench schematic.
11. Perform Simulation with Spectre. Start the Simulation Environment to run a
simulation.
a. In the schematic window, execute
Launch – ADE L
The Virtuoso Analog Design Environment (ADE) simulation window appears.
b. Choose a [Link] the environment to use the Spectre® tool, a high
speed, highly accurate analog simulator. Use this simulator with the
Inverter_Test design, which is made-up of analog components.
c. In the simulation window (ADE), execute
Setup— Simulator/Directory/Host.
d. In the Choosing Simulator form, set the Simulator field to spectre (Not
spectreS) and click OK.
e. The Model Library file contains the model files that describe the nmos and
pmos devices during simulation. Set the Model Libraries.
In the simulation window (ADE), execute
Setup - Model Libraries.
The Model Library Setup form appears. Click the browse button
to add [Link] if not added by default as shown in the Model Library
Setup form.
Remember to select the section type as stat in front of the [Link] file.
Your Model Library Setup window should now looks like the below figure.
f. To complete the Model Library Setup, move the cursor and click OK.
The Model Library Setup allows you to include multiple model [Link] also
allows you to use the Edit button to view the model file.
g. Choose the Analyses required for the simulation. In the Simulation window
(ADE), click the Choose - Analyses icon.
12. Create Layout View of the design. From schematic window menu execute Launch
– Layout XL. A Startup Option form appears.
a. Select Create New option. This gives a New Cell View Form
b. Check the Cellname, Viewname (layout). Click OK from the New Cellview
form. LSW and a blank layout window appear along with schematic window.
c. Add components to layout. Execute Connectivity – Generate – All
from Source or click the icon
in the layout editor window, Generate Layout form appears. Click OK which
imports the schematic components in to the Layout window automatically.
d. Re arrange the components within PR-Boundary.
e. Select the design. Activate the connectivity view under
Connectivity-Nets-Show/Hide all incomplete nets
f. Make connections to clear all incomplete nets.
g. Save the design.
19. The LVS begins and a Progress form appears. If the schematic and layout matches
completely, you will get the form displaying Schematic and Layout Match.
20. If the schematic and layout do not matches, a form informs that the LVS completed
successfully and asks if you want to see the results of this run.
Click Yes in the form. LVS debug form appears, and you are directed into LVS
debug environment.
21. In the LVS debug form you can find the details of mismatches and you need to
correct all those mismatches and Re – run the LVS till you will be able to match the
schematic with layout.
22. Assura RCX will extract the RC values from the layout and perform analog circuit
simulation on the designs extracted with RCX.
Before using RCX to extract parasitic devices for simulation, the layout should
match with schematic completely to ensure that all parasites will be backannoted to
the correct schematic nets.
23. To Run RCX , from the layout window execute Assura – Run RCX.
24. Change the following in the Assura parasitic extraction form. Select output type under
Setup tab of the form.
25. In the Extraction tab of the form, choose Extraction type, Cap Coupling Mode and
26. In the Filtering tab of the form, Enter Power Nets as vdd!, vss! and Enter
Ground Nets as gnd!
27. Click OK in the Assura parasitic extraction form when done. The RCX progress
form appears, in the progress form click Watch log file to see the output log file.
28. When RCX completes, a dialog box appears, informs you that Assura RCX
run Completed successfully.
29. You can open the av_extracted view from the library manager and view the parasitic.
Experiment 6: INVERTER
Objective To implement an inverter schematic, verify its design with a suitable test bench
and generate the layout of the same.
Design
vout Output
Library Cellview
Properties/Comment
name name s
USN Inverter Symbol
analogLib Vpulse v1=0, v2=1.8,td=0
tr=tf=1ns, ton=10n,
T=20n
analogLib vdc, gnd vdc=1.8
Outcome Student will be able to create the schematic, verify schematic functionality and
device regions of operation by simulation and build the layout for the same in Cadence
Virtuoso.
Objective To implement a Common Source amplifier schematic, verify its design with a
suitable test bench and generate the layout of the same.
Design
vout Output
Outcome Student will be able to create the schematic, verify schematic functionality and
device regions of operation by simulation and build the layout for the same in Cadence
Virtuoso.
Design:
Idc,Vinv,Vnoninv Input
Vo Output
Outcome Student will be able to create the schematic, verify schematic functionality and
device regions of operation by simulation and build the layout for the same in Cadence
Virtuoso.
Tool Required:
Functional Simulation: Incisive Simulator (ncvlog, ncelab, ncsim)
Synthesis: Genus
Fig: UART
module UART_TX
#(parameter CLKS_PER_BIT = 217)
(
input i_Clock,
input i_TX_DV,
input [7:0] i_TX_Byte,
output o_TX_Active,
output reg o_TX_Serial,
output o_TX_Done
);
parameter IDLE = 3'b000;
parameter TX_START_BIT = 3'b001;
parameter TX_DATA_BITS = 3'b010;
parameter TX_STOP_BIT = 3'b011;
parameter CLEANUP = 3'b100;
reg [2:0] r_SM_Main = 0;
reg [7:0] r_Clock_Count = 0;
reg [2:0] r_Bit_Index = 0;
reg [7:0] r_TX_Data = 0;
reg r_TX_Done = 0;
reg r_TX_Active = 0;
always @(posedge i_Clock)
begin
case (r_SM_Main)
IDLE :
begin
o_TX_Serial <= 1'b1; // Drive Line High for Idle
r_TX_Done <= 1'b0;
r_Clock_Count <= 0;
r_Bit_Index <= 0;
if (i_TX_DV == 1'b1)
begin
r_TX_Active <= 1'b1;
r_TX_Data <= i_TX_Byte;
if (r_Bit_Index < 7)
begin
r_Bit_Index <= r_Bit_Index + 1;
r_SM_Main <= TX_DATA_BITS;
end
else
begin
Dept. of ECE, GSSSIETW, Mysuru Page 50
VLSI Design and Testing LAB Manual BECL606
r_Bit_Index <= 0;
r_SM_Main <= TX_STOP_BIT;
end
end
end // case: TX_DATA_BITS
end
else
r_SM_Main <= IDLE;
end
else
begin
r_Clock_Count <= r_Clock_Count + 1;
r_SM_Main <= RX_START_BIT;
end
end // case: RX_START_BIT
// Wait CLKS_PER_BIT-1 clock cycles to sample serial data
RX_DATA_BITS :
begin
if (r_Clock_Count < CLKS_PER_BIT-1)
begin
r_Clock_Count <= r_Clock_Count + 1;
r_SM_Main <= RX_DATA_BITS;
end
else
begin
r_Clock_Count <= 0;
r_RX_Byte[r_Bit_Index] <= i_RX_Serial;
// Check if we have received all bits
if (r_Bit_Index < 7)
begin
r_Bit_Index <= r_Bit_Index + 1;
r_SM_Main <= RX_DATA_BITS;
end
else
begin
r_Bit_Index <= 0;
r_SM_Main <= RX_STOP_BIT;
end
end
end // case: RX_DATA_BITS
begin
r_RX_DV <= 1'b1;
r_Clock_Count <= 0;
r_SM_Main <= CLEANUP;
end
end // case: RX_STOP_BIT
// Stay here 1 clock
CLEANUP :
begin
r_SM_Main <= IDLE;
r_RX_DV <= 1'b0;
end
default :
r_SM_Main <= IDLE;
endcase
end
assign o_RX_DV = r_RX_DV;
assign o_RX_Byte = r_RX_Byte;
endmodule // UART_RX
Test bench :
// This testbench will exercise the UART RX.
// It sends out byte 0x37, and ensures the RX receives it correctly.
`timescale 1ns/10ps
`include "uart_tx.v"
`include "uart_rx.v"
module UART_TB ();
// Testbench uses a 25 MHz clock
// Want to interface to 115200 baud UART
// 25000000 / 115200 = 217 Clocks Per Bit.
parameter c_CLOCK_PERIOD_NS = 40;
parameter c_CLKS_PER_BIT = 217;
parameter c_BIT_PERIOD = 8600;
reg r_Clock = 0;
reg r_TX_DV = 0;
wire w_TX_Active, w_UART_Line;
wire w_TX_Serial;
reg [7:0] r_TX_Byte = 0;
wire [7:0] w_RX_Byte;
UART_RX #(.CLKS_PER_BIT(c_CLKS_PER_BIT)) UART_RX_Inst
(.i_Clock(r_Clock),
.i_RX_Serial(w_UART_Line),
.o_RX_DV(w_RX_DV),
.o_RX_Byte(w_RX_Byte)
);