2020 Ee 52 Vlsi-Lab
2020 Ee 52 Vlsi-Lab
REPORT
Submitted to:
Sir Omer Imtiaz
Submitted by:
Maham Aamir 2020-EE-52
Description:
In Lab VLSI 1, we were tasked with designing an inverter using MOSFETs from Cadence's fictional 45nm
process PDK, gpdk045. Our process involved manually placing components and creating connections
while observing resulting electrical properties. We replicated this procedure for a NAND gate.We
initiated the setup by creating a new folder named "training_inverter" in the Documents directory and
accessed Virtuoso through the terminal using the "virtuoso &" command.
Subsequently, we established a new library called "Labvlsi" linked to the gpdk045 technology. Within
this library, we crafted an inverter schematic by adding NMOS and PMOS components, supply (vdd) and
ground (gnd) symbols, and input/output pins. To evaluate our design, we employed the ADE-L tool to
simulate the inverter schematic. This involved setting up model libraries, defining analyses, selecting
outputs for plotting, and creating stimuli for input signals. After running the simulation, we analyzed the
waveform results obtained. Additionally, we generated a symbol for the inverter schematic that
represented its function accurately, ensuring its usability for future applications. We proceeded by
creating an "inverter_tb" schematic to test the inverter as a component. Within this test bench, we
placed the inverter symbol and included essential supply, ground, and input/output pins for testing
purposes .Simulations for the inverter test bench were conducted using ADE L.
Lab 2 – Virtuoso - Digital Gate Custom Layout
Introduction:
Description:
We opened Virtuoso and accessed the inverter schematic from the Library Manager. Then we launched
Layout XL and a blank Virtuoso Layout Suite XL window appeared. We generated the layout for the
inverter, created VDD and GND rails, and connected terminals. Then for running DRC using PVS we
prepared directories for DRC by creating folders in the working directory. Ran DRC using PVS, set the run
directory, specified technology mapping files, and checked for any DRC violations.
Then came the part of Running LVS using PVS. We created a folder for LVS in the working directory. Ran
LVS using PVS, set the run directory, mapped technology files, and verified the comparison results to
ensure schematic and layout matching. And then corrected layout issues
Then we ran Parasitic Extraction using QRC-L. We established a directory for QRC in the working
directory. We executed parasitic extraction using QRC-L, ensuring the creation of quantus input data.
Checked for clean and match status, ran the extraction, and verified parasitic components in the
extracted layout. We Created symbols for the inverter and inverter test bench schematic. Configured
ADE-L to simulate the extracted layout from the pvs extracted view. At the end we ran the simulation
and verified the output waveform, ensuring correctness.
Lab 3 – Draw MOSFET’s Layout
Introduction:
In this lab we looked into the analogy of an IC design. Our primary task was to manually construct the
pmos layout using rectangles representing distinct layers.
Description:
We generated the PR boundary and adjusted grid dimensions to align with the manufacturing grid for
ease of drawing. Subsequently, we created the N-well rectangle for the pmos, fine-tuned its dimensions,
and rectified its length as per instructions. The pmos layout took shape with rectangles for layers such as
Nimp, Pimp, Poly, Oxide, Metal1, and Cont. Completing connections for the inverter and conducting a
Design Rule Check (DRC) helped identify errors, leading us to review specific pages in the DRC
documentation and document error names and descriptions. We rectified them and proceeded to
perform the Layout Versus Schematic (LVS) check. Adjustments were made in pmos’ finger length. Then
we created a nmos layout and made comparison between the top-down view of the inverter's layout
developed in Virtuoso and the cross-sectional view presented in the textbook.
Lab 4a – TCL Introduction
Introduction:
This lab was based on TCL which is a scripting language that has traditionally been used in VLSI design
for decades.
Description:
We were given 5 tasks for this lab which are given below
❖ set num1 10
❖ set num2 5
❖ set result [expr $num1 + $num2]
❖ puts "The sum of $num1 and $num2 is $result"
# IF Else
❖ set x 7
❖ if {$x > 5} {
❖ puts "x is greater than 5"
❖ } else {
❖ puts "x is less than or equal to 5"
❖ }
# For Loop
# While Loop
❖ set j 0
❖ while {$j < 5} {
❖ puts "Value of j is $j"
❖ incr j
❖ }
3. Creating and indexing lists:
4. File IO:
❖ set filename "lab4a.txt"
❖ set file [open $lab4a "w"]
❖ puts $file "This lab is based on TCL."
❖ close $file
Introduction:
We utilized the Genus TM Synthesis Solution (Genus) tool in Stylus Common UI mode for RTL to
gate-level netlist synthesis. Our process involved using RTL, standard cell library, and
constraints as inputs, yielding gate-level netlist and detailed SDC outputs for subsequent
placement and routing steps. Additionally, an optional SDF file was generated to aid in gate-
level simulation post-synthesis.
Description:
In preparation for synthesizing the RISC-V processor, we initiated by establishing a dedicated working
directory (/home/student/Documents/riscv_practice) using terminal commands, confirmed the
directory, and utilized helpful shortcuts like TAB for efficient navigation. Essential folders—constraints,
lib, rtl, and synthesis—were copied from the provided directory to the designated location, ensuring
their presence. Moving the 'riscv.v' file to the rtl folder and deleting an outdated file ('counter.v') was
accomplished and verified. Next, a detailed examination of the 'riscv.v' code, focusing on RISCVCPU
module's input and output names, was conducted. Alterations were made in the constraints file
('constraints_top.sdc') by replacing specific terms, facilitating necessary modifications in
'set_input_delay' and 'set_output_delay' commands.
The alteration in the constraints file aimed to synchronize the timing constraints with the inputs
and outputs of the RISC-V processor design, substituting "rst" with "Instr DMem_in" and "count"
with "DMem_out DMem_addr IMem_addr" to accurately reflect the processor's signal
functionalities during synthesis.
We navigated to the synthesis folder, updated the Genus script, launched Genus, executed synthesis-
related commands, and analyzed the timing report for the synthesized design.
Q2-Which two registers is the critical path between? (see Startpoint and Endpoint).
Q4- Use the Critical Path Slack to determine the upper bound of the clock frequency for your
synthesized module
It was 152.3MHz
2988.
Q10-Note the new values of Target and Slack. Keep searching for “cost group” and note
values of Target and Slack every time they have changed.
TARGET SLACK
295 3432
196 342
297 3064
198 2986
Lab 5 – Innovus: Floorplan Design and Layout for RISC-V Processor
Intoduction:
In this lab we works on synthesized netlist in INNOVUS for placement and routing.
Description:
In our work on the RISC-V processor within Innovus for placement and routing, we commenced by
setting the work directory to `/home/student/Documents/riscv_practice/physical_design`. Necessary
design folders were copied from the specified source directory, and then Innovus was launched via the
terminal. We imported the design, configured corners, modes, and pointers in the `riscv.view` file, and
subsequently conducted floorplanning, specifying the aspect ratio, core boundaries, and distances for
the design. Following this, we carried out power planning, adding rings and stripes for VDD/VSS nets,
and formed power rails through special routes. We proceeded with placement optimization, examined
post-placement cell placements and routes in the Physical View, and saved the configured design. Clock
tree synthesis was performed, accompanied by RC extraction, timing analysis, and physical verification
for geometry and connectivity. Lastly, we ran the design on another setup and explored Innovus
commands and their effects through a provided script.
Lab 6 - Genus PPA Trade-Offs
Introduction:
Description:
We changed clock period to 2ns, with 50% duty cycle. Ran genus_script.tcl again
Introduction:
Description:
We commenced by copying the 'riscv_with_scan_chains_v2' folder from the specified location to our
'Documents' directory '/home/student/Documents/riscv_with_scan_chains_v2/physical_design'. To
include library formats instead of 'lef' files, we sought 'cds.lib' files within the '/mnt/Cadence/PDK'
directory. Upon identifying the 'cds.lib' file in 'gpdk045_v_6_0', we programmatically stored this path into
a bash variable 'gpdk_oa_path' by using the 'find' and 'grep' commands. Verifying its value using 'echo
${gpdk_oa_path}', we appended this path to a newly created 'cds.lib' file and added another line for the
library 'gsclib045_all_v4.4/cds.lib' using the 'echo' command. Next, we opened the 'innovus_script.tcl' file
with 'subl' command and modified it by commenting the 'read_physical -lef' command and inserted a new
line 'read_physical -oa_ref_libs {gsclib045 giolib045} -oa_tech_lib {gsclib045_tech}' below it. This
command was researched using 'man read_physical' to comprehend its flags and implications. Executing
'innovus_script.tcl', we observed numerous Design Rule Check (DRC) violations. Using the GUI, we
inspected the violations by zooming in on crosses and clicked to view the description of the selected
violation in the status bar at the bottom, recording these issues for further analysis.
We adjusted the 'innovus_script.tcl' to save the 'check_drc' output as 'drc_report'. By altering the stripes
to 'Metal10', we reran the script, eliminating DRC violations. Next, we confirmed no setup timing issues
but found 1291 hold time violations. Debugging in 'Timing > Debug Timing…' showcased SE (scan enable
input) as a predominant startpoint for violations.
Q2- Note the delay caused by wire length and clock buffer
4381.27 ns
Slack: 0.1340
Start: Regs_reg[16][0] / CK
End: DEXB_reg[0] / D
Then alterations were made via Interactive ECO for SE pin, initially adding a BUFX20 cell. Despite insertion,
the delay remained insignificant. Additional BUFX20 cells (totaling three) were then added, resolving the
hold time issues associated with the SE input. To ensure automatic resolution during placement and
routing, commands for SE pin were inserted in the script. Rerunning the script fixed hold time violations
for the SE input. For the second path with the SE pin, Innovus inserted BUFX20 cells automatically.
Similarly, a pin was created for the scan_in input to resolve its hold time violations. Adding the command
'create_basic_path_groups -expanded' below 'init_design' and rerunning the script exhibited changes in
setup and hold time analyses.
Lab 8: Innovus - IO File, Connectivity, Power Analysis, GDS
Introduction:
In this lab, we added the IO file to innovus layout and check its connectivity and ran power analysis and
Graphical Data Stream (GDS)
Description:
Copied the 'riscv_with_scan_chains_v3' folder using commands and navigated to the 'physical_design'
directory. Opened the 'innovus_script.tcl' file and executed it through the Innovus terminal. After the
script ran, performed a connectivity check by selecting 'Check > Check Connectivity...' from the Innovus
menu.
Q1- Write down the first of the warnings displayed by the connectivity check.
10 pin Instr [31] of net Instr [31] has not been assigned.
No.
Q3-What is the total internal power and its percentage to total power?
Internal Power=0.6435mW
Percentage=69.96%
Percentage=30%
Leakage Power=0.00053mW
Percentage=0.038%
0.9235mW
15.3 pF
Q9- Are there any red areas displayed in the main Innovus window?
YES
Q10- What is the lowest voltage provided to any cell in the entire chip?
0.12986mV
Q11- Looking at the color plot, tell which color denotes the largest voltage drop. Which general
location in the chip has the largest voltage drop and why?
Red color shows the largest voltage drop.
Lab 9: Gate-Level Simulation and Conformal Equivalence Checking
Introduction:
Description:
We copied the 'riscv_with_scan_chains_v4' folder and navigated to it. Inside the 'rtl' directory, we found
'mem.v' defining instruction and data memory modules. These modules were word-addressable with a
word size of 4 bytes and contain hard-coded instructions. In the 'simulation' directory, executed the initial
command in the makefile by using the command "make all".
Xrun -timescale 1ns/1ps ../rtl/riscv.v ../rtl/mem.v ../rtl/riscv_tb.v -access +rwc -mess -gui
After closing SimVision, I used the "make restore" command, allowing the restoration of a previously
saved layout. Simulation revealed updates in specific memory addresses, following instructions from the
mem.v file, with a 1 ns delay post-clock edge. In the gate_level_simulation directory, changes in file names
were noted, and the SDF_TEST was defined in the makefile. Investigation into the SDF annotation, gate-
level simulation, and equivalence checking using Conformal was conducted. Finally, new scripts were
executed in the synthesis and physical_design directories, involving additional commands like add_tieoffs,
add_endcaps, add_welltaps, and add_fillers.
Q3-Note what the command is doing, including the meanings of its flags.
Q4- Write down one sentence describing each of the four arguments i.e. a total of four
sentences.
1 st parameter is an SDF file. 2 nd parameter is module instance.
4 th parameter is mtm_spec.
290ps
Q6- Write one sentence to describe each of the relevant Info/Warn/Error messages.
Info: An output library pin lacks a function attribute [LBR-41]. Output pin “HOLD X11Y” has no function.
Error: No errors