aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2019-01-08 13:06:02 +0000
committerDavid Shah <dave@ds0.me>2019-02-25 11:49:25 +0000
commitf5b11ce075544d00ccafaf4363d099b6f1806335 (patch)
treef1fc8d214c55daef98f05a05ffd8123007cfbd01 /ecp5
parentaf3ff143be312b0f73289955bd513925f2bb7c4f (diff)
downloadnextpnr-f5b11ce075544d00ccafaf4363d099b6f1806335.tar.gz
nextpnr-f5b11ce075544d00ccafaf4363d099b6f1806335.tar.bz2
nextpnr-f5b11ce075544d00ccafaf4363d099b6f1806335.zip
ecp5: Implement budget overrides for carry chains and SLICE muxes
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'ecp5')
-rw-r--r--ecp5/arch.cc14
1 files changed, 12 insertions, 2 deletions
diff --git a/ecp5/arch.cc b/ecp5/arch.cc
index 1abb8af0..ad207d14 100644
--- a/ecp5/arch.cc
+++ b/ecp5/arch.cc
@@ -454,14 +454,24 @@ delay_t Arch::estimateDelay(WireId src, WireId dst) const
delay_t Arch::predictDelay(const NetInfo *net_info, const PortRef &sink) const
{
const auto &driver = net_info->driver;
- if (driver.port == id_FCO && sink.port == id_FCI)
+ if ((driver.port == id_FCO && sink.port == id_FCI) || sink.port == id_FXA || sink.port == id_FXB)
return 0;
auto driver_loc = getBelLocation(driver.cell->bel);
auto sink_loc = getBelLocation(sink.cell->bel);
return (110 - 10 * args.speed) + (200 - 20 * args.speed) * (abs(driver_loc.x - sink_loc.x) + abs(driver_loc.y - sink_loc.y));
}
-bool Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t &budget) const { return false; }
+bool Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t &budget) const {
+ if (net_info->driver.port == id_FCO && sink.port == id_FCI) {
+ return true;
+ budget = 0;
+ } else if (sink.port == id_FXA || sink.port == id_FXB) {
+ return true;
+ budget = 0;
+ } else {
+ return false;
+ }
+}
// -----------------------------------------------------------------------