Skip to content

Commit d283fd0

Browse files
committed
Merge remote-tracking branch 'origin/master' into odb-database-chip
Signed-off-by: Osama <[email protected]>
2 parents 35e3c80 + 3fd4e08 commit d283fd0

File tree

218 files changed

+21312
-4574
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

218 files changed

+21312
-4574
lines changed

.clang-tidy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ CheckOptions:
6565

6666
# All modules but sta
6767
# Exclude build as there is too much noise from swig generated code
68-
HeaderFilterRegex: "(?!build/.*)/(ant|cts|dbSta|dft|dpl|drt|dst|exa|fin|gpl|grt|gui|ifp|mpl|odb|ord|pad|par|pdn|ppl|psm|rcx|rmp|rsz|stt|tap|upf|utl)/.*"
68+
HeaderFilterRegex: "(?!build/.*)/(ant|cts|dbSta|dft|dpl|drt|dst|est|exa|fin|gpl|grt|gui|ifp|mpl|odb|ord|pad|par|pdn|ppl|psm|rcx|rmp|rsz|stt|tap|upf|utl)/.*"
6969

7070
# Not currently handling identifier naming
7171
# WarningsAsErrors: "*"

.github/workflows/github-actions-are-odb-files-generated.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ jobs:
1616
uses: actions/checkout@v4
1717
with:
1818
fetch-depth: 0
19+
submodules: 'recursive'
1920
- name: setup
2021
run: |
2122
python3 -m venv venv

.github/workflows/github-actions-lint-tcl.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ jobs:
1414
steps:
1515
- name: Checkout repository
1616
uses: actions/checkout@v4
17+
with:
18+
submodules: 'recursive'
1719
- name: Install Dependencies
1820
run: |
1921
python3 -m venv venv

BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ OPENROAD_LIBRARY_DEPS = [
6262
"//src/drt:ui",
6363
"//src/dst",
6464
"//src/dst:ui",
65+
"//src/est",
66+
"//src/est:ui",
6567
"//src/exa",
6668
"//src/exa:ui",
6769
"//src/fin",

docs/contrib/DeveloperGuide.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ Tool namespaces are usually three-lettered lowercase letters.
240240
- Macro Placer ([mpl](../main/src/mpl/README.md))
241241
- RePlAce Global Placer ([gpl](../main/src/gpl/README.md))
242242
- Gate resizing and buffering ([rsz](../main/src/rsz/README.md))
243+
- Parasitics estimation ([est](../main/src/est/README.md))
243244
- Detailed placement ([dpl](../main/src/dpl/README.md))
244245
- Clock tree synthesis ([cts](../main/src/cts/README.md))
245246
- FastRoute Global routing ([grt](../main/src/grt/README.md))

include/ord/OpenRoad.hh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ namespace dft {
115115
class Dft;
116116
}
117117

118+
namespace est {
119+
class EstimateParasitics;
120+
}
121+
118122
namespace ord {
119123

120124
using std::string;
@@ -164,6 +168,10 @@ class OpenRoad
164168
dst::Distributed* getDistributed() { return distributer_; }
165169
stt::SteinerTreeBuilder* getSteinerTreeBuilder() { return stt_builder_; }
166170
dft::Dft* getDft() { return dft_; }
171+
est::EstimateParasitics* getEstimateParasitics()
172+
{
173+
return estimate_parasitics_;
174+
}
167175

168176
// Return the bounding box of the db rows.
169177
odb::Rect getCore();
@@ -258,6 +266,7 @@ class OpenRoad
258266
dst::Distributed* distributer_ = nullptr;
259267
stt::SteinerTreeBuilder* stt_builder_ = nullptr;
260268
dft::Dft* dft_ = nullptr;
269+
est::EstimateParasitics* estimate_parasitics_ = nullptr;
261270
utl::CallBackHandler* callback_handler_ = nullptr;
262271

263272
int threads_ = 1;

src/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ add_subdirectory(pdn)
279279
add_subdirectory(dft)
280280
add_subdirectory(mpl)
281281
add_subdirectory(par)
282+
add_subdirectory(est)
282283

283284
################################################################
284285

@@ -341,6 +342,7 @@ target_link_libraries(openroad
341342
dft
342343
mpl
343344
par
345+
est
344346
${ABC_LIBRARY}
345347
${TCL_LIBRARY}
346348
${CMAKE_THREAD_LIBS_INIT}

src/Metrics.tcl

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,23 +81,30 @@ proc report_fmax_metric { args } {
8181
}
8282
set fmax [expr { 1.0 / $min_period }]
8383
utl::metric_float "timing__fmax__clock:${clk_name}" $fmax
84-
puts "$clk_name fmax = [format %.2f [expr { $fmax / 1e6 }]] MHz"
8584
set fmax_metric [expr { max($fmax_metric, $fmax) }]
8685
}
8786
if { $fmax_metric == 0 } {
8887
# attempt to compute based on combinatorial path
8988
set fmax_valid true
90-
set max_path [find_timing_paths -unconstrained -path_delay max]
91-
if { $max_path == "" } {
89+
set max_paths [find_timing_paths -unconstrained -path_delay max]
90+
if { $max_paths == "" } {
9291
set fmax_valid false
9392
} else {
94-
set max_path_delay [$max_path data_arrival_time]
93+
set max_path_delay -1
94+
foreach path $max_paths {
95+
set path_delay [$path data_arrival_time]
96+
set max_path_delay [expr { max($max_path_delay, $path_delay) }]
97+
}
9598
}
96-
set min_path [find_timing_paths -unconstrained -path_delay min]
97-
if { $min_path == "" } {
99+
set min_paths [find_timing_paths -unconstrained -path_delay min]
100+
if { $min_paths == "" } {
98101
set fmax_valid false
99102
} else {
100-
set min_path_delay [$min_path data_arrival_time]
103+
set min_path_delay 1e12
104+
foreach path $min_paths {
105+
set path_delay [$path data_arrival_time]
106+
set min_path_delay [expr { min($min_path_delay, $path_delay) }]
107+
}
101108
}
102109
if { $fmax_valid } {
103110
set path_delay [expr { $max_path_delay - min(0, $min_path_delay) }]

src/OpenRoad.cc

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#include "dft/MakeDft.hh"
2525
#include "dpl/MakeOpendp.h"
2626
#include "dst/MakeDistributed.h"
27+
#include "est/EstimateParasitics.h"
28+
#include "est/MakeEstimateParasitics.h"
2729
#include "exa/MakeExample.h"
2830
#include "fin/MakeFinale.h"
2931
#include "gpl/MakeReplace.h"
@@ -115,6 +117,7 @@ OpenRoad::~OpenRoad()
115117
deleteDistributed(distributer_);
116118
deleteSteinerTreeBuilder(stt_builder_);
117119
dft::deleteDft(dft_);
120+
est::deleteEstimateParasitics(estimate_parasitics_);
118121
delete logger_;
119122
delete verilog_reader_;
120123
delete callback_handler_;
@@ -187,6 +190,7 @@ void OpenRoad::init(Tcl_Interp* tcl_interp,
187190
distributer_ = dst::makeDistributed();
188191
stt_builder_ = stt::makeSteinerTreeBuilder();
189192
dft_ = dft::makeDft();
193+
estimate_parasitics_ = est::makeEstimateParasitics();
190194

191195
// Init components.
192196
Ord_Init(tcl_interp);
@@ -207,7 +211,8 @@ void OpenRoad::init(Tcl_Interp* tcl_interp,
207211
sta_,
208212
stt_builder_,
209213
global_router_,
210-
opendp_);
214+
opendp_,
215+
estimate_parasitics_);
211216
initDbVerilogNetwork(verilog_network_, sta_);
212217
initIoplacer(ioPlacer_, db_, logger_, tcl_interp);
213218
initReplace(
@@ -217,7 +222,6 @@ void OpenRoad::init(Tcl_Interp* tcl_interp,
217222
initGlobalRouter(global_router_,
218223
db_,
219224
sta_,
220-
resizer_,
221225
antenna_checker_,
222226
opendp_,
223227
stt_builder_,
@@ -230,6 +234,7 @@ void OpenRoad::init(Tcl_Interp* tcl_interp,
230234
sta_,
231235
stt_builder_,
232236
resizer_,
237+
estimate_parasitics_,
233238
logger_,
234239
tcl_interp);
235240
initTapcell(tapcell_, db_, logger_, tcl_interp);
@@ -243,22 +248,37 @@ void OpenRoad::init(Tcl_Interp* tcl_interp,
243248
initExample(example_, db_, logger_, tcl_interp);
244249
initOpenRCX(extractor_, db_, logger_, getVersion(), tcl_interp);
245250
initICeWall(icewall_, db_, logger_, tcl_interp);
246-
initRestructure(restructure_, logger_, sta_, db_, resizer_, tcl_interp);
251+
initRestructure(restructure_,
252+
logger_,
253+
sta_,
254+
db_,
255+
resizer_,
256+
estimate_parasitics_,
257+
tcl_interp);
247258
initTritonRoute(detailed_router_,
248259
db_,
249260
logger_,
250261
callback_handler_,
251262
distributer_,
252263
stt_builder_,
253264
tcl_interp);
254-
initPDNSim(pdnsim_, logger_, db_, sta_, resizer_, opendp_, tcl_interp);
265+
initPDNSim(
266+
pdnsim_, logger_, db_, sta_, estimate_parasitics_, opendp_, tcl_interp);
255267
initAntennaChecker(antenna_checker_, db_, logger_, tcl_interp);
256268
initPartitionMgr(
257269
partitionMgr_, db_, getDbNetwork(), sta_, logger_, tcl_interp);
258270
initPdnGen(pdngen_, db_, logger_, tcl_interp);
259271
initDistributed(distributer_, logger_, tcl_interp);
260272
initSteinerTreeBuilder(stt_builder_, db_, logger_, tcl_interp);
261273
dft::initDft(dft_, db_, sta_, logger_, tcl_interp);
274+
initEstimateParasitics(estimate_parasitics_,
275+
tcl_interp,
276+
logger_,
277+
callback_handler_,
278+
db_,
279+
sta_,
280+
stt_builder_,
281+
global_router_);
262282

263283
// Import exported commands to global namespace.
264284
Tcl_Eval(tcl_interp, "sta::define_sta_cmds");

src/OpenRoad.i

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,13 @@ getResizer()
8787
return openroad->getResizer();
8888
}
8989

90+
est::EstimateParasitics *
91+
getEstimateParasitics()
92+
{
93+
OpenRoad *openroad = getOpenRoad();
94+
return openroad->getEstimateParasitics();
95+
}
96+
9097
rmp::Restructure *
9198
getRestructure()
9299
{

0 commit comments

Comments
 (0)