@@ -179,7 +179,7 @@ ChanNodeDetails build_unidir_chan_node_details(const size_t& chan_width,
179
179
180
180
/* Add node to ChanNodeDetails */
181
181
size_t cur_track = 0 ;
182
- size_t bend_num = 0 ;
182
+ size_t bend_num = 0 ; // The index for bend segments
183
183
for (size_t iseg = 0 ; iseg < segment_inf.size (); ++iseg) {
184
184
if (!segment_inf[iseg].isbend ){
185
185
/* 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,
209
209
cur_track++;
210
210
}
211
211
}
212
- else {
212
+ else { // bend segment
213
213
bend_num++;
214
214
VTR_ASSERT (segment_inf[iseg].isbend );
215
215
std::vector<int > seg_len = segment_inf[iseg].part_len ;
216
216
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.
218
218
219
219
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] */
220
223
for (size_t i = 0 ; i < seg_len.size (); i++)
221
224
num_tracks_bend.push_back (num_tracks[iseg] * seg_len[i] / segment_inf[iseg].length );
222
225
@@ -225,23 +228,26 @@ ChanNodeDetails build_unidir_chan_node_details(const size_t& chan_width,
225
228
for (size_t itrack = 0 ; itrack < num_tracks[iseg]; ++itrack) {
226
229
bool seg_start = false ;
227
230
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 */
231
237
if (0 == itrack % segment_inf[iseg].length ) {
232
238
seg_start = true ;
233
239
}
234
-
240
+ /* Number seg_len[0] track of a group of Length-N wires, we set a bend start point */
235
241
if (seg_len[0 ] == int (itrack) % segment_inf[iseg].length ) {
236
242
seg_start = true ;
237
243
seg_bend_start = bend_num;
238
244
}
239
-
245
+ /* Number seg_len[0] - 1 track of a group of Length-N wires, we set a bend end point */
240
246
if (seg_len[0 ] - 1 == int (itrack) % segment_inf[iseg].length ) {
241
247
seg_end = true ;
242
248
seg_bend_end = bend_num;
243
249
}
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 */
245
251
if ((segment_inf[iseg].length - 1 == int (itrack) % segment_inf[iseg].length )
246
252
|| (itrack == num_tracks[iseg] - 1 )) {
247
253
seg_end = true ;
0 commit comments