coriolis/deprecated/katabatic/doc/latex/group__LoadGlobalRouting.tex

487 lines
42 KiB
TeX

\hypertarget{group__LoadGlobalRouting}{}\section{Global Routing Loading}
\label{group__LoadGlobalRouting}\index{Global Routing Loading@{Global Routing Loading}}
Translation rules to build detailed routing from global.
\subsection*{Classes}
\begin{DoxyCompactItemize}
\item
class \mbox{\hyperlink{classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology}{G\+Cell\+Topology}}
\begin{DoxyCompactList}\small\item\em Build the wiring for a Net inside a G\+Cell ({\bfseries internal}). \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Enumerations}
\begin{DoxyCompactItemize}
\item
enum \mbox{\hyperlink{group__LoadGlobalRouting_gaec07c7f30c801c3b0f72193757250d64}{Local\+Function\+Flag}} \{ \newline
\mbox{\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b}{No\+Flags}} = 0x00000000
, \newline
\mbox{\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9}{H\+Access}} = 0x00000002,
\newline
\mbox{\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc}{V\+Small}} = 0x00000004,
\newline
\mbox{\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8}{H\+Small}} = 0x00000008,
\newline
\mbox{\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9}{Punctual}} = 0x00000010
, \newline
\mbox{\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d}{Do\+Source\+Contact}} = 0x00000100,
\newline
\mbox{\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2}{Do\+Target\+Contact}} = 0x00000200
\}
\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item
unsigned int \mbox{\hyperlink{group__LoadGlobalRouting_gaad5d32b07d1d53ecc8642e4b10df9605}{check\+Routing\+Pad\+Size}} (\textbf{ Component} $\ast$anchor)
\item
static void \mbox{\hyperlink{group__LoadGlobalRouting_gae9cae408ea16a3f7c77c3d75f0242f19}{do\+Rp\+\_\+\+Auto\+Contacts}} (\mbox{\hyperlink{classKatabatic_1_1GCell}{G\+Cell}} $\ast$, \textbf{ Component} $\ast$, \mbox{\hyperlink{classKatabatic_1_1AutoContact}{Auto\+Contact}} $\ast$\&source, \mbox{\hyperlink{classKatabatic_1_1AutoContact}{Auto\+Contact}} $\ast$\&target, unsigned int flags)
\item
static \mbox{\hyperlink{classKatabatic_1_1AutoContact}{Auto\+Contact}} $\ast$ \mbox{\hyperlink{group__LoadGlobalRouting_gada6d3c694b8d741b6504b7c3da166357}{do\+Rp\+\_\+\+Access}} (\mbox{\hyperlink{classKatabatic_1_1GCell}{G\+Cell}} $\ast$, \textbf{ Component} $\ast$, unsigned int flags)
\item
static \mbox{\hyperlink{classKatabatic_1_1AutoContact}{Auto\+Contact}} $\ast$ \mbox{\hyperlink{group__LoadGlobalRouting_ga60edeea78b56db072fc26a58a7afbcd4}{do\+Rp\+\_\+\+Access\+Pad}} (\textbf{ Routing\+Pad} $\ast$, unsigned int flags)
\item
static void \mbox{\hyperlink{group__LoadGlobalRouting_ga3291d84592215974fe4052c00304bdb1}{do\+Rp\+\_\+\+Stair\+CaseH}} (\mbox{\hyperlink{classKatabatic_1_1GCell}{G\+Cell}} $\ast$, \textbf{ Component} $\ast$rp1, \textbf{ Component} $\ast$rp2)
\item
static void \mbox{\hyperlink{group__LoadGlobalRouting_ga6361fb0e90f35cd59063a1ee971ef2a9}{do\+Rp\+\_\+\+Stair\+CaseV}} (\mbox{\hyperlink{classKatabatic_1_1GCell}{G\+Cell}} $\ast$, \textbf{ Component} $\ast$rp1, \textbf{ Component} $\ast$rp2)
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_gabe00ab10a0dab8a3d2de0709e61e4e7d}{\+\_\+do\+\_\+x\+G\+\_\+1\+Pad}} ()
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca}{\+\_\+do\+\_\+xG}} ()
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_gad24a03e87e269f16dcc28d8c2d9f1cfb}{\+\_\+do\+\_\+1\+G\+\_\+1\+M1}} ()
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_ga97942453a1bc5b01106aa380271fd7fc}{\+\_\+do\+\_\+1\+G\+\_\+x\+M1}} ()
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_gae60ed4e27ad89a1e2ff2cd6415ef33f1}{\+\_\+do\+\_\+x\+G\+\_\+1\+M1\+\_\+1\+M2}} ()
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_gaf9b009520f54099668ac9d12f2c85257}{\+\_\+do\+\_\+x\+G\+\_\+x\+M1\+\_\+x\+M3}} ()
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_ga532d1c6b530e0375078ea2d6ea3c6024}{\+\_\+do\+\_\+x\+G\+\_\+x\+M2}} ()
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_ga2519ef984b3d19f123827a9b12651672}{\+\_\+do\+\_\+1\+G\+\_\+1\+M3}} ()
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_ga007efc725aae31782204a44949765cb4}{\+\_\+do\+\_\+x\+G\+\_\+x\+M3}} ()
\item
void \mbox{\hyperlink{group__LoadGlobalRouting_ga3973291866b39c10cea5ca17f7d174fb}{single\+G\+Cell}} (\mbox{\hyperlink{classKatabatic_1_1KatabaticEngine}{Katabatic\+Engine}} $\ast$ktbt, \textbf{ Net} $\ast$net)
\end{DoxyCompactItemize}
\subsection{Detailed Description}
Translation rules to build detailed routing from global.
This module documents how the global routing built by {\ttfamily Knik} is loaded into the {\ttfamily \mbox{\hyperlink{namespaceKatabatic}{Katabatic}}} data-\/base. It is intented for developpers only.
\subsection{Enumeration Type Documentation}
\mbox{\Hypertarget{group__LoadGlobalRouting_gaec07c7f30c801c3b0f72193757250d64}\label{group__LoadGlobalRouting_gaec07c7f30c801c3b0f72193757250d64}}
\index{Global Routing Loading@{Global Routing Loading}!Local\+Function\+Flag@{Local\+Function\+Flag}}
\index{Local\+Function\+Flag@{Local\+Function\+Flag}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{Local\+Function\+Flag}{LocalFunctionFlag}}
{\footnotesize\ttfamily enum \mbox{\hyperlink{group__LoadGlobalRouting_gaec07c7f30c801c3b0f72193757250d64}{Local\+Function\+Flag}}}
A set of flags for all functions of the Load\+Gr\+By\+Net module. They can be combined to form the {\itshape flags} argument of functions. the functions will ignore flags that are not intended to them.
For {\ttfamily H\+Small}, {\ttfamily V\+Small} \& {\ttfamily Punctual} see \mbox{\hyperlink{group__LoadGlobalRouting_gaad5d32b07d1d53ecc8642e4b10df9605}{check\+Routing\+Pad\+Size()}}. \begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{No\+Flags@{No\+Flags}!Global Routing Loading@{Global Routing Loading}}\index{Global Routing Loading@{Global Routing Loading}!No\+Flags@{No\+Flags}}}\mbox{\Hypertarget{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b}\label{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b}}
No\+Flags&A simple alias over zero to explicitly tell that no flag at all is passed to the function. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{H\+Access@{H\+Access}!Global Routing Loading@{Global Routing Loading}}\index{Global Routing Loading@{Global Routing Loading}!H\+Access@{H\+Access}}}\mbox{\Hypertarget{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9}\label{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9}}
H\+Access&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. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{V\+Small@{V\+Small}!Global Routing Loading@{Global Routing Loading}}\index{Global Routing Loading@{Global Routing Loading}!V\+Small@{V\+Small}}}\mbox{\Hypertarget{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc}\label{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc}}
V\+Small&The Routing\+Pad vertically covers a very small number of access points, so it is likely overconstrained for direct horizontal connexion. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{H\+Small@{H\+Small}!Global Routing Loading@{Global Routing Loading}}\index{Global Routing Loading@{Global Routing Loading}!H\+Small@{H\+Small}}}\mbox{\Hypertarget{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8}\label{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8}}
H\+Small&The Routing\+Pad horizontally covers a very small number of access points, so it is likely overconstrained for direct vertical connexion. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Punctual@{Punctual}!Global Routing Loading@{Global Routing Loading}}\index{Global Routing Loading@{Global Routing Loading}!Punctual@{Punctual}}}\mbox{\Hypertarget{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9}\label{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9}}
Punctual&The Routing\+Pad covers only an access point in either direction. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Do\+Source\+Contact@{Do\+Source\+Contact}!Global Routing Loading@{Global Routing Loading}}\index{Global Routing Loading@{Global Routing Loading}!Do\+Source\+Contact@{Do\+Source\+Contact}}}\mbox{\Hypertarget{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d}\label{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d}}
Do\+Source\+Contact&When creating \mbox{\hyperlink{classKatabatic_1_1AutoContactTerminal}{Katabatic\+::\+Auto\+Contact\+Terminal}} on non-\/punctual Routing\+Pad, this flag request the creation of a contact {\itshape on the source point}. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Do\+Target\+Contact@{Do\+Target\+Contact}!Global Routing Loading@{Global Routing Loading}}\index{Global Routing Loading@{Global Routing Loading}!Do\+Target\+Contact@{Do\+Target\+Contact}}}\mbox{\Hypertarget{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2}\label{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2}}
Do\+Target\+Contact&When creating \mbox{\hyperlink{classKatabatic_1_1AutoContactTerminal}{Katabatic\+::\+Auto\+Contact\+Terminal}} on non-\/punctual Routing\+Pad, this flag request the creation of a contact {\itshape on the target point}. \\
\hline
\end{DoxyEnumFields}
\subsection{Function Documentation}
\mbox{\Hypertarget{group__LoadGlobalRouting_gaad5d32b07d1d53ecc8642e4b10df9605}\label{group__LoadGlobalRouting_gaad5d32b07d1d53ecc8642e4b10df9605}}
\index{Global Routing Loading@{Global Routing Loading}!check\+Routing\+Pad\+Size@{check\+Routing\+Pad\+Size}}
\index{check\+Routing\+Pad\+Size@{check\+Routing\+Pad\+Size}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{check\+Routing\+Pad\+Size()}{checkRoutingPadSize()}}
{\footnotesize\ttfamily unsigned int check\+Routing\+Pad\+Size (\begin{DoxyParamCaption}\item[{\textbf{ Component} $\ast$}]{rp }\end{DoxyParamCaption})}
Look at the geometrical size of the Component and assess if it\textquotesingle{}s span is too narrow either horizontally or vertically. Return a combination of flags indicating it\textquotesingle{}s state\+:
\begin{DoxyItemize}
\item H\+Small \+: less than 3 pitches in horizontal direction.
\item V\+Small \+: less than 3 pitches in vertical direction.
\item Punctual \+: one pitch in either directions.
\end{DoxyItemize}
The component can be a Routing\+Pad, a Vertical or an Horizontal.
References Component\+::get\+Layer(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Small, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Punctual, to\+Lambda(), and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+V\+Small.
Referenced by G\+Cell\+Topology\+::do\+Rp\+\_\+\+Access().
\mbox{\Hypertarget{group__LoadGlobalRouting_gae9cae408ea16a3f7c77c3d75f0242f19}\label{group__LoadGlobalRouting_gae9cae408ea16a3f7c77c3d75f0242f19}}
\index{Global Routing Loading@{Global Routing Loading}!do\+Rp\+\_\+\+Auto\+Contacts@{do\+Rp\+\_\+\+Auto\+Contacts}}
\index{do\+Rp\+\_\+\+Auto\+Contacts@{do\+Rp\+\_\+\+Auto\+Contacts}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{do\+Rp\+\_\+\+Auto\+Contacts()}{doRp\_AutoContacts()}}
{\footnotesize\ttfamily void do\+Rp\+\_\+\+Auto\+Contacts (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classKatabatic_1_1GCell}{G\+Cell}} $\ast$}]{gcell, }\item[{\textbf{ Component} $\ast$}]{rp, }\item[{\mbox{\hyperlink{classKatabatic_1_1AutoContact}{Auto\+Contact}} $\ast$\&}]{source, }\item[{\mbox{\hyperlink{classKatabatic_1_1AutoContact}{Auto\+Contact}} $\ast$\&}]{target, }\item[{unsigned int}]{flags }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
\begin{DoxyParams}{Parameters}
{\em gcell} & The G\+Cell into which create the Auto\+Contact. \\
\hline
{\em rp} & The Component we want to access. \\
\hline
{\em source} & The Auto\+Contact created on the {\ttfamily source} ({\itshape returned}). \\
\hline
{\em target} & The Auto\+Contact created on the {\ttfamily target} ({\itshape returned}). \\
\hline
{\em flags} & Managed by this function\+:
\begin{DoxyItemize}
\item Local\+Function\+Flag\+::\+Do\+Source\+Contact
\item Local\+Function\+Flag\+::\+Do\+Target\+Contact
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
Create the Auto\+Contact directly anchored on the Component (terminal). Three cases are manageds\+:
\begin{DoxyEnumerate}
\item {\bfseries Ordinary (non-\/punctual) {\ttfamily M\+E\+T\+A\+L1} terminal}\+: an Auto\+Contact\+Terminal is anchored on the Routing\+Pad.
\item {\bfseries Punctual {\ttfamily M\+E\+T\+A\+L1} terminal}, the access must never be blocked by other routing. To ensure it, we create a fixed Auto\+Segment (anchored on two Auto\+Contact\+Terminal) to cover it. The {\itshape normal} Auto\+Contact\+Terminal is also created.
\item {\bfseries non {\ttfamily M\+E\+T\+A\+L1} terminal}, as for the punctual {\ttfamily M\+E\+T\+A\+L1}, a fixed protection is added over the Routing\+Pad. If we access horizontally a vertical Routing\+Pad or vertically an horizontal one, an extra Auto\+Contact\+Terminal is added (to allow is displacement along the Routing\+Pad).
\end{DoxyEnumerate}
To avoid creating a fixed protection over a Routing\+Pad multiple times, the Routing\+Pad and it\textquotesingle{}s associated protection is stored in a static {\ttfamily map} \+: {\ttfamily \+\_\+\+\_\+routing\+Pad\+Auto\+Segments}.
Conversely, because an Auto\+Contact\+Terminal 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 Auto\+Contact is requested, it is created centered on the Routing\+Pad. The initial position of Auto\+Contact {\itshape do not prevent them to move afterwards}, even those created on source/target on a non-\/punctual Routing\+Pad.
\begin{DoxyParagraph}{Remark\+: For clarity we describe the layer management of this function in term}
of {\ttfamily M\+E\+T\+AL}, but it is the Routing\+Gauge depth which is actually used.
\end{DoxyParagraph}
References Katabatic\+::\+Cnt\+Fixed, Auto\+Contact\+Terminal\+::create(), Auto\+Segment\+::create(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Source\+Contact, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Target\+Contact, Session\+::get\+Contact\+Layer(), Grid$<$ G\+Cell\+T $>$\+::get\+G\+Cell(), Katabatic\+Engine\+::get\+G\+Cell\+Grid(), Session\+::get\+Katabatic(), Component\+::get\+Layer(), Katabatic\+::\+Kb\+Horizontal, Katabatic\+::\+Seg\+Fixed, and Auto\+Segment\+::set\+Flags().
Referenced by G\+Cell\+Topology\+::\+\_\+do\+\_\+1\+G\+\_\+1\+M3(), G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+1\+M1\+\_\+1\+M2(), G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+x\+M1\+\_\+x\+M3(), G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+x\+M2(), G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+x\+M3(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Access(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Stair\+Case\+H(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Stair\+Case\+V(), and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::single\+G\+Cell().
\mbox{\Hypertarget{group__LoadGlobalRouting_gada6d3c694b8d741b6504b7c3da166357}\label{group__LoadGlobalRouting_gada6d3c694b8d741b6504b7c3da166357}}
\index{Global Routing Loading@{Global Routing Loading}!do\+Rp\+\_\+\+Access@{do\+Rp\+\_\+\+Access}}
\index{do\+Rp\+\_\+\+Access@{do\+Rp\+\_\+\+Access}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{do\+Rp\+\_\+\+Access()}{doRp\_Access()}}
{\footnotesize\ttfamily \mbox{\hyperlink{classKatabatic_1_1AutoContact}{Auto\+Contact}} $\ast$ do\+Rp\+\_\+\+Access (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classKatabatic_1_1GCell}{G\+Cell}} $\ast$}]{gcell, }\item[{\textbf{ Component} $\ast$}]{rp, }\item[{unsigned int}]{flags }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
\begin{DoxyParams}{Parameters}
{\em gcell} & The G\+Cell into which create the Auto\+Contact. \\
\hline
{\em rp} & The Component onto which anchor the access contact. \\
\hline
{\em flags} & Relevant flags are\+:
\begin{DoxyItemize}
\item H\+Access, the terminal is to be accessed through an horizontal segment.
\item V\+Small, force the terminal to be considered as small in the vertical direction.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
If {\ttfamily H\+Access} is set, the Component is to be accessed trough an horizontal segment. If unset, the access is done vertically.
Create an Auto\+Contact 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 {\ttfamily V\+Small}), a local horizontal Auto\+Segment is added to slacken the vertical constraints.
References anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::check\+Routing\+Pad\+Size(), Auto\+Contact\+Turn\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Auto\+Contacts(), Session\+::get\+Contact\+Layer(), Component\+::get\+Net(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Access, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Small, Katabatic\+::\+Kb\+Horizontal, Katabatic\+::\+Kb\+Vertical, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+V\+Small.
Referenced by G\+Cell\+Topology\+::\+\_\+do\+\_\+1\+G\+\_\+1\+M1(), G\+Cell\+Topology\+::\+\_\+do\+\_\+1\+G\+\_\+x\+M1(), G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+x\+M1\+\_\+x\+M3(), G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+x\+M2(), and G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+x\+M3().
\mbox{\Hypertarget{group__LoadGlobalRouting_ga60edeea78b56db072fc26a58a7afbcd4}\label{group__LoadGlobalRouting_ga60edeea78b56db072fc26a58a7afbcd4}}
\index{Global Routing Loading@{Global Routing Loading}!do\+Rp\+\_\+\+Access\+Pad@{do\+Rp\+\_\+\+Access\+Pad}}
\index{do\+Rp\+\_\+\+Access\+Pad@{do\+Rp\+\_\+\+Access\+Pad}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{do\+Rp\+\_\+\+Access\+Pad()}{doRp\_AccessPad()}}
{\footnotesize\ttfamily \mbox{\hyperlink{classKatabatic_1_1AutoContact}{Auto\+Contact}} $\ast$ do\+Rp\+\_\+\+Access\+Pad (\begin{DoxyParamCaption}\item[{\textbf{ Routing\+Pad} $\ast$}]{rp, }\item[{unsigned int}]{flags }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
\begin{DoxyParams}{Parameters}
{\em rp} & The Component onto which anchor the access contact. \\
\hline
{\em flags} & Relevant flags are\+:
\begin{DoxyItemize}
\item H\+Access, the terminal is to be accessed through an horizontal segment.
\item V\+Small, force the terminal to be considered as small in the vertical direction.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A \mbox{\hyperlink{classKatabatic_1_1AutoContactTerminal}{Katabatic\+::\+Auto\+Contact\+Terminal}} .
\end{DoxyReturn}
The Component {\ttfamily rp} is a Routing\+Pad which belongs to a pad cell. This case occurs when we are routing a complete chip. This method build, from the {\ttfamily rp} a stack of articulated punctual segments and contacts to reach the default H/V routing layers (usually {\ttfamily M\+E\+T\+A\+L2} \& {\ttfamily M\+E\+T\+A\+L3}). This may be needed when the pad terminal is in {\ttfamily M\+E\+T\+A\+L5}, for instance.
The returned Auto\+Contact\+Terminal is anchored on the last punctual segment build.
The G\+Cell into which the Auto\+Contact\+Terminal is created may be under the pads area. However, it will be right on the border of the G\+Cell. The global router vertexes of G\+Cell under the pad area are marked as blocked so will never be used for routing.
\begin{DoxyParagraph}{Remark\+: The segments and contacts added to ensure the layer connexity are not}
put into the \mbox{\hyperlink{namespaceKatabatic}{Katabatic}} database. They are plain Hurricane objects, invisibles from it.
\end{DoxyParagraph}
References Contact\+::create(), Horizontal\+::create(), Vertical\+::create(), Auto\+Contact\+Terminal\+::create(), Hook\+::detach(), Component\+::get\+Body\+Hook(), Routing\+Pad\+::get\+Bounding\+Box(), Routing\+Pad\+::get\+Center(), Session\+::get\+Contact\+Layer(), Grid$<$ G\+Cell\+T $>$\+::get\+G\+Cell(), Katabatic\+Engine\+::get\+G\+Cell\+Grid(), Box\+::get\+Height(), Session\+::get\+Katabatic(), Routing\+Pad\+::get\+Layer(), Component\+::get\+Net(), Routing\+Pad\+::get\+Occurrence(), Transformation\+::get\+Orientation(), Occurrence\+::get\+Path(), Session\+::get\+Routing\+Layer(), Path\+::get\+Transformation(), Box\+::get\+Width(), Box\+::get\+X\+Max(), Box\+::get\+X\+Min(), Box\+::get\+Y\+Max(), Box\+::get\+Y\+Min(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Access, Katabatic\+::\+Kb\+Horizontal, Point\+::set\+X(), and Point\+::set\+Y().
Referenced by G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+1\+Pad().
\mbox{\Hypertarget{group__LoadGlobalRouting_ga3291d84592215974fe4052c00304bdb1}\label{group__LoadGlobalRouting_ga3291d84592215974fe4052c00304bdb1}}
\index{Global Routing Loading@{Global Routing Loading}!do\+Rp\+\_\+\+Stair\+CaseH@{do\+Rp\+\_\+\+Stair\+CaseH}}
\index{do\+Rp\+\_\+\+Stair\+CaseH@{do\+Rp\+\_\+\+Stair\+CaseH}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{do\+Rp\+\_\+\+Stair\+Case\+H()}{doRp\_StairCaseH()}}
{\footnotesize\ttfamily void do\+Rp\+\_\+\+Stair\+CaseH (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classKatabatic_1_1GCell}{G\+Cell}} $\ast$}]{gcell, }\item[{\textbf{ Component} $\ast$}]{rp1, }\item[{\textbf{ Component} $\ast$}]{rp2 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
Build the wiring to connect to horizontal Component. Two cases\+:
\begin{DoxyItemize}
\item The Component are aligneds, then only a straight wire is created.
\item They are {\itshape not} aligned, then a complete dogleg is created.
\end{DoxyItemize}
References Auto\+Contact\+Turn\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Auto\+Contacts(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Source\+Contact, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Target\+Contact, Session\+::get\+Contact\+Layer(), Component\+::get\+Layer(), Component\+::get\+Net(), Component\+::get\+X(), Auto\+Contact\+::get\+Y(), Katabatic\+::\+Kb\+Horizontal, and Katabatic\+::\+Kb\+Vertical.
Referenced by G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+x\+M2().
\mbox{\Hypertarget{group__LoadGlobalRouting_ga6361fb0e90f35cd59063a1ee971ef2a9}\label{group__LoadGlobalRouting_ga6361fb0e90f35cd59063a1ee971ef2a9}}
\index{Global Routing Loading@{Global Routing Loading}!do\+Rp\+\_\+\+Stair\+CaseV@{do\+Rp\+\_\+\+Stair\+CaseV}}
\index{do\+Rp\+\_\+\+Stair\+CaseV@{do\+Rp\+\_\+\+Stair\+CaseV}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{do\+Rp\+\_\+\+Stair\+Case\+V()}{doRp\_StairCaseV()}}
{\footnotesize\ttfamily void do\+Rp\+\_\+\+Stair\+CaseV (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classKatabatic_1_1GCell}{G\+Cell}} $\ast$}]{gcell, }\item[{\textbf{ Component} $\ast$}]{rp1, }\item[{\textbf{ Component} $\ast$}]{rp2 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
Build the wiring to connect to vertical Components. Two cases\+:
\begin{DoxyItemize}
\item The Components are aligneds, then only a straight wire is created.
\item They are {\itshape not} aligned, then a complete dogleg is created.
\end{DoxyItemize}
References Auto\+Contact\+Turn\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Auto\+Contacts(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Source\+Contact, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Target\+Contact, Session\+::get\+Contact\+Layer(), Component\+::get\+Layer(), Component\+::get\+Net(), Auto\+Contact\+::get\+X(), Component\+::get\+Y(), Katabatic\+::\+Kb\+Horizontal, and Katabatic\+::\+Kb\+Vertical.
Referenced by G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+x\+M3().
\mbox{\Hypertarget{group__LoadGlobalRouting_gabe00ab10a0dab8a3d2de0709e61e4e7d}\label{group__LoadGlobalRouting_gabe00ab10a0dab8a3d2de0709e61e4e7d}}
\index{Global Routing Loading@{Global Routing Loading}!\+\_\+do\+\_\+x\+G\+\_\+1\+Pad@{\+\_\+do\+\_\+x\+G\+\_\+1\+Pad}}
\index{\+\_\+do\+\_\+x\+G\+\_\+1\+Pad@{\+\_\+do\+\_\+x\+G\+\_\+1\+Pad}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{\+\_\+do\+\_\+x\+G\+\_\+1\+Pad()}{\_do\_xG\_1Pad()}}
{\footnotesize\ttfamily void \+\_\+do\+\_\+x\+G\+\_\+1\+Pad (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}}
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 G\+Cell they can be considered as a kind of global.
So this method mostly calls \mbox{\hyperlink{group__LoadGlobalRouting_ga60edeea78b56db072fc26a58a7afbcd4}{G\+Cell\+Topology\+::do\+Rp\+\_\+\+Access\+Pad()}} to create the Auto\+Contact\+Terminal, then calls \mbox{\hyperlink{group__LoadGlobalRouting_gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca}{G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G()}}, except for straight lines which are managed directly.
References G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G(), Auto\+Contact\+Turn\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Access\+Pad(), Auto\+Contact\+::get\+Body\+Hook(), Session\+::get\+Contact\+Layer(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Access, Katabatic\+::\+Kb\+Horizontal, Katabatic\+::\+Kb\+Vertical, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+No\+Flags.
\mbox{\Hypertarget{group__LoadGlobalRouting_gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca}\label{group__LoadGlobalRouting_gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca}}
\index{Global Routing Loading@{Global Routing Loading}!\+\_\+do\+\_\+xG@{\+\_\+do\+\_\+xG}}
\index{\+\_\+do\+\_\+xG@{\+\_\+do\+\_\+xG}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{\+\_\+do\+\_\+x\+G()}{\_do\_xG()}}
{\footnotesize\ttfamily void \+\_\+do\+\_\+xG (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}}
Construct the topology, when there is only global wires (no local terminals).
Some topology are not handled because they must not be managed by this function\+:
\begin{DoxyItemize}
\item One global\+: nonsensical because there also must be a terminal.
\item Two aligned globals\+: in that case we do a straight wire without any Auto\+Contact (handled by the source/target of the wire).
\end{DoxyItemize}
References Auto\+Contact\+V\+Tee\+::create(), Auto\+Contact\+Turn\+::create(), Auto\+Contact\+H\+Tee\+::create(), Auto\+Segment\+::create(), Session\+::get\+Contact\+Layer(), Katabatic\+::\+Kb\+Horizontal, and Katabatic\+::\+Kb\+Vertical.
Referenced by G\+Cell\+Topology\+::\+\_\+do\+\_\+x\+G\+\_\+1\+Pad().
\mbox{\Hypertarget{group__LoadGlobalRouting_gad24a03e87e269f16dcc28d8c2d9f1cfb}\label{group__LoadGlobalRouting_gad24a03e87e269f16dcc28d8c2d9f1cfb}}
\index{Global Routing Loading@{Global Routing Loading}!\+\_\+do\+\_\+1\+G\+\_\+1\+M1@{\+\_\+do\+\_\+1\+G\+\_\+1\+M1}}
\index{\+\_\+do\+\_\+1\+G\+\_\+1\+M1@{\+\_\+do\+\_\+1\+G\+\_\+1\+M1}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{\+\_\+do\+\_\+1\+G\+\_\+1\+M1()}{\_do\_1G\_1M1()}}
{\footnotesize\ttfamily void \+\_\+do\+\_\+1\+G\+\_\+1\+M1 (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}}
Construct a topology where there is {\itshape one} global and one Routing\+Pad in {\ttfamily M\+E\+T\+A\+L1}. The {\ttfamily M\+E\+T\+A\+L1} is assumed to be vertical.
\begin{DoxyParagraph}{Remark\+: When accessing the Routing\+Pad 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.
\end{DoxyParagraph}
References G\+Cell\+Topology\+::do\+Rp\+\_\+\+Access(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Access, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+No\+Flags, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+V\+Small.
\mbox{\Hypertarget{group__LoadGlobalRouting_ga97942453a1bc5b01106aa380271fd7fc}\label{group__LoadGlobalRouting_ga97942453a1bc5b01106aa380271fd7fc}}
\index{Global Routing Loading@{Global Routing Loading}!\+\_\+do\+\_\+1\+G\+\_\+x\+M1@{\+\_\+do\+\_\+1\+G\+\_\+x\+M1}}
\index{\+\_\+do\+\_\+1\+G\+\_\+x\+M1@{\+\_\+do\+\_\+1\+G\+\_\+x\+M1}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{\+\_\+do\+\_\+1\+G\+\_\+x\+M1()}{\_do\_1G\_xM1()}}
{\footnotesize\ttfamily void \+\_\+do\+\_\+1\+G\+\_\+x\+M1 (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}}
Construct a topology where there is {\itshape one} global and any number of Routing\+Pad in {\ttfamily M\+E\+T\+A\+L1}. The {\ttfamily M\+E\+T\+A\+L1} is assumed to be vertical.
The Routing\+Pads 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 Routing\+Pad itself. The global incoming segment will connected to the leftmost, rightmost or centermost Routing\+Pad according from wich side it comes from.
References Auto\+Contact\+Turn\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Access(), Component\+::get\+Bounding\+Box(), Session\+::get\+Contact\+Layer(), Box\+::get\+Height(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Access, Katabatic\+::\+Kb\+Horizontal, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+No\+Flags.
\mbox{\Hypertarget{group__LoadGlobalRouting_gae60ed4e27ad89a1e2ff2cd6415ef33f1}\label{group__LoadGlobalRouting_gae60ed4e27ad89a1e2ff2cd6415ef33f1}}
\index{Global Routing Loading@{Global Routing Loading}!\+\_\+do\+\_\+x\+G\+\_\+1\+M1\+\_\+1\+M2@{\+\_\+do\+\_\+x\+G\+\_\+1\+M1\+\_\+1\+M2}}
\index{\+\_\+do\+\_\+x\+G\+\_\+1\+M1\+\_\+1\+M2@{\+\_\+do\+\_\+x\+G\+\_\+1\+M1\+\_\+1\+M2}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{\+\_\+do\+\_\+x\+G\+\_\+1\+M1\+\_\+1\+M2()}{\_do\_xG\_1M1\_1M2()}}
{\footnotesize\ttfamily void \+\_\+do\+\_\+x\+G\+\_\+1\+M1\+\_\+1\+M2 (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}}
Construct a topology where there is at least one global (and up to 4), one {\ttfamily M\+E\+T\+A\+L1} Routing\+Pad (assumed V) and one {\ttfamily M\+E\+T\+A\+L2} Routing\+Pad (assumed H).
In this topology, we want to try to reuse the {\ttfamily M\+E\+T\+A\+L2} Routing\+Pad as a feedtrough in the horizontal routage. Thus\+:
\begin{DoxyItemize}
\item The {\ttfamily M\+E\+T\+A\+L1} and {\ttfamily M\+E\+T\+A\+L2} Routing\+Pad are connected through a separate wiring.
\item The south \& west global wiring is attached to the leftmost contact of the {\ttfamily M\+E\+T\+A\+L2}.
\item The north \& east global wiring is attached to the rightmost contact of the {\ttfamily M\+E\+T\+A\+L2}.
\end{DoxyItemize}
South/west and north/south can be build independantly. Depending on the number of globals, they can consist of\+:
\begin{DoxyItemize}
\item Nothing (no south nor west).
\item An Auto\+Contact (west present).
\item An horizontal plus a turn (south present).
\item An horizontal plus a H\+Tee (south \& west present).
\end{DoxyItemize}
\begin{DoxyParagraph}{Remark\+: Not all configurations are represented below.}
\end{DoxyParagraph}
References Auto\+Contact\+Turn\+::create(), Auto\+Contact\+H\+Tee\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Auto\+Contacts(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Source\+Contact, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Target\+Contact, Session\+::get\+Contact\+Layer(), Session\+::get\+Routing\+Layer(), Katabatic\+::\+Kb\+Horizontal, Katabatic\+::\+Kb\+Vertical, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+No\+Flags.
\mbox{\Hypertarget{group__LoadGlobalRouting_gaf9b009520f54099668ac9d12f2c85257}\label{group__LoadGlobalRouting_gaf9b009520f54099668ac9d12f2c85257}}
\index{Global Routing Loading@{Global Routing Loading}!\+\_\+do\+\_\+x\+G\+\_\+x\+M1\+\_\+x\+M3@{\+\_\+do\+\_\+x\+G\+\_\+x\+M1\+\_\+x\+M3}}
\index{\+\_\+do\+\_\+x\+G\+\_\+x\+M1\+\_\+x\+M3@{\+\_\+do\+\_\+x\+G\+\_\+x\+M1\+\_\+x\+M3}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{\+\_\+do\+\_\+x\+G\+\_\+x\+M1\+\_\+x\+M3()}{\_do\_xG\_xM1\_xM3()}}
{\footnotesize\ttfamily void \+\_\+do\+\_\+x\+G\+\_\+x\+M1\+\_\+x\+M3 (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}}
Construct a topology where there is at least one global (and up to 4), at least one {\ttfamily M\+E\+T\+A\+L1} Routing\+Pad (assumed V) and at least one {\ttfamily M\+E\+T\+A\+L3} Routing\+Pad (assumed V).
In this topology, we want to try to reuse the {\ttfamily M\+E\+T\+A\+L3} Routing\+Pad as a feedtrough in the vertical routage. Thus\+:
\begin{DoxyItemize}
\item The {\ttfamily M\+E\+T\+A\+L1} and {\ttfamily M\+E\+T\+A\+L3} Routing\+Pad are connected through a separate wiring made of separate horizontals.
\item The south-\/west global wiring is attached to the leftmost Routing\+Pad if there isn\textquotesingle{}t south or to the first {\ttfamily M\+E\+T\+A\+L3} otherwise.
\item The north-\/east global wiring is attached to the rightmost Routing\+Pad if there isn\textquotesingle{}t north or to the first {\ttfamily M\+E\+T\+A\+L3} otherwise.
\end{DoxyItemize}
South/west and north/south can be build independantly. Depending on the number of globals, they can consist of\+:
\begin{DoxyItemize}
\item Nothing (no south nor west).
\item An Auto\+Contact on the leftmost Routing\+Pad (west present).
\item An Auto\+Contact on the first {\ttfamily M\+E\+T\+A\+L3} (only south present).
\item An Auto\+Contact plus a vertical plus a V\+Tee (south \& west present).
\end{DoxyItemize}
References Auto\+Contact\+V\+Tee\+::create(), Auto\+Contact\+Turn\+::create(), Auto\+Contact\+H\+Tee\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Access(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Auto\+Contacts(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Source\+Contact, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Target\+Contact, Component\+::get\+Bounding\+Box(), Session\+::get\+Contact\+Layer(), Box\+::get\+Height(), Session\+::get\+Routing\+Layer(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Access, Katabatic\+::\+Kb\+Horizontal, Katabatic\+::\+Kb\+Vertical, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+No\+Flags.
\mbox{\Hypertarget{group__LoadGlobalRouting_ga532d1c6b530e0375078ea2d6ea3c6024}\label{group__LoadGlobalRouting_ga532d1c6b530e0375078ea2d6ea3c6024}}
\index{Global Routing Loading@{Global Routing Loading}!\+\_\+do\+\_\+x\+G\+\_\+x\+M2@{\+\_\+do\+\_\+x\+G\+\_\+x\+M2}}
\index{\+\_\+do\+\_\+x\+G\+\_\+x\+M2@{\+\_\+do\+\_\+x\+G\+\_\+x\+M2}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{\+\_\+do\+\_\+x\+G\+\_\+x\+M2()}{\_do\_xG\_xM2()}}
{\footnotesize\ttfamily void \+\_\+do\+\_\+x\+G\+\_\+x\+M2 (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}}
Construct a topology where there is at least one global (and up to 4), and any number of {\ttfamily M\+E\+T\+A\+L2} Routing\+Pads (assumeds H).
In this topology, we want to try to reuse the {\ttfamily M\+E\+T\+A\+L2} Routing\+Pad as a feedtrough in the horizontal routage. Thus\+:
\begin{DoxyItemize}
\item The Routing\+Pad are connecteds trough a separate staircase (or straight wire if aligneds).
\item The south-\/west global wiring is attached to the leftmost Routing\+Pad if there isn\textquotesingle{}t south or to the biggest horizontal Routing\+Pad otherwise.
\item The north-\/east global wiring is attached to the rightmost Routing\+Pad if there isn\textquotesingle{}t south or to the biggest horizontal Routing\+Pad otherwise.
\end{DoxyItemize}
References Auto\+Contact\+V\+Tee\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Access(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Auto\+Contacts(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Stair\+Case\+H(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Source\+Contact, Component\+::get\+Bounding\+Box(), Session\+::get\+Contact\+Layer(), Box\+::get\+Width(), Katabatic\+::\+Kb\+Vertical, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+No\+Flags.
\mbox{\Hypertarget{group__LoadGlobalRouting_ga2519ef984b3d19f123827a9b12651672}\label{group__LoadGlobalRouting_ga2519ef984b3d19f123827a9b12651672}}
\index{Global Routing Loading@{Global Routing Loading}!\+\_\+do\+\_\+1\+G\+\_\+1\+M3@{\+\_\+do\+\_\+1\+G\+\_\+1\+M3}}
\index{\+\_\+do\+\_\+1\+G\+\_\+1\+M3@{\+\_\+do\+\_\+1\+G\+\_\+1\+M3}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{\+\_\+do\+\_\+1\+G\+\_\+1\+M3()}{\_do\_1G\_1M3()}}
{\footnotesize\ttfamily void \+\_\+do\+\_\+1\+G\+\_\+1\+M3 (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}}
Construct a topology where there is one global and one {\ttfamily M\+E\+T\+A\+L3} Routing\+Pad (assumeds V).
In this topology, we reuse the {\ttfamily M\+E\+T\+A\+L3} Routing\+Pad as a feedtrough in the vertical routage. Thus\+:
\begin{DoxyItemize}
\item If the global is either north or south, we directly connect to the north end or south end of the Routing\+Pad. The vertical global will have no slack at all we assume that M\+E\+T\+A\+L3 terminals are only from blocks and are aligneds vertically.
\item If the global is east or west {\itshape and} the Routing\+Pad is sufficiently extended in the vertical direction, we connect an horizontal in the normal way.
\item If the global is not sufficiently extended, we add a turn to give some slack to the global.
\end{DoxyItemize}
References Auto\+Contact\+Turn\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Auto\+Contacts(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Source\+Contact, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Target\+Contact, Session\+::get\+Contact\+Layer(), Auto\+Contact\+::get\+X(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Access, Katabatic\+::\+Kb\+Horizontal, Katabatic\+::\+Kb\+Vertical, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+No\+Flags.
\mbox{\Hypertarget{group__LoadGlobalRouting_ga007efc725aae31782204a44949765cb4}\label{group__LoadGlobalRouting_ga007efc725aae31782204a44949765cb4}}
\index{Global Routing Loading@{Global Routing Loading}!\+\_\+do\+\_\+x\+G\+\_\+x\+M3@{\+\_\+do\+\_\+x\+G\+\_\+x\+M3}}
\index{\+\_\+do\+\_\+x\+G\+\_\+x\+M3@{\+\_\+do\+\_\+x\+G\+\_\+x\+M3}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{\+\_\+do\+\_\+x\+G\+\_\+x\+M3()}{\_do\_xG\_xM3()}}
{\footnotesize\ttfamily void \+\_\+do\+\_\+x\+G\+\_\+x\+M3 (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}}
Construct a topology where there at least one global and two {\ttfamily M\+E\+T\+A\+L3} Routing\+Pad (assumed V).
In this topology, we reuse the {\ttfamily M\+E\+T\+A\+L3} Routing\+Pad as a feedtrough in the vertical routage. We assume that the most likely relative position of the Routing\+Pads is to be aligned vertically. Thus\+:
\begin{DoxyItemize}
\item All Routing\+Pads are linked two by two trough vertical staircases.
\item The south-\/west global wiring is attached to the bottommost Routing\+Pad (without vertical slack). If a misalignment is detected, then a dogleg is added.
\item The north-\/east global wiring is attached to the topmost Routing\+Pad (without vertical slack).
\end{DoxyItemize}
South/west and north/south can be build independantly. Depending on the number of globals, they can consist of\+:
\begin{DoxyItemize}
\item Nothing (no south nor west).
\item An sliding Auto\+Contact on the bottommost Routing\+Pad (west present).
\item An fixed Auto\+Contact on the bottommost Routing\+Pad (only south present).
\item An fixed Auto\+Contact plus a vertical plus a V\+Tee (south \& west present).
\end{DoxyItemize}
References Auto\+Contact\+V\+Tee\+::create(), Auto\+Contact\+Turn\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Access(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Auto\+Contacts(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Stair\+Case\+V(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Source\+Contact, anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Target\+Contact, Session\+::get\+Contact\+Layer(), Db\+U\+::get\+Value\+String(), Auto\+Contact\+::get\+X(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+H\+Access, Katabatic\+::\+Kb\+Horizontal, Katabatic\+::\+Kb\+Vertical, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+No\+Flags.
\mbox{\Hypertarget{group__LoadGlobalRouting_ga3973291866b39c10cea5ca17f7d174fb}\label{group__LoadGlobalRouting_ga3973291866b39c10cea5ca17f7d174fb}}
\index{Global Routing Loading@{Global Routing Loading}!single\+G\+Cell@{single\+G\+Cell}}
\index{single\+G\+Cell@{single\+G\+Cell}!Global Routing Loading@{Global Routing Loading}}
\subsubsection{\texorpdfstring{single\+G\+Cell()}{singleGCell()}}
{\footnotesize\ttfamily void single\+G\+Cell (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classKatabatic_1_1KatabaticEngine}{Katabatic\+Engine}} $\ast$}]{ktbt, }\item[{\textbf{ Net} $\ast$}]{net }\end{DoxyParamCaption})}
All the Routing\+Pads of the net are concentrated under a single G\+Cell. This function assumes that all the terminals are in {\ttfamily M\+E\+T\+A\+L1} (vertical), and link them two by two by horizontal wires.
References Auto\+Contact\+Turn\+::create(), Auto\+Segment\+::create(), G\+Cell\+Topology\+::do\+Rp\+\_\+\+Auto\+Contacts(), anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+Do\+Source\+Contact, Session\+::get\+Contact\+Layer(), Grid$<$ G\+Cell\+T $>$\+::get\+G\+Cell(), Katabatic\+Engine\+::get\+G\+Cell\+Grid(), Routing\+Gauge\+::get\+Layer\+Depth(), Session\+::get\+Routing\+Gauge(), Net\+::get\+Routing\+Pads(), Katabatic\+::\+Kb\+Horizontal, Katabatic\+::\+Kb\+Vertical, and anonymous\+\_\+namespace\{\+Load\+Gr\+By\+Net.\+cpp\}\+::\+No\+Flags.