Ignore high fanout bounding box if routing a global net
- high fanout bounding box is too small (used for run-time optimization)
  however since clock sources are at the center of the chip the small
  bounding box will cause an unroutable design.
diff --git a/vpr/src/place/timing_place_lookup.cpp b/vpr/src/place/timing_place_lookup.cpp
index d3ee52c..81855ff 100755
--- a/vpr/src/place/timing_place_lookup.cpp
+++ b/vpr/src/place/timing_place_lookup.cpp
@@ -663,8 +663,10 @@
 
     std::vector<int> modified_rr_node_inf;
     RouterStats router_stats;
+
+    bool is_global_net = false; //TODO: how can we get the net id to determine if net is global
     t_heap* cheapest = timing_driven_route_connection(source_node, sink_node, target_criticality,
-            astar_fac, bend_cost, rt_root, bounding_box, 1, budgeting_inf, 0, 0, 0, 0, modified_rr_node_inf, router_stats);
+            astar_fac, bend_cost, rt_root, bounding_box, 1, budgeting_inf, 0, 0, 0, 0, modified_rr_node_inf, router_stats, is_global_net);
 
     if (cheapest == nullptr) {
         return false;
diff --git a/vpr/src/route/route_timing.cpp b/vpr/src/route/route_timing.cpp
index 880dffa..a093bad 100644
--- a/vpr/src/route/route_timing.cpp
+++ b/vpr/src/route/route_timing.cpp
@@ -149,7 +149,7 @@
         t_bb bounding_box, float bend_cost, float criticality_fac,
         int num_sinks, int target_node,
         float astar_fac, int highfanout_rlim, route_budgets &budgeting_inf, float max_delay, float min_delay,
-        float target_delay, float short_path_crit, RouterStats& router_stats);
+        float target_delay, float short_path_crit, RouterStats& router_stats, bool is_global_net);
 
 static void timing_driven_add_to_heap(const float criticality_fac, const float bend_cost, const float astar_fac,
         const route_budgets& budgeting_inf, const float max_delay, const float min_delay, const float target_delay, const float short_path_crit,
@@ -899,7 +899,7 @@
 
     t_heap * cheapest = timing_driven_route_connection(source_node, sink_node, target_criticality,
             astar_fac, bend_cost, rt_root, bounding_box, (int)cluster_ctx.clb_nlist.net_sinks(net_id).size(), budgeting_inf,
-            max_delay, min_delay, target_delay, short_path_crit, modified_rr_node_inf, router_stats);
+            max_delay, min_delay, target_delay, short_path_crit, modified_rr_node_inf, router_stats, cluster_ctx.clb_nlist.is_global_net(net_id));
 
     if (cheapest == nullptr) {
 		ClusterBlockId src_block = cluster_ctx.clb_nlist.net_driver_block(net_id);
@@ -940,7 +940,7 @@
 t_heap * timing_driven_route_connection(int source_node, int sink_node, float target_criticality,
         float astar_fac, float bend_cost, t_rt_node* rt_root, t_bb bounding_box, int num_sinks, route_budgets &budgeting_inf,
         float max_delay, float min_delay, float target_delay, float short_path_crit, std::vector<int>& modified_rr_node_inf,
-        RouterStats& router_stats) {
+        RouterStats& router_stats, bool is_global_net) {
     auto& route_ctx = g_vpr_ctx.mutable_routing();
 
     int highfanout_rlim = mark_node_expansion_by_bin(source_node, sink_node, rt_root, bounding_box, num_sinks);
@@ -1005,7 +1005,7 @@
             timing_driven_expand_neighbours(cheapest, bounding_box, bend_cost,
                     target_criticality, num_sinks, sink_node, astar_fac,
                     highfanout_rlim, budgeting_inf, max_delay, min_delay,
-                    target_delay, short_path_crit, router_stats);
+                    target_delay, short_path_crit, router_stats, is_global_net);
         }
 
         free_heap_data(cheapest);
@@ -1219,7 +1219,7 @@
         t_bb bounding_box, float bend_cost, float criticality_fac,
         int num_sinks, int target_node,
         float astar_fac, int highfanout_rlim, route_budgets& budgeting_inf, float max_delay, float min_delay,
-        float target_delay, float short_path_crit, RouterStats& router_stats) {
+        float target_delay, float short_path_crit, RouterStats& router_stats, bool is_global_net) {
 
     /* Puts all the rr_nodes adjacent to current on the heap.  rr_nodes outside *
      * the expanded bounding box specified in bounding_box are not added to the     *
@@ -1234,7 +1234,7 @@
     int target_xhigh = device_ctx.rr_nodes[target_node].xhigh();
     int target_yhigh = device_ctx.rr_nodes[target_node].yhigh();
 
-    bool high_fanout = is_high_fanout(num_sinks);
+    bool high_fanout = is_high_fanout(num_sinks) && !is_global_net;
 
     int num_edges = device_ctx.rr_nodes[inode].num_edges();
     for (int iconn = 0; iconn < num_edges; iconn++) {
diff --git a/vpr/src/route/route_timing.h b/vpr/src/route/route_timing.h
index 0350147..dcb58b6 100644
--- a/vpr/src/route/route_timing.h
+++ b/vpr/src/route/route_timing.h
@@ -49,7 +49,7 @@
 t_heap * timing_driven_route_connection(int source_node, int sink_node, float target_criticality,
         float astar_fac, float bend_cost, t_rt_node* rt_root, t_bb bounding_box, int num_sinks,
         route_budgets &budgeting_inf, float max_delay, float min_delay, float target_delay, float short_path_crit,
-        std::vector<int>& modified_rr_node_inf, RouterStats& router_stats);
+        std::vector<int>& modified_rr_node_inf, RouterStats& router_stats, bool is_global_net);
 
 struct timing_driven_route_structs {
     // data while timing driven route is active