blob: 8941de1372f609613cd4d2a62a99cb254c5088e0 [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
Then follow the instructions below.
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:
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 only minor differences in
these two styles, namely for 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.
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 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:
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 (low power)
sky130_fd_sc_hvl/ 1.8V digital logic (low speed)
sky130_fd_sc_lp/ 1.8V digital logic (medium speed)
sky130_fd_sc_ls/ 1.8V digital logic (high speed)
sky130_fd_sc_ms/ 3.3V digital logic
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.