libtrellis: Add DCS bels Signed-off-by: gatecat <gatecat@ds0.me>
diff --git a/libtrellis/include/Bels.hpp b/libtrellis/include/Bels.hpp index ad3faa8..79ce97f 100644 --- a/libtrellis/include/Bels.hpp +++ b/libtrellis/include/Bels.hpp
@@ -10,6 +10,7 @@ void add_lc(RoutingGraph &graph, int x, int y, int z); void add_pio(RoutingGraph &graph, int x, int y, int z); void add_dcc(RoutingGraph &graph, int x, int y, string side, string z); +void add_dcs(RoutingGraph &graph, int x, int y, int z); void add_bram(RoutingGraph &graph, int x, int y, int z); void add_mult18(RoutingGraph &graph, int x, int y, int z); void add_alu54b(RoutingGraph &graph, int x, int y, int z);
diff --git a/libtrellis/src/Bels.cpp b/libtrellis/src/Bels.cpp index 5111c8a..815828c 100644 --- a/libtrellis/src/Bels.cpp +++ b/libtrellis/src/Bels.cpp
@@ -128,6 +128,24 @@ } +void add_dcs(RoutingGraph &graph, int x, int y, int z) { + string name = string("DCS") + std::to_string(z); + RoutingBel bel; + bel.name = graph.ident(name); + bel.type = graph.ident("DCSC"); + bel.loc.x = x; + bel.loc.y = y; + bel.z = z + 4; + graph.add_bel_input(bel, graph.ident("CLK0"), 0, 0, graph.ident(fmt("G_CLK0_" << "DCS" << z))); + graph.add_bel_input(bel, graph.ident("CLK1"), 0, 0, graph.ident(fmt("G_CLK1_" << "DCS" << z))); + graph.add_bel_output(bel, graph.ident("DCSOUT"), 0, 0, graph.ident(fmt("G_DCSOUT_" << "DCS" << z))); + graph.add_bel_input(bel, graph.ident("MODESEL"), 0, 0, graph.ident(fmt("G_JMODESEL_" << "DCS" << z))); + graph.add_bel_input(bel, graph.ident("SEL0"), 0, 0, graph.ident(fmt("G_JSEL0_" << "DCS" << z))); + graph.add_bel_input(bel, graph.ident("SEL1"), 0, 0, graph.ident(fmt("G_JSEL1_" << "DCS" << z))); + graph.add_bel(bel); + +} + void add_bram(RoutingGraph &graph, int x, int y, int z) { string name = string("EBR") + std::to_string(z); RoutingBel bel;
diff --git a/libtrellis/src/Chip.cpp b/libtrellis/src/Chip.cpp index ce51a52..e804969 100644 --- a/libtrellis/src/Chip.cpp +++ b/libtrellis/src/Chip.cpp
@@ -167,6 +167,10 @@ if (tile->info.type == "BMID_0V" || tile->info.type == "BMID_0H") for (int z = 0; z < 16; z++) Ecp5Bels::add_dcc(*rg, x, y, "B", std::to_string(z)); + if (tile->info.type == "EBR_CMUX_UL" || tile->info.type == "DSP_CMUX_UL") + Ecp5Bels::add_dcs(*rg, x, y, 0); + if (tile->info.type == "EBR_CMUX_LL" || tile->info.type == "EBR_CMUX_LL_25K") + Ecp5Bels::add_dcs(*rg, x, y, 1); // RAM Bels if (tile->info.type == "MIB_EBR0" || tile->info.type == "EBR_CMUX_UR" || tile->info.type == "EBR_CMUX_LR" || tile->info.type == "EBR_CMUX_LR_25K")