Skip to content

Commit 1f13be8

Browse files
doxygen comment for label_wire_muxes()
1 parent a9b490a commit 1f13be8

File tree

3 files changed

+28
-23
lines changed

3 files changed

+28
-23
lines changed

vpr/src/route/rr_graph_generation/rr_graph.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1516,7 +1516,7 @@ static std::function<void(t_chan_width*)> alloc_and_load_rr_graph(RRGraphBuilder
15161516
}
15171517
}
15181518

1519-
//Create the actual OPIN->CHANX/CHANY edges
1519+
// Create the actual OPIN->CHANX/CHANY edges
15201520
uniquify_edges(rr_edges_to_create);
15211521
alloc_and_load_edges(rr_graph_builder, rr_edges_to_create);
15221522
num_edges += rr_edges_to_create.size();

vpr/src/route/rr_graph_generation/rr_graph2.cpp

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,17 @@ static int vpr_to_phy_track(const int itrack,
130130
const t_chan_seg_details* seg_details,
131131
const enum e_directionality directionality);
132132

133+
134+
/**
135+
* @brief Identifies and labels all mux endpoints at a given channel segment coordinate.
136+
*
137+
* This routine scans all routing tracks within a channel segment (specified by
138+
* 'chan_num' and 'seg_num') and collects the track indices corresponding to
139+
* valid mux endpoints that can be driven by OPINs in that channel segment.
140+
* The resulting list of eligible tracks is returned in natural (increasing) track order.
141+
*
142+
* @details If @p seg_type_index is UNDEFINED, all segment types are considered.
143+
*/
133144
static void label_wire_muxes(const int chan_num,
134145
const int seg_num,
135146
const t_chan_seg_details* seg_details,
@@ -673,7 +684,7 @@ int get_bidir_opin_connections(RRGraphBuilder& rr_graph_builder,
673684
return num_conn;
674685
}
675686

676-
/* AA: Actually builds the edges from the OPIN nodes already allocated to their correct tracks for segment seg_Inf[seg_type_index].
687+
/* Actually builds the edges from the OPIN nodes already allocated to their correct tracks for segment seg_Inf[seg_type_index].
677688
* Note that this seg_inf vector is NOT the segment_info vectored as stored in the device variable. This index is w.r.t to seg_inf_x
678689
* or seg_inf_y for x-adjacent and y-adjacent segments respectively. This index is assigned in get_seg_details earlier
679690
* in the rr_graph_builder routine. This t_seg_detail is then used to build t_chan_seg_details which is passed in to label_wire mux
@@ -696,21 +707,20 @@ int get_unidir_opin_connections(RRGraphBuilder& rr_graph_builder,
696707
/* Gets a linked list of Fc nodes of specified seg_type_index to connect
697708
* to in given chan seg. Fc_ofs is used for the opin staggering pattern. */
698709

699-
int num_inc_muxes, num_dec_muxes;
700-
701710
*Fc_clipped = false;
702711

703-
/* Fc is assigned in pairs so check it is even. */
712+
// Fc is assigned in pairs so check it is even.
704713
VTR_ASSERT(Fc % 2 == 0);
705714

706-
/* get_rr_node_indices needs x and y coords. */
707-
int x = ((e_rr_type::CHANX == chan_type) ? seg : chan);
708-
int y = ((e_rr_type::CHANX == chan_type) ? chan : seg);
715+
// get_rr_node_indices needs x and y coords.
716+
int x = (e_rr_type::CHANX == chan_type) ? seg : chan;
717+
int y = (e_rr_type::CHANX == chan_type) ? chan : seg;
709718

710-
/* Get the lists of possible muxes. */
719+
// Get the lists of possible muxes.
711720
int dummy;
712721
std::vector<int> inc_muxes;
713722
std::vector<int> dec_muxes;
723+
int num_inc_muxes, num_dec_muxes;
714724
// Determine the channel width instead of using max channels to not create hanging nodes
715725
int max_chan_width = (e_rr_type::CHANX == chan_type) ? nodes_per_chan.x_list[y] : nodes_per_chan.y_list[x];
716726

@@ -719,33 +729,33 @@ int get_unidir_opin_connections(RRGraphBuilder& rr_graph_builder,
719729
label_wire_muxes(chan, seg, seg_details, seg_type_index, max_len,
720730
Direction::DEC, max_chan_width, true, dec_muxes, &num_dec_muxes, &dummy);
721731

722-
/* Clip Fc to the number of muxes. */
732+
// Clip Fc to the number of muxes.
723733
if (((Fc / 2) > num_inc_muxes) || ((Fc / 2) > num_dec_muxes)) {
724734
*Fc_clipped = true;
725735
Fc = 2 * std::min(num_inc_muxes, num_dec_muxes);
726736
}
727737

728-
/* Assign tracks to meet Fc demand */
738+
// Assign tracks to meet Fc demand
729739
int num_edges = 0;
730740
for (int iconn = 0; iconn < (Fc / 2); ++iconn) {
731-
/* Figure of the next mux to use for the 'inc' and 'dec' connections */
741+
// Figure of the next mux to use for the 'inc' and 'dec' connections
732742
int inc_mux = Fc_ofs[chan][seg][seg_type_index] % num_inc_muxes;
733743
int dec_mux = Fc_ofs[chan][seg][seg_type_index] % num_dec_muxes;
734744
++Fc_ofs[chan][seg][seg_type_index];
735745

736-
/* Figure out the track it corresponds to. */
746+
// Figure out the track it corresponds to.
737747
int inc_track = inc_muxes[inc_mux];
738748
int dec_track = dec_muxes[dec_mux];
739749

740-
/* Figure the inodes of those muxes */
750+
// Figure the inodes of those muxes
741751
RRNodeId inc_inode_index = rr_graph_builder.node_lookup().find_node(layer, x, y, chan_type, inc_track);
742752
RRNodeId dec_inode_index = rr_graph_builder.node_lookup().find_node(layer, x, y, chan_type, dec_track);
743753

744754
if (!inc_inode_index || !dec_inode_index) {
745755
continue;
746756
}
747757

748-
/* Add to the list. */
758+
// Add to the list.
749759
short to_switch = seg_details[inc_track].arch_opin_switch();
750760
rr_edges_to_create.emplace_back(from_rr_node, inc_inode_index, to_switch, false);
751761
++num_edges;
@@ -1962,11 +1972,6 @@ void load_sblock_pattern_lookup(const int i,
19621972
}
19631973
}
19641974

1965-
/* Labels the muxes on that side (seg_num, chan_num, direction). The returned array
1966-
* maps a label to the actual track #: array[0] = <the track number of the first/lowest mux>
1967-
* This routine orders wire muxes by their natural order, i.e. track #
1968-
* If seg_type_index == UNDEFINED, all segments in the channel are considered. Otherwise this routine
1969-
* only looks at segments that belong to the specified segment type. */
19701975
static void label_wire_muxes(const int chan_num,
19711976
const int seg_num,
19721977
const t_chan_seg_details* seg_details,
@@ -1985,7 +1990,7 @@ static void label_wire_muxes(const int chan_num,
19851990
/* Alloc the list on LOAD pass */
19861991
if (pass > 0) {
19871992
labels.resize(num_labels);
1988-
std::fill(labels.begin(), labels.end(), 0);
1993+
std::ranges::fill(labels, 0);
19891994
num_labels = 0;
19901995
}
19911996

vpr/src/route/rr_graph_generation/tileable_rr_graph/tileable_rr_graph_builder.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ void build_tileable_unidir_rr_graph(const std::vector<t_physical_tile_type>& typ
223223
bool Fc_clipped = false;
224224
// [0..num_types-1][0..num_pins-1]
225225
std::vector<vtr::Matrix<int>> Fc_in;
226-
Fc_in = alloc_and_load_actual_fc(types, max_pins, segment_inf, sets_per_seg_type, (const t_chan_width*)&chan_width,
226+
Fc_in = alloc_and_load_actual_fc(types, max_pins, segment_inf, sets_per_seg_type, &chan_width,
227227
e_fc_type::IN, UNI_DIRECTIONAL, &Fc_clipped, false);
228228
if (Fc_clipped) {
229229
*Warnings |= RR_GRAPH_WARN_FC_CLIPPED;
@@ -232,7 +232,7 @@ void build_tileable_unidir_rr_graph(const std::vector<t_physical_tile_type>& typ
232232
Fc_clipped = false;
233233
// [0..num_types-1][0..num_pins-1]
234234
std::vector<vtr::Matrix<int>> Fc_out;
235-
Fc_out = alloc_and_load_actual_fc(types, max_pins, segment_inf, sets_per_seg_type, (const t_chan_width*)&chan_width,
235+
Fc_out = alloc_and_load_actual_fc(types, max_pins, segment_inf, sets_per_seg_type, &chan_width,
236236
e_fc_type::OUT, UNI_DIRECTIONAL, &Fc_clipped, false);
237237

238238
if (Fc_clipped) {

0 commit comments

Comments
 (0)