Skip to content

Commit 0f34455

Browse files
Update tileable_chan_details_builder.cpp
1 parent 4b91e02 commit 0f34455

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

vpr/src/tileable_rr_graph/tileable_chan_details_builder.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ ChanNodeDetails build_unidir_chan_node_details(const size_t& chan_width,
179179

180180
/* Add node to ChanNodeDetails */
181181
size_t cur_track = 0;
182-
size_t bend_num = 0;
182+
size_t bend_num = 0; // The index for bend segments
183183
for (size_t iseg = 0; iseg < segment_inf.size(); ++iseg) {
184184
if (!segment_inf[iseg].isbend){
185185
/* segment length will be set to maxium segment length if this is a longwire */
@@ -209,14 +209,17 @@ ChanNodeDetails build_unidir_chan_node_details(const size_t& chan_width,
209209
cur_track++;
210210
}
211211
}
212-
else{
212+
else{ // bend segment
213213
bend_num++;
214214
VTR_ASSERT(segment_inf[iseg].isbend);
215215
std::vector<int> seg_len = segment_inf[iseg].part_len;
216216
std::vector<int> bend = segment_inf[iseg].bend;
217-
VTR_ASSERT(seg_len.size() == 2);
217+
VTR_ASSERT(seg_len.size() == 2); // Only support one bend position for a segment.
218218

219219
std::vector<size_t> num_tracks_bend;
220+
/* Each bend part tracks number *
221+
* For example, a length-5 segment with bend pattern: <- - U -> has 20 tracks. *
222+
* Its num_tracks_bend is [20 * 3/5, 20 * 2/5] = [12, 8] */
220223
for(size_t i = 0; i < seg_len.size(); i++)
221224
num_tracks_bend.push_back(num_tracks[iseg] * seg_len[i] / segment_inf[iseg].length);
222225

@@ -225,23 +228,26 @@ ChanNodeDetails build_unidir_chan_node_details(const size_t& chan_width,
225228
for (size_t itrack = 0; itrack < num_tracks[iseg]; ++itrack) {
226229
bool seg_start = false;
227230
bool seg_end = false;
228-
size_t seg_bend_start = 0;
229-
size_t seg_bend_end = 0;
230-
231+
size_t seg_bend_start = 0; // seg_bend_start = 0 means not a bend start.
232+
// seg_bend_start = i (i > 0) means a bend start for bend segment i.
233+
size_t seg_bend_end = 0; // The same as seg_bend_start.
234+
// Tracks has same seg_bend_start and seg_bend_end values will be
235+
// connected by a delayless switch.
236+
/* Every first track of a group of Length-N wires, we set a starting point */
231237
if (0 == itrack % segment_inf[iseg].length) {
232238
seg_start = true;
233239
}
234-
240+
/* Number seg_len[0] track of a group of Length-N wires, we set a bend start point */
235241
if (seg_len[0] == int(itrack) % segment_inf[iseg].length) {
236242
seg_start = true;
237243
seg_bend_start = bend_num;
238244
}
239-
245+
/* Number seg_len[0] - 1 track of a group of Length-N wires, we set a bend end point */
240246
if (seg_len[0] - 1 == int(itrack) % segment_inf[iseg].length) {
241247
seg_end = true;
242248
seg_bend_end = bend_num;
243249
}
244-
250+
/* Every last track of a group of Length-N wires or this is the last track in this group, we set an ending point */
245251
if ((segment_inf[iseg].length - 1 == int(itrack) % segment_inf[iseg].length)
246252
|| (itrack == num_tracks[iseg] - 1)) {
247253
seg_end = true;

0 commit comments

Comments
 (0)