diff options
author | gatecat <gatecat@ds0.me> | 2021-09-23 13:04:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-23 13:04:04 +0100 |
commit | 24f13ec9425590ddcb01dc8981f988a492c12e1a (patch) | |
tree | 8223cc68de9d946293a82288fb1409fb2c25455c /nexus | |
parent | a886904540e106cd2785deb5414666531cc1e50a (diff) | |
parent | f395ad3e27bf5453f7a5393e9039988f44215cec (diff) | |
download | nextpnr-24f13ec9425590ddcb01dc8981f988a492c12e1a.tar.gz nextpnr-24f13ec9425590ddcb01dc8981f988a492c12e1a.tar.bz2 nextpnr-24f13ec9425590ddcb01dc8981f988a492c12e1a.zip |
Merge pull request #822 from YosysHQ/gatecat/nexus-split-vcc
nexus: Support for split Vcc routing
Diffstat (limited to 'nexus')
-rw-r--r-- | nexus/arch.cc | 3 | ||||
-rw-r--r-- | nexus/constids.inc | 2 | ||||
-rw-r--r-- | nexus/fasm.cc | 2 |
3 files changed, 7 insertions, 0 deletions
diff --git a/nexus/arch.cc b/nexus/arch.cc index 90acc7b7..fa81485a 100644 --- a/nexus/arch.cc +++ b/nexus/arch.cc @@ -591,6 +591,9 @@ delay_t Arch::getRipupDelayPenalty() const { return 250; } delay_t Arch::estimateDelay(WireId src, WireId dst) const { + const auto &dst_data = wire_data(dst); + if (src.tile == 0 && dst_data.name == ID_LOCAL_VCC) + return 0; int src_x = src.tile % chip_info->width, src_y = src.tile / chip_info->width; int dst_x = dst.tile % chip_info->width, dst_y = dst.tile / chip_info->width; int dist_x = std::abs(src_x - dst_x); diff --git a/nexus/constids.inc b/nexus/constids.inc index 5407cb23..48b0ca2b 100644 --- a/nexus/constids.inc +++ b/nexus/constids.inc @@ -528,3 +528,5 @@ X(TOUT) X(Q0) X(Q1) X(SCLK) + +X(LOCAL_VCC) diff --git a/nexus/fasm.cc b/nexus/fasm.cc index c4eb9a1b..964828cb 100644 --- a/nexus/fasm.cc +++ b/nexus/fasm.cc @@ -211,6 +211,8 @@ struct NexusFasmWriter return; std::string tile = tile_name(pip.tile, tile_by_type_and_loc(pip.tile, IdString(pd.tile_type))); std::string source_wire = escape_name(ctx->pip_src_wire_name(pip).str(ctx)); + if (source_wire == "LOCAL_VCC") + source_wire = "G__VCC"; std::string dest_wire = escape_name(ctx->pip_dst_wire_name(pip).str(ctx)); out << stringf("%s.PIP.%s.%s", tile.c_str(), dest_wire.c_str(), source_wire.c_str()) << std::endl; } |