From 9afa6a2016d3137ba61d924f25f4f077215f3eda Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 6 Jun 2018 15:30:23 +0200 Subject: Update and simplify dummy arch Signed-off-by: Clifford Wolf --- dummy/chip.h | 178 +++++++++++++---------------------------------------------- 1 file changed, 38 insertions(+), 140 deletions(-) (limited to 'dummy/chip.h') diff --git a/dummy/chip.h b/dummy/chip.h index f403552f..396c3bd9 100644 --- a/dummy/chip.h +++ b/dummy/chip.h @@ -39,104 +39,9 @@ static inline IdString portPinToId(PortPin type) { return type; } static inline BelType belTypeFromId(IdString id) { return id; } static inline PortPin portPinFromId(IdString id) { return id; } -struct BelId -{ - uint8_t tile_x = 0, tile_y = 0; - uint16_t index = 0; - - bool nil() const { - return !tile_x && !tile_y && !index; - } -} __attribute__((packed)); - -struct WireId -{ - uint8_t tile_x = 0, tile_y = 0; - uint16_t index = 0; - - bool nil() const { - return !tile_x && !tile_y && !index; - } -} __attribute__((packed)); - -namespace std -{ - template<> struct hash - { - std::size_t operator()(const BelId &bel) const noexcept - { - std::size_t result = std::hash{}(bel.index); - result ^= std::hash{}(bel.tile_x) + 0x9e3779b9 + (result << 6) + (result >> 2); - result ^= std::hash{}(bel.tile_y) + 0x9e3779b9 + (result << 6) + (result >> 2); - return result; - } - }; - - template<> struct hash - { - std::size_t operator()(const WireId &wire) const noexcept - { - std::size_t result = std::hash{}(wire.index); - result ^= std::hash{}(wire.tile_x) + 0x9e3779b9 + (result << 6) + (result >> 2); - result ^= std::hash{}(wire.tile_y) + 0x9e3779b9 + (result << 6) + (result >> 2); - return result; - } - }; -} - -struct BelIterator -{ - BelId *ptr = nullptr; - - void operator++() { ptr++; } - bool operator!=(const BelIterator &other) const { return ptr != other.ptr; } - BelId operator*() const { return *ptr; } -}; - -struct BelRange -{ - BelIterator b, e; - BelIterator begin() const { return b; } - BelIterator end() const { return e; } -}; - -struct WireIterator -{ - WireId *ptr = nullptr; - - void operator++() { ptr++; } - bool operator!=(const WireIterator &other) const { return ptr != other.ptr; } - WireId operator*() const { return *ptr; } -}; - -struct WireRange -{ - WireIterator b, e; - WireIterator begin() const { return b; } - WireIterator end() const { return e; } -}; - -struct WireDelay -{ - WireId wire; - DelayInfo delay; -}; - -struct WireDelayIterator -{ - WireDelay *ptr = nullptr; - - void operator++() { ptr++; } - bool operator!=(const WireDelayIterator &other) const { return ptr != other.ptr; } - WireDelay operator*() const { return *ptr; } -}; - -struct WireDelayRange -{ - WireDelayIterator b, e; - WireDelayIterator begin() const { return b; } - WireDelayIterator end() const { return e; } -}; +typedef IdString BelId; +typedef IdString WireId; +typedef IdString PipId; struct BelPin { @@ -144,61 +49,54 @@ struct BelPin PortPin pin; }; -struct BelPinIterator -{ - BelPin *ptr = nullptr; - - void operator++() { ptr++; } - bool operator!=(const BelPinIterator &other) const { return ptr != other.ptr; } - BelPin operator*() const { return *ptr; } -}; - -struct BelPinRange -{ - BelPinIterator b, e; - BelPinIterator begin() const { return b; } - BelPinIterator end() const { return e; } -}; - struct ChipArgs { - // ... }; struct Chip { - // ... - Chip(ChipArgs args); - void setBelActive(BelId bel, bool active); - bool getBelActive(BelId bel); - BelId getBelByName(IdString name) const; - WireId getWireByName(IdString name) const; - IdString getBelName(BelId bel) const; - IdString getWireName(WireId wire) const; - BelRange getBels() const; - BelRange getBelsByType(BelType type) const; + IdString getBelName(BelId bel) const; + void bindBel(BelId bel, IdString cell); + void unbindBel(BelId bel); + bool checkBelAvail(BelId bel) const; + const vector &getBels() const; + const vector &getBelsByType(BelType type) const; BelType getBelType(BelId bel) const; - - // void getBelPosition(BelId bel, float &x, float &y) const; - // void getWirePosition(WireId wire, float &x, float &y) const; - // vector getBelGuiLines(BelId bel) const; - // vector getWireGuiLines(WireId wire) const; - - WireRange getWires() const; - WireDelayRange getWiresUphill(WireId wire) const; - WireDelayRange getWiresDownhill(WireId wire) const; - WireDelayRange getWiresBidir(WireId wire) const; - WireDelayRange getWireAliases(WireId wire) const; - - // the following will only operate on / return "active" BELs - // multiple active uphill BELs for a wire will cause a runtime error WireId getWireBelPin(BelId bel, PortPin pin) const; BelPin getBelPinUphill(WireId wire) const; - BelPinRange getBelPinsDownhill(WireId wire) const; + const vector &getBelPinsDownhill(WireId wire) const; + + WireId getWireByName(IdString name) const; + IdString getWireName(WireId wire) const; + void bindWire(WireId bel, IdString net); + void unbindWire(WireId bel); + bool checkWireAvail(WireId bel) const; + const vector &getWires() const; + + PipId getPipByName(IdString name) const; + IdString getPipName(PipId pip) const; + void bindPip(PipId bel, IdString net); + void unbindPip(PipId bel); + bool checkPipAvail(PipId bel) const; + const vector &getPips() const; + WireId getPipSrcWire(PipId pip) const; + WireId getPipDstWire(PipId pip) const; + DelayInfo getPipDelay(PipId pip) const; + const vector &getPipsDownhill(WireId wire) const; + const vector &getPipsUphill(WireId wire) const; + const vector &getWireAliases(WireId wire) const; + + void getBelPosition(BelId bel, float &x, float &y) const; + void getWirePosition(WireId wire, float &x, float &y) const; + void getPipPosition(WireId wire, float &x, float &y) const; + vector getBelGraphics(BelId bel) const; + vector getWireGraphics(WireId wire) const; + vector getPipGraphics(PipId pip) const; + vector getFrameGraphics() const; }; #endif -- cgit v1.2.3