diff --git a/gowin/arch.cc b/gowin/arch.cc index 727ed0af..991390ce 100644 --- a/gowin/arch.cc +++ b/gowin/arch.cc @@ -1205,7 +1205,6 @@ void Arch::assignArchInfo() } else { ci->is_slice = false; } - ci->user_group = int_or_default(ci->attrs, id("PACK_GROUP"), -1); } } @@ -1220,8 +1219,7 @@ bool Arch::cellsCompatible(const CellInfo **cells, int count) const if (ci->is_slice && ci->slice_clk != nullptr) { Loc loc = getBelLocation(ci->bel); int cls = loc.z / 2; - bool ff_used = ci->params.at(id_FF_USED).as_bool(); - if (loc.z >= 6 && ff_used) // top slice have no ff + if (loc.z >= 6 && ci->ff_used) // top slice have no ff return false; if (clk[cls] == nullptr) clk[cls] = ci->slice_clk; @@ -1236,12 +1234,6 @@ bool Arch::cellsCompatible(const CellInfo **cells, int count) const else if (lsr[cls] != ci->slice_lsr) return false; } - if (ci->user_group != -1) { - if (group == -1) - group = ci->user_group; - else if (group != ci->user_group) - return false; - } } return true; } diff --git a/gowin/archdefs.h b/gowin/archdefs.h index 458be682..5582d5cf 100644 --- a/gowin/archdefs.h +++ b/gowin/archdefs.h @@ -81,9 +81,8 @@ struct NetInfo; struct ArchCellInfo { - // Custom grouping set via "PACK_GROUP" attribute. All cells with the same group - // value may share a tile (-1 = don't care, default if not set) - int user_group; + // Is the flip-flop of this slice used + bool ff_used; // Is a slice type primitive bool is_slice; // Only packing rule for slice type primitives is a single clock per tile diff --git a/gowin/cells.cc b/gowin/cells.cc index db7154a0..2fd103bf 100644 --- a/gowin/cells.cc +++ b/gowin/cells.cc @@ -44,8 +44,8 @@ std::unique_ptr create_generic_cell(Context *ctx, IdString type, std:: new_cell->type = type; if (type == id_SLICE) { new_cell->params[id_INIT] = 0; - new_cell->params[id_FF_USED] = 0; new_cell->params[id_FF_TYPE] = id_DFF.str(ctx); + new_cell->ff_used = false; IdString names[4] = {id_A, id_B, id_C, id_D}; for (int i = 0; i < 4; i++) { @@ -84,14 +84,14 @@ void lut_to_lc(const Context *ctx, CellInfo *lut, CellInfo *lc, bool no_dff) } if (no_dff) { - lc->params[id_FF_USED] = 0; + lc->ff_used = false; replace_port(lut, id_F, lc, id_F); } } void dff_to_lc(const Context *ctx, CellInfo *dff, CellInfo *lc, bool pass_thru_lut) { - lc->params[id_FF_USED] = 1; + lc->ff_used = true; lc->params[id_FF_TYPE] = dff->type.str(ctx); replace_port(dff, id_CLK, lc, id_CLK); replace_port(dff, id_CE, lc, id_CE); diff --git a/gowin/constids.inc b/gowin/constids.inc index 8bc5efdd..765b8f06 100644 --- a/gowin/constids.inc +++ b/gowin/constids.inc @@ -388,7 +388,6 @@ X(TBUF) // primitive attributes X(INIT) -X(FF_USED) X(FF_TYPE) X(INPUT_USED) X(OUTPUT_USED)