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