1- # Welcome to OpenROAD Flow's documentation!
1+ # Welcome to the OpenROAD Flow Scripts documentation!
22
33The OpenROAD ("Foundations and Realization of Open, Accessible Design")
44project was launched in June 2018 within the DARPA IDEA program. OpenROAD
55aims to bring down the barriers of cost, expertise and unpredictability that
66currently block designers' access to hardware implementation in advanced
77technologies. The project team (Qualcomm, Arm and multiple universities and
88partners, led by UC San Diego) is developing a fully autonomous, open-source
9- tool chain for digital SoC layout generation, focusing on
10- the RTL-to-GDSII phase of system-on-chip design. Thus,
11- OpenROAD holistically attacks the multiple facets of today's design cost
12- crisis: engineering resources, design tool licenses, project schedule,
13- and risk.
9+ tool chain for digital SoC layout generation, focusing on the RTL-to-GDSII
10+ phase of system-on-chip design. Thus, OpenROAD holistically attacks the
11+ multiple facets of today's design cost crisis: engineering resources,
12+ design tool licenses, project schedule, and risk.
1413
1514The IDEA program targets no-human-in-loop (NHIL) design, with 24-hour
1615turnaround time and zero loss of power-performance-area (PPA) design quality.
1716
18- The NHIL target requires tools to adapt and auto-tune successfully to flow
19- completion, without (or, with minimal) human intervention. Machine
17+ The NHIL target requires tools to adapt and auto-tune successfully to
18+ flow completion, without (or, with minimal) human intervention. Machine
2019intelligence augments human expertise through efficient modeling and
21- prediction of flow and optimization outcomes throughout the synthesis, placement
22- and routing process. This is complemented by development of metrics
23- and machine learning infrastructure.
20+ prediction of flow and optimization outcomes throughout the synthesis,
21+ placement and routing process. This is complemented by development of
22+ metrics and machine learning infrastructure.
2423
2524The 24-hour runtime target implies that problems must be strategically
2625decomposed throughout the design process, with clustered and partitioned
@@ -31,34 +30,160 @@ resources. Decomposition that enables parallel and distributed search over
3130cloud resources incurs a quality-of-results loss, but this is subsequently
3231recovered through improved flow predictability and enhanced optimization.
3332
34- For a technical description of the OpenROAD flow, please refer to our DAC-2019 paper:
35- [ Toward an Open-Source Digital Flow: First Learnings from the OpenROAD Project] ( https://vlsicad.ucsd.edu/Publications/Conferences/371/c371.pdf ) .
36- The paper is also available from [ ACM Digital Library] ( https://dl.acm.org/doi/10.1145/3316781.3326334 ) .
37- Other publications and presentations are
38- linked [ here] ( https://theopenroadproject.org/publications/ ) .
33+ Learn more about the project at our website and our resources page
34+ [ here] ( https://theopenroadproject.org/resources/ ) .
3935
40- ## Code of conduct
36+ ## Getting Started with OpenROAD Flow Scripts
4137
42- Please read our code of conduct [ here] ( ./contrib/CODE_OF_CONDUCT.md ) .
38+ OpenROAD Flow is a full RTL-to-GDS flow built entirely on open-source tools.
39+ The project aims for automated, no-human-in-the-loop digital circuit design
40+ with 24-hour turnaround time.
41+
42+ ### Setup
43+
44+ #### System Requirements
45+
46+ To build the binaries and run ` gcd ` through the flow:
47+
48+ - Minimum: 1 CPU core and 8GB RAM.
49+ - Recommend: 4 CPU cores and 16GB of RAM.
50+
51+ > ** Note** ` gcd ` is a small design, and thus requires less computational power.
52+ > Larger designs may require better hardware.
53+
54+ #### Build or Installing ORFS Dependencies
55+
56+ We support three major ways of installation:
57+
58+ - [ Docker] ( ./user/BuildWithDocker.md )
59+ - [ Pre-built Binaries] ( ./user/BuildWithPrebuilt.md )
60+ - [ Local Installation] ( ./user/BuildLocally.md )
61+
62+ You may also choose use the build script to customise your build process.
63+ See more in the next section.
64+
65+ ##### Build Command and options
66+
67+ ``` shell
68+ ./build_openroad.sh --help
69+ ```
70+
71+ Options for ` ./build_openroad.sh ` script
72+ | Argument | Description |
73+ | -------------------------------| ---------------------------------------------------------------------------------------|
74+ | ` -h ` or ` --help ` | Print help message. |
75+ | ` -o ` or ` --local ` | Build locally instead of building a Docker image. |
76+ | ` -l ` or ` --latest ` | Use the head of branch --or_branch or 'master' by default for tools/OpenROAD. |
77+ | ` --or_branch BRANCH_NAME ` | Use the head of branch BRANCH for tools/OpenROAD. |
78+ | ` --or_repo REPO_URL ` | Use a fork at REPO-URL (https/ssh) for tools/OpenROAD. |
79+ | ` --no_init ` | Skip initializing submodules. |
80+ | ` -t N ` or ` --threads N ` | Use N cpus when compiling software. |
81+ | ` -n ` or ` --nice ` | Nice all jobs. Use all cpus unless ` --threads ` is also given, then use N threads. |
82+ | ` --yosys-args-overwrite ` | Do not use default flags set by this scrip during Yosys compilation. |
83+ | ` --yosys-args STRING ` | Aditional compilation flags for Yosys compilation. |
84+ | ` --openroad-args-overwrite ` | Do not use default flags set by this script during OpenROAD app compilation. |
85+ | ` --openroad-args STRING ` | Aditional compilation flags for OpenROAD app compilation. |
86+ | ` --lsoracle-enable ` | Compile LSOracle. Disable by default as it is not currently used on the flow. |
87+ | ` --lsoracle-args-overwrite ` | Do not use default flags set by this scrip during LSOracle compilation. |
88+ | ` --lsoracle-args STRING ` | Aditional compilation flags for LSOracle compilation. |
89+ | ` --install-path PATH ` | Path to install tools. Default is ` ${INSTALL_PATH} ` . |
90+ | ` --clean ` | Call git clean interactively before compile. Useful to remove old build files. |
91+ | ` --clean-force ` | Call git clean before compile. WARNING: this option will not ask for confirmation. Useful to remove old build files. |
92+ | ` -c ` or ` --copy-platforms ` | Only applicable for docker builds. Copy platforms to inside docker image. |
93+ | ` --docker-args-overwrite ` | Only applicable for docker builds. Do not use default flags set by this script for Docker builds. |
94+ | ` --docker-args STRING ` | Only applicable for docker builds. Additional compilation flags for Docker build. |
95+
96+
97+ ### Running a Design
98+
99+ Sample design configurations are available in the ` designs ` directory.
100+ You can select a design using either of the following methods:
101+
102+ 1 . The flow
103+ [ Makefile] ( https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/blob/master/flow/Makefile )
104+ contains a list of sample design configurations at the top of the
105+ file. Uncomment the respective line to select the design.
106+ 2 . Specify the design using the shell environment. For example:
107+
108+ ``` shell
109+ make DESIGN_CONFIG=./designs/nangate45/swerv/config.mk
110+ # or
111+ export DESIGN_CONFIG=./designs/nangate45/swerv/config.mk
112+ make
113+ ```
114+
115+ By default, the ` gcd ` design is selected using the
116+ ` nangate45 ` platform. The resulting GDS will be available at
117+ ` flow/results/nangate45/gcd/6_final.gds ` . The flow should take only a few
118+ minutes to produce a GDS for this design. We recommend implementing this
119+ design first to validate your flow and tool setup.
120+
121+ ### Design exploration and automatic parameter tuning
122+
123+ AutoTuner is an automatic parameter tuning framework capable of performing
124+ automatic parameter tuning framework for commercial and academic RTL-to-GDS
125+ flows. The two main functionalities that AutoTuner provides are:
43126
44- ## Documentation
127+ - Automatic hyperparameter tuning framework for OpenROAD-flow-scripts
128+ - Parametric sweeping experiments for OpenROAD-flow-scripts
45129
46- The OpenROAD Project has two releases:
130+ > ** Tip ** : Refer to the detailed [ instructions here ] ( ./user/InstructionsForAutoTuner.md ) for AutoTuner.
47131
48- ### [ Application ] ( https://github.com/The-OpenROAD-Project/OpenROAD )
132+ ### Adding a Design
49133
50- The application is a standalone binary capable of performing RTL-to-GDSII SoC design,
51- from logic synthesis and floorplanning through detailed routing with metal fill insertion,
52- signoff parasitic extraction and timing analysis.
134+ To add a new design to the ` flow ` directory, refer to the document [ here] ( ./user/AddingNewDesign.md ) .
53135
54- See documentation for the application [ here ] ( https://openroad.readthedocs.io/en/latest/ ) .
136+ ### Platforms
55137
56- ### [ Flow ] ( https://github.com/The- OpenROAD-Project/OpenROAD- flow-scripts)
138+ OpenROAD-flow-scripts supports Verilog to GDS for the following open platforms:
57139
58- The flow is a set of integrated scripts that allow for RTL-to-GDSII flow
59- using open-source tools.
140+ - ASAP7
141+ - Nangate45 / FreePDK45
142+ - SKY130
60143
61- See documentation for the flow [ here] ( user/GettingStarted.md ) .
144+ These platforms have a permissive license which allows us to
145+ redistribute the PDK and OpenROAD platform-specific files. The platform
146+ files and license(s) are located in ` platforms/{platform} ` .
147+
148+ OpenROAD-flow-scripts also supports the following commercial platforms:
149+
150+ - GF12
151+ - TSMC65LP
152+
153+ The PDKs and platform-specific files for these kits cannot be provided
154+ due to NDA restrictions. However, if you are able to access these
155+ platforms, you can create the necessary platform-specific files
156+ yourself.
157+
158+ Once the platform is set up, you can create a new design configuration with
159+ information about the design. See sample configurations in the ` design `
160+ directory.
161+ Refer to the [ Flow variables] ( ./user/FlowVariables.md ) document for details on how to use
162+ environment variables in OpenROAD-flow-scripts to configure platform and design specific parameters.
163+
164+ #### Adding a Platform
165+
166+ Refer to the [ platform bring up] ( ./contrib/PlatformBringUp.md ) documentation
167+ to set up a new platform for OpenROAD-flow-scripts.
168+
169+ ### Implement the Design
170+
171+ Run ` make ` to perform Verilog to GDS. The final output will be located
172+ at ` flow/results/{platform}/{design_name}/6_final.gds `
173+
174+ ### Miscellaneous
175+
176+ #### Smoke-test harness for top-level Verilog designs
177+
178+ 1 . Drop your Verilog files into ` designs/src/harness `
179+ 2 . Start the workflow:
180+
181+ > ** TIP!**
182+ > Start with a very small submodule in your design that has only a few pins.
183+
184+ ``` shell
185+ make DESIGN_NAME=TopLevelName DESIGN_CONFIG=$( pwd) /designs/harness.mk
186+ ```
62187
63188## How to contribute
64189
@@ -73,18 +198,23 @@ can use OpenROAD as the infrastructure for your tools in the
73198
74199We maintain the following channels for communication:
75200
76- - Project homepage and news: < https://theopenroadproject.org >
77- - Twitter: < https://twitter.com/OpenROAD_EDA >
78- - Issues and bugs:
79- - OpenROAD Flow: < https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/issues >
80- - OpenROAD with OpenROAD Flow Scripts: < https://github.com/The-OpenROAD-Project/OpenROAD/issues/ >
81- - Discussions:
82- - OpenROAD Flow: < https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/discussions >
83- 201+ - Project homepage and news: < https://theopenroadproject.org >
202+ - Twitter: < https://twitter.com/OpenROAD_EDA >
203+ - Issues and bugs:
204+ - OpenROAD Flow: < https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/issues >
205+ - OpenROAD with OpenROAD Flow Scripts: < https://github.com/The-OpenROAD-Project/OpenROAD/issues/ >
206+ - Discussions:
207+ - OpenROAD Flow: < https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/discussions >
208+ 84209
85210See also our [ FAQs] ( user/FAQS.md ) .
86211
212+ ## Code of conduct
213+
214+ Please read our code of conduct [ here] ( ./contrib/CODE_OF_CONDUCT.md ) .
215+
87216## Site Map
88217
89218``` {tableofcontents}
219+
90220```
0 commit comments