From f72807f790e8d3f3f2a630f461bfe086e8d0e108 Mon Sep 17 00:00:00 2001 From: David Shah Date: Tue, 12 Jun 2018 12:46:30 +0200 Subject: ice40: Debugging the packer Signed-off-by: David Shah --- ice40/pack.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'ice40/pack.cc') diff --git a/ice40/pack.cc b/ice40/pack.cc index 692bfba2..47e55b68 100644 --- a/ice40/pack.cc +++ b/ice40/pack.cc @@ -29,12 +29,18 @@ static void pack_lut_lutffs(Design *design) { std::unordered_set packed_cells; + std::vector new_cells; for (auto cell : design->cells) { CellInfo *ci = cell.second; + log_info("cell '%s' is of type '%s'\n", ci->name.c_str(), + ci->type.c_str()); if (is_lut(ci)) { CellInfo *packed = create_ice_cell(design, "ICESTORM_LC", std::string(ci->name) + "_LC"); packed_cells.insert(ci->name); + new_cells.push_back(packed); + log_info("packed cell %s into %s\n", ci->name.c_str(), + packed->name.c_str()); // See if we can pack into a DFF // TODO: LUT cascade NetInfo *o = ci->ports.at("O").net; @@ -42,7 +48,10 @@ static void pack_lut_lutffs(Design *design) if (dff) { lut_to_lc(ci, packed, false); dff_to_lc(dff, packed, false); + design->nets.erase(o->name); packed_cells.insert(dff->name); + log_info("packed cell %s into %s\n", dff->name.c_str(), + packed->name.c_str()); } else { lut_to_lc(ci, packed, true); } @@ -51,24 +60,33 @@ static void pack_lut_lutffs(Design *design) for (auto pcell : packed_cells) { design->cells.erase(pcell); } + for (auto ncell : new_cells) { + design->cells[ncell->name] = ncell; + } } // Pack FFs not packed as LUTFFs static void pack_nonlut_ffs(Design *design) { std::unordered_set packed_cells; + std::vector new_cells; + for (auto cell : design->cells) { CellInfo *ci = cell.second; if (is_ff(ci)) { CellInfo *packed = create_ice_cell(design, "ICESTORM_LC", std::string(ci->name) + "_LC"); packed_cells.insert(ci->name); + new_cells.push_back(packed); dff_to_lc(ci, packed, true); } } for (auto pcell : packed_cells) { design->cells.erase(pcell); } + for (auto ncell : new_cells) { + design->cells[ncell->name] = ncell; + } } // Main pack function -- cgit v1.2.3