pack output DFF together with XLUT
This commit is contained in:
parent
73958db6e5
commit
b9c834dc27
@ -369,6 +369,10 @@ void NgUltraPacker::pack_xluts(void)
|
|||||||
bind_attr_loc(&ci, &ci.attrs);
|
bind_attr_loc(&ci, &ci.attrs);
|
||||||
ci.cluster = ci.name;
|
ci.cluster = ci.name;
|
||||||
xlut_used++;
|
xlut_used++;
|
||||||
|
|
||||||
|
NetInfo *o = ci.getPort(id_O);
|
||||||
|
CellInfo *orig_dff = o ? net_only_drives(ctx, o, is_dff, id_I, true) : nullptr;
|
||||||
|
|
||||||
for (int i=0;i<4;i++) {
|
for (int i=0;i<4;i++) {
|
||||||
ci.constr_children.push_back(lut[i]);
|
ci.constr_children.push_back(lut[i]);
|
||||||
lut[i]->cluster = ci.cluster;
|
lut[i]->cluster = ci.cluster;
|
||||||
@ -378,8 +382,16 @@ void NgUltraPacker::pack_xluts(void)
|
|||||||
lut[i]->params[id_lut_used] = Property(1,1);
|
lut[i]->params[id_lut_used] = Property(1,1);
|
||||||
NetInfo *net = lut[i]->getPort(id_LO);
|
NetInfo *net = lut[i]->getPort(id_LO);
|
||||||
if (net->users.entries()!=2) {
|
if (net->users.entries()!=2) {
|
||||||
lut[i]->timing_index = ctx->get_cell_timing_idx(ctx->id("BEYOND_FE_LUT"));
|
if (orig_dff && net->users.entries()==1) {
|
||||||
lut_only++;
|
// we place DFF on XLUT output on unused DFF
|
||||||
|
dff_to_fe(orig_dff, lut[i], false);
|
||||||
|
packed_cells.insert(orig_dff->name);
|
||||||
|
lut_and_ff++;
|
||||||
|
orig_dff = nullptr;
|
||||||
|
} else {
|
||||||
|
lut[i]->timing_index = ctx->get_cell_timing_idx(ctx->id("BEYOND_FE_LUT"));
|
||||||
|
lut_only++;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
CellInfo *dff = (*net->users.begin()).cell;
|
CellInfo *dff = (*net->users.begin()).cell;
|
||||||
if (dff->type!=id_NX_DFF)
|
if (dff->type!=id_NX_DFF)
|
||||||
@ -393,8 +405,6 @@ void NgUltraPacker::pack_xluts(void)
|
|||||||
lut_only++;
|
lut_only++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (xlut_used)
|
if (xlut_used)
|
||||||
|
Loading…
Reference in New Issue
Block a user