Add Arch attrs API
Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
parent
2e02f2d616
commit
428f0b9eba
@ -151,6 +151,11 @@ Return a list of all bels on the device.
|
|||||||
|
|
||||||
Return the type of a given bel.
|
Return the type of a given bel.
|
||||||
|
|
||||||
|
### const\_range\<std\:\:pair\<IdString, std::string\>\> getBelAttrs(BelId bel) const
|
||||||
|
|
||||||
|
Return the attributes for that bel. Bel attributes are only informal. They are displayed by the GUI but are otherwise
|
||||||
|
unused. An implementation may simply return an empty range.
|
||||||
|
|
||||||
### WireId getBelPinWire(BelId bel, IdString pin) const
|
### WireId getBelPinWire(BelId bel, IdString pin) const
|
||||||
|
|
||||||
Return the wire connected to the given bel pin.
|
Return the wire connected to the given bel pin.
|
||||||
@ -180,6 +185,11 @@ Get the type of a wire. The wire type is purely informal and
|
|||||||
isn't used by any of the core algorithms. Implementations may
|
isn't used by any of the core algorithms. Implementations may
|
||||||
simply return `IdString()`.
|
simply return `IdString()`.
|
||||||
|
|
||||||
|
### const\_range\<std\:\:pair\<IdString, std::string\>\> getWireAttrs(WireId wire) const
|
||||||
|
|
||||||
|
Return the attributes for that wire. Wire attributes are only informal. They are displayed by the GUI but are otherwise
|
||||||
|
unused. An implementation may simply return an empty range.
|
||||||
|
|
||||||
### uint32\_t getWireChecksum(WireId wire) const
|
### uint32\_t getWireChecksum(WireId wire) const
|
||||||
|
|
||||||
Return a (preferably unique) number that represents this wire. This is used in design state checksum calculations.
|
Return a (preferably unique) number that represents this wire. This is used in design state checksum calculations.
|
||||||
@ -242,6 +252,11 @@ Get the name for a pip. (Pip names must be unique.)
|
|||||||
Get the type of a pip. Pip types are purely informal and
|
Get the type of a pip. Pip types are purely informal and
|
||||||
implementations may simply return `IdString()`.
|
implementations may simply return `IdString()`.
|
||||||
|
|
||||||
|
### const\_range\<std\:\:pair\<IdString, std::string\>\> getPipAttrs(PipId pip) const
|
||||||
|
|
||||||
|
Return the attributes for that pip. Pip attributes are only informal. They are displayed by the GUI but are otherwise
|
||||||
|
unused. An implementation may simply return an empty range.
|
||||||
|
|
||||||
### Loc getPipLocation(PipId pip) const
|
### Loc getPipLocation(PipId pip) const
|
||||||
|
|
||||||
Get the X/Y/Z location of a given pip. Pip locations do not need to be unique, and in most cases they aren't. So
|
Get the X/Y/Z location of a given pip. Pip locations do not need to be unique, and in most cases they aren't. So
|
||||||
|
18
ecp5/arch.h
18
ecp5/arch.h
@ -522,6 +522,12 @@ struct Arch : BaseCtx
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::pair<IdString, std::string>> getBelAttrs(BelId) const
|
||||||
|
{
|
||||||
|
std::vector<std::pair<IdString, std::string>> ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
WireId getBelPinWire(BelId bel, IdString pin) const;
|
WireId getBelPinWire(BelId bel, IdString pin) const;
|
||||||
|
|
||||||
BelPinRange getWireBelPins(WireId wire) const
|
BelPinRange getWireBelPins(WireId wire) const
|
||||||
@ -553,6 +559,12 @@ struct Arch : BaseCtx
|
|||||||
|
|
||||||
IdString getWireType(WireId wire) const { return IdString(); }
|
IdString getWireType(WireId wire) const { return IdString(); }
|
||||||
|
|
||||||
|
std::vector<std::pair<IdString, std::string>> getWireAttrs(WireId) const
|
||||||
|
{
|
||||||
|
std::vector<std::pair<IdString, std::string>> ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t getWireChecksum(WireId wire) const { return wire.index; }
|
uint32_t getWireChecksum(WireId wire) const { return wire.index; }
|
||||||
|
|
||||||
void bindWire(WireId wire, NetInfo *net, PlaceStrength strength)
|
void bindWire(WireId wire, NetInfo *net, PlaceStrength strength)
|
||||||
@ -633,6 +645,12 @@ struct Arch : BaseCtx
|
|||||||
|
|
||||||
IdString getPipType(PipId pip) const { return IdString(); }
|
IdString getPipType(PipId pip) const { return IdString(); }
|
||||||
|
|
||||||
|
std::vector<std::pair<IdString, std::string>> getPipAttrs(PipId) const
|
||||||
|
{
|
||||||
|
std::vector<std::pair<IdString, std::string>> ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t getPipChecksum(PipId pip) const { return pip.index; }
|
uint32_t getPipChecksum(PipId pip) const { return pip.index; }
|
||||||
|
|
||||||
void bindPip(PipId pip, NetInfo *net, PlaceStrength strength)
|
void bindPip(PipId pip, NetInfo *net, PlaceStrength strength)
|
||||||
|
@ -184,6 +184,21 @@ void Arch::setGroupDecal(GroupId group, DecalXY decalxy)
|
|||||||
refreshUiGroup(group);
|
refreshUiGroup(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Arch::setWireAttr(IdString wire, IdString key, const std::string &value)
|
||||||
|
{
|
||||||
|
wires.at(wire).attrs[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Arch::setPipAttr(IdString pip, IdString key, const std::string &value)
|
||||||
|
{
|
||||||
|
pips.at(pip).attrs[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Arch::setBelAttr(IdString bel, IdString key, const std::string &value)
|
||||||
|
{
|
||||||
|
bels.at(bel).attrs[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
Arch::Arch(ArchArgs args) : chipName("generic"), args(args) {}
|
Arch::Arch(ArchArgs args) : chipName("generic"), args(args) {}
|
||||||
@ -251,6 +266,8 @@ const std::vector<BelId> &Arch::getBels() const { return bel_ids; }
|
|||||||
|
|
||||||
IdString Arch::getBelType(BelId bel) const { return bels.at(bel).type; }
|
IdString Arch::getBelType(BelId bel) const { return bels.at(bel).type; }
|
||||||
|
|
||||||
|
const std::map<IdString, std::string> &Arch::getBelAttrs(BelId bel) const { return bels.at(bel).attrs; }
|
||||||
|
|
||||||
WireId Arch::getBelPinWire(BelId bel, IdString pin) const { return bels.at(bel).pins.at(pin).wire; }
|
WireId Arch::getBelPinWire(BelId bel, IdString pin) const { return bels.at(bel).pins.at(pin).wire; }
|
||||||
|
|
||||||
PortType Arch::getBelPinType(BelId bel, IdString pin) const { return bels.at(bel).pins.at(pin).type; }
|
PortType Arch::getBelPinType(BelId bel, IdString pin) const { return bels.at(bel).pins.at(pin).type; }
|
||||||
@ -276,6 +293,8 @@ IdString Arch::getWireName(WireId wire) const { return wire; }
|
|||||||
|
|
||||||
IdString Arch::getWireType(WireId wire) const { return wires.at(wire).type; }
|
IdString Arch::getWireType(WireId wire) const { return wires.at(wire).type; }
|
||||||
|
|
||||||
|
const std::map<IdString, std::string> &Arch::getWireAttrs(WireId wire) const { return wires.at(wire).attrs; }
|
||||||
|
|
||||||
uint32_t Arch::getWireChecksum(WireId wire) const
|
uint32_t Arch::getWireChecksum(WireId wire) const
|
||||||
{
|
{
|
||||||
// FIXME
|
// FIXME
|
||||||
@ -328,6 +347,8 @@ IdString Arch::getPipName(PipId pip) const { return pip; }
|
|||||||
|
|
||||||
IdString Arch::getPipType(PipId pip) const { return pips.at(pip).type; }
|
IdString Arch::getPipType(PipId pip) const { return pips.at(pip).type; }
|
||||||
|
|
||||||
|
const std::map<IdString, std::string> &Arch::getPipAttrs(PipId pip) const { return pips.at(pip).attrs; }
|
||||||
|
|
||||||
uint32_t Arch::getPipChecksum(PipId wire) const
|
uint32_t Arch::getPipChecksum(PipId wire) const
|
||||||
{
|
{
|
||||||
// FIXME
|
// FIXME
|
||||||
|
@ -32,6 +32,7 @@ struct WireInfo;
|
|||||||
struct PipInfo
|
struct PipInfo
|
||||||
{
|
{
|
||||||
IdString name, type;
|
IdString name, type;
|
||||||
|
std::map<IdString, std::string> attrs;
|
||||||
NetInfo *bound_net;
|
NetInfo *bound_net;
|
||||||
WireId srcWire, dstWire;
|
WireId srcWire, dstWire;
|
||||||
DelayInfo delay;
|
DelayInfo delay;
|
||||||
@ -42,6 +43,7 @@ struct PipInfo
|
|||||||
struct WireInfo
|
struct WireInfo
|
||||||
{
|
{
|
||||||
IdString name, type;
|
IdString name, type;
|
||||||
|
std::map<IdString, std::string> attrs;
|
||||||
NetInfo *bound_net;
|
NetInfo *bound_net;
|
||||||
std::vector<PipId> downhill, uphill, aliases;
|
std::vector<PipId> downhill, uphill, aliases;
|
||||||
BelPin uphill_bel_pin;
|
BelPin uphill_bel_pin;
|
||||||
@ -61,6 +63,7 @@ struct PinInfo
|
|||||||
struct BelInfo
|
struct BelInfo
|
||||||
{
|
{
|
||||||
IdString name, type;
|
IdString name, type;
|
||||||
|
std::map<IdString, std::string> attrs;
|
||||||
CellInfo *bound_cell;
|
CellInfo *bound_cell;
|
||||||
std::unordered_map<IdString, PinInfo> pins;
|
std::unordered_map<IdString, PinInfo> pins;
|
||||||
DecalXY decalxy;
|
DecalXY decalxy;
|
||||||
@ -120,6 +123,10 @@ struct Arch : BaseCtx
|
|||||||
void setBelDecal(BelId bel, DecalXY decalxy);
|
void setBelDecal(BelId bel, DecalXY decalxy);
|
||||||
void setGroupDecal(GroupId group, DecalXY decalxy);
|
void setGroupDecal(GroupId group, DecalXY decalxy);
|
||||||
|
|
||||||
|
void setWireAttr(IdString wire, IdString key, const std::string &value);
|
||||||
|
void setPipAttr(IdString pip, IdString key, const std::string &value);
|
||||||
|
void setBelAttr(IdString bel, IdString key, const std::string &value);
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
// Common Arch API. Every arch must provide the following methods.
|
// Common Arch API. Every arch must provide the following methods.
|
||||||
|
|
||||||
@ -151,6 +158,7 @@ struct Arch : BaseCtx
|
|||||||
CellInfo *getConflictingBelCell(BelId bel) const;
|
CellInfo *getConflictingBelCell(BelId bel) const;
|
||||||
const std::vector<BelId> &getBels() const;
|
const std::vector<BelId> &getBels() const;
|
||||||
IdString getBelType(BelId bel) const;
|
IdString getBelType(BelId bel) const;
|
||||||
|
const std::map<IdString, std::string> &getBelAttrs(BelId bel) const;
|
||||||
WireId getBelPinWire(BelId bel, IdString pin) const;
|
WireId getBelPinWire(BelId bel, IdString pin) const;
|
||||||
PortType getBelPinType(BelId bel, IdString pin) const;
|
PortType getBelPinType(BelId bel, IdString pin) const;
|
||||||
std::vector<IdString> getBelPins(BelId bel) const;
|
std::vector<IdString> getBelPins(BelId bel) const;
|
||||||
@ -158,6 +166,7 @@ struct Arch : BaseCtx
|
|||||||
WireId getWireByName(IdString name) const;
|
WireId getWireByName(IdString name) const;
|
||||||
IdString getWireName(WireId wire) const;
|
IdString getWireName(WireId wire) const;
|
||||||
IdString getWireType(WireId wire) const;
|
IdString getWireType(WireId wire) const;
|
||||||
|
const std::map<IdString, std::string> &getWireAttrs(WireId wire) const;
|
||||||
uint32_t getWireChecksum(WireId wire) const;
|
uint32_t getWireChecksum(WireId wire) const;
|
||||||
void bindWire(WireId wire, NetInfo *net, PlaceStrength strength);
|
void bindWire(WireId wire, NetInfo *net, PlaceStrength strength);
|
||||||
void unbindWire(WireId wire);
|
void unbindWire(WireId wire);
|
||||||
@ -171,6 +180,7 @@ struct Arch : BaseCtx
|
|||||||
PipId getPipByName(IdString name) const;
|
PipId getPipByName(IdString name) const;
|
||||||
IdString getPipName(PipId pip) const;
|
IdString getPipName(PipId pip) const;
|
||||||
IdString getPipType(PipId pip) const;
|
IdString getPipType(PipId pip) const;
|
||||||
|
const std::map<IdString, std::string> &getPipAttrs(PipId pip) const;
|
||||||
uint32_t getPipChecksum(PipId pip) const;
|
uint32_t getPipChecksum(PipId pip) const;
|
||||||
void bindPip(PipId pip, NetInfo *net, PlaceStrength strength);
|
void bindPip(PipId pip, NetInfo *net, PlaceStrength strength);
|
||||||
void unbindPip(PipId pip);
|
void unbindPip(PipId pip);
|
||||||
|
18
ice40/arch.h
18
ice40/arch.h
@ -502,6 +502,12 @@ struct Arch : BaseCtx
|
|||||||
return IdString(chip_info->bel_data[bel.index].type);
|
return IdString(chip_info->bel_data[bel.index].type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::pair<IdString, std::string>> getBelAttrs(BelId) const
|
||||||
|
{
|
||||||
|
std::vector<std::pair<IdString, std::string>> ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
WireId getBelPinWire(BelId bel, IdString pin) const;
|
WireId getBelPinWire(BelId bel, IdString pin) const;
|
||||||
PortType getBelPinType(BelId bel, IdString pin) const;
|
PortType getBelPinType(BelId bel, IdString pin) const;
|
||||||
std::vector<IdString> getBelPins(BelId bel) const;
|
std::vector<IdString> getBelPins(BelId bel) const;
|
||||||
@ -518,6 +524,12 @@ struct Arch : BaseCtx
|
|||||||
|
|
||||||
IdString getWireType(WireId wire) const;
|
IdString getWireType(WireId wire) const;
|
||||||
|
|
||||||
|
std::vector<std::pair<IdString, std::string>> getWireAttrs(WireId) const
|
||||||
|
{
|
||||||
|
std::vector<std::pair<IdString, std::string>> ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t getWireChecksum(WireId wire) const { return wire.index; }
|
uint32_t getWireChecksum(WireId wire) const { return wire.index; }
|
||||||
|
|
||||||
void bindWire(WireId wire, NetInfo *net, PlaceStrength strength)
|
void bindWire(WireId wire, NetInfo *net, PlaceStrength strength)
|
||||||
@ -694,6 +706,12 @@ struct Arch : BaseCtx
|
|||||||
|
|
||||||
IdString getPipType(PipId pip) const { return IdString(); }
|
IdString getPipType(PipId pip) const { return IdString(); }
|
||||||
|
|
||||||
|
std::vector<std::pair<IdString, std::string>> getPipAttrs(PipId) const
|
||||||
|
{
|
||||||
|
std::vector<std::pair<IdString, std::string>> ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t getPipChecksum(PipId pip) const { return pip.index; }
|
uint32_t getPipChecksum(PipId pip) const { return pip.index; }
|
||||||
|
|
||||||
WireId getPipSrcWire(PipId pip) const
|
WireId getPipSrcWire(PipId pip) const
|
||||||
|
Loading…
Reference in New Issue
Block a user