diff options
Diffstat (limited to 'ice40/chains.cc')
-rw-r--r-- | ice40/chains.cc | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/ice40/chains.cc b/ice40/chains.cc index b3b54d6b..c8e98900 100644 --- a/ice40/chains.cc +++ b/ice40/chains.cc @@ -32,6 +32,7 @@ NEXTPNR_NAMESPACE_BEGIN class ChainConstrainer { private: + int feedio_lcs = 0; Context *ctx; // Split a carry chain into multiple legal chains std::vector<CellChain> split_carry_chain(CellChain &carryc) @@ -55,6 +56,7 @@ class ChainConstrainer CellInfo *feedin = make_carry_feed_in(cell, cell->ports.at(ctx->id("CIN"))); chains.back().cells.push_back(feedin); tile.push_back(feedin); + ++feedio_lcs; } } tile.push_back(cell); @@ -78,6 +80,7 @@ class ChainConstrainer at_end ? nullptr : *(curr_cell + 1)); chains.back().cells.push_back(passout); tile.push_back(passout); + ++feedio_lcs; } } ++curr_cell; @@ -91,8 +94,8 @@ class ChainConstrainer { NPNR_ASSERT(cout_port.net != nullptr); 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->params[ctx->id("LUT_INIT")] = Property(65280, 16); // 0xff00: O = I3 + lc->params[ctx->id("CARRY_ENABLE")] = Property::State::S1; lc->ports.at(id_O).net = cout_port.net; std::unique_ptr<NetInfo> co_i3_net(new NetInfo()); co_i3_net->name = ctx->id(lc->name.str(ctx) + "$I3"); @@ -167,9 +170,9 @@ class ChainConstrainer { NPNR_ASSERT(cin_port.net != nullptr); 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"; + lc->params[ctx->id("CARRY_ENABLE")] = Property::State::S1; + lc->params[ctx->id("CIN_CONST")] = Property::State::S1; + lc->params[ctx->id("CIN_SET")] = Property::State::S1; lc->ports.at(ctx->id("I1")).net = cin_port.net; cin_port.net->users.erase(std::remove_if(cin_port.net->users.begin(), cin_port.net->users.end(), [cin_cell, cin_port](const PortRef &usr) { @@ -281,6 +284,7 @@ class ChainConstrainer chain.cells.at(0)->constr_children.push_back(chain.cells.at(i)); } } + log_info(" %4d LCs used to legalise carry chains.\n", feedio_lcs); } public: |