Skip to content

Commit 9b42398

Browse files
authored
Merge pull request #283 from The-OpenROAD-Project/report_floating_nets
Report floating nets
2 parents a15d50f + 1671112 commit 9b42398

File tree

8 files changed

+73
-2914
lines changed

8 files changed

+73
-2914
lines changed

doc/OpenRoadArch.md

Lines changed: 50 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2728
OpenROAD 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

6272
None of the tools have commands to read or write LEF, DEF, Verilog or
6373
database files. These functions are all provided by the OpenROAD
@@ -82,11 +92,6 @@ fine for internals, but not for user visible commands. Commands have
8292
an implicit argument of the current OpenROAD class object. Functions
8393
to 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

9297
The 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

src/resizer/src/Resizer.cc

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2202,16 +2202,12 @@ Resizer::findFloatingNets()
22022202
NetIterator *net_iter = network_->netIterator(network_->topInstance());
22032203
while (net_iter->hasNext()) {
22042204
Net *net = net_iter->next();
2205-
NetConnectedPinIterator *pin_iter = network_->connectedPinIterator(net);
2206-
int pin_count = 0;
2207-
while (pin_iter->hasNext()) {
2208-
pin_iter->next();
2209-
pin_count++;
2210-
if (pin_count > 1)
2211-
break;
2212-
}
2213-
delete pin_iter;
2214-
if (pin_count == 1)
2205+
PinSeq loads;
2206+
PinSeq drvrs;
2207+
PinSet visited_drvrs;
2208+
FindNetDrvrLoads visitor(nullptr, visited_drvrs, loads, drvrs, network_);
2209+
network_->visitConnectedPins(net, visitor);
2210+
if (drvrs.size() == 0 && loads.size() > 0)
22152211
floating_nets->push_back(net);
22162212
}
22172213
delete net_iter;

src/resizer/test/gcd_resize.ok

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,5 @@ Inserted 35 input buffers.
1717
Inserted 18 output buffers.
1818
Inserted 0 hold buffers.
1919
Resized 35 instances.
20-
Warning: found 16 floatiing nets.
21-
_424_
22-
_425_
23-
_426_
24-
_427_
25-
_428_
26-
_429_
27-
_430_
28-
_431_
29-
_432_
30-
_433_
31-
_434_
32-
_435_
33-
_436_
34-
_437_
35-
_438_
36-
_439_
3720
Design area 738 u^2 12% utilization.
3821
worst slack 9.35

0 commit comments

Comments
 (0)