Skip to content
Snippets Groups Projects
README.md 2.65 KiB
Newer Older
Priyanka Raina's avatar
Priyanka Raina committed
# Overview
This repository runs the following pipecleaner designs through a digital physical design flow using Design Compiler and Innovus with the SkyWater open source 130nm PDK.
*  GcdUnit - computes the greatest common divisor function, consists of 100-200 gates
Priyanka Raina's avatar
Priyanka Raina committed
*  SramUnit - uses an OpenRAM generated SRAM, plus a simple counter that supplies addresses to it
Priyanka Raina's avatar
Priyanka Raina committed

# Setup
Priyanka Raina's avatar
Priyanka Raina committed
To run this flow, please install the following dependencies first in this order:
Priyanka Raina's avatar
Priyanka Raina committed

Priyanka Raina's avatar
Priyanka Raina committed
1. `skywater-pdk` 
Priyanka Raina's avatar
Priyanka Raina committed

Get SkyWater PDK:
```
git clone https://github.com/google/skywater-pdk.git
cd skywater-pdk
```
The cell libraries are in submodules that need to be checked out independently:
```
git submodule update --init libraries/sky130_fd_sc_hd/latest
Priyanka Raina's avatar
Priyanka Raina committed
git submodule update --init libraries/sky130_fd_pr/latest
Priyanka Raina's avatar
Priyanka Raina committed
git submodule update --init libraries/sky130_fd_io/latest
Priyanka Raina's avatar
Priyanka Raina committed
```
Priyanka Raina's avatar
Priyanka Raina committed
To create the .lib timing files:
Priyanka Raina's avatar
Priyanka Raina committed
```
make timing
Priyanka Raina's avatar
Priyanka Raina committed
```

2. `open_pdks`

```
git clone https://github.com/RTimothyEdwards/open_pdks.git
cd open_pdks
Priyanka Raina's avatar
Priyanka Raina committed
./configure --enable-sky130-pdk=`realpath ../skywater-pdk/libraries` --with-sky130-local-path=`realpath ../PDKS`
make
make install
cd .. 
```

3. `mflowgen` - This is a tool to create ASIC design flows in a modular fashion.
Priyanka Raina's avatar
Priyanka Raina committed
Follow the setup steps at https://mflowgen.readthedocs.io/en/latest/quick-start.html.
Priyanka Raina's avatar
Priyanka Raina committed

4. `skywater-130nm-adk` - This repo has some scripts that convert the SkyWater PDK into the format that mflowgen expects. Follow the setup steps at https://code.stanford.edu/ee272/skywater-130nm-adk. The files that are in `skywater-130nm-adk/view-standard` are the ones that mflowgen will use. (This is configured in the `design/construct.py` file for each pipecleaner.)
Priyanka Raina's avatar
Priyanka Raina committed

# Using the Pipecleaners

Priyanka Raina's avatar
Priyanka Raina committed
First, make sure you update various install paths in the `setup.bashrc` file. Then source it.
Priyanka Raina's avatar
Priyanka Raina committed
```
bash
source setup.bashrc
```
Priyanka Raina's avatar
Priyanka Raina committed

Next, enter into the build directory of the pipecleaner you want to run, and run the following:
Priyanka Raina's avatar
Priyanka Raina committed
```
Priyanka Raina's avatar
Priyanka Raina committed
cd GcdUnit/build
Priyanka Raina's avatar
Priyanka Raina committed
mflowgen run --design ../design/
Priyanka Raina's avatar
Priyanka Raina committed
```
Priyanka Raina's avatar
Priyanka Raina committed

Priyanka Raina's avatar
Priyanka Raina committed
Now, if you do `make status` you will see the status of all the steps in the flow. Use the following make targets to run and debug each step. For example to run step number N do:
```
make N
```
Priyanka Raina's avatar
Priyanka Raina committed

# Helpful make Targets
*  `make list` - list all the nodes in the graphs and their corresponding step number
*  `make status` - list the build status of all the steps
*  `make graph` - generates a PDF of the graph
*  `make N` - runs step N
Priyanka Raina's avatar
Priyanka Raina committed
*  `make debug-N` - pulls up GUI for the appropriate tool for debugging (at the output of step N)
Priyanka Raina's avatar
Priyanka Raina committed
*  `make clean-N` - removes the folder for step N, and sets the status of steps [N,) to build
*  `make clean-all` - removes folders for all the steps
*  `make runtimes` - lists the runtime for each step