mirror of https://github.com/YosysHQ/nextpnr.git
block some pips
This commit is contained in:
parent
af62a9abbd
commit
bbcfe052bb
|
|
@ -308,6 +308,7 @@ void GateMateImpl::postPlace()
|
|||
repack();
|
||||
ctx->assignArchInfo();
|
||||
used_cpes.resize(ctx->getGridDimX() * ctx->getGridDimY());
|
||||
block_perm.resize(ctx->getGridDimX() * ctx->getGridDimY());
|
||||
for (auto &cell : ctx->cells) {
|
||||
// We need to skip CPE_MULT since using CP outputs is mandatory
|
||||
// even if output is actually not connected
|
||||
|
|
@ -317,14 +318,18 @@ void GateMateImpl::postPlace()
|
|||
marked_used = true;
|
||||
if (marked_used)
|
||||
used_cpes[cell.second.get()->bel.tile] = true;
|
||||
if (cell.second.get()->type.in(id_CPE_MX4, id_CPE_MULT))
|
||||
block_perm[cell.second.get()->bel.tile] = true;
|
||||
}
|
||||
}
|
||||
bool GateMateImpl::checkPipAvail(PipId pip) const
|
||||
{
|
||||
const auto &extra_data = *pip_extra_data(pip);
|
||||
if (extra_data.type != PipExtra::PIP_EXTRA_MUX || (extra_data.flags & MUX_ROUTING) == 0)
|
||||
if (extra_data.type != PipExtra::PIP_EXTRA_MUX || (extra_data.flags & (MUX_ROUTING | MUX_PERMUTATION)) == 0)
|
||||
return true;
|
||||
if (used_cpes[pip.tile])
|
||||
if ((extra_data.flags & MUX_ROUTING) && used_cpes[pip.tile])
|
||||
return false;
|
||||
if ((extra_data.flags & MUX_PERMUTATION) && (extra_data.value!=0) && block_perm[pip.tile])
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,6 +97,7 @@ struct GateMateImpl : HimbaechelAPI
|
|||
pool<IdString> multiplier_zero_drivers;
|
||||
std::vector<CellInfo *> multipliers;
|
||||
std::vector<bool> used_cpes;
|
||||
std::vector<bool> block_perm;
|
||||
int fpga_mode;
|
||||
int timing_mode;
|
||||
std::map<const NetInfo *, int> global_signals;
|
||||
|
|
|
|||
Loading…
Reference in New Issue