aboutsummaryrefslogtreecommitdiffstats
path: root/mistral
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-10-15 14:01:04 +0100
committerGitHub <noreply@github.com>2021-10-15 14:01:04 +0100
commitc71a20e8052e82fb773138f9b935cd6f7371a0b1 (patch)
tree7d12b0062222dce5c509d7949c208b3a0f55ebae /mistral
parent4e1f2d7deb07c3119dcd1814273e2eb273fc19ef (diff)
parentbfd61411e7bbf915ef92c315af8ec4eeb8221141 (diff)
downloadnextpnr-c71a20e8052e82fb773138f9b935cd6f7371a0b1.tar.gz
nextpnr-c71a20e8052e82fb773138f9b935cd6f7371a0b1.tar.bz2
nextpnr-c71a20e8052e82fb773138f9b935cd6f7371a0b1.zip
Merge pull request #847 from galibert/master
mistral: Add support for cyclonev_hps_interface_mpu_general_purpose
Diffstat (limited to 'mistral')
-rw-r--r--mistral/arch.cc5
-rw-r--r--mistral/arch.h1
-rw-r--r--mistral/constids.inc2
-rw-r--r--mistral/globals.cc9
4 files changed, 17 insertions, 0 deletions
diff --git a/mistral/arch.cc b/mistral/arch.cc
index 8ac225d4..b91bba39 100644
--- a/mistral/arch.cc
+++ b/mistral/arch.cc
@@ -77,6 +77,11 @@ Arch::Arch(ArchArgs args)
for (auto cmuxh_pos : cyclonev->cmuxh_get_pos())
create_clkbuf(CycloneV::pos2x(cmuxh_pos), CycloneV::pos2y(cmuxh_pos));
+ auto hps_pos = cyclonev->hps_get_pos();
+ if (!hps_pos.empty()) {
+ create_hps_mpu_general_purpose(CycloneV::pos2x(hps_pos[CycloneV::I_HPS_MPU_GENERAL_PURPOSE]), CycloneV::pos2y(hps_pos[CycloneV::I_HPS_MPU_GENERAL_PURPOSE]));
+ }
+
// This import takes about 5s, perhaps long term we can speed it up, e.g. defer to Mistral more...
log_info("Initialising routing graph...\n");
int pip_count = 0;
diff --git a/mistral/arch.h b/mistral/arch.h
index 4f5e68ae..df6d7e75 100644
--- a/mistral/arch.h
+++ b/mistral/arch.h
@@ -469,6 +469,7 @@ struct Arch : BaseArch<ArchRanges>
void create_lab(int x, int y, bool is_mlab); // lab.cc
void create_gpio(int x, int y); // io.cc
void create_clkbuf(int x, int y); // globals.cc
+ void create_hps_mpu_general_purpose(int x, int y); // globals.cc
// -------------------------------------------------
diff --git a/mistral/constids.inc b/mistral/constids.inc
index 693f2572..365f9977 100644
--- a/mistral/constids.inc
+++ b/mistral/constids.inc
@@ -94,3 +94,5 @@ X(A1DATA)
X(B1DATA)
X(WCLK_INV)
X(WE_INV)
+
+X(cyclonev_hps_interface_mpu_general_purpose)
diff --git a/mistral/globals.cc b/mistral/globals.cc
index 3203893b..5b157a48 100644
--- a/mistral/globals.cc
+++ b/mistral/globals.cc
@@ -43,4 +43,13 @@ bool Arch::is_clkbuf_cell(IdString cell_type) const
return cell_type == id_MISTRAL_CLKENA || cell_type == id_MISTRAL_CLKBUF;
}
+void Arch::create_hps_mpu_general_purpose(int x, int y)
+{
+ BelId gp_bel = add_bel(x, y, id_cyclonev_hps_interface_mpu_general_purpose, id_cyclonev_hps_interface_mpu_general_purpose);
+ for (int i = 0; i < 32; i++) {
+ add_bel_pin(gp_bel, id(stringf("gp_in[%d]", i)), PORT_IN, get_port(CycloneV::HPS_MPU_GENERAL_PURPOSE, x, y, -1, CycloneV::GP_IN, i));
+ add_bel_pin(gp_bel, id(stringf("gp_out[%d]", i)), PORT_OUT, get_port(CycloneV::HPS_MPU_GENERAL_PURPOSE, x, y, -1, CycloneV::GP_OUT, i));
+ }
+}
+
NEXTPNR_NAMESPACE_END