diff options
| author | gatecat <gatecat@ds0.me> | 2021-04-09 14:33:12 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-09 14:33:12 +0100 | 
| commit | b5731cee024b1f5a04fc42ae470750df28650be6 (patch) | |
| tree | 75ccddc2f0808c80dd2c5128e3de4f713be5060f | |
| parent | 9cc09207fc0a3ac4e4457e3f868f5d685f640640 (diff) | |
| parent | 93e34b8754d96d3f4ffeddad9b3baf5d5cb378b0 (diff) | |
| download | nextpnr-b5731cee024b1f5a04fc42ae470750df28650be6.tar.gz nextpnr-b5731cee024b1f5a04fc42ae470750df28650be6.tar.bz2 nextpnr-b5731cee024b1f5a04fc42ae470750df28650be6.zip | |
Merge pull request #668 from YosysHQ/gatecat/cell-bel-name-vcc
interchange: Disambiguate cell and bel pins when creating Vcc ties
| -rw-r--r-- | fpga_interchange/arch.cc | 16 | 
1 files changed, 10 insertions, 6 deletions
| diff --git a/fpga_interchange/arch.cc b/fpga_interchange/arch.cc index aab73b4d..e468d194 100644 --- a/fpga_interchange/arch.cc +++ b/fpga_interchange/arch.cc @@ -826,8 +826,12 @@ static void prepare_sites_for_routing(Context *ctx)          }          for (auto bel_pin : cell->lut_cell.vcc_pins) { +            // We can't rely on bel pins not clashing with cell names (for Xilinx they use different naming schemes, for +            // Nexus they are the same) so add a prefix to the bel pin name to disambiguate it +            IdString cell_pin = ctx->id(stringf("%s_PHYS", ctx->nameOf(bel_pin))); +              PortInfo port_info; -            port_info.name = bel_pin; +            port_info.name = cell_pin;              port_info.type = PORT_IN;              port_info.net = nullptr; @@ -837,14 +841,14 @@ static void prepare_sites_for_routing(Context *ctx)              }  #endif -            auto result = cell->ports.emplace(bel_pin, port_info); +            auto result = cell->ports.emplace(cell_pin, port_info);              if (result.second) { -                cell->cell_bel_pins[bel_pin].push_back(bel_pin); -                ctx->connectPort(vcc_net_name, cell->name, bel_pin); -                cell->const_ports.emplace(bel_pin); +                cell->cell_bel_pins[cell_pin].push_back(bel_pin); +                ctx->connectPort(vcc_net_name, cell->name, cell_pin); +                cell->const_ports.emplace(cell_pin);              } else {                  NPNR_ASSERT(result.first->second.net == ctx->getNetByAlias(vcc_net_name)); -                auto result2 = cell->cell_bel_pins.emplace(bel_pin, std::vector<IdString>({bel_pin})); +                auto result2 = cell->cell_bel_pins.emplace(cell_pin, std::vector<IdString>({bel_pin}));                  NPNR_ASSERT(result2.first->second.at(0) == bel_pin);                  NPNR_ASSERT(result2.first->second.size() == 1);              } | 
