2018-08-19 06:27:09 -05:00
\hypertarget { group_ _ LoadGlobalRouting} { \section { Global Routing Loading}
2018-06-06 11:42:26 -05:00
\label { group_ _ LoadGlobalRouting} \index { Global Routing Loading@{ Global Routing Loading} }
2018-08-19 06:27:09 -05:00
}
2018-06-06 11:42:26 -05:00
Translation rules to build detailed routing from global.
\subsection * { Classes}
\begin { DoxyCompactItemize}
\item
2018-08-19 06:27:09 -05:00
class \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}
2018-06-06 11:42:26 -05:00
\subsection * { Enumerations}
\begin { DoxyCompactItemize}
\item
2018-08-19 06:27:09 -05:00
enum \hyperlink { group_ _ LoadGlobalRouting_ gaec07c7f30c801c3b0f72193757250d64} { Local\- Function\- Flag} \{ \\ *
\hyperlink { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b} { No\- Flags} = 0x00000000
, \\ *
\hyperlink { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9} { H\- Access} = 0x00000002,
\\ *
\hyperlink { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc} { V\- Small} = 0x00000004,
\\ *
\hyperlink { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8} { H\- Small} = 0x00000008,
\\ *
2018-06-06 11:42:26 -05:00
\hyperlink { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9} { Punctual} = 0x00000010
2018-08-19 06:27:09 -05:00
, \\ *
\hyperlink { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d} { Do\- Source\- Contact} = 0x00000100,
\\ *
\hyperlink { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2} { Do\- Target\- Contact} = 0x00000200
2018-06-06 11:42:26 -05:00
\}
\end { DoxyCompactItemize}
\subsection * { Functions}
\begin { DoxyCompactItemize}
\item
2018-08-19 06:27:09 -05:00
unsigned int \hyperlink { group_ _ LoadGlobalRouting_ gaad5d32b07d1d53ecc8642e4b10df9605} { check\- Routing\- Pad\- Size} ({ \bf Component} $ \ast $ anchor)
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
static void \hyperlink { group_ _ LoadGlobalRouting_ gae9cae408ea16a3f7c77c3d75f0242f19} { do\- Rp\- \_ \- \- Auto\- Contacts} (\hyperlink { classKatabatic_ 1_ 1GCell} { G\- Cell} $ \ast $ , { \bf Component} $ \ast $ , \hyperlink { classKatabatic_ 1_ 1AutoContact} { Auto\- Contact} $ \ast $ \& source, \hyperlink { classKatabatic_ 1_ 1AutoContact} { Auto\- Contact} $ \ast $ \& target, unsigned int flags)
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
static \hyperlink { classKatabatic_ 1_ 1AutoContact} { Auto\- Contact} $ \ast $ \hyperlink { group_ _ LoadGlobalRouting_ gada6d3c694b8d741b6504b7c3da166357} { do\- Rp\- \_ \- \- Access} (\hyperlink { classKatabatic_ 1_ 1GCell} { G\- Cell} $ \ast $ , { \bf Component} $ \ast $ , unsigned int flags)
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
static \hyperlink { classKatabatic_ 1_ 1AutoContact} { Auto\- Contact} $ \ast $ \hyperlink { group_ _ LoadGlobalRouting_ ga60edeea78b56db072fc26a58a7afbcd4} { do\- Rp\- \_ \- \- Access\- Pad} ({ \bf Routing\- Pad} $ \ast $ , unsigned int flags)
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
static void \hyperlink { group_ _ LoadGlobalRouting_ ga3291d84592215974fe4052c00304bdb1} { do\- Rp\- \_ \- \- Stair\- Case\- H} (\hyperlink { classKatabatic_ 1_ 1GCell} { G\- Cell} $ \ast $ , { \bf Component} $ \ast $ rp1, { \bf Component} $ \ast $ rp2)
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
static void \hyperlink { group_ _ LoadGlobalRouting_ ga6361fb0e90f35cd59063a1ee971ef2a9} { do\- Rp\- \_ \- \- Stair\- Case\- V} (\hyperlink { classKatabatic_ 1_ 1GCell} { G\- Cell} $ \ast $ , { \bf Component} $ \ast $ rp1, { \bf Component} $ \ast $ rp2)
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ gabe00ab10a0dab8a3d2de0709e61e4e7d} { \- \_ \- do\- \_ \- x\- G\- \_ \- 1\- Pad} ()
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca} { \- \_ \- do\- \_ \- x\- G} ()
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ gad24a03e87e269f16dcc28d8c2d9f1cfb} { \- \_ \- do\- \_ \- 1\- G\- \_ \- 1\- M1} ()
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ ga97942453a1bc5b01106aa380271fd7fc} { \- \_ \- do\- \_ \- 1\- G\- \_ \- x\- M1} ()
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ gae60ed4e27ad89a1e2ff2cd6415ef33f1} { \- \_ \- do\- \_ \- x\- G\- \_ \- 1\- M1\- \_ \- 1\- M2} ()
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ gaf9b009520f54099668ac9d12f2c85257} { \- \_ \- do\- \_ \- x\- G\- \_ \- x\- M1\- \_ \- x\- M3} ()
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ ga532d1c6b530e0375078ea2d6ea3c6024} { \- \_ \- do\- \_ \- x\- G\- \_ \- x\- M2} ()
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ ga2519ef984b3d19f123827a9b12651672} { \- \_ \- do\- \_ \- 1\- G\- \_ \- 1\- M3} ()
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ ga007efc725aae31782204a44949765cb4} { \- \_ \- do\- \_ \- x\- G\- \_ \- x\- M3} ()
2018-06-06 11:42:26 -05:00
\item
2018-08-19 06:27:09 -05:00
void \hyperlink { group_ _ LoadGlobalRouting_ ga3973291866b39c10cea5ca17f7d174fb} { single\- G\- Cell} (\hyperlink { classKatabatic_ 1_ 1KatabaticEngine} { Katabatic\- Engine} $ \ast $ ktbt, { \bf Net} $ \ast $ net)
2018-06-06 11:42:26 -05:00
\end { DoxyCompactItemize}
\subsection { Detailed Description}
2018-08-19 06:27:09 -05:00
Translation rules to build detailed routing from global. This module documents how the global routing built by { \ttfamily Knik} is loaded into the { \ttfamily \hyperlink { namespaceKatabatic} { Katabatic} } data-\/ base. It is intented for developpers only.
2018-06-06 11:42:26 -05:00
\subsection { Enumeration Type Documentation}
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{Local\-Function\-Flag}] { \setlength { \rightskip } { 0pt plus 5cm} enum Local\- Function\- Flag} } \label { group_ _ LoadGlobalRouting_ gaec07c7f30c801c3b0f72193757250d64}
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 \hyperlink { group_ _ LoadGlobalRouting_ gaad5d32b07d1d53ecc8642e4b10df9605} { check\- Routing\- Pad\- Size()} . \begin { Desc}
\item [Enumerator] \par
\begin { description}
\index { No\- Flags@{ No\- Flags} !Global Routing Loading@{ Global Routing Loading} } \index { Global Routing Loading@{ Global Routing Loading} !No\- Flags@{ No\- Flags} } \item [{ \em
\hypertarget { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b} { No\- Flags} \label { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b}
} ]A simple alias over zero to explicitly tell that no flag at all is passed to the function. \index { H\- Access@{ H\- Access} !Global Routing Loading@{ Global Routing Loading} } \index { Global Routing Loading@{ Global Routing Loading} !H\- Access@{ H\- Access} } \item [{ \em
\hypertarget { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9} { H\- Access} \label { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9}
} ]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. \index { V\- Small@{ V\- Small} !Global Routing Loading@{ Global Routing Loading} } \index { Global Routing Loading@{ Global Routing Loading} !V\- Small@{ V\- Small} } \item [{ \em
\hypertarget { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc} { V\- Small} \label { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc}
} ]The Routing\- Pad vertically covers a very small number of access points, so it is likely overconstrained for direct horizontal connexion. \index { H\- Small@{ H\- Small} !Global Routing Loading@{ Global Routing Loading} } \index { Global Routing Loading@{ Global Routing Loading} !H\- Small@{ H\- Small} } \item [{ \em
\hypertarget { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8} { H\- Small} \label { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8}
} ]The Routing\- Pad horizontally covers a very small number of access points, so it is likely overconstrained for direct vertical connexion. \index { Punctual@{ Punctual} !Global Routing Loading@{ Global Routing Loading} } \index { Global Routing Loading@{ Global Routing Loading} !Punctual@{ Punctual} } \item [{ \em
\hypertarget { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9} { Punctual} \label { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9}
} ]The Routing\- Pad covers only an access point in either direction. \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} } \item [{ \em
\hypertarget { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d} { Do\- Source\- Contact} \label { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d}
} ]When creating \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} . \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} } \item [{ \em
\hypertarget { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2} { Do\- Target\- Contact} \label { group_ _ LoadGlobalRouting_ ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2}
} ]When creating \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} . \end { description}
\end { Desc}
2018-06-06 11:42:26 -05:00
\subsection { Function Documentation}
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{check\-Routing\-Pad\-Size}] { \setlength { \rightskip } { 0pt plus 5cm} unsigned int check\- Routing\- Pad\- Size (
\begin { DoxyParamCaption}
\item [{{\bf Component} $\ast$}] { rp}
\end { DoxyParamCaption}
)} } \label { group_ _ LoadGlobalRouting_ gaad5d32b07d1d53ecc8642e4b10df9605}
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\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\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.
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
The component can be a Routing\- Pad, a Vertical or an Horizontal.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
Referenced by G\- Cell\- Topology\- ::do\- Rp\- \_ \- \- Access().
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{do\-Rp\-\_\-\-Auto\-Contacts}] { \setlength { \rightskip } { 0pt plus 5cm} void do\- Rp\- \_ \- \- Auto\- Contacts (
\begin { DoxyParamCaption}
\item [{{\bf G\-Cell} $\ast$}] { gcell, }
\item [{{\bf Component} $\ast$}] { rp, }
\item [{{\bf Auto\-Contact} $\ast$\&}] { source, }
\item [{{\bf Auto\-Contact} $\ast$\&}] { target, }
\item [{unsigned int}] { flags}
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [static]} } } \label { group_ _ LoadGlobalRouting_ gae9cae408ea16a3f7c77c3d75f0242f19}
2018-06-06 11:42:26 -05:00
\begin { DoxyParams} { Parameters}
2018-08-19 06:27:09 -05:00
{ \em gcell} & The G\- Cell into which create the Auto\- Contact. \\
2018-06-06 11:42:26 -05:00
\hline
{ \em rp} & The Component we want to access. \\
\hline
2018-08-19 06:27:09 -05:00
{ \em source} & The Auto\- Contact created on the { \ttfamily source} ({ \itshape returned} ). \\
2018-06-06 11:42:26 -05:00
\hline
2018-08-19 06:27:09 -05:00
{ \em target} & The Auto\- Contact created on the { \ttfamily target} ({ \itshape returned} ). \\
2018-06-06 11:42:26 -05:00
\hline
2018-08-19 06:27:09 -05:00
{ \em flags} & Managed by this function\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\item Local\- Function\- Flag\- ::\- Do\- Source\- Contact
\item Local\- Function\- Flag\- ::\- Do\- Target\- Contact
2018-06-06 11:42:26 -05:00
\end { DoxyItemize} \\
\hline
\end { DoxyParams}
2018-08-19 06:27:09 -05:00
Create the Auto\- Contact directly anchored on the Component (terminal). Three cases are manageds\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyEnumerate}
2018-08-19 06:27:09 -05:00
\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).
2018-06-06 11:42:26 -05:00
\end { DoxyEnumerate}
2018-08-19 06:27:09 -05:00
To avoid creating a fixed protection over a Routing\- Pad multiple times, the Routing\- Pad and it's associated protection is stored in a static { \ttfamily map} \- : { \ttfamily \- \_ \- \- \_ \- routing\- Pad\- Auto\- Segments} .
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\begin { DoxyParagraph} { Remark\- :}
For clarity we describe the layer management of this function in term of { \ttfamily M\- E\- T\- A\- L} , but it is the Routing\- Gauge depth which is actually used.
2018-06-06 11:42:26 -05:00
\end { DoxyParagraph}
2018-08-19 06:27:09 -05:00
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().
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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().
\hypertarget { 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 [{do\-Rp\-\_\-\-Access}] { \setlength { \rightskip } { 0pt plus 5cm} { \bf Auto\- Contact} $ \ast $ do\- Rp\- \_ \- \- Access (
\begin { DoxyParamCaption}
\item [{{\bf G\-Cell} $\ast$}] { gcell, }
\item [{{\bf Component} $\ast$}] { rp, }
\item [{unsigned int}] { flags}
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [static]} } } \label { group_ _ LoadGlobalRouting_ gada6d3c694b8d741b6504b7c3da166357}
2018-06-06 11:42:26 -05:00
\begin { DoxyParams} { Parameters}
2018-08-19 06:27:09 -05:00
{ \em gcell} & The G\- Cell into which create the Auto\- Contact. \\
2018-06-06 11:42:26 -05:00
\hline
{ \em rp} & The Component onto which anchor the access contact. \\
\hline
2018-08-19 06:27:09 -05:00
{ \em flags} & Relevant flags are\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\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.
2018-06-06 11:42:26 -05:00
\end { DoxyItemize} \\
\hline
\end { DoxyParams}
2018-08-19 06:27:09 -05:00
If { \ttfamily H\- Access} is set, the Component is to be accessed trough an horizontal segment. If unset, the access is done vertically.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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().
\hypertarget { 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 [{do\-Rp\-\_\-\-Access\-Pad}] { \setlength { \rightskip } { 0pt plus 5cm} { \bf Auto\- Contact} $ \ast $ do\- Rp\- \_ \- \- Access\- Pad (
\begin { DoxyParamCaption}
\item [{{\bf Routing\-Pad} $\ast$}] { rp, }
\item [{unsigned int}] { flags}
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [static]} } } \label { group_ _ LoadGlobalRouting_ ga60edeea78b56db072fc26a58a7afbcd4}
2018-06-06 11:42:26 -05:00
\begin { DoxyParams} { Parameters}
{ \em rp} & The Component onto which anchor the access contact. \\
\hline
2018-08-19 06:27:09 -05:00
{ \em flags} & Relevant flags are\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\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.
2018-06-06 11:42:26 -05:00
\end { DoxyItemize} \\
\hline
\end { DoxyParams}
\begin { DoxyReturn} { Returns}
2018-08-19 06:27:09 -05:00
A \hyperlink { classKatabatic_ 1_ 1AutoContactTerminal} { Katabatic\- ::\- Auto\- Contact\- Terminal} .
2018-06-06 11:42:26 -05:00
\end { DoxyReturn}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
The returned Auto\- Contact\- Terminal is anchored on the last punctual segment build.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\begin { DoxyParagraph} { Remark\- :}
The segments and contacts added to ensure the layer connexity are not put into the \hyperlink { namespaceKatabatic} { Katabatic} database. They are plain { \bf Hurricane} objects, invisibles from it.
2018-06-06 11:42:26 -05:00
\end { DoxyParagraph}
2018-08-19 06:27:09 -05:00
References Contact\- ::create(), Horizontal\- ::create(), Vertical\- ::create(), Auto\- Contact\- Terminal\- ::create(), 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().
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
Referenced by G\- Cell\- Topology\- ::\- \_ \- do\- \_ \- x\- G\- \_ \- 1\- Pad().
\hypertarget { group_ _ LoadGlobalRouting_ ga3291d84592215974fe4052c00304bdb1} { \index { Global Routing Loading@{ Global Routing Loading} !do\- Rp\- \_ \- \- Stair\- Case\- H@{ do\- Rp\- \_ \- \- Stair\- Case\- H} }
\index { do\- Rp\- \_ \- \- Stair\- Case\- H@{ do\- Rp\- \_ \- \- Stair\- Case\- H} !Global Routing Loading@{ Global Routing Loading} }
\subsubsection [{do\-Rp\-\_\-\-Stair\-Case\-H}] { \setlength { \rightskip } { 0pt plus 5cm} void do\- Rp\- \_ \- \- Stair\- Case\- H (
\begin { DoxyParamCaption}
\item [{{\bf G\-Cell} $\ast$}] { gcell, }
\item [{{\bf Component} $\ast$}] { rp1, }
\item [{{\bf Component} $\ast$}] { rp2}
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [static]} } } \label { group_ _ LoadGlobalRouting_ ga3291d84592215974fe4052c00304bdb1}
Build the wiring to connect to horizontal Component. Two cases\- :
2018-06-06 11:42:26 -05:00
\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}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
Referenced by G\- Cell\- Topology\- ::\- \_ \- do\- \_ \- x\- G\- \_ \- x\- M2().
\hypertarget { group_ _ LoadGlobalRouting_ ga6361fb0e90f35cd59063a1ee971ef2a9} { \index { Global Routing Loading@{ Global Routing Loading} !do\- Rp\- \_ \- \- Stair\- Case\- V@{ do\- Rp\- \_ \- \- Stair\- Case\- V} }
\index { do\- Rp\- \_ \- \- Stair\- Case\- V@{ do\- Rp\- \_ \- \- Stair\- Case\- V} !Global Routing Loading@{ Global Routing Loading} }
\subsubsection [{do\-Rp\-\_\-\-Stair\-Case\-V}] { \setlength { \rightskip } { 0pt plus 5cm} void do\- Rp\- \_ \- \- Stair\- Case\- V (
\begin { DoxyParamCaption}
\item [{{\bf G\-Cell} $\ast$}] { gcell, }
\item [{{\bf Component} $\ast$}] { rp1, }
\item [{{\bf Component} $\ast$}] { rp2}
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [static]} } } \label { group_ _ LoadGlobalRouting_ ga6361fb0e90f35cd59063a1ee971ef2a9}
Build the wiring to connect to vertical Components. Two cases\- :
2018-06-06 11:42:26 -05:00
\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}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
Referenced by G\- Cell\- Topology\- ::\- \_ \- do\- \_ \- x\- G\- \_ \- x\- M3().
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{\-\_\-do\-\_\-x\-G\-\_\-1\-Pad}] { \setlength { \rightskip } { 0pt plus 5cm} void \- \_ \- do\- \_ \- x\- G\- \_ \- 1\- Pad (
\begin { DoxyParamCaption}
{ }
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [private]} } } \label { group_ _ LoadGlobalRouting_ gabe00ab10a0dab8a3d2de0709e61e4e7d}
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
So this method mostly calls \hyperlink { group_ _ LoadGlobalRouting_ ga60edeea78b56db072fc26a58a7afbcd4} { G\- Cell\- Topology\- ::do\- Rp\- \_ \- \- Access\- Pad()} to create the Auto\- Contact\- Terminal, then calls \hyperlink { group_ _ LoadGlobalRouting_ gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca} { G\- Cell\- Topology\- ::\- \_ \- do\- \_ \- x\- G()} , except for straight lines which are managed directly.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { group_ _ LoadGlobalRouting_ gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca} { \index { Global Routing Loading@{ Global Routing Loading} !\- \_ \- do\- \_ \- x\- G@{ \- \_ \- do\- \_ \- x\- G} }
\index { \- \_ \- do\- \_ \- x\- G@{ \- \_ \- do\- \_ \- x\- G} !Global Routing Loading@{ Global Routing Loading} }
\subsubsection [{\-\_\-do\-\_\-x\-G}] { \setlength { \rightskip } { 0pt plus 5cm} void \- \_ \- do\- \_ \- x\- G (
\begin { DoxyParamCaption}
{ }
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [private]} } } \label { group_ _ LoadGlobalRouting_ gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca}
2018-06-06 11:42:26 -05:00
Construct the topology, when there is only global wires (no local terminals).
2018-08-19 06:27:09 -05:00
Some topology are not handled because they must not be managed by this function\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\item One global\- : nonsensical because there also must be a terminal.
\item Two aligned globals\- : in that case we do a straight wire whithout any Auto\- Contact (handled by the source/target of the wire).
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
Referenced by G\- Cell\- Topology\- ::\- \_ \- do\- \_ \- x\- G\- \_ \- 1\- Pad().
\hypertarget { 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 [{\-\_\-do\-\_\-1\-G\-\_\-1\-M1}] { \setlength { \rightskip } { 0pt plus 5cm} void \- \_ \- do\- \_ \- 1\- G\- \_ \- 1\- M1 (
\begin { DoxyParamCaption}
{ }
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [private]} } } \label { group_ _ LoadGlobalRouting_ gad24a03e87e269f16dcc28d8c2d9f1cfb}
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.
2018-06-06 11:42:26 -05:00
\end { DoxyParagraph}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{\-\_\-do\-\_\-1\-G\-\_\-x\-M1}] { \setlength { \rightskip } { 0pt plus 5cm} void \- \_ \- do\- \_ \- 1\- G\- \_ \- x\- M1 (
\begin { DoxyParamCaption}
{ }
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [private]} } } \label { group_ _ LoadGlobalRouting_ ga97942453a1bc5b01106aa380271fd7fc}
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{\-\_\-do\-\_\-x\-G\-\_\-1\-M1\-\_\-1\-M2}] { \setlength { \rightskip } { 0pt plus 5cm} void \- \_ \- do\- \_ \- x\- G\- \_ \- 1\- M1\- \_ \- 1\- M2 (
\begin { DoxyParamCaption}
{ }
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [private]} } } \label { group_ _ LoadGlobalRouting_ gae60ed4e27ad89a1e2ff2cd6415ef33f1}
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).
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\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} .
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
South/west and north/south can be build independantly. Depending on the number of globals, they can consist of\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
\item Nothing (no south nor west).
2018-08-19 06:27:09 -05:00
\item An Auto\- Contact (west present).
2018-06-06 11:42:26 -05:00
\item An horizontal plus a turn (south present).
2018-08-19 06:27:09 -05:00
\item An horizontal plus a H\- Tee (south \& west present).
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
\begin { DoxyParagraph} { Remark\- :}
2018-06-06 11:42:26 -05:00
Not all configurations are represented below.
\end { DoxyParagraph}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{\-\_\-do\-\_\-x\-G\-\_\-x\-M1\-\_\-x\-M3}] { \setlength { \rightskip } { 0pt plus 5cm} void \- \_ \- do\- \_ \- x\- G\- \_ \- x\- M1\- \_ \- x\- M3 (
\begin { DoxyParamCaption}
{ }
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [private]} } } \label { group_ _ LoadGlobalRouting_ gaf9b009520f54099668ac9d12f2c85257}
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).
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\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'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't north or to the first { \ttfamily M\- E\- T\- A\- L3} otherwise.
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
South/west and north/south can be build independantly. Depending on the number of globals, they can consist of\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
\item Nothing (no south nor west).
2018-08-19 06:27:09 -05:00
\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).
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{\-\_\-do\-\_\-x\-G\-\_\-x\-M2}] { \setlength { \rightskip } { 0pt plus 5cm} void \- \_ \- do\- \_ \- x\- G\- \_ \- x\- M2 (
\begin { DoxyParamCaption}
{ }
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [private]} } } \label { group_ _ LoadGlobalRouting_ ga532d1c6b530e0375078ea2d6ea3c6024}
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).
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\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'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't south or to the biggest horizontal Routing\- Pad otherwise.
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{\-\_\-do\-\_\-1\-G\-\_\-1\-M3}] { \setlength { \rightskip } { 0pt plus 5cm} void \- \_ \- do\- \_ \- 1\- G\- \_ \- 1\- M3 (
\begin { DoxyParamCaption}
{ }
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [private]} } } \label { group_ _ LoadGlobalRouting_ ga2519ef984b3d19f123827a9b12651672}
Construct a topology where there is one global and one { \ttfamily M\- E\- T\- A\- L3} Routing\- Pad (assumeds V).
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
In this topology, we reuse the { \ttfamily M\- E\- T\- A\- L3} Routing\- Pad as a feedtrough in the vertical routage. Thus\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\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.
2018-06-06 11:42:26 -05:00
\item If the global is not sufficiently extended, we add a turn to give some slack to the global.
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{\-\_\-do\-\_\-x\-G\-\_\-x\-M3}] { \setlength { \rightskip } { 0pt plus 5cm} void \- \_ \- do\- \_ \- x\- G\- \_ \- x\- M3 (
\begin { DoxyParamCaption}
{ }
\end { DoxyParamCaption}
)\hspace { 0.3cm} { \ttfamily [private]} } } \label { group_ _ LoadGlobalRouting_ ga007efc725aae31782204a44949765cb4}
Construct a topology where there at least one global and two { \ttfamily M\- E\- T\- A\- L3} Routing\- Pad (assumed V).
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-08-19 06:27:09 -05:00
\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).
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
South/west and north/south can be build independantly. Depending on the number of globals, they can consist of\- :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
\item Nothing (no south nor west).
2018-08-19 06:27:09 -05:00
\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).
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
\hypertarget { 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 [{single\-G\-Cell}] { \setlength { \rightskip } { 0pt plus 5cm} void single\- G\- Cell (
\begin { DoxyParamCaption}
\item [{{\bf Katabatic\-Engine} $\ast$}] { ktbt, }
\item [{{\bf Net} $\ast$}] { net}
\end { DoxyParamCaption}
)} } \label { group_ _ LoadGlobalRouting_ ga3973291866b39c10cea5ca17f7d174fb}
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.
2018-06-06 11:42:26 -05:00
2018-08-19 06:27:09 -05:00
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.
2018-06-06 11:42:26 -05:00