101 lines
9.2 KiB
HTML
101 lines
9.2 KiB
HTML
<!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.5 -->
|
|
<div id="navrow1" class="tabs">
|
|
<ul class="tablist">
|
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
|
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
|
<li><a href="modules.html"><span>Modules</span></a></li>
|
|
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
|
<li><a href="annotated.html"><span>Classes</span></a></li>
|
|
<li><a href="files.html"><span>Files</span></a></li>
|
|
</ul>
|
|
</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.5 on Mon Oct 1 2018</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-2016 UPMC. All rights reserved</small></td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>
|