0% found this document useful (0 votes)
14 views11 pages

VLSI Design with Open-Source Tools

The document outlines a course on Basic VLSI, focusing on the physical fundamentals of MOS devices and CMOS integrated circuit design using open-source CAD tools. It provides detailed instructions for setting up a CAD environment, capturing schematics for a CMOS inverter, creating symbols, and running simulations. The course utilizes tools from the Open-source PDK provided by Skywater and includes practical examples for students to follow.

Uploaded by

pguzman
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)
14 views11 pages

VLSI Design with Open-Source Tools

The document outlines a course on Basic VLSI, focusing on the physical fundamentals of MOS devices and CMOS integrated circuit design using open-source CAD tools. It provides detailed instructions for setting up a CAD environment, capturing schematics for a CMOS inverter, creating symbols, and running simulations. The course utilizes tools from the Open-source PDK provided by Skywater and includes practical examples for students to follow.

Uploaded by

pguzman
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

Basic-VLSI

Agustín Galetto - Nicolás Calarco

Last edited March 6, 2025


Contents
1 Introduction 2

2 CAD tools environment installation and usage 2

3 Schematic capture of a CMOS inverter 3


3.1 Runing Xschem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2 Schematic creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4 Inverter symbol creation 6

5 Inverter test-bench creation and simulation 7


5.1 Code used into some components . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2 Running the simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

6 Inverter Layout 9

1
1 Introduction
The goal of the course is for the student to understand the physical fundamentals of MOS device
operation and the basic principles of CMOS integrated circuit fabrication. Also, for the student
to acquire the ability to design basic analog and digital circuits and use CAD tools.
The course is based on the use of the Open-source PDK provided by skywater and the
Open-source EDA Tools. See [Link]
In order to facilitate the installation process and ensure the correct functionality of the tools,
a Docker container with the complete environment installed it will be provided. This option is
provided by the Institute for Integrated Circuits (IIC), at Johannes Kepler University (JKU).
It is Open Source and has a large community of collaborators. You can find the repository on
[Link]
As a hello world example, in this tutorial, we are going to cover the whole design flow which
comprehends:

• Installation of the CAD tools.

• Schematic capture of a CMOS inverter.

• Inverter symbol generation.

• Test-bench generation to evaluate the inverter performance.

• Clean DRC and LVS Inverter layout design.

• Layout parasitic extraction.

• Post-layout inverter re-simulation.

2 CAD tools environment installation and usage


The usage instructions can be founded in this git repository: [Link]
IIC-OSIC-TOOLS. In this section we will try to simplify the process described in the section How
to Use These Open-Source (and Free) IC Design Tools, but please refer to the repository in case
of doubts or troubles.
Here are enlisted the steps for installing the environment:

1. Download or clone the repository [Link]


In this folder you have everything you need for running the tools. Now is necessary to
install some additional software to execute correctly the environment. Note: This project
is continually updated, solving bugs or improving functionalities; if you download the
repository, you will not be able to update it.

2. Install Docker. In the Quick Launch for Designers section are posted the installation
files for all Operating Systems. Choose yours, download and install Docker on your PC.
Docker website: [Link] Note: For correct execution of Docker, the
Hardware Virtualization function must be activated in your PC. This function can be
already activated, but if not, you probably get an error like Windows hipervisor is not
present when you try to run Docker. Please search in Google how to enable Hardware
Virtualization in your specific PC. If the problem persist you can find some guidance
HERE.

3. Install an X11 server. We are going to use an X11 interface. In this case, for Windows
users, an X11 server is required. Every X11-server should work, although those that appear
in the section Installing X11-Server are tested. After installation, an XLaunch application
should appear in your PC. Each time you use the tools, you have to launch this application
before. Please follow the configuration recommendations posted in the section when you
use it:

2
On Windows with VcXsrv, we recommend using the utility "XLaunch" (installed with
VcXsrv):

• Multiple windows mode


• Set Display Number to 0
• Start no client
• Tick all Extra settings: Clipboard, Primary selection, Native opengl, and Disable
access control

4. Setup your environment. Go to your repository folder and execute the “x” option:
start_x.bat for Windows, or start_x.sh for Linux users. This will create some environment
variables and the container in the Docker application.

At this point, you have all the components installed. Each time you want to run the envi-
ronment please:

• First, execute the XLaunch application (see recommended configuration in item 3 of


Section 2).

• Once XLaunch is running in background (you will see the Xlaunch icon in your system
try), open Docker and run the iic-osic-tools container.

A terminal window will appear and you will be able to run the tools.

Note 1: If you do this the first time, or an updated image to DockerHub has been pushed,
this can take a while since the image is pulled (loaded) automatically from DockerHub. Since
this image is ca. 4GB, this takes time, depending on your internet speed. Please note that this
compressed image will be extracted on your drive, so please provide at least 20GB of free drive
space. If, after a while, the consumed space gets larger, this is maybe due to unused images
piling up. In this case, delete old ones; please consult the internet for instructions on operating
Docker.
Note 2: All user data is persistently placed in the directory pointed to by the environment
variable DESIGNS. The default locations are:

• Windows: %USERPROFILE%\eda\designs

• Linux: $HOME/eda/designs

We will refer to this locations as designs folder from now.

3 Schematic capture of a CMOS inverter


Xschem is an open-source schematic capture software for designing electrical circuits. It is used
for creating schematics, which are graphical representations of an electronic circuit.
Some of the key features of Xschem include:

1. Component Library: Xschem has a large library of components that can be easily placed
onto the schematic canvas to create the circuit.

2. Wiring: Xschem has an easy-to-use wiring tool that makes it simple to connect components
together to form a complete circuit.

3. Annotation: Xschem allows you to add labels and net names to the schematic to help
identify different signals in the circuit.

4. Simulation: Xschem can export the schematic to other simulation tools, such as ngspice,
for analysis and testing.

3
Figure 1: Welcome screen when Xschem is opened.

5. Cross-platform: Xschem runs on multiple operating systems, including Linux, macOS, and
Windows.

6. Customization: Xschem allows users to create custom components and macros to stream-
line the schematic capture process.

This is a general overview of the Xschem schematic capture software. It is a powerful tool
that can be used for a wide range of electronic circuit design tasks. The Xschem manual and
online resources can provide more detailed information and guidance.

3.1 Runing Xschem


Once the Container is launched, to run Xschem go to the terminal window and write:

xschem

A sort of welcome screen like shown in Fig. will appear. Yo will see here many components
and basics designs that are already included in the repository.

3.2 Schematic creation


In this section you will generate the schematic of the inverter shown in Fig. 2.
Xschem is a common schematic design software such as any other, so we assume you are
familiarized with. We will give just a couple of instructions regarding components and paths.
You can find a brief resume of the main functionalities shortcuts in Table 1.

Please follow the next recommendations for your new design:

• Open a new tab by clicking in the ‘+’ symbol indicated by the red arrow on Fig. 1. Click on
File -> Save as and save this new design as [Link], ensuring that you are in the folder
indicated by a circle. This folder (/foss/designs) points to the designs folder defined on
section 2. Then, you can go quickly to this path by clicking Current dir in the saving or
instancing windows.

4
Key Function
u Undo
U (Shift+u) Redo
Left-click. Select element
Double-click. / q Edit. element prop.
scroll Zoom in/out
f Center Zoom
w Create wire
shift+i , ins Insert component
c Copy
m Move
shift + f Mirror
shift + r Rotate
Esc Release function
Supr/delet Delete

Table 1: Xschem Shortcuts

• For instancing components pressing the insert key. Please, pay attention on the path:
transistors are encountered into the library /foss/pdks/sky130A/[Link]/xschem/sky130_fd_pr,
which we will name from now as the technology folder. The specific components to choose
are nfet_01v8.sym and pfet_01v8.sym for the nmos and pmos respectively. See Fig.
3 for reference. Note: Be careful NOT TO SELECT the three terminals devices pfet3 or
nfet3!

• To make some edits, note that a pre-selection of the element with a left click is required
(See Table 1). Set the device properties to those shown in the Fig. 2 (only a change in the
w parameter is needed).

• To create pins or labels, use any of the insert component shortcuts and go to the xschem
library. You can find this library written in red when you press the Home button. Enter
to devices and select [Link] and lab_pin.sym respectively for pins and labels, like is
shown in Fig. 4.

Figure 2: Inverter final schematic.

5
4 Inverter symbol creation
Once you obtain the design of Fig. 2, generate the symbol of the inverter shown in Fig. 5.
For this, first generate a symbol for this schematic, by pressing A or clicking on Symbol ->
Make symbol from schematic, as is shown in Fig. 6.
A new file named [Link] will be generated in the same folder than the schematic.
Open it (open a new tab, click File -> Open and select [Link]) and try to obtain the
symbol of the Fig. 5. The symbol editor is different than the schematic editor, because it allows
to modify shapes and names. To make some edits, note that a pre-selection of the element with
a left click is required. The shortcuts indicated in the table 2 can be taken into account; for
example, for drawing a line, press l in your keyboard.

Key Function
u Undo
U (Shift+u) Redo
Left-click. Select element
Double-click. / q Edit. element prop.
scroll Zoom in/out
f Center Zoom
l Line
c Copy
m Move
shift + f Mirror
shift + r Rotate
Esc Release function
Supr/delet Delete

Table 2: Xschem Shortcuts (Symbol view)

Figure 3: Path and component for an nmos transistor instantiantion

6
Figure 4: Path and component for pins and labels instantiantion

5 Inverter test-bench creation and simulation


To simulate the inverter we will use the circuit the test-bench circuit shown in Fig. 7. This
circuit has the inverter as unit under test (uut), several stimulus and an inverter load (this is a
typical method to probe the components). An aditional capacitor is added just for connecting
the last node. So, We are going to create new schematic, which we will save as tb_inverter.sch,
then instance the components and make the connections. Note that the schematic has four
components, which can be found in three different paths:
• The inverters (the uut), which are placed in your designs folder. You can access it quickly
clicking on the Current dir button.

• The power sources, V4, V5 and V6, located on the xschem library. You can access it
quickly clicking on the Home button and selecting the device folder of the xschem library
(marked in red). All the of them are vsource components with different values that are
showed in Section 5.1.

Figure 5: Inverter final symbol.

7
Figure 6: Instructions to create a symbol from the inverter.

• The netlist_not_shown.sym component is in which the simulations will be described.


Its content will be described in Section 5.1

• The capacitor, that can be found under the xschem folder clicking on the Home
button and then selecting the technology folder (see section 3.2). Select the [Link]
compontent.

• The GND symbol, also located on the xschem library.

Figure 7: TB Inverter schematic.

5.1 Code used into some components


To insert the necessary code for each component, please double-click or pre-selct (left-click) and
press q. All the values in braces are parameters that can be changed by the simulation definition.
V4 and V5 are DC sources so its value has to be changed to:

value=DC{vdd}

V6 is a pulse source so its value has to be changed to:

value="PULSE({vdd} 0 0.0 1p 1p {Tclk/4} {Tclk/2}) DC 0 AC 0"

8
Note: Please respect the name of V6 in the testbench, because it will be used after in the
simulation script!
Code used into netlist_not_shown.sym (you can erase all its content and paste this)

name=SIMULATION only_toplevel=false

value="

* Circuit Parameters
.param vdd = 1.8
.param vss = 0.0
.param Tclk = 10n
.options TEMP = 65.0

* Include Models
.lib /foss/pdks/sky130A/[Link]/ngspice/[Link] TT

* OP Parameters & Singals to save


.save all

*Simulations
.control
tran 0.01u 100n
setplot tran1
plot v(vin) v(vout)+2
reset
dc V6 0 1.8 0.01
setplot dc
plot vin vout ylabel vout xlabel vin
set filetype = ascii
write [Link]
.endc

.end
"

5.2 Running the simulation


To run the simulations, click first in the Netlist button (indicated in green on the right-upper
corner of the screen in Fig. 8), and then Simulate (next to the Netlist button, indicated in yellow
in Fig. 8). This process is always necessary after any change: first Netlist and then Simulate.
Note: For the first time, you may have to set the netlisting mode by choosing Options -> Netlist
format / Symbol mode -> Spice netlist.
Fig. 9 shows the results that have to be shown after the simulation process.

6 Inverter Layout

To be continued...

9
Figure 8: Netlist and Simulate buttons

Figure 9: TB Inverter results.

10

Common questions

Powered by AI

Challenges in running simulations may include incorrect netlisting or simulation setup, leading to errors. Addressing such issues involves ensuring the correct netlisting mode is set (Spice netlist), and verification that all components are properly configured (e.g., correct V6 pulse source parameters). Any modifications require re-netlisting, and issues can often be traced back to configuration errors or incorrect test-bench setup .

Xschem facilitates schematic capture through its extensive library of components, easy-to-use wiring tools, and cross-platform compatibility. Key features include component annotation, simulation capability with tools like ngspice, and customization options such as creating custom components. These features make Xschem a powerful tool for designing electrical circuits like the CMOS inverter by allowing for detailed circuit visualization and testing .

The main steps for installing and configuring the CAD tools environment include: downloading or cloning the repository from GitHub, installing Docker which requires enabling Hardware Virtualization on the PC, installing an X11 server for graphical interface support, and setting up the environment using provided scripts. Each step ensures the environment supports the open-source IC design tools from the repository, and proper guidelines are provided for Windows and Linux users .

Using open-source PDKs like Skywater's provides learners and developers with accessible resources to explore and experiment with VLSI designs without the high costs associated with proprietary technologies. This fosters innovation and learning by allowing users to focus on design principles and implementation rather than acquiring expensive licenses. Open-source PDKs also benefit development by promoting collaboration and sharing improvements within a community, leading to enhanced tool and process innovations .

The procedures for CMOS inverter layout design involve creating a layout that matches the schematic and conducting DRC and LVS checks to ensure no design rule violations or mismatches exist between schematic and layout. Layout integrity is crucial because it ensures the physical design correctly implements the intended circuit function, crucial for reliable performance and manufacturability of VLSI circuits. Without correct layout design, circuits may fail to operate as intended or lead to costly fabrication errors .

Hardware virtualization is significant in VLSI design as it allows multiple operating systems to run as virtual machines on a single hardware setup, which Docker leverages to provision containerized environments. The document underscores the importance of enabling hardware virtualization for Docker to function effectively, ensuring the seamless execution of the VLSI design tools. This virtualization enables efficient resource use and isolation, crucial for running complex design tools without hardware conflicts .

Test-benches play a crucial role in verifying the functionality of the CMOS inverter. They provide a controlled environment where the inverter is subjected to various stimuli to assess its behavior. The setup involves creating a new schematic file, instancing the inverter as the unit under test, and using components like power sources and capacitors. This setup allows simulations to check inverter performance under specific conditions, ensuring the design meets expected outcomes before fabrication .

Docker is important for setting up the VLSI design environment because it provides a containerized platform that can run the necessary tools and dependencies consistently across different operating systems. This reduces compatibility issues and ensures all users have access to the same configured environment, maintaining consistency in tool usage and results. Docker simplifies deployment and upkeep of the design environment by managing dependencies efficiently .

User data persistence is important as it ensures that design progress and customizations are saved and not lost between sessions. According to the document, persistent storage is managed by directing data to specific user directories, designs folders on both Windows and Linux. This setup allows users to continue their work across different sessions, facilitating continuous development and avoiding data loss, thus contributing to an efficient design workflow .

To generate a symbol for a CMOS inverter in Xschem, you first complete the schematic and then use the 'Symbol -> Make symbol from schematic' option to create a new symbol file. This file represents the inverter as a single icon, simplifying the schematic and improving readability. Symbol creation is significant as it allows complex circuits to be represented compactly, making integrated circuit design more manageable and modular .

You might also like