machxo2: Finish implementing Pip API functions.
This commit is contained in:
parent
0adde4aede
commit
861c12e6eb
@ -351,24 +351,6 @@ IdString Arch::getPipName(PipId pip) const
|
|||||||
return id("X" + std::to_string(x) + "/Y" + std::to_string(y) + "/" + src_name + ".->." + dst_name);
|
return id("X" + std::to_string(x) + "/Y" + std::to_string(y) + "/" + src_name + ".->." + dst_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetInfo *Arch::getBoundPipNet(PipId pip) const { return nullptr; }
|
|
||||||
|
|
||||||
NetInfo *Arch::getConflictingPipNet(PipId pip) const { return nullptr; }
|
|
||||||
|
|
||||||
WireId Arch::getConflictingPipWire(PipId pip) const { return WireId(); }
|
|
||||||
|
|
||||||
const std::vector<PipId> &Arch::getPips() const { return pip_id_dummy; }
|
|
||||||
|
|
||||||
Loc Arch::getPipLocation(PipId pip) const { return Loc(); }
|
|
||||||
|
|
||||||
DelayInfo Arch::getPipDelay(PipId pip) const { return DelayInfo(); }
|
|
||||||
|
|
||||||
const std::vector<PipId> &Arch::getPipsDownhill(WireId wire) const { return pip_id_dummy; }
|
|
||||||
|
|
||||||
const std::vector<PipId> &Arch::getPipsUphill(WireId wire) const { return pip_id_dummy; }
|
|
||||||
|
|
||||||
const std::vector<PipId> &Arch::getWireAliases(WireId wire) const { return pip_id_dummy; }
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
GroupId Arch::getGroupByName(IdString name) const { return GroupId(); }
|
GroupId Arch::getGroupByName(IdString name) const { return GroupId(); }
|
||||||
|
@ -748,11 +748,50 @@ struct Arch : BaseCtx
|
|||||||
return pip_to_net.find(pip) == pip_to_net.end() || pip_to_net.at(pip) == nullptr;
|
return pip_to_net.find(pip) == pip_to_net.end() || pip_to_net.at(pip) == nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetInfo *getBoundPipNet(PipId pip) const;
|
NetInfo *getBoundPipNet(PipId pip) const
|
||||||
WireId getConflictingPipWire(PipId pip) const;
|
{
|
||||||
NetInfo *getConflictingPipNet(PipId pip) const;
|
NPNR_ASSERT(pip != PipId());
|
||||||
const std::vector<PipId> &getPips() const;
|
if (pip_to_net.find(pip) == pip_to_net.end())
|
||||||
Loc getPipLocation(PipId pip) const;
|
return nullptr;
|
||||||
|
else
|
||||||
|
return pip_to_net.at(pip);
|
||||||
|
}
|
||||||
|
|
||||||
|
WireId getConflictingPipWire(PipId pip) const { return WireId(); }
|
||||||
|
|
||||||
|
NetInfo *getConflictingPipNet(PipId pip) const
|
||||||
|
{
|
||||||
|
NPNR_ASSERT(pip != PipId());
|
||||||
|
if (pip_to_net.find(pip) == pip_to_net.end())
|
||||||
|
return nullptr;
|
||||||
|
else
|
||||||
|
return pip_to_net.at(pip);
|
||||||
|
}
|
||||||
|
|
||||||
|
AllPipRange getPips() const
|
||||||
|
{
|
||||||
|
AllPipRange range;
|
||||||
|
range.b.cursor_tile = 0;
|
||||||
|
range.b.cursor_index = -1;
|
||||||
|
range.b.chip = chip_info;
|
||||||
|
++range.b; //-1 and then ++ deals with the case of no Bels in the first tile
|
||||||
|
range.e.cursor_tile = chip_info->width * chip_info->height;
|
||||||
|
range.e.cursor_index = 0;
|
||||||
|
range.e.chip = chip_info;
|
||||||
|
return range;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loc getPipLocation(PipId pip) const
|
||||||
|
{
|
||||||
|
Loc loc;
|
||||||
|
loc.x = pip.location.x;
|
||||||
|
loc.y = pip.location.y;
|
||||||
|
|
||||||
|
// FIXME: Some Pip's config bits span across tiles. Will Z
|
||||||
|
// be affected by this?
|
||||||
|
loc.z = 0;
|
||||||
|
return loc;
|
||||||
|
}
|
||||||
|
|
||||||
WireId getPipSrcWire(PipId pip) const
|
WireId getPipSrcWire(PipId pip) const
|
||||||
{
|
{
|
||||||
@ -772,10 +811,29 @@ struct Arch : BaseCtx
|
|||||||
return wire;
|
return wire;
|
||||||
}
|
}
|
||||||
|
|
||||||
DelayInfo getPipDelay(PipId pip) const;
|
DelayInfo getPipDelay(PipId pip) const { return DelayInfo(); }
|
||||||
const std::vector<PipId> &getPipsDownhill(WireId wire) const;
|
|
||||||
const std::vector<PipId> &getPipsUphill(WireId wire) const;
|
PipRange getPipsDownhill(WireId wire) const
|
||||||
const std::vector<PipId> &getWireAliases(WireId wire) const;
|
{
|
||||||
|
PipRange range;
|
||||||
|
NPNR_ASSERT(wire != WireId());
|
||||||
|
range.b.cursor = tileInfo(wire)->wire_data[wire.index].pips_downhill.get();
|
||||||
|
range.b.wire_loc = wire.location;
|
||||||
|
range.e.cursor = range.b.cursor + tileInfo(wire)->wire_data[wire.index].num_downhill;
|
||||||
|
range.e.wire_loc = wire.location;
|
||||||
|
return range;
|
||||||
|
}
|
||||||
|
|
||||||
|
PipRange getPipsUphill(WireId wire) const
|
||||||
|
{
|
||||||
|
PipRange range;
|
||||||
|
NPNR_ASSERT(wire != WireId());
|
||||||
|
range.b.cursor = tileInfo(wire)->wire_data[wire.index].pips_uphill.get();
|
||||||
|
range.b.wire_loc = wire.location;
|
||||||
|
range.e.cursor = range.b.cursor + tileInfo(wire)->wire_data[wire.index].num_uphill;
|
||||||
|
range.e.wire_loc = wire.location;
|
||||||
|
return range;
|
||||||
|
}
|
||||||
|
|
||||||
// Group
|
// Group
|
||||||
GroupId getGroupByName(IdString name) const;
|
GroupId getGroupByName(IdString name) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user