nexus: Add resource cost overrides
Signed-off-by: gatecat <gatecat@ds0.me>
This commit is contained in:
parent
ab6990f908
commit
718ee441a0
@ -705,6 +705,21 @@ void Arch::pre_routing()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
namespace {
|
||||||
|
float router2_base_cost(Context *ctx, WireId wire, PipId pip, float crit_weight)
|
||||||
|
{
|
||||||
|
(void)crit_weight; // unused
|
||||||
|
if (pip != PipId()) {
|
||||||
|
auto &data = ctx->pip_data(pip);
|
||||||
|
if (data.flags & PIP_ZERO_RR_COST)
|
||||||
|
return 1e-12;
|
||||||
|
if (data.flags & PIP_DRMUX_C)
|
||||||
|
return 1e15;
|
||||||
|
}
|
||||||
|
return ctx->getDelayNS(ctx->getPipDelay(pip).maxDelay() + ctx->getWireDelay(wire).maxDelay() +
|
||||||
|
ctx->getDelayEpsilon());
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
bool Arch::route()
|
bool Arch::route()
|
||||||
{
|
{
|
||||||
@ -719,7 +734,9 @@ bool Arch::route()
|
|||||||
if (router == "router1") {
|
if (router == "router1") {
|
||||||
result = router1(getCtx(), Router1Cfg(getCtx()));
|
result = router1(getCtx(), Router1Cfg(getCtx()));
|
||||||
} else if (router == "router2") {
|
} else if (router == "router2") {
|
||||||
router2(getCtx(), Router2Cfg(getCtx()));
|
Router2Cfg cfg(getCtx());
|
||||||
|
cfg.get_base_cost = router2_base_cost;
|
||||||
|
router2(getCtx(), cfg);
|
||||||
result = true;
|
result = true;
|
||||||
} else {
|
} else {
|
||||||
log_error("Nexus architecture does not support router '%s'\n", router.c_str());
|
log_error("Nexus architecture does not support router '%s'\n", router.c_str());
|
||||||
@ -1030,7 +1047,7 @@ const std::vector<std::string> Arch::availablePlacers = {"sa",
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::string Arch::defaultRouter = "router1";
|
const std::string Arch::defaultRouter = "router2";
|
||||||
const std::vector<std::string> Arch::availableRouters = {"router1", "router2"};
|
const std::vector<std::string> Arch::availableRouters = {"router1", "router2"};
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
NEXTPNR_NAMESPACE_END
|
||||||
|
@ -87,6 +87,8 @@ enum PipFlags
|
|||||||
{
|
{
|
||||||
PIP_FIXED_CONN = 0x8000,
|
PIP_FIXED_CONN = 0x8000,
|
||||||
PIP_LUT_PERM = 0x4000,
|
PIP_LUT_PERM = 0x4000,
|
||||||
|
PIP_ZERO_RR_COST = 0x2000,
|
||||||
|
PIP_DRMUX_C = 0x1000,
|
||||||
};
|
};
|
||||||
|
|
||||||
NPNR_PACKED_STRUCT(struct PipInfoPOD {
|
NPNR_PACKED_STRUCT(struct PipInfoPOD {
|
||||||
|
Loading…
Reference in New Issue
Block a user