aboutsummaryrefslogtreecommitdiffstats
path: root/ice40/arch.cc
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2019-02-25 11:56:10 +0000
committerDavid Shah <dave@ds0.me>2019-03-22 10:31:54 +0000
commit7142db28a8b828da557729a706c20c8f330ba129 (patch)
treead9898be5e31227bcfeabde06b4c24c5455d143b /ice40/arch.cc
parent1c824709e21b18073bfdc182793351e40269c373 (diff)
downloadnextpnr-7142db28a8b828da557729a706c20c8f330ba129.tar.gz
nextpnr-7142db28a8b828da557729a706c20c8f330ba129.tar.bz2
nextpnr-7142db28a8b828da557729a706c20c8f330ba129.zip
HeAP: Make HeAP placer optional
A CMake option 'BUILD_HEAP' (default on) configures building of the HeAP placer and the associated Eigen3 dependency. Default for the iCE40 is SA placer, with --heap-placer to use HeAP Default for the ECP5 is HeAP placer, as SA placer can take 1hr+ for large ECP5 designs and HeAP tends to give better QoR. --sa-placer can be used to use SA instead, and auto-fallback to SA if HeAP not built. Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'ice40/arch.cc')
-rw-r--r--ice40/arch.cc11
1 files changed, 7 insertions, 4 deletions
diff --git a/ice40/arch.cc b/ice40/arch.cc
index 5688b6e6..09e64b16 100644
--- a/ice40/arch.cc
+++ b/ice40/arch.cc
@@ -671,10 +671,13 @@ bool Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay
bool Arch::place()
{
- // if (!placer1(getCtx(), Placer1Cfg(getCtx())))
- // return false;
- if (!placer_heap(getCtx()))
- return false;
+ if (bool_or_default(settings, id("heap_placer"), false)) {
+ if (!placer_heap(getCtx()))
+ return false;
+ } else {
+ if (!placer1(getCtx(), Placer1Cfg(getCtx())))
+ return false;
+ }
if (bool_or_default(settings, id("opt_timing"), false)) {
TimingOptCfg tocfg(getCtx());
tocfg.cellTypes.insert(id_ICESTORM_LC);