blob: 428a0bdb47713db25a6665d49ddbc1a9f1527604 [file] [log] [blame]
Master PDK generator for SkyWater Sky130
Hybrid 180nm / 130nm foundry process
for open source EDA tools
Quick summary (TL;DR):
sudo apt-get install python3
The Magic VLSI layout tool is used often by the installation. If you do
not have it, then obtain it and install with the following:
sudo apt-get install m4 tcsh tcl-dev tk-dev
git clone
cd magic
sudo make install
Open_PDKs SKY130 Installation: Most people will want to run the following
for PDK installation:
./configure --enable-sky130-pdk
sudo make install
This will download and install the SkyWater SKY130 PDK, the SKY130 setup
files for xschem, and a third-party library containing alphanumeric layouts.
If you prefer an installation in your user space, then use configure option
"--with-sky130-local-path=<path>" with <path> being some alternative like
~/pdks, and "make install" does not need to be run sudo.
With he above configuration line, the PDK files will be installed into
the path
From open_pdks version 1.0.269, there is a process variant
which reflects support for ReRAM.
Detailed instructions for the patient reader:
1. EDA tools:
For installing files to use with the Magic layout tool, Magic must be installed.
Obtain Magic from:
No other tools are required for installation, although open_pdks will
generate and install the setup files for a number of tools.
2. Foundry source files [optional]:
If you do not have the foundry source files, the latest version will
be downloaded from github, built, and installed locally in the
open_pdks/sources/ directory. If you have the foundry source files,
then you can pass the location to the open_pdks configure script. In
that case, the sources will need to be completely built. The
instructions below are needed ONLY if you intend to download and
install the PDK sources outside of open_pdks. Instructions below
are only valid for the SkyWater SKY130 process. If additional
open-source PDKs become available, instructions will be added as
Obtain sources for the SkyWater sky130 130nm process from the git repository
at the following location:
This repository may go in any convenient location. The Makefile suggests
the target location ~/projects/foundry/skywater-pdk but any location will
do as long as the --enable-sky130-pdk= configuration option value is set
So cd to the target location parent directory (e.g., "cd ~/projects/foundry")
and run the following command:
git clone
Note that many of the files in the PDK are too large for a single git
repository, and so each IP library in the PDK has been placed in a
submodule. There are multiple versions of each library, and it is
nearly certain that you will only want to deal with the "latest" version
of each. To make sure you have the submodules for the latest version of
each supported IP library, do:
cd skywater-pdk
git submodule init libraries/sky130_fd_io/latest
git submodule init libraries/sky130_fd_pr/latest
git submodule init libraries/sky130_fd_sc_hd/latest
git submodule init libraries/sky130_fd_sc_hvl/latest
[git submodule init libraries/sky130_fd_pr_reram/latest]
[git submodule init libraries/sky130_fd_sc_hdll/latest]
[git submodule init libraries/sky130_fd_sc_hs/latest]
[git submodule init libraries/sky130_fd_sc_ms/latest]
[git submodule init libraries/sky130_fd_sc_ls/latest]
[git submodule init libraries/sky130_fd_sc_lp/latest]
git submodule update
The liberty (.lib) files are the largest of all and so individual files
are too large for the git repo and need to be assembled by script. To
do that, do:
make timing
That installs all of the Google/Skywater files. To keep the overhead low,
you may initialize only the submodules that you need. At a minimum, the
I/O library, primitive devices, and the high density and high voltage
digital standard cell libraries should be installed. The remaining standard
cell libraries are optional, as needed for low-leakage, high speed, low power,
etc., applications.
Then follow the instructions below for generating the additional files
for supporting the open source EDA tool flows.
PDK Installation:
There are two methods for installation: Local and Distribution. Use Local
installation if you are installing on a single host computer. Use Distribution
installation if you are installing into a respository (such as git) that will
be distributed to multiple hosts.
Step 1:
Run "configure" to set the paths to the Google/SkyWater source
repository and to set the path to the install location. Note that
the configure script is located in the open_pdks top level directory,
not in the foundry subdirctory, and must be run from the top level
directory. The mandatory configure options are as follows:
This is mandatory for specifying that the installation
is for the SKY130 PDK. If the path is specified, then
the PDK is assumed to already be downloaded and installed.
If not, then the PDK will be downloaded automatically
from github and installed. Note that the PDK repository
is very large, contains submodules, and the submodules
need to compile the liberty timing files, which can
take a very long time. Be patient.
Select this for an efabless-style file structure.
The default is "no". There are some differences in
these two styles, the most important of which being
that the order of directories for the IP libraries
is <file_format>/<library_name> instead of
<library_name>/<file_format>. Other differences
include version tracking of the Magic setup files
and the location of the technology LEF file.
When set to "all" (which is the default), both variants
sky130A and sky130B are generated and installed. If
only one PDK variant needs to be installed, then use
this option to restrict the installation to a single
PDK variant.
"none" copies files from the source directories to
the target. "source" makes symbolic links to the source
directories. Use "source" only if doing a local install,
and the source foundry data will not be deleted. For
distribution installations, the value must be set to
The path to the sky130_ml_xx_hd library, a third-party
library containing layouts of alphanumeric characters
for adding text to layout. If the configuration option
or the path is not specified, then the library will be
downloaded from github automatically. To disable this
package, use "--disable-alpha-sky130".
The path to the SKY130 setup for the xschem schematic
entry/schematic capture tool. If the configuration
option or the path is not specified, then the library
will be downloaded from github automatically. To disable
this package, use "--disable-xschem-sky130".
This 3rd party library contains pre-compiled and verified
memory blocks from the OpenRAM open source memory compiler.
It is disabled by default due to the length of time
required to install, but it is recommended if you will be
using SRAM in a design.
This 3rd party library is a set of open-source digital
standard cells at 12 track pitch height.
This 3rd party library is a set of open-source digital
standard cells at 15 track pitch height.
This 3rd party library is a set of open-source digital
standard cells at 18 track pitch height.
This redirects the installation destination. open_pdks
installs into ${prefix}/share/pdk/, and by default
${prefix} is /usr/local. Be advised that Makefile
automatically adds the "share/" path regardless. To
install in a different location, pass these (optional)
environment variables to "make":
Overrides ${prefix}/share/pdk/ and installs
directly into the specified <path>
DESTDIR = <path>
When defined, then "make install" installs into
the specified <path>. However, all references
to files in the PDK will reference SHARED_PDKS_PATH.
Use DESTDIR if you want to install into a temporary
location such as a git repository or tarball that
will eventually be distributed and placed at
SHARED_PDKS_PATH on the target systems.
Step 2:
This will pre-process the setup files to create the PDK-specific files
for the SKY130A PDK, and process all vendor files, and place everything
in a local staging area.
Step 3:
[sudo] make install
The behavior of installation depends on whether or not
--with-<pdk>-dist-path=<path> has been set (e.g.,
--with-sky130-dist-path). If only the local path
(--with-<pdk>-local-path=<path>) has been set, then "make
install" copies all files from the staging area into the
destination. All pointers to absolute paths in the files
are changed to match the local path.
If --with-<pdk>-dist-path=<path> has been set, then "make
install" copies all files from the staging area into the
destination as specified by the value of <path>. All
pointers to absolute paths in the files are changed to match
the local path value. The assumption is that the distribution
path is a repository (such as a git repo) that is cloned to
multiple hosts, and the destination on the hosts where it is
distributed is the local path.
Step 4:
Any time you want to check if there are updates to repositories
that have been automatically pulled for open_pdks, Run:
make update
to pull any recent changes from the git repositories, and then
rebuild the PDK.
Step 5:
After installation, the staging area is no longer needed and can
be removed with
make clean
make veryclean (also removes the log files)
If you have not specified the installation to make symbolic links
back to the repository sources, then the sources are no longer
needed, either, and may be removed using
make distclean
However, doing so means that if the PDK needs to be updated and/or
rebuilt, the sources will have to be re-cloned from their public
If at any time you want to remove the PDK, make sure you have run
the "configure" script to enable the PDK you want to remove, and
then do:
make uninstall
Summary of the installation directories:
The Makefile script takes the source files and generates files for local
PDK names "SKY130A", "SKY130B", etc.
The definition of each PDK is made in the Makefile using defines; e.g.,
-DMETAL5, etc.
The make script makes use of the python script "" (in the ../common
directory) to parse each source file for "#ifdef ..."-type macros. The syntax
is similar to that used by the C preprocessor (cpp) but does not assume C
language syntax in the input file, so is generally better to use than cpp
(has less unexpected/unintentional behavior). See comments in the
script for a full list of macros that it accepts (short list: #ifdef, #ifndef,
#define, #include, and boolean operators ||, &&, and !).
Files generated:
.tech techfile for magic (full DRC, extract, GDS) techfile for magic, vendor mask layers
.tcl PDK script for magic
-BindKeys key binding script for magic partly matching Cadence defaults
.magicrc magic startup script (copy to local directory as .magicrc)
_setup.tcl netgen setup script for LVS
.sh qflow master setup script, standard 1.8V digital
.par graywolf setup file, standard 1.8V digital
The installation directory below LOCAL_PATH is the name of the PDK; e.g.,
sky130A/ 5-metal stack with MiM cap and redistribution layer
The installation directory hierarchy below the PDK name looks like the following: technology and setup files
magic/ magic techfiles, startup file, PDK script,
and key binding script.
netgen/ netgen setup file
qflow/ qflow scripts and graywolf setup files.
klayout/ setup files for klayout
openlane/ setup and supplementary files for openlane
ngspice/ base model files and libraries for ngspice
xschem/ setup files for xschem
irsim/ setup and parameter files for IRSIM
libs.ref/ foundry data
cdl/ CDL netlists
doc/ Foundry documentation
gds/ GDS files
lef/ LEF macro files
lib/ Timing files
mag/ Magic files derived from GDS
maglef/ Magic files derived from LEF macros
spice/ SPICE netlists (ngspice compatible)
techlef/ LEF technology files
verilog/ verilog modules
Each subdirectory of libs.ref is further divided into sections based on the
IP type. The section names are largely foundry-dependent. For SkyWater Sky130,
these sections include one or more of:
sky130_fd_sc_hd/ 1.8V digital logic (high density)
sky130_fd_sc_hdll/ 1.8V digital logic (high density low leakage)
sky130_fd_sc_hs/ 1.8V digital logic (high speed)
sky130_fd_sc_hvl/ 3.3V digital logic
sky130_fd_sc_lp/ 1.8V digital logic (low power)
sky130_fd_sc_ls/ 1.8V digital logic (low speed)
sky130_fd_sc_ms/ 3.3V digital logic (medium speed)
sky130_fd_io/ Standard I/O
sky130_fd_pr/ Primitive devices w/fixed layout
sky130_ml_xx_hd/ Library of alphanumeric layouts
The target installation destinations assume the directory structure above. Changing
this requires editing the source files.