libtrellis: Add JTAGG, GSR, SEDGA, DTR, USRMCLK bels Signed-off-by: David Shah <dave@ds0.me>
diff --git a/libtrellis/src/Bels.cpp b/libtrellis/src/Bels.cpp index 2a8154e..56d81b9 100644 --- a/libtrellis/src/Bels.cpp +++ b/libtrellis/src/Bels.cpp
@@ -446,5 +446,73 @@ graph.add_bel(bel); } +void add_misc(RoutingGraph &graph, const std::string &name, int x, int y) { + std::string postfix; + RoutingBel bel; + + auto add_input = [&](const std::string &pin, bool j = true) { + graph.add_bel_input(bel, graph.ident(pin), x, y, graph.ident(fmt((j ? "J" : "") << pin << "_" << postfix))); + }; + auto add_output = [&](const std::string &pin, bool j = true) { + graph.add_bel_output(bel, graph.ident(pin), x, y, graph.ident(fmt((j ? "J" : "") << pin << "_" << postfix))); + }; + bel.name = graph.ident(name); + bel.type = graph.ident(name); + bel.loc.x = x; + bel.loc.y = y; + + if (name == "GSR") { + postfix = "GSR"; + bel.z = 0; + add_input("GSR"); + add_input("CLK"); + } else if (name == "JTAGG") { + postfix = "JTAG"; + bel.z = 1; + add_input("TCK"); + add_input("TMS"); + add_input("TDI"); + add_input("JTDO2"); + add_input("JTDO1"); + add_output("TDO"); + add_output("JTDI"); + add_output("JTCK"); + add_output("JRTI2"); + add_output("JRTI1"); + add_output("JSHIFT"); + add_output("JUPDATE"); + add_output("JRSTN"); + add_output("JCE2"); + add_output("JCE1"); + } else if (name == "OSCG") { + postfix = "OSC"; + bel.z = 2; + graph.add_bel_output(bel, graph.ident("OSC"), 0, 0, graph.ident("G_JOSC_OSC")); + add_output("SEDSTDBY", false); + } else if (name == "SEDGA") { + postfix = "SED"; + bel.z = 3; + add_input("SEDENABLE"); + add_input("SEDSTART"); + add_input("SEDFRCERR"); + add_output("SEDDONE"); + add_output("SEDINPROG"); + add_output("SEDERR"); + add_input("SEDSTDBY", false); + } else if (name == "DTR") { + postfix = "DTR"; + bel.z = 0; + add_input("STARTPULSE"); + for (int i = 0; i < 8; i++) + add_output("DTROUT" + std::to_string(i)); + } else if (name == "USRMCLK") { + postfix = "CCLK"; + bel.z = 0; + add_input("PADDO"); + add_input("PADDT"); + add_output("PADDI"); + } + graph.add_bel(bel); } } +} \ No newline at end of file