aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5/arch.cc
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-08-08 19:08:43 +0200
committerDavid Shah <davey1576@gmail.com>2018-08-08 19:08:43 +0200
commita3ae3f97913c291dbe36a49b1a20388156943abc (patch)
treeaa18634d3ea82650dd6e19330bb1ed9c87f472c3 /ecp5/arch.cc
parentabf5ea84b9700c72a19327cda1000db0f80b34e0 (diff)
downloadnextpnr-a3ae3f97913c291dbe36a49b1a20388156943abc.tar.gz
nextpnr-a3ae3f97913c291dbe36a49b1a20388156943abc.tar.bz2
nextpnr-a3ae3f97913c291dbe36a49b1a20388156943abc.zip
ecp5: Update to use const IdStrings in place of PortPin/BelType
Signed-off-by: David Shah <davey1576@gmail.com>
Diffstat (limited to 'ecp5/arch.cc')
-rw-r--r--ecp5/arch.cc72
1 files changed, 15 insertions, 57 deletions
diff --git a/ecp5/arch.cc b/ecp5/arch.cc
index d2d62241..23db8ae5 100644
--- a/ecp5/arch.cc
+++ b/ecp5/arch.cc
@@ -43,50 +43,13 @@ static std::tuple<int, int, std::string> split_identifier_name(const std::string
// -----------------------------------------------------------------------
-IdString Arch::belTypeToId(BelType type) const
-{
- if (type == TYPE_TRELLIS_SLICE)
- return id("TRELLIS_SLICE");
- if (type == TYPE_TRELLIS_IO)
- return id("TRELLIS_IO");
- return IdString();
-}
-
-BelType Arch::belTypeFromId(IdString type) const
-{
- if (type == id("TRELLIS_SLICE"))
- return TYPE_TRELLIS_SLICE;
- if (type == id("TRELLIS_IO"))
- return TYPE_TRELLIS_IO;
- return TYPE_NONE;
-}
-
-// -----------------------------------------------------------------------
-
void IdString::initialize_arch(const BaseCtx *ctx)
{
-#define X(t) initialize_add(ctx, #t, PIN_##t);
-
-#include "portpins.inc"
-
+#define X(t) initialize_add(ctx, #t, ID_##t);
+#include "constids.inc"
#undef X
}
-IdString Arch::portPinToId(PortPin type) const
-{
- IdString ret;
- if (type > 0 && type < PIN_MAXIDX)
- ret.index = type;
- return ret;
-}
-
-PortPin Arch::portPinFromId(IdString type) const
-{
- if (type.index > 0 && type.index < PIN_MAXIDX)
- return PortPin(type.index);
- return PIN_NONE;
-}
-
// -----------------------------------------------------------------------
static const ChipInfoPOD *get_chip_info(const RelPtr<ChipInfoPOD> *ptr) { return ptr->get(); }
@@ -129,14 +92,6 @@ Arch::Arch(ArchArgs args) : args(args)
if (!package_info)
log_error("Unsupported package '%s' for '%s'.\n", args.package.c_str(), getChipName().c_str());
-
- id_trellis_slice = id("TRELLIS_SLICE");
- id_clk = id("CLK");
- id_lsr = id("LSR");
- id_clkmux = id("CLKMUX");
- id_lsrmux = id("LSRMUX");
- id_srmode = id("SRMODE");
- id_mode = id("MODE");
}
// -----------------------------------------------------------------------
@@ -209,7 +164,7 @@ BelRange Arch::getBelsByTile(int x, int y) const
return br;
}
-WireId Arch::getBelPinWire(BelId bel, PortPin pin) const
+WireId Arch::getBelPinWire(BelId bel, IdString pin) const
{
WireId ret;
@@ -218,7 +173,7 @@ WireId Arch::getBelPinWire(BelId bel, PortPin pin) const
int num_bel_wires = locInfo(bel)->bel_data[bel.index].num_bel_wires;
const BelWirePOD *bel_wires = locInfo(bel)->bel_data[bel.index].bel_wires.get();
for (int i = 0; i < num_bel_wires; i++)
- if (bel_wires[i].port == pin) {
+ if (bel_wires[i].port == pin.index) {
ret.location = bel.location + bel_wires[i].rel_wire_loc;
ret.index = bel_wires[i].wire_index;
break;
@@ -227,7 +182,7 @@ WireId Arch::getBelPinWire(BelId bel, PortPin pin) const
return ret;
}
-PortType Arch::getBelPinType(BelId bel, PortPin pin) const
+PortType Arch::getBelPinType(BelId bel, IdString pin) const
{
NPNR_ASSERT(bel != BelId());
@@ -235,7 +190,7 @@ PortType Arch::getBelPinType(BelId bel, PortPin pin) const
const BelWirePOD *bel_wires = locInfo(bel)->bel_data[bel.index].bel_wires.get();
for (int i = 0; i < num_bel_wires; i++)
- if (bel_wires[i].port == pin)
+ if (bel_wires[i].port == pin.index)
return PortType(bel_wires[i].type);
return PORT_INOUT;
@@ -374,17 +329,20 @@ BelId Arch::getPioByFunctionName(const std::string &name) const
return BelId();
}
-std::vector<PortPin> Arch::getBelPins(BelId bel) const
+std::vector<IdString> Arch::getBelPins(BelId bel) const
{
- std::vector<PortPin> ret;
+ std::vector<IdString> ret;
NPNR_ASSERT(bel != BelId());
int num_bel_wires = locInfo(bel)->bel_data[bel.index].num_bel_wires;
const BelWirePOD *bel_wires = locInfo(bel)->bel_data[bel.index].bel_wires.get();
- for (int i = 0; i < num_bel_wires; i++)
- ret.push_back(bel_wires[i].port);
+ for (int i = 0; i < num_bel_wires; i++) {
+ IdString id;
+ id.index = bel_wires[i].port;
+ ret.push_back(id);
+ }
return ret;
}
@@ -447,7 +405,7 @@ std::vector<GraphicElement> Arch::getDecalGraphics(DecalId decal) const
int z = locInfo(bel)->bel_data[bel.index].z;
auto bel_type = getBelType(bel);
- if (bel_type == TYPE_TRELLIS_SLICE) {
+ if (bel_type == id_TRELLIS_SLICE) {
GraphicElement el;
el.type = GraphicElement::TYPE_BOX;
el.style = decal.active ? GraphicElement::STYLE_ACTIVE : GraphicElement::STYLE_INACTIVE;
@@ -458,7 +416,7 @@ std::vector<GraphicElement> Arch::getDecalGraphics(DecalId decal) const
ret.push_back(el);
}
- if (bel_type == TYPE_TRELLIS_IO) {
+ if (bel_type == id_TRELLIS_IO) {
GraphicElement el;
el.type = GraphicElement::TYPE_BOX;
el.style = decal.active ? GraphicElement::STYLE_ACTIVE : GraphicElement::STYLE_INACTIVE;