blob: 33b53c31aa889fbcfa0dc8c5b3ed422d60d885c3 [file] [log] [blame]
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -07001.. raw:: html
2
3 <!---
4 # SPDX-FileCopyrightText: 2020 Efabless Corporation
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18 # SPDX-License-Identifier: Apache-2.0
19 -->
20
21Caravel User Project
22====================
23
manarabdelatyd0e7afb2021-04-22 00:21:13 +020024|License| |User CI| |Caravel Build|
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -070025
26Table of contents
27=================
28
29- `Overview <#overview>`__
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -070030- `Quickstart <#quickstart>`__
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -070031- `Caravel Integration <#caravel-integration>`__
32
33 - `Repo Integration <#repo-integration>`__
34 - `Verilog Integration <#verilog-integration>`__
Jeff DiCorpoc26d59e2022-11-18 18:55:27 -080035 - `GPIO Configuration <#gpio-configuration>`__
Manar4ec8cba2021-10-04 10:26:10 -050036 - `Layout Integration <#layout-integration>`__
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -070037
38- `Running Full Chip Simulation <#running-full-chip-simulation>`__
Manar4ec8cba2021-10-04 10:26:10 -050039- `User Project Wrapper Requirements <#user-project-wrapper-requirements>`__
40- `Hardening the User Project using
41 Openlane <#hardening-the-user-project-using-openlane>`__
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -070042- `Checklist for Open-MPW
43 Submission <#checklist-for-open-mpw-submission>`__
44
45Overview
46========
47
48This repo contains a sample user project that utilizes the
49`caravel <https://github.com/efabless/caravel.git>`__ chip user space.
50The user project is a simple counter that showcases how to make use of
51`caravel's <https://github.com/efabless/caravel.git>`__ user space
52utilities like IO pads, logic analyzer probes, and wishbone port. The
53repo also demonstrates the recommended structure for the open-mpw
54shuttle projects.
55
manarabdelatyd8dd0102021-04-30 08:40:52 +020056Prerequisites
57=============
58
Marwan Abbas0914d042022-04-06 19:06:34 +020059- Docker: `Linux <https://hub.docker.com/search?q=&type=edition&offering=community&operating_system=linux&utm_source=docker&utm_medium=webreferral&utm_campaign=dd-smartbutton&utm_location=header>`_ || `Windows <https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe?utm_source=docker&utm_medium=webreferral&utm_campaign=dd-smartbutton&utm_location=header>`_ || `Mac with Intel Chip <https://desktop.docker.com/mac/main/amd64/Docker.dmg?utm_source=docker&utm_medium=webreferral&utm_campaign=dd-smartbutton&utm_location=header>`_ || `Mac with M1 Chip <https://desktop.docker.com/mac/main/arm64/Docker.dmg?utm_source=docker&utm_medium=webreferral&utm_campaign=dd-smartbutton&utm_location=header>`_
60
61- Python 3.6+ with PIP
manarabdelatyd8dd0102021-04-30 08:40:52 +020062
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -070063
64Quickstart
65===========
66
67---------------------
68Starting your project
69---------------------
70
71#. To start the project you first need to create a new repository based on the `caravel_user_project <https://github.com/efabless/caravel_user_project/>`_ template and make sure your repo is public and includes a README.
72
73 * Follow https://github.com/efabless/caravel_user_project/generate to create a new repository.
74 * Clone the reposity using the following command:
75
Kareem Faridf421b8e2022-11-15 18:38:45 +000076 .. code:: bash
77
78 git clone <your github repo URL>
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -070079
80#. To setup your local environment run:
81
82 .. code:: bash
83
84 cd <project_name> # project_name is the name of your repo
85
86 mkdir dependencies
87
88 export OPENLANE_ROOT=$(pwd)/dependencies/openlane_src # you need to export this whenever you start a new shell
89
90 export PDK_ROOT=$(pwd)/dependencies/pdks # you need to export this whenever you start a new shell
91
92 # export the PDK variant depending on your shuttle, if you don't know leave it to the default
Jeff DiCorpob7640592022-10-27 18:31:04 -070093
94 # for sky130 MPW shuttles....
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -070095 export PDK=sky130B
Jeff DiCorpob7640592022-10-27 18:31:04 -070096
97 # for the gf180 GFMPW shuttles...
98 export PDK=gf180mcuC
99
100
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -0700101
102 make setup
103
Kareem Faridf421b8e2022-11-15 18:38:45 +0000104* This command will setup your environment by installing the following
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -0700105
Kareem Faridf421b8e2022-11-15 18:38:45 +0000106 - caravel_lite (a lite version of caravel)
107 - management core for simulation
108 - openlane to harden your design
109 - pdk
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -0700110
111
112#. Now you can start hardening your design
113
114 * To start hardening you project you need
115 - RTL verilog model for your design for OpenLane to harden
116 - A subdirectory for each macro in your project under ``openlane/`` directory, each subdirectory should include openlane configuration files for the macro
117
Kareem Faridf421b8e2022-11-15 18:38:45 +0000118 .. code:: bash
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -0700119
Kareem Faridf421b8e2022-11-15 18:38:45 +0000120 make <module_name>
121 ..
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -0700122
Kareem Farid128c5252022-11-15 18:45:41 +0000123 For an example of hardening a project please refer to `Hardening the User Project using OpenLane`_. .
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -0700124
125#. Integrate modules into the user_project_wrapper
126
127 * Change the environment variables ``VERILOG_FILES_BLACKBOX``, ``EXTRA_LEFS`` and ``EXTRA_GDS_FILES`` in ``openlane/user_project_wrapper/config.tcl`` to point to your module
128 * Instantiate your module(s) in ``verilog/rtl/user_project_wrapper.v``
129 * Harden the user_project_wrapper including your module(s), using this command:
130
131 .. code:: bash
132
133 make user_project_wrapper
134
135#. Run simulation on your design
136
137 * You need to include your rtl/gl/gl+sdf files in ``verilog/includes/includes.<rtl/gl/gl+sdf>.caravel_user_project``
138
139 **NOTE:** You shouldn't include the files inside the verilog code
140
141 .. code:: bash
142
143 # you can then run RTL simulations using
144 make verify-<testbench-name>-rtl
145
146 # OR GL simulation using
147 make verify-<testbench-name>-gl
148
149 # OR for GL+SDF simulation using
150 # sdf annotated simulation is slow
151 make verify-<testbench-name>-gl-sdf
152
153 # for example
154 make verify-io_ports-rtl
Kareem Farid1c1b8942022-11-15 20:59:10 +0200155
156#. Run opensta on your design
157
158 * Extract spefs for ``user_project_wrapper`` and macros inside it:
159
160 .. code:: bash
161
162 make extract-parasitics
163
164 * Create spef mapping file that maps instance names to spef files:
165
166 .. code:: bash
167
168 make create-spef-mapping
169
170 * Run opensta:
171
172 .. code:: bash
173
174 make caravel-sta
175
176 **NOTE:** To update timing scripts run ``make setup-timing-scripts``
Jeff DiCorpo43dc6d92022-10-27 18:00:26 -0700177
178#. Run the precheck locally
179
180 .. code:: bash
181
182 make precheck
183 make run-precheck
184
185#. You are done! now go to https://efabless.com/open_shuttle_program/ to submit your project!
186
187
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700188Caravel Integration
189===================
190
Kareem Faride3b5c472022-11-15 16:35:21 +0000191----------------
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700192Repo Integration
193----------------
194
195Caravel files are kept separate from the user project by having caravel
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200196as submodule. The submodule commit should point to the latest of
Manar4ec8cba2021-10-04 10:26:10 -0500197caravel/caravel-lite master/main branch. The following files should have a symbolic
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200198link to `caravel's <https://github.com/efabless/caravel.git>`__
199corresponding files:
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700200
manarabdelaty0c03d602021-09-20 11:42:16 +0200201- `Openlane Makefile <../../openlane/Makefile>`__: This provides an easier
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200202 way for running openlane to harden your macros. Refer to `Hardening
203 the User Project Macro using
Marwan Abbasca9b6922022-01-26 20:27:03 +0200204 Openlane <#hardening-the-user-project-using-openlane>`__. Also,
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200205 the makefile retains the openlane summary reports under the signoff
206 directory.
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700207
manarabdelaty0c03d602021-09-20 11:42:16 +0200208- `Pin order <../../openlane/user_project_wrapper/pin_order.cfg>`__ file for
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700209 the user wrapper: The hardened user project wrapper macro must have
210 the same pin order specified in caravel's repo. Failing to adhere to
211 the same order will fail the gds integration of the macro with
212 caravel's back-end.
213
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200214The symbolic links are automatically set when you run ``make install``.
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700215
Kareem Faride3b5c472022-11-15 16:35:21 +0000216-------------------
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700217Verilog Integration
218-------------------
219
220You need to create a wrapper around your macro that adheres to the
221template at
Manarf088db12021-09-20 12:13:04 +0200222`user\_project\_wrapper <https://github.com/efabless/caravel/blob/master/verilog/rtl/__user_project_wrapper.v>`__.
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700223The wrapper top module must be named ``user_project_wrapper`` and must
Manarf088db12021-09-20 12:13:04 +0200224have the same input and output ports as the golden wrapper `template <https://github.com/efabless/caravel/blob/master/verilog/rtl/__user_project_wrapper.v>`__. The wrapper gives access to the
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700225user space utilities provided by caravel like IO ports, logic analyzer
226probes, and wishbone bus connection to the management SoC.
227
228For this sample project, the user macro makes use of:
229
230- The IO ports for displaying the count register values on the IO pads.
231
232- The LA probes for supplying an optional reset and clock signals and
233 for setting an initial value for the count register.
234
matt venn4acd8b72021-04-27 11:34:42 +0200235- The wishbone port for reading/writing the count value through the
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700236 management SoC.
237
manarabdelatyfbd955f2021-09-20 11:59:53 +0200238Refer to `user\_project\_wrapper <../../verilog/rtl/user_project_wrapper.v>`__
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700239for more information.
240
241.. raw:: html
242
243 <p align="center">
244 <img src="./_static/counter_32.png" width="50%" height="50%">
245 </p>
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200246
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700247.. raw:: html
248
249 </p>
250
Jeff DiCorpof90c9b42022-11-18 18:11:10 -0800251-------------------
252GPIO Configuration
253-------------------
254
255You are required to specify the power-on default configuration for each GPIO in Caravel. The default configuration provide the state the GPIO will come up on power up. The configuration can be changed by the management SoC during firmware execution.
256
257Configuration settings define whether the GPIO is configured to connect to the user project area or the managment SoC. They also determine whether IOs are inputs or outputs, digital or analog, as well as whether pull-up or pull-down resistors are configured for inputs.
258
259GPIOs are configured by assigning predefined values for each IO in the file `verilog/rtl/user_defines.v <https://github.com/efabless/caravel_user_project/blob/main/verilog/rtl/user_defines.v>`_ in your project.
260
Jeff DiCorpoadbb3312022-11-18 18:26:58 -0800261You need to assigned configuration values for GPIO[5] thru GPIO[37].
262
263GPIO[0] thru GPIO[4] are preset and cannot be changed.
Jeff DiCorpof90c9b42022-11-18 18:11:10 -0800264
265The following values are redefined for assigning to GPIOs.
266
Jeff DiCorpo6ef5d792022-11-18 19:32:44 -0800267
268- GPIO_MODE_MGMT_STD_INPUT_NOPULL
269- GPIO_MODE_MGMT_STD_INPUT_PULLDOWN
270- GPIO_MODE_MGMT_STD_INPUT_PULLUP
271- GPIO_MODE_MGMT_STD_OUTPUT
272- GPIO_MODE_MGMT_STD_BIDIRECTIONAL
273- GPIO_MODE_MGMT_STD_ANALOG
274
275- GPIO_MODE_USER_STD_INPUT_NOPULL
276- GPIO_MODE_USER_STD_INPUT_PULLDOWN
277- GPIO_MODE_USER_STD_INPUT_PULLUP
278- GPIO_MODE_USER_STD_OUTPUT
279- GPIO_MODE_USER_STD_BIDIRECTIONAL
280- GPIO_MODE_USER_STD_OUT_MONITORED
281- GPIO_MODE_USER_STD_ANALOG
282
Jeff DiCorpof90c9b42022-11-18 18:11:10 -0800283
Jeff DiCorpoadbb3312022-11-18 18:26:58 -0800284MPW_Prececk includes a check to confirm each GPIO is assigned a valid value.
Manar4ec8cba2021-10-04 10:26:10 -0500285
Kareem Faride3b5c472022-11-15 16:35:21 +0000286-------------------
Manar4ec8cba2021-10-04 10:26:10 -0500287Layout Integration
288-------------------
289
290The 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.
291
292.. raw:: html
293
294 <p align="center">
295 <img src="./_static/layout.png" width="80%" height="80%">
296 </p>
297
298To 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>`__ .
299
300
manarabdelatyd8dd0102021-04-30 08:40:52 +0200301Running Full Chip Simulation
302============================
303
304First, you will need to install the simulation environment, by
305
306.. code:: bash
307
308 make simenv
309
310This will pull a docker image with the needed tools installed.
311
Manar4ec8cba2021-10-04 10:26:10 -0500312Then, run the RTL simulation by
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200313
314.. code:: bash
315
316 export PDK_ROOT=<pdk-installation-path>
Marwan Abbas0914d042022-04-06 19:06:34 +0200317 make verify-<testbench-name>-rtl
Marwan Abbase631e372022-07-01 02:34:39 -0700318
319 # For example
320 make verify-io_ports-rtl
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200321
Manar4ec8cba2021-10-04 10:26:10 -0500322Once 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.
323
324Run the gate-level simulation by:
325
326.. code:: bash
327
328 export PDK_ROOT=<pdk-installation-path>
Marwan Abbas0914d042022-04-06 19:06:34 +0200329 make verify-<testbench-name>-gl
Manar4ec8cba2021-10-04 10:26:10 -0500330
Marwan Abbase631e372022-07-01 02:34:39 -0700331 # For example
332 make verify-io_ports-gl
333
334To make sure that your design is timing clean, one way is running sdf annotated gate-level simulation
335Run the sdf annotated gate-level simulation by:
336
337.. code:: bash
338
339 export PDK_ROOT=<pdk-installation-path>
340 make verify-<testbench-name>-gl-sdf
341
342 # For example
343 make verify-io_ports-gl-sdf
Manar4ec8cba2021-10-04 10:26:10 -0500344
345This sample project comes with four example testbenches to test the IO port connection, wishbone interface, and logic analyzer. The test-benches are under the
346`verilog/dv <https://github.com/efabless/caravel_user_project/tree/main/verilog/dv>`__ directory. For more information on setting up the
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200347simulation environment and the available testbenches for this sample
Manarffaf9842021-04-30 22:55:37 +0200348project, refer to `README <https://github.com/efabless/caravel_user_project/blob/main/verilog/dv/README.md>`__.
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700349
Manar4ec8cba2021-10-04 10:26:10 -0500350
351User Project Wrapper Requirements
352=================================
353
354Your 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:
355
356- Area ``(2.920um x 3.520um)``
357- Top module name ``"user_project_wrapper"``
358- Pin Placement
359- Pin Sizes
360- Core Rings Width and Offset
361- PDN Vertical and Horizontal Straps Width
362
363
364.. raw:: html
365
366 <p align="center">
367 <img src="./_static/empty.png" width="40%" height="40%">
368 </p>
369
Marwan Abbasca9b6922022-01-26 20:27:03 +0200370You are allowed to change the following if you need to:
Manar4ec8cba2021-10-04 10:26:10 -0500371
372- PDN Vertical and Horizontal Pitch & Offset
373
374.. raw:: html
375
376 <p align="center">
377 <img src="./_static/pitch.png" width="30%" height="30%">
378 </p>
379
380To 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.
381
382
383Hardening the User Project using OpenLane
384==========================================
385
Kareem Faride3b5c472022-11-15 16:35:21 +0000386---------------------
Manar4ec8cba2021-10-04 10:26:10 -0500387OpenLane Installation
388---------------------
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700389
manarabdelatyd8dd0102021-04-30 08:40:52 +0200390You will need to install openlane by running the following
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200391
392.. code:: bash
393
manarabdelaty0218c0f2021-04-29 18:31:49 +0200394 export OPENLANE_ROOT=<openlane-installation-path>
manarabdelatyfbd955f2021-09-20 11:59:53 +0200395
396 # you can optionally specify the openlane tag to use
397 # by running: export OPENLANE_TAG=<openlane-tag>
398 # if you do not set the tag, it defaults to the last verfied tag tested for this project
399
manarabdelaty0218c0f2021-04-29 18:31:49 +0200400 make openlane
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200401
manarabdelatyfbd955f2021-09-20 11:59:53 +0200402For detailed instructions on the openlane and the pdk installation refer
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200403to
Manar4ec8cba2021-10-04 10:26:10 -0500404`README <https://github.com/The-OpenROAD-Project/OpenLane#setting-up-openlane>`__.
405
Kareem Faride3b5c472022-11-15 16:35:21 +0000406-----------------
Manar4ec8cba2021-10-04 10:26:10 -0500407Hardening Options
408-----------------
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700409
manarabdelatyfbd955f2021-09-20 11:59:53 +0200410There are three options for hardening the user project macro using
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700411openlane:
412
Manar4ec8cba2021-10-04 10:26:10 -0500413+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
414| Option 1 | Option 2 | Option 3 |
415+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
416| Hardening the user macro(s) first, then inserting it in the | Flattening the user macro(s) with the | Placing multiple macros in the wrapper |
417| user project wrapper with no standard cells on the top level | user_project_wrapper | along with standard cells on the top level |
418+==============================================================+============================================+============================================+
419| |pic1| | |pic2| | |pic3| |
420| | | |
421+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
422| ex: |link1| | | ex: |link2| |
423+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700424
Manar4ec8cba2021-10-04 10:26:10 -0500425.. |link1| replace:: `caravel_user_project <https://github.com/efabless/caravel_user_project>`__
426
427.. |link2| replace:: `caravel_ibex <https://github.com/efabless/caravel_ibex>`__
428
429
430.. |pic1| image:: ./_static/option1.png
431 :width: 48%
432
433.. |pic2| image:: ./_static/option2.png
434 :width: 140%
435
436.. |pic3| image:: ./_static/option3.png
437 :width: 72%
438
439For more details on hardening macros using openlane, refer to `README <https://github.com/The-OpenROAD-Project/OpenLane/blob/master/docs/source/hardening_macros.md>`__.
440
Kareem Faride3b5c472022-11-15 16:35:21 +0000441-----------------
Manar4ec8cba2021-10-04 10:26:10 -0500442Running OpenLane
443-----------------
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700444
445For this sample project, we went for the first option where the user
446macro is hardened first, then it is inserted in the user project
manarabdelatyfbd955f2021-09-20 11:59:53 +0200447wrapper without having any standard cells on the top level.
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700448
449.. raw:: html
450
451 <p align="center">
Manar4ec8cba2021-10-04 10:26:10 -0500452 <img src="./_static/wrapper.png" width="30%" height="30%">
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700453 </p>
454
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200455.. raw:: html
456
457 </p>
Manar4ec8cba2021-10-04 10:26:10 -0500458
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700459To reproduce hardening this project, run the following:
460
461.. code:: bash
462
Marwan Abbasfa8d7ec2022-02-03 09:50:05 -0800463 # DO NOT cd into openlane
464
manarabdelaty0218c0f2021-04-29 18:31:49 +0200465 # Run openlane to harden user_proj_example
466 make user_proj_example
467 # Run openlane to harden user_project_wrapper
468 make user_project_wrapper
469
470
Manar4ec8cba2021-10-04 10:26:10 -0500471For more information on the openlane flow, check `README <https://github.com/The-OpenROAD-Project/OpenLane#readme>`__.
472
Manarf088db12021-09-20 12:13:04 +0200473Running MPW Precheck Locally
manarabdelaty0218c0f2021-04-29 18:31:49 +0200474=================================
475
Manar4ec8cba2021-10-04 10:26:10 -0500476You can install the `mpw-precheck <https://github.com/efabless/mpw_precheck>`__ by running
manarabdelaty0218c0f2021-04-29 18:31:49 +0200477
478.. code:: bash
479
480 # By default, this install the precheck in your home directory
481 # To change the installtion path, run "export PRECHECK_ROOT=<precheck installation path>"
482 make precheck
483
484This will clone the precheck repo and pull the latest precheck docker image.
485
486
487Then, you can run the precheck by running
488
489.. code:: bash
490
491 make run-precheck
492
493This will run all the precheck checks on your project and will produce the logs under the ``checks`` directory.
494
495
496Other Miscellaneous Targets
497============================
498
499The makefile provides a number of useful that targets that can run LVS, DRC, and XOR checks on your hardened design outside of openlane's flow.
500
Manarf088db12021-09-20 12:13:04 +0200501Run ``make help`` to display available targets.
manarabdelaty0218c0f2021-04-29 18:31:49 +0200502
manarabdelaty0c03d602021-09-20 11:42:16 +0200503Run lvs on the mag view,
manarabdelaty0218c0f2021-04-29 18:31:49 +0200504
505.. code:: bash
506
507 make lvs-<macro_name>
508
509Run lvs on the gds,
510
511.. code:: bash
512
513 make lvs-gds-<macro_name>
514
515Run lvs on the maglef,
516
517.. code:: bash
518
519 make lvs-maglef-<macro_name>
520
521Run drc using magic,
522
523.. code:: bash
524
525 make drc-<macro_name>
526
527Run antenna check using magic,
528
529.. code:: bash
530
531 make antenna-<macro_name>
532
533Run XOR check,
534
535.. code:: bash
536
537 make xor-wrapper
Marwan Abbasfa8d7ec2022-02-03 09:50:05 -0800538
539
manarabdelaty0218c0f2021-04-29 18:31:49 +0200540
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700541
542Checklist for Open-MPW Submission
543=================================
544
Manarf088db12021-09-20 12:13:04 +0200545- ✔️ The project repo adheres to the same directory structure in this
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700546 repo.
Manarf088db12021-09-20 12:13:04 +0200547- ✔️ The project repo contain info.yaml at the project root.
548- ✔️ Top level macro is named ``user_project_wrapper``.
549- ✔️ Full Chip Simulation passes for RTL and GL (gate-level)
550- ✔️ The hardened Macros are LVS and DRC clean
Jeff DiCorpo9e950432021-10-24 10:09:39 -0700551- ✔️ The project contains a gate-level netlist for ``user_project_wrapper`` at verilog/gl/user_project_wrapper.v
Manarf088db12021-09-20 12:13:04 +0200552- ✔️ The hardened ``user_project_wrapper`` adheres to the same pin
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700553 order specified at
554 `pin\_order <https://github.com/efabless/caravel/blob/master/openlane/user_project_wrapper_empty/pin_order.cfg>`__
Manarf088db12021-09-20 12:13:04 +0200555- ✔️ The hardened ``user_project_wrapper`` adheres to the fixed wrapper configuration specified at `fixed_wrapper_cfgs <https://github.com/efabless/caravel/blob/master/openlane/user_project_wrapper_empty/fixed_wrapper_cfgs.tcl>`__
556- ✔️ XOR check passes with zero total difference.
557- ✔️ Openlane summary reports are retained under ./signoff/
558- ✔️ The design passes the `mpw-precheck <https://github.com/efabless/mpw_precheck>`__
Mohamed Kassem6f2fcd22021-04-19 10:14:19 -0700559
560.. |License| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
561 :target: https://opensource.org/licenses/Apache-2.0
manarabdelatyd0e7afb2021-04-22 00:21:13 +0200562.. |User CI| image:: https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml/badge.svg
563 :target: https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml
564.. |Caravel Build| image:: https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml/badge.svg
Mohamed Kassem9ae1f072021-04-23 12:19:31 -0700565 :target: https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml