------------------------------------
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.

