From 7123209324c93297efab6c2b2fc92286196be3fb Mon Sep 17 00:00:00 2001 From: David Shah Date: Mon, 3 Feb 2020 11:54:38 +0000 Subject: Allow selection of router algorithm Signed-off-by: David Shah --- generic/arch.cc | 18 ++++++++++++++++-- generic/arch.h | 2 ++ 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'generic') diff --git a/generic/arch.cc b/generic/arch.cc index c1c01d26..e4227c74 100644 --- a/generic/arch.cc +++ b/generic/arch.cc @@ -23,6 +23,7 @@ #include "placer1.h" #include "placer_heap.h" #include "router1.h" +#include "router2.h" #include "util.h" NEXTPNR_NAMESPACE_BEGIN @@ -553,10 +554,19 @@ bool Arch::place() bool Arch::route() { - bool retVal = router1(getCtx(), Router1Cfg(getCtx())); + std::string router = str_or_default(settings, id("router"), defaultRouter); + bool result; + if (router == "router1") { + result = router1(getCtx(), Router1Cfg(getCtx())); + } else if (router == "router2") { + router2(getCtx(), Router2Cfg(getCtx())); + result = router1(getCtx(), Router1Cfg(getCtx())); + } else { + log_error("iCE40 architecture does not support router '%s'\n", router.c_str()); + } getCtx()->settings[getCtx()->id("route")] = 1; archInfoToAttributes(); - return retVal; + return result; } // --------------------------------------------------------------- @@ -653,6 +663,10 @@ const std::vector Arch::availablePlacers = {"sa", "heap" #endif }; + +const std::string Arch::defaultRouter = "router1"; +const std::vector Arch::availableRouters = {"router1", "router2"}; + void Arch::assignArchInfo() { for (auto &cell : getCtx()->cells) { diff --git a/generic/arch.h b/generic/arch.h index 444d2636..21e78e9a 100644 --- a/generic/arch.h +++ b/generic/arch.h @@ -288,6 +288,8 @@ struct Arch : BaseCtx static const std::string defaultPlacer; static const std::vector availablePlacers; + static const std::string defaultRouter; + static const std::vector availableRouters; // --------------------------------------------------------------- // Internal usage -- cgit v1.2.3