diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2018-08-08 10:48:05 +0200 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2018-08-08 10:48:05 +0200 |
commit | 5df90bc5a5a273f5c50764f4045012b282e7fa36 (patch) | |
tree | 5f91c9800f958a810441120794dd28572e401c6f /generic | |
parent | b0741e292c7ec7191f2c92fe7695e34018469b67 (diff) | |
parent | 8553573d2485ac2ec60d1c49949c254e02d35490 (diff) | |
download | nextpnr-5df90bc5a5a273f5c50764f4045012b282e7fa36.tar.gz nextpnr-5df90bc5a5a273f5c50764f4045012b282e7fa36.tar.bz2 nextpnr-5df90bc5a5a273f5c50764f4045012b282e7fa36.zip |
Merge remote-tracking branch 'origin/master' into common_main
# Conflicts:
# ecp5/main.cc
# ice40/main.cc
Diffstat (limited to 'generic')
-rw-r--r-- | generic/arch.cc | 56 | ||||
-rw-r--r-- | generic/arch.h | 29 |
2 files changed, 44 insertions, 41 deletions
diff --git a/generic/arch.cc b/generic/arch.cc index 3389ac0d..e867d310 100644 --- a/generic/arch.cc +++ b/generic/arch.cc @@ -214,27 +214,27 @@ uint32_t Arch::getBelChecksum(BelId bel) const return 0; } -void Arch::bindBel(BelId bel, IdString cell, PlaceStrength strength) +void Arch::bindBel(BelId bel, CellInfo *cell, PlaceStrength strength) { bels.at(bel).bound_cell = cell; - cells.at(cell)->bel = bel; - cells.at(cell)->belStrength = strength; + cell->bel = bel; + cell->belStrength = strength; refreshUiBel(bel); } void Arch::unbindBel(BelId bel) { - cells.at(bels.at(bel).bound_cell)->bel = BelId(); - cells.at(bels.at(bel).bound_cell)->belStrength = STRENGTH_NONE; - bels.at(bel).bound_cell = IdString(); + bels.at(bel).bound_cell->bel = BelId(); + bels.at(bel).bound_cell->belStrength = STRENGTH_NONE; + bels.at(bel).bound_cell = nullptr; refreshUiBel(bel); } -bool Arch::checkBelAvail(BelId bel) const { return bels.at(bel).bound_cell == IdString(); } +bool Arch::checkBelAvail(BelId bel) const { return bels.at(bel).bound_cell == nullptr; } -IdString Arch::getBoundBelCell(BelId bel) const { return bels.at(bel).bound_cell; } +CellInfo *Arch::getBoundBelCell(BelId bel) const { return bels.at(bel).bound_cell; } -IdString Arch::getConflictingBelCell(BelId bel) const { return bels.at(bel).bound_cell; } +CellInfo *Arch::getConflictingBelCell(BelId bel) const { return bels.at(bel).bound_cell; } const std::vector<BelId> &Arch::getBels() const { return bel_ids; } @@ -271,34 +271,34 @@ uint32_t Arch::getWireChecksum(WireId wire) const return 0; } -void Arch::bindWire(WireId wire, IdString net, PlaceStrength strength) +void Arch::bindWire(WireId wire, NetInfo *net, PlaceStrength strength) { wires.at(wire).bound_net = net; - nets.at(net)->wires[wire].pip = PipId(); - nets.at(net)->wires[wire].strength = strength; + net->wires[wire].pip = PipId(); + net->wires[wire].strength = strength; refreshUiWire(wire); } void Arch::unbindWire(WireId wire) { - auto &net_wires = nets[wires.at(wire).bound_net]->wires; + auto &net_wires = wires.at(wire).bound_net->wires; auto pip = net_wires.at(wire).pip; if (pip != PipId()) { - pips.at(pip).bound_net = IdString(); + pips.at(pip).bound_net = nullptr; refreshUiPip(pip); } net_wires.erase(wire); - wires.at(wire).bound_net = IdString(); + wires.at(wire).bound_net = nullptr; refreshUiWire(wire); } -bool Arch::checkWireAvail(WireId wire) const { return wires.at(wire).bound_net == IdString(); } +bool Arch::checkWireAvail(WireId wire) const { return wires.at(wire).bound_net == nullptr; } -IdString Arch::getBoundWireNet(WireId wire) const { return wires.at(wire).bound_net; } +NetInfo *Arch::getBoundWireNet(WireId wire) const { return wires.at(wire).bound_net; } -IdString Arch::getConflictingWireNet(WireId wire) const { return wires.at(wire).bound_net; } +NetInfo *Arch::getConflictingWireNet(WireId wire) const { return wires.at(wire).bound_net; } const std::vector<BelPin> &Arch::getWireBelPins(WireId wire) const { return wires.at(wire).bel_pins; } @@ -323,13 +323,13 @@ uint32_t Arch::getPipChecksum(PipId wire) const return 0; } -void Arch::bindPip(PipId pip, IdString net, PlaceStrength strength) +void Arch::bindPip(PipId pip, NetInfo *net, PlaceStrength strength) { WireId wire = pips.at(pip).dstWire; pips.at(pip).bound_net = net; wires.at(wire).bound_net = net; - nets.at(net)->wires[wire].pip = pip; - nets.at(net)->wires[wire].strength = strength; + net->wires[wire].pip = pip; + net->wires[wire].strength = strength; refreshUiPip(pip); refreshUiWire(wire); } @@ -337,18 +337,18 @@ void Arch::bindPip(PipId pip, IdString net, PlaceStrength strength) void Arch::unbindPip(PipId pip) { WireId wire = pips.at(pip).dstWire; - nets.at(wires.at(wire).bound_net)->wires.erase(wire); - pips.at(pip).bound_net = IdString(); - wires.at(wire).bound_net = IdString(); + wires.at(wire).bound_net->wires.erase(wire); + pips.at(pip).bound_net = nullptr; + wires.at(wire).bound_net = nullptr; refreshUiPip(pip); refreshUiWire(wire); } -bool Arch::checkPipAvail(PipId pip) const { return pips.at(pip).bound_net == IdString(); } +bool Arch::checkPipAvail(PipId pip) const { return pips.at(pip).bound_net == nullptr; } -IdString Arch::getBoundPipNet(PipId pip) const { return pips.at(pip).bound_net; } +NetInfo *Arch::getBoundPipNet(PipId pip) const { return pips.at(pip).bound_net; } -IdString Arch::getConflictingPipNet(PipId pip) const { return pips.at(pip).bound_net; } +NetInfo *Arch::getConflictingPipNet(PipId pip) const { return pips.at(pip).bound_net; } const std::vector<PipId> &Arch::getPips() const { return pip_ids; } @@ -408,7 +408,7 @@ delay_t Arch::predictDelay(const NetInfo *net_info, const PortRef &sink) const return (dx + dy) * grid_distance_to_delay; } -delay_t Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t budget) const { return budget; } +bool Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t &budget) const { return false; } // --------------------------------------------------------------- diff --git a/generic/arch.h b/generic/arch.h index 10cd1d5a..0e0aec27 100644 --- a/generic/arch.h +++ b/generic/arch.h @@ -31,7 +31,8 @@ struct WireInfo; struct PipInfo { - IdString name, type, bound_net; + IdString name, type; + NetInfo *bound_net; WireId srcWire, dstWire; DelayInfo delay; DecalXY decalxy; @@ -39,7 +40,8 @@ struct PipInfo struct WireInfo { - IdString name, type, bound_net; + IdString name, type; + NetInfo *bound_net; std::vector<PipId> downhill, uphill, aliases; BelPin uphill_bel_pin; std::vector<BelPin> downhill_bel_pins; @@ -57,7 +59,8 @@ struct PinInfo struct BelInfo { - IdString name, type, bound_cell; + IdString name, type; + CellInfo *bound_cell; std::unordered_map<IdString, PinInfo> pins; DecalXY decalxy; int x, y, z; @@ -144,11 +147,11 @@ struct Arch : BaseCtx const std::vector<BelId> &getBelsByTile(int x, int y) const; bool getBelGlobalBuf(BelId bel) const; uint32_t getBelChecksum(BelId bel) const; - void bindBel(BelId bel, IdString cell, PlaceStrength strength); + void bindBel(BelId bel, CellInfo *cell, PlaceStrength strength); void unbindBel(BelId bel); bool checkBelAvail(BelId bel) const; - IdString getBoundBelCell(BelId bel) const; - IdString getConflictingBelCell(BelId bel) const; + CellInfo *getBoundBelCell(BelId bel) const; + CellInfo *getConflictingBelCell(BelId bel) const; const std::vector<BelId> &getBels() const; BelType getBelType(BelId bel) const; WireId getBelPinWire(BelId bel, PortPin pin) const; @@ -159,11 +162,11 @@ struct Arch : BaseCtx IdString getWireName(WireId wire) const; IdString getWireType(WireId wire) const; uint32_t getWireChecksum(WireId wire) const; - void bindWire(WireId wire, IdString net, PlaceStrength strength); + void bindWire(WireId wire, NetInfo *net, PlaceStrength strength); void unbindWire(WireId wire); bool checkWireAvail(WireId wire) const; - IdString getBoundWireNet(WireId wire) const; - IdString getConflictingWireNet(WireId wire) const; + NetInfo *getBoundWireNet(WireId wire) const; + NetInfo *getConflictingWireNet(WireId wire) const; DelayInfo getWireDelay(WireId wire) const { return DelayInfo(); } const std::vector<WireId> &getWires() const; const std::vector<BelPin> &getWireBelPins(WireId wire) const; @@ -172,11 +175,11 @@ struct Arch : BaseCtx IdString getPipName(PipId pip) const; IdString getPipType(PipId pip) const; uint32_t getPipChecksum(PipId pip) const; - void bindPip(PipId pip, IdString net, PlaceStrength strength); + void bindPip(PipId pip, NetInfo *net, PlaceStrength strength); void unbindPip(PipId pip); bool checkPipAvail(PipId pip) const; - IdString getBoundPipNet(PipId pip) const; - IdString getConflictingPipNet(PipId pip) const; + NetInfo *getBoundPipNet(PipId pip) const; + NetInfo *getConflictingPipNet(PipId pip) const; const std::vector<PipId> &getPips() const; WireId getPipSrcWire(PipId pip) const; WireId getPipDstWire(PipId pip) const; @@ -199,7 +202,7 @@ struct Arch : BaseCtx delay_t getRipupDelayPenalty() const { return 1.0; } float getDelayNS(delay_t v) const { return v; } uint32_t getDelayChecksum(delay_t v) const { return 0; } - delay_t getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t budget) const; + bool getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t &budget) const; bool pack() { return true; } bool place(); |