blob: 6c40c670a8321eb3ac3263aeddf53ae2befef42b [file] [log] [blame]
------------------------------------
open_pdks
----------------------------------------
Master PDK generator for SkyWater Sky130
Hybrid 180nm / 130nm foundry process
for open source EDA tools
----------------------------------------
-------------------------------------------------------------------------------
Quick summary (TL;DR):
Prerequisites:
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 https://github.com/RTimothyEdwards/magic
cd magic
./configure
make
sudo make install
Open_PDKs SKY130 Installation: Most people will want to run the following
for PDK installation:
./configure --enable-sky130-pdk
make
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
/usr/share/pdks/sky130A/
-------------------------------------------------------------------------------
Detailed instructions for the patient reader:
-------------------------------------------------------------------------------
Prerequisites:
1. EDA tools:
For installing files to use with the Magic layout tool, Magic must be installed.
Obtain Magic from:
https://github.com/RTimothyEdwards/magic
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
needed.
Obtain sources for the SkyWater sky130 130nm process from the git repository
at the following location:
https://github.com/google/skywater-pdk
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
appropriately.
So cd to the target location parent directory (e.g., "cd ~/projects/foundry")
and run the following command:
git clone https://github.com/google/skywater-pdk
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_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:
--enable-sky130-pdk[=/path/to/sky130/pdk/source]
See below for details.
NOTE: The intention of the configure file is to not have to hand-edit
the Makefile. However, the development of the configure script is
currently ongoing and unfinished, so for now the Makefile should be
checked and edited after running configure.
--enable-sky130-pdk[=/path/to/sky130/pdk/source]
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.
--with-ef-style
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.
--with-sky130-link-targets=none|source
"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
"none".
--with-sky130-local-path=<path>
The path to the target install directory. This is used
in both the local and distribution installations. For
a distribution installation, this is the local name of
the path to the PDK after it has been distributed to
the host computers (This should have been set by the
option --with-local-path= passed to configure). If not
specified, then the default <path> is /usr/share/pdks/,
so the PDK will be installed as /usr/share/pdks/sky130A/.
--with-sky130-dist-path=<path>
The path to the location of the installed files prior to
distribution. This will most likely be a git or similar
repo. This path should NOT be specified for a single-
machine installation.
--enable-alpha-sky130[=<path>]
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".
--enable-xschem-sky130[=<path>]
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".
--enable-sram-sky130[=<path>]
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.
--enable-osu-sky130[=<path>]
This 3rd party library is a set of open-source digital
standard cells.
--enable-osu-t12--sky130[=<path>]
This 3rd party library is a set of open-source digital
standard cells at 12 track pitch height.
--enable-osu-t15--sky130[=<path>]
This 3rd party library is a set of open-source digital
standard cells at 15 track pitch height.
--enable-osu-t18--sky130[=<path>]
This 3rd party library is a set of open-source digital
standard cells at 18 track pitch height.
Step 2:
Run:
make
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:
Run:
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.
-------------------------------------------------------------------------------
Summary of the installation directories:
The Makefile script takes the source files and generates files for local
PDK names "SKY130A", "SKY130B", etc. (Note there is currently only one
PDK variant "A".)
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 "preproc.py" (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 preproc.py
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)
-GDS.tech 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:
libs.tech/ 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.