<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>Kite - Detailed Router</title> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="SoC.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head> <h1 id="pagetop" class="header">Kite - Detailed Router</h1> <!-- <center class="header"> <table class="header"> <tr> <td><a href="customSummary.html">Summary</a></td> <td><a href="namespaces.html">Namespaces</a></td> <td><a href="customHierarchy.html">Class Hierarchy</a></td> <td><a href="annotated.html">Classes</a></td> <td><a href="functions.html">Member Index</a></td> </tr> </table> </center> --> <br> <body onload="javascript:toggleLevel(1)"> <!-- Generated by Doxygen 1.8.14 --> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></div> </div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">Algorithm Overview</div> </div> </div><!--header--> <div class="contents"> <p>Description of the algorithm. <a href="#details">More...</a></p> <p>Description of the algorithm. </p> <p>The algorithm top-level is implemented in the <code><a class="el" href="classKite_1_1NegociateWindow.html" title="Perform the routing, main RoutingEvent manager. ">NegociateWindow</a></code>.</p> <p><b>First step :</b> NegociateWindow::_loadRouting() </p><ol> <li> Load routing wires (<code>AutoSegment</code>) from <code>KatabaticEngine</code> inside the <a class="el" href="namespaceKite.html" title="The namespace dedicated to Kite. ">Kite</a> <code>GCell's</code>. Then update the <code>GCell's</code> density. </li> <li> Sort the <code>GCell's</code> according to decreasing density (denser <code>GCell's</code> are to be routed first). </li> <li> <p class="startli">Agglomerate clusters of contiguous GCell's whose density is superior to 0.7 to the seed GCell. See <code>GCellRoutingSet</code> for the mechanism.</p> <p class="endli">GCellRoutingSet receive an increasing order number. The higher the order the lower the density. This order is transmitted to the <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> of the <code>GCellRoutingSet</code> to be taken into account by the track cost function. </p> </li> </ol> <p><b>Second step :</b> <code>NegociateWindow::_runOnGCellRoutingSet()</code> </p> <p>For each <code>GCellRoutingSet</code> in decreasing density, negociate the set of associated <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code>. </p><ol> <li> Build a <code><a class="el" href="classKite_1_1RoutingEventQueue.html" title="The priority Queue of RoutingEvent. ">RoutingEventQueue</a></code> from the list of <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code>. The queue is responsible for allocating the <code><a class="el" href="classKite_1_1RoutingEvent.html" title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a></code> associated to each <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code>. </li> <li> The queue is sorted according to the "event level" then to the priority, which is for now the slack of the <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code>. That is, constrained <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> are routed first. </li> <li> <p class="startli">The queue is processed till it's empty (no unprocessed <code><a class="el" href="classKite_1_1RoutingEvent.html" title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a></code> remains).</p> <p>Processing a <code><a class="el" href="classKite_1_1RoutingEvent.html" title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a></code> is trying to insert a <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> in a suitable <a class="el" href="classKite_1_1Track.html" title="Structure managing one routing track. ">Track</a>. We proceed as follow : </p><ul> <li> The maximum ripup count for the to be inserted segment has been reached. Issue a severe warning and left unrouted this <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> (for now). </li> <li> Compute the Tracks in which the <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> can be inserted, then compute the insertion cost in each one. The candidates are ordered by the insertion cost. </li> <li> <p class="startli">Now consider the lower cost <code><a class="el" href="classKite_1_1Track.html" title="Structure managing one routing track. ">Track</a></code>. If there is a free interval for the <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code>. Issue a <code>Session::addInsertEvent()</code> then finish.</p> <p>If there is a <em>"soft overlap"</em>, that is the overlaping <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> already in the <code><a class="el" href="classKite_1_1Track.html" title="Structure managing one routing track. ">Track</a></code> could be shrunk either to the left or the right so the new <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> can be inserted. This is managed by <code>RoutingEvent::_setAside()</code>, for each soft overlaping <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code>, gets its perpandiculars and issue a displacement request for all of them. That is, re-post a <code><a class="el" href="classKite_1_1RoutingEvent.html" title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a></code> with updated constraints and remove the perpandicular from it's <a class="el" href="classKite_1_1Track.html" title="Structure managing one routing track. ">Track</a> if it has already been routed. Note that no request is issued for the overlaping <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> itself has it do not change of <a class="el" href="classKite_1_1Track.html" title="Structure managing one routing track. ">Track</a>.</p> <p class="endli">If there is a <em>"hard overlap"</em>, that is the two <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> cannot share the same <code><a class="el" href="classKite_1_1Track.html" title="Structure managing one routing track. ">Track</a></code>, remove the previous one from the <code><a class="el" href="classKite_1_1Track.html" title="Structure managing one routing track. ">Track</a></code> and re-post a <code><a class="el" href="classKite_1_1RoutingEvent.html" title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a></code>. Note that, the cost object should have selected a <code><a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a></code> which could be ripped-up. Otherwise the <code><a class="el" href="classKite_1_1Track.html" title="Structure managing one routing track. ">Track</a></code> would'nt even be a candidate. </p> </li> </ul> <p class="endli">When a <a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a> is riped up, it is re-routed immediately afterward. This is done by increasing his event level. </p> </li> </ol> </div><!-- contents --> <br> <hr> <table class="footer1"> <tr> <td class="LFooter"><small>Generated by doxygen 1.8.14 on Sun Nov 21 2021</small></td> <td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td> </tr> </table> <table class="footer2"> <tr> <td class="LFooter">Kite - Detailed Router</td> <td class="RFooter"><small>Copyright © 2008-2020 Sorbonne Universite. All rights reserved</small></td> </tr> </table> </body> </html>