fix one more
This commit is contained in:
parent
db890d3a81
commit
ac197e0b9e
@ -199,7 +199,7 @@ class PlacementLegaliser
|
|||||||
CellInfo *make_carry_pass_out(PortInfo &cout_port)
|
CellInfo *make_carry_pass_out(PortInfo &cout_port)
|
||||||
{
|
{
|
||||||
assert(cout_port.net != nullptr);
|
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("LUT_INIT")] = "65280"; // 0xff00: O = I3
|
||||||
lc->params[ctx->id("CARRY_ENABLE")] = "1";
|
lc->params[ctx->id("CARRY_ENABLE")] = "1";
|
||||||
lc->ports.at(ctx->id("O")).net = cout_port.net;
|
lc->ports.at(ctx->id("O")).net = cout_port.net;
|
||||||
@ -208,29 +208,30 @@ class PlacementLegaliser
|
|||||||
co_i3_net->driver = cout_port.net->driver;
|
co_i3_net->driver = cout_port.net->driver;
|
||||||
PortRef i3_r;
|
PortRef i3_r;
|
||||||
i3_r.port = ctx->id("I3");
|
i3_r.port = ctx->id("I3");
|
||||||
i3_r.cell = lc;
|
i3_r.cell = lc.get();
|
||||||
co_i3_net->users.push_back(i3_r);
|
co_i3_net->users.push_back(i3_r);
|
||||||
PortRef o_r;
|
PortRef o_r;
|
||||||
o_r.port = ctx->id("O");
|
o_r.port = ctx->id("O");
|
||||||
o_r.cell = lc;
|
o_r.cell = lc.get();
|
||||||
cout_port.net->driver = o_r;
|
cout_port.net->driver = o_r;
|
||||||
lc->ports.at(ctx->id("I3")).net = co_i3_net;
|
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
|
// 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;
|
PortRef i1_r;
|
||||||
i1_r.port = ctx->id("I1");
|
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->nets.at(ctx->id("$PACKER_VCC_NET"))->users.push_back(i1_r);
|
||||||
ctx->cells[lc->name] = lc;
|
IdString name = lc->name;
|
||||||
createdCells.insert(lc->name);
|
ctx->cells[lc->name] = std::move(lc);
|
||||||
return lc;
|
createdCells.insert(name);
|
||||||
|
return ctx->cells[name].get();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert a logic cell to legalise a CIN->fabric connection
|
// Insert a logic cell to legalise a CIN->fabric connection
|
||||||
CellInfo *make_carry_feed_in(CellInfo *cin_cell, PortInfo &cin_port)
|
CellInfo *make_carry_feed_in(CellInfo *cin_cell, PortInfo &cin_port)
|
||||||
{
|
{
|
||||||
assert(cin_port.net != nullptr);
|
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("CARRY_ENABLE")] = "1";
|
||||||
lc->params[ctx->id("CIN_CONST")] = "1";
|
lc->params[ctx->id("CIN_CONST")] = "1";
|
||||||
lc->params[ctx->id("CIN_SET")] = "1";
|
lc->params[ctx->id("CIN_SET")] = "1";
|
||||||
@ -242,9 +243,10 @@ class PlacementLegaliser
|
|||||||
NetInfo *out_net = new NetInfo();
|
NetInfo *out_net = new NetInfo();
|
||||||
out_net->name = ctx->id(lc->name.str(ctx) + "$O");
|
out_net->name = ctx->id(lc->name.str(ctx) + "$O");
|
||||||
|
|
||||||
ctx->cells[lc->name] = lc;
|
IdString name = lc->name;
|
||||||
createdCells.insert(lc->name);
|
ctx->cells[lc->name] = std::move(lc);
|
||||||
return lc;
|
createdCells.insert(name);
|
||||||
|
return ctx->cells[name].get();
|
||||||
}
|
}
|
||||||
|
|
||||||
Context *ctx;
|
Context *ctx;
|
||||||
|
Loading…
Reference in New Issue
Block a user