500 lines
41 KiB
TeX
500 lines
41 KiB
TeX
\hypertarget{group__LoadGlobalRouting}{\section{Global Routing Loading}
|
|
\label{group__LoadGlobalRouting}\index{Global Routing Loading@{Global Routing Loading}}
|
|
}
|
|
|
|
|
|
Translation rules to build detailed routing from global.
|
|
|
|
|
|
\subsection*{Classes}
|
|
\begin{DoxyCompactItemize}
|
|
\item
|
|
class \hyperlink{classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology}{G\-Cell\-Topology}
|
|
\begin{DoxyCompactList}\small\item\em Build the wiring for a Net inside a G\-Cell ({\bfseries internal}). \end{DoxyCompactList}\end{DoxyCompactItemize}
|
|
\subsection*{Enumerations}
|
|
\begin{DoxyCompactItemize}
|
|
\item
|
|
enum \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,
|
|
\\*
|
|
\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9}{Punctual} = 0x00000010
|
|
, \\*
|
|
\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d}{Do\-Source\-Contact} = 0x00000100,
|
|
\\*
|
|
\hyperlink{group__LoadGlobalRouting_ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2}{Do\-Target\-Contact} = 0x00000200
|
|
\}
|
|
\end{DoxyCompactItemize}
|
|
\subsection*{Functions}
|
|
\begin{DoxyCompactItemize}
|
|
\item
|
|
unsigned int \hyperlink{group__LoadGlobalRouting_gaad5d32b07d1d53ecc8642e4b10df9605}{check\-Routing\-Pad\-Size} ({\bf Component} $\ast$anchor)
|
|
\item
|
|
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)
|
|
\item
|
|
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)
|
|
\item
|
|
static \hyperlink{classKatabatic_1_1AutoContact}{Auto\-Contact} $\ast$ \hyperlink{group__LoadGlobalRouting_ga60edeea78b56db072fc26a58a7afbcd4}{do\-Rp\-\_\-\-Access\-Pad} ({\bf Routing\-Pad} $\ast$, unsigned int flags)
|
|
\item
|
|
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)
|
|
\item
|
|
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)
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_gabe00ab10a0dab8a3d2de0709e61e4e7d}{\-\_\-do\-\_\-x\-G\-\_\-1\-Pad} ()
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca}{\-\_\-do\-\_\-x\-G} ()
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_gad24a03e87e269f16dcc28d8c2d9f1cfb}{\-\_\-do\-\_\-1\-G\-\_\-1\-M1} ()
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_ga97942453a1bc5b01106aa380271fd7fc}{\-\_\-do\-\_\-1\-G\-\_\-x\-M1} ()
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_gae60ed4e27ad89a1e2ff2cd6415ef33f1}{\-\_\-do\-\_\-x\-G\-\_\-1\-M1\-\_\-1\-M2} ()
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_gaf9b009520f54099668ac9d12f2c85257}{\-\_\-do\-\_\-x\-G\-\_\-x\-M1\-\_\-x\-M3} ()
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_ga532d1c6b530e0375078ea2d6ea3c6024}{\-\_\-do\-\_\-x\-G\-\_\-x\-M2} ()
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_ga2519ef984b3d19f123827a9b12651672}{\-\_\-do\-\_\-1\-G\-\_\-1\-M3} ()
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_ga007efc725aae31782204a44949765cb4}{\-\_\-do\-\_\-x\-G\-\_\-x\-M3} ()
|
|
\item
|
|
void \hyperlink{group__LoadGlobalRouting_ga3973291866b39c10cea5ca17f7d174fb}{single\-G\-Cell} (\hyperlink{classKatabatic_1_1KatabaticEngine}{Katabatic\-Engine} $\ast$ktbt, {\bf Net} $\ast$net)
|
|
\end{DoxyCompactItemize}
|
|
|
|
|
|
\subsection{Detailed Description}
|
|
Translation rules to build detailed routing from global. This module documents how the global routing built by {\ttfamily Knik} is loaded into the {\ttfamily \hyperlink{namespaceKatabatic}{Katabatic}} data-\/base. It is intented for developpers only.
|
|
|
|
\subsection{Enumeration Type Documentation}
|
|
\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}
|
|
|
|
|
|
\subsection{Function Documentation}
|
|
\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\-:
|
|
\begin{DoxyItemize}
|
|
\item H\-Small \-: less than 3 pitches in horizontal direction.
|
|
\item V\-Small \-: less than 3 pitches in vertical direction.
|
|
\item Punctual \-: one pitch in either directions.
|
|
\end{DoxyItemize}
|
|
|
|
The component can be a Routing\-Pad, a Vertical or an Horizontal.
|
|
|
|
|
|
|
|
References Component\-::get\-Layer(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-H\-Small, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Punctual, to\-Lambda(), and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-V\-Small.
|
|
|
|
|
|
|
|
Referenced by G\-Cell\-Topology\-::do\-Rp\-\_\-\-Access().
|
|
|
|
\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}
|
|
|
|
\begin{DoxyParams}{Parameters}
|
|
{\em gcell} & The G\-Cell into which create the Auto\-Contact. \\
|
|
\hline
|
|
{\em rp} & The Component we want to access. \\
|
|
\hline
|
|
{\em source} & The Auto\-Contact created on the {\ttfamily source} ({\itshape returned}). \\
|
|
\hline
|
|
{\em target} & The Auto\-Contact created on the {\ttfamily target} ({\itshape returned}). \\
|
|
\hline
|
|
{\em flags} & Managed by this function\-:
|
|
\begin{DoxyItemize}
|
|
\item Local\-Function\-Flag\-::\-Do\-Source\-Contact
|
|
\item Local\-Function\-Flag\-::\-Do\-Target\-Contact
|
|
\end{DoxyItemize}\\
|
|
\hline
|
|
\end{DoxyParams}
|
|
Create the Auto\-Contact directly anchored on the Component (terminal). Three cases are manageds\-:
|
|
\begin{DoxyEnumerate}
|
|
\item {\bfseries Ordinary (non-\/punctual) {\ttfamily M\-E\-T\-A\-L1} terminal}\-: an Auto\-Contact\-Terminal is anchored on the Routing\-Pad.
|
|
\item {\bfseries Punctual {\ttfamily M\-E\-T\-A\-L1} terminal}, the access must never be blocked by other routing. To ensure it, we create a fixed Auto\-Segment (anchored on two Auto\-Contact\-Terminal) to cover it. The {\itshape normal} Auto\-Contact\-Terminal is also created.
|
|
\item {\bfseries non {\ttfamily M\-E\-T\-A\-L1} terminal}, as for the punctual {\ttfamily M\-E\-T\-A\-L1}, a fixed protection is added over the Routing\-Pad. If we access horizontally a vertical Routing\-Pad or vertically an horizontal one, an extra Auto\-Contact\-Terminal is added (to allow is displacement along the Routing\-Pad).
|
|
\end{DoxyEnumerate}
|
|
|
|
To avoid creating a fixed protection over a Routing\-Pad multiple times, the Routing\-Pad and it's associated protection is stored in a static {\ttfamily map} \-: {\ttfamily \-\_\-\-\_\-routing\-Pad\-Auto\-Segments}.
|
|
|
|
Conversely, because an Auto\-Contact\-Terminal can only be connected to one segment, each time this function is called a new terminal will be created (or maybe two in case of non-\/punctual terminals). If only one Auto\-Contact is requested, it is created centered on the Routing\-Pad. The initial position of Auto\-Contact {\itshape do not prevent them to move afterwards}, even those created on source/target on a non-\/punctual Routing\-Pad.
|
|
|
|
\begin{DoxyParagraph}{Remark\-:}
|
|
For clarity we describe the layer management of this function in term of {\ttfamily M\-E\-T\-A\-L}, but it is the Routing\-Gauge depth which is actually used.
|
|
\end{DoxyParagraph}
|
|
|
|
|
|
References Katabatic\-::\-Cnt\-Fixed, Auto\-Contact\-Terminal\-::create(), Auto\-Segment\-::create(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Source\-Contact, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Target\-Contact, Session\-::get\-Contact\-Layer(), Grid$<$ G\-Cell\-T $>$\-::get\-G\-Cell(), Katabatic\-Engine\-::get\-G\-Cell\-Grid(), Session\-::get\-Katabatic(), Component\-::get\-Layer(), Katabatic\-::\-Kb\-Horizontal, Katabatic\-::\-Seg\-Fixed, and Auto\-Segment\-::set\-Flags().
|
|
|
|
|
|
|
|
Referenced by G\-Cell\-Topology\-::\-\_\-do\-\_\-1\-G\-\_\-1\-M3(), G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-1\-M1\-\_\-1\-M2(), G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-x\-M1\-\_\-x\-M3(), G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-x\-M2(), G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-x\-M3(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Access(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Stair\-Case\-H(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Stair\-Case\-V(), and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::single\-G\-Cell().
|
|
|
|
\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}
|
|
|
|
\begin{DoxyParams}{Parameters}
|
|
{\em gcell} & The G\-Cell into which create the Auto\-Contact. \\
|
|
\hline
|
|
{\em rp} & The Component onto which anchor the access contact. \\
|
|
\hline
|
|
{\em flags} & Relevant flags are\-:
|
|
\begin{DoxyItemize}
|
|
\item H\-Access, the terminal is to be accessed through an horizontal segment.
|
|
\item V\-Small, force the terminal to be considered as small in the vertical direction.
|
|
\end{DoxyItemize}\\
|
|
\hline
|
|
\end{DoxyParams}
|
|
If {\ttfamily H\-Access} is set, the Component is to be accessed trough an horizontal segment. If unset, the access is done vertically.
|
|
|
|
Create an Auto\-Contact to access a Component (terminal). If the Component is not to be accessed through an horizontal segment, and do not cover a large span in the horizontal direction (flag {\ttfamily V\-Small}), a local horizontal Auto\-Segment is added to slacken the vertical constraints.
|
|
|
|
|
|
|
|
References anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::check\-Routing\-Pad\-Size(), Auto\-Contact\-Turn\-::create(), Auto\-Segment\-::create(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Auto\-Contacts(), Session\-::get\-Contact\-Layer(), Component\-::get\-Net(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-H\-Access, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-H\-Small, Katabatic\-::\-Kb\-Horizontal, Katabatic\-::\-Kb\-Vertical, and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-V\-Small.
|
|
|
|
|
|
|
|
Referenced by G\-Cell\-Topology\-::\-\_\-do\-\_\-1\-G\-\_\-1\-M1(), G\-Cell\-Topology\-::\-\_\-do\-\_\-1\-G\-\_\-x\-M1(), G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-x\-M1\-\_\-x\-M3(), G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-x\-M2(), and G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-x\-M3().
|
|
|
|
\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}
|
|
|
|
\begin{DoxyParams}{Parameters}
|
|
{\em rp} & The Component onto which anchor the access contact. \\
|
|
\hline
|
|
{\em flags} & Relevant flags are\-:
|
|
\begin{DoxyItemize}
|
|
\item H\-Access, the terminal is to be accessed through an horizontal segment.
|
|
\item V\-Small, force the terminal to be considered as small in the vertical direction.
|
|
\end{DoxyItemize}\\
|
|
\hline
|
|
\end{DoxyParams}
|
|
\begin{DoxyReturn}{Returns}
|
|
A \hyperlink{classKatabatic_1_1AutoContactTerminal}{Katabatic\-::\-Auto\-Contact\-Terminal} .
|
|
\end{DoxyReturn}
|
|
The Component {\ttfamily rp} is a Routing\-Pad which belongs to a pad cell. This case occurs when we are routing a complete chip. This method build, from the {\ttfamily rp} a stack of articulated punctual segments and contacts to reach the default H/\-V routing layers (usually {\ttfamily M\-E\-T\-A\-L2} \& {\ttfamily M\-E\-T\-A\-L3}). This may be needed when the pad terminal is in {\ttfamily M\-E\-T\-A\-L5}, for instance.
|
|
|
|
The returned Auto\-Contact\-Terminal is anchored on the last punctual segment build.
|
|
|
|
The G\-Cell into which the Auto\-Contact\-Terminal is created may be under the pads area. However, it will be right on the border of the G\-Cell. The global router vertexes of G\-Cell under the pad area are marked as blocked so will never be used for routing.
|
|
|
|
\begin{DoxyParagraph}{Remark\-:}
|
|
The segments and contacts added to ensure the layer connexity are not put into the \hyperlink{namespaceKatabatic}{Katabatic} database. They are plain {\bf Hurricane} objects, invisibles from it.
|
|
\end{DoxyParagraph}
|
|
|
|
|
|
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().
|
|
|
|
|
|
|
|
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\-:
|
|
\begin{DoxyItemize}
|
|
\item The Component are aligneds, then only a straight wire is created.
|
|
\item They are {\itshape not} aligned, then a complete dogleg is created.
|
|
\end{DoxyItemize}
|
|
|
|
|
|
|
|
References Auto\-Contact\-Turn\-::create(), Auto\-Segment\-::create(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Auto\-Contacts(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Source\-Contact, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Target\-Contact, Session\-::get\-Contact\-Layer(), Component\-::get\-Layer(), Component\-::get\-Net(), Component\-::get\-X(), Auto\-Contact\-::get\-Y(), Katabatic\-::\-Kb\-Horizontal, and Katabatic\-::\-Kb\-Vertical.
|
|
|
|
|
|
|
|
Referenced by G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-x\-M2().
|
|
|
|
\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\-:
|
|
\begin{DoxyItemize}
|
|
\item The Components are aligneds, then only a straight wire is created.
|
|
\item They are {\itshape not} aligned, then a complete dogleg is created.
|
|
\end{DoxyItemize}
|
|
|
|
|
|
|
|
References Auto\-Contact\-Turn\-::create(), Auto\-Segment\-::create(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Auto\-Contacts(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Source\-Contact, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Target\-Contact, Session\-::get\-Contact\-Layer(), Component\-::get\-Layer(), Component\-::get\-Net(), Auto\-Contact\-::get\-X(), Component\-::get\-Y(), Katabatic\-::\-Kb\-Horizontal, and Katabatic\-::\-Kb\-Vertical.
|
|
|
|
|
|
|
|
Referenced by G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-x\-M3().
|
|
|
|
\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.
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
\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}
|
|
Construct the topology, when there is only global wires (no local terminals).
|
|
|
|
Some topology are not handled because they must not be managed by this function\-:
|
|
\begin{DoxyItemize}
|
|
\item One global\-: nonsensical because there also must be a terminal.
|
|
\item Two aligned globals\-: in that case we do a straight wire whithout any Auto\-Contact (handled by the source/target of the wire).
|
|
\end{DoxyItemize}
|
|
|
|
|
|
|
|
References Auto\-Contact\-V\-Tee\-::create(), Auto\-Contact\-Turn\-::create(), Auto\-Contact\-H\-Tee\-::create(), Auto\-Segment\-::create(), Session\-::get\-Contact\-Layer(), Katabatic\-::\-Kb\-Horizontal, and Katabatic\-::\-Kb\-Vertical.
|
|
|
|
|
|
|
|
Referenced by G\-Cell\-Topology\-::\-\_\-do\-\_\-x\-G\-\_\-1\-Pad().
|
|
|
|
\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.
|
|
\end{DoxyParagraph}
|
|
|
|
|
|
References G\-Cell\-Topology\-::do\-Rp\-\_\-\-Access(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-H\-Access, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-No\-Flags, and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-V\-Small.
|
|
|
|
\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.
|
|
|
|
The Routing\-Pads are linked together two by two. If the horizontal segments are not aligned by the router, part of the routage will be done through the Routing\-Pad itself. The global incoming segment will connected to the leftmost, rightmost or centermost Routing\-Pad according from wich side it comes from.
|
|
|
|
|
|
|
|
References Auto\-Contact\-Turn\-::create(), Auto\-Segment\-::create(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Access(), Component\-::get\-Bounding\-Box(), Session\-::get\-Contact\-Layer(), Box\-::get\-Height(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-H\-Access, Katabatic\-::\-Kb\-Horizontal, and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-No\-Flags.
|
|
|
|
\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).
|
|
|
|
In this topology, we want to try to reuse the {\ttfamily M\-E\-T\-A\-L2} Routing\-Pad as a feedtrough in the horizontal routage. Thus\-:
|
|
\begin{DoxyItemize}
|
|
\item The {\ttfamily M\-E\-T\-A\-L1} and {\ttfamily M\-E\-T\-A\-L2} Routing\-Pad are connected through a separate wiring.
|
|
\item The south \& west global wiring is attached to the leftmost contact of the {\ttfamily M\-E\-T\-A\-L2}.
|
|
\item The north \& east global wiring is attached to the rightmost contact of the {\ttfamily M\-E\-T\-A\-L2}.
|
|
\end{DoxyItemize}
|
|
|
|
South/west and north/south can be build independantly. Depending on the number of globals, they can consist of\-:
|
|
\begin{DoxyItemize}
|
|
\item Nothing (no south nor west).
|
|
\item An Auto\-Contact (west present).
|
|
\item An horizontal plus a turn (south present).
|
|
\item An horizontal plus a H\-Tee (south \& west present).
|
|
\end{DoxyItemize}
|
|
|
|
\begin{DoxyParagraph}{Remark\-:}
|
|
Not all configurations are represented below.
|
|
\end{DoxyParagraph}
|
|
|
|
|
|
References Auto\-Contact\-Turn\-::create(), Auto\-Contact\-H\-Tee\-::create(), Auto\-Segment\-::create(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Auto\-Contacts(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Source\-Contact, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Target\-Contact, Session\-::get\-Contact\-Layer(), Session\-::get\-Routing\-Layer(), Katabatic\-::\-Kb\-Horizontal, Katabatic\-::\-Kb\-Vertical, and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-No\-Flags.
|
|
|
|
\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).
|
|
|
|
In this topology, we want to try to reuse the {\ttfamily M\-E\-T\-A\-L3} Routing\-Pad as a feedtrough in the vertical routage. Thus\-:
|
|
\begin{DoxyItemize}
|
|
\item The {\ttfamily M\-E\-T\-A\-L1} and {\ttfamily M\-E\-T\-A\-L3} Routing\-Pad are connected through a separate wiring made of separate horizontals.
|
|
\item The south-\/west global wiring is attached to the leftmost Routing\-Pad if there isn'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.
|
|
\end{DoxyItemize}
|
|
|
|
South/west and north/south can be build independantly. Depending on the number of globals, they can consist of\-:
|
|
\begin{DoxyItemize}
|
|
\item Nothing (no south nor west).
|
|
\item An Auto\-Contact on the leftmost Routing\-Pad (west present).
|
|
\item An Auto\-Contact on the first {\ttfamily M\-E\-T\-A\-L3} (only south present).
|
|
\item An Auto\-Contact plus a vertical plus a V\-Tee (south \& west present).
|
|
\end{DoxyItemize}
|
|
|
|
|
|
|
|
References Auto\-Contact\-V\-Tee\-::create(), Auto\-Contact\-Turn\-::create(), Auto\-Contact\-H\-Tee\-::create(), Auto\-Segment\-::create(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Access(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Auto\-Contacts(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Source\-Contact, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Target\-Contact, Component\-::get\-Bounding\-Box(), Session\-::get\-Contact\-Layer(), Box\-::get\-Height(), Session\-::get\-Routing\-Layer(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-H\-Access, Katabatic\-::\-Kb\-Horizontal, Katabatic\-::\-Kb\-Vertical, and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-No\-Flags.
|
|
|
|
\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).
|
|
|
|
In this topology, we want to try to reuse the {\ttfamily M\-E\-T\-A\-L2} Routing\-Pad as a feedtrough in the horizontal routage. Thus\-:
|
|
\begin{DoxyItemize}
|
|
\item The Routing\-Pad are connecteds trough a separate staircase (or straight wire if aligneds).
|
|
\item The south-\/west global wiring is attached to the leftmost Routing\-Pad if there isn'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.
|
|
\end{DoxyItemize}
|
|
|
|
|
|
|
|
References Auto\-Contact\-V\-Tee\-::create(), Auto\-Segment\-::create(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Access(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Auto\-Contacts(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Stair\-Case\-H(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Source\-Contact, Component\-::get\-Bounding\-Box(), Session\-::get\-Contact\-Layer(), Box\-::get\-Width(), Katabatic\-::\-Kb\-Vertical, and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-No\-Flags.
|
|
|
|
\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).
|
|
|
|
In this topology, we reuse the {\ttfamily M\-E\-T\-A\-L3} Routing\-Pad as a feedtrough in the vertical routage. Thus\-:
|
|
\begin{DoxyItemize}
|
|
\item If the global is either north or south, we directly connect to the north end or south end of the Routing\-Pad. The vertical global will have no slack at all we assume that M\-E\-T\-A\-L3 terminals are only from blocks and are aligneds vertically.
|
|
\item If the global is east or west {\itshape and} the Routing\-Pad is sufficiently extended in the vertical direction, we connect an horizontal in the normal way.
|
|
\item If the global is not sufficiently extended, we add a turn to give some slack to the global.
|
|
\end{DoxyItemize}
|
|
|
|
|
|
|
|
References Auto\-Contact\-Turn\-::create(), Auto\-Segment\-::create(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Auto\-Contacts(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Source\-Contact, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Target\-Contact, Session\-::get\-Contact\-Layer(), Auto\-Contact\-::get\-X(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-H\-Access, Katabatic\-::\-Kb\-Horizontal, Katabatic\-::\-Kb\-Vertical, and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-No\-Flags.
|
|
|
|
\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).
|
|
|
|
In this topology, we reuse the {\ttfamily M\-E\-T\-A\-L3} Routing\-Pad as a feedtrough in the vertical routage. We assume that the most likely relative position of the Routing\-Pads is to be aligned vertically. Thus\-:
|
|
\begin{DoxyItemize}
|
|
\item All Routing\-Pads are linked two by two trough vertical staircases.
|
|
\item The south-\/west global wiring is attached to the bottommost Routing\-Pad (without vertical slack). If a misalignment is detected, then a dogleg is added.
|
|
\item The north-\/east global wiring is attached to the topmost Routing\-Pad (without vertical slack).
|
|
\end{DoxyItemize}
|
|
|
|
South/west and north/south can be build independantly. Depending on the number of globals, they can consist of\-:
|
|
\begin{DoxyItemize}
|
|
\item Nothing (no south nor west).
|
|
\item An sliding Auto\-Contact on the bottommost Routing\-Pad (west present).
|
|
\item An fixed Auto\-Contact on the bottommost Routing\-Pad (only south present).
|
|
\item An fixed Auto\-Contact plus a vertical plus a V\-Tee (south \& west present).
|
|
\end{DoxyItemize}
|
|
|
|
|
|
|
|
References Auto\-Contact\-V\-Tee\-::create(), Auto\-Contact\-Turn\-::create(), Auto\-Segment\-::create(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Access(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Auto\-Contacts(), G\-Cell\-Topology\-::do\-Rp\-\_\-\-Stair\-Case\-V(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Source\-Contact, anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-Do\-Target\-Contact, Session\-::get\-Contact\-Layer(), Db\-U\-::get\-Value\-String(), Auto\-Contact\-::get\-X(), anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-H\-Access, Katabatic\-::\-Kb\-Horizontal, Katabatic\-::\-Kb\-Vertical, and anonymous\-\_\-namespace\{\-Load\-Gr\-By\-Net.\-cpp\}\-::\-No\-Flags.
|
|
|
|
\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.
|
|
|
|
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.
|
|
|