aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2018-06-26 11:22:48 +0200
committerMiodrag Milanovic <mmicko@gmail.com>2018-06-26 11:22:48 +0200
commitac197e0b9ed968ca1f1ef045b66fb5934f101ba5 (patch)
tree1cf12bf6165c490e96de353ef70874444b002efc
parentdb890d3a81bfe6760e9f4ea981798269abb60a20 (diff)
downloadnextpnr-ac197e0b9ed968ca1f1ef045b66fb5934f101ba5.tar.gz
nextpnr-ac197e0b9ed968ca1f1ef045b66fb5934f101ba5.tar.bz2
nextpnr-ac197e0b9ed968ca1f1ef045b66fb5934f101ba5.zip
fix one more
-rw-r--r--ice40/place_legaliser.cc26
1 files changed, 14 insertions, 12 deletions
diff --git a/ice40/place_legaliser.cc b/ice40/place_legaliser.cc
index 52a116b2..e3ea0324 100644
--- a/ice40/place_legaliser.cc
+++ b/ice40/place_legaliser.cc
@@ -199,7 +199,7 @@ class PlacementLegaliser
CellInfo *make_carry_pass_out(PortInfo &cout_port)
{
assert(cout_port.net != nullptr);
- CellInfo *lc = create_ice_cell(ctx, ctx->id("ICESTORM_LC"));
+ std::unique_ptr<CellInfo> lc = create_ice_cell(ctx, ctx->id("ICESTORM_LC"));
lc->params[ctx->id("LUT_INIT")] = "65280"; // 0xff00: O = I3
lc->params[ctx->id("CARRY_ENABLE")] = "1";
lc->ports.at(ctx->id("O")).net = cout_port.net;
@@ -208,29 +208,30 @@ class PlacementLegaliser
co_i3_net->driver = cout_port.net->driver;
PortRef i3_r;
i3_r.port = ctx->id("I3");
- i3_r.cell = lc;
+ i3_r.cell = lc.get();
co_i3_net->users.push_back(i3_r);
PortRef o_r;
o_r.port = ctx->id("O");
- o_r.cell = lc;
+ o_r.cell = lc.get();
cout_port.net->driver = o_r;
lc->ports.at(ctx->id("I3")).net = co_i3_net;
// I1=1 feeds carry up the chain, so no need to actually break the chain
- lc->ports.at(ctx->id("I1")).net = ctx->nets.at(ctx->id("$PACKER_VCC_NET"));
+ lc->ports.at(ctx->id("I1")).net = ctx->nets.at(ctx->id("$PACKER_VCC_NET")).get();
PortRef i1_r;
i1_r.port = ctx->id("I1");
- i1_r.cell = lc;
+ i1_r.cell = lc.get();
ctx->nets.at(ctx->id("$PACKER_VCC_NET"))->users.push_back(i1_r);
- ctx->cells[lc->name] = lc;
- createdCells.insert(lc->name);
- return lc;
+ IdString name = lc->name;
+ ctx->cells[lc->name] = std::move(lc);
+ createdCells.insert(name);
+ return ctx->cells[name].get();
}
// Insert a logic cell to legalise a CIN->fabric connection
CellInfo *make_carry_feed_in(CellInfo *cin_cell, PortInfo &cin_port)
{
assert(cin_port.net != nullptr);
- CellInfo *lc = create_ice_cell(ctx, ctx->id("ICESTORM_LC"));
+ std::unique_ptr<CellInfo> lc = create_ice_cell(ctx, ctx->id("ICESTORM_LC"));
lc->params[ctx->id("CARRY_ENABLE")] = "1";
lc->params[ctx->id("CIN_CONST")] = "1";
lc->params[ctx->id("CIN_SET")] = "1";
@@ -242,9 +243,10 @@ class PlacementLegaliser
NetInfo *out_net = new NetInfo();
out_net->name = ctx->id(lc->name.str(ctx) + "$O");
- ctx->cells[lc->name] = lc;
- createdCells.insert(lc->name);
- return lc;
+ IdString name = lc->name;
+ ctx->cells[lc->name] = std::move(lc);
+ createdCells.insert(name);
+ return ctx->cells[name].get();
}
Context *ctx;