diff options
author | David Shah <dave@ds0.me> | 2019-03-24 11:10:20 +0000 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2019-03-24 11:10:20 +0000 |
commit | 02ae21d8fc3bc1375848f40702cd4bb7f6700595 (patch) | |
tree | db9e1fc5f4329285c9c5c5a5eb1c615418530138 /ice40/arch.cc | |
parent | 52e05f4a0706b1c108221e600ff11e654f6e85a5 (diff) | |
download | nextpnr-02ae21d8fc3bc1375848f40702cd4bb7f6700595.tar.gz nextpnr-02ae21d8fc3bc1375848f40702cd4bb7f6700595.tar.bz2 nextpnr-02ae21d8fc3bc1375848f40702cd4bb7f6700595.zip |
Add --placer option and refactor placer selection
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'ice40/arch.cc')
-rw-r--r-- | ice40/arch.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/ice40/arch.cc b/ice40/arch.cc index ce824c83..b0839fa5 100644 --- a/ice40/arch.cc +++ b/ice40/arch.cc @@ -671,14 +671,17 @@ bool Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay bool Arch::place() { - if (bool_or_default(settings, id("heap_placer"), false)) { + std::string placer = str_or_default(settings, id("placer"), defaultPlacer); + if (placer == "heap") { PlacerHeapCfg cfg(getCtx()); cfg.ioBufTypes.insert(id_SB_IO); if (!placer_heap(getCtx(), cfg)) return false; - } else { + } else if (placer == "sa") { if (!placer1(getCtx(), Placer1Cfg(getCtx()))) return false; + } else { + log_error("iCE40 architecture does not support placer '%s'\n", placer.c_str()); } if (bool_or_default(settings, id("opt_timing"), false)) { TimingOptCfg tocfg(getCtx()); @@ -1205,4 +1208,12 @@ void Arch::assignCellInfo(CellInfo *cell) } } +const std::string Arch::defaultPlacer = "sa"; + +const std::vector<std::string> Arch::availablePlacers = {"sa", +#ifdef WITH_HEAP + "heap" +#endif +}; + NEXTPNR_NAMESPACE_END |