diff options
author | Clifford Wolf <clifford@clifford.at> | 2018-07-12 17:22:29 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2018-07-12 17:22:29 +0200 |
commit | a436035424368b3d424822c7b72f99044c93dafd (patch) | |
tree | 9bbf888bc6db482b42677656f4ee3fd4357355e8 /generic/arch.h | |
parent | 1245eb6343f272b6aeb096b0d41407c5ea6bc5cd (diff) | |
download | nextpnr-a436035424368b3d424822c7b72f99044c93dafd.tar.gz nextpnr-a436035424368b3d424822c7b72f99044c93dafd.tar.bz2 nextpnr-a436035424368b3d424822c7b72f99044c93dafd.zip |
Add Groups API
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'generic/arch.h')
-rw-r--r-- | generic/arch.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/generic/arch.h b/generic/arch.h index 85f469f9..f6243404 100644 --- a/generic/arch.h +++ b/generic/arch.h @@ -63,6 +63,16 @@ struct BelInfo bool gb; }; +struct GroupInfo +{ + IdString name; + std::vector<BelId> bels; + std::vector<WireId> wires; + std::vector<PipId> pips; + std::vector<GroupId> groups; + DecalXY decalxy; +}; + struct Arch : BaseCtx { std::string chipName; @@ -70,6 +80,7 @@ struct Arch : BaseCtx std::unordered_map<IdString, WireInfo> wires; std::unordered_map<IdString, PipInfo> pips; std::unordered_map<IdString, BelInfo> bels; + std::unordered_map<GroupId, GroupInfo> groups; std::vector<IdString> bel_ids, wire_ids, pip_ids; std::unordered_map<IdString, std::vector<IdString>> bel_ids_by_type; @@ -88,11 +99,17 @@ struct Arch : BaseCtx void addBelOutput(IdString bel, IdString name, IdString wire); void addBelInout(IdString bel, IdString name, IdString wire); + void addGroupBel(IdString group, IdString bel); + void addGroupWire(IdString group, IdString wire); + void addGroupPip(IdString group, IdString pip); + void addGroupGroup(IdString group, IdString grp); + void addDecalGraphic(DecalId decal, const GraphicElement &graphic); void setFrameDecal(DecalXY decalxy); void setWireDecal(WireId wire, DecalXY decalxy); void setPipDecal(PipId pip, DecalXY decalxy); void setBelDecal(BelId bel, DecalXY decalxy); + void setGroupDecal(GroupId group, DecalXY decalxy); // --------------------------------------------------------------- // Common Arch API. Every arch must provide the following methods. @@ -151,6 +168,14 @@ struct Arch : BaseCtx const std::vector<PipId> &getPipsUphill(WireId wire) const; const std::vector<PipId> &getWireAliases(WireId wire) const; + GroupId getGroupByName(IdString name) const; + IdString getGroupName(GroupId group) const; + std::vector<GroupId> getGroups() const; + const std::vector<BelId> &getGroupBels(GroupId group) const; + const std::vector<WireId> &getGroupWires(GroupId group) const; + const std::vector<PipId> &getGroupPips(GroupId group) const; + const std::vector<GroupId> &getGroupGroups(GroupId group) const; + void estimatePosition(BelId bel, int &x, int &y, bool &gb) const; delay_t estimateDelay(WireId src, WireId dst) const; delay_t getDelayEpsilon() const { return 0.01; } @@ -166,6 +191,7 @@ struct Arch : BaseCtx DecalXY getBelDecal(BelId bel) const; DecalXY getWireDecal(WireId wire) const; DecalXY getPipDecal(PipId pip) const; + DecalXY getGroupDecal(GroupId group) const; bool getCellDelay(const CellInfo *cell, IdString fromPort, IdString toPort, delay_t &delay) const; IdString getPortClock(const CellInfo *cell, IdString port) const; |