.. raw:: html

   <!---
   # SPDX-FileCopyrightText: 2020 Efabless Corporation
   #
   # Licensed under the Apache License, Version 2.0 (the "License");
   # you may not use this file except in compliance with the License.
   # You may obtain a copy of the License at
   #
   #      http://www.apache.org/licenses/LICENSE-2.0
   #
   # Unless required by applicable law or agreed to in writing, software
   # distributed under the License is distributed on an "AS IS" BASIS,
   # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   # See the License for the specific language governing permissions and
   # limitations under the License.
   #
   # SPDX-License-Identifier: Apache-2.0
   -->

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
`1.0.85 <https://github.com/RTimothyEdwards/open_pdks/tree/1.0.85>`__
tag.

::

    git clone https://github.com/RTimothyEdwards/open_pdks.git -b 1.0.85

OpenLane
--------

Please stick to the
`mpw-one-b <https://github.com/efabless/openlane/tree/mpw-one-b>`__ tag.

::

    git clone https://github.com/efabless/openlane.git -b mpw-one-b

.. note::

        Note that the ``mpw-one-b`` tag is equivalent to the ``rc6`` 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-b`` tag.

::

    git clone https://github.com/efabless/caravel.git -b mpw-one-b

Open\_mpw\_precheck
-------------------

Please run the offline
`precheck <https://github.com/efabless/open_mpw_precheck>`__:

::

    git clone https://github.com/efabless/open_mpw_precheck.git

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 `README <https://github.com/efabless/caravel/blob/develop/openlane/README.rst>`__.

-  | **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``


