aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorEddie Hung <eddieh@ece.ubc.ca>2018-10-11 02:54:19 -0700
committerGitHub <noreply@github.com>2018-10-11 02:54:19 -0700
commit96efe48847dbf7f25f97b6059dacacd33fde4bec (patch)
tree58013ebcf2646254d5278bc823d97d25566b829a /common
parent22973527727a3747349f2d6f234f20fd459f05c3 (diff)
parent8749327f1efec85eed8b9b1d3cf45592533b42fc (diff)
downloadnextpnr-96efe48847dbf7f25f97b6059dacacd33fde4bec.tar.gz
nextpnr-96efe48847dbf7f25f97b6059dacacd33fde4bec.tar.bz2
nextpnr-96efe48847dbf7f25f97b6059dacacd33fde4bec.zip
Merge pull request #88 from YosysHQ/issue72
Resolve issue #72
Diffstat (limited to 'common')
-rw-r--r--common/timing.cc23
1 files changed, 6 insertions, 17 deletions
diff --git a/common/timing.cc b/common/timing.cc
index e3a7635f..d1a85779 100644
--- a/common/timing.cc
+++ b/common/timing.cc
@@ -48,6 +48,7 @@ struct Timing
delay_t max_arrival;
unsigned max_path_length = 0;
delay_t min_remaining_budget;
+ bool false_startpoint = false;
};
Timing(Context *ctx, bool net_delays, bool update, PortRefVector *crit_path = nullptr,
@@ -93,12 +94,11 @@ struct Timing
topographical_order.emplace_back(o->net);
net_data.emplace(o->net, TimingData{clkToQ.maxDelay()});
} else {
- // TODO(eddieh): Generated clocks and ignored ports are currently added into the ordering as if it
- // was a regular timing start point in order to enable the full topographical order to be computed,
- // however these false nets (and their downstream paths) should not be in the final ordering
if (portClass == TMG_STARTPOINT || portClass == TMG_GEN_CLOCK || portClass == TMG_IGNORE) {
topographical_order.emplace_back(o->net);
- net_data.emplace(o->net, TimingData{});
+ TimingData td;
+ td.false_startpoint = (portClass == TMG_GEN_CLOCK || portClass == TMG_IGNORE);
+ net_data.emplace(o->net, std::move(td));
}
// Otherwise, for all driven input ports on this cell, if a timing arc exists between the input and
// the current output port, increment fanin counter
@@ -112,19 +112,6 @@ struct Timing
}
}
- // If these constant nets exist, add them to the topographical ordering too
- // TODO(eddieh): Also false paths and should be removed from ordering
- auto it = ctx->nets.find(ctx->id("$PACKER_VCC_NET"));
- if (it != ctx->nets.end()) {
- topographical_order.emplace_back(it->second.get());
- net_data.emplace(it->second.get(), TimingData{});
- }
- it = ctx->nets.find(ctx->id("$PACKER_GND_NET"));
- if (it != ctx->nets.end()) {
- topographical_order.emplace_back(it->second.get());
- net_data.emplace(it->second.get(), TimingData{});
- }
-
std::deque<NetInfo *> queue(topographical_order.begin(), topographical_order.end());
// Now walk the design, from the start points identified previously, building up a topographical order
@@ -224,6 +211,8 @@ struct Timing
// between all nets on the path
for (auto net : boost::adaptors::reverse(topographical_order)) {
auto &nd = net_data.at(net);
+ // Ignore false startpoints
+ if (nd.false_startpoint) continue;
const delay_t net_length_plus_one = nd.max_path_length + 1;
auto &net_min_remaining_budget = nd.min_remaining_budget;
for (auto &usr : net->users) {