diff options
| author | William D. Jones <thor0505@comcast.net> | 2021-01-28 03:24:52 -0500 | 
|---|---|---|
| committer | gatecat <gatecat@ds0.me> | 2021-02-12 10:36:59 +0000 | 
| commit | 722d1f254284638515accc8c1d4562807f6452cc (patch) | |
| tree | 9df8a5dcd789c8fbd6d9f82fbe19de316a9842d7 | |
| parent | 861c12e6eba1ae1c0d6b1ea0ed27c060b2ceb671 (diff) | |
| download | nextpnr-722d1f254284638515accc8c1d4562807f6452cc.tar.gz nextpnr-722d1f254284638515accc8c1d4562807f6452cc.tar.bz2 nextpnr-722d1f254284638515accc8c1d4562807f6452cc.zip  | |
machxo2: Finish implementing Wire API functions. nextpnr segfaults on example with constraints.
| -rw-r--r-- | machxo2/arch.cc | 8 | ||||
| -rw-r--r-- | machxo2/arch.h | 47 | 
2 files changed, 43 insertions, 12 deletions
diff --git a/machxo2/arch.cc b/machxo2/arch.cc index eb050598..3410ec16 100644 --- a/machxo2/arch.cc +++ b/machxo2/arch.cc @@ -300,14 +300,6 @@ WireId Arch::getWireByName(IdString name) const      return ret;  } -NetInfo *Arch::getBoundWireNet(WireId wire) const { return nullptr; } - -NetInfo *Arch::getConflictingWireNet(WireId wire) const { return nullptr; } - -const std::vector<BelPin> &Arch::getWireBelPins(WireId wire) const { return bel_pin_dummy; } - -const std::vector<WireId> &Arch::getWires() const { return wire_id_dummy; } -  // ---------------------------------------------------------------  PipId Arch::getPipByName(IdString name) const diff --git a/machxo2/arch.h b/machxo2/arch.h index 560099aa..d87b5dbb 100644 --- a/machxo2/arch.h +++ b/machxo2/arch.h @@ -682,12 +682,51 @@ struct Arch : BaseCtx          return wire_to_net.find(wire) == wire_to_net.end() || wire_to_net.at(wire) == nullptr;      } -    NetInfo *getBoundWireNet(WireId wire) const; +    NetInfo *getBoundWireNet(WireId wire) const +    { +        NPNR_ASSERT(wire != WireId()); +        if (wire_to_net.find(wire) == wire_to_net.end()) +            return nullptr; +        else +            return wire_to_net.at(wire); +    } +      WireId getConflictingWireWire(WireId wire) const { return wire; } -    NetInfo *getConflictingWireNet(WireId wire) const; + +    NetInfo *getConflictingWireNet(WireId wire) const +    { +        NPNR_ASSERT(wire != WireId()); +        if (wire_to_net.find(wire) == wire_to_net.end()) +            return nullptr; +        else +            return wire_to_net.at(wire); +    } +      DelayInfo getWireDelay(WireId wire) const { return DelayInfo(); } -    const std::vector<WireId> &getWires() const; -    const std::vector<BelPin> &getWireBelPins(WireId wire) const; + +    WireRange getWires() const +    { +        WireRange range; +        range.b.cursor_tile = 0; +        range.b.cursor_index = -1; +        range.b.chip = chip_info; +        ++range.b; //-1 and then ++ deals with the case of no wries in the first tile +        range.e.cursor_tile = chip_info->width * chip_info->height; +        range.e.cursor_index = 0; +        range.e.chip = chip_info; +        return range; +    } + +    BelPinRange getWireBelPins(WireId wire) const +    { +        BelPinRange range; +        NPNR_ASSERT(wire != WireId()); +        range.b.ptr = tileInfo(wire)->wire_data[wire.index].bel_pins.get(); +        range.b.wire_loc = wire.location; +        range.e.ptr = range.b.ptr + tileInfo(wire)->wire_data[wire.index].num_bel_pins; +        range.e.wire_loc = wire.location; +        return range; +    }      // Pips      PipId getPipByName(IdString name) const;  | 
