@@ -13,15 +13,16 @@ minimizes the overhead of invoking each tool in the flow.
1313
1414### Tool File Organization
1515
16- Every tool follows the following file structure.
16+ Every tool follows the following file structure, grouping sources,
17+ tests and headers together.
1718
1819```
19- CMakelists.txt - add_subdirectory's src/CMakelists.txt
20- src/ - sources and private headers
21- src/CMakelists.txt
22- include/<toolname> / - exported headers
23- test/
24- test/regression
20+ src/ CMakelists.txt - add_subdirectory's src/CMakelists.txt
21+ src/tool/src/ - sources and private headers
22+ src/tool/src/ CMakelists.txt
23+ src/tool/ include/tool / - exported headers
24+ src/tool/ test/
25+ src/tool/ test/regression
2526```
2627
2728OpenROAD repository
@@ -37,27 +38,36 @@ include/openroad/Error.hh - Error reporting API
3738
3839```
3940
40- Submodule repos in /src (note these are NOT in src/module)
41+ Some tools such as OpenDB are submodules, which are simply
42+ subdirectories in /src that are pointers to the git submodule.
43+ They are intentionally not segregated into a separate /module.
4144
42- ```
43- OpenDB
44- OpenSTA
45- replace
46- ioPlacer
47- FastRoute
48- TritonMacroPlace
49- OpenRCX
50- flute3
51- eigen
52- ```
45+ The use of submodules for new code integrated into OpenROAD is
46+ strongly discouraged. Submodules make changes to the underlying
47+ infrastructure (OpenDB, OpenSTA etc) difficult to propagate across the
48+ dependent submodule repositories. Submodules: just say no.
49+
50+ Where external/third party code that a tool depends on should be
51+ placed depends on the nature of the dependency.
5352
54- Submodules that are shared by multiple tools are owned by OpenROAD
55- so that there are not redundant source trees and compiles .
53+ * Libraries - code packaged as a linkable library.
54+ Examples are tcl, boost, zlib, eigen, lemon, spdlog .
5655
57- Each tool submodule cmake file builds a library that is linked by the
58- OpenROAD application. The tools should not define a ` main() ` function.
59- If the tool is tcl only and has no c++ code it does not need to have
60- a cmake file.
56+ These should be installed in the build environment and linked by
57+ OpenRoad. Document these dependencies in the top level README.md
58+ file. The Dockerfile should be updated to illustrate where to find the
59+ library and how to install it. Adding libraries to the build
60+ enviroment requires coodination with the sys admins for the continuous
61+ integration hosts to make sure the environments include the
62+ dependency. Advanced notification should also be given to the
63+ development team so their private build environments can be updated.
64+
65+ *
66+
67+ Each tool cmake file builds a library that is linked by the OpenROAD
68+ application. The tools should not define a ` main() ` function. If the
69+ tool is tcl only and has no c++ code it does not need to have a cmake
70+ file.
6171
6272None of the tools have commands to read or write LEF, DEF, Verilog or
6373database files. These functions are all provided by the OpenROAD
@@ -82,11 +92,6 @@ fine for internals, but not for user visible commands. Commands have
8292an implicit argument of the current OpenROAD class object. Functions
8393to get individual tools from the OpenROAD object can be defined.
8494
85- The use of submodules for new code integrated into OpenROAD is
86- strongly discouraged. Submodules make changes to the underlying
87- infrastructure (OpenDB, OpenSTA etc) difficult to propagate across the
88- dependent submodule repositories. Submodules: just say no.
89-
9095### Initialization (c++ tools only)
9196
9297The OpenRoad class only has pointers to each tools with functions to
@@ -271,20 +276,21 @@ Detailed documentation should be the tool/README.md file.
271276
272277### Tool Flow
273278
274- 1 . Verilog to DB (dbSTA)
275- 2 . Init Floorplan (OpenROAD)
276- 3 . I/O placement (ioPlacer)
277- 4 . PDN generation (pdngen
278- 5 . Tapcell and Welltie insertion (tapcell with LEF/DEF)
279- 6 . I/O placement (ioPlacer)
280- 7 . Global placement (RePlAce)
281- 8 . Gate Resizing and buffering (Resizer)
282- 9 . Detailed placement (OpenDP)
283- 10 . Clock Tree Synthesis (TritonCTS)
284- 11 . Repair Hold Violations (Resizer)
285- 12 . Global route (FastRoute)
286- 13 . Detailed route (TritonRoute)n
287- 14 . Final timing/power report (OpenSTA)
279+ * Verilog to DB (dbSTA)
280+ * Init Floorplan (OpenROAD)
281+ * I/O placement (ioPlacer)
282+ * PDN generation (pdngen)
283+ * Tapcell and Welltie insertion (tapcell)
284+ * I/O placement (ioPlacer)
285+ * Macro placement (TritonMacroPlace)
286+ * Global placement (RePlAce)
287+ * Gate Resizing and buffering (Resizer)
288+ * Detailed placement (OpenDP)
289+ * Clock Tree Synthesis (TritonCTS)
290+ * Repair Hold Violations (Resizer)
291+ * Global route (FastRoute)
292+ * Detailed route (TritonRoute)
293+ * Final timing/power report (OpenSTA)
288294
289295### Tool Checklist
290296
0 commit comments