# OpenLane Architecture ![A diagram showing the general stages of the OpenLane flow as a series of blocks](../_static/flow_v1.png) ## OpenLane Design Stages OpenLane flow consists of several stages. By default all flow steps are run in sequence. Each stage may consist of multiple sub-stages. OpenLane can also be run interactively as shown [here][25]. 1. **Synthesis** 1. `yosys/abc` - Perform RTL synthesis and technology mapping. 2. `OpenSTA` - Performs static timing analysis on the resulting netlist to generate timing reports 2. **Floorplaning** 1. `init_fp` - Defines the core area for the macro as well as the rows (used for placement) and the tracks (used for routing) 2. `ioplacer` - Places the macro input and output ports 3. `pdngen` - Generates the power distribution network 4. `tapcell` - Inserts welltap and decap cells in the floorplan 3. **Placement** 1. `RePLace` - Performs global placement 2. `Resizer` - Performs optional optimizations on the design 3. `OpenDP` - Perfroms detailed placement to legalize the globally placed components 4. **CTS** 1. `TritonCTS` - Synthesizes the clock distribution network (the clock tree) 5. **Routing** 1. `FastRoute` - Performs global routing to generate a guide file for the detailed router 2. `TritonRoute` - Performs detailed routing 3. `OpenRCX` - Performs SPEF extraction 6. **Tapeout** 1. `Magic` - Streams out the final GDSII layout file from the routed def 2. `KLayout` - Streams out the final GDSII layout file from the routed def as a back-up 7. **Signoff** 1. `Magic` - Performs DRC Checks & Antenna Checks 2. `KLayout` - Performs DRC Checks 3. `Netgen` - Performs LVS Checks 4. `CVC` - Performs Circuit Validity Checks OpenLane integrated several key open source tools over the execution stages: - RTL Synthesis, Technology Mapping, and Formal Verification : [yosys + abc][4] - Static Timing Analysis: [OpenSTA][8] - Floor Planning: [init_fp][5], [ioPlacer][6], [pdn][16] and [tapcell][7] - Placement: [RePLace][9] (Global), [Resizer][15] and [OpenPhySyn][28] (formerly), and [OpenDP][10] (Detailed) - Clock Tree Synthesis: [TritonCTS][11] - Fill Insertion: [OpenDP/filler_placement][10] - Routing: [FastRoute][12] or [CU-GR][36] (formerly) and [TritonRoute][13] (Detailed) or [DR-CU][36] - SPEF Extraction: [OpenRCX][37] or [SPEF-Extractor][27] (formerly) - GDSII Streaming out: [Magic][14] and [KLayout][35] - DRC Checks: [Magic][14] and [KLayout][35] - LVS check: [Netgen][22] - Antenna Checks: [Magic][14] - Circuit Validity Checker: [CVC][31] > Everything in Floorplanning through Routing is done using [OpenROAD](https://github.com/The-OpenROAD-Project/OpenROAD) and its various sub-utilities. ## OpenLane Output All output run data is placed by default under ./designs/design_name/runs. Each flow cycle will output a timestamp-marked folder containing the following file structure: ``` ├── config.json/config.tcl ├── runs │ ├── │ │ ├── config.tcl │ │ ├── {logs, reports, tmp} │ │ │ ├── cts │ │ │ ├── signoff │ │ │ ├── floorplan │ │ │ ├── placement │ │ │ ├── routing │ │ │ └── synthesis │ │ ├── results │ │ │ ├── final │ │ │ ├── cts │ │ │ ├── signoff │ │ │ ├── floorplan │ │ │ ├── placement │ │ │ ├── routing │ │ │ └── synthesis ``` To delete all generated runs under all designs: `make clean_runs` [1]: ../for_developers/docker.md [4]: https://github.com/YosysHQ/yosys [5]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/ifp [6]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/ppl [7]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/tap [8]: https://github.com/The-OpenROAD-Project/OpenSTA [9]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/replace [10]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/dpl [11]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/cts [12]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/grt [13]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/TritonRoute [14]: https://github.com/RTimothyEdwards/magic [15]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/rsz [16]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/pdn [18]: https://github.com/RTimothyEdwards/qflow/blob/master/src/addspacers.c [19]: https://github.com/The-OpenROAD-Project/ [20]: https://github.com/git-lfs/git-lfs/wiki/Installation [21]: /usage/exploration_script.md [22]: https://github.com/RTimothyEdwards/netgen [24]: ./for_developers/pdk_structure.md [25]: ./reference/interactive_mode.md [26]: ./usage/chip_integration.md [27]: https://github.com/AUCOHL/spef-extractor [28]: https://github.com/scale-lab/OpenPhySyn [29]: ./usage/hardening_macros.md [30]: ./usage/building_the_pdk.md [31]: https://github.com/d-m-bailey/cvc [32]: ./for_developers/code_contribution.md [33]: ./authors.md [34]: ./reference/openlane_commands.md [35]: https://github.com/KLayout/klayout [36]: https://github.com/cuhk-eda/cu-gr [37]: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/src/rcx [38]: ./for_developers/issue_regression_tests.md [39]: https://github.com/cuhk-eda/dr-cu