<trclass="memdesc:"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> Density Comparison Functor. <ahref="classKatabatic_1_1GCell_1_1CompareByDensity.html#details">More...</a><br/></td></tr>
<trclass="memdesc:"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> Index Comparison Functor. <ahref="classKatabatic_1_1GCell_1_1CompareByIndex.html#details">More...</a><br/></td></tr>
<trclass="memdesc:"><tdclass="mdescLeft"> </td><tdclass="mdescRight"><aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a><aclass="el"href="classKatabatic_1_1GCell_1_1Key.html"title="GCell Key - Density Cache. ">Key</a> - Density Cache. <ahref="classKatabatic_1_1GCell_1_1Key.html#details">More...</a><br/></td></tr>
<trclass="memitem:a49b7bd2f05abd94436177558fd0f97d8"><tdclass="memItemLeft"align="right"valign="top">bool </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#a49b7bd2f05abd94436177558fd0f97d8">isSaturated</a> (unsigned int depth) const</td></tr>
<trclass="memitem:ad31c16c87377e164728a0df55e21f96b"><tdclass="memItemLeft"align="right"valign="top">float </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#ad31c16c87377e164728a0df55e21f96b">getDensity</a> (unsigned int flags=0) const</td></tr>
<trclass="memitem:ae56b981fad5960835faef809ec282cfa"><tdclass="memItemLeft"align="right"valign="top">float </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#ae56b981fad5960835faef809ec282cfa">getCDensity</a> (unsigned int flags=0) const</td></tr>
<trclass="memitem:aa64538731e911c60eeaea557be1c7740"><tdclass="memItemLeft"align="right"valign="top">float </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#aa64538731e911c60eeaea557be1c7740">getWDensity</a> (unsigned int depth, unsigned int flags=0) const</td></tr>
<trclass="memitem:ab37ffda5a2e1ba60931d32c29237bd33"><tdclass="memItemLeft"align="right"valign="top"><aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/group__DbUGroup.html#ga4fbfa3e8c89347af76c9628ea06c4146">DbU::Unit</a> </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#ab37ffda5a2e1ba60931d32c29237bd33">getBlockage</a> (unsigned int depth) const</td></tr>
<trclass="memitem:a44ec8d16030b5900bd0ccc02652b727f"><tdclass="memItemLeft"align="right"valign="top">float </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#a44ec8d16030b5900bd0ccc02652b727f">getFragmentation</a> (unsigned int depth) const</td></tr>
<trclass="memitem:a14feed45699c8dc406251519dc08bc79"><tdclass="memItemLeft"align="right"valign="top">float </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#a14feed45699c8dc406251519dc08bc79">getFeedthroughs</a> (unsigned int depth) const</td></tr>
<trclass="memitem:a4785bcc49da76fc38f6940f5b1cc5b17"><tdclass="memItemLeft"align="right"valign="top">float </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#a4785bcc49da76fc38f6940f5b1cc5b17">getGlobalsCount</a> (unsigned int depth) const</td></tr>
<trclass="memitem:a1f92568d22b1384a8cdf328340fb9160"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="namespaceKatabatic.html#a2221b0ddbc24f331809fc86f98e38041">AutoSegments</a> </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#a1f92568d22b1384a8cdf328340fb9160">getStartSegments</a> (unsigned int direction)</td></tr>
<trclass="memitem:a80ad0f9e79bccf6aed4fb69b4b795005"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="namespaceKatabatic.html#a2221b0ddbc24f331809fc86f98e38041">AutoSegments</a> </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#a80ad0f9e79bccf6aed4fb69b4b795005">getStopSegments</a> (unsigned int direction)</td></tr>
<trclass="memitem:a1270eab34ac57f21c0286a5455044a0d"><tdclass="memItemLeft"align="right"valign="top">void </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#a1270eab34ac57f21c0286a5455044a0d">addBlockage</a> (unsigned int depth, <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/group__DbUGroup.html#ga4fbfa3e8c89347af76c9628ea06c4146">DbU::Unit</a>)</td></tr>
<trclass="memitem:a11beff0f0bec06d0f3e080969516dfc3"><tdclass="memItemLeft"align="right"valign="top">void </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1GCell.html#a11beff0f0bec06d0f3e080969516dfc3">updateKey</a> (unsigned int depth)</td></tr>
<p>Please note that there are two kind of Global Cells (or <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> for short):</p><ul>
<li>The <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> used by the global router Knik.</li>
<li>The <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> used by the detailed router (<aclass="el"href="namespaceKatabatic.html"title="The namespace dedicated to Katabatic. ">Katabatic</a>& Kite). Although the information they hold is obviously related, they are two separate kind of objects.</li>
</ul>
<p>The area of the design to be routed is divided in a regular grid of rectangular area, the <aclass="el"href="classKatabatic_1_1GCellGrid.html"title="GCell Grid. ">GCellGrid</a>. Each rectangular area is a <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>.</p>
<li>The AutoSegments that begins or ends in it. The list of segments is not avalaible directly but through the AutoContacts that are owned by the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>.</li>
<li>The AutoSegments that go straight <em>through</em> it (or <em>over</em> it). Horizontal & Vertical segments are stored in two separeted list. Those two lists are sorted by layer depth (the deepest layers first).</li>
<li>A lot of synthetic information about the density of tracks used in the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>.</li>
</ul>
<p>AutoContacts are affected to GCells, the area of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> is the one into which the <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> is allowed to be placed. It is this that way that the respect of the global routing choosen by Knik is enforced. See the <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> constraint box.</p>
<p>When tracks are aligned with the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> boundaries they one exactly on the boundary can belong to the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> on either side of the boundary. But we want a clear and mutually exclusive ownership of each <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> area. So, we choose that one <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> do not own the topmost and rightmost track. And to implement it, we shrink top and right coordinates by the amount of <aclass="el"href="classKatabatic_1_1GCell.html#ac594cb2832ee7ef410c89499258d38fd">GCell::getTopRightShrink()</a>, which must be less than the track spacing.</p>
<p>At any depth (i.e. layer), in the preferred routing direction, a <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> can pass a finite length of wire. For example on an horizontal preferred layer: </p><pclass="formulaDsp">
<p> Then the density, is the ratio between <imgclass="formulaInl"alt="$WL_{max}$"src="form_1.png"/> and the actually used wirelength: </p><pclass="formulaDsp">
<p> Normally, the ratio musn't exceed 1.0, but the occupied wire length computation, for now, doesn't merge overlapping wires belonging to the same net, so the ratio may be slightly inaccurate. Thus in some pathological cases may be greater than 1.0 whithout truly been overloaded.</p>
<p>A Cell is considered as <em>saturated</em> if the overall density is above the saturation ratio given by <aclass="el"href="classKatabatic_1_1Session.html#a266a4079ca235e8fdb622ef4996d324d">Session::getSaturateRatio()</a>.</p>
<p> It is a ratio over the number of actual contacts in the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> and the maximal number. The maximal number being the product of the number of tracks in both direction and 4 stands for the hardwired number of layers (the depth).</p>
<p>Should not be hardwired... <spanclass="red"><em>To be corrected in future versions.</em></span></p>
<h2><aclass="anchor"id="secGCellFeedthrough"></a>
Feedthrough Computation</h2>
<p>The feedtrough value is an estimate is of how many complete tracks have been used on a given layer of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. It varies between zero and the number of track on the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> (complete saturation). As an estimate, it doesn't tell you the actual number of free track, but how many you <em>may expect</em> assuming the routing is reasonably well done.</p>
<p>The number of track that can go through a <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> in the horizontal direction is computed as follow: </p><pclass="formulaDsp">
<p>The pitch is assumed to be the same for every layer and is hardwired to 5.0 lambda.</p>
<p>This is a bad architectural choice. The informations pertaining to routing should be held at Kite level, not be hardwired and the pitch should be made variable with the layer... <spanclass="red"><em>To be corrected in future versions</em></span>.</p>
<p>To save processing time, the densities are not recomputed every time a segment is modified (added, removed or moved). Instead a lazy evaluation mechanism is used. Densities are recomputed each time a density is queried <em>and</em> the lazy evaluation <em>not</em> explicitly disabled (flag NoUpdate).</p>
<h1><aclass="anchor"id="secGCellSortingKey"></a>
GCell Sorting Key</h1>
<p>In order to perform a lexicographical sort on the tuple <imgclass="formulaInl"alt="$(density(depth),id)$"src="form_5.png"/> of a <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>, a specific slave object <aclass="el"href="classKatabatic_1_1GCell_1_1Key.html"title="GCell Key - Density Cache. ">GCell::Key</a> is introduced. It is the density on one specific depth, not the average density.</p>
<p>In addition to it's geometrical and density functionality, the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> provides <em>desaturation</em> capabilities. Desaturation is the operation of moving up feedthough <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> from the bottom layers towards the upper ones in order to balance the densities in the different densities. Thoses operations provides building blocks for the layer assignment stage which is provided by the Kabatic tool.</p>
<p>Two strategies are avalaibles, moving one global <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> at a time with <aclass="el"href="classKatabatic_1_1GCell.html#a5ae4d250ebecf59aa98fb068d848be14">GCell::stepDesaturate()</a> or, when one <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> is moved up, move up the whole net trunk with <aclass="el"href="classKatabatic_1_1GCell.html#abe4cf4a81bb78e9b479992336a999a07">GCell::stepNetDesaturate()</a>.</p>
<p><aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> derives from Hurricane::ExtensionGo to allow a graphical rendering of the routing density. </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1GCell.html#a88208864ba2268689946a8cb7a86fcb2">GCell::checkDensity()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#a5ae4d250ebecf59aa98fb068d848be14">GCell::stepDesaturate()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c">GCell::updateDensity()</a>.</p>
<pclass="reference">References <aclass="el"href="classKatabatic_1_1GCell.html#ad31c16c87377e164728a0df55e21f96b">GCell::getDensity()</a>, and <aclass="el"href="classKatabatic_1_1Session.html#a266a4079ca235e8fdb622ef4996d324d">Session::getSaturateRatio()</a>.</p>
<p><b>Returns:</b><b>true</b> if all the AutoContact/AutoSegment of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> are valids. </p>
<pclass="reference">References <aclass="el"href="classKatabatic_1_1GCell.html#ad31c16c87377e164728a0df55e21f96b">GCell::getDensity()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#a5bc2a781be2586924afce4e4a4ea6697">GCell::isValid()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c">GCell::updateDensity()</a>.</p>
<p><b>Returns:</b><b>true</b> if there should be enough wire length to pass a wire completly trough this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1Grid.html"title="Template Class for Regular Grid. ">Grid</a> of which <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> is part of. </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1GCell.html#af4dcc99733b7ea77e8c3c7da9ac3cd3c">GCell::checkEdgeSaturation()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#ad31c16c87377e164728a0df55e21f96b">GCell::getDensity()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#ae448c9d6d028e967d7bd5a1bfdd05311">GCell::getDown()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#a633722329744550b6da94c3b6fb97484">GCell::getLeft()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#abdeb6b4a351f8b292894d3f0c24f105d">GCell::getRight()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#a335506a314a2330b5a354906e798e60c">GCell::getUp()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#abe4cf4a81bb78e9b479992336a999a07">GCell::stepNetDesaturate()</a>.</p>
<p><b>Returns:</b> The depth (i.e. number of routing layers) of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </p>
<p><b>Returns:</b> The linear index of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> in the <aclass="el"href="classKatabatic_1_1GCellGrid.html"title="GCell Grid. ">GCellGrid</a> vector.</p>
<dlclass="section see"><dt>See also</dt><dd><aclass="el"href="classKatabatic_1_1GCellGrid.html"title="GCell Grid. ">GCellGrid</a> for the meaning of the index. </dd></dl>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a6482341a342eb6e6b3b43f13fd4436f6">AutoSegment::canMoveUp()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#ac2275a015db51cc12dd53fb13d22ca4f">GCell::hasFreeTrack()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a5ae4d250ebecf59aa98fb068d848be14">GCell::stepDesaturate()</a>.</p>
<p><b>Returns:</b> The row of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> in the <aclass="el"href="classKatabatic_1_1GCellGrid.html"title="GCell Grid. ">GCellGrid</a>. </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1GCell.html#a88208864ba2268689946a8cb7a86fcb2">GCell::checkDensity()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#aa902247a1e967e52cc3ab087cd52b366">AutoSegment::computeOptimal()</a>.</p>
<p><b>Returns:</b> The Column of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> in the <aclass="el"href="classKatabatic_1_1GCellGrid.html"title="GCell Grid. ">GCellGrid</a>. </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1GCell.html#a88208864ba2268689946a8cb7a86fcb2">GCell::checkDensity()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#aa902247a1e967e52cc3ab087cd52b366">AutoSegment::computeOptimal()</a>.</p>
<p><b>Returns:</b> The left neighbor of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> (<code>NULL</code> if it is the leftmost <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>). </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoVertical.html#a9b0c21eeb26c256876592ba63438da74">AutoVertical::canMoveULeft()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoVertical::moveULeft()</a>.</p>
<p><b>Returns:</b> The right neighbor of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> (<code>NULL</code> if it is the rightmost <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>). </p>
<p><b>Returns:</b> The top neighbor of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> (<code>NULL</code> if it is the topmost <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>). </p>
<p><b>Returns:</b> The bottom neighbor of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> (<code>NULL</code> if it is the bottommost <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>). </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a9b0c21eeb26c256876592ba63438da74">AutoHorizontal::canMoveULeft()</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoHorizontal::moveULeft()</a>.</p>
<p>Required to exists as a <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Go.html">Hurricane::Go</a> derived class. But must never be used... </p>
<p><b>Returns:</b> The bounding box of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>, with the top right shrink applied. </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#ae64a61508d148cb4a0ee9b5ffb177659">AutoSegment::AutoSegment()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#aa902247a1e967e52cc3ab087cd52b366">AutoSegment::computeOptimal()</a>, and <aclass="el"href="classKatabatic_1_1AutoContactTerminal.html#a00ed934305dd186a284b7a13b5798cb6">AutoContactTerminal::getNativeConstraintBox()</a>.</p>
<p><b>Returns:</b> The upper right X coordinate of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> box (top right shrink applied). </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a5b81aad92361558c3b9e60fd501b89ba">AutoSegment::getExtremity()</a>, and <aclass="el"href="classKatabatic_1_1AutoContact.html#aaa7652f5db46cab9edb066d06ea979f9">AutoContact::setCBXMax()</a>.</p>
<p><b>Returns:</b> The upper right Y coordinate of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> box (top right shrink applied). </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical::_makeDogleg()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a5b81aad92361558c3b9e60fd501b89ba">AutoSegment::getExtremity()</a>, and <aclass="el"href="classKatabatic_1_1AutoContact.html#a1fdb3737d910a966e150a86d885f3c05">AutoContact::setCBYMax()</a>.</p>
<p><b>Returns:</b> The interval corresponding to the side position of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> box, in <code>direction</code>. </p>
<dlclass="section return"><dt>Returns</dt><dd>The number of track that can go through the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> in the horizontal direction. For a detailed explanation of the computation see <aclass="el"href="classKatabatic_1_1GCell.html#secGCellTrackComputation">Track Computation</a>. </dd></dl>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1GCell.html#ac2275a015db51cc12dd53fb13d22ca4f">GCell::hasFreeTrack()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c">GCell::updateDensity()</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>The number of track that can go through the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> in the vertical direction. For a detailed explanation of the computation see <aclass="el"href="classKatabatic_1_1GCell.html#secGCellTrackComputation">Track Computation</a>. </dd></dl>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1GCell.html#ac2275a015db51cc12dd53fb13d22ca4f">GCell::hasFreeTrack()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c">GCell::updateDensity()</a>.</p>
<p><b>Returns:</b> The average density of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>, for all the depths.</p>
<p><aclass="el"href="classKatabatic_1_1GCell.html#secGCellDensity">Saturation & Density Computation</a>, <aclass="el"href="classKatabatic_1_1GCell.html#secGCellLazyEvaluation">GCell Lazy Evaluation</a>. </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1GCell.html#a0e0a7b382b06e230051965bcb78ed21c">GCell::isAboveDensity()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a49b7bd2f05abd94436177558fd0f97d8">GCell::isSaturated()</a>.</p>
<p><aclass="el"href="classKatabatic_1_1GCell.html#secGCellDensity">Saturation & Density Computation</a>, <aclass="el"href="classKatabatic_1_1GCell.html#secGCellLazyEvaluation">GCell Lazy Evaluation</a>. </p>
<pclass="reference">References <aclass="el"href="classKatabatic_1_1GCell.html#a5bc2a781be2586924afce4e4a4ea6697">GCell::isValid()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c">GCell::updateDensity()</a>.</p>
<p><b>Returns:</b> The density of wires at <code>depth</code>.</p>
<p><aclass="el"href="classKatabatic_1_1GCell.html#secGCellDensity">Saturation & Density Computation</a>, <aclass="el"href="classKatabatic_1_1GCell.html#secGCellLazyEvaluation">GCell Lazy Evaluation</a>. </p>
<pclass="reference">References <aclass="el"href="classKatabatic_1_1GCell.html#a5bc2a781be2586924afce4e4a4ea6697">GCell::isValid()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c">GCell::updateDensity()</a>.</p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a9b0c21eeb26c256876592ba63438da74">AutoHorizontal::canMoveULeft()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#a9b0c21eeb26c256876592ba63438da74">AutoVertical::canMoveULeft()</a>, <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#ad0c972e34d6bac47bd9276a7d6e053d8">AutoHorizontal::canMoveURight()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#ad0c972e34d6bac47bd9276a7d6e053d8">AutoVertical::canMoveURight()</a>.</p>
<pclass="reference">References <aclass="el"href="classKatabatic_1_1GCell.html#a5bc2a781be2586924afce4e4a4ea6697">GCell::isValid()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c">GCell::updateDensity()</a>.</p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a6482341a342eb6e6b3b43f13fd4436f6">AutoSegment::canMoveUp()</a>.</p>
<pclass="reference">References <aclass="el"href="classKatabatic_1_1GCell.html#a5bc2a781be2586924afce4e4a4ea6697">GCell::isValid()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c">GCell::updateDensity()</a>.</p>
<p><b>Returns:</b> The number of global wires that go completly through the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> at layer <code>depth</code>. This do not includes the global wires that begins or ends in the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </p>
<pclass="reference">References <aclass="el"href="classKatabatic_1_1GCell.html#a5bc2a781be2586924afce4e4a4ea6697">GCell::isValid()</a>, and <aclass="el"href="classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c">GCell::updateDensity()</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>The vector of all horizontal AutoSegments that completly goes through the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </dd></dl>
<dlclass="section return"><dt>Returns</dt><dd>The vector of all vertical AutoSegments that completly goes through the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </dd></dl>
<dlclass="section return"><dt>Returns</dt><dd>The vector of all AutoContacts owned by the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </dd></dl>
<dlclass="section return"><dt>Returns</dt><dd>A Collection of the horizontal AutoSegments that starts from this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </dd></dl>
<pclass="reference">References <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, and <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a8c8fd7a68cd428639057fbc6dbb8c46a">Katabatic::KbSource</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>A Collection of the vertical AutoSegments that starts from this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </dd></dl>
<pclass="reference">References <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a8c8fd7a68cd428639057fbc6dbb8c46a">Katabatic::KbSource</a>, and <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>A Collection of the horizontal AutoSegments that stops in this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </dd></dl>
<pclass="reference">References <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, and <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a041350b28d805a40d048fa0be9994a26">Katabatic::KbTarget</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>A Collection of the vertical AutoSegments that stops in this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </dd></dl>
<pclass="reference">References <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a041350b28d805a40d048fa0be9994a26">Katabatic::KbTarget</a>, and <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>A Collection of the horizontal or vertical AutoSegments that starts from this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> according to <code>direction</code>. </dd></dl>
<pclass="reference">References <aclass="el"href="classKatabatic_1_1GCell.html#a79668a41675e9ba0ca59d4b91e3b70be">GCell::getHStartSegments()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#acbd17a4441905a4f5bc33a26bb338d0a">GCell::getVStartSegments()</a>, and <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>A Collection of the horizontal or vertical AutoSegments that stops in this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> according to <code>direction</code>. </dd></dl>
<pclass="reference">References <aclass="el"href="classKatabatic_1_1GCell.html#a77beccf65527a330f15bed2aba4f9dea">GCell::getHStopSegments()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#a2f0f038f5700b7b55f22829c5d43aa07">GCell::getVStopSegments()</a>, and <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>The size of the RoutingPad set.</dd></dl>
<p>Fills the <code>rps</code> set with all the RoutingPads that appears in this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. (looks at all the anchors of the owned <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a>) </p>
<dlclass="section return"><dt>Returns</dt><dd>The sorting key of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>.</dd></dl>
<dlclass="section return"><dt>Returns</dt><dd><code>1</code> if the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> is saturated, 0 otherwise.</dd></dl>
<p>Check, if the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> is saturated, layer by layer. Issue a warning if that is the case. </p>
<dlclass="section return"><dt>Returns</dt><dd><b>true</b> if the Up/Right edge is over the <code>threshold</code>.</dd></dl>
<p>Check if the number of AutoSegments crossing the Up & Right edges of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> exceed <code>threshold</code>. The <code>thresold</code> must be expressed as a percentage of the full capacity of the edges. The overload is computed as a whole and not depth by depth. </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a3715b38135ca24745f610bebd3407c10">AutoHorizontal::_postCreate()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoVertical::moveULeft()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#aa469e37853e31f8b1bc817518c896d62">AutoVertical::moveURight()</a>.</p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoVertical.html#a3715b38135ca24745f610bebd3407c10">AutoVertical::_postCreate()</a>, <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoHorizontal::moveULeft()</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#aa469e37853e31f8b1bc817518c896d62">AutoHorizontal::moveURight()</a>.</p>
<p>Adds <code>contact</code> to the list of contacts owned by this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoContact.html#aa1a02e206437f1371a74cafc724b00d7">AutoContact::setGCell()</a>.</p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical::_makeDogleg()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#a7c13d9795eafd477994961f8a0d962d0">AutoVertical::_preDestroy()</a>, <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoHorizontal::moveULeft()</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#aa469e37853e31f8b1bc817518c896d62">AutoHorizontal::moveURight()</a>.</p>
<pclass="reference">Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a7c13d9795eafd477994961f8a0d962d0">AutoHorizontal::_preDestroy()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoVertical::moveULeft()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#aa469e37853e31f8b1bc817518c896d62">AutoVertical::moveURight()</a>.</p>
<p>Removes <code>contact</code> to the list of contacts owned by this <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </p>
<p>Force a geometry update on all the <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </p>
<p><b>Returns:</b><b>true</b> if the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> is saturated.</p>
<p>Update the various densities of the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. No actual computation is performed if the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> is <em>not</em> invalidated. </p>
<p>Update the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> key with the new density at layer <code>depth</code>.</p>
<p>If the number of RoutingPad in the first routing layer exceed the <aclass="el"href="classKatabatic_1_1Session.html#adfdaa8b3e81de14fce1f99444b35fcda">Session::getSaturateRp()</a> threshold, force a desaturation of layer <code>depth</code> 1 until it is below 0.5.</p>
<tr><tdclass="paramname">depth</td><td>The depth to desaturate. </td></tr>
<tr><tdclass="paramname">globalNets</td><td>The set of Nets of which at least one segment has been moved up. </td></tr>
<tr><tdclass="paramname">moved</td><td>The moved up <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>. </td></tr>
<tr><tdclass="paramname">flags</td><td>If KbForceMove is set, force one <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> to move up, event if the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> is not saturated in the relevant depth.</td></tr>
</table>
</dd>
</dl>
<p><b>Returns:</b><b>true</b> if an <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> has actually been moved up.</p>
<p>Perform the atomic desaturation, that is move up one <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> from layer <code>depth</code> to layer <code>depth+2</code>, longuests AutoSegments are moved first. Only global feedthrough AutoSegments are candidates to be moved up. The Net owning the moved up segment is added to the <code>globalNets</code> set. If the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> is not saturated on layer <code>depth</code>, nothing is done. If the <code>forced</code> flag is set, one global <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> is moved up regardless of the saturation status.</p>
<tr><tdclass="paramname">depth</td><td>The depth to desaturate. </td></tr>
<tr><tdclass="paramname">globalNets</td><td>The set of Nets of which at least one segment has been moved up. </td></tr>
<tr><tdclass="paramname">invalidateds</td><td>The set of <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> ids that have been invalidateds.</td></tr>
</table>
</dd>
</dl>
<p><b>Returns:</b><b>true</b> if a Net has been moved up.</p>
<p>Perform a desaturation by whole Net trunk. Select the longest feedthrough <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> in layer <code>depth</code>, then attempt to move up the whole Net (all it's global AutoSegments are moved up).</p>