aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2020-11-13 14:17:40 +0000
committerDavid Shah <dave@ds0.me>2020-11-30 08:45:28 +0000
commitd9a19897c4f236906632e2d1c53bffebd3f9dacc (patch)
tree65294b6ba71aa8ebeed62dcad5212f5b9fd5bc72
parent094bf419d4b7aa62a606b8c7bdbcfc1fc63cacf7 (diff)
downloadnextpnr-d9a19897c4f236906632e2d1c53bffebd3f9dacc.tar.gz
nextpnr-d9a19897c4f236906632e2d1c53bffebd3f9dacc.tar.bz2
nextpnr-d9a19897c4f236906632e2d1c53bffebd3f9dacc.zip
nexus: More DSP primitive config
Signed-off-by: David Shah <dave@ds0.me>
-rw-r--r--nexus/constids.inc9
-rw-r--r--nexus/pack.cc16
-rw-r--r--nexus/pins.cc43
3 files changed, 67 insertions, 1 deletions
diff --git a/nexus/constids.inc b/nexus/constids.inc
index a996f0f8..0309bdd3 100644
--- a/nexus/constids.inc
+++ b/nexus/constids.inc
@@ -292,3 +292,12 @@ X(PREADDCAS_EN)
X(SR_18BITSHIFT_EN)
X(OPC)
X(RESET)
+
+X(ASIGNED_OPERAND_EN)
+X(BYPASS_MULT9)
+X(REGBYPSA1)
+X(REGBYPSA2)
+X(REGBYPSB)
+X(SHIFTA)
+
+X(REGBYPS)
diff --git a/nexus/pack.cc b/nexus/pack.cc
index d39a1c89..811a7c3a 100644
--- a/nexus/pack.cc
+++ b/nexus/pack.cc
@@ -1393,6 +1393,22 @@ struct NexusPacker
cell->params[id_SIGNEDSTATIC_EN] = std::string("DISABLED");
cell->params[id_SR_18BITSHIFT_EN] = std::string("DISABLED");
cell->params[id_SUBSTRACT_EN] = std::string("SUBTRACTION");
+ } else if (type == id_MULT9_CORE) {
+ cell->params[id_ASIGNED_OPERAND_EN] = std::string("DISABLED");
+ cell->params[id_BYPASS_MULT9] = std::string("DISABLED");
+ cell->params[id_GSR] = std::string("DISABLED");
+ cell->params[id_REGBYPSA1] = std::string("DISABLED");
+ cell->params[id_REGBYPSA2] = std::string("DISABLED");
+ cell->params[id_REGBYPSB] = std::string("DISABLED");
+ cell->params[id_RESET] = std::string("SYNC");
+ cell->params[id_GSR] = std::string("DISABLED");
+ cell->params[id_SHIFTA] = std::string("DISABLED");
+ cell->params[id_SIGNEDSTATIC_EN] = std::string("DISABLED");
+ cell->params[id_SR_18BITSHIFT_EN] = std::string("DISABLED");
+ } else if (type == id_REG18_CORE) {
+ cell->params[id_GSR] = std::string("DISABLED");
+ cell->params[id_REGBYPS] = std::string("BYPASS");
+ cell->params[id_RESET] = std::string("SYNC");
}
return cell;
}
diff --git a/nexus/pins.cc b/nexus/pins.cc
index e7be26f2..134565ad 100644
--- a/nexus/pins.cc
+++ b/nexus/pins.cc
@@ -83,7 +83,48 @@ static const std::unordered_map<IdString, Arch::CellPinsData> base_cell_pin_data
{id_HFOUTEN, PINSTYLE_PU},
{{}, PINSTYLE_CIB},
}},
-};
+ {id_PREADD9_CORE,
+ {
+ {id_CLK, PINSTYLE_CLK}, {id_RSTCL, PINSTYLE_LSR}, {id_RSTB, PINSTYLE_LSR}, {id_CECL, PINSTYLE_CE},
+ {id_CEB, PINSTYLE_CE},
+
+ {id_B0, PINSTYLE_CIB}, {id_B1, PINSTYLE_CIB}, {id_B2, PINSTYLE_CIB}, {id_B3, PINSTYLE_CIB},
+ {id_B4, PINSTYLE_CIB}, {id_B5, PINSTYLE_CIB}, {id_B6, PINSTYLE_CIB}, {id_B7, PINSTYLE_CIB},
+ {id_B8, PINSTYLE_CIB}, {id_BSIGNED, PINSTYLE_CIB},
+
+ {id_C0, PINSTYLE_CIB}, {id_C1, PINSTYLE_CIB}, {id_C2, PINSTYLE_CIB}, {id_C3, PINSTYLE_CIB},
+ {id_C4, PINSTYLE_CIB}, {id_C5, PINSTYLE_CIB}, {id_C6, PINSTYLE_CIB}, {id_C7, PINSTYLE_CIB},
+ {id_C8, PINSTYLE_CIB}, {id_C9, PINSTYLE_CIB},
+
+ {{}, PINSTYLE_DEDI},
+ }},
+ {id_MULT9_CORE,
+ {
+ {id_CLK, PINSTYLE_CLK},
+ {id_RSTA, PINSTYLE_LSR},
+ {id_RSTP, PINSTYLE_LSR},
+ {id_CEA, PINSTYLE_CE},
+ {id_CEP, PINSTYLE_CE},
+
+ {id_A0, PINSTYLE_CIB},
+ {id_A1, PINSTYLE_CIB},
+ {id_A2, PINSTYLE_CIB},
+ {id_A3, PINSTYLE_CIB},
+ {id_A4, PINSTYLE_CIB},
+ {id_A5, PINSTYLE_CIB},
+ {id_A6, PINSTYLE_CIB},
+ {id_A7, PINSTYLE_CIB},
+ {id_A8, PINSTYLE_CIB},
+ {id_ASIGNED, PINSTYLE_CIB},
+
+ {{}, PINSTYLE_DEDI},
+ }},
+ {id_REG18_CORE,
+ {
+ {id_CLK, PINSTYLE_CLK},
+ {id_RSTP, PINSTYLE_LSR},
+ {id_CEP, PINSTYLE_CE},
+ }}};
} // namespace
void Arch::init_cell_pin_data() { cell_pins_db = base_cell_pin_data; }