@@ -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