coriolis/katabatic/doc/html/group__LoadGlobalRouting.html

868 lines
77 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>Katabatic Documentation</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">Katabatic - Routing Toolbox</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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;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="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#enumval-members">Enumerator</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Global Routing Loading</div> </div>
</div><!--header-->
<div class="contents">
<p>Translation rules to build detailed routing from global.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html">GCellTopology</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build the wiring for a Net inside a GCell (<b>internal</b>). <a href="classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gaec07c7f30c801c3b0f72193757250d64"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#gaec07c7f30c801c3b0f72193757250d64">LocalFunctionFlag</a> { <br/>
&#160;&#160;<a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">NoFlags</a> = 0x00000000
, <br/>
&#160;&#160;<a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9">HAccess</a> = 0x00000002,
<br/>
&#160;&#160;<a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc">VSmall</a> = 0x00000004,
<br/>
&#160;&#160;<a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8">HSmall</a> = 0x00000008,
<br/>
&#160;&#160;<a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9">Punctual</a> = 0x00000010
, <br/>
&#160;&#160;<a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">DoSourceContact</a> = 0x00000100,
<br/>
&#160;&#160;<a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2">DoTargetContact</a> = 0x00000200
<br/>
}</td></tr>
<tr class="separator:gaec07c7f30c801c3b0f72193757250d64"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaad5d32b07d1d53ecc8642e4b10df9605"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#gaad5d32b07d1d53ecc8642e4b10df9605">checkRoutingPadSize</a> (<a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *anchor)</td></tr>
<tr class="separator:gaad5d32b07d1d53ecc8642e4b10df9605"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae9cae408ea16a3f7c77c3d75f0242f19"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">doRp_AutoContacts</a> (<a class="el" href="classKatabatic_1_1GCell.html">GCell</a> *, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *, <a class="el" href="classKatabatic_1_1AutoContact.html">AutoContact</a> *&amp;source, <a class="el" href="classKatabatic_1_1AutoContact.html">AutoContact</a> *&amp;target, unsigned int flags)</td></tr>
<tr class="separator:gae9cae408ea16a3f7c77c3d75f0242f19"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gada6d3c694b8d741b6504b7c3da166357"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classKatabatic_1_1AutoContact.html">AutoContact</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357">doRp_Access</a> (<a class="el" href="classKatabatic_1_1GCell.html">GCell</a> *, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *, unsigned int flags)</td></tr>
<tr class="separator:gada6d3c694b8d741b6504b7c3da166357"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga60edeea78b56db072fc26a58a7afbcd4"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classKatabatic_1_1AutoContact.html">AutoContact</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#ga60edeea78b56db072fc26a58a7afbcd4">doRp_AccessPad</a> (<a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1RoutingPad.html">RoutingPad</a> *, unsigned int flags)</td></tr>
<tr class="separator:ga60edeea78b56db072fc26a58a7afbcd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3291d84592215974fe4052c00304bdb1"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#ga3291d84592215974fe4052c00304bdb1">doRp_StairCaseH</a> (<a class="el" href="classKatabatic_1_1GCell.html">GCell</a> *, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *rp1, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *rp2)</td></tr>
<tr class="separator:ga3291d84592215974fe4052c00304bdb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6361fb0e90f35cd59063a1ee971ef2a9"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#ga6361fb0e90f35cd59063a1ee971ef2a9">doRp_StairCaseV</a> (<a class="el" href="classKatabatic_1_1GCell.html">GCell</a> *, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *rp1, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *rp2)</td></tr>
<tr class="separator:ga6361fb0e90f35cd59063a1ee971ef2a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabe00ab10a0dab8a3d2de0709e61e4e7d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#gabe00ab10a0dab8a3d2de0709e61e4e7d">_do_xG_1Pad</a> ()</td></tr>
<tr class="separator:gabe00ab10a0dab8a3d2de0709e61e4e7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca">_do_xG</a> ()</td></tr>
<tr class="separator:gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad24a03e87e269f16dcc28d8c2d9f1cfb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#gad24a03e87e269f16dcc28d8c2d9f1cfb">_do_1G_1M1</a> ()</td></tr>
<tr class="separator:gad24a03e87e269f16dcc28d8c2d9f1cfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga97942453a1bc5b01106aa380271fd7fc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#ga97942453a1bc5b01106aa380271fd7fc">_do_1G_xM1</a> ()</td></tr>
<tr class="separator:ga97942453a1bc5b01106aa380271fd7fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae60ed4e27ad89a1e2ff2cd6415ef33f1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#gae60ed4e27ad89a1e2ff2cd6415ef33f1">_do_xG_1M1_1M2</a> ()</td></tr>
<tr class="separator:gae60ed4e27ad89a1e2ff2cd6415ef33f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf9b009520f54099668ac9d12f2c85257"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#gaf9b009520f54099668ac9d12f2c85257">_do_xG_xM1_xM3</a> ()</td></tr>
<tr class="separator:gaf9b009520f54099668ac9d12f2c85257"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga532d1c6b530e0375078ea2d6ea3c6024"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#ga532d1c6b530e0375078ea2d6ea3c6024">_do_xG_xM2</a> ()</td></tr>
<tr class="separator:ga532d1c6b530e0375078ea2d6ea3c6024"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2519ef984b3d19f123827a9b12651672"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#ga2519ef984b3d19f123827a9b12651672">_do_1G_1M3</a> ()</td></tr>
<tr class="separator:ga2519ef984b3d19f123827a9b12651672"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga007efc725aae31782204a44949765cb4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#ga007efc725aae31782204a44949765cb4">_do_xG_xM3</a> ()</td></tr>
<tr class="separator:ga007efc725aae31782204a44949765cb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3973291866b39c10cea5ca17f7d174fb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LoadGlobalRouting.html#ga3973291866b39c10cea5ca17f7d174fb">singleGCell</a> (<a class="el" href="classKatabatic_1_1KatabaticEngine.html">KatabaticEngine</a> *ktbt, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Net.html">Net</a> *net)</td></tr>
<tr class="separator:ga3973291866b39c10cea5ca17f7d174fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Translation rules to build detailed routing from global. </p>
<p>This module documents how the global routing built by <code>Knik</code> is loaded into the <code><a class="el" href="namespaceKatabatic.html" title="The namespace dedicated to Katabatic. ">Katabatic</a></code> data-base. It is intented for developpers only. </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="gaec07c7f30c801c3b0f72193757250d64"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum LocalFunctionFlag</td>
</tr>
</table>
</div><div class="memdoc">
<p>A set of flags for all functions of the LoadGrByNet module. They can be combined to form the <em>flags</em> argument of functions. the functions will ignore flags that are not intended to them.</p>
<p>For <code>HSmall</code>, <code>VSmall</code> &amp; <code>Punctual</code> see <a class="el" href="group__LoadGlobalRouting.html#gaad5d32b07d1d53ecc8642e4b10df9605">checkRoutingPadSize()</a>. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b"></a>NoFlags</em>&nbsp;</td><td class="fielddoc">
<p>A simple alias over zero to explicitly tell that no flag at all is passed to the function. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9"></a>HAccess</em>&nbsp;</td><td class="fielddoc">
<p>The constructed topology will be accessed through an horizontal segment. The absence of this flag tell that the access will be done trough a vertical. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc"></a>VSmall</em>&nbsp;</td><td class="fielddoc">
<p>The RoutingPad vertically covers a very small number of access points, so it is likely overconstrained for direct horizontal connexion. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8"></a>HSmall</em>&nbsp;</td><td class="fielddoc">
<p>The RoutingPad horizontally covers a very small number of access points, so it is likely overconstrained for direct vertical connexion. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9"></a>Punctual</em>&nbsp;</td><td class="fielddoc">
<p>The RoutingPad covers only an access point in either direction. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d"></a>DoSourceContact</em>&nbsp;</td><td class="fielddoc">
<p>When creating <a class="el" href="classKatabatic_1_1AutoContactTerminal.html" title="AutoContact Terminal (S/T is a Terminal) ">Katabatic::AutoContactTerminal</a> on non-punctual RoutingPad, this flag request the creation of a contact <em>on the source point</em>. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2"></a>DoTargetContact</em>&nbsp;</td><td class="fielddoc">
<p>When creating <a class="el" href="classKatabatic_1_1AutoContactTerminal.html" title="AutoContact Terminal (S/T is a Terminal) ">Katabatic::AutoContactTerminal</a> on non-punctual RoutingPad, this flag request the creation of a contact <em>on the target point</em>. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gaad5d32b07d1d53ecc8642e4b10df9605"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int checkRoutingPadSize </td>
<td>(</td>
<td class="paramtype"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *&#160;</td>
<td class="paramname"><em>rp</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Look at the geometrical size of the Component and assess if it's span is too narrow either horizontally or vertically. Return a combination of flags indicating it's state:</p>
<ul>
<li>HSmall : less than 3 pitches in horizontal direction.</li>
<li>VSmall : less than 3 pitches in vertical direction.</li>
<li>Punctual : one pitch in either directions.</li>
</ul>
<p>The component can be a RoutingPad, a Vertical or an Horizontal.</p>
<div class="image">
<img src="checkRoutingPadSize.png" alt="checkRoutingPadSize.png"/>
<div class="caption">
checkRoutingPadSize()</div></div>
<p>References <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#ab451ef19059e6e5bbb77ae391d02a039">Component::getLayer()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8">anonymous_namespace{LoadGrByNet.cpp}::HSmall</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9">anonymous_namespace{LoadGrByNet.cpp}::Punctual</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/group__DbUGroup.html#ga4923a9a443871282ad7d331be2a2a5d4">toLambda()</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc">anonymous_namespace{LoadGrByNet.cpp}::VSmall</a>.</p>
<p>Referenced by <a class="el" href="group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357">GCellTopology::doRp_Access()</a>.</p>
</div>
</div>
<a class="anchor" id="gae9cae408ea16a3f7c77c3d75f0242f19"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void doRp_AutoContacts </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classKatabatic_1_1GCell.html">GCell</a> *&#160;</td>
<td class="paramname"><em>gcell</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *&#160;</td>
<td class="paramname"><em>rp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classKatabatic_1_1AutoContact.html">AutoContact</a> *&amp;&#160;</td>
<td class="paramname"><em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classKatabatic_1_1AutoContact.html">AutoContact</a> *&amp;&#160;</td>
<td class="paramname"><em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>flags</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">gcell</td><td>The GCell into which create the AutoContact. </td></tr>
<tr><td class="paramname">rp</td><td>The Component we want to access. </td></tr>
<tr><td class="paramname">source</td><td>The AutoContact created on the <code>source</code> (<em>returned</em>). </td></tr>
<tr><td class="paramname">target</td><td>The AutoContact created on the <code>target</code> (<em>returned</em>). </td></tr>
<tr><td class="paramname">flags</td><td>Managed by this function:<ul>
<li>LocalFunctionFlag::DoSourceContact</li>
<li>LocalFunctionFlag::DoTargetContact</li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<p>Create the AutoContact directly anchored on the Component (terminal). Three cases are manageds:</p>
<ol type="1">
<li><b>Ordinary (non-punctual) <code>METAL1</code> terminal</b>: an AutoContactTerminal is anchored on the RoutingPad.</li>
<li><b>Punctual <code>METAL1</code> terminal</b>, the access must never be blocked by other routing. To ensure it, we create a fixed AutoSegment (anchored on two AutoContactTerminal) to cover it. The <em>normal</em> AutoContactTerminal is also created.</li>
<li><b>non <code>METAL1</code> terminal</b>, as for the punctual <code>METAL1</code>, a fixed protection is added over the RoutingPad. If we access horizontally a vertical RoutingPad or vertically an horizontal one, an extra AutoContactTerminal is added (to allow is displacement along the RoutingPad).</li>
</ol>
<p>To avoid creating a fixed protection over a RoutingPad multiple times, the RoutingPad and it's associated protection is stored in a static <code>map</code> : <code>__routingPadAutoSegments</code>.</p>
<p>Conversely, because an AutoContactTerminal can only be connected to one segment, each time this function is called a new terminal will be created (or maybe two in case of non-punctual terminals). If only one AutoContact is requested, it is created centered on the RoutingPad. The initial position of AutoContact <em>do not prevent them to move afterwards</em>, even those created on source/target on a non-punctual RoutingPad.</p>
<dl class="section user"><dt>Remark:</dt><dd>For clarity we describe the layer management of this function in term of <code>METAL</code>, but it is the RoutingGauge depth which is actually used.</dd></dl>
<div class="image">
<img src="doRp_AutoContacts.png" alt="doRp_AutoContacts.png"/>
<div class="caption">
doRp_AutoContacts()</div></div>
<p>References <a class="el" href="namespaceKatabatic.html#a4950b7142b9024cae2693cd44bccdc24a66205741ac37bce922c730c95f6984af">Katabatic::CntFixed</a>, <a class="el" href="classKatabatic_1_1AutoContactTerminal.html#a0d440e51525b09acc843f1d345850487">AutoContactTerminal::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2">anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="el" href="classKatabatic_1_1Grid.html#ae9a2132d74bd6a15002a3917f57516ae">Grid&lt; GCellT &gt;::getGCell()</a>, <a class="el" href="classKatabatic_1_1KatabaticEngine.html#a0702328522e94ca9705222cd5b9e9c6d">KatabaticEngine::getGCellGrid()</a>, <a class="el" href="classKatabatic_1_1Session.html#a1ec4ff2ad2a5b964c0ff98170a366197">Session::getKatabatic()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#ab451ef19059e6e5bbb77ae391d02a039">Component::getLayer()</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, <a class="el" href="namespaceKatabatic.html#a94585537ee1724ea9315578ec54380f4aa291777ea80e37ea23e785870d8833ed">Katabatic::SegFixed</a>, and <a class="el" href="classKatabatic_1_1AutoSegment.html#aeb14f94914af58657a0dc2f50ec98df5">AutoSegment::setFlags()</a>.</p>
<p>Referenced by <a class="el" href="group__LoadGlobalRouting.html#ga2519ef984b3d19f123827a9b12651672">GCellTopology::_do_1G_1M3()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae60ed4e27ad89a1e2ff2cd6415ef33f1">GCellTopology::_do_xG_1M1_1M2()</a>, <a class="el" href="group__LoadGlobalRouting.html#gaf9b009520f54099668ac9d12f2c85257">GCellTopology::_do_xG_xM1_xM3()</a>, <a class="el" href="group__LoadGlobalRouting.html#ga532d1c6b530e0375078ea2d6ea3c6024">GCellTopology::_do_xG_xM2()</a>, <a class="el" href="group__LoadGlobalRouting.html#ga007efc725aae31782204a44949765cb4">GCellTopology::_do_xG_xM3()</a>, <a class="el" href="group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357">GCellTopology::doRp_Access()</a>, <a class="el" href="group__LoadGlobalRouting.html#ga3291d84592215974fe4052c00304bdb1">GCellTopology::doRp_StairCaseH()</a>, <a class="el" href="group__LoadGlobalRouting.html#ga6361fb0e90f35cd59063a1ee971ef2a9">GCellTopology::doRp_StairCaseV()</a>, and <a class="el" href="group__LoadGlobalRouting.html#ga3973291866b39c10cea5ca17f7d174fb">anonymous_namespace{LoadGrByNet.cpp}::singleGCell()</a>.</p>
</div>
</div>
<a class="anchor" id="gada6d3c694b8d741b6504b7c3da166357"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classKatabatic_1_1AutoContact.html">AutoContact</a> * doRp_Access </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classKatabatic_1_1GCell.html">GCell</a> *&#160;</td>
<td class="paramname"><em>gcell</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *&#160;</td>
<td class="paramname"><em>rp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>flags</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">gcell</td><td>The GCell into which create the AutoContact. </td></tr>
<tr><td class="paramname">rp</td><td>The Component onto which anchor the access contact. </td></tr>
<tr><td class="paramname">flags</td><td>Relevant flags are:<ul>
<li>HAccess, the terminal is to be accessed through an horizontal segment.</li>
<li>VSmall, force the terminal to be considered as small in the vertical direction.</li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<p>If <code>HAccess</code> is set, the Component is to be accessed trough an horizontal segment. If unset, the access is done vertically.</p>
<p>Create an AutoContact to access a Component (terminal). If the Component is not to be accessed through an horizontal segment, and do not cover a large span in the horizontal direction (flag <code>VSmall</code>), a local horizontal AutoSegment is added to slacken the vertical constraints.</p>
<div class="image">
<img src="doRp_Access.png" alt="doRp_Access.png"/>
<div class="caption">
doRp_Access()</div></div>
<p>References <a class="el" href="group__LoadGlobalRouting.html#gaad5d32b07d1d53ecc8642e4b10df9605">anonymous_namespace{LoadGrByNet.cpp}::checkRoutingPadSize()</a>, <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">GCellTopology::doRp_AutoContacts()</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#a16607d07d915781dc4f5e6663cd7dd0a">Component::getNet()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9">anonymous_namespace{LoadGrByNet.cpp}::HAccess</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8">anonymous_namespace{LoadGrByNet.cpp}::HSmall</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc">anonymous_namespace{LoadGrByNet.cpp}::VSmall</a>.</p>
<p>Referenced by <a class="el" href="group__LoadGlobalRouting.html#gad24a03e87e269f16dcc28d8c2d9f1cfb">GCellTopology::_do_1G_1M1()</a>, <a class="el" href="group__LoadGlobalRouting.html#ga97942453a1bc5b01106aa380271fd7fc">GCellTopology::_do_1G_xM1()</a>, <a class="el" href="group__LoadGlobalRouting.html#gaf9b009520f54099668ac9d12f2c85257">GCellTopology::_do_xG_xM1_xM3()</a>, <a class="el" href="group__LoadGlobalRouting.html#ga532d1c6b530e0375078ea2d6ea3c6024">GCellTopology::_do_xG_xM2()</a>, and <a class="el" href="group__LoadGlobalRouting.html#ga007efc725aae31782204a44949765cb4">GCellTopology::_do_xG_xM3()</a>.</p>
</div>
</div>
<a class="anchor" id="ga60edeea78b56db072fc26a58a7afbcd4"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classKatabatic_1_1AutoContact.html">AutoContact</a> * doRp_AccessPad </td>
<td>(</td>
<td class="paramtype"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1RoutingPad.html">RoutingPad</a> *&#160;</td>
<td class="paramname"><em>rp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>flags</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rp</td><td>The Component onto which anchor the access contact. </td></tr>
<tr><td class="paramname">flags</td><td>Relevant flags are:<ul>
<li>HAccess, the terminal is to be accessed through an horizontal segment.</li>
<li>VSmall, force the terminal to be considered as small in the vertical direction. </li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A <a class="el" href="classKatabatic_1_1AutoContactTerminal.html" title="AutoContact Terminal (S/T is a Terminal) ">Katabatic::AutoContactTerminal</a> .</dd></dl>
<p>The Component <code>rp</code> is a RoutingPad which belongs to a pad cell. This case occurs when we are routing a complete chip. This method build, from the <code>rp</code> a stack of articulated punctual segments and contacts to reach the default H/V routing layers (usually <code>METAL2</code> &amp; <code>METAL3</code>). This may be needed when the pad terminal is in <code>METAL5</code>, for instance.</p>
<p>The returned AutoContactTerminal is anchored on the last punctual segment build.</p>
<p>The GCell into which the AutoContactTerminal is created may be under the pads area. However, it will be right on the border of the GCell. The global router vertexes of GCell under the pad area are marked as blocked so will never be used for routing.</p>
<dl class="section user"><dt>Remark:</dt><dd>The segments and contacts added to ensure the layer connexity are not put into the <a class="el" href="namespaceKatabatic.html" title="The namespace dedicated to Katabatic. ">Katabatic</a> database. They are plain <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/namespaceHurricane.html">Hurricane</a> objects, invisibles from it. </dd></dl>
<p>References <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Contact.html#a5402fec0518c81d35fbec2c2b2ec0f8f">Contact::create()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Horizontal.html#a15f13508993b6c0219fb944fe1141c3f">Horizontal::create()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Vertical.html#a1ff223aa8f0b9ffe3aefc5e3ade6d34a">Vertical::create()</a>, <a class="el" href="classKatabatic_1_1AutoContactTerminal.html#a0d440e51525b09acc843f1d345850487">AutoContactTerminal::create()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#a19f06d7cad163bab3b97a13f4736c9d1">Component::getBodyHook()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1RoutingPad.html#a996f41b8d6a00263097342639002e3e5">RoutingPad::getBoundingBox()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1RoutingPad.html#a647ea8f5e2dbe99aa3c7f4d86ed9afee">RoutingPad::getCenter()</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="el" href="classKatabatic_1_1Grid.html#ae9a2132d74bd6a15002a3917f57516ae">Grid&lt; GCellT &gt;::getGCell()</a>, <a class="el" href="classKatabatic_1_1KatabaticEngine.html#a0702328522e94ca9705222cd5b9e9c6d">KatabaticEngine::getGCellGrid()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Box.html#ab2e56af782505200c3bcb69ae6cbe16c">Box::getHeight()</a>, <a class="el" href="classKatabatic_1_1Session.html#a1ec4ff2ad2a5b964c0ff98170a366197">Session::getKatabatic()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1RoutingPad.html#ab4b8d96592ee98a7a382c8ad9bf04d24">RoutingPad::getLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#a16607d07d915781dc4f5e6663cd7dd0a">Component::getNet()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1RoutingPad.html#a754f24ce3fee93074dc885bf5a3abb0c">RoutingPad::getOccurrence()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Transformation.html#a118369d81f7cc7bffdddcfb84270b19f">Transformation::getOrientation()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Occurrence.html#a53b97927e93f64e7f5df7c76b0b1418d">Occurrence::getPath()</a>, <a class="el" href="classKatabatic_1_1Session.html#a3efd0f0d87be640dc566c1afd821e5e6">Session::getRoutingLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Path.html#a839cfc6dd46e161244dfa7055ad8c67a">Path::getTransformation()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Box.html#a4a07dbb15af2e1a44a88a2e502a1e312">Box::getWidth()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Box.html#acc5d2a8bd02e55b7dd89b2e3eb978574">Box::getXMax()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Box.html#aface811f07334748f81b547336bb7658">Box::getXMin()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Box.html#ab694cc5f242e0fe8f8e13ad64d1fd780">Box::getYMax()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Box.html#a42ba8048c9dedabd808e7c567264a092">Box::getYMin()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9">anonymous_namespace{LoadGrByNet.cpp}::HAccess</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Point.html#a713ba6d38358fc1820371f74647b4214">Point::setX()</a>, and <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Point.html#a5b5c5811c3e354235142eacffc2d887e">Point::setY()</a>.</p>
<p>Referenced by <a class="el" href="group__LoadGlobalRouting.html#gabe00ab10a0dab8a3d2de0709e61e4e7d">GCellTopology::_do_xG_1Pad()</a>.</p>
</div>
</div>
<a class="anchor" id="ga3291d84592215974fe4052c00304bdb1"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void doRp_StairCaseH </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classKatabatic_1_1GCell.html">GCell</a> *&#160;</td>
<td class="paramname"><em>gcell</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *&#160;</td>
<td class="paramname"><em>rp1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *&#160;</td>
<td class="paramname"><em>rp2</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Build the wiring to connect to horizontal Component. Two cases:</p>
<ul>
<li>The Component are aligneds, then only a straight wire is created.</li>
<li>They are <em>not</em> aligned, then a complete dogleg is created.</li>
</ul>
<div class="image">
<img src="doRp_StairCaseH.png" alt="doRp_StairCaseH.png"/>
<div class="caption">
doRp_StairCaseH()</div></div>
<p>References <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">GCellTopology::doRp_AutoContacts()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2">anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#ab451ef19059e6e5bbb77ae391d02a039">Component::getLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#a16607d07d915781dc4f5e6663cd7dd0a">Component::getNet()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#a0f8299ed73705fd4fbf56589dcc7e074">Component::getX()</a>, <a class="el" href="classKatabatic_1_1AutoContact.html#ac597d25a34a79fb4393211c70f5a1bc3">AutoContact::getY()</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, and <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>.</p>
<p>Referenced by <a class="el" href="group__LoadGlobalRouting.html#ga532d1c6b530e0375078ea2d6ea3c6024">GCellTopology::_do_xG_xM2()</a>.</p>
</div>
</div>
<a class="anchor" id="ga6361fb0e90f35cd59063a1ee971ef2a9"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void doRp_StairCaseV </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classKatabatic_1_1GCell.html">GCell</a> *&#160;</td>
<td class="paramname"><em>gcell</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *&#160;</td>
<td class="paramname"><em>rp1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html">Component</a> *&#160;</td>
<td class="paramname"><em>rp2</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Build the wiring to connect to vertical Components. Two cases:</p>
<ul>
<li>The Components are aligneds, then only a straight wire is created.</li>
<li>They are <em>not</em> aligned, then a complete dogleg is created.</li>
</ul>
<div class="image">
<img src="doRp_StairCaseV.png" alt="doRp_StairCaseV.png"/>
<div class="caption">
doRp_StairCaseV()</div></div>
<p>References <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">GCellTopology::doRp_AutoContacts()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2">anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#ab451ef19059e6e5bbb77ae391d02a039">Component::getLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#a16607d07d915781dc4f5e6663cd7dd0a">Component::getNet()</a>, <a class="el" href="classKatabatic_1_1AutoContact.html#a852afe759ce2cb8cb9c0524fc1e23387">AutoContact::getX()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#a727da3f127c3a7a0a09468219f98c3e6">Component::getY()</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, and <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>.</p>
<p>Referenced by <a class="el" href="group__LoadGlobalRouting.html#ga007efc725aae31782204a44949765cb4">GCellTopology::_do_xG_xM3()</a>.</p>
</div>
</div>
<a class="anchor" id="gabe00ab10a0dab8a3d2de0709e61e4e7d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void _do_xG_1Pad </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct the topology, when there is only global wires and one local terminal, but coming from a Pad. As thoses connectors will always be on one border of the GCell they can be considered as a kind of global.</p>
<p>So this method mostly calls <a class="el" href="group__LoadGlobalRouting.html#ga60edeea78b56db072fc26a58a7afbcd4">GCellTopology::doRp_AccessPad()</a> to create the AutoContactTerminal, then calls <a class="el" href="group__LoadGlobalRouting.html#gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca">GCellTopology::_do_xG()</a>, except for straight lines which are managed directly. </p>
<p>References <a class="el" href="group__LoadGlobalRouting.html#gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca">GCellTopology::_do_xG()</a>, <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#ga60edeea78b56db072fc26a58a7afbcd4">GCellTopology::doRp_AccessPad()</a>, <a class="el" href="classKatabatic_1_1AutoContact.html#a4092778435abf3fb25a986a802bdb6c6">AutoContact::getBodyHook()</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9">anonymous_namespace{LoadGrByNet.cpp}::HAccess</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">anonymous_namespace{LoadGrByNet.cpp}::NoFlags</a>.</p>
</div>
</div>
<a class="anchor" id="gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void _do_xG </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct the topology, when there is only global wires (no local terminals).</p>
<p>Some topology are not handled because they must not be managed by this function: </p>
<ul>
<li>
One global: nonsensical because there also must be a terminal. </li>
<li>
Two aligned globals: in that case we do a straight wire whithout any AutoContact (handled by the source/target of the wire). </li>
</ul>
<div class="image">
<img src="_do_xG.png" alt="_do_xG.png"/>
<div class="caption">
_do_xG()</div></div>
<p>References <a class="el" href="classKatabatic_1_1AutoContactVTee.html#ab6932aef1faf4881375cc989f5cd9c2c">AutoContactVTee::create()</a>, <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoContactHTee.html#a9b42579ac2487765c83e31f7ca3ee562">AutoContactHTee::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, and <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>.</p>
<p>Referenced by <a class="el" href="group__LoadGlobalRouting.html#gabe00ab10a0dab8a3d2de0709e61e4e7d">GCellTopology::_do_xG_1Pad()</a>.</p>
</div>
</div>
<a class="anchor" id="gad24a03e87e269f16dcc28d8c2d9f1cfb"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void _do_1G_1M1 </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct a topology where there is <em>one</em> global and one RoutingPad in <code>METAL1</code>. The <code>METAL1</code> is assumed to be vertical.</p>
<dl class="section user"><dt>Remark:</dt><dd>When accessing the RoutingPad through an horizontal global segment and the vertical extension of the segment is small, the global is still directly attached to the terminal, inducing a high constraint on it. We left to job of slackening it to the router.</dd></dl>
<div class="image">
<img src="_do_1G_1M1.png" alt="_do_1G_1M1.png"/>
<div class="caption">
_do_1G_1M1()</div></div>
<p>References <a class="el" href="group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357">GCellTopology::doRp_Access()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9">anonymous_namespace{LoadGrByNet.cpp}::HAccess</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">anonymous_namespace{LoadGrByNet.cpp}::NoFlags</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc">anonymous_namespace{LoadGrByNet.cpp}::VSmall</a>.</p>
</div>
</div>
<a class="anchor" id="ga97942453a1bc5b01106aa380271fd7fc"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void _do_1G_xM1 </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct a topology where there is <em>one</em> global and any number of RoutingPad in <code>METAL1</code>. The <code>METAL1</code> is assumed to be vertical.</p>
<p>The RoutingPads are linked together two by two. If the horizontal segments are not aligned by the router, part of the routage will be done through the RoutingPad itself. The global incoming segment will connected to the leftmost, rightmost or centermost RoutingPad according from wich side it comes from.</p>
<div class="image">
<img src="_do_1G_xM1.png" alt="_do_1G_xM1.png"/>
<div class="caption">
_do_1G_xM1()</div></div>
<p>References <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357">GCellTopology::doRp_Access()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#aabb87b9ef71f71cea681a03a6213f616">Component::getBoundingBox()</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Box.html#ab2e56af782505200c3bcb69ae6cbe16c">Box::getHeight()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9">anonymous_namespace{LoadGrByNet.cpp}::HAccess</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">anonymous_namespace{LoadGrByNet.cpp}::NoFlags</a>.</p>
</div>
</div>
<a class="anchor" id="gae60ed4e27ad89a1e2ff2cd6415ef33f1"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void _do_xG_1M1_1M2 </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct a topology where there is at least one global (and up to 4), one <code>METAL1</code> RoutingPad (assumed V) and one <code>METAL2</code> RoutingPad (assumed H).</p>
<p>In this topology, we want to try to reuse the <code>METAL2</code> RoutingPad as a feedtrough in the horizontal routage. Thus:</p>
<ul>
<li>The <code>METAL1</code> and <code>METAL2</code> RoutingPad are connected through a separate wiring.</li>
<li>The south &amp; west global wiring is attached to the leftmost contact of the <code>METAL2</code>.</li>
<li>The north &amp; east global wiring is attached to the rightmost contact of the <code>METAL2</code>.</li>
</ul>
<p>South/west and north/south can be build independantly. Depending on the number of globals, they can consist of:</p>
<ul>
<li>Nothing (no south nor west).</li>
<li>An AutoContact (west present).</li>
<li>An horizontal plus a turn (south present).</li>
<li>An horizontal plus a HTee (south &amp; west present).</li>
</ul>
<dl class="section user"><dt>Remark:</dt><dd>Not all configurations are represented below.</dd></dl>
<div class="image">
<img src="_do_xG_1M1_1M2.png" alt="_do_xG_1M1_1M2.png"/>
<div class="caption">
_do_xG_1M1_1M2()</div></div>
<p>References <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoContactHTee.html#a9b42579ac2487765c83e31f7ca3ee562">AutoContactHTee::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">GCellTopology::doRp_AutoContacts()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2">anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="el" href="classKatabatic_1_1Session.html#a3efd0f0d87be640dc566c1afd821e5e6">Session::getRoutingLayer()</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">anonymous_namespace{LoadGrByNet.cpp}::NoFlags</a>.</p>
</div>
</div>
<a class="anchor" id="gaf9b009520f54099668ac9d12f2c85257"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void _do_xG_xM1_xM3 </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct a topology where there is at least one global (and up to 4), at least one <code>METAL1</code> RoutingPad (assumed V) and at least one <code>METAL3</code> RoutingPad (assumed V).</p>
<p>In this topology, we want to try to reuse the <code>METAL3</code> RoutingPad as a feedtrough in the vertical routage. Thus:</p>
<ul>
<li>The <code>METAL1</code> and <code>METAL3</code> RoutingPad are connected through a separate wiring made of separate horizontals.</li>
<li>The south-west global wiring is attached to the leftmost RoutingPad if there isn't south or to the first <code>METAL3</code> otherwise.</li>
<li>The north-east global wiring is attached to the rightmost RoutingPad if there isn't north or to the first <code>METAL3</code> otherwise.</li>
</ul>
<p>South/west and north/south can be build independantly. Depending on the number of globals, they can consist of:</p>
<ul>
<li>Nothing (no south nor west).</li>
<li>An AutoContact on the leftmost RoutingPad (west present).</li>
<li>An AutoContact on the first <code>METAL3</code> (only south present).</li>
<li>An AutoContact plus a vertical plus a VTee (south &amp; west present).</li>
</ul>
<div class="image">
<img src="_do_xG_xM1_xM3.png" alt="_do_xG_xM1_xM3.png"/>
<div class="caption">
_do_xG_xM1_xM3()</div></div>
<p>References <a class="el" href="classKatabatic_1_1AutoContactVTee.html#ab6932aef1faf4881375cc989f5cd9c2c">AutoContactVTee::create()</a>, <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoContactHTee.html#a9b42579ac2487765c83e31f7ca3ee562">AutoContactHTee::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357">GCellTopology::doRp_Access()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">GCellTopology::doRp_AutoContacts()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2">anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#aabb87b9ef71f71cea681a03a6213f616">Component::getBoundingBox()</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Box.html#ab2e56af782505200c3bcb69ae6cbe16c">Box::getHeight()</a>, <a class="el" href="classKatabatic_1_1Session.html#a3efd0f0d87be640dc566c1afd821e5e6">Session::getRoutingLayer()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9">anonymous_namespace{LoadGrByNet.cpp}::HAccess</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">anonymous_namespace{LoadGrByNet.cpp}::NoFlags</a>.</p>
</div>
</div>
<a class="anchor" id="ga532d1c6b530e0375078ea2d6ea3c6024"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void _do_xG_xM2 </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct a topology where there is at least one global (and up to 4), and any number of <code>METAL2</code> RoutingPads (assumeds H).</p>
<p>In this topology, we want to try to reuse the <code>METAL2</code> RoutingPad as a feedtrough in the horizontal routage. Thus:</p>
<ul>
<li>The RoutingPad are connecteds trough a separate staircase (or straight wire if aligneds).</li>
<li>The south-west global wiring is attached to the leftmost RoutingPad if there isn't south or to the biggest horizontal RoutingPad otherwise.</li>
<li>The north-east global wiring is attached to the rightmost RoutingPad if there isn't south or to the biggest horizontal RoutingPad otherwise.</li>
</ul>
<div class="image">
<img src="_do_xG_xM2.png" alt="_do_xG_xM2.png"/>
<div class="caption">
_do_xG_xM2()</div></div>
<p>References <a class="el" href="classKatabatic_1_1AutoContactVTee.html#ab6932aef1faf4881375cc989f5cd9c2c">AutoContactVTee::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357">GCellTopology::doRp_Access()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">GCellTopology::doRp_AutoContacts()</a>, <a class="el" href="group__LoadGlobalRouting.html#ga3291d84592215974fe4052c00304bdb1">GCellTopology::doRp_StairCaseH()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Component.html#aabb87b9ef71f71cea681a03a6213f616">Component::getBoundingBox()</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Box.html#a4a07dbb15af2e1a44a88a2e502a1e312">Box::getWidth()</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">anonymous_namespace{LoadGrByNet.cpp}::NoFlags</a>.</p>
</div>
</div>
<a class="anchor" id="ga2519ef984b3d19f123827a9b12651672"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void _do_1G_1M3 </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct a topology where there is one global and one <code>METAL3</code> RoutingPad (assumeds V).</p>
<p>In this topology, we reuse the <code>METAL3</code> RoutingPad as a feedtrough in the vertical routage. Thus:</p>
<ul>
<li>If the global is either north or south, we directly connect to the north end or south end of the RoutingPad. <span class="red">The vertical global will</span> <span class="red">have no slack at all we assume that METAL3 terminals are only from</span> <span class="red">blocks and are aligneds vertically.</span></li>
<li>If the global is east or west <em>and</em> the RoutingPad is sufficiently extended in the vertical direction, we connect an horizontal in the normal way.</li>
<li>If the global is not sufficiently extended, we add a turn to give some slack to the global.</li>
</ul>
<div class="image">
<img src="_do_1G_1M3.png" alt="_do_1G_1M3.png"/>
<div class="caption">
_do_1G_1M3()</div></div>
<p>References <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">GCellTopology::doRp_AutoContacts()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2">anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="el" href="classKatabatic_1_1AutoContact.html#a852afe759ce2cb8cb9c0524fc1e23387">AutoContact::getX()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9">anonymous_namespace{LoadGrByNet.cpp}::HAccess</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">anonymous_namespace{LoadGrByNet.cpp}::NoFlags</a>.</p>
</div>
</div>
<a class="anchor" id="ga007efc725aae31782204a44949765cb4"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void _do_xG_xM3 </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct a topology where there at least one global and two <code>METAL3</code> RoutingPad (assumed V).</p>
<p>In this topology, we reuse the <code>METAL3</code> RoutingPad as a feedtrough in the vertical routage. <span class="red">We assume that the most likely relative position</span> <span class="red">of the RoutingPads is to be aligned vertically</span>. Thus:</p>
<ul>
<li>All RoutingPads are linked two by two trough vertical staircases.</li>
<li>The south-west global wiring is attached to the bottommost RoutingPad (without vertical slack). If a misalignment is detected, then a dogleg is added.</li>
<li>The north-east global wiring is attached to the topmost RoutingPad (without vertical slack).</li>
</ul>
<p>South/west and north/south can be build independantly. Depending on the number of globals, they can consist of:</p>
<ul>
<li>Nothing (no south nor west).</li>
<li>An sliding AutoContact on the bottommost RoutingPad (west present).</li>
<li>An fixed AutoContact on the bottommost RoutingPad (only south present).</li>
<li>An fixed AutoContact plus a vertical plus a VTee (south &amp; west present).</li>
</ul>
<div class="image">
<img src="_do_xG_xM3.png" alt="_do_xG_xM3.png"/>
<div class="caption">
_do_xG_xM3()</div></div>
<p>References <a class="el" href="classKatabatic_1_1AutoContactVTee.html#ab6932aef1faf4881375cc989f5cd9c2c">AutoContactVTee::create()</a>, <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357">GCellTopology::doRp_Access()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">GCellTopology::doRp_AutoContacts()</a>, <a class="el" href="group__LoadGlobalRouting.html#ga6361fb0e90f35cd59063a1ee971ef2a9">GCellTopology::doRp_StairCaseV()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2">anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/group__DbUGroup.html#gadc9c1a06b4296dbddcf711077113f4bd">DbU::getValueString()</a>, <a class="el" href="classKatabatic_1_1AutoContact.html#a852afe759ce2cb8cb9c0524fc1e23387">AutoContact::getX()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9">anonymous_namespace{LoadGrByNet.cpp}::HAccess</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">anonymous_namespace{LoadGrByNet.cpp}::NoFlags</a>.</p>
</div>
</div>
<a class="anchor" id="ga3973291866b39c10cea5ca17f7d174fb"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void singleGCell </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classKatabatic_1_1KatabaticEngine.html">KatabaticEngine</a> *&#160;</td>
<td class="paramname"><em>ktbt</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Net.html">Net</a> *&#160;</td>
<td class="paramname"><em>net</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>All the RoutingPads of the net are concentrated under a single GCell. This function assumes that all the terminals are in <code>METAL1</code> (vertical), and link them two by two by horizontal wires. </p>
<p>References <a class="el" href="classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3">AutoContactTurn::create()</a>, <a class="el" href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>, <a class="el" href="group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19">GCellTopology::doRp_AutoContacts()</a>, <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d">anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact</a>, <a class="el" href="classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e">Session::getContactLayer()</a>, <a class="el" href="classKatabatic_1_1Grid.html#ae9a2132d74bd6a15002a3917f57516ae">Grid&lt; GCellT &gt;::getGCell()</a>, <a class="el" href="classKatabatic_1_1KatabaticEngine.html#a0702328522e94ca9705222cd5b9e9c6d">KatabaticEngine::getGCellGrid()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/crlcore/doc/crlcore/html/crlcore.tag:../crlcore" href="../crlcore/classCRL_1_1RoutingGauge.html#a40e8127ea7a26b26c3e797571b03121a">RoutingGauge::getLayerDepth()</a>, <a class="el" href="classKatabatic_1_1Session.html#a9a05289b33122f312aa2c88c4b023292">Session::getRoutingGauge()</a>, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Net.html#a294b2cd267d55a9f3ea27f974ef57145">Net::getRoutingPads()</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a>, <a class="el" href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a>, and <a class="el" href="group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b">anonymous_namespace{LoadGrByNet.cpp}::NoFlags</a>.</p>
</div>
</div>
</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">Katabatic - Routing Toolbox</td>
<td class="RFooter"><small>Copyright &#169; 2008-2016 UPMC. All rights reserved</small></td>
</tr>
</table>
</body>
</html>