2017-07-15 10:35:02 -05:00
<!DOCTYPE html>
<!-- [if IE 8]><html class="no - js lt - ie9" lang="en" > <![endif] -->
<!-- [if gt IE 8]><! --> < html class = "no-js" lang = "en" > <!-- <![endif] -->
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > Symbolic Layout — Coriolis 2 documentation< / title >
< link rel = "stylesheet" href = "../_static/SoC.css" type = "text/css" / >
2017-10-30 09:33:37 -05:00
< link rel = "index" title = "Index"
href="../genindex.html"/>
< link rel = "search" title = "Search" href = "../search.html" / >
2017-07-15 10:35:02 -05:00
< link rel = "top" title = "Coriolis 2 documentation" href = "../index.html" / >
2018-05-04 17:23:44 -05:00
< link rel = "up" title = "RDS – Symbolic to Real Conversion in Alliance" href = "index.html" / >
2017-10-30 09:33:37 -05:00
< link rel = "next" title = "LEF API Reference" href = "../lefapi/lefapi.html" / >
2018-05-04 17:23:44 -05:00
< link rel = "prev" title = "RDS – Symbolic to Real Conversion in Alliance" href = "index.html" / >
2017-07-15 10:35:02 -05:00
< script src = "_static/js/modernizr.min.js" > < / script >
< / head >
< body class = "wy-body-for-nav" role = "document" >
< div class = "wy-grid-for-nav" >
< nav data-toggle = "wy-nav-shift" class = "wy-nav-side" >
< div class = "wy-side-nav-search" >
< a href = "../index.html" class = "icon icon-home" > Coriolis
< / a >
< div role = "search" >
< form id = "rtd-search-form" class = "wy-form" action = "../search.html" method = "get" >
< input type = "text" name = "q" placeholder = "Search docs" / >
< input type = "hidden" name = "check_keywords" value = "yes" / >
< input type = "hidden" name = "area" value = "default" / >
< / form >
< / div >
< / div >
< div class = "wy-menu wy-menu-vertical" data-spy = "affix" role = "navigation" aria-label = "main navigation" >
< ul class = "current" >
< li class = "toctree-l1" > < a class = "reference internal" href = "../UsersGuide/index.html" > Coriolis User’ s Guide< / a > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "../UsersGuide/LicenseCredits.html" > Credits & License< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../UsersGuide/Releases.html" > Release Notes< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Releases.html#release-1-0-1475" > Release 1.0.1475< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Releases.html#release-1-0-1963" > Release 1.0.1963< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Releases.html#release-1-0-2049" > Release 1.0.2049< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Releases.html#release-v2-0-1" > Release v2.0.1< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Releases.html#release-v2-1" > Release v2.1< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Releases.html#release-v2-2" > < strong > Release v2.2< / strong > < / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../UsersGuide/Installation.html" > Installation< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Installation.html#fixed-directory-tree" > Fixed Directory Tree< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Installation.html#building-coriolis" > Building Coriolis< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/Installation.html#building-the-devel-branch" > Building the Devel Branch< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/Installation.html#additionnal-requirement-under-macos" > Additionnal Requirement under < span class = "sc" > MacOS< / span > < / a > < / li >
< / ul >
< / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Installation.html#packaging-coriolis" > Packaging Coriolis< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Installation.html#hooking-up-into-alliance" > Hooking up into < span class = "sc" > Alliance< / span > < / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Installation.html#setting-up-the-environment-coriolisenv-py" > Setting up the Environment (coriolisEnv.py)< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../UsersGuide/Configuration.html" > Coriolis Configuration & Initialisation< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Configuration.html#general-software-architecture" > General Software Architecture< / a > < / li >
2017-11-17 05:04:33 -06:00
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Configuration.html#first-stage-technology-selection" > First Stage: Technology Selection< / a > < / li >
2017-07-15 10:35:02 -05:00
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Configuration.html#second-stage-technology-configuration-loading" > Second Stage: Technology Configuration Loading< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Configuration.html#configuration-helpers" > Configuration Helpers< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/Configuration.html#alliance-helper" > < span class = "sc" > Alliance< / span > Helper< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/Configuration.html#tools-configuration-helpers" > Tools Configuration Helpers< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Configuration.html#hacking-the-configuration-files" > Hacking the Configuration Files< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html" > CGT - The Graphical Interface< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#viewer-tools" > Viewer & Tools< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#stratus-netlist-capture" > < span class = "sc" > Stratus< / span > Netlist Capture< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#the-hurricane-data-base" > The < span class = "sc" > Hurricane< / span > Data-Base< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#synthetizing-and-loading-a-design" > Synthetizing and loading a design< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#etesian-placer" > Etesian – Placer< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#knik-global-router" > Knik – Global Router< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#kite-detailed-router" > Kite – Detailed Router< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#executing-python-scripts-in-cgt" > Executing Python Scripts in Cgt< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#printing-snapshots" > Printing & Snapshots< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#memento-of-shortcuts-in-graphic-mode" > Memento of Shortcuts in Graphic Mode< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#cgt-command-line-options" > Cgt Command Line Options< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#miscellaneous-settings" > Miscellaneous Settings< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#the-controller" > The Controller< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#the-look-tab" > The Look Tab< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#the-filter-tab" > The Filter Tab< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#the-layers-go-tab" > The Layers& Go Tab< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#the-netlist-tab" > The Netlist Tab< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#the-selection-tab" > The Selection Tab< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#the-inspector-tab" > The Inspector Tab< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#the-settings-tab" > The Settings Tab< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../UsersGuide/ScriptsPlugins.html" > Python Interface for < span class = "sc" > Hurricane< / span > / < span class = "sc" > Coriolis< / span > < / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/ScriptsPlugins.html#plugins" > Plugins< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ScriptsPlugins.html#chip-placement" > Chip Placement< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ScriptsPlugins.html#clock-tree" > Clock Tree< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ScriptsPlugins.html#recursive-save-rsave" > Recursive-Save (RSave)< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/ScriptsPlugins.html#a-simple-example-am2901" > A Simple Example: AM2901< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
2018-03-18 17:28:49 -05:00
< li class = "toctree-l1" > < a class = "reference internal" href = "../PythonTutorial/index.html" > Hurricane+Python Tutorial< / a > < ul >
Validating channel routing mode (two metals) on SNX.
* New: In Hurricane::Entity, add an id counter limit and a memory size
limit. The two limits are checked only when a new Entity object is
created. This should help avoiding massive memory links.
* New: In CRL Core, add a "crlcore.groundName" and a "crlcore.powerName"
parameter to specify the name of the ground/power signals to be
created if they are missing in a Cell. For Alliance libraries it
would be "vss" & "vdd" (default values), but for real technologies,
it is often "gnd!" & "vdd!".
The Blif parser is modificated to make use of it.
* Bug: In AnabaticEngine::unify(), set the resulting unified segment in
the center of the GCells common side. Gcells under a segment are
found by using the edge that cover the segment axis. When we have
a "bend" GCell stack and the axis is wrong, they could be ommited.
This was causing deleted segments to be not removed from some
Edges, then core dump.
* Change: In Anabatic::AutoSegment::create(), smarter choosing of the
reference contact, select the fixed or terminal one instead of
always the source one.
* New: In Anabatic::Edge::isEnding(), new function to check if a
segment going through an Edge is starting/ending in either source
or target GCell of the edge (active only when running in channel
mode).
* New: In Anabatic::Edge::add(), a segment takes part in the occupancy
only if it is not ending in either source or target (channel mode
only). The occupancy due to terminal is pre-computed in Katana.
* New: In Anabatic::Edge::ripup(), in channel mode, never ripup a
segment which is ending in either source or target (we *have* to
access this edge to connect to the terminal).
* Bug: In Anabatic::GCell::hcut() and vcut(), force the update of
the Edge which is on the side that will get splitted by the cut.
It's capacity will be reduced to it must be updated.
* Change: In Anabatic::GCell::updateGContacts() add a flag to conditionnally
update horizontals or verticals only. We may require only a partial
update when resizing the GCell in only one direction.
This, again, related to the fact that we compute the GCells under
a segment thanks to it's axis position, so we need to be very careful
when modificating axis.
* Change: In Katana::Block::resizeChannels(), only update GContact vertical
position. Do not disturb X positions of segments.
* Bug: In Katana::GlobalRoute::DigitalDistance, in channel mode, some
Edges can have a zero capacity, but still be reachable if the net has
a terminal in either source or target. Look for this case and return
a distance of zero instead of "unreachable". This was causing the
global routing not to complete in channel mode.
For computing the edge distance, makes the vertical edges much more
long (10 times) than the horizontal ones as the vertical capacity is
very limited. Hard coded for now, should make it a parameter in the
future.
* Change: In KatanaEngine::annotateGlobalGraph(), decrease the capacity
of edges with reserveCapacity for each terminal inside a GCell.
Both north and south edges are decreased as we a terminal will
block both north and south edges.
As a counterpart, the Edge capacity is not decreased when the
global router connect to a terminal.
* Change: In Katana::RoutingEvent::revalidate(), when in repair stage,
do not expand the slack for horizontal segments in channel mode.
So they may not overlap the standard cell row.
* Bug: In Stratus documentation, do not use the french option in babel,
the documentation is in english!
* New: In Documentation, added Hurricane/Python tutorial, part for drawing
layout.
2018-03-16 10:20:04 -05:00
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonTutorial/Introduction.html" > 1. Introduction< / a > < ul >
2018-03-18 17:28:49 -05:00
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Introduction.html#terminology" > 1.1 Terminology< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Introduction.html#generalities" > 1.2 Generalities< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Introduction.html#various-kinds-of-constructors" > 1.3 Various Kinds of Constructors< / a > < / li >
Validating channel routing mode (two metals) on SNX.
* New: In Hurricane::Entity, add an id counter limit and a memory size
limit. The two limits are checked only when a new Entity object is
created. This should help avoiding massive memory links.
* New: In CRL Core, add a "crlcore.groundName" and a "crlcore.powerName"
parameter to specify the name of the ground/power signals to be
created if they are missing in a Cell. For Alliance libraries it
would be "vss" & "vdd" (default values), but for real technologies,
it is often "gnd!" & "vdd!".
The Blif parser is modificated to make use of it.
* Bug: In AnabaticEngine::unify(), set the resulting unified segment in
the center of the GCells common side. Gcells under a segment are
found by using the edge that cover the segment axis. When we have
a "bend" GCell stack and the axis is wrong, they could be ommited.
This was causing deleted segments to be not removed from some
Edges, then core dump.
* Change: In Anabatic::AutoSegment::create(), smarter choosing of the
reference contact, select the fixed or terminal one instead of
always the source one.
* New: In Anabatic::Edge::isEnding(), new function to check if a
segment going through an Edge is starting/ending in either source
or target GCell of the edge (active only when running in channel
mode).
* New: In Anabatic::Edge::add(), a segment takes part in the occupancy
only if it is not ending in either source or target (channel mode
only). The occupancy due to terminal is pre-computed in Katana.
* New: In Anabatic::Edge::ripup(), in channel mode, never ripup a
segment which is ending in either source or target (we *have* to
access this edge to connect to the terminal).
* Bug: In Anabatic::GCell::hcut() and vcut(), force the update of
the Edge which is on the side that will get splitted by the cut.
It's capacity will be reduced to it must be updated.
* Change: In Anabatic::GCell::updateGContacts() add a flag to conditionnally
update horizontals or verticals only. We may require only a partial
update when resizing the GCell in only one direction.
This, again, related to the fact that we compute the GCells under
a segment thanks to it's axis position, so we need to be very careful
when modificating axis.
* Change: In Katana::Block::resizeChannels(), only update GContact vertical
position. Do not disturb X positions of segments.
* Bug: In Katana::GlobalRoute::DigitalDistance, in channel mode, some
Edges can have a zero capacity, but still be reachable if the net has
a terminal in either source or target. Look for this case and return
a distance of zero instead of "unreachable". This was causing the
global routing not to complete in channel mode.
For computing the edge distance, makes the vertical edges much more
long (10 times) than the horizontal ones as the vertical capacity is
very limited. Hard coded for now, should make it a parameter in the
future.
* Change: In KatanaEngine::annotateGlobalGraph(), decrease the capacity
of edges with reserveCapacity for each terminal inside a GCell.
Both north and south edges are decreased as we a terminal will
block both north and south edges.
As a counterpart, the Edge capacity is not decreased when the
global router connect to a terminal.
* Change: In Katana::RoutingEvent::revalidate(), when in repair stage,
do not expand the slack for horizontal segments in channel mode.
So they may not overlap the standard cell row.
* Bug: In Stratus documentation, do not use the french option in babel,
the documentation is in english!
* New: In Documentation, added Hurricane/Python tutorial, part for drawing
layout.
2018-03-16 10:20:04 -05:00
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonTutorial/Environment.html" > 2. Setting up the Environment< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Environment.html#setting-up-the-pathes" > 2.1 Setting up the Pathes< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Environment.html#user-s-configurations-file" > 2.2 User’ s Configurations File< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/Environment.html#the-techno-py-file" > 2.2.1 The < span class = "cb" > techno.py< / span > File< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/Environment.html#the-settings-py-file" > 2.2.2 The < span class = "cb" > settings.py< / span > File< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
2018-03-18 17:28:49 -05:00
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html" > 3. Making a Standard Cell – Layout< / a > < ul >
Validating channel routing mode (two metals) on SNX.
* New: In Hurricane::Entity, add an id counter limit and a memory size
limit. The two limits are checked only when a new Entity object is
created. This should help avoiding massive memory links.
* New: In CRL Core, add a "crlcore.groundName" and a "crlcore.powerName"
parameter to specify the name of the ground/power signals to be
created if they are missing in a Cell. For Alliance libraries it
would be "vss" & "vdd" (default values), but for real technologies,
it is often "gnd!" & "vdd!".
The Blif parser is modificated to make use of it.
* Bug: In AnabaticEngine::unify(), set the resulting unified segment in
the center of the GCells common side. Gcells under a segment are
found by using the edge that cover the segment axis. When we have
a "bend" GCell stack and the axis is wrong, they could be ommited.
This was causing deleted segments to be not removed from some
Edges, then core dump.
* Change: In Anabatic::AutoSegment::create(), smarter choosing of the
reference contact, select the fixed or terminal one instead of
always the source one.
* New: In Anabatic::Edge::isEnding(), new function to check if a
segment going through an Edge is starting/ending in either source
or target GCell of the edge (active only when running in channel
mode).
* New: In Anabatic::Edge::add(), a segment takes part in the occupancy
only if it is not ending in either source or target (channel mode
only). The occupancy due to terminal is pre-computed in Katana.
* New: In Anabatic::Edge::ripup(), in channel mode, never ripup a
segment which is ending in either source or target (we *have* to
access this edge to connect to the terminal).
* Bug: In Anabatic::GCell::hcut() and vcut(), force the update of
the Edge which is on the side that will get splitted by the cut.
It's capacity will be reduced to it must be updated.
* Change: In Anabatic::GCell::updateGContacts() add a flag to conditionnally
update horizontals or verticals only. We may require only a partial
update when resizing the GCell in only one direction.
This, again, related to the fact that we compute the GCells under
a segment thanks to it's axis position, so we need to be very careful
when modificating axis.
* Change: In Katana::Block::resizeChannels(), only update GContact vertical
position. Do not disturb X positions of segments.
* Bug: In Katana::GlobalRoute::DigitalDistance, in channel mode, some
Edges can have a zero capacity, but still be reachable if the net has
a terminal in either source or target. Look for this case and return
a distance of zero instead of "unreachable". This was causing the
global routing not to complete in channel mode.
For computing the edge distance, makes the vertical edges much more
long (10 times) than the horizontal ones as the vertical capacity is
very limited. Hard coded for now, should make it a parameter in the
future.
* Change: In KatanaEngine::annotateGlobalGraph(), decrease the capacity
of edges with reserveCapacity for each terminal inside a GCell.
Both north and south edges are decreased as we a terminal will
block both north and south edges.
As a counterpart, the Edge capacity is not decreased when the
global router connect to a terminal.
* Change: In Katana::RoutingEvent::revalidate(), when in repair stage,
do not expand the slack for horizontal segments in channel mode.
So they may not overlap the standard cell row.
* Bug: In Stratus documentation, do not use the french option in babel,
the documentation is in english!
* New: In Documentation, added Hurricane/Python tutorial, part for drawing
layout.
2018-03-16 10:20:04 -05:00
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#the-allianceframework-crl-core" > 3.1 The AllianceFramework (CRL Core)< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#session-mechanism-hurricane" > 3.2 Session Mechanism (Hurricane)< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#creating-a-new-cell-crl-core" > 3.3 Creating a new Cell (CRL Core)< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#the-dbu-measurement-unit" > 3.4 The DbU Measurement Unit< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#setting-up-the-abutment-box" > 3.5 Setting up the Abutment Box< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#adding-nets-and-components" > 3.6 Adding Nets and Components< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#getting-a-layer" > 3.6.1 Getting a Layer< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#creating-a-net" > 3.6.2 Creating a Net< / a > < / li >
2018-03-18 17:28:49 -05:00
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#id1" > 3.6.3 Creating a Component< / a > < / li >
Validating channel routing mode (two metals) on SNX.
* New: In Hurricane::Entity, add an id counter limit and a memory size
limit. The two limits are checked only when a new Entity object is
created. This should help avoiding massive memory links.
* New: In CRL Core, add a "crlcore.groundName" and a "crlcore.powerName"
parameter to specify the name of the ground/power signals to be
created if they are missing in a Cell. For Alliance libraries it
would be "vss" & "vdd" (default values), but for real technologies,
it is often "gnd!" & "vdd!".
The Blif parser is modificated to make use of it.
* Bug: In AnabaticEngine::unify(), set the resulting unified segment in
the center of the GCells common side. Gcells under a segment are
found by using the edge that cover the segment axis. When we have
a "bend" GCell stack and the axis is wrong, they could be ommited.
This was causing deleted segments to be not removed from some
Edges, then core dump.
* Change: In Anabatic::AutoSegment::create(), smarter choosing of the
reference contact, select the fixed or terminal one instead of
always the source one.
* New: In Anabatic::Edge::isEnding(), new function to check if a
segment going through an Edge is starting/ending in either source
or target GCell of the edge (active only when running in channel
mode).
* New: In Anabatic::Edge::add(), a segment takes part in the occupancy
only if it is not ending in either source or target (channel mode
only). The occupancy due to terminal is pre-computed in Katana.
* New: In Anabatic::Edge::ripup(), in channel mode, never ripup a
segment which is ending in either source or target (we *have* to
access this edge to connect to the terminal).
* Bug: In Anabatic::GCell::hcut() and vcut(), force the update of
the Edge which is on the side that will get splitted by the cut.
It's capacity will be reduced to it must be updated.
* Change: In Anabatic::GCell::updateGContacts() add a flag to conditionnally
update horizontals or verticals only. We may require only a partial
update when resizing the GCell in only one direction.
This, again, related to the fact that we compute the GCells under
a segment thanks to it's axis position, so we need to be very careful
when modificating axis.
* Change: In Katana::Block::resizeChannels(), only update GContact vertical
position. Do not disturb X positions of segments.
* Bug: In Katana::GlobalRoute::DigitalDistance, in channel mode, some
Edges can have a zero capacity, but still be reachable if the net has
a terminal in either source or target. Look for this case and return
a distance of zero instead of "unreachable". This was causing the
global routing not to complete in channel mode.
For computing the edge distance, makes the vertical edges much more
long (10 times) than the horizontal ones as the vertical capacity is
very limited. Hard coded for now, should make it a parameter in the
future.
* Change: In KatanaEngine::annotateGlobalGraph(), decrease the capacity
of edges with reserveCapacity for each terminal inside a GCell.
Both north and south edges are decreased as we a terminal will
block both north and south edges.
As a counterpart, the Edge capacity is not decreased when the
global router connect to a terminal.
* Change: In Katana::RoutingEvent::revalidate(), when in repair stage,
do not expand the slack for horizontal segments in channel mode.
So they may not overlap the standard cell row.
* Bug: In Stratus documentation, do not use the french option in babel,
the documentation is in english!
* New: In Documentation, added Hurricane/Python tutorial, part for drawing
layout.
2018-03-16 10:20:04 -05:00
< / ul >
< / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#saving-to-disk-crl-core" > 3.7 Saving to Disk (CRL Core)< / a > < / li >
2018-03-18 17:28:49 -05:00
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/CellNetComponent.html#the-complete-example-file" > 3.8 The Complete Example File< / a > < / li >
Validating channel routing mode (two metals) on SNX.
* New: In Hurricane::Entity, add an id counter limit and a memory size
limit. The two limits are checked only when a new Entity object is
created. This should help avoiding massive memory links.
* New: In CRL Core, add a "crlcore.groundName" and a "crlcore.powerName"
parameter to specify the name of the ground/power signals to be
created if they are missing in a Cell. For Alliance libraries it
would be "vss" & "vdd" (default values), but for real technologies,
it is often "gnd!" & "vdd!".
The Blif parser is modificated to make use of it.
* Bug: In AnabaticEngine::unify(), set the resulting unified segment in
the center of the GCells common side. Gcells under a segment are
found by using the edge that cover the segment axis. When we have
a "bend" GCell stack and the axis is wrong, they could be ommited.
This was causing deleted segments to be not removed from some
Edges, then core dump.
* Change: In Anabatic::AutoSegment::create(), smarter choosing of the
reference contact, select the fixed or terminal one instead of
always the source one.
* New: In Anabatic::Edge::isEnding(), new function to check if a
segment going through an Edge is starting/ending in either source
or target GCell of the edge (active only when running in channel
mode).
* New: In Anabatic::Edge::add(), a segment takes part in the occupancy
only if it is not ending in either source or target (channel mode
only). The occupancy due to terminal is pre-computed in Katana.
* New: In Anabatic::Edge::ripup(), in channel mode, never ripup a
segment which is ending in either source or target (we *have* to
access this edge to connect to the terminal).
* Bug: In Anabatic::GCell::hcut() and vcut(), force the update of
the Edge which is on the side that will get splitted by the cut.
It's capacity will be reduced to it must be updated.
* Change: In Anabatic::GCell::updateGContacts() add a flag to conditionnally
update horizontals or verticals only. We may require only a partial
update when resizing the GCell in only one direction.
This, again, related to the fact that we compute the GCells under
a segment thanks to it's axis position, so we need to be very careful
when modificating axis.
* Change: In Katana::Block::resizeChannels(), only update GContact vertical
position. Do not disturb X positions of segments.
* Bug: In Katana::GlobalRoute::DigitalDistance, in channel mode, some
Edges can have a zero capacity, but still be reachable if the net has
a terminal in either source or target. Look for this case and return
a distance of zero instead of "unreachable". This was causing the
global routing not to complete in channel mode.
For computing the edge distance, makes the vertical edges much more
long (10 times) than the horizontal ones as the vertical capacity is
very limited. Hard coded for now, should make it a parameter in the
future.
* Change: In KatanaEngine::annotateGlobalGraph(), decrease the capacity
of edges with reserveCapacity for each terminal inside a GCell.
Both north and south edges are decreased as we a terminal will
block both north and south edges.
As a counterpart, the Edge capacity is not decreased when the
global router connect to a terminal.
* Change: In Katana::RoutingEvent::revalidate(), when in repair stage,
do not expand the slack for horizontal segments in channel mode.
So they may not overlap the standard cell row.
* Bug: In Stratus documentation, do not use the french option in babel,
the documentation is in english!
* New: In Documentation, added Hurricane/Python tutorial, part for drawing
layout.
2018-03-16 10:20:04 -05:00
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonTutorial/Collections.html" > 4. Manipulating Cells, Nets and Components< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Collections.html#hurricane-collections" > 4.1 Hurricane Collections< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/Collections.html#restrictions-about-using-collections" > 4.1.1 Restrictions about using Collections< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Collections.html#loading-a-cell-with-allianceframework" > 4.2 Loading a Cell with AllianceFramework< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonTutorial/CgtScript.html" > 5. Make a script runnable through < span class = "cb" > cgt< / span > < / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/CgtScript.html#using-breakpoints" > 5.1 Using Breakpoints< / a > < / li >
< / ul >
< / li >
2018-03-18 17:28:49 -05:00
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html" > 6. Making a hierarchical Cell – Netlist< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html#creating-an-instance" > 6.1 Creating an Instance< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html#id1" > 6.2 Creating Nets and connecting to Instances< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html#power-supplies-special-case" > 6.3 Power supplies special case< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html#creating-the-physical-view-of-a-cell-netlist" > 6.4 Creating the physical view of a Cell netlist< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html#id2" > 6.4.1 Transformation< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html#placing-an-instance" > 6.4.2 Placing an Instance< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html#nets-from-plugs-to-routingpads" > 6.4.3 Nets – From Plugs to RoutingPads< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html#nets-regular-wiring" > 6.4.4 Nets – Regular wiring< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/Netlist.html#the-complete-example-file" > 6.5 The Complete Example File< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonTutorial/RealDesigns.html" > 7. Working in real mode< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/RealDesigns.html#loading-a-lef-file" > 7.1 Loading a < span class = "sc" > lef< / span > file< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/RealDesigns.html#loading-a-blif-file-yosys" > 7.2 Loading a < span class = "sc" > blif< / span > file – < span class = "sc" > Yosys< / span > < / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonTutorial/ToolEngines.html" > 8. Tool Engines (CRL Core)< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/ToolEngines.html#placer-etesian" > 8.1 Placer – Etesian< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/ToolEngines.html#router-katana" > 8.1 Router – Katana< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/ToolEngines.html#a-complete-example" > 8.2 A Complete Example< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonTutorial/AdvancedTopics.html" > 9. Advanced Topics< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/AdvancedTopics.html#id1" > 9.1 Occurrence< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/AdvancedTopics.html#id2" > 9.2 RoutingPads< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/AdvancedTopics.html#hypernets" > 9.3 HyperNets< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonTutorial/AdvancedTopics.html#miscellaeous-trans-hierarchical-functions" > 9.4 Miscellaeous trans-hierarchical functions< / a > < / li >
< / ul >
< / li >
Validating channel routing mode (two metals) on SNX.
* New: In Hurricane::Entity, add an id counter limit and a memory size
limit. The two limits are checked only when a new Entity object is
created. This should help avoiding massive memory links.
* New: In CRL Core, add a "crlcore.groundName" and a "crlcore.powerName"
parameter to specify the name of the ground/power signals to be
created if they are missing in a Cell. For Alliance libraries it
would be "vss" & "vdd" (default values), but for real technologies,
it is often "gnd!" & "vdd!".
The Blif parser is modificated to make use of it.
* Bug: In AnabaticEngine::unify(), set the resulting unified segment in
the center of the GCells common side. Gcells under a segment are
found by using the edge that cover the segment axis. When we have
a "bend" GCell stack and the axis is wrong, they could be ommited.
This was causing deleted segments to be not removed from some
Edges, then core dump.
* Change: In Anabatic::AutoSegment::create(), smarter choosing of the
reference contact, select the fixed or terminal one instead of
always the source one.
* New: In Anabatic::Edge::isEnding(), new function to check if a
segment going through an Edge is starting/ending in either source
or target GCell of the edge (active only when running in channel
mode).
* New: In Anabatic::Edge::add(), a segment takes part in the occupancy
only if it is not ending in either source or target (channel mode
only). The occupancy due to terminal is pre-computed in Katana.
* New: In Anabatic::Edge::ripup(), in channel mode, never ripup a
segment which is ending in either source or target (we *have* to
access this edge to connect to the terminal).
* Bug: In Anabatic::GCell::hcut() and vcut(), force the update of
the Edge which is on the side that will get splitted by the cut.
It's capacity will be reduced to it must be updated.
* Change: In Anabatic::GCell::updateGContacts() add a flag to conditionnally
update horizontals or verticals only. We may require only a partial
update when resizing the GCell in only one direction.
This, again, related to the fact that we compute the GCells under
a segment thanks to it's axis position, so we need to be very careful
when modificating axis.
* Change: In Katana::Block::resizeChannels(), only update GContact vertical
position. Do not disturb X positions of segments.
* Bug: In Katana::GlobalRoute::DigitalDistance, in channel mode, some
Edges can have a zero capacity, but still be reachable if the net has
a terminal in either source or target. Look for this case and return
a distance of zero instead of "unreachable". This was causing the
global routing not to complete in channel mode.
For computing the edge distance, makes the vertical edges much more
long (10 times) than the horizontal ones as the vertical capacity is
very limited. Hard coded for now, should make it a parameter in the
future.
* Change: In KatanaEngine::annotateGlobalGraph(), decrease the capacity
of edges with reserveCapacity for each terminal inside a GCell.
Both north and south edges are decreased as we a terminal will
block both north and south edges.
As a counterpart, the Edge capacity is not decreased when the
global router connect to a terminal.
* Change: In Katana::RoutingEvent::revalidate(), when in repair stage,
do not expand the slack for horizontal segments in channel mode.
So they may not overlap the standard cell row.
* Bug: In Stratus documentation, do not use the french option in babel,
the documentation is in english!
* New: In Documentation, added Hurricane/Python tutorial, part for drawing
layout.
2018-03-16 10:20:04 -05:00
< / ul >
< / li >
2017-07-15 10:35:02 -05:00
< li class = "toctree-l1" > < a class = "reference internal" href = "../Stratus/Stratus.html" > Stratus Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../DpGen/DpGen.html" > DpGen Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../Patterns/Patterns.html" > Patterns Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../Hurricane/Hurricane.html" > Hurricane Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../Viewer/Viewer.html" > Viewer Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../CrlCore/CrlCore.html" > CRL Core Reference< / a > < / li >
2017-07-17 12:12:18 -05:00
< li class = "toctree-l1" > < a class = "reference internal" href = "../Katabatic/Katabatic.html" > Katabatic Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../Kite/Kite.html" > Kite Reference< / a > < / li >
2017-07-15 10:35:02 -05:00
< li class = "toctree-l1" > < a class = "reference internal" href = "../Unicorn/Unicorn.html" > Unicorn Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../PythonCpp/index.html" > Hurricane Python/C++ API Tutorial< / a > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonCpp/Introduction.html" > 1. Introduction< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/Introduction.html#first-a-disclaimer" > 1.1 First, A Disclaimer< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/Introduction.html#about-technical-choices" > 1.2 About Technical Choices< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/Introduction.html#botched-design" > 1.3 Botched Design< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonCpp/Configuration.html" > 2. Basic File Structure and CMake configuration< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonCpp/DBoStandalone.html" > 3. Case 1 - DBo Derived, Standalone< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoStandalone.html#class-associated-header-file" > 3.1 Class Associated Header File< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoStandalone.html#class-associated-file" > 3.2 Class Associated File< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonCpp/DBoStandalone.html#head-of-the-file" > 3.2.1 Head of the file< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonCpp/DBoStandalone.html#the-python-module-part" > 3.2.2 The Python Module Part< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonCpp/DBoStandalone.html#python-type-linking" > 3.2.3 Python Type Linking< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../PythonCpp/DBoStandalone.html#the-shared-library-part" > 3.2.4 The Shared Library Part< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoStandalone.html#python-module-c-namespace" > 3.3 Python Module (C++ namespace)< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonCpp/DBoHierarchy.html" > 4. Case 2 - Hierarchy of DBo Derived Classes< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoHierarchy.html#base-class-header" > 4.1 Base Class Header< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoHierarchy.html#base-class-file" > 4.2 Base Class File< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoHierarchy.html#intermediate-class-header" > 4.3 Intermediate Class Header< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoHierarchy.html#intermediate-class-file" > 4.4 Intermediate Class File< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoHierarchy.html#terminal-class-header" > 4.5 Terminal Class Header< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoHierarchy.html#terminal-class-file" > 4.6 Terminal Class File< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/DBoHierarchy.html#python-module" > 4.8 Python Module< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonCpp/NonDBo.html" > 5. Case 3 - Non-DBo Standalone Classe< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/NonDBo.html#class-header" > 5.1 Class Header< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/NonDBo.html#class-file" > 5.2 Class File< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../PythonCpp/NonDBo.html#id1" > 5.2 Class File< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonCpp/DbU.html" > 6. Encapsulating DbU< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../PythonCpp/Name.html" > 7. No C++ Hurricane::Name encapsulation< / a > < / li >
< / ul >
< / li >
2018-05-04 17:23:44 -05:00
< li class = "toctree-l1 current" > < a class = "reference internal" href = "index.html" > RDS – Symbolic to Real Conversion in Alliance< / a > < ul class = "current" >
2017-10-30 09:33:37 -05:00
< li class = "toctree-l2 current" > < a class = "current reference internal" href = "#" > Symbolic Layout< / a > < ul >
2017-07-15 10:35:02 -05:00
< li class = "toctree-l3" > < a class = "reference internal" href = "#symbolic-components" > Symbolic Components< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "#symbolic-segments" > Symbolic Segments< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "#the-rds-file" > The RDS File< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "#physical-grid-lambda-value" > Physical Grid & Lambda Value< / a > < / li >
2017-10-30 09:33:37 -05:00
< li class = "toctree-l3" > < a class = "reference internal" href = "#the-mbk-to-rds-segment-table" > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_SEGMENT< / span > < / code > table< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "#the-mbk-to-rds-via-table" > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_VIA< / span > < / code > table< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "#the-mbk-to-rds-bigvia-hole-table" > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_BIGVIA_HOLE< / span > < / code > table< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "#the-mbk-to-rds-bigvia-metal-table" > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_BIGVIA_METAL< / span > < / code > table< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "#the-mbk-wiresetting-table" > The < code class = "docutils literal" > < span class = "pre" > MBK_WIRESETTING< / span > < / code > table< / a > < / li >
2017-07-15 10:35:02 -05:00
< / ul >
< / li >
< / ul >
< / li >
2017-11-17 05:04:33 -06:00
< li class = "toctree-l1" > < a class = "reference internal" href = "../lefapi/lefapi.html" > LEF API Reference< / a > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "../lefapi/lefapi.html#implementation-notes" > Implementation Notes< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../lefapi/lefapi.html#understanding-units" > Understanding Units< / a > < / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../lefapi/lefapi.html#callback-calling-order" > Callback Calling Order< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
2017-10-30 09:33:37 -05:00
< li class = "toctree-l1" > < a class = "reference internal" href = "../defapi/defapi.html" > DEF API Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../lefdef/lefdef.html" > LEF/DEF Language Reference< / a > < / li >
2017-07-15 10:35:02 -05:00
< / ul >
< / div >
< / nav >
< section data-toggle = "wy-nav-shift" class = "wy-nav-content-wrap" >
< nav class = "wy-nav-top" role = "navigation" aria-label = "top navigation" >
< i data-toggle = "wy-nav-top" class = "fa fa-bars" > < / i >
< a href = "../index.html" > Coriolis< / a >
< / nav >
< div class = "wy-nav-content" >
< div class = "rst-content" >
< div role = "navigation" aria-label = "breadcrumbs navigation" >
< ul class = "wy-breadcrumbs" >
< li > < a href = "../index.html" > Docs< / a > » < / li >
2018-05-04 17:23:44 -05:00
< li > < a href = "index.html" > RDS – Symbolic to Real Conversion in Alliance< / a > » < / li >
2017-07-15 10:35:02 -05:00
< li > Symbolic Layout< / li >
< li class = "wy-breadcrumbs-aside" >
< / li >
< / ul >
< hr / >
< / div >
< div role = "main" class = "document" >
< p > < / p >
< div class = "section" id = "symbolic-layout" >
< h1 > Symbolic Layout< a class = "headerlink" href = "#symbolic-layout" title = "Permalink to this headline" > ¶< / a > < / h1 >
< div class = "section" id = "symbolic-components" >
< h2 > Symbolic Components< a class = "headerlink" href = "#symbolic-components" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > A symbolic layout is, in practice, made of only of three objects:< / p >
< table border = "1" class = "docutils" >
< colgroup >
< col width = "30%" / >
< col width = "13%" / >
< col width = "57%" / >
< / colgroup >
< thead valign = "bottom" >
< tr class = "row-odd" > < th class = "head" > Object< / th >
< th class = "head" > < span class = "sc" > mbk< / span > < / th >
< th class = "head" > Explanation< / th >
< / tr >
< / thead >
< tbody valign = "top" >
< tr class = "row-even" > < td > Segments< / td >
2017-10-30 09:33:37 -05:00
< td > < code class = "docutils literal" > < span class = "pre" > phseg< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Oriented segments with a width and an orientation.< / td >
< / tr >
< tr class = "row-odd" > < td > VIAs & contacts< / td >
2017-10-30 09:33:37 -05:00
< td > < code class = "docutils literal" > < span class = "pre" > phvia< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Boils down to just a point.< / td >
< / tr >
< tr class = "row-even" > < td > Big VIAs & Big Contacts< / td >
2017-10-30 09:33:37 -05:00
< td > < code class = "docutils literal" > < span class = "pre" > phvia< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Point with a width and a height
That is a rectangle of width by height centered
on the VIA coordinates.< / td >
< / tr >
< / tbody >
< / table >
< p > Each of thoses objects is associated to a < em > symbolic layer< / em > which will
control how the object is translated in many < em > real rectangles< / em > .< / p >
< table border = "1" class = "docutils" >
< colgroup >
< col width = "11%" / >
< col width = "19%" / >
< col width = "16%" / >
< col width = "54%" / >
< / colgroup >
< thead valign = "bottom" >
< tr class = "row-odd" > < th class = "head" > < span class = "sc" > mbk< / span > < / th >
< th class = "head" > Layer Name< / th >
< th class = "head" > Usable By< / th >
< th class = "head" > Usage< / th >
< / tr >
< / thead >
< tbody valign = "top" >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td rowspan = "12" > < code class = "docutils literal" > < span class = "pre" > phseg< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > < span class = "sc" > nwell< / span > < / td >
< td > Segment< / td >
< td > N Well< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > PWELL< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > P Well< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td > < code class = "docutils literal" > < span class = "pre" > NDIF< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > N Diffusion< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > PDIF< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > P Diffusion< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td > < code class = "docutils literal" > < span class = "pre" > NTIE< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > N Tie< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > PTIE< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > P Tie< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td > < code class = "docutils literal" > < span class = "pre" > NTRANS< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > N transistor, in < span class = "sc" > Alliance< / span > , a transistor
is represented as a segment (it’ s grid).< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > PTRANS< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > P transistor< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td > < code class = "docutils literal" > < span class = "pre" > POLY< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > Polysilicium< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > ALUx< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > Metal level < em > x< / em > < / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td > < code class = "docutils literal" > < span class = "pre" > CALUx< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > Metal level < em > x< / em > , that can be used by the
upper hierarchical level as a connector.
From the layout point of view it is the
2017-10-30 09:33:37 -05:00
same as < code class = "docutils literal" > < span class = "pre" > ALUx< / span > < / code > .< / td >
2017-07-15 10:35:02 -05:00
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > TALUx< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > Segment< / td >
< td > Blockage for metal level < em > x< / em > . Will
diseappear in the real layout as it is an
information for the P& R tools only.< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td rowspan = "9" > < code class = "docutils literal" > < span class = "pre" > phvia< / span > < / code > < / td >
< td > < code class = "docutils literal" > < span class = "pre" > CONT_BODY_N< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > VIA, BIGVIA< / td >
< td > Contact to N Well< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > CONT_BODY_P< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > VIA, BIGVIA< / td >
< td > Contact to P Well< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td > < code class = "docutils literal" > < span class = "pre" > CONT_DIF_N< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > VIA, BIGVIA< / td >
< td > Contact to N Diffusion< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > CONT_DIF_P< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > VIA, BIGVIA< / td >
< td > Contact to P Diffusion< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td > < code class = "docutils literal" > < span class = "pre" > CONT_POLY< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > VIA, BIGVIA< / td >
< td > Contact to polysilicium< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > CONT_VIA< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > VIA, BIGVIA< / td >
< td > Contact between metal1 and metal2< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td > < code class = "docutils literal" > < span class = "pre" > CONT_VIAx< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > VIA, BIGVIA< / td >
< td > Contact between metal < em > x< / em > and metal < em > x+1< / em > .
The index is the the one of the bottom
metal of the VIA.< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-odd" > < td > < code class = "docutils literal" > < span class = "pre" > C_X_N< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > VIA< / td >
< td > N transistor corner, to build transistor
bend. Not used anymore in recent technos< / td >
< / tr >
2017-10-30 09:33:37 -05:00
< tr class = "row-even" > < td > < code class = "docutils literal" > < span class = "pre" > C_X_P< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< td > VIA< / td >
< td > P transistor corner, to build transistor
bend. Not used anymore in recent technos< / td >
< / tr >
< / tbody >
< / table >
< div class = "admonition note" >
< p class = "first admonition-title" > Note< / p >
< p class = "last" > Not all association of object and symbolic layers are meaningful.
2017-10-30 09:33:37 -05:00
For instance you cannot associate a contact to a < code class = "docutils literal" > < span class = "pre" > NTRANS< / span > < / code > layer.< / p >
2017-07-15 10:35:02 -05:00
< / div >
< div class = "admonition note" >
< p class = "first admonition-title" > Note< / p >
2017-10-30 09:33:37 -05:00
< p class = "last" > The symbolic layer associated with blockages is prefixed by a < code class = "docutils literal" > < span class = "pre" > T< / span > < / code > ,
2017-07-15 10:35:02 -05:00
for < em > transparency< / em > , which may seems silly. It is for historical reasons,
it started as a true transparency, but at some point we had to invert
the meaning (blockage) with the rise of over-the-cell routing, but the
name stuck...< / p >
< / div >
< / div >
< div class = "section" id = "symbolic-segments" >
< h2 > Symbolic Segments< a class = "headerlink" href = "#symbolic-segments" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > In < span class = "sc" > Alliance< / span > , segments are oriented (up, down, left, right). This disambiguate
2017-10-30 09:33:37 -05:00
the left or right side when using the < code class = "docutils literal" > < span class = "pre" > LCW< / span > < / code > and < code class = "docutils literal" > < span class = "pre" > RCW< / span > < / code > rules in the < span class = "sc" > rds< / span > file.
2017-07-15 10:35:02 -05:00
It allows to generate, if needed, asymetric object in the real layout file.< / p >
2017-10-30 09:33:37 -05:00
< p > < a class = "reference internal" href = "../_images/SegmentOrientation.png" > < img alt = "Symbolic Segment Orientations" class = "align-middle" src = "../_images/SegmentOrientation.png" style = "width: 50%;" / > < / a > < / p >
2017-07-15 10:35:02 -05:00
< p > < / p >
< / div >
< / div >
< div class = "section" id = "the-rds-file" >
< h1 > The RDS File< a class = "headerlink" href = "#the-rds-file" title = "Permalink to this headline" > ¶< / a > < / h1 >
< p > The RDS file control how a symbolic layout is transformed into it’ s real
conterpart.< / p >
< div class = "admonition note" >
< p class = "first admonition-title" > Note< / p >
< p class = "last" > < strong > Unit used inside the RDS file:< / strong > all units are expressed in micrometers.< / p >
< / div >
< p > Alliance tools relying on the RDS file, and what layers are active for them:< / p >
< table border = "1" class = "docutils" >
< colgroup >
< col width = "47%" / >
< col width = "16%" / >
< col width = "37%" / >
< / colgroup >
< thead valign = "bottom" >
< tr class = "row-odd" > < th class = "head" > Tool< / th >
< th class = "head" > Name< / th >
< th class = "head" > RDS Flags< / th >
< / tr >
< / thead >
< tbody valign = "top" >
< tr class = "row-even" > < td > Layout editor< / td >
2017-10-30 09:33:37 -05:00
< td > < code class = "docutils literal" > < span class = "pre" > graal< / span > < / code > < / td >
< td > < code class = "docutils literal" > < span class = "pre" > ALL< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< / tr >
< tr class = "row-odd" > < td > Design Rule Checker< / td >
2017-10-30 09:33:37 -05:00
< td > < code class = "docutils literal" > < span class = "pre" > druc< / span > < / code > < / td >
< td > < code class = "docutils literal" > < span class = "pre" > ALL< / span > < / code > , < code class = "docutils literal" > < span class = "pre" > DRC< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< / tr >
< tr class = "row-even" > < td > Electrical extractor< / td >
2017-10-30 09:33:37 -05:00
< td > < code class = "docutils literal" > < span class = "pre" > cougar< / span > < / code > < / td >
< td > < code class = "docutils literal" > < span class = "pre" > ALL< / span > < / code > , < code class = "docutils literal" > < span class = "pre" > EXT< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< / tr >
< tr class = "row-odd" > < td > The symbolic to real layout translator< / td >
2017-10-30 09:33:37 -05:00
< td > < code class = "docutils literal" > < span class = "pre" > s2r< / span > < / code > < / td >
< td > < code class = "docutils literal" > < span class = "pre" > ALL< / span > < / code > < / td >
2017-07-15 10:35:02 -05:00
< / tr >
< / tbody >
< / table >
< div class = "section" id = "physical-grid-lambda-value" >
< h2 > Physical Grid & Lambda Value< a class = "headerlink" href = "#physical-grid-lambda-value" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > RDS file:< / p >
2017-10-30 09:33:37 -05:00
< div class = "highlight-default" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > DEFINE< / span > < span class = "n" > PHYSICAL_GRID< / span > < span class = "mf" > 0.005< / span >
< span class = "n" > DEFINE< / span > < span class = "n" > LAMBDA< / span > < span class = "mf" > 0.09< / span >
< / pre > < / div >
2017-07-15 10:35:02 -05:00
< / div >
< p > Tells that the physical grid (founder grid) step is 0.005µm and the lambda has
a value of 0.09µm. That is, one lambda is 18 grid steps.< / p >
< p > We can distinguish two kind of < span class = "sc" > rds< / span > files:< / p >
< ul class = "simple" >
2017-10-30 09:33:37 -05:00
< li > The < em > 1µm< / em > kind, odd segment widths and coordinates are allowed, but the < code class = "docutils literal" > < span class = "pre" > LAMBDA< / span > < / code >
2017-07-15 10:35:02 -05:00
value < strong > must< / strong > represent an < em > even< / em > number of foundry grid step.< / li >
< li > The < em > 2µm< / em > kind, segments widths and coordinates must all be even. And in that case
2017-10-30 09:33:37 -05:00
the < code class = "docutils literal" > < span class = "pre" > LAMBDA< / span > < / code > value can be any multiple of the foundry grid.< / li >
2017-07-15 10:35:02 -05:00
< / ul >
< / div >
< div class = "section" id = "the-mbk-to-rds-segment-table" >
2017-10-30 09:33:37 -05:00
< h2 > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_SEGMENT< / span > < / code > table< a class = "headerlink" href = "#the-mbk-to-rds-segment-table" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_SEGMENT< / span > < / code > table control the way segments are translated into
2017-07-15 10:35:02 -05:00
real rectangles. Be aware that we are translating < em > segments< / em > and not < em > rectangles< / em > .
Segments are defined by their axis (source & target points) and their width.
The geometrical transformations are described according to that model.
Obviously, they are either horizontal or vertical.< / p >
< p > The translation method of a symbolic segment is as follow:< / p >
< ol class = "arabic" >
< li > < p class = "first" > The segment is translated into one or more physical rectangles.
The generated rectangles depends on the tool which is actually
using < span class = "sc" > rds< / span > and the flag for the considered real layer.
2017-10-30 09:33:37 -05:00
For instance, real layers flagged with < code class = "docutils literal" > < span class = "pre" > DRC< / span > < / code > will be generated
for < code class = "docutils literal" > < span class = "pre" > s2r< / span > < / code > (for the < code class = "docutils literal" > < span class = "pre" > cif< / span > < / code > or < code class = "docutils literal" > < span class = "pre" > gds< / span > < / code > ) and < code class = "docutils literal" > < span class = "pre" > druc< / span > < / code > , but will not
be shown under < code class = "docutils literal" > < span class = "pre" > graal< / span > < / code > .< / p >
2017-07-15 10:35:02 -05:00
< / li >
< li > < p class = "first" > Translation into one real layer. < em > First< / em > the source & target coordinates and width
2017-10-30 09:33:37 -05:00
of the symbolic segment are multiplied by the < code class = "docutils literal" > < span class = "pre" > LAMBDA< / span > < / code > value to obtain a real
segment. < em > Then< / em > one of the < code class = "docutils literal" > < span class = "pre" > VW< / span > < / code > , < code class = "docutils literal" > < span class = "pre" > LCW< / span > < / code > or < code class = "docutils literal" > < span class = "pre" > RCW< / span > < / code > transformation is applied to
2017-07-15 10:35:02 -05:00
that segment to get the final real rectangle.< / p >
< ul >
2017-10-30 09:33:37 -05:00
< li > < p class = "first" > < code class = "docutils literal" > < span class = "pre" > VW< / span > < / code > for Variable Width, expand the real layer staying centered from the
2017-07-15 10:35:02 -05:00
original one. In those rules, the third number is not used, it is only here
to make the life easier for the parser...< / p >
2017-10-30 09:33:37 -05:00
< p > < a class = "reference internal" href = "../_images/RDS_VW.png" > < img alt = "RDS Variable Width Rule" class = "align-middle" src = "../_images/RDS_VW.png" style = "width: 60%;" / > < / a > < / p >
2017-07-15 10:35:02 -05:00
< / li >
2017-10-30 09:33:37 -05:00
< li > < p class = "first" > < code class = "docutils literal" > < span class = "pre" > LCW< / span > < / code > or < code class = "docutils literal" > < span class = "pre" > RCW< / span > < / code > for Left/Right Constant Width, create an off-center rectangle
of fixed width relatively to the real segment. Note that the < code class = "docutils literal" > < span class = "pre" > SP< / span > < / code > number
2017-07-15 10:35:02 -05:00
is the distance < em > between the edge< / em > of the real segment and the edge of the
generated real rectangle (< em > not< / em > from the axis). It is often zero.< / p >
2017-10-30 09:33:37 -05:00
< p > < a class = "reference internal" href = "../_images/RDS_LCW.png" > < img alt = "RDS Left Constant Width Rule" class = "align-middle" src = "../_images/RDS_LCW.png" style = "width: 40%;" / > < / a > < / p >
2017-07-15 10:35:02 -05:00
< / li >
< / ul >
< / li >
< / ol >
< p > < / p >
< p > Examples:< / p >
2017-10-30 09:33:37 -05:00
< div class = "highlight-default" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > TABLE< / span > < span class = "n" > MBK_TO_RDS_SEGMENT< / span >
< span class = "c1" > # (Case 1)< / span >
< span class = "n" > ALU1< / span > < span class = "n" > RDS_ALU1< / span > < span class = "n" > VW< / span > < span class = "mf" > 0.18< / span > < span class = "mf" > 0.09< / span > < span class = "mf" > 0.0< / span > < span class = "n" > ALL< / span >
< span class = "c1" > # (Case 2)< / span >
< span class = "n" > NDIF< / span > < span class = "n" > RDS_NDIF< / span > < span class = "n" > VW< / span > < span class = "mf" > 0.18< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.0< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ACTIV< / span > < span class = "n" > VW< / span > < span class = "mf" > 0.18< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.0< / span > < span class = "n" > DRC< / span > \
< span class = "n" > RDS_NIMP< / span > < span class = "n" > VW< / span > < span class = "mf" > 0.36< / span > < span class = "mf" > 0.36< / span > < span class = "mf" > 0.0< / span > < span class = "n" > DRC< / span >
< span class = "c1" > # (Case 3)< / span >
< span class = "n" > NTRANS< / span > < span class = "n" > RDS_POLY< / span > < span class = "n" > VW< / span > < span class = "mf" > 0.27< / span > < span class = "mf" > 0.00< / span > < span class = "mf" > 0.0< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_GATE< / span > < span class = "n" > VW< / span > < span class = "mf" > 0.27< / span > < span class = "mf" > 0.00< / span > < span class = "mf" > 0.0< / span > < span class = "n" > DRC< / span > \
< span class = "n" > RDS_NDIF< / span > < span class = "n" > LCW< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.27< / span > < span class = "mf" > 0.0< / span > < span class = "n" > EXT< / span > \
< span class = "n" > RDS_NDIF< / span > < span class = "n" > RCW< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.27< / span > < span class = "mf" > 0.0< / span > < span class = "n" > EXT< / span > \
< span class = "n" > RDS_NDIF< / span > < span class = "n" > VW< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.72< / span > < span class = "mf" > 0.0< / span > < span class = "n" > DRC< / span > \
< span class = "n" > RDS_ACTIV< / span > < span class = "n" > VW< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.72< / span > < span class = "mf" > 0.0< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_NIMP< / span > < span class = "n" > VW< / span > < span class = "mf" > 0.18< / span > < span class = "mf" > 1.26< / span > < span class = "mf" > 0.0< / span > < span class = "n" > DRC< / span >
< span class = "n" > END< / span >
< / pre > < / div >
2017-07-15 10:35:02 -05:00
< / div >
2017-10-30 09:33:37 -05:00
< p > < span class = "fboxtt" > Case 1< / span > the < code class = "docutils literal" > < span class = "pre" > ALU1< / span > < / code > is translated in exacltly one real rectangle of
< code class = "docutils literal" > < span class = "pre" > RDS_ALU1< / span > < / code > , both ends are extended by 0.18µm and it’ s width is increased
2017-07-15 10:35:02 -05:00
by 0.09µm.< / p >
2017-10-30 09:33:37 -05:00
< p > < span class = "fboxtt" > Case 2< / span > the < code class = "docutils literal" > < span class = "pre" > NDIF< / span > < / code > will be translated into only one segment
under < code class = "docutils literal" > < span class = "pre" > graal< / span > < / code > , for symbolic visualization. And into three real rectangles
for < code class = "docutils literal" > < span class = "pre" > s2r< / span > < / code > and < code class = "docutils literal" > < span class = "pre" > druc< / span > < / code > .< / p >
< p > < span class = "fboxtt" > Case 3< / span > the < code class = "docutils literal" > < span class = "pre" > NTRANS< / span > < / code > , associated to a transistor is a little bit
more complex, the generated shapes are different for the extractor < code class = "docutils literal" > < span class = "pre" > cougar< / span > < / code >
in one hand, and for both < code class = "docutils literal" > < span class = "pre" > druc< / span > < / code > & < code class = "docutils literal" > < span class = "pre" > s2r< / span > < / code > in the other hand.< / p >
2017-07-15 10:35:02 -05:00
< ul >
2017-10-30 09:33:37 -05:00
< li > < p class = "first" > For the extractor (< code class = "docutils literal" > < span class = "pre" > EXT< / span > < / code > & < code class = "docutils literal" > < span class = "pre" > ALL< / span > < / code > flags) there will be four rectangles
2017-07-15 10:35:02 -05:00
generateds:< / p >
< ol class = "arabic simple" >
2017-10-30 09:33:37 -05:00
< li > The gate (< code class = "docutils literal" > < span class = "pre" > RDS_GATE< / span > < / code > )< / li >
< li > The left diffusion of the transistor (source or drain) (< code class = "docutils literal" > < span class = "pre" > RDS_NDIF< / span > < / code > ).< / li >
< li > The right diffusion of the transistor (drain or source) (< code class = "docutils literal" > < span class = "pre" > RDS_NDIF< / span > < / code > ).< / li >
< li > The active area (< code class = "docutils literal" > < span class = "pre" > RDS_ACTIV< / span > < / code > ).< / li >
2017-07-15 10:35:02 -05:00
< / ol >
< p > As the extractor must kept separate the source and the drain of the transistor,
2017-10-30 09:33:37 -05:00
they are generated as two offset rectangles, using the < code class = "docutils literal" > < span class = "pre" > LCW< / span > < / code > and < code class = "docutils literal" > < span class = "pre" > RCW< / span > < / code > directives.< / p >
2017-07-15 10:35:02 -05:00
< / li >
2017-10-30 09:33:37 -05:00
< li > < p class = "first" > For < code class = "docutils literal" > < span class = "pre" > s2r< / span > < / code > and < code class = "docutils literal" > < span class = "pre" > druc< / span > < / code > (< code class = "docutils literal" > < span class = "pre" > DRC< / span > < / code > and < code class = "docutils literal" > < span class = "pre" > ALL< / span > < / code > ), five rectangles are generateds:< / p >
2017-07-15 10:35:02 -05:00
< ol class = "arabic simple" >
2017-10-30 09:33:37 -05:00
< li > The poly (< code class = "docutils literal" > < span class = "pre" > RDS_POLY< / span > < / code > ).< / li >
< li > The gate (< code class = "docutils literal" > < span class = "pre" > RDS_GATE< / span > < / code > ).< / li >
< li > The diffusion, as one rectangle that covers both the < code class = "docutils literal" > < span class = "pre" > LCW< / span > < / code > and the < code class = "docutils literal" > < span class = "pre" > RCW< / span > < / code > (< code class = "docutils literal" > < span class = "pre" > RDS_NDIF< / span > < / code > ).< / li >
< li > The active area (< code class = "docutils literal" > < span class = "pre" > RDS_ACTIV< / span > < / code > ).< / li >
< li > The N implantation (< code class = "docutils literal" > < span class = "pre" > RDS_NIMP< / span > < / code > ).< / li >
2017-07-15 10:35:02 -05:00
< / ol >
< p > In the layout send to the foundry, the source & drain are draw as one rectangle
across the gate area (the transistor being defined by the intersection of both
rectangles).< / p >
< / li >
< / ul >
< p > < / p >
< / div >
< div class = "section" id = "the-mbk-to-rds-via-table" >
2017-10-30 09:33:37 -05:00
< h2 > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_VIA< / span > < / code > table< a class = "headerlink" href = "#the-mbk-to-rds-via-table" title = "Permalink to this headline" > ¶< / a > < / h2 >
2017-07-15 10:35:02 -05:00
< p > This table is to translate < em > default< / em > VIAs into real via. In the symbolic layout
the default VIA is simply a point and a set of layers. All layers are converted
in squares shapes centered on the VIA coordinate. The one dimension given is the
size of the side of that square.< / p >
< p > Note that although we are refering to VIAs, which for the purists are between two
metal layers, this table also describe < em > contacts< / em > .< / p >
< p > Example:< / p >
2017-10-30 09:33:37 -05:00
< div class = "highlight-default" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > TABLE< / span > < span class = "n" > MBK_TO_RDS_VIA< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > CONT_DIF_P< / span > < span class = "n" > RDS_PDIF< / span > < span class = "mf" > 0.54< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_CONT< / span > < span class = "mf" > 0.18< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ALU1< / span > < span class = "mf" > 0.36< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ACTIV< / span > < span class = "mf" > 0.54< / span > < span class = "n" > DRC< / span > \
< span class = "n" > RDS_PIMP< / span > < span class = "mf" > 0.90< / span > < span class = "n" > DRC< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > CONT_POLY< / span > < span class = "n" > RDS_POLY< / span > < span class = "mf" > 0.54< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_CONT< / span > < span class = "mf" > 0.18< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ALU1< / span > < span class = "mf" > 0.36< / span > < span class = "n" > ALL< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > CONT_VIA< / span > < span class = "n" > RDS_ALU1< / span > < span class = "mf" > 0.45< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_VIA1< / span > < span class = "mf" > 0.27< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ALU2< / span > < span class = "mf" > 0.45< / span > < span class = "n" > ALL< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > END< / span >
< / pre > < / div >
2017-07-15 10:35:02 -05:00
< / div >
< div class = "admonition note" >
< p class = "first admonition-title" > Note< / p >
< p class = "last" > < strong > In CONT_DIF_P< / strong > you may see that only three layers will be shown under
2017-10-30 09:33:37 -05:00
< code class = "docutils literal" > < span class = "pre" > graal< / span > < / code > , but five will be generated in the < code class = "docutils literal" > < span class = "pre" > gds< / span > < / code > layout.< / p >
2017-07-15 10:35:02 -05:00
< / div >
< / div >
< div class = "section" id = "the-mbk-to-rds-bigvia-hole-table" >
2017-10-30 09:33:37 -05:00
< h2 > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_BIGVIA_HOLE< / span > < / code > table< a class = "headerlink" href = "#the-mbk-to-rds-bigvia-hole-table" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > In < code class = "docutils literal" > < span class = "pre" > s2r< / span > < / code > , when generating BIGVIAs, the matrix of holes they contains is
2017-07-15 10:35:02 -05:00
not draw relative to the position of the BIGVIA itself, but on a grid which
is common througout all the design real layout. This is to allow overlap
between two BIGVIA without risking the holes matrix to be not exactly overlapping.
2017-10-30 09:33:37 -05:00
As a consequence, when visualizing the < code class = "docutils literal" > < span class = "pre" > gds< / span > < / code > file, the holes may not be centerend
2017-07-15 10:35:02 -05:00
inside one individual BIGVIA.< / p >
2017-10-30 09:33:37 -05:00
< p > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_BIGVIA_HOLE< / span > < / code > table define the global hole matrix for the whole
2017-07-15 10:35:02 -05:00
design. The first number is the individual hole side and the second the grid step
(edge to edge). The figure below show the hole generation.< / p >
2017-10-30 09:33:37 -05:00
< p > < a class = "reference internal" href = "../_images/bigvia-1.png" > < img alt = "BIGVIA holes" class = "align-middle" src = "../_images/bigvia-1.png" style = "width: 40%;" / > < / a > < / p >
2017-07-15 10:35:02 -05:00
< p > Example of BIGVIA overlap:< / p >
2017-10-30 09:33:37 -05:00
< p > < a class = "reference internal" href = "../_images/bigvia-2.png" > < img alt = "BIGVIA holes overlap" class = "align-middle" src = "../_images/bigvia-2.png" style = "width: 40%;" / > < / a > < / p >
2017-07-15 10:35:02 -05:00
< p > Example:< / p >
2017-10-30 09:33:37 -05:00
< div class = "highlight-default" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > TABLE< / span > < span class = "n" > MBK_TO_RDS_BIGVIA_HOLE< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > CONT_VIA< / span > < span class = "n" > RDS_VIA1< / span > < span class = "mf" > 0.27< / span > < span class = "mf" > 0.27< / span > < span class = "n" > ALL< / span >
< span class = "n" > CONT_VIA2< / span > < span class = "n" > RDS_VIA2< / span > < span class = "mf" > 0.27< / span > < span class = "mf" > 0.27< / span > < span class = "n" > ALL< / span >
< span class = "n" > CONT_VIA3< / span > < span class = "n" > RDS_VIA3< / span > < span class = "mf" > 0.27< / span > < span class = "mf" > 0.27< / span > < span class = "n" > ALL< / span >
< span class = "n" > CONT_VIA4< / span > < span class = "n" > RDS_VIA4< / span > < span class = "mf" > 0.27< / span > < span class = "mf" > 0.27< / span > < span class = "n" > ALL< / span >
< span class = "n" > CONT_VIA5< / span > < span class = "n" > RDS_VIA5< / span > < span class = "mf" > 0.36< / span > < span class = "mf" > 0.36< / span > < span class = "n" > ALL< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > END< / span >
< / pre > < / div >
2017-07-15 10:35:02 -05:00
< / div >
< div class = "admonition note" >
< p class = "first admonition-title" > Note< / p >
< p class = "last" > < strong > BIGVIA demotion.< / strong > If the size of the bigvia is too small, there is
a possibility that no hole from the global matrix will be under it.
To avoid that case, if the either side of the BIGVIA is less than
2017-10-30 09:33:37 -05:00
< code class = "docutils literal" > < span class = "pre" > 1.5< / span > < span class = "pre" > *< / span > < span class = "pre" > step< / span > < / code > , the BIGVIA is demoted to a simple VIA.< / p >
2017-07-15 10:35:02 -05:00
< / div >
< / div >
< div class = "section" id = "the-mbk-to-rds-bigvia-metal-table" >
2017-10-30 09:33:37 -05:00
< h2 > The < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_BIGVIA_METAL< / span > < / code > table< a class = "headerlink" href = "#the-mbk-to-rds-bigvia-metal-table" title = "Permalink to this headline" > ¶< / a > < / h2 >
2017-07-15 10:35:02 -05:00
< p > This table describe how the metal part of a BIGVIA is expanded (for the hole
2017-10-30 09:33:37 -05:00
part, see the previous table < code class = "docutils literal" > < span class = "pre" > MBK_TO_RDS_BIGVIA_HOLE< / span > < / code > ). The rule give for each
2017-07-15 10:35:02 -05:00
metal:< / p >
< ol class = "arabic simple" >
< li > The < em > delta-with< / em > (have to ask Franck).< / li >
< li > The < em > overhang< / em > , the length the real rectangle is expanded on each side from
the symbolic rectange.< / li >
< / ol >
< p > Example:< / p >
2017-10-30 09:33:37 -05:00
< div class = "highlight-default" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > TABLE< / span > < span class = "n" > MBK_TO_RDS_BIGVIA_METAL< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > CONT_VIA< / span > < span class = "n" > RDS_ALU1< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.09< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ALU2< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.09< / span > < span class = "n" > ALL< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > CONT_VIA2< / span > < span class = "n" > RDS_ALU2< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.09< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ALU3< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.09< / span > < span class = "n" > ALL< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > CONT_VIA3< / span > < span class = "n" > RDS_ALU3< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.09< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ALU4< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.09< / span > < span class = "n" > ALL< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > CONT_VIA4< / span > < span class = "n" > RDS_ALU4< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.09< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ALU5< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.09< / span > < span class = "n" > ALL< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "n" > CONT_VIA5< / span > < span class = "n" > RDS_ALU5< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.09< / span > < span class = "n" > ALL< / span > \
< span class = "n" > RDS_ALU6< / span > < span class = "mf" > 0.0< / span > < span class = "mf" > 0.18< / span > < span class = "n" > ALL< / span >
< span class = "n" > END< / span >
< / pre > < / div >
2017-07-15 10:35:02 -05:00
< / div >
< / div >
< div class = "section" id = "the-mbk-wiresetting-table" >
2017-10-30 09:33:37 -05:00
< h2 > The < code class = "docutils literal" > < span class = "pre" > MBK_WIRESETTING< / span > < / code > table< a class = "headerlink" href = "#the-mbk-wiresetting-table" title = "Permalink to this headline" > ¶< / a > < / h2 >
2017-07-15 10:35:02 -05:00
< p > From a strict standpoint this table shouldn’ t be here but put in a separate
configuration file, because it contains informations only used by the symbolic
2017-10-30 09:33:37 -05:00
layout tools (< code class = "docutils literal" > < span class = "pre" > ocp< / span > < / code > , < code class = "docutils literal" > < span class = "pre" > nero< / span > < / code > , < code class = "docutils literal" > < span class = "pre" > ring< / span > < / code > ).< / p >
2017-07-15 10:35:02 -05:00
< p > This table defines the cell gauge the routing pitch and minimal (symbolic)
wire width and minimal spacing for the routers. They are patly redundant.< / p >
< p > Example:< / p >
2017-10-30 09:33:37 -05:00
< div class = "highlight-default" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > TABLE< / span > < span class = "n" > MBK_WIRESETTING< / span >
< span class = "n" > X_GRID< / span > < span class = "mi" > 10< / span >
< span class = "n" > Y_GRID< / span > < span class = "mi" > 10< / span >
< span class = "n" > Y_SLICE< / span > < span class = "mi" > 100< / span >
< span class = "n" > WIDTH_VDD< / span > < span class = "mi" > 12< / span >
< span class = "n" > WIDTH_VSS< / span > < span class = "mi" > 12< / span >
< span class = "n" > TRACK_WIDTH_ALU8< / span > < span class = "mi" > 0< / span >
< span class = "n" > TRACK_WIDTH_ALU7< / span > < span class = "mi" > 4< / span >
< span class = "n" > TRACK_WIDTH_ALU6< / span > < span class = "mi" > 4< / span >
< span class = "n" > TRACK_WIDTH_ALU5< / span > < span class = "mi" > 4< / span >
< span class = "n" > TRACK_WIDTH_ALU4< / span > < span class = "mi" > 3< / span >
< span class = "n" > TRACK_WIDTH_ALU3< / span > < span class = "mi" > 3< / span >
< span class = "n" > TRACK_WIDTH_ALU2< / span > < span class = "mi" > 3< / span >
< span class = "n" > TRACK_WIDTH_ALU1< / span > < span class = "mi" > 3< / span >
< span class = "n" > TRACK_SPACING_ALU8< / span > < span class = "mi" > 0< / span >
< span class = "n" > TRACK_SPACING_ALU7< / span > < span class = "mi" > 4< / span >
< span class = "n" > TRACK_SPACING_ALU6< / span > < span class = "mi" > 4< / span >
< span class = "n" > TRACK_SPACING_ALU5< / span > < span class = "mi" > 4< / span >
< span class = "n" > TRACK_SPACING_ALU4< / span > < span class = "mi" > 4< / span >
< span class = "n" > TRACK_SPACING_ALU3< / span > < span class = "mi" > 4< / span >
< span class = "n" > TRACK_SPACING_ALU2< / span > < span class = "mi" > 4< / span >
< span class = "n" > TRACK_SPACING_ALU1< / span > < span class = "mi" > 3< / span >
< span class = "n" > END< / span >
< / pre > < / div >
2017-07-15 10:35:02 -05:00
< / div >
< / div >
< / div >
< / div >
< footer >
< div class = "rst-footer-buttons" role = "navigation" aria-label = "footer navigation" >
2017-10-30 09:33:37 -05:00
< a href = "../lefapi/lefapi.html" class = "btn btn-neutral float-right" title = "LEF API Reference" accesskey = "n" > Next < span class = "fa fa-arrow-circle-right" > < / span > < / a >
2017-07-15 10:35:02 -05:00
2018-05-04 17:23:44 -05:00
< a href = "index.html" class = "btn btn-neutral" title = "RDS – Symbolic to Real Conversion in Alliance" accesskey = "p" > < span class = "fa fa-arrow-circle-left" > < / span > Previous< / a >
2017-07-15 10:35:02 -05:00
< / div >
< hr / >
< div role = "contentinfo" >
< table class = "footer1" >
< tr >
< td class = "LFooter" > < small >
Generated by < a href = "http://sphinx-doc.org/" > Sphinx< / a >
2018-05-04 17:23:44 -05:00
using a < a href = "https://readthedocs.org" > RTD< / a > theme on May 05, 2018.
2017-07-15 10:35:02 -05:00
< / small > < / td >
< td class = "RFooter" > < / td >
< / tr >
< / table >
< table class = "footer2" >
< tr >
< td class = "LFooter" > Coriolis 2 Documentation< / td >
< td class = "RFooter" > < small >
2018-01-06 10:55:44 -06:00
© Copyright 2000-2018, UPMC.
2017-07-15 10:35:02 -05:00
< / small > < / td >
< / tr >
< / table >
< / div >
< / footer >
< / div >
< / div >
< / section >
< / div >
< script type = "text/javascript" >
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'2',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
< / script >
< script type = "text/javascript" src = "../_static/jquery.js" > < / script >
< script type = "text/javascript" src = "../_static/underscore.js" > < / script >
< script type = "text/javascript" src = "../_static/doctools.js" > < / script >
< script type = "text/javascript" src = "../_static/js/theme.js" > < / script >
< script type = "text/javascript" >
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
< / script >
< / body >
< / html >