From 28e851cf456bc0211cd9bf866f0049b14e6cab68 Mon Sep 17 00:00:00 2001 From: David Shah Date: Wed, 27 Jun 2018 16:16:38 +0200 Subject: ice40: Fix IO packer Signed-off-by: David Shah --- ice40/pack.cc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'ice40') diff --git a/ice40/pack.cc b/ice40/pack.cc index 69bea740..9191255d 100644 --- a/ice40/pack.cc +++ b/ice40/pack.cc @@ -326,6 +326,7 @@ static void pack_constants(Context *ctx) gnd_net->name = ctx->id("$PACKER_GND_NET"); gnd_net->driver.cell = gnd_cell.get(); gnd_net->driver.port = ctx->id("O"); + gnd_cell->ports.at(ctx->id("O")).net = gnd_net.get(); std::unique_ptr vcc_cell = create_ice_cell(ctx, ctx->id("ICESTORM_LC"), "$PACKER_VCC"); vcc_cell->params[ctx->id("LUT_INIT")] = "1"; @@ -333,6 +334,7 @@ static void pack_constants(Context *ctx) vcc_net->name = ctx->id("$PACKER_VCC_NET"); vcc_net->driver.cell = vcc_cell.get(); vcc_net->driver.port = ctx->id("O"); + vcc_cell->ports.at(ctx->id("O")).net = vcc_net.get(); std::vector dead_nets; @@ -402,6 +404,12 @@ static void pack_io(Context *ctx) ctx->nets.erase(net->name); sb->ports.at(ctx->id("PACKAGE_PIN")).net = nullptr; } + if (ci->type == ctx->id("$nextpnr_iobuf")) { + NetInfo *net2 = ci->ports.at(ctx->id("I")).net; + if (net2 != nullptr) { + ctx->nets.erase(net2->name); + } + } } else { // Create a SB_IO buffer std::unique_ptr ice_cell = -- cgit v1.2.3