From 8782a867e351640ec119a42f8e8ad202c6f29474 Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Tue, 20 May 2025 17:05:45 +0300 Subject: [PATCH 1/6] fixes in VPR Viewer for flat_routing=on --- vpr/src/base/vpr_api.cpp | 5 +- vpr/src/draw/draw.cpp | 12 +++- vpr/src/draw/draw_basic.cpp | 28 ++++++-- vpr/src/draw/draw_searchbar.cpp | 14 +++- vpr/src/draw/draw_types.h | 5 +- vpr/src/draw/search_bar.cpp | 117 +++++++++++++++++++++++++++----- vpr/src/draw/search_bar.h | 5 ++ 7 files changed, 156 insertions(+), 30 deletions(-) diff --git a/vpr/src/base/vpr_api.cpp b/vpr/src/base/vpr_api.cpp index 4dc4732c90c..95ce3f8483b 100644 --- a/vpr/src/base/vpr_api.cpp +++ b/vpr/src/base/vpr_api.cpp @@ -420,7 +420,10 @@ bool vpr_flow(t_vpr_setup& vpr_setup, t_arch& arch) { } // TODO: Placer still assumes that cluster net list is used - graphics can not work with flat routing yet - vpr_init_graphics(vpr_setup, arch, false); +//hotfix-vpr-flat-routing-viewer + bool is_flat = vpr_setup.RouterOpts.flat_routing; + vpr_init_graphics(vpr_setup, arch, is_flat); +//hotfix-vpr-flat-routing-viewer vpr_init_server(vpr_setup); diff --git a/vpr/src/draw/draw.cpp b/vpr/src/draw/draw.cpp index 0f3ec5902fe..732d1ec5f54 100644 --- a/vpr/src/draw/draw.cpp +++ b/vpr/src/draw/draw.cpp @@ -493,6 +493,9 @@ void alloc_draw_structs(const t_arch* arch) { t_draw_state* draw_state = get_draw_state_vars(); auto& device_ctx = g_vpr_ctx.device(); auto& cluster_ctx = g_vpr_ctx.clustering(); +//hotfix-vpr-flat-routing-viewer + auto& atom_ctx = g_vpr_ctx.atom(); +//hotfix-vpr-flat-routing-viewer /* Allocate the structures needed to draw the placement and routing-> Set * * up the default colors for blocks and nets. */ @@ -502,7 +505,14 @@ void alloc_draw_structs(const t_arch* arch) { /* For sub-block drawings inside clbs */ draw_internal_alloc_blk(); - draw_state->net_color.resize(cluster_ctx.clb_nlist.nets().size()); +//hotfix-vpr-flat-routing-viewer + if (draw_state->is_flat) { + draw_state->net_color.resize(atom_ctx.nlist.nets().size()); + } else { + draw_state->net_color.resize(cluster_ctx.clb_nlist.nets().size()); + } +//hotfix-vpr-flat-routing-viewer + draw_state->block_color_.resize(cluster_ctx.clb_nlist.blocks().size()); draw_state->use_default_block_color_.resize( cluster_ctx.clb_nlist.blocks().size()); diff --git a/vpr/src/draw/draw_basic.cpp b/vpr/src/draw/draw_basic.cpp index 82e0fa134ca..b0fd2a44539 100644 --- a/vpr/src/draw/draw_basic.cpp +++ b/vpr/src/draw/draw_basic.cpp @@ -539,6 +539,9 @@ void drawroute(enum e_draw_net_type draw_net_type, ezgl::renderer* g) { /* Next free track in each channel segment if routing is GLOBAL */ auto& cluster_ctx = g_vpr_ctx.clustering(); +//hotfix-vpr-flat-routing-viewer + auto& atom_ctx = g_vpr_ctx.atom(); +//hotfix-vpr-flat-routing-viewer t_draw_state* draw_state = get_draw_state_vars(); @@ -548,14 +551,25 @@ void drawroute(enum e_draw_net_type draw_net_type, ezgl::renderer* g) { g->set_color(ezgl::BLACK, ezgl::BLACK.alpha * NET_ALPHA); /* Now draw each net, one by one. */ +//hotfix-vpr-flat-routing-viewer + if (draw_state->is_flat) { + for (auto net_id : atom_ctx.nlist.nets()) { + if (draw_net_type == HIGHLIGHTED + && draw_state->net_color[net_id] == ezgl::BLACK) + continue; + + draw_routed_net((ParentNetId&)net_id, g); + } /* End for (each net) */ + } else { + for (auto net_id : cluster_ctx.clb_nlist.nets()) { + if (draw_net_type == HIGHLIGHTED + && draw_state->net_color[net_id] == ezgl::BLACK) + continue; - for (auto net_id : cluster_ctx.clb_nlist.nets()) { - if (draw_net_type == HIGHLIGHTED - && draw_state->net_color[net_id] == ezgl::BLACK) - continue; - - draw_routed_net((ParentNetId&)net_id, g); - } /* End for (each net) */ + draw_routed_net((ParentNetId&)net_id, g); + } /* End for (each net) */ + } +//hotfix-vpr-flat-routing-viewer } void draw_routed_net(ParentNetId net_id, ezgl::renderer* g) { diff --git a/vpr/src/draw/draw_searchbar.cpp b/vpr/src/draw/draw_searchbar.cpp index 28f174a50dd..3f0b3ebad60 100644 --- a/vpr/src/draw/draw_searchbar.cpp +++ b/vpr/src/draw/draw_searchbar.cpp @@ -231,6 +231,9 @@ void deselect_all() { t_draw_state* draw_state = get_draw_state_vars(); const auto& cluster_ctx = g_vpr_ctx.clustering(); +//hotfix-vpr-flat-routing-viewer + const auto& atom_ctx = g_vpr_ctx.atom(); +//hotfix-vpr-flat-routing-viewer const auto& device_ctx = g_vpr_ctx.device(); /* Create some colour highlighting */ @@ -239,8 +242,15 @@ void deselect_all() { draw_reset_blk_color(blk_id); } - for (auto net_id : cluster_ctx.clb_nlist.nets()) - draw_state->net_color[net_id] = ezgl::BLACK; +//hotfix-vpr-flat-routing-viewer + if (draw_state->is_flat) { + for (auto net_id : atom_ctx.nlist.nets()) + draw_state->net_color[net_id] = ezgl::BLACK; + } else { + for (auto net_id : cluster_ctx.clb_nlist.nets()) + draw_state->net_color[net_id] = ezgl::BLACK; + } +//hotfix-vpr-flat-routing-viewer for (RRNodeId inode : device_ctx.rr_graph.nodes()) { draw_state->draw_rr_node[inode].color = DEFAULT_RR_NODE_COLOR; diff --git a/vpr/src/draw/draw_types.h b/vpr/src/draw/draw_types.h index 8d96ceaf732..debb80b4bed 100644 --- a/vpr/src/draw/draw_types.h +++ b/vpr/src/draw/draw_types.h @@ -238,8 +238,9 @@ struct t_draw_state { char default_message[vtr::bufsize]; ///@brief color in which each net should be drawn. [0..cluster_ctx.clb_nlist.nets().size()-1] - vtr::vector net_color; - +//hotfix-vpr-flat-routing-viewer + vtr::vector net_color; +//hotfix-vpr-flat-routing-viewer /** * @brief stores the state information of each routing resource. * diff --git a/vpr/src/draw/search_bar.cpp b/vpr/src/draw/search_bar.cpp index 46261da44d5..dd8236db94d 100644 --- a/vpr/src/draw/search_bar.cpp +++ b/vpr/src/draw/search_bar.cpp @@ -15,6 +15,7 @@ #include "physical_types.h" #ifndef NO_GRAPHICS + #include #include @@ -42,6 +43,10 @@ #include "route_export.h" #include "search_bar.h" +//hotfix-vpr-flat-routing-viewer +# include "old_traceback.h" +//hotfix-vpr-flat-routing-viewer + //To process key presses we need the X11 keysym definitions, //which are unavailable when building with MINGW #if defined(X11) && !defined(__MINGW32__) @@ -54,6 +59,38 @@ extern std::string rr_highlight_message; +//hotfix-vpr-flat-routing-viewer +bool is_net_unrouted(AtomNetId atomic_net_id) +{ + auto& route_ctx = g_vpr_ctx.mutable_routing(); + return !route_ctx.route_trees[atomic_net_id].has_value(); +} + +bool is_net_fully_absorbed(AtomNetId atomic_net_id) +{ + const auto& rr_graph = g_vpr_ctx.device().rr_graph; + auto& route_ctx = g_vpr_ctx.mutable_routing(); + + bool is_absorbed = true; + + t_trace* head = TracebackCompat::traceback_from_route_tree(route_ctx.route_trees[atomic_net_id].value()); + t_trace* tptr = head; + while (tptr != nullptr) { + RRNodeId inode = RRNodeId(tptr->index); + t_rr_type rr_type = rr_graph.node_type(inode); + + if (rr_type == CHANX || rr_type == CHANY) { + is_absorbed = false; + break; + } + tptr = tptr->next; + } + free_traceback(head); + + return is_absorbed; +} +//hotfix-vpr-flat-routing-viewer + void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { auto& device_ctx = g_vpr_ctx.device(); auto& cluster_ctx = g_vpr_ctx.clustering(); @@ -72,6 +109,10 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { // reset deselect_all(); +//hotfix-vpr-flat-routing-viewer + t_draw_state* draw_state = get_draw_state_vars(); +//hotfix-vpr-flat-routing-viewer + if (search_type == "RR Node ID") { int rr_node_id = -1; ss >> rr_node_id; @@ -135,15 +176,35 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { else if (search_type == "Net ID") { int net_id = -1; ss >> net_id; - - // valid net id check - if (!cluster_ctx.clb_nlist.valid_net_id(ClusterNetId(net_id))) { - warning_dialog_box("Invalid Net ID"); - app->refresh_drawing(); - return; +//hotfix-vpr-flat-routing-viewer + if (draw_state->is_flat) { + AtomNetId atom_net_id = AtomNetId(net_id); + if (!atom_ctx.nlist.valid_net_id(atom_net_id)) { + warning_dialog_box("Invalid Net ID"); + app->refresh_drawing(); + return; + } + if (is_net_unrouted(atom_net_id)) { + warning_dialog_box("Net is unrouted"); + app->refresh_drawing(); + return; + } + if (is_net_fully_absorbed(atom_net_id)) { + warning_dialog_box("Net is fully absorbed"); + app->refresh_drawing(); + return; + } + highlight_nets((ClusterNetId)net_id); + } else { + // valid net id check + if (!cluster_ctx.clb_nlist.valid_net_id(ClusterNetId(net_id))) { + warning_dialog_box("Invalid Net ID"); + app->refresh_drawing(); + return; + } + highlight_nets((ClusterNetId)net_id); } - - highlight_nets((ClusterNetId)net_id); +//hotfix-vpr-flat-routing-viewer } else if (search_type == "Net Name") { @@ -151,17 +212,39 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { //So we only need to search this one std::string net_name; ss >> net_name; - AtomNetId atom_net_id = atom_ctx.netlist().find_net(net_name); - if (atom_net_id == AtomNetId::INVALID()) { - warning_dialog_box("Invalid Net Name"); - return; //name not exist - } - - const auto clb_nets = atom_ctx.lookup().clb_nets(atom_net_id); - for (auto clb_net_id : clb_nets.value()) { - highlight_nets(clb_net_id); +//hotfix-vpr-flat-routing-viewer + if (draw_state->is_flat) { + AtomNetId atom_net_id = atom_ctx.nlist.find_net(net_name); + if (atom_net_id == AtomNetId::INVALID()) { + warning_dialog_box("Invalid Net Name"); + app->refresh_drawing(); + return; + } + if (is_net_unrouted(atom_net_id)) { + warning_dialog_box("Net is unrouted"); + app->refresh_drawing(); + return; + } + if (is_net_fully_absorbed(atom_net_id)) { + warning_dialog_box("Net is fully absorbed"); + app->refresh_drawing(); + return; + } + highlight_nets(convert_to_cluster_net_id(atom_net_id)); + } else { + AtomNetId atom_net_id = atom_ctx.nlist.find_net(net_name); + + if (atom_net_id == AtomNetId::INVALID()) { + warning_dialog_box("Invalid Net Name"); + app->refresh_drawing(); + return; + } + for(auto clb_net_id: atom_ctx.lookup.clb_nets(atom_net_id).value()){ + highlight_nets(clb_net_id); + } } +//hotfix-vpr-flat-routing-viewer } else diff --git a/vpr/src/draw/search_bar.h b/vpr/src/draw/search_bar.h index 5aafd49435d..415d94a08d8 100644 --- a/vpr/src/draw/search_bar.h +++ b/vpr/src/draw/search_bar.h @@ -19,6 +19,11 @@ #include "ezgl/graphics.hpp" #include "draw_color.h" +//hotfix-vpr-flat-routing-viewer +bool is_net_unrouted(AtomNetId atomic_net_id); +bool is_net_fully_absorbed(AtomNetId atomic_net_id); +//hotfix-vpr-flat-routing-viewer + void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app); bool highlight_rr_nodes(RRNodeId hit_node); void auto_zoom_rr_node(RRNodeId rr_node_id); From 83e62d8a65bc0f42272a32e91abddd5c84fb1178 Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Tue, 20 May 2025 17:59:50 +0300 Subject: [PATCH 2/6] fix build errors after cherry-pick --- vpr/src/base/vpr_api.cpp | 1 - vpr/src/draw/draw.cpp | 2 +- vpr/src/draw/draw_basic.cpp | 2 +- vpr/src/draw/draw_searchbar.cpp | 2 +- vpr/src/draw/search_bar.cpp | 12 ++++++------ 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/vpr/src/base/vpr_api.cpp b/vpr/src/base/vpr_api.cpp index 95ce3f8483b..b69f436fb61 100644 --- a/vpr/src/base/vpr_api.cpp +++ b/vpr/src/base/vpr_api.cpp @@ -467,7 +467,6 @@ bool vpr_flow(t_vpr_setup& vpr_setup, t_arch& arch) { block_locs); } - bool is_flat = vpr_setup.RouterOpts.flat_routing; const Netlist<>& router_net_list = is_flat ? (const Netlist<>&)g_vpr_ctx.atom().netlist() : (const Netlist<>&)g_vpr_ctx.clustering().clb_nlist; if (is_flat) { VTR_LOG_WARN("Disabling port equivalence in the architecture since flat routing is enabled.\n"); diff --git a/vpr/src/draw/draw.cpp b/vpr/src/draw/draw.cpp index 732d1ec5f54..bd49d23d73a 100644 --- a/vpr/src/draw/draw.cpp +++ b/vpr/src/draw/draw.cpp @@ -507,7 +507,7 @@ void alloc_draw_structs(const t_arch* arch) { //hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { - draw_state->net_color.resize(atom_ctx.nlist.nets().size()); + draw_state->net_color.resize(atom_ctx.netlist().nets().size()); } else { draw_state->net_color.resize(cluster_ctx.clb_nlist.nets().size()); } diff --git a/vpr/src/draw/draw_basic.cpp b/vpr/src/draw/draw_basic.cpp index b0fd2a44539..13186f14ad5 100644 --- a/vpr/src/draw/draw_basic.cpp +++ b/vpr/src/draw/draw_basic.cpp @@ -553,7 +553,7 @@ void drawroute(enum e_draw_net_type draw_net_type, ezgl::renderer* g) { /* Now draw each net, one by one. */ //hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { - for (auto net_id : atom_ctx.nlist.nets()) { + for (auto net_id : atom_ctx.netlist().nets()) { if (draw_net_type == HIGHLIGHTED && draw_state->net_color[net_id] == ezgl::BLACK) continue; diff --git a/vpr/src/draw/draw_searchbar.cpp b/vpr/src/draw/draw_searchbar.cpp index 3f0b3ebad60..8166293513d 100644 --- a/vpr/src/draw/draw_searchbar.cpp +++ b/vpr/src/draw/draw_searchbar.cpp @@ -244,7 +244,7 @@ void deselect_all() { //hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { - for (auto net_id : atom_ctx.nlist.nets()) + for (auto net_id : atom_ctx.netlist().nets()) draw_state->net_color[net_id] = ezgl::BLACK; } else { for (auto net_id : cluster_ctx.clb_nlist.nets()) diff --git a/vpr/src/draw/search_bar.cpp b/vpr/src/draw/search_bar.cpp index dd8236db94d..47642899227 100644 --- a/vpr/src/draw/search_bar.cpp +++ b/vpr/src/draw/search_bar.cpp @@ -77,9 +77,9 @@ bool is_net_fully_absorbed(AtomNetId atomic_net_id) t_trace* tptr = head; while (tptr != nullptr) { RRNodeId inode = RRNodeId(tptr->index); - t_rr_type rr_type = rr_graph.node_type(inode); + e_rr_type rr_type = rr_graph.node_type(inode); - if (rr_type == CHANX || rr_type == CHANY) { + if (rr_type == e_rr_type::CHANX || rr_type == e_rr_type::CHANY) { is_absorbed = false; break; } @@ -179,7 +179,7 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { //hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { AtomNetId atom_net_id = AtomNetId(net_id); - if (!atom_ctx.nlist.valid_net_id(atom_net_id)) { + if (!atom_ctx.netlist().valid_net_id(atom_net_id)) { warning_dialog_box("Invalid Net ID"); app->refresh_drawing(); return; @@ -215,7 +215,7 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { //hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { - AtomNetId atom_net_id = atom_ctx.nlist.find_net(net_name); + AtomNetId atom_net_id = atom_ctx.netlist().find_net(net_name); if (atom_net_id == AtomNetId::INVALID()) { warning_dialog_box("Invalid Net Name"); app->refresh_drawing(); @@ -233,14 +233,14 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { } highlight_nets(convert_to_cluster_net_id(atom_net_id)); } else { - AtomNetId atom_net_id = atom_ctx.nlist.find_net(net_name); + AtomNetId atom_net_id = atom_ctx.netlist().find_net(net_name); if (atom_net_id == AtomNetId::INVALID()) { warning_dialog_box("Invalid Net Name"); app->refresh_drawing(); return; } - for(auto clb_net_id: atom_ctx.lookup.clb_nets(atom_net_id).value()){ + for(auto clb_net_id: atom_ctx.lookup().clb_nets(atom_net_id).value()){ highlight_nets(clb_net_id); } } From 104067ec5424d7034efaa237d7821275e46e215e Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Tue, 20 May 2025 18:05:52 +0300 Subject: [PATCH 3/6] remove inner //hotfix-vpr-flat-routing-viewer mark toseparate one hotfix from another --- vpr/src/base/vpr_api.cpp | 2 -- vpr/src/draw/draw.cpp | 4 ---- vpr/src/draw/draw_basic.cpp | 4 ---- vpr/src/draw/draw_searchbar.cpp | 4 ---- vpr/src/draw/draw_types.h | 3 +-- vpr/src/draw/search_bar.cpp | 11 ----------- vpr/src/draw/search_bar.h | 2 -- 7 files changed, 1 insertion(+), 29 deletions(-) diff --git a/vpr/src/base/vpr_api.cpp b/vpr/src/base/vpr_api.cpp index b69f436fb61..4c251d29b16 100644 --- a/vpr/src/base/vpr_api.cpp +++ b/vpr/src/base/vpr_api.cpp @@ -420,10 +420,8 @@ bool vpr_flow(t_vpr_setup& vpr_setup, t_arch& arch) { } // TODO: Placer still assumes that cluster net list is used - graphics can not work with flat routing yet -//hotfix-vpr-flat-routing-viewer bool is_flat = vpr_setup.RouterOpts.flat_routing; vpr_init_graphics(vpr_setup, arch, is_flat); -//hotfix-vpr-flat-routing-viewer vpr_init_server(vpr_setup); diff --git a/vpr/src/draw/draw.cpp b/vpr/src/draw/draw.cpp index bd49d23d73a..8666b58e788 100644 --- a/vpr/src/draw/draw.cpp +++ b/vpr/src/draw/draw.cpp @@ -493,9 +493,7 @@ void alloc_draw_structs(const t_arch* arch) { t_draw_state* draw_state = get_draw_state_vars(); auto& device_ctx = g_vpr_ctx.device(); auto& cluster_ctx = g_vpr_ctx.clustering(); -//hotfix-vpr-flat-routing-viewer auto& atom_ctx = g_vpr_ctx.atom(); -//hotfix-vpr-flat-routing-viewer /* Allocate the structures needed to draw the placement and routing-> Set * * up the default colors for blocks and nets. */ @@ -505,13 +503,11 @@ void alloc_draw_structs(const t_arch* arch) { /* For sub-block drawings inside clbs */ draw_internal_alloc_blk(); -//hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { draw_state->net_color.resize(atom_ctx.netlist().nets().size()); } else { draw_state->net_color.resize(cluster_ctx.clb_nlist.nets().size()); } -//hotfix-vpr-flat-routing-viewer draw_state->block_color_.resize(cluster_ctx.clb_nlist.blocks().size()); draw_state->use_default_block_color_.resize( diff --git a/vpr/src/draw/draw_basic.cpp b/vpr/src/draw/draw_basic.cpp index 13186f14ad5..c6b669a4264 100644 --- a/vpr/src/draw/draw_basic.cpp +++ b/vpr/src/draw/draw_basic.cpp @@ -539,9 +539,7 @@ void drawroute(enum e_draw_net_type draw_net_type, ezgl::renderer* g) { /* Next free track in each channel segment if routing is GLOBAL */ auto& cluster_ctx = g_vpr_ctx.clustering(); -//hotfix-vpr-flat-routing-viewer auto& atom_ctx = g_vpr_ctx.atom(); -//hotfix-vpr-flat-routing-viewer t_draw_state* draw_state = get_draw_state_vars(); @@ -551,7 +549,6 @@ void drawroute(enum e_draw_net_type draw_net_type, ezgl::renderer* g) { g->set_color(ezgl::BLACK, ezgl::BLACK.alpha * NET_ALPHA); /* Now draw each net, one by one. */ -//hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { for (auto net_id : atom_ctx.netlist().nets()) { if (draw_net_type == HIGHLIGHTED @@ -569,7 +566,6 @@ void drawroute(enum e_draw_net_type draw_net_type, ezgl::renderer* g) { draw_routed_net((ParentNetId&)net_id, g); } /* End for (each net) */ } -//hotfix-vpr-flat-routing-viewer } void draw_routed_net(ParentNetId net_id, ezgl::renderer* g) { diff --git a/vpr/src/draw/draw_searchbar.cpp b/vpr/src/draw/draw_searchbar.cpp index 8166293513d..42cc22936cc 100644 --- a/vpr/src/draw/draw_searchbar.cpp +++ b/vpr/src/draw/draw_searchbar.cpp @@ -231,9 +231,7 @@ void deselect_all() { t_draw_state* draw_state = get_draw_state_vars(); const auto& cluster_ctx = g_vpr_ctx.clustering(); -//hotfix-vpr-flat-routing-viewer const auto& atom_ctx = g_vpr_ctx.atom(); -//hotfix-vpr-flat-routing-viewer const auto& device_ctx = g_vpr_ctx.device(); /* Create some colour highlighting */ @@ -242,7 +240,6 @@ void deselect_all() { draw_reset_blk_color(blk_id); } -//hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { for (auto net_id : atom_ctx.netlist().nets()) draw_state->net_color[net_id] = ezgl::BLACK; @@ -250,7 +247,6 @@ void deselect_all() { for (auto net_id : cluster_ctx.clb_nlist.nets()) draw_state->net_color[net_id] = ezgl::BLACK; } -//hotfix-vpr-flat-routing-viewer for (RRNodeId inode : device_ctx.rr_graph.nodes()) { draw_state->draw_rr_node[inode].color = DEFAULT_RR_NODE_COLOR; diff --git a/vpr/src/draw/draw_types.h b/vpr/src/draw/draw_types.h index debb80b4bed..c30c74c77e8 100644 --- a/vpr/src/draw/draw_types.h +++ b/vpr/src/draw/draw_types.h @@ -238,9 +238,8 @@ struct t_draw_state { char default_message[vtr::bufsize]; ///@brief color in which each net should be drawn. [0..cluster_ctx.clb_nlist.nets().size()-1] -//hotfix-vpr-flat-routing-viewer vtr::vector net_color; -//hotfix-vpr-flat-routing-viewer + /** * @brief stores the state information of each routing resource. * diff --git a/vpr/src/draw/search_bar.cpp b/vpr/src/draw/search_bar.cpp index 47642899227..06b54863996 100644 --- a/vpr/src/draw/search_bar.cpp +++ b/vpr/src/draw/search_bar.cpp @@ -42,10 +42,7 @@ #include "hsl.h" #include "route_export.h" #include "search_bar.h" - -//hotfix-vpr-flat-routing-viewer # include "old_traceback.h" -//hotfix-vpr-flat-routing-viewer //To process key presses we need the X11 keysym definitions, //which are unavailable when building with MINGW @@ -59,7 +56,6 @@ extern std::string rr_highlight_message; -//hotfix-vpr-flat-routing-viewer bool is_net_unrouted(AtomNetId atomic_net_id) { auto& route_ctx = g_vpr_ctx.mutable_routing(); @@ -89,7 +85,6 @@ bool is_net_fully_absorbed(AtomNetId atomic_net_id) return is_absorbed; } -//hotfix-vpr-flat-routing-viewer void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { auto& device_ctx = g_vpr_ctx.device(); @@ -109,9 +104,7 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { // reset deselect_all(); -//hotfix-vpr-flat-routing-viewer t_draw_state* draw_state = get_draw_state_vars(); -//hotfix-vpr-flat-routing-viewer if (search_type == "RR Node ID") { int rr_node_id = -1; @@ -176,7 +169,6 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { else if (search_type == "Net ID") { int net_id = -1; ss >> net_id; -//hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { AtomNetId atom_net_id = AtomNetId(net_id); if (!atom_ctx.netlist().valid_net_id(atom_net_id)) { @@ -204,7 +196,6 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { } highlight_nets((ClusterNetId)net_id); } -//hotfix-vpr-flat-routing-viewer } else if (search_type == "Net Name") { @@ -213,7 +204,6 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { std::string net_name; ss >> net_name; -//hotfix-vpr-flat-routing-viewer if (draw_state->is_flat) { AtomNetId atom_net_id = atom_ctx.netlist().find_net(net_name); if (atom_net_id == AtomNetId::INVALID()) { @@ -244,7 +234,6 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { highlight_nets(clb_net_id); } } -//hotfix-vpr-flat-routing-viewer } else diff --git a/vpr/src/draw/search_bar.h b/vpr/src/draw/search_bar.h index 415d94a08d8..0580ec3a30c 100644 --- a/vpr/src/draw/search_bar.h +++ b/vpr/src/draw/search_bar.h @@ -19,10 +19,8 @@ #include "ezgl/graphics.hpp" #include "draw_color.h" -//hotfix-vpr-flat-routing-viewer bool is_net_unrouted(AtomNetId atomic_net_id); bool is_net_fully_absorbed(AtomNetId atomic_net_id); -//hotfix-vpr-flat-routing-viewer void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app); bool highlight_rr_nodes(RRNodeId hit_node); From a76ce0fb56d0547228b21a26e920c12b447e2b09 Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Tue, 20 May 2025 20:53:46 +0300 Subject: [PATCH 4/6] make format --- vpr/src/draw/search_bar.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/vpr/src/draw/search_bar.cpp b/vpr/src/draw/search_bar.cpp index 06b54863996..1c2fd71850f 100644 --- a/vpr/src/draw/search_bar.cpp +++ b/vpr/src/draw/search_bar.cpp @@ -42,7 +42,7 @@ #include "hsl.h" #include "route_export.h" #include "search_bar.h" -# include "old_traceback.h" +#include "old_traceback.h" //To process key presses we need the X11 keysym definitions, //which are unavailable when building with MINGW @@ -56,14 +56,12 @@ extern std::string rr_highlight_message; -bool is_net_unrouted(AtomNetId atomic_net_id) -{ +bool is_net_unrouted(AtomNetId atomic_net_id) { auto& route_ctx = g_vpr_ctx.mutable_routing(); return !route_ctx.route_trees[atomic_net_id].has_value(); } -bool is_net_fully_absorbed(AtomNetId atomic_net_id) -{ +bool is_net_fully_absorbed(AtomNetId atomic_net_id) { const auto& rr_graph = g_vpr_ctx.device().rr_graph; auto& route_ctx = g_vpr_ctx.mutable_routing(); @@ -187,7 +185,7 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { return; } highlight_nets((ClusterNetId)net_id); - } else { + } else { // valid net id check if (!cluster_ctx.clb_nlist.valid_net_id(ClusterNetId(net_id))) { warning_dialog_box("Invalid Net ID"); @@ -230,7 +228,7 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { app->refresh_drawing(); return; } - for(auto clb_net_id: atom_ctx.lookup().clb_nets(atom_net_id).value()){ + for (auto clb_net_id : atom_ctx.lookup().clb_nets(atom_net_id).value()) { highlight_nets(clb_net_id); } } From 5ef1caa5407c0a6a8ea2be75915c88822fa4dff2 Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Wed, 21 May 2025 17:55:53 +0300 Subject: [PATCH 5/6] replace keyword `auto` with specific type --- vpr/src/draw/draw.cpp | 2 +- vpr/src/draw/draw_basic.cpp | 6 +++--- vpr/src/draw/draw_searchbar.cpp | 2 +- vpr/src/draw/search_bar.cpp | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/vpr/src/draw/draw.cpp b/vpr/src/draw/draw.cpp index 8666b58e788..7b7fa174898 100644 --- a/vpr/src/draw/draw.cpp +++ b/vpr/src/draw/draw.cpp @@ -493,7 +493,7 @@ void alloc_draw_structs(const t_arch* arch) { t_draw_state* draw_state = get_draw_state_vars(); auto& device_ctx = g_vpr_ctx.device(); auto& cluster_ctx = g_vpr_ctx.clustering(); - auto& atom_ctx = g_vpr_ctx.atom(); + const AtomContext& atom_ctx = g_vpr_ctx.atom(); /* Allocate the structures needed to draw the placement and routing-> Set * * up the default colors for blocks and nets. */ diff --git a/vpr/src/draw/draw_basic.cpp b/vpr/src/draw/draw_basic.cpp index c6b669a4264..15e8738cddc 100644 --- a/vpr/src/draw/draw_basic.cpp +++ b/vpr/src/draw/draw_basic.cpp @@ -539,7 +539,7 @@ void drawroute(enum e_draw_net_type draw_net_type, ezgl::renderer* g) { /* Next free track in each channel segment if routing is GLOBAL */ auto& cluster_ctx = g_vpr_ctx.clustering(); - auto& atom_ctx = g_vpr_ctx.atom(); + const AtomContext& atom_ctx = g_vpr_ctx.atom(); t_draw_state* draw_state = get_draw_state_vars(); @@ -550,7 +550,7 @@ void drawroute(enum e_draw_net_type draw_net_type, ezgl::renderer* g) { /* Now draw each net, one by one. */ if (draw_state->is_flat) { - for (auto net_id : atom_ctx.netlist().nets()) { + for (AtomNetId net_id : atom_ctx.netlist().nets()) { if (draw_net_type == HIGHLIGHTED && draw_state->net_color[net_id] == ezgl::BLACK) continue; @@ -558,7 +558,7 @@ void drawroute(enum e_draw_net_type draw_net_type, ezgl::renderer* g) { draw_routed_net((ParentNetId&)net_id, g); } /* End for (each net) */ } else { - for (auto net_id : cluster_ctx.clb_nlist.nets()) { + for (ClusterNetId net_id : cluster_ctx.clb_nlist.nets()) { if (draw_net_type == HIGHLIGHTED && draw_state->net_color[net_id] == ezgl::BLACK) continue; diff --git a/vpr/src/draw/draw_searchbar.cpp b/vpr/src/draw/draw_searchbar.cpp index 42cc22936cc..bd3cf57a400 100644 --- a/vpr/src/draw/draw_searchbar.cpp +++ b/vpr/src/draw/draw_searchbar.cpp @@ -231,7 +231,7 @@ void deselect_all() { t_draw_state* draw_state = get_draw_state_vars(); const auto& cluster_ctx = g_vpr_ctx.clustering(); - const auto& atom_ctx = g_vpr_ctx.atom(); + const AtomContext& atom_ctx = g_vpr_ctx.atom(); const auto& device_ctx = g_vpr_ctx.device(); /* Create some colour highlighting */ diff --git a/vpr/src/draw/search_bar.cpp b/vpr/src/draw/search_bar.cpp index 1c2fd71850f..a732350e055 100644 --- a/vpr/src/draw/search_bar.cpp +++ b/vpr/src/draw/search_bar.cpp @@ -57,13 +57,13 @@ extern std::string rr_highlight_message; bool is_net_unrouted(AtomNetId atomic_net_id) { - auto& route_ctx = g_vpr_ctx.mutable_routing(); + RoutingContext& route_ctx = g_vpr_ctx.mutable_routing(); return !route_ctx.route_trees[atomic_net_id].has_value(); } bool is_net_fully_absorbed(AtomNetId atomic_net_id) { - const auto& rr_graph = g_vpr_ctx.device().rr_graph; - auto& route_ctx = g_vpr_ctx.mutable_routing(); + const RRGraphView& rr_graph = g_vpr_ctx.device().rr_graph; + RoutingContext& route_ctx = g_vpr_ctx.mutable_routing(); bool is_absorbed = true; From c450851cb0e921a474db6894d14f74240b4ef64f Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Wed, 21 May 2025 22:05:18 +0300 Subject: [PATCH 6/6] fix 'possibly dangling reference to a temporary' --- vpr/src/draw/search_bar.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/vpr/src/draw/search_bar.cpp b/vpr/src/draw/search_bar.cpp index a732350e055..9512adae5fa 100644 --- a/vpr/src/draw/search_bar.cpp +++ b/vpr/src/draw/search_bar.cpp @@ -228,8 +228,11 @@ void search_and_highlight(GtkWidget* /*widget*/, ezgl::application* app) { app->refresh_drawing(); return; } - for (auto clb_net_id : atom_ctx.lookup().clb_nets(atom_net_id).value()) { - highlight_nets(clb_net_id); + auto clb_net_ids_opt = atom_ctx.lookup().clb_nets(atom_net_id); + if (clb_net_ids_opt.has_value()) { + for (auto clb_net_id : clb_net_ids_opt.value()) { + highlight_nets(clb_net_id); + } } } }