Skip to content

Commit b86be75

Browse files
committed
Merge branch 'master' of https://github.com/The-OpenROAD-Project/OpenROAD into drt_layer_range
2 parents 76922a8 + abdaff9 commit b86be75

File tree

7 files changed

+68
-50
lines changed

7 files changed

+68
-50
lines changed

MODULE.bazel

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ bazel_dep(name = "bazel-orfs")
151151
# To bump version, run: bazelisk run @bazel-orfs//:bump
152152
git_override(
153153
module_name = "bazel-orfs",
154-
commit = "72078ddd575513b35bd3cdfdb5c115949fc44e97",
154+
commit = "abacf584d7515bebec96491c757a806431b7f9f7",
155155
remote = "https://github.com/The-OpenROAD-Project/bazel-orfs.git",
156156
)
157157

@@ -160,10 +160,10 @@ orfs = use_extension("@bazel-orfs//:extension.bzl", "orfs_repositories")
160160
# To bump version, run: bazelisk run @bazel-orfs//:bump
161161
orfs.default(
162162
# Official image https://hub.docker.com/r/openroad/orfs/tags
163-
image = "docker.io/openroad/orfs:v3.0-3455-g9638e97b",
163+
image = "docker.io/openroad/orfs:v3.0-3503-gd7c7e73f",
164164
# Use OpenROAD of this repo instead of from the docker image
165165
openroad = "//:openroad",
166-
sha256 = "7d6478d96c474f29f21e700f723d30b70d44e88686c3801688a22b35c35698e7",
166+
sha256 = "d5539ade517724de3765362589be443afb2624b14391b365612c8949a7c99a19",
167167
)
168168
use_repo(orfs, "com_github_nixos_patchelf_download")
169169
use_repo(orfs, "docker_orfs")
@@ -195,12 +195,13 @@ maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
195195
maven.install(
196196
name = "openroad_maven",
197197
artifacts = [
198-
"org.chipsalliance:chisel_2.13:7.0.0-RC1+22-2cb90ea2-SNAPSHOT",
199-
"org.chipsalliance:chisel-plugin_2.13.16:7.0.0-RC1+22-2cb90ea2-SNAPSHOT",
198+
"org.chipsalliance:chisel_2.13:7.0.0-RC3",
199+
"org.chipsalliance:chisel-plugin_2.13.16:7.0.0-RC3",
200200
],
201201
repositories = [
202-
"https://s01.oss.sonatype.org/content/repositories/snapshots",
203202
"https://repo1.maven.org/maven2",
203+
"https://s01.oss.sonatype.org/content/repositories/releases",
204+
"https://s01.oss.sonatype.org/content/repositories/snapshots",
204205
],
205206
)
206207
use_repo(maven, "openroad_maven")

MODULE.bazel.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

etc/DependencyInstaller.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ _versionCompare() {
1212
}
1313

1414
_equivalenceDeps() {
15-
yosysVersion=v0.53
15+
yosysVersion=v0.55
1616

1717
# yosys
1818
yosysPrefix=${PREFIX:-"/usr/local"}

src/rcx/src/extRCmodel.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2742,14 +2742,6 @@ void extRCModel::mkNet_prefix(extMeasure* m, const char* wiresNameSuffix)
27422742
sprintf(overUnder, "Unknown");
27432743
}
27442744

2745-
sprintf(_wireDirName,
2746-
"%s_%s_W%gW%g_S%gS%g",
2747-
_patternName,
2748-
overUnder,
2749-
get_nm(m, m->_w_m),
2750-
get_nm(m, m->_w2_m),
2751-
get_nm(m, m->_s_m),
2752-
get_nm(m, m->_s2_m));
27532745
sprintf(_wireDirName,
27542746
"%s_%s_W%gW%g_S%05dS%05d",
27552747
_patternName,

src/rsz/src/BufferedNet.cc

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,33 @@ using std::max;
3737
using std::min;
3838
using utl::RSZ;
3939

40-
const FixedDelay FixedDelay::INF = FixedDelay(100.0f);
41-
const FixedDelay FixedDelay::ZERO = FixedDelay(0.0f);
42-
4340
static const char* to_string(BufferedNetType type);
4441

4542
////////////////////////////////////////////////////////////////
4643

44+
const FixedDelay FixedDelay::INF = FixedDelay(100.0f, nullptr);
45+
const FixedDelay FixedDelay::ZERO = FixedDelay(0.0f, nullptr);
46+
47+
FixedDelay::FixedDelay() : value_fs_(0)
48+
{
49+
}
50+
51+
FixedDelay::FixedDelay(sta::Delay float_value, Resizer* resizer)
52+
{
53+
if (resizer
54+
&& (float_value > (FixedDelay::INF).toSeconds()
55+
|| float_value < (-FixedDelay::INF).toSeconds())) {
56+
resizer->logger()->error(RSZ,
57+
1008,
58+
"FixedDelay conversion out of range: {}",
59+
delayAsString(float_value, resizer));
60+
}
61+
62+
value_fs_ = float_value * second_;
63+
}
64+
65+
////////////////////////////////////////////////////////////////
66+
4767
// load
4868
BufferedNet::BufferedNet(const BufferedNetType type,
4969
const Point& location,

src/rsz/src/BufferedNet.hh

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,9 @@ using Requireds = std::array<Required, RiseFall::index_count>;
4444
class FixedDelay
4545
{
4646
public:
47-
explicit FixedDelay(sta::Delay float_value)
48-
{
49-
value_fs_ = float_value * second_;
50-
}
51-
52-
sta::Delay toSeconds() { return ((float) value_fs_) / second_; }
47+
FixedDelay();
48+
explicit FixedDelay(sta::Delay float_value, Resizer* resizer);
49+
sta::Delay toSeconds() const { return ((float) value_fs_) / second_; }
5350

5451
// 100 seconds
5552
static const FixedDelay INF;
@@ -94,7 +91,7 @@ class FixedDelay
9491
private:
9592
static FixedDelay fromFs(int64_t v)
9693
{
97-
FixedDelay ret(0);
94+
FixedDelay ret;
9895
ret.value_fs_ = v;
9996
return ret;
10097
}

src/rsz/src/Rebuffer.cc

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ void Rebuffer::annotateLoadSlacks(BnetPtr& tree, Vertex* root_vertex)
125125
} else {
126126
const RiseFall* rf = req_path->transition(sta_);
127127
node->setSlackTransition(rf->asRiseFallBoth());
128-
node->setSlack(
129-
FixedDelay(req_path->required() - arrival_path->arrival()));
128+
node->setSlack(FixedDelay(
129+
req_path->required() - arrival_path->arrival(), resizer_));
130130

131131
if (arrival_paths_[rf->index()] == nullptr) {
132132
arrival_paths_[rf->index()] = arrival_path;
@@ -279,7 +279,7 @@ FixedDelay Rebuffer::slackAtDriverPin(const BufferedNetPtr& bnet)
279279
{
280280
Delay correction;
281281
std::tie(std::ignore, correction, std::ignore) = drvrPinTiming(bnet);
282-
return bnet->slack() + FixedDelay(correction);
282+
return bnet->slack() + FixedDelay(correction, resizer_);
283283
}
284284

285285
std::optional<FixedDelay> Rebuffer::evaluateOption(const BnetPtr& option,
@@ -289,7 +289,7 @@ std::optional<FixedDelay> Rebuffer::evaluateOption(const BnetPtr& option,
289289
Delay correction;
290290
Slew slew;
291291
std::tie(std::ignore, correction, slew) = drvrPinTiming(option);
292-
FixedDelay slack = option->slack() + FixedDelay(correction);
292+
FixedDelay slack = option->slack() + FixedDelay(correction, resizer_);
293293

294294
if (!loadSlewSatisfactory(drvr_port_, option)) {
295295
return {};
@@ -298,7 +298,7 @@ std::optional<FixedDelay> Rebuffer::evaluateOption(const BnetPtr& option,
298298
// Refuse buffering option if we are violating max slew on the driver pin.
299299
// There's one exception: If we previously observed satisfactory slew with
300300
// an even higher load, ficticiously assume this load satisfies max slew.
301-
// This is a precaution against non-mononotic slew vs load data which would
301+
// This is a precaution against non-monotonic slew vs load data which would
302302
// cause inconsistencies in the algorithm.
303303
if (slew > drvr_pin_max_slew_ && option->cap() > drvr_load_high_water_mark_) {
304304
return {};
@@ -937,7 +937,7 @@ BufferedNetPtr Rebuffer::recoverArea(const BufferedNetPtr& root,
937937
return 0;
938938
},
939939
root,
940-
-FixedDelay(slack_correction));
940+
-FixedDelay(slack_correction, resizer_));
941941

942942
BnetSeq top_opts = visitTree(
943943
[&](auto& recurse, int level, const BnetPtr& node, int upstream_wl)
@@ -1124,7 +1124,7 @@ void Rebuffer::annotateTiming(const BnetPtr& tree)
11241124
double wire_res = wire_length * layer_res;
11251125
double wire_cap = wire_length * layer_cap;
11261126
FixedDelay wire_delay
1127-
= FixedDelay(wire_res * (wire_cap / 2 + p->cap()));
1127+
= FixedDelay(wire_res * (wire_cap / 2 + p->cap()), resizer_);
11281128
if (bnet->length() == 0) {
11291129
wire_res = 0;
11301130
wire_cap = 0;
@@ -1171,8 +1171,8 @@ FixedDelay Rebuffer::bufferDelay(LibertyCell* cell,
11711171
ArcDelay gate_delays[RiseFall::index_count];
11721172
Slew slews[RiseFall::index_count];
11731173
resizer_->gateDelays(output, load_cap, dcalc_ap, gate_delays, slews);
1174-
delay
1175-
= std::max<FixedDelay>(delay, FixedDelay(gate_delays[rf1->index()]));
1174+
delay = std::max<FixedDelay>(
1175+
delay, FixedDelay(gate_delays[rf1->index()], resizer_));
11761176
}
11771177
}
11781178

@@ -1192,7 +1192,8 @@ BnetPtr Rebuffer::addWire(const BnetPtr& p,
11921192
double wire_length = resizer_->dbuToMeters(z->length());
11931193
double wire_res = wire_length * layer_res;
11941194
double wire_cap = wire_length * layer_cap;
1195-
FixedDelay wire_delay = FixedDelay(wire_res * (wire_cap / 2 + p->cap()));
1195+
FixedDelay wire_delay
1196+
= FixedDelay(wire_res * (wire_cap / 2 + p->cap()), resizer_);
11961197

11971198
// account for wire delay
11981199
z->setDelay(wire_delay);
@@ -1435,7 +1436,7 @@ void Rebuffer::init()
14351436
cell->bufferPorts(in, out);
14361437
buffer_sizes_.push_back(BufferSize{
14371438
cell,
1438-
FixedDelay(out->intrinsicDelay(sta_)),
1439+
FixedDelay(out->intrinsicDelay(sta_), resizer_),
14391440
/*margined_max_cap=*/0.0f,
14401441
out->driveResistance(),
14411442
});
@@ -2248,23 +2249,29 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
22482249
// computation of wire load, we are using pin position for the existing
22492250
// buffer, but instance position for the new buffer.)
22502251
//
2251-
Delay relaxation
2252-
= std::max<float>(0.0f,
2253-
((slackAtDriverPin(timing_tree).toSeconds())
2254-
- std::min(original_tree_slack_error, 0.0f)))
2255-
/ 4.0f
2256-
+ (std::max(drvr_gate_delay, 0.0f)
2257-
+ criticalPathDelay(logger_, timing_tree).toSeconds())
2258-
* relaxation_factor_;
22592252

2260-
FixedDelay target = slackAtDriverPin(timing_tree) - FixedDelay(relaxation);
2253+
FixedDelay target_slack = -FixedDelay::INF;
2254+
2255+
// Check the tree isn't fully unconstrained
2256+
if (timing_tree->slackTransition() != nullptr) {
2257+
Delay relaxation
2258+
= std::max<float>(0.0f,
2259+
((slackAtDriverPin(timing_tree).toSeconds())
2260+
- std::min(original_tree_slack_error, 0.0f)))
2261+
/ 4.0f
2262+
+ (std::max(drvr_gate_delay, 0.0f)
2263+
+ criticalPathDelay(logger_, timing_tree).toSeconds())
2264+
* relaxation_factor_;
2265+
target_slack
2266+
= slackAtDriverPin(timing_tree) - FixedDelay(relaxation, resizer_);
2267+
}
22612268

22622269
BnetPtr area_opt_tree = timing_tree;
22632270
{
22642271
ScopedTimer timer(logger_, ra_runtime);
22652272
for (int i = 0; i < 5 && area_opt_tree; i++) {
22662273
area_opt_tree
2267-
= recoverArea(area_opt_tree, target, ((float) (1 + i)) / 5);
2274+
= recoverArea(area_opt_tree, target_slack, ((float) (1 + i)) / 5);
22682275
}
22692276
}
22702277

@@ -2459,7 +2466,8 @@ int Rebuffer::rebufferPin(const Pin* drvr_pin)
24592466
+ criticalPathDelay(logger_, bnet).toSeconds())
24602467
* relaxation_factor_;
24612468

2462-
FixedDelay target = slackAtDriverPin(bnet) - FixedDelay(relaxation);
2469+
FixedDelay target
2470+
= slackAtDriverPin(bnet) - FixedDelay(relaxation, resizer_);
24632471

24642472
for (int i = 0; i < 5 && bnet; i++) {
24652473
bnet = recoverArea(bnet, target, ((float) (1 + i)) / 5);

0 commit comments

Comments
 (0)