EFIC-175 Update documentation (#44)
* Update index.rst
* Update index.rst
* Update index.rst
* Update index.rst
* Add pics
* Update index.rst
* Update index.rst
* Add wrapper pic
* Update index.rst
diff --git a/docs/source/_static/empty.png b/docs/source/_static/empty.png
new file mode 100644
index 0000000..4b7ae67
--- /dev/null
+++ b/docs/source/_static/empty.png
Binary files differ
diff --git a/docs/source/_static/layout.png b/docs/source/_static/layout.png
new file mode 100644
index 0000000..71ffad0
--- /dev/null
+++ b/docs/source/_static/layout.png
Binary files differ
diff --git a/docs/source/_static/option1.png b/docs/source/_static/option1.png
new file mode 100644
index 0000000..a88350b
--- /dev/null
+++ b/docs/source/_static/option1.png
Binary files differ
diff --git a/docs/source/_static/option2.png b/docs/source/_static/option2.png
new file mode 100644
index 0000000..5c604d6
--- /dev/null
+++ b/docs/source/_static/option2.png
Binary files differ
diff --git a/docs/source/_static/option3.png b/docs/source/_static/option3.png
new file mode 100644
index 0000000..7e346b3
--- /dev/null
+++ b/docs/source/_static/option3.png
Binary files differ
diff --git a/docs/source/_static/pitch.png b/docs/source/_static/pitch.png
new file mode 100644
index 0000000..2efc7a9
--- /dev/null
+++ b/docs/source/_static/pitch.png
Binary files differ
diff --git a/docs/source/index.rst b/docs/source/index.rst
index fa3f806..bde1986 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -32,10 +32,12 @@
- `Repo Integration <#repo-integration>`__
- `Verilog Integration <#verilog-integration>`__
+ - `Layout Integration <#layout-integration>`__
- `Running Full Chip Simulation <#running-full-chip-simulation>`__
-- `Hardening the User Project Macro using
- Openlane <#hardening-the-user-project-macro-using-openlane>`__
+- `User Project Wrapper Requirements <#user-project-wrapper-requirements>`__
+- `Hardening the User Project using
+ Openlane <#hardening-the-user-project-using-openlane>`__
- `Checklist for Open-MPW
Submission <#checklist-for-open-mpw-submission>`__
@@ -101,7 +103,7 @@
Caravel files are kept separate from the user project by having caravel
as submodule. The submodule commit should point to the latest of
-caravel/caravel-lite master. The following files should have a symbolic
+caravel/caravel-lite master/main branch. The following files should have a symbolic
link to `caravel's <https://github.com/efabless/caravel.git>`__
corresponding files:
@@ -154,6 +156,21 @@
</p>
+
+Layout Integration
+-------------------
+
+The caravel layout is pre-designed with an empty golden wrapper in the user space. You only need to provide us with a valid ``user_project_wrapper`` GDS file. And, as part of the tapeout process, your hardened ``user_project_wrapper`` will be inserted into a vanilla caravel layout to get the final layout shipped for fabrication.
+
+.. raw:: html
+
+ <p align="center">
+ <img src="./_static/layout.png" width="80%" height="80%">
+ </p>
+
+To make sure that this integration process goes smoothly without having any DRC or LVS issues, your hardened ``user_project_wrapper`` must adhere to a number of requirements listed at `User Project Wrapper Requirements <#user-project-wrapper-requirements>`__ .
+
+
Building the PDK
================
@@ -162,7 +179,7 @@
- Build the pdk natively.
Make sure you have `Magic VLSI Layout Tool <http://opencircuitdesign.com/magic/index.html>`__ installed on your machine before building the pdk.
-The pdk build is tested with magic version `8.3.209`.
+The pdk build is tested with magic version ``8.3.209``.
.. code:: bash
@@ -199,7 +216,7 @@
This will pull a docker image with the needed tools installed.
-Then, run the RTL and GL simulation by
+Then, run the RTL simulation by
.. code:: bash
@@ -207,16 +224,69 @@
export CARAVEL_ROOT=$(pwd)/caravel
# specify simulation mode: RTL/GL
export SIM=RTL
- # Run IO ports testbench, make verify-io_ports
- make verify-<dv-pattern>
+ # Run RTL simulation on IO ports testbench, make verify-io_ports
+ make verify-<testbench-name>
-The verilog test-benches are under this directory
-`verilog/dv <https://github.com/efabless/caravel_user_project/tree/main/verilog/dv>`__. For more information on setting up the
+Once you have the physical implementation done and you have the gate-level netlists ready, it is crucial to run full gate-level simulations to make sure that your design works as intended after running the physical implementation.
+
+Run the gate-level simulation by:
+
+.. code:: bash
+
+ export PDK_ROOT=<pdk-installation-path>
+ export CARAVEL_ROOT=$(pwd)/caravel
+ # specify simulation mode: RTL/GL
+ export SIM=GL
+ # Run RTL simulation on IO ports testbench, make verify-io_ports
+ make verify-<testbench-name>
+
+
+This sample project comes with four example testbenches to test the IO port connection, wishbone interface, and logic analyzer. The test-benches are under the
+`verilog/dv <https://github.com/efabless/caravel_user_project/tree/main/verilog/dv>`__ directory. For more information on setting up the
simulation environment and the available testbenches for this sample
project, refer to `README <https://github.com/efabless/caravel_user_project/blob/main/verilog/dv/README.md>`__.
-Hardening the User Project Macro using Openlane
-===============================================
+
+User Project Wrapper Requirements
+=================================
+
+Your hardened ``user_project_wrapper`` must match the `golden user_project_wrapper <https://github.com/efabless/caravel/blob/master/gds/user_project_wrapper_empty.gds.gz>`__ in the following:
+
+- Area ``(2.920um x 3.520um)``
+- Top module name ``"user_project_wrapper"``
+- Pin Placement
+- Pin Sizes
+- Core Rings Width and Offset
+- PDN Vertical and Horizontal Straps Width
+
+
+.. raw:: html
+
+ <p align="center">
+ <img src="./_static/empty.png" width="40%" height="40%">
+ </p>
+
+
+These fixed configurations are specified `here <https://github.com/efabless/caravel/blob/master/openlane/user_project_wrapper_empty/fixed_wrapper_cfgs.tcl>`__ .
+
+However, you are allowed to change the following if you need to:
+
+- PDN Vertical and Horizontal Pitch & Offset
+
+.. raw:: html
+
+ <p align="center">
+ <img src="./_static/pitch.png" width="30%" height="30%">
+ </p>
+
+To make sure that you adhere to these requirements, we run an exclusive-or (XOR) check between your hardened ``user_project_wrapper`` GDS and the golden wrapper GDS after processing both layouts to include only the boundary (pins and core rings). This check is done as part of the `mpw-precheck <https://github.com/efabless/mpw_precheck>`__ tool.
+
+
+Hardening the User Project using OpenLane
+==========================================
+
+OpenLane Installation
+---------------------
You will need to install openlane by running the following
@@ -232,16 +302,45 @@
For detailed instructions on the openlane and the pdk installation refer
to
-`README <https://github.com/efabless/openlane/blob/master/README.md>`__.
+`README <https://github.com/The-OpenROAD-Project/OpenLane#setting-up-openlane>`__.
+
+Hardening Options
+-----------------
There are three options for hardening the user project macro using
openlane:
-1. Hardening the user macro, then embedding it in the wrapper
-2. Flattening the user macro with the wrapper.
-3. Placing multiple macros in the wrapper along with standard cells on the top level.
++--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
+| Option 1 | Option 2 | Option 3 |
++--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
+| Hardening the user macro(s) first, then inserting it in the | Flattening the user macro(s) with the | Placing multiple macros in the wrapper |
+| user project wrapper with no standard cells on the top level | user_project_wrapper | along with standard cells on the top level |
++==============================================================+============================================+============================================+
+| |pic1| | |pic2| | |pic3| |
+| | | |
++--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
+| ex: |link1| | | ex: |link2| |
++--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
-For more details on hardening the user project macro using openlane, refer to `README <https://github.com/efabless/caravel/blob/master/openlane/README.rst>`__.
+.. |link1| replace:: `caravel_user_project <https://github.com/efabless/caravel_user_project>`__
+
+.. |link2| replace:: `caravel_ibex <https://github.com/efabless/caravel_ibex>`__
+
+
+.. |pic1| image:: ./_static/option1.png
+ :width: 48%
+
+.. |pic2| image:: ./_static/option2.png
+ :width: 140%
+
+.. |pic3| image:: ./_static/option3.png
+ :width: 72%
+
+For more details on hardening macros using openlane, refer to `README <https://github.com/The-OpenROAD-Project/OpenLane/blob/master/docs/source/hardening_macros.md>`__.
+
+
+Running OpenLane
+-----------------
For this sample project, we went for the first option where the user
macro is hardened first, then it is inserted in the user project
@@ -250,13 +349,13 @@
.. raw:: html
<p align="center">
- <img src="./_static/wrapper.png" width="50%" height="50%">
+ <img src="./_static/wrapper.png" width="30%" height="30%">
</p>
.. raw:: html
</p>
-
+
To reproduce hardening this project, run the following:
.. code:: bash
@@ -267,10 +366,12 @@
make user_project_wrapper
+For more information on the openlane flow, check `README <https://github.com/The-OpenROAD-Project/OpenLane#readme>`__.
+
Running MPW Precheck Locally
=================================
-You can install the precheck by running
+You can install the `mpw-precheck <https://github.com/efabless/mpw_precheck>`__ by running
.. code:: bash