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

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

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.

