diff options
author | Clifford Wolf <clifford@clifford.at> | 2018-05-23 11:35:49 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2018-05-23 11:35:49 +0200 |
commit | 960bb65b1579ccadb8f00fa32f685c4a71967539 (patch) | |
tree | 2387b6c2971cb8d7ff456e871a6b23d7d12b1ffc /apidraft.h | |
download | nextpnr-960bb65b1579ccadb8f00fa32f685c4a71967539.tar.gz nextpnr-960bb65b1579ccadb8f00fa32f685c4a71967539.tar.bz2 nextpnr-960bb65b1579ccadb8f00fa32f685c4a71967539.zip |
Import apidraft.h
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'apidraft.h')
-rw-r--r-- | apidraft.h | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/apidraft.h b/apidraft.h new file mode 100644 index 00000000..f6e5a44b --- /dev/null +++ b/apidraft.h @@ -0,0 +1,134 @@ +#include <stdint.h> +#include <string> + +// replace with proper IdString later +typedef std::string IdString; + +// ------------------------------------------------------- +// Arch-specific declarations + +#ifdef ARCH_ICE40 +struct ObjId +{ + uint8_t tile_x = 0, tile_y = 0; + uint16_t index = 0; + + bool nil() const { + return !tile_x && !tile_y && !index; + } +} __attribute__((packed)); + +struct ObjIterator +{ + // ... + ObjId operator*() const; +}; + +struct ObjRange +{ + ObjIterator begin(); + ObjIterator end(); +}; + +struct BelPin +{ + ObjId bel; + IdString pin; +}; + +struct BelPinIterator +{ + // ... + BelPin operator*() const; +}; + +struct BelPinRange +{ + BelPinIterator begin(); + BelPinIterator end(); +}; + +struct GuiLine +{ + float x1, y1, x2, y2; +}; + +struct Chip +{ + Chip(std::string cfg); + + ObjId getObjByName(IdString name) const; + IdString getObjName(ObjId obj) const; + IdString getBelType(ObjId obj) const; + ObjRange getBelsByType(IdString type) const; + + void getObjPosition(ObjId obj, float &x, float &y) const; + vector<GuiLine> getGuiLines(ObjId obj) const; + + ObjRange getWires() const; + ObjRange getWiresUphillWire(ObjId wire) const; + ObjRange getWiresDownhillWire(ObjId wire) const; + ObjRange getWiresBidirWire(ObjId wire) const; + ObjRange getWireAliases(ObjId wire) const; + + ObjId getWireBelPin(ObjId bel, IdString pin) const; + BelPin getBelPinUphillWire(ObjId wire) const; + BelPinRange getBelPinsDownhillWire(ObjId wire) const; +}; +#endif + +// ------------------------------------------------------- +// Generic declarations + +struct PortRef +{ + IdString cell_name; + IdString port_name; +}; + +struct NetInfo +{ + IdString name; + PortRef driver; + vector<PortRef> users; + dict<IdString, std::string> attrs; + + // wire objid -> signal delay + dict<ObjId, float> wires; +}; + +enum PortType +{ + PORT_IN = 0, + PORT_OUT = 1, + PORT_INOUT = 2 +}; + +struct PortInfo +{ + IdString name, net; + PortType type; +}; + +struct CellInfo +{ + IdString name, type; + dict<IdString, PortInfo> ports; + dict<IdString, std::string> attrs, params; + + ObjId bel; + // port_name -> pin_name + dict<IdString, IdString> pins; +}; + +struct Design +{ + struct Chip; + + Design(std::string chipCfg) : Chip(chipCfg) { + // ... + } + + dict<IdString, *NetInfo> nets; + dict<IdString, *CellInfo> cells; +}; |