2018-10-18 11:10:01 -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} }
Translation rules to build detailed routing from global.
\subsection * { Classes}
\begin { DoxyCompactItemize}
\item
2018-10-18 11:10:01 -05:00
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}
2018-06-06 11:42:26 -05:00
\subsection * { Enumerations}
\begin { DoxyCompactItemize}
\item
2018-10-18 11:10:01 -05:00
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
2018-06-06 11:42:26 -05:00
\}
\end { DoxyCompactItemize}
\subsection * { Functions}
\begin { DoxyCompactItemize}
\item
2018-10-18 11:10:01 -05:00
unsigned int \mbox { \hyperlink { group_ _ LoadGlobalRouting_ gaad5d32b07d1d53ecc8642e4b10df9605} { check\+ Routing\+ Pad\+ Size} } (\textbf { Component} $ \ast $ anchor)
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
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)
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
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)
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
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)
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
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)
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
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)
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ gabe00ab10a0dab8a3d2de0709e61e4e7d} { \+ \_ \+ do\+ \_ \+ x\+ G\+ \_ \+ 1\+ Pad} } ()
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca} { \+ \_ \+ do\+ \_ \+ xG} } ()
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ gad24a03e87e269f16dcc28d8c2d9f1cfb} { \+ \_ \+ do\+ \_ \+ 1\+ G\+ \_ \+ 1\+ M1} } ()
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ ga97942453a1bc5b01106aa380271fd7fc} { \+ \_ \+ do\+ \_ \+ 1\+ G\+ \_ \+ x\+ M1} } ()
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ gae60ed4e27ad89a1e2ff2cd6415ef33f1} { \+ \_ \+ do\+ \_ \+ x\+ G\+ \_ \+ 1\+ M1\+ \_ \+ 1\+ M2} } ()
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ gaf9b009520f54099668ac9d12f2c85257} { \+ \_ \+ do\+ \_ \+ x\+ G\+ \_ \+ x\+ M1\+ \_ \+ x\+ M3} } ()
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ ga532d1c6b530e0375078ea2d6ea3c6024} { \+ \_ \+ do\+ \_ \+ x\+ G\+ \_ \+ x\+ M2} } ()
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ ga2519ef984b3d19f123827a9b12651672} { \+ \_ \+ do\+ \_ \+ 1\+ G\+ \_ \+ 1\+ M3} } ()
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ ga007efc725aae31782204a44949765cb4} { \+ \_ \+ do\+ \_ \+ x\+ G\+ \_ \+ x\+ M3} } ()
2018-06-06 11:42:26 -05:00
\item
2018-10-18 11:10:01 -05:00
void \mbox { \hyperlink { group_ _ LoadGlobalRouting_ ga3973291866b39c10cea5ca17f7d174fb} { single\+ G\+ Cell} } (\mbox { \hyperlink { classKatabatic_ 1_ 1KatabaticEngine} { Katabatic\+ Engine} } $ \ast $ ktbt, \textbf { Net} $ \ast $ net)
2018-06-06 11:42:26 -05:00
\end { DoxyCompactItemize}
\subsection { Detailed Description}
2018-10-18 11:10:01 -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 \mbox { \hyperlink { namespaceKatabatic} { Katabatic} } } data-\/ base. It is intented for developpers only.
2018-06-06 11:42:26 -05:00
\subsection { Enumeration Type Documentation}
2018-10-18 11:10:01 -05:00
\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}
2018-06-06 11:42:26 -05:00
\subsection { Function Documentation}
2018-10-18 11:10:01 -05:00
\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\+ :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
The component can be a Routing\+ Pad, a Vertical or an Horizontal.
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
Referenced by G\+ Cell\+ Topology\+ ::do\+ Rp\+ \_ \+ \+ Access().
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
\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]} }
2018-06-06 11:42:26 -05:00
\begin { DoxyParams} { Parameters}
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
{ \em source} & The Auto\+ Contact created on the { \ttfamily source} ({ \itshape returned} ). \\
2018-06-06 11:42:26 -05:00
\hline
2018-10-18 11:10:01 -05:00
{ \em target} & The Auto\+ Contact created on the { \ttfamily target} ({ \itshape returned} ). \\
2018-06-06 11:42:26 -05:00
\hline
2018-10-18 11:10:01 -05:00
{ \em flags} & Managed by this function\+ :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -05:00
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} .
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
\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.
2018-06-06 11:42:26 -05:00
\end { DoxyParagraph}
2018-10-18 11:10:01 -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-10-18 11:10:01 -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().
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
\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]} }
2018-08-19 06:27:09 -05:00
2018-06-06 11:42:26 -05:00
\begin { DoxyParams} { Parameters}
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
{ \em flags} & Relevant flags are\+ :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -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-08-19 06:27:09 -05:00
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -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().
\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]} }
2018-08-19 06:27:09 -05:00
2018-06-06 11:42:26 -05:00
\begin { DoxyParams} { Parameters}
{ \em rp} & The Component onto which anchor the access contact. \\
\hline
2018-10-18 11:10:01 -05:00
{ \em flags} & Relevant flags are\+ :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
A \mbox { \hyperlink { classKatabatic_ 1_ 1AutoContactTerminal} { Katabatic\+ ::\+ Auto\+ Contact\+ Terminal} } .
2018-06-06 11:42:26 -05:00
\end { DoxyReturn}
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
The returned Auto\+ Contact\+ Terminal is anchored on the last punctual segment build.
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
\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.
2018-06-06 11:42:26 -05:00
\end { DoxyParagraph}
2018-10-18 11:10:01 -05:00
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().
2018-08-19 06:27:09 -05:00
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
Referenced by G\+ Cell\+ Topology\+ ::\+ \_ \+ do\+ \_ \+ x\+ G\+ \_ \+ 1\+ Pad().
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
\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]} }
2018-08-19 06:27:09 -05:00
2018-10-18 11:10:01 -05:00
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-10-18 11:10:01 -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-08-19 06:27:09 -05:00
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
Referenced by G\+ Cell\+ Topology\+ ::\+ \_ \+ do\+ \_ \+ x\+ G\+ \_ \+ x\+ M2().
2018-08-19 06:27:09 -05:00
2018-10-18 11:10:01 -05:00
\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\+ :
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-10-18 11:10:01 -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-08-19 06:27:09 -05:00
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
Referenced by G\+ Cell\+ Topology\+ ::\+ \_ \+ do\+ \_ \+ x\+ G\+ \_ \+ x\+ M3().
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
\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]} }
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
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-10-18 11:10:01 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -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.
\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]} }
2018-06-06 11:42:26 -05:00
Construct the topology, when there is only global wires (no local terminals).
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
\item One global\+ : nonsensical because there also must be a terminal.
Migrating the initialisation system to be completely Python-like.
* New: In bootstrap/coriolisEnv.py, add the "etc" directory to the
PYTHONPATH as initialization are now Python modules.
* New: In Hurricane/analogic, first groundwork for the integration of
PIP/MIM/MOM multi-capacitors. Add C++ and Python interface for the
allocation matrix and the list of capacities values.
* Change: In Hurricane::RegularLayer, add a layer parameter to the
constructor so the association between the RegularLayer and it's
BasicLayer can readily be done.
* Change: In Hurricane::Layer, add a new getCut() accessor to get the
cut layer in ViaLayer.
* Change: In Hurricane::DataBase::get(), the Python wrapper should no
longer consider an error if the data-base has not been created yet.
Just return None.
* Bug: In Isobar::PyLayer::getEnclosure() wrapper, if the overall
enclosure is requested, pass the right parameter to the C++ function.
* Change: In AllianceFramework, make public _bindLibraries() and export
it to the Python interface.
* Change: In AllianceFramework::create(), do not longer call bindLibraries().
This now must be done explicitely and afterwards.
* Change: In AllianceFramework::createLibrary() and
Environement::addSYSTEM_LIBRARY(), minor bug corrections that I don't
recall.
* Change: In SearchPath::prepend(), set the selected index to zero and
return it.
* Change: In CRL::System CTOR, add "etc" to the PYTHONPATH as the
configuration files are now organized as Python modules.
* New: In PyCRL, export the CRL::System singleton, it's creation is no
longer triggered by the one of AllianceFramework.
* New: In CRL/etc/, convert most of the configuration files into the
Python module format. For now, keep the old ".conf", but that are no
longer used.
For the real technologies, we cannot keep the directory name as
"180" or "45" as it not allowed by Python syntax, so we create "node180"
or "node45" instead.
Most of the helpers and coriolisInit.py are no longer used now.
To be removed in future commits after being sure that everything
works...
* Bug: In AutoSegment::makeDogleg(AutoContact*), the layer of the contacts
where badly computed when one end of the original segment was attached
to a non-preferred direction segment (mostly on terminal contacts).
Now use the new AutoContact::updateLayer() method.
* Bug: In Dijkstra::load(), limit symetric search area only if the net
is a symmetric one !
* Change: In Katana/python/katanaInit.py, comply with the new initialisation
scheme.
* Change: In Unicorn/cgt.py, comply to the new inititalization scheme.
* Change: In cumulus various Python scripts remove the call to
helpers.staticInitialization() as they are not needed now (we run in
only *one* interpreter, so we correctly share all init).
In plugins/__init__.py, read the new NDA directory variable.
* Bug: In cumulus/plugins/Chip.doCoronafloorplan(), self.railsNb was not
correctly managed when there was no clock.
* Change: In cumulus/plugins/Configuration.coronaContactArray(), compute
the viaPitch from the technology instead of the hard-coded 4.0 lambdas.
In Configuration.loadConfiguration(), read the "ioring.py" from
the new user's settings module.
* Bug: In stratus.dpgen_ADSB2F, gives coordinates translated into DbU to
the XY functions.
In st_model.Save(), use the VstUseConcat flag to get correct VST files.
In st_net.hur_net(), when a net is POWER/GROUND or CLOCK also make it
global.
* Change: In Oroshi/python/WIP_Transistor.py, encapsulate the generator
inside a try/except block to get prettier error (and stop at the first).
2019-10-28 12:09:14 -05:00
\item Two aligned globals\+ : in that case we do a straight wire without any Auto\+ Contact (handled by the source/target of the wire).
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-10-18 11:10:01 -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-10-18 11:10:01 -05:00
Referenced by G\+ Cell\+ Topology\+ ::\+ \_ \+ do\+ \_ \+ x\+ G\+ \_ \+ 1\+ Pad().
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
\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]} }
2018-08-19 06:27:09 -05:00
2018-10-18 11:10:01 -05:00
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.
2018-08-19 06:27:09 -05:00
2018-10-18 11:10:01 -05:00
\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-10-18 11:10:01 -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-10-18 11:10:01 -05:00
\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]} }
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
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.
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -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.
\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]} }
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
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-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -05:00
\item An horizontal plus a H\+ Tee (south \& west present).
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-10-18 11:10:01 -05:00
\begin { DoxyParagraph} { Remark\+ : Not all configurations are represented below.}
2018-06-06 11:42:26 -05:00
\end { DoxyParagraph}
2018-10-18 11:10:01 -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.
\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]} }
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
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-10-18 11:10:01 -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-10-18 11:10:01 -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\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.
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -05:00
\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]} }
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
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\+ :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-10-18 11:10:01 -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\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.
2018-06-06 11:42:26 -05:00
\end { DoxyItemize}
2018-10-18 11:10:01 -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.
\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]} }
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
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-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -05:00
\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]} }
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
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\+ :
2018-06-06 11:42:26 -05:00
\begin { DoxyItemize}
2018-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -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-10-18 11:10:01 -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.
\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} )}
2018-06-06 11:42:26 -05:00
2018-10-18 11:10:01 -05:00
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-10-18 11:10:01 -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