aboutsummaryrefslogtreecommitdiffstats
path: root/nexus
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-09-23 13:04:04 +0100
committerGitHub <noreply@github.com>2021-09-23 13:04:04 +0100
commit24f13ec9425590ddcb01dc8981f988a492c12e1a (patch)
tree8223cc68de9d946293a82288fb1409fb2c25455c /nexus
parenta886904540e106cd2785deb5414666531cc1e50a (diff)
parentf395ad3e27bf5453f7a5393e9039988f44215cec (diff)
downloadnextpnr-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.cc3
-rw-r--r--nexus/constids.inc2
-rw-r--r--nexus/fasm.cc2
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;
}