aboutsummaryrefslogtreecommitdiffstats
path: root/nexus
diff options
context:
space:
mode:
authorDavid Lattimore <dml@google.com>2022-10-05 14:33:06 +1100
committerDavid Lattimore <dml@google.com>2022-10-05 14:40:49 +1100
commit1602774d27bc68fb291886276ff7cc409405717a (patch)
treeed464a01477acc8d68749ccef52a618ab8ad7846 /nexus
parent41709dac8f55859152107a9ff856b27480cd0a96 (diff)
downloadnextpnr-1602774d27bc68fb291886276ff7cc409405717a.tar.gz
nextpnr-1602774d27bc68fb291886276ff7cc409405717a.tar.bz2
nextpnr-1602774d27bc68fb291886276ff7cc409405717a.zip
nexus: Transform registered output parameters
Dual ported: OUTREG_A -> OUT_REGMODE_A OUTREG_B -> OUT_REGMODE_B Pseudo dual ported: OUTREG -> OUT_REGMODE_B Single ported: OUTREG -> OUT_REGMODE_A
Diffstat (limited to 'nexus')
-rw-r--r--nexus/constids.inc5
-rw-r--r--nexus/pack.cc4
2 files changed, 9 insertions, 0 deletions
diff --git a/nexus/constids.inc b/nexus/constids.inc
index 8731fad7..596d064c 100644
--- a/nexus/constids.inc
+++ b/nexus/constids.inc
@@ -446,6 +446,11 @@ X(FBK_MMD_DIG)
X(CLKMUX_FB)
X(LRAM_CORE)
+X(OUTREG_A)
+X(OUTREG_B)
+X(OUTREG)
+X(OUT_REGMODE_A)
+X(OUT_REGMODE_B)
X(EBR_SP_EN)
X(ECC_BYTE_SEL)
diff --git a/nexus/pack.cc b/nexus/pack.cc
index 3d293f69..cd042485 100644
--- a/nexus/pack.cc
+++ b/nexus/pack.cc
@@ -1111,6 +1111,7 @@ struct NexusPacker
lram_rules[id_SP512K_MODE].port_xform[id_WE] = id_WEA;
lram_rules[id_SP512K_MODE].port_xform[id_RSTOUT] = id_RSTA;
lram_rules[id_SP512K_MODE].port_xform[id_CEOUT] = id_OCEA;
+ lram_rules[id_SP512K_MODE].param_xform[id_OUTREG] = id_OUT_REGMODE_A;
add_bus_xform(lram_rules[id_SP512K_MODE], "DI", "DIA", 32);
add_bus_xform(lram_rules[id_SP512K_MODE], "DO", "DOA", 32);
add_bus_xform(lram_rules[id_SP512K_MODE], "AD", "ADA", 14);
@@ -1123,6 +1124,7 @@ struct NexusPacker
lram_rules[id_PDPSC512K_MODE].port_xform[id_CSR] = id_CSB;
lram_rules[id_PDPSC512K_MODE].port_xform[id_WE] = id_WEA;
lram_rules[id_PDPSC512K_MODE].port_xform[id_RSTR] = id_RSTB;
+ lram_rules[id_PDPSC512K_MODE].param_xform[id_OUTREG] = id_OUT_REGMODE_B;
add_bus_xform(lram_rules[id_PDPSC512K_MODE], "DI", "DIA", 32);
add_bus_xform(lram_rules[id_PDPSC512K_MODE], "DO", "DOB", 32);
add_bus_xform(lram_rules[id_PDPSC512K_MODE], "ADW", "ADA", 14);
@@ -1132,6 +1134,8 @@ struct NexusPacker
lram_rules[id_DPSC512K_MODE].new_type = id_LRAM_CORE;
lram_rules[id_DPSC512K_MODE].port_xform[id_CEOUTA] = id_OCEA;
lram_rules[id_DPSC512K_MODE].port_xform[id_CEOUTB] = id_OCEB;
+ lram_rules[id_DPSC512K_MODE].param_xform[id_OUTREG_A] = id_OUT_REGMODE_A;
+ lram_rules[id_DPSC512K_MODE].param_xform[id_OUTREG_B] = id_OUT_REGMODE_B;
log_info("Packing LRAM...\n");
generic_xform(lram_rules, true);