aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEddie Hung <eddieh@ece.ubc.ca>2018-11-10 20:05:36 -0800
committerEddie Hung <eddieh@ece.ubc.ca>2018-11-10 20:05:36 -0800
commit200fb3f6646a20fb5b3bca6d66964417f477689c (patch)
treeb9ff03fb77fffd074f3f4453bfaaf997b576a82a
parent15d9b3d3cc05656e58d01ba2f97ec92b6daaee1c (diff)
downloadnextpnr-200fb3f6646a20fb5b3bca6d66964417f477689c.tar.gz
nextpnr-200fb3f6646a20fb5b3bca6d66964417f477689c.tar.bz2
nextpnr-200fb3f6646a20fb5b3bca6d66964417f477689c.zip
[placer1] Ignore timing of TMG_IGNORE nets
-rw-r--r--common/place_common.cc10
1 files changed, 5 insertions, 5 deletions
diff --git a/common/place_common.cc b/common/place_common.cc
index da8ab37d..4810697c 100644
--- a/common/place_common.cc
+++ b/common/place_common.cc
@@ -28,19 +28,19 @@ NEXTPNR_NAMESPACE_BEGIN
wirelen_t get_net_metric(const Context *ctx, const NetInfo *net, MetricType type, float &tns)
{
wirelen_t wirelength = 0;
- Loc driver_loc;
- bool driver_gb;
CellInfo *driver_cell = net->driver.cell;
if (!driver_cell)
return 0;
if (driver_cell->bel == BelId())
return 0;
- driver_gb = ctx->getBelGlobalBuf(driver_cell->bel);
- driver_loc = ctx->getBelLocation(driver_cell->bel);
+ bool driver_gb = ctx->getBelGlobalBuf(driver_cell->bel);
if (driver_gb)
return 0;
+ IdString clock_port;
+ bool driver_tmg_ignore = ctx->getPortTimingClass(driver_cell, net->driver.port, clock_port);
delay_t negative_slack = 0;
delay_t worst_slack = std::numeric_limits<delay_t>::max();
+ Loc driver_loc = ctx->getBelLocation(driver_cell->bel);
int xmin = driver_loc.x, xmax = driver_loc.x, ymin = driver_loc.y, ymax = driver_loc.y;
for (auto load : net->users) {
if (load.cell == nullptr)
@@ -48,7 +48,7 @@ wirelen_t get_net_metric(const Context *ctx, const NetInfo *net, MetricType type
CellInfo *load_cell = load.cell;
if (load_cell->bel == BelId())
continue;
- if (ctx->timing_driven && type == MetricType::COST) {
+ if (!driver_tmg_ignore && ctx->timing_driven && type == MetricType::COST) {
delay_t net_delay = ctx->predictDelay(net, load);
auto slack = load.budget - net_delay;
if (slack < 0)