VLSI Design EENG 34050/EENG M4050 1 Preamble
1.1 Intended Learning Objectives & Outcomes
Learning Objectives
· To introduce the user to the Cadence design environment and the Virtuoso toolset
· To introduce digital full-custom design practices from schematic entry to analogue simulation
Learning Outcomes
By the end of this lab students should be able to:
· Manage basic tasks in the Unix Operating System necessary for using Cadence
· Launch Cadence and use the Virtuoso toolset
· Create circuit-level schematics using transistors and passives and carry out transient simulations
Labs 1 through 3 comprise a tutorial-based introduction to full-custom IC design based on the Cadence
toolset and the 0.35 ?m CMOS process from AMS. It covers three main areas: circuit design using
schematic entry (Lab 1), layout (Lab 2) and advanced simulation and verification techniques (Lab 3).
These labs are complementary to the lectures.
Please feel free to print the lab manuals if it is easier to move back and forth between sections.
Texts with underlines have embedded links.
Click on the symbol to go back to the previous place. For figures, symbols take you
back to the first time that the figure is mentioned within the text, you can click on symbols
to switch to other places that are referring to the same figure. Click on to return to the
Table of Content.
It would be easier if you set the pdf view to ‘Fit One Full Page’ or with a zoom view below
100%.
Note:
Attendance at the scheduled lab sessions (timetable is provided on Blackboard) is
MANDATORY in sessions attended by the lecturer and lab demonstrators. If you cannot attend
any of these for some compelling reason, please see me in good time. Please note that each lab
is a prerequisite for the next one.
You must work alone on these assignments. Please note that plagiarism of any sort is an academic
offence.
VLSI Design EENG 34050/EENG M4050
1.2 Confidentiality of Process Information
To do meaningful, industrially relevant work, these laboratory exercises use a physical design kit (PDK)
for a 0.35 mm technology called the Hit-Kit (short for High Performance Interface Tool Kit) from a
commercial vendor called AMS that is supplied under a Non-Disclosure Agreement (NDA).
All AMS supplied models, library files, datasheets and documentation made available to you can strictly
be used only to carry out design and simulation tasks prescribed in this Unit at the University of Bristol. No
information related to the AMS design kit may be disseminated to anybody or used for any purpose other
than the above. In addition to AMS supplied models, library files, datasheets and documentation, publishing
simulation results based on AMS device models or standard cells that allow comparisons to be made against
other processes is not permitted under the NDA.
You can only start these labs if you consent to the requirements of the NDA. By continuing you agree to
abide by the statement on the last page, which you must sign and upload to Blackboard by the
suggested deadline.
1.3 How to Read the Lab Documents and Complete the Exercises
These labs are individual exercises, i.e., you must work through them on your own, not in a group. Every
lab document is meant to be read through in order from beginning to end, and no section should be skipped.
Questions are embedded in each section, and are of two types:
- Tasks, where you should follow a series of instructions, such as completing a command in the
simulator.
- Exercises, where you are expected to produce some output, whether it is a worked calculation, a
circuit schematic, a simulation, or some discussion.
You will be marked on Exercises, and solutions should be uploaded electronically through Blackboard.
Each exercise will have specific instructions on what and how to submit. For more information refer to:
What you need to upload to Blackboard.
Important coursework submission deadlines:
1. Exercises in Lab 1 and Lab 2 manuals should be submitted to Blackboard as Coursework 1:
Cadence Schematic and Layout (Total 100 points, 30% of your final mark for both EENG 34050
and EENG M4050 students) by 13:00 on Thursday 29 February 2024. The submission point on
Blackboard will be opened 2 weeks before the deadline.
2. Exercises in Lab 3 manual should be submitted in Blackboard as Coursework 2: Cadence
Analysis (Total 100 points, 20% of your final mark for EENG 34050 students and 30% of your
final mark for EENG M4050 students) by 13:00 on Thursday 25 April 2024. The submission point
on Blackboard will be opened 2 weeks before the deadline.
During the lab sessions, the lecturer and lab demonstrators will ask you to show your work.
Please make sure to upload the required documents for each coursework by the deadlines. Penalty marks
will be considered for delayed submissions.
VLSI Design EENG 34050/EENG M4050
5 | P a g e
Academic Integrity and Avoiding Plagiarism
Plagiarism is the act of trying to pass off somebody else’s work either wholly or in part as your own and is
an academic offence. Simply put, it is cheating and includes copying the answers to questions and
submitting any work electronically that is not exclusively your own. As these are individual assignments,
it is not permitted to:
- Discuss the answers to questions within a group and submit the same solution, possibly with minor
variations. If you do, it will be discovered, and all parties will receive zero for that question at a
minimum.
- Ask a lab demonstrator for the answer to an assessed question. The point of an assessed question is
to test your understanding, not the lecturer’s and lab demonstrators’ understanding.
Every submission for any assessed assignments must be completely your own effort. Discussions are a great
way of tackling new concepts and are an essential part of learning. However, it is not acceptable to provide
the same answer to individual exercises by working as a group. You should attempt the solution to the tasks
and exercises on your own, and not show each other your attempt.
Note:
Carefully read the section on Academic Integrity.
All students who collude on exercises and assignments will get zero marks for that bit of
coursework at a minimum, regardless of who copied from whom.
Please do not ask the lab demonstrators to do exercises for you, or if an answer is correct. Their
task is to help you with Cadence. As an example, in Exercise 3.1, the only help you should ask
for from the demonstrators is on how to extract the delay from the simulated waveforms (if you
need to), not with the equivalent circuits, deriving an expression for the delay, or calculating the
equivalent resistances based on your simulation results. I cover all concepts in teaching sessions
and please do ask me if you need help.
Laboratory Usage
The 2.11 Linux lab is reserved for students of the VLSI Design course every Tuesday, from 10:00-13:00.
Please pick a seat, avoid walking about as much as possible, and keep conversation to a minimum to avoid
disturbing your colleagues. This is a centrally managed teaching resource, and all users must respect
the rules related to not consuming food and drink inside the lab as signposted at the entrance. If you
need a break, please use the resources provided in the foyer.
Remote Access to Linux Machines for Using Cadence
Follow the instructions in Task 2.1.
1.4 Introduction to Unix/Linux
Many of you will be familiar with the Linux flavour of Unix and if that is the case simply skip this section.
If you do not have any experience with Unix, it is a good idea to go through a basic introductory tutorial,
to perform basic Operating System-related tasks such as listing the contents of a directory, copying and
moving files, reading text files, and understanding which configuration files modify which aspect of your
environment. Many such tutorials are freely available on the internet. A good one is available here:
http://www.ee.surrey.ac.uk/Teaching/Unix/.
Note:
If you do not have experience with Unix, the basic commands below will allow you to do the rest
of the lab. It is strongly recommended that you follow some online tutorials afterwards. Spending
an hour or two understanding Unix will greatly benefit you in the long term.
For your reference, some basic commands are listed in Table 1. Bear in mind that Unix is case-sensitive.
All Unix commands listed below that you can type in are given in the format of “command arg” using
quotes and a different font. That is, you can type in the text inside the quotes.
Note:
The Unix help is documented in man pages. You can get more information about any of the
following commands by typing “man command” at the command prompt. For example, “man
ls” will give you the man page for the command “ls”.
TABLE 1. Unix commands
Command Description
passwd Allows you to change your password. (Please follow standard University guidelines in managing
passwords and make sure that you use a secure password, and do not share it with anyone.)
ls Lists the files in your current directory. Most Unix commands take one or more optional
parameters, specified with a leading ‘?’ without the quotes. For example, “ls -l” lists your
files in the 'long format', which contains lots of useful information such as the exact size of the
file, the owner of the file, who has the right to read, write and execute, when it was last modified
etc.
“ls -a” lists all files, including file names that begin with a leading dot, which are typically
used for various configuration uses, and are not shown by default.
“ls -al” shows all files in long format.
VLSI Design EENG 34050/EENG M4050
7 | P a g e
pwd Shows your current directory.
cd Changes directory to the directory . If such a directory does not exist, you will get an
error message. Here can contain a full path. You should bear in mind that paths in
Unix are specified with a forward slash rather than a backward slash as in Windows. For example,
you move to the root directory by specifying “cd /”. The Cadence installation directory is
/usr/local/cadence. You can move to this directory by typing “cd
/usr/local/cadence” from anywhere since you specify the full path.
When you log in, you always start out in your 'home directory', which is the directory allocated
to you as a user. You can always return to your home directory by typing “cd” without
arguments.
“cd ..” will move you one level up from your current position. You can use the tilde sign
‘~’ followed by a username as a shortcut to that user’s home directory. For example, “cd
~user1” will change to user1’s home directory. The ‘~’ sign on its own without a username
signifies your own home directory. The use of the tilde sign is permitted with any command that
uses a path, such as “ls” or “cp”.
mkdir Creates a directory called dirname.
cp
Copies to . This command also accepts wild cards. For example, the
command “cp /dir1/dir2/*” will copy all files contained in “/dir1/dir2” to
the current directory. The asterisk is a wild card signifying all files, and the dot (period)
at the end says to copy the files to the current location. If the directory being copied has
sub-directories, and you want to copy all these sub-directories, the option “-r” needs
to be used. So, for example, typing “cp -r ~user1/design ~/” will copy
the directory “~user1/design” (assuming you have read permission on it) and
all its contents including sub folders to your home directory.
rm Deletes the file . Bear in mind that Unix does not have a trash can or an undo function,
and anything deleted is deleted forever! It is wise to use the option “rm -i”, which will ask
you for confirmation before deleting anything. “rm” is a very powerful command, and “rm -
r” will remove directory contents recursively. For example, “rm -r myName” will remove
the directory myName and all its contents, including sub directories. Again, there is no recovery
once something is deleted, so always make a habit to use rm with the option ?i. For example,
“rm -i myName” will prompt before trying to delete myName.
mv
Equivalent to “cp ” followed by “rm
”.
rmdir Deletes the directory if it is empty. “rmdir” deletes only empty directories.
more Shows the contents of , formatted to fit whatever size your xterm is. (You will see
machine code symbols if the file is not a text file.) Hitting the space bar will move onto the next
‘page’, while pressing ‘q’ will exit the command.
less More or less the same as “more” (!) except that “less” allows you to scroll using scrollbars.
Also quitting the command will not retain any text in your xterm, while “more” will retain the
contents of the last page.
vi Starts the vi text editor. This is a lightweight text editor that is standard with all Unix installations.
Please check this link https://www.cs.colostate.edu/helpdocs/vi.html for a tutorial on how to use
vi. You will find many such tutorials on the internet.
VLSI Design EENG 34050/EENG M4050
8 | P a g e
emacs Starts the emacs editor. This is a much more powerful editor. This link gives you an idea of its
capabilities and provides a tutorial introduction: http://www.gnu.org/software/emacs/tour/
chmod [options]
Changes the read, write and execute permissions on your files. The default is that only you can
look at them and change them, but you may sometimes want to change these permissions. For
example, “chmod o+r ” will make the file readable for everyone, and
“chmod o-r ” will make it unreadable for others again. Note that for
user1 to be able to read a file created by user2, all containing directories for that file need to be
at least executable for user1.
tar Used to create file archives and extract files from a supplied archive. This is a sort of equivalent
for winzip, without actual compression. For example, “tar -xvf filename.tar”
‘untars’ the tarball or tar archive contained in filename.tar, including the hierarchical directory
structure. The command “tar -xvf filename.tar -C ~user1/test”
will extract to the specific directory ‘~user1/test’. The command “tar -cvf dirname”
will generate an archive consisting of all contents of folder dirname to “dirname.tar”.
gzip Compresses files. “gzip” produces files with the ending '.gz' appended to the original
filename. For example, “gzip tarball.tar” will produce the file ‘tarball.tar.gz’.
gunzip
Uncompresses files compressed by “gzip”.
grep
A very useful and powerful utility that searches for the text pattern ‘string’ in filenames.
For example, “grep ‘foo’ filename1 filename2” looks for the pattern
‘foo’ in filename1 and filename2. “grep” uses regular expressions for specifying
patterns. You can look up regular expressions for example on the internet here:
http://www.regular-expressions.info/quickstart.html.
top Provides an ongoing look at processor activity in real time, displaying a listing of the most CPU-
intensive tasks on the system. It provides an interactive interface for manipulating processes. For
example, if your username is user1, typing “top”, followed by “u” (which prompts you for a
username), and “user1” will list your processes. You can also terminate processes
interactively by typing “k” when running “top”, when you will be prompted for a PID. You
will also be prompted for a ‘kill’ option such as ‘9’.
ps -u Lists all the processes started by . The listing contains lots of information including the
process ID or PID, which is very useful if something crashes and you need to kill processes
individually, as well as the total time a process has been running etc.
kill [options]
Kills (terminates) the process having the process identifier (a number). This works only
for your own processes. You can get the PID by using “ps”. “kill” used on its own without
an optional attempt to terminate the process gracefully, giving it a chance to finish important
business such as flush buffers etc. If the process does not terminate (give it some time!), use the
option -9 or -KILL as in “kill -9 ” or “kill -KILL ”.
You should generally kill off ‘ghost’ processes that are artefacts of crashes or are otherwise not
performing any useful function. For example, Cadence starts many processes with a leading ‘cds’
in the name, such as “cdsMsgServer”, “cdsServIpc”, “cdsNameServer” etc. Another common
process is “obNameServer”. Sometimes Cadence crashes, when these processes remain running
in the background. You should locate these processes using “ps -yourUserName” or
“top” (see below) and kill them before restarting Cadence.
VLSI Design EENG 34050/EENG M4050
9 | P a g e
Note:
A very useful utility in Unix is command completion. If you type the partial name of a command
or a file name and press the tab, Unix will complete the command or file name, and prompt you
if there is no unambiguous choice. This helps when typing long commands. For example, rather
than typing “gunzip”, typing “gun” followed by the key will complete the command.
Typing “gu” and pressing “tab” will not produce a completion in the first instance because
several other available commands begin with “gu” (eg: “guile” and “guile-tools”.
However, if you press the “tab” key a second time, all the commands will be listed, so this is
also a neat way of checking what commands or files are available.
Also, the up arrow will cycle through previous commands.
1.5 Acknowledgements
These labs have been compiled from a combination of knowledge and information gained by personal
experience of using this tool at various institutes, teaching documents available via the internet or acquired
through personal contacts, and Cadence documentation. References are cited wherever text or diagrams are
taken from another source. The following websites have been particularly useful:
1. https://www.mics.ece.vt.edu/ICDesign/Tutorials/Overview/index.html [Retrieved Jan. 2023]
2. https://inst.eecs.berkeley.edu/~cs250/fa10/ [Retrieved Jan. 2023]
2 Introduction to Cadence
2.1 Configuring Your Unix Environment for Cadence
When you log in, you always start out in your 'home directory', which is the directory allocated to you as a
user. For example, if your login name is user1, you will be in the directory “/home/user1/linux”.
You have written permission only in your home directory. You can always return to your home directory
by typing “cd” without arguments.
It is necessary to create a directory from where you always start Cadence since a lot of files and
subdirectories are automatically generated. This way, you can keep the environment for this Unit separate
from the environment for other Units.
VLSI Design EENG 34050/EENG M4050
10 | P a g e
Note:
You must follow the naming convention outlined in each lab very precisely. These names will be
assumed by the automated test bench scripts that will check your submitted designs.
Some characters are not interpreted literally in UNIX. For example, the ~, !, $, *, ?, \ , / and blank
spaces are called meta-characters and can cause problems when used in file names, because they
have other purposes in UNIX and are interpreted as instructions. Thus, you should avoid any
name with the above characters (such as a cell named “nand3 new” or a library named
“lab/2019”), since it may cause strange errors in the later stages of the design phase.
Designs in Cadence are called cells. Cells that logically belong together are organised into a
library. You should have a single library called “lab2024” where you save all your cells. The
naming convention you should follow is shown in Table 2. These names will be repeated at the
point of creating the cell in each lab assignment. You should see “lab2024” instead of
“lab2018” mentioned in some of the Figures.
TABLE 2. Library and cell naming convention for Lab Coursework
Library
Name Cell Name Lab No. Description
lab2024 inv 1 Inverter cell
tb_inv 1 Testbench for the inverter
nand3 2 3-input NAND gate
tb_nand3 2 Testbench for the nand3 gate
invParam 3 Parameterised Inverter Cell
tb_invParam 3 Testbench for the Param. Inverter
Task 2.1: Setting Unix Environment for Full-Custom Design
(Laboratory Usage)
1. Once logged on, select Applications --> System Tools -- > Terminal.
2. Once the terminal window is open, type “cd”, which ensures you are in your home directory.
3. Type “module use /eda/cadence/modules”.
4. Type “module load course/EENG_3M_4050” to create a new working directory for Cadence.
VLSI Design EENG 34050/EENG M4050
11 | P a g e
5. Type “vlsi_setup” to setup the VLSI directory (~/VLSI) and type “cd VLSI” to enter it . On future
runs, you can type “cd EDA/VLSI” to enter the VLSI directory that is already set up.
6. Start Cadence by typing: “ams_cds &”.
(Remote Access)
Note: It is strongly suggested to access the software in the lab only. If you need to remote access the
software and you face any issues, you should directly contact IT services for support.
1. For remote Linux desktops follow the instructions in this link based on your operating system:
https://uob.sharepoint.com/sites/itservices/SitePages/fits-engineering-linux-x2go.aspx
2. Once logged on to x2goclient, select Applications --> Terminal Emulator.
3. Once the terminal window is open, type “cd”, which ensures you are in your home directory.
4. Type “module use /eda/cadence/modules”.
5. Type “module load course/EENG_3M_4050” to create a new working directory for Cadence.
6. Type “vlsi_setup” to setup the VLSI directory (~/VLSI) and enter it. On future runs, you can type
“cd EDA/VLSI” to enter the VLSI directory that is already set up.
7. Start Cadence by typing: “ams_cds &”.
Note:
? The ampersand character (&) at the end of the command is to have the Cadence executable run in
the background, which frees up the xterm to accept other commands. This is a general Unix
utility and works with any command. You can leave a space between the final argument and the
ampersand as shown or have no space.
When you run this script for the first time, several configuration files are created. In the xterm you will see
various messages.
All messages beginning with “Creating..” relate to initialisation files that are created the first time
you run the tool, and will not appear again. The last line tells you that the Cadence executable virtuoso
is running, with the Hit-Kit version 4.10, (which is the technology kit supplied by AMS and relates to
libraries and process-related information), with a C35B4 technology that refers to a 0.35 ?m 4 metal
CMOS technology.
You should now have the following windows open:
- The Select Process Option window, which lists the available options for the C35B4 process. YOU
MUST SELECT “C35B4C3 PIP VG5 HIRES”, then press “OK” (see Figure 1 ).
- The Command-Interpreter-Window or CIW for short (Figure 2) is the main Cadence window
which echoes the main log created as “~/cds.log”. This window prints diagnostic
and error messages from the various other tools that Cadence starts up. Closing the CIW will cause
Cadence to exit.
VLSI Design EENG 34050/EENG M4050
12 | P a g e
- The Library Manager, which lists all available libraries, and provides a menu-driven GUI for
performing common tasks such as creating/copying/deleting libraries and cell views (Figure 3 ).
If for any reason the Select Process Option window is not visible, go to the CIW menu bar, select Hit-Kit,
and then select Process Option from the drop-down menu. A Select Process Option window will pop up
(Figure 1). Select the “C35B4C3 PIP VG5 HIRES” option and click “OK”.
FIGURE 1. Fabrication process options
FIGURE 2. The CIW
VLSI Design EENG 34050/EENG M4050
13 | P a g e
FIGURE 3. The Library Manager
At this point, you should have two windows open, the CIW and the Library Manager. You should now
have a look at the contents of your Cadence working directory, by typing “ls” into the Linux terminal
window, which will list the files present. Two important files are the “cds.lib” and the “.cdsinit”
file. Type “ls -al” if you don’t see these files.
The “cds.lib” file is the library definition file, which tells Cadence where the various supplied and user-
defined libraries are available.
The “.cdsinit” file specifies user customisation of the general tool environment.
Additionally, various other configuration files specify the configuration for various other tools that will be
used later, such as the layout editor.
2.2 Using the Cadence Documentation
At any time, you can type “cdnshelp&” into the terminal to launch the Cadence document server. You
can do a text search or access the various user guides separately. This is a valuable source of information,
and many manuals, tutorials and user guides exist for various parts of the tool. The Cadence help should be
your first source of reference whenever you have a query.
2.3 Cadence Design Flow
In the full custom design, the basic flow is to create the schematic according to the specifications, and then
the layout according to the schematic (see Figure 4).
VLSI Design EENG 34050/EENG M4050
14 | P a g e
Creating a schematic to match the specifications is the more straightforward of the steps, due to the higher
level of abstraction. Creating a layout to match the schematic is much more difficult, as it consists of
manipulating polygons of different materials on several layers, and even creating a wire (metal connection)
between two nodes is a complicated task in comparison with schematic entry.
In layout design, a primary check that needs to be carried out is called a Design Rule Check or DRC for
short. This is a check that the layout does not violate any of the design rules for the targeted technology,
such as spacing rules. This is an automated check that is specified by rule files, which were set up when
you ran the “ams_cds” script for the first time.
A second check is that the layout matches the schematic, through a Layout vs Schematic or LVS check. This
is an automated tool task in Cadence.
A final check is to extract the parasitic resistances and capacitances from the layout, the unintended artefacts
of the layout, and simulate the schematic with these parasitics in place so that wires are not treated as
equipotential regions but rather as resistive-capacitive (RC) lines, and capacitive coupling between nodes
is accounted for.
It almost always happens that when running these checks, errors are discovered, or the circuit does not
match the required specifications, and the layout needs to be modified. The number of these iterations can
be high depending on the complexity of the circuit, and typically we move back and forth between the
circuit schematic and layout.
Various tools handle the flow between the schematic, layout, and simulation. Each lab in the coming weeks
will examine these steps in detail. In the rest of this lab, you will create an inverter schematic and run a first
analogue simulation.
FIGURE 4. The waterfall design flow
2.4 Running Cadence in Subsequent Lab Sessions
(Laboratory Usage)
In the first instance of running Cadence, it was necessary to stipulate the AMS C35B4C3 process, which
initialised the creation of the associated files within your Cadence working directory. This process is not
necessary again, thus in all future lab sessions, Cadence should be run as follows.
1. Once logged on, select Applications --> System Tools -- > Terminal.
2. Once the terminal window is open, type “cd”, which ensures you are in your home directory.
3. Move into your (/VLSI) Cadence working directory, by typing “cd EDA/VLSI”.
4. Type “module use /eda/cadence/modules”.
Schematic
Layout
Specifications
VLSI Design EENG 34050/EENG M4050
15 | P a g e
5. Type “module load course/EENG_3M_4050” to create a new working directory for Cadence.
6. Start Cadence by typing: “ams_cds &”.
(Remote Access)
1. Once logged on, select Applications --> Terminal Emulator.
2. Once the terminal window is open, type “cd”, which ensures you are in your home directory.
3. Move into your (/VLSI) Cadence working directory, by typing “cd EDA/VLSI”.
4. Type “module use /eda/cadence/modules”.
5. Type “module load course/EENG_3M_4050” to create a new working directory for Cadence.
6. Start Cadence by typing: “ams_cds &”.
3 Schematic Entry
3.1 Creating a New Library
The first task is creating a new library where your new schematics will reside. The Library Manager
(Figure 3) is a design management tool that helps us navigate the different libraries and cell views, including
the supplied libraries as well as the project libraries.
You will see that under the “Library” tab, many libraries are already defined. Two libraries that we will
be using very often are “analogLib”, a Cadence-supplied library for common components such as
ground, vdd and voltage and current sources, and “PRIMLIB”, an AMS-supplied library that contains
parameterised transistor cells among other components that we can use directly. We will see how to use
these libraries later. The first task is to create a new library where you will be storing the different WX:codehelp