aboutsummaryrefslogtreecommitdiffstats
path: root/nexus
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-09-22 22:04:56 +0100
committerGitHub <noreply@github.com>2021-09-22 22:04:56 +0100
commitb2e9ce46f1cf60eff5d6d0fe844fc056890dfe6a (patch)
treee42c18f4becb86a0dc88534ba8f7adb9733276a3 /nexus
parent41c07126ec0934918ab1bb44ad2dfe676024fadf (diff)
parentfed682ee5f1c3dd974067b0c48a5d3557d728721 (diff)
downloadnextpnr-b2e9ce46f1cf60eff5d6d0fe844fc056890dfe6a.tar.gz
nextpnr-b2e9ce46f1cf60eff5d6d0fe844fc056890dfe6a.tar.bz2
nextpnr-b2e9ce46f1cf60eff5d6d0fe844fc056890dfe6a.zip
Merge pull request #823 from YosysHQ/gatecat/nexus-r1-tweaks
nexus: Tweaks for router1 performance
Diffstat (limited to 'nexus')
-rw-r--r--nexus/arch.cc4
-rw-r--r--nexus/arch.h2
2 files changed, 4 insertions, 2 deletions
diff --git a/nexus/arch.cc b/nexus/arch.cc
index 3f3d8c83..90acc7b7 100644
--- a/nexus/arch.cc
+++ b/nexus/arch.cc
@@ -587,13 +587,15 @@ TimingClockingInfo Arch::getPortClockingInfo(const CellInfo *cell, IdString port
// -----------------------------------------------------------------------
+delay_t Arch::getRipupDelayPenalty() const { return 250; }
+
delay_t Arch::estimateDelay(WireId src, WireId dst) const
{
int src_x = src.tile % chip_info->width, src_y = src.tile / chip_info->width;
int dst_x = dst.tile % chip_info->width, dst_y = dst.tile / chip_info->width;
int dist_x = std::abs(src_x - dst_x);
int dist_y = std::abs(src_y - dst_y);
- return 75 * dist_x + 75 * dist_y + 200;
+ return 75 * dist_x + 75 * dist_y + 250;
}
delay_t Arch::predictDelay(const NetInfo *net_info, const PortRef &sink) const
{
diff --git a/nexus/arch.h b/nexus/arch.h
index 973d97bf..deb9b6db 100644
--- a/nexus/arch.h
+++ b/nexus/arch.h
@@ -1192,7 +1192,7 @@ struct Arch : BaseArch<ArchRanges>
delay_t estimateDelay(WireId src, WireId dst) const override;
delay_t predictDelay(const NetInfo *net_info, const PortRef &sink) const override;
delay_t getDelayEpsilon() const override { return 20; }
- delay_t getRipupDelayPenalty() const override { return 120; }
+ delay_t getRipupDelayPenalty() const override;
delay_t getWireRipupDelayPenalty(WireId wire) const;
float getDelayNS(delay_t v) const override { return v * 0.001; }
delay_t getDelayFromNS(float ns) const override { return delay_t(ns * 1000); }