| ------------------------------------ |
| 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_hvl/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 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. To keep the overhead low, |
| you may initialize only the submodules that you need. At a minimum, the |
| I/O library, primitive devices, and the high density and high voltage |
| digital standard cell libraries should be installed. The remaining standard |
| cell libraries are optional, as needed for low-leakage, high speed, low power, |
| etc., applications. |
| |
| 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] |
| 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". |
| |
| --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". |
| |
| --enable-sram-sky130[=<path>] |
| This 3rd party library contains pre-compiled and verified |
| memory blocks from the OpenRAM open source memory compiler. |
| It is disabled by default due to the length of time |
| required to install, but it is recommended if you will be |
| using SRAM in a design. |
| |
| --enable-osu-t12-sky130[=<path>] |
| This 3rd party library is a set of open-source digital |
| standard cells at 12 track pitch height. |
| |
| --enable-osu-t15-sky130[=<path>] |
| This 3rd party library is a set of open-source digital |
| standard cells at 15 track pitch height. |
| |
| --enable-osu-t18-sky130[=<path>] |
| This 3rd party library is a set of open-source digital |
| standard cells at 18 track pitch height. |
| |
| --prefix=<path> |
| This redirects the installation destination. open_pdks |
| installs into ${prefix}/share/pdk/, and by default |
| ${prefix} is /usr/local. Be advised that Makefile |
| automatically adds the "share/" path regardless. To |
| install in a different location, pass these (optional) |
| environment variables to "make": |
| |
| SHARED_PDKS_PATH = <path> |
| Overrides ${prefix}/share/pdk/ and installs |
| directly into the specified <path> |
| |
| DESTDIR = <path> |
| When defined, then "make install" installs into |
| the specified <path>. However, all references |
| to files in the PDK will reference SHARED_PDKS_PATH. |
| Use DESTDIR if you want to install into a temporary |
| location such as a git repository or tarball that |
| will eventually be distributed and placed at |
| SHARED_PDKS_PATH on the target systems. |
| |
| 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. |
| |