This repository contains the files and documentation for production of an ASIC via the Google and Skywater shuttle program.
Site: https://github.com/google/skywater-pdk
The specific design and purpose for this ASIC is still a work in progress.
These comments are based on installations on Ubuntu (most recent - 20.10).
Most of these tools are hosted by ‘efabless’. For more information, see: http://opencircuitdesign.com
For a useful quick-start script that installs most of the tools required, see: https://github.com/mabrains/sky130_ubuntu_setup
The Open-PDKs project aims to collect the technology data for open and freely available Process Development Kits for ASIC development.
It contains the technology and configuration files required to design an ASICS for a particular fabrication process.
Download with:
git clone git://opencircuitdesign.com/open_pdks
Documentation on how to proceed installing the Skywater SDK, as well as how to configure the various tools, can be found in the document: open_pdks/sky130/README
This repository contans the foundry source files for the Skywater sky130 130nm process.
Download with
git clone https://github.com/google/skywater-pdk
Installation details can be found in the open_pdks/sky130/README document, but the process is:
cd skywater-pdk
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
make timing
The Skywater PDK uses the Conda Package Management Software to manage it’s environment and software dependencies.
Configuration
./configure \
--with-sky130-source=$BASEDIR/skywater-pdk \
--with-sky130-local-path=$BASEDIR/pdks
Magic allows VLSI designs to be drawn by hand and exported to GDS format. It does a lot more though, and can be used to check designs created by other means against design rule constraints (DRC)
Magic version 8.3 appears to be required. The version packaged for Ubuntu is version 8.2.157 and gives errors during the install, so DON’T do the following for now:
sudo apt install magic
Instead, download and install Magic from source:
# Dependancies (there may be more)
sudo apt install csh
sudo apt install tcl-dev tk-dev
git clone https://github.com/RTimothyEdwards/magic.git
cd magic
./configure
make
sudo make install
This install the binary, and files:
/usr/local/bin/magic (binary) /usr/local/lib/magic/ (lots of stuff, including tutorial files)
Magic is installed, but it still needs to be configured to use the Sky150 process and design rules. This is done in the next step.
The tutorial files can be copied to the current directory with
cp /usr/local/lib/magic/tutorials .
Magic appears to work better when enabled with the ‘DR’ option, which is required for plotting to SVG. The following can be added to ‘~/.bashrc’ to enable this
alias magic='magic -d XR $@'
Some additional configurations have been added to the file ‘magic/settings.tcl’ which can be loaded into Magic at the command prompt with:
source magic/settings.tcl
Continue to follow the instructions in: open_pdks/sky130/README
At the top level:
BASEDIR='/put/the/base/directory/of/your/working/files/here'
./configure \
--with-sky130-source=$BASEDIR/skywater-sdk \
--with-sky130-local-path=$BASEDIR/pdks
cd sky130
make
make local-install
This will install the SDK files into
$BASEDIR/pdks/sky130A
Configure the startup script for magic.
ln -s $BASEDIR/pdks/sky130A/libs.tech/magic/sky130A.magicrc ~/.magicrc
Magic can then be able to be started with:
magic
When starting up, look for the following line in the console (about 10 lines down), which indicated that the Magic configuration file from Open_PDKs has been read correctly for the Sky130 PDK.
Sourcing design .magicrc for technology sky130A ...
Electric is similar to Magic. Originally written in ‘C’ it has been ported to Java and is available on other operating systems.
It also provides a 3D visualization option.
To install
sudo apt install electric
VLSI Layout software written in KDE
To install
sudo apt install klayout
Tool to produce a a visualisation of VLSI design in a 3D layout, viewable in a web browser.
Available here: https://github.com/s-holst/GDS2WebGL
# In parent directory
git clone https://github.com/s-holst/GDS2WebGL
pip3 install gdspy
pip3 install pyclipper
pip3 install mapbox_earcut
cd mawsonlakes-skywater-shuttle/doc
cp ../../GDS2WebGL/index.html .
cp ../../GDS2WebGL/bundle.js .
python3 ../../GDS2WebGL/gds2webgl.py -i ../gds/open-source-hardware.gds -o open-source-hardware.html
Then open a browser to ‘open-source-hardware.html’
chromium-browser open-source-hardware.html
Tool to create logos for ASICs. Turns SVGs or PNGs into GDS2 and LEF files for use on top metal of ASICs for artwork.
Available here: https://github.com/s-holst/GDS2WebGL
This tool is also a useful example for processing files with a Makefile.
A template SoC for Google SKY130 free shuttles.
Available here: https://github.com/efabless/caravel
git clone https://github.com/efabless/caravel.git
Container software used to distribute the build and testing tools for the efabless/caravel architecture, including any local modifications.
NOTE: Please be aware that ‘docker’ is not available for Ubuntu 20.10. Currently looking for a suitable workaround.
Install with the instructions from Docker website: https://docs.docker.com/engine/install/ubuntu/
Use the packages from Ubuntu “20.04” (focal), eg.
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
See: https://github.com/PaulSchulz/sky130_pschulz_xx_hd
A font library has been created, so that text can be rendered in the silicon wafer production process.
The Makefile has been configured with the following targets:
make TARGET
TARGET | Description |
---|---|
doc | Produces HTML documentation in ‘doc’ |
The following was done prior to ‘open_pdks’ being used to install the ‘sky130’ PDK. It required that Magic be installed, and that ‘open_pdks’ be download. The VLSI technology layers are available, but there are no Design Rule Checks being performed in this case.
magic -T ../open_pdks/sky130/magic/sky130gds.tech gds/open-source-hardware.gds
or, to load the sky130 technology file separately, at the prompt in the magic console, use:
tech load ../open_pdks/sky130/magic/sky130gds.tech
In this example, we are creating and editing a feature in the ‘metal 1’ layer. Details of the constraints can be found in the documentation: https://skywater-pdk.readthedocs.io/en/latest/rules/assumptions.html#minimum-critical-dimensions
From the documentation, for the ‘metal 1’ layer
Parameter | Size | Comment |
---|---|---|
Feature Size | 0.14 um | |
Space Size | 0.14 um | Space between features |
Minimum Area | 0.083 um^2 | Equivalent to 0.28 um x 0.28 um |
If these parameters are not satisfied, and if the Design Rules have been configured in Magic, it will flag errors and mark the features that need to be fixed.
Create a local directory, and copy the Magic tutorial files
mkdir magic-tutorial
cd magic-tutorial
cp /usr/local/lib/magic/tutorial/* .
The tutorials can be read with the ‘evince’ viewer
evince /usr/local/lib/magic/doc/introduction.ps
These tutorials are for Magic Version 7, and we have 8.3 installed, but the general details are the same.
A font for the SkyWater 130nm process has been created, called “font-sky130”, as well as some logos, for use in the Google + SkyWater process.
The font has been put into its own library in github, and has been included in this project as a submodule.
To install elsewere:
git clone https://github.com/PaulSchulz/sky130_ml_xx_hd
and add the path to Magic, using
% addpath path/to/sky130_ml_xx_hd/mag
Initially, font characters were based on a 7 high x 3 wide grid of 150x150nm ‘pixels’ (In magic, these are represented by a 3x3 grid, where the grid size was 0.05um). The larger characters (‘M’ and ‘W’) were based on a 7x7 grid, and the smaller characters (‘i’ and ‘l’) were based on narrower grid with width 2.
The design rules for the minimum area require that the dots on the ‘i’ and ‘j’ are 2x2 in size, and that the ‘i’ has ‘serifs’.
The cells are stored as ‘cell_xx’, where xx is the ASCII(Unicode) code for the particular character.
Explicitly
This can be run via the Makefile, with ‘make’
The following currently needs to be run manually, until I figure out how to atomate this process. There is an issue with requiring the screen when positioning the glyphs.
magic magic/skywater.mag source tcl/skywater.tcl gds write gds/skywater magic magic/babbage.mag source tcl/babbage.tcl gds write gds/babbage magic magic/the-elements.mag source tcl/the-elements.tcl gds write gds/the-elements magic magic/war-of-the-worlds.mag source tcl/war-of-the-worlds.tcl gds write gds/war-of-the-worlds
Then in magic
Install the caravel code by cloning the efebless/caravel github repository.
git clone https://github.com/efabless/caravel.git
The README.md defines the initial setup. Other than the Management System on a Chip (SoC), the customizable area has been preconfigured with a 32-bit up counter.
To build and run test locally, there is a ‘docker’ image available which can be used.