For a while now Google has been collaborating with SkyWater Technology to create what many refer to as free and open source silicon (FOSSi). The project gained traction in 2020 and is continuing to gain momentum.
The proclaimed goal is to bring chip design to the masses and enable everyone from academia, industry and makers to create their own computer chips. If this plan succeeds it would mean a considerable shift in the chip industry which traditionally is very secretive and dominated by just a few big corporations and their partners, connected by a opaque web of interdependencies. (Surely Google counts as the underdog in comparison *cough*)

From my perspective Google appears to be the main driver with respect to research and academia, whereas SkyWater Technology is the foundry in the background which provides the technology and manufacturing capabilities.

In the following I will try to get a little closer with the SkyWater PDK and it’s 130 nm CMOS process called SKY130. Just a brief overview of how to get started.

What is a PDK? Why do we need open source PDKs?

A PDK is short for Physical Design Kit and consists of a set of files which are needed for the physical design of a chip. This includes the information required for drawing a layout (transistors etc.), performing DRC, extracting parasitics (e.g. resistance and capacitance of metal wires), doing LVS checking, extracting SPICE netlists for simulation, and much more. There is no standard that defines which files need to be included in a PDK. Different foundries provide different files, using different formats, organized in different ways. A PDK is mostly specific to the combination of one semiconductor technology and one (proprietary) tool chain. The OpenPDKs project, which will be used later on, is trying to bring some order to this situation.

Now, the issue with PDKs for most of the history of silicon chip design and manufacturing is that they are not openly available to just any ordinary Joe. Not at all, in no way. Usually multiple NDAs are required to get access to the PDK of a foundry technology, or just small parts thereof. In a way this is understandable, since the ability to manufacture silicon chips and the knowledge required for it is extremely valuable, not only in economic terms. Things can get political when considering the strategic value of having access to modern semiconductor technology, e.g. in the aviation and defense sector.

That being said, it should be clear that open source chip design requires an open source PDK. Only then all the advantages of open source software, whatever they may be, will have a chance to enter the realm of silicon.

The SKY130 Process Node

The name SKY130 refers to a process node provided by SkyWater.
SKY130 is a 180 nm – 130 nm technology originally developed by Cypress.

The layer stackup of SKY130 consists of:

  • 5 metal layers (layers metal1 – metal5, or just mm1 – mm5 for short), plus a local interconnect layer
  • Polysilicon resistor
  • Inductor capability
  • SONOS shrunken cell capability, used to implement flash cells
  • support for on-chip 10 V regulated power supply
SkyWater SKY130 layer stackup

The SkyWater PDK project page offers detailed information about the general layer stackup as well as a layer reference and a mask reference of the SKY130 process node.

For ditigal design SKY130 provides a number of standard cell libraries:

  • sky130_fd_sc_hs (high speed)
  • sky130_fd_sc_ms (medium speed)
  • sky130_fd_sc_ls (low speed)
  • sky130_fd_sc_lp (low power)
  • sky130_fd_sc_hd (high density)
  • sky130_fd_sc_hdll (high density, low leakage)
  • sky130_fd_sc_hvl (high voltage)

There are two more libraries for special purposes:

  • sky130_fd_io (IO and peripheral cells)
  • sky130_fd_pr (primitive cells)

Installing SKY130

Now to the important part, explaining how to setup the SKY130 technology for use with the backend tools. The primary goal here is to enable Magic to open the final layout of a design and take a look at the chip, or just to inspect the existing standard cell layouts.

$> cd $(HOME)
$> git clone https://github.com/google/skywater-pdk
$> cd skywater-pdk
$> git submodule init libraries/*/latest
$> git submodule update
$> make -j$(nproc)
$> make timing -j$(nproc)

First the PDK sources are required. Download them from Github, check out the latest standard cell libraries and run make. This will generate various files for the standard cell libraries and fill the subfolders with SPICE netlists, abstraction models and other stuff.
Then run make timing to perform timing characterization of the standard cells, which is needed to do timing analysis later on. This step takes a while, so I really recommend passing the -j option to make, to speed things up by building in parallel.

After the build is finished, we have the PDK files ready, but it may not be clear what to do next. From the frontend perspective it should now be possible to implement a chip with this PDK, including placement and routing. Of course additional software will be required to do so.
However, to do the thing I was interested in, which is to perform and inspect layouts, a different step is needed. That’s because the Magic layout tool cannot work with the PDK files directly, but needs to generate some tool specific files.

This is where OpenPDKs comes into play. Broken down into one sentence, OpenPDKs aims to automatically set up the open source tool chain which is present on your system to work with any PDK. Right now “any” means just the SkyWater PDK (see above “What is a PDK?”).

To set up OpenPDKs with SkyWater SKY130 continue as follows:

$> cd $(HOME)
$> git clone https://github.com/RTimothyEdwards/open_pdks
$> cd open_pdks
$> ./configure --enable-sky130-pdk=$(HOME)/skywater-pdk/libraries --with-sky130-local-path=/opt/open_pdks_sky130
$> make -j$(nproc)
$> make install

First get the sources from Github. Run the configure script and set the two options required to point towards the SkyWater PDK sources (--enable-sky130-pdk) and towards the local install path (--with-sky130-local-path). I chose the install path under /opt, but that’s just my preferred location for all EDA software.
Then run make and make install as usual.

Note that at the moment of writing this article (January 2021) the documentation on how to configure the SkyWater PDK source path is outdated in many places. The option--with-sky130-source=<path> given in the official readme will cause an error when running make (something in ../common/foundry_install.py).
The name of the option has changed and is now called --enable-sky130-pdk=<path>.

The last missing piece is to get an up-to-date version of Magic. It is best to build Magic from sources, since the packages provided by Ubuntu or other distributions are mostly quite outdated. An old Magic can cause the OpenPDK build to fail.

Error: Magic version 8.3.107 is required by this techfile, but this version of magic is 8.3.102.

According to the official OpenPDK install instructions, at least Magic 8.3.25 is required.

The OpenPDK technology files then need to be linked to the right place so Magic can find them. I have my Magic installation under /opt/magic-8.3 and use the following command to make the SKY130 technology available to Magic.

$> ln -s /opt/sky130/sky130A/lib.tech/magic/* /opt/magic-8.3/lib/magic/sys

Alright, time to start Magic and see what we got.

$> /opt/magic-8.3/bin/magic
Magic in all it’s Tcl/Tk beauty

After starting Magic, navigate to Options > Tech Manager. By default the technology is set to minimum. Click on the technology name (red text) and select sky130A from the dropdown list.

Magic Tech Manager

Alternatively you can specify the technology as a command line argument when running Magic.

$> magic -T sky130A

Now let’s take a look at one of the SkyWater standard cells. Click File > Read GDS, navigate to the SkyWater PDK folder and down to skywater-pdk/libraries/sky130_fd_sc_hd/latest/cells/nand2. Select the file called sky130_fd_sc_hd__nand2_1.gds and open it.

The NAND2 cell from library sky130_fd_sc_hd

Ever wondered what a 2:1 multiplexer looks like in real life? Real life naturally refers to the transistor level.

The MUX2 cell from library sky130_fd_sc_hvl

Summary

The SkyWater PDK (plus related projects) is the latest attempt to bring open source to chip design. Similar attempts to bring chip design to a broad engineering community had been done in the past. But nothing ever came as close to a completely free and open source flow. It really looks like very soon it will be possible to bring a design to silicon using only free and open source tools.

Coming at a time at which the open RISC-V ISA is gaining momentum as well, we may be closer than ever to achieve that goal.

In the near future I plan to take look at some of the frontend and backend tools which can be used with the SkyWater PDK.

I hope that this little summary proves to be helpful to some people.


References:

  1. https://github.com/google/skywater-pdk
  2. https://www.fossi-foundation.org/
  3. https://github.com/RTimothyEdwards/open_pdks
  4. http://www.opencircuitdesign.com/open_pdks/install.html
  5. http://www.opencircuitdesign.com/magic/index.html
  6. https://lootr5858.wordpress.com/2020/10/06/magic-vlsi-skywater-pdk-local-installation-guide/