blob: acf9e0d2342251490c20b29613248a25c3690e46 [file] [log] [blame]
------------------------------------
open_pdks
----------------------------------------
Master PDK generator for SkyWater Sky130
Hybrid 180nm / 130nm foundry process
for open source EDA tools
----------------------------------------
-------------------------------------------------------------------------------
Prerequisites:
1. Foundry source files:
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 definition for SKYWATER_PATH in the Makefile 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_sc_hd/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 init libraries/sky130_fd_sc_hvl/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.
Then follow the instructions below for generating the additional files
for supporting the open source EDA tool flows.
2. EDA tools:
For installing files to use with the Magic layout tool, Magic must be installed.
Obtain Magic from:
https://github.com/RTimothyEdwards/magic
-------------------------------------------------------------------------------
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. Configure options are as follows:
--with-sky130-source=/path/to/sky130/source
"location of the source files for sky130"
--with-local-path=/path/to/install/pdks
"location where the PDKs will be installed"
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.
Step 2:
All other steps are run in the sky130/ subdirectory.
cd to the sky130/ subdirectory and edit the Makefile to set the following
definitions for your host system:
EF_STYLE = Select "1" for an efabless-style file structure, "0"
otherwise. 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.
LINK_TARGETS = "none" or "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, LINK_TARGETS
must be set to "none".
LOCAL_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).
DIST_PATH = The path to the location of the installed files prior to
distribution. This will most likely be a git or similar
repo.
Step 3:
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 4:
For a local install, do:
make install-local
This copies all files from the staging area into the destination
as specified by the variable LOCAL_PATH in the Makefile. All
pointers to absolute paths in the files are changed to match
LOCAL_PATH.
For a distribution install, do:
make install-dist
This copies all files from the staging area into the destination
as specified by the variable DIST_PATH in the Makefile. All
pointers to absolute paths in the files are changed to match
LOCAL_PATH. The assumption is that DIST_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
LOCAL_PATH.
-------------------------------------------------------------------------------
Summary:
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 files for openlane
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_base/ Primitive devices w/fixed layout
sky130_fd_pr_rf/ RF primitive devices w/fixed layout
sky130_fd_pr_rf2/ Additional RF primitive devices w/fixed layout
The target installation destinations assume the directory structure above. Changing
this requires editing the source files.