Merge pull request #163 from cr1901/facade

MachXO2 Support: Part 3
diff --git a/database b/database
index 1320be7..f7f8375 160000
--- a/database
+++ b/database
@@ -1 +1 @@
-Subproject commit 1320be79e0f1e526ea4f9d454a80745cb5639eec
+Subproject commit f7f8375101dfa7f7d5ccb654ff8fcae73356ce48
diff --git a/fuzzers/machxo2/102-oscg/fuzzer.py b/fuzzers/machxo2/102-oscg/fuzzer.py
index eaac68b..a1310da 100644
--- a/fuzzers/machxo2/102-oscg/fuzzer.py
+++ b/fuzzers/machxo2/102-oscg/fuzzer.py
@@ -71,9 +71,11 @@
         cfg_r.setup()
         interconnect.fuzz_interconnect_with_netnames(
             cfg_r,
-            ["R1C4_JOSC_OSC"],
+            ["R1C4_JOSC_OSC",
+            "R1C4_JSTDBY_OSC"],
             bidir=True,
-            netdir_override={"R1C4_JOSC_OSC" : "driver"})
+            netdir_override={"R1C4_JOSC_OSC" : "driver",
+                             "R1C4_JSTDBY_OSC" : "sink"})
 
 if __name__ == "__main__":
     parser = argparse.ArgumentParser(description="OSCH Fuzzer.")
diff --git a/libtrellis/src/PyTrellis.cpp b/libtrellis/src/PyTrellis.cpp
index 03e211f..38ea056 100644
--- a/libtrellis/src/PyTrellis.cpp
+++ b/libtrellis/src/PyTrellis.cpp
@@ -304,6 +304,7 @@
             .def("set_value", &EnumSettingBits::set_value);
 
     class_<FixedConnection>(m, "FixedConnection")
+            .def(init<>())
             .def_readwrite("source", &FixedConnection::source)
             .def_readwrite("sink", &FixedConnection::sink);
 
diff --git a/libtrellis/src/RoutingGraph.cpp b/libtrellis/src/RoutingGraph.cpp
index 84eb625..85e2116 100644
--- a/libtrellis/src/RoutingGraph.cpp
+++ b/libtrellis/src/RoutingGraph.cpp
@@ -179,10 +179,25 @@
                       // wonderful 1-based column numbering, and lack of dedicated
                       // PIO tiles on the left and right.
                       // Top and bottom unaffected due to dedicated PIO tiles.
-                      bool pio_wire = (db_name.find("PADD") != string::npos ||
+                      // TODO: Convert to regex.
+                      bool pio_wire = (
+                          db_name.find("DI") != string::npos ||
+                          db_name.find("JDI") != string::npos ||
+                          db_name.find("PADD") != string::npos ||
+                          db_name.find("INDD") != string::npos ||
                           db_name.find("IOLDO") != string::npos ||
                           db_name.find("IOLTO") != string::npos ||
-                          db_name.find("JINCK") != string::npos);
+                          db_name.find("JCE") != string::npos ||
+                          db_name.find("JCLK") != string::npos ||
+                          db_name.find("JLSR") != string::npos ||
+                          db_name.find("JONEG") != string::npos ||
+                          db_name.find("JOPOS") != string::npos ||
+                          db_name.find("JTS") != string::npos ||
+                          db_name.find("JIN") != string::npos ||
+                          db_name.find("JIP") != string::npos ||
+                          // Connections to global mux
+                          db_name.find("JINCK") != string::npos
+                      );
 
                       if((id.loc.x == -1) && pio_wire)
                           id.loc.x = 0;
@@ -192,10 +207,24 @@
                   id.loc.x += std::stoi(g.substr(1));
 
                   if(id.loc.x > max_col) {
-                      bool pio_wire = (db_name.find("PADD") != string::npos ||
-                        db_name.find("IOLDO") != string::npos ||
-                        db_name.find("IOLTO") != string::npos||
-                        db_name.find("JINCK") != string::npos);
+                      bool pio_wire = (
+                          db_name.find("DI") != string::npos ||
+                          db_name.find("JDI") != string::npos ||
+                          db_name.find("PADD") != string::npos ||
+                          db_name.find("INDD") != string::npos ||
+                          db_name.find("IOLDO") != string::npos ||
+                          db_name.find("IOLTO") != string::npos ||
+                          db_name.find("JCE") != string::npos ||
+                          db_name.find("JCLK") != string::npos ||
+                          db_name.find("JLSR") != string::npos ||
+                          db_name.find("JONEG") != string::npos ||
+                          db_name.find("JOPOS") != string::npos ||
+                          db_name.find("JTS") != string::npos ||
+                          db_name.find("JIN") != string::npos ||
+                          db_name.find("JIP") != string::npos ||
+                          // Connections to global mux
+                          db_name.find("JINCK") != string::npos
+                      );
 
                       // Same deal as left side, except the position exceeds
                       // the maximum row.