Public Types | |
typedef set< Net *, NetCompareByName > | NetSet |
Public Member Functions | |
bool | isGMetal (const Layer *) const |
bool | isChip () const |
bool | isInDemoMode () const |
bool | doWarnOnGCellOverload () const |
bool | doDestroyBaseContact () const |
bool | doDestroyBaseSegment () const |
bool | doDestroyTool () const |
virtual const Name & | getName () const |
EngineState | getState () const |
unsigned int | getFlags (unsigned int mask) const |
Configuration * | getKatabaticConfiguration () |
virtual Configuration * | getConfiguration () |
RoutingGauge * | getRoutingGauge () const |
RoutingLayerGauge * | getLayerGauge (size_t depth) const |
const Layer * | getRoutingLayer (size_t depth) const |
Layer * | getContactLayer (size_t depth) const |
GCellGrid * | getGCellGrid () const |
const NetSet & | getRoutingNets () const |
DbU::Unit | getGlobalThreshold () const |
float | getSaturateRatio () const |
size_t | getSaturateRp () const |
DbU::Unit | getExtensionCap () const |
const ChipTools & | getChipTools () const |
void | xmlWriteGCellGrid (ostream &) |
void | xmlWriteGCellGrid (const string &) |
void | setState (EngineState state) |
void | setFlags (unsigned int) |
void | unsetFlags (unsigned int) |
void | setGlobalThreshold (DbU::Unit) |
void | setSaturateRatio (float) |
void | setSaturateRp (size_t) |
void | printMeasures (const string &) const |
void | refresh (unsigned int flags=KbOpenSession) |
virtual void | createDetailedGrid () |
void | makePowerRails () |
virtual void | loadGlobalRouting (unsigned int method) |
void | slackenBorder (Box bb, Layer::Mask, unsigned int flags) |
void | slackenBlockIos (Instance *core) |
bool | moveUpNetTrunk (AutoSegment *, set< Net *> &globalNets, GCell::SetIndex &invalidateds) |
void | layerAssign (unsigned int method) |
void | computeNetConstraints (Net *) |
void | toOptimals (Net *) |
virtual void | finalizeLayout () |
Static Public Member Functions | |
static KatabaticEngine * | create (Cell *) |
static const Name & | staticGetName () |
The Katabatic Tool.
During it's lifecycle, the engine go through a serie of states. It only can go forward between states.
Due to the size of the code and the fact that the main body of some methods do not need to be present in the class, the implementation of KatabaticEngine is split in several files. The list below summarize them:
KatabaticEngine.cpp
: the core of the class, methods that really need their bodies here.PowerRails.cpp
: utilities to construct an abstract from all the power rails through the hierarchy.LayerAssign.cpp
: layer assignement related methods and helpers.LoadGrByNet.cpp
: global routing loader, transform global routing into Katabatic data-structure.NetConstraints.cpp
: compute the topological constraints of all AutoSegment/AutoContact of a Net.NetOptimals.cpp
: compute the optimal positions of all AutoSegment of a Net.
|
static |
Create a KatabaticEngine on cell
.
|
static |
Returns: The unique string identifier for the KatabaticEngine class of ToolEngine.
|
inline |
Returns: true if layer
is one of the special (fake) metals used to build the global routing.
Referenced by AutoSegment::create().
|
inline |
Returns: true if the hierarchy top-level of the Cell matches the one of a complete design (i.e. pads and one core instance).
References ChipTools::isChip().
|
inline |
Returns: true if the tool is in demo mode, that is suppress almost all warning and debug messages.
Referenced by Session::isInDemoMode().
|
inline |
Returns: true if the tool should issue a warning when a GCell is overloaded (overload could be transient).
Referenced by Session::doWarnGCellOverload().
|
inline |
Returns: true if the EngineDestroyBaseContact is set, meaning that when an AutoContact is destroyed, the Contact it decorates is destroyed altogether.
|
inline |
Returns: true if the EngineDestroyBaseSegment is set, meaning that when an AutoSegment is destroyed, the Segment it decorates is destroyed altogether.
|
inline |
Returns: true if the tool state is beyond EngineStateGutted, that is, only waits for destroy()
to be called.
References Katabatic::EngineGutted.
|
virtual |
Returns: The unique string identifier for the KatabaticEngine class of ToolEngine.
Implements ToolEngine.
|
inline |
Returns: The state the tool is currently in.
|
inline |
Returns: The anded combination of the tool flags and mask
.
|
inline |
Returns: The Configuration of Katabatic. In this class it is redundant with getConfiguration(), but may be useful in derived classes.
|
virtual |
Returns: The Configuration of the current ToolEngine.
|
inline |
Returns: The RoutingGauge (Configuration shortcut).
|
inline |
Returns: The RoutingLayerGauge associated to depth
(Configuration shortcut).
|
inline |
Returns: The routing Layer associated to depth
(Configuration shortcut).
|
inline |
Returns: The contact Layer associated to depth
(Configuration shortcut).
|
inline |
Returns: The GCellGrid.
Referenced by GCellTopology::doRp_AccessPad(), GCellTopology::doRp_AutoContacts(), and anonymous_namespace{LoadGrByNet.cpp}::singleGCell().
|
inline |
Returns: The set of nets to be routeds.
|
inline |
Returns: The length above which a global wire is moved up in the layer assignment stage (Configuration shortcut).
|
inline |
Returns: The ratio above which a GCell is considered to be saturated (Configuration shortcut).
Referenced by Session::getSaturateRatio().
|
inline |
Returns: The number of RoutingPad above which a GCell is saturated, causing extras global segments to be moved up. (Configuration shortcut).
Referenced by Session::getSaturateRp().
|
inline |
Returns: The wires extension cap, same for all layers for the time beeing (Configuration shortcut).
|
inline |
Returns: The chip tools (for whole designs).
Referenced by KatabaticEngine::createDetailedGrid().
void xmlWriteGCellGrid | ( | ostream & | o | ) |
Write in a stream all informations on the GCells in XML format.
Referenced by KatabaticEngine::xmlWriteGCellGrid().
void xmlWriteGCellGrid | ( | const string & | fileName | ) |
Write in a file all informations on the GCells in XML format.
References KatabaticEngine::xmlWriteGCellGrid().
|
inline |
Force the state of the tool. Must be used with caution, as no sanity checks are performeds. This method is normally invoked from inside the KatabaticEngine various methods.
|
inline |
Set the flags given in flags
.
Referenced by Session::setKatabaticFlags().
|
inline |
Reset the flags given in flags
.
|
inline |
(Configuration shortcut).
|
inline |
(Configuration shortcut).
|
inline |
(Configuration shortcut).
void printMeasures | ( | const string & | tag | ) | const |
Print memory & time measurement on ``cmess1``. If tag
is not empty, also adds the measurement to the internal table (with tag
as label).
Referenced by KatabaticEngine::finalizeLayout().
void refresh | ( | unsigned int | flags = KbOpenSession | ) |
In case the tool is associated with a graphic display, trigger a full redraw of the Cell. Slow the router but allow to see work in progress... If flags
do not contains KbOpenSession
the refresh operation will not be enclosed inside it's own session. This assumes that a session is already opened.
References GCellGrid::updateContacts().
|
virtual |
void makePowerRails | ( | ) |
Detect all the aligned segments of same width that compose power rails, unificate them and copy them at the design top level.
|
virtual |
method | the loading algorithm |
nets | the set of nets to route. |
Convert the global routing into the initial detailed routing. For the time beeing, only one loading algorithm is available: net by net (EngineLoadGrByNet). Only Net given in nets
are routeds. If nets
is empty then all ordinary nets are routeds. In either cases the set of nets to route is pruned from any power, ground or clock signals.
References Katabatic::EngineActive, and Katabatic::EngineGlobalLoaded.
void slackenBorder | ( | Box | bb, |
Layer::Mask | mask, | ||
unsigned int | flags | ||
) |
bb | The bounding box, defines the edges. |
mask | Consider only layers that are fully included in that mask. |
flags | Consider only segment in that direction. |
Perform a preventive break on all global segments going through the vertical left and right edges of the bb
box. The set of global segments to be broken could be further restricted using mask
and flags
.
The Semantic of flags
is not clear, must review the code more closely.
References Box::getXMax(), Box::getXMin(), Box::getYMax(), and Box::getYMin().
void slackenBlockIos | ( | Instance * | core | ) |
Perform a preventive break on horizontal segments in the GCell immediatly outside the instance core
area in the routing layer of index 1
.
This method is too much hardwired to the SxLib
gauge. It's effect is to break all METAL2 outside the core (in a chip).
References Entity::getBoundingBox(), Instance::getName(), Constant::Horizontal, and Box::inflate().
bool moveUpNetTrunk | ( | AutoSegment * | seed, |
set< Net *> & | globalNets, | ||
GCell::SetIndex & | invalidateds | ||
) |
seed | The AutoSegment to take the net from. |
globalNets | The set of nets that has been moved up. |
invalidateds | The set of GCells that have been invalidated. Returns: true if the net trunk have been moved up. |
Try to move up a whole net trunk. The net is supplied through the seed
argument (the segment that triggers the move). If the net is actually moved up, it is added to globalNets
and all GCells that have been invalidateds are added to invalidateds
.
An individual AutoSegment of the net is moved up if it's length is greater that 150
lambdas, that is, three times the side of a GCell. This is hard-wired and should be parametrized in the future.
void layerAssign | ( | unsigned int | method | ) |
Perform the layer assignment. The global routing loading stage uses only the two bottom most layers, this method spread them on all the availables routing layers, according to GCell and RoutingPad density criterions.
Two algorithms are availables:
void computeNetConstraints | ( | Net * | net | ) |
Compute the box constraints on AutoContacts (and therefore those applied to AutoSegments). Constraints comes from AutoContacts anchoreds on RoutingPads and transmitted through AutoContactHTee or AutoContactVTee. Constraints are applied to all AutoContacts of an aligned set.
net
must have been canonized before this function to be called. void toOptimals | ( | Net * | net | ) |
Move all AutoSegment of net
so that their axis are inside their optimals interval. If a AutoSegment is already inside the interval is not moved, otherwise it is put on the nearest bound of the optimal interval.
|
virtual |
Transform the Katabatic wires into the Hurricane data-structure. Mostly by removing the AutoSegment/AutoContact without removing their Hurricane conterparts. May also fill gaps that may have appeared.
References Katabatic::EngineDriving, Katabatic::EngineGutted, and KatabaticEngine::printMeasures().
Generated by doxygen 1.8.14 on Sun Nov 21 2021 | Return to top of page |
Katabatic - Routing Toolbox | Copyright © 2008-2020 Sorbonne Universite. All rights reserved |