Special-case routing sink whose config bits span across multiple tiles when building the routing graph.
diff --git a/libtrellis/src/RoutingGraph.cpp b/libtrellis/src/RoutingGraph.cpp index e5abd1e..e0d41f3 100644 --- a/libtrellis/src/RoutingGraph.cpp +++ b/libtrellis/src/RoutingGraph.cpp
@@ -368,6 +368,23 @@ regex_match(db_name, m, center_mux_glb_out) || regex_match(db_name, m, cib_out_to_glb) || regex_match(db_name, m, dcm_sig)) { + + // XXX: This is a MachXO2-1200HC-specific hack; VPRXCLKI0's routing + // config bits are split across multiple tiles. Arcs do not store data + // about their tile position in the routing graph (as that's the DB's + // responsibility). Even so, we do _not_ want the same physical arc + // that appears in two tiles in the DB appearing twice in the routing + // graph. So for now, special-case and remove the second arc at + // (12, 9). + // + // If more than one arc has this problem, we may need to change this + // function signature to be device-specific, and find a better way to + // store this info along with the routing graph besides special-casing. + if((db_name.find("G_VPRXCLKI0") != string::npos) && + row == 9 && + col == 12) + return RoutingId(); + curr_global.id = ident(db_name); curr_global.loc.x = center.second; curr_global.loc.y = center.first;