# Repositories and versions to use

## skywater-pdk:

Please stick to version `v0.0.0-303-g3d7617a`
(commit hash: `3d7617a1acb92ea883539bcf22a632d6361a5de4`)
```
git clone https://github.com/google/skywater-pdk.git
cd skywater-pdk
git checkout v0.0.0-303-g3d7617a
git submodule update --init libraries/sky130_fd_sc_hd/latest
git submodule update --init libraries/sky130_fd_sc_hvl/latest
git submodule update --init libraries/sky130_fd_sc_hs/latest
git submodule update --init libraries/sky130_fd_sc_ms/latest
git submodule update --init libraries/sky130_fd_sc_ls/latest
git submodule update --init libraries/sky130_fd_sc_hdll/latest
git submodule update --init libraries/sky130_fd_io/latest
make timing


```

## open_pdks:

Please stick to the `mpw-one-a` tag.
```
git clone https://github.com/RTimothyEdwards/open_pdks.git -b mpw-one-a
```

## OpenLane:

Please stick to the `mpw-one-a` tag.
```
git clone https://github.com/efabless/openlane.git -b mpw-one-a
```
Note that the `mpw-one-a` tag is equivalent to the `rc5` tag. Also, note that
running `make` inside the openlane directory will automatically grab the right
versions of `open_pdks` and `skywater-pdk` as listed above and install them to
PDK_ROOT.

For example,

```
export PDK_ROOT=$HOME/pdks
cd openlane
make
```

## Caravel: 

Please stick to the `mpw-one-a` tag.
```
git clone https://github.com/efabless/caravel.git -b mpw-one-a
```

## Notes

- If you have already successfully hardened your blocks and have a clean
  `user_project_wrapper`, you don't have to recreate it and can just reuse it.
  No changes have been made to the user project area or to the tools that
  require you to reharden your design(s).

- If you prefer to re-generate your blocks (using OpenLane), you can refer to
  this [page][1].

- **IMPORTANT**. Do not forget to run `make uncompress -j4` in the caravel root
  directory before you start working. Likewise, before you commit and push your
  changes back, run `make compress -j4`.

- If you already have a clean working tree in a previously cloned repository from
  those listed above, what you need to do is:
  ```
  git pull
  git checkout tag
  ```

[1]: ./openlane/README.md
