coriolis/documentation/_build/html/UsersGuide/ViewerTools.html

1300 lines
77 KiB
HTML
Raw Normal View History

<!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>CGT - The Graphical Interface &mdash; Coriolis 2 documentation</title>
<link rel="stylesheet" href="../_static/SoC.css" type="text/css" />
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="../index.html"/>
<link rel="up" title="Coriolis Users Guide" href="index.html"/>
<link rel="next" title="Python Interface for Hurricane / Coriolis" href="ScriptsPlugins.html"/>
<link rel="prev" title="Coriolis Configuration &amp; Initialisation" href="Configuration.html"/>
<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 current"><a class="reference internal" href="index.html">Coriolis User&#8217;s Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="LicenseCredits.html">Credits &amp; License</a></li>
<li class="toctree-l2"><a class="reference internal" href="Releases.html">Release Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-1-0-1475">Release 1.0.1475</a></li>
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-1-0-1963">Release 1.0.1963</a></li>
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-1-0-2049">Release 1.0.2049</a></li>
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-v2-0-1">Release v2.0.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-v2-1">Release v2.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-v2-2"><strong>Release v2.2</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Installation.html">Installation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Installation.html#fixed-directory-tree">Fixed Directory Tree</a></li>
<li class="toctree-l3"><a class="reference internal" href="Installation.html#building-coriolis">Building Coriolis</a><ul>
<li class="toctree-l4"><a class="reference internal" href="Installation.html#building-the-devel-branch">Building the Devel Branch</a></li>
<li class="toctree-l4"><a class="reference internal" href="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="Installation.html#packaging-coriolis">Packaging Coriolis</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="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="Configuration.html">Coriolis Configuration &amp; Initialisation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#general-software-architecture">General Software Architecture</a></li>
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#first-stage-technology-selection">First Stage: Technology Selection</a></li>
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#second-stage-technology-configuration-loading">Second Stage: Technology Configuration Loading</a></li>
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#configuration-helpers">Configuration Helpers</a><ul>
<li class="toctree-l4"><a class="reference internal" href="Configuration.html#alliance-helper"><span class="sc">Alliance</span> Helper</a></li>
<li class="toctree-l4"><a class="reference internal" href="Configuration.html#tools-configuration-helpers">Tools Configuration Helpers</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#hacking-the-configuration-files">Hacking the Configuration Files</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">CGT - The Graphical Interface</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#viewer-tools">Viewer &amp; Tools</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#stratus-netlist-capture"><span class="sc">Stratus</span> Netlist Capture</a></li>
<li class="toctree-l4"><a class="reference internal" href="#the-hurricane-data-base">The <span class="sc">Hurricane</span> Data-Base</a></li>
<li class="toctree-l4"><a class="reference internal" href="#synthetizing-and-loading-a-design">Synthetizing and loading a design</a></li>
<li class="toctree-l4"><a class="reference internal" href="#etesian-placer">Etesian &#8211; Placer</a></li>
<li class="toctree-l4"><a class="reference internal" href="#knik-global-router">Knik &#8211; Global Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="#kite-detailed-router">Kite &#8211; Detailed Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="#executing-python-scripts-in-cgt">Executing Python Scripts in Cgt</a></li>
<li class="toctree-l4"><a class="reference internal" href="#printing-snapshots">Printing &amp; Snapshots</a></li>
<li class="toctree-l4"><a class="reference internal" href="#memento-of-shortcuts-in-graphic-mode">Memento of Shortcuts in Graphic Mode</a></li>
<li class="toctree-l4"><a class="reference internal" href="#cgt-command-line-options">Cgt Command Line Options</a></li>
<li class="toctree-l4"><a class="reference internal" href="#miscellaneous-settings">Miscellaneous Settings</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#the-controller">The Controller</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#the-look-tab">The Look Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="#the-filter-tab">The Filter Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="#the-layers-go-tab">The Layers&amp;Go Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="#the-netlist-tab">The Netlist Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="#the-selection-tab">The Selection Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="#the-inspector-tab">The Inspector Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="#the-settings-tab">The Settings Tab</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="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="ScriptsPlugins.html#plugins">Plugins</a><ul>
<li class="toctree-l4"><a class="reference internal" href="ScriptsPlugins.html#chip-placement">Chip Placement</a></li>
<li class="toctree-l4"><a class="reference internal" href="ScriptsPlugins.html#clock-tree">Clock Tree</a></li>
<li class="toctree-l4"><a class="reference internal" href="ScriptsPlugins.html#recursive-save-rsave">Recursive-Save (RSave)</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="ScriptsPlugins.html#a-simple-example-am2901">A Simple Example: AM2901</a></li>
</ul>
</li>
</ul>
</li>
<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>
<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&#8217;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>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html">3. Making a Standard Cell &#8211; 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>
<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>
<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>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/Netlist.html">6. Making a hierarchical Cell &#8211; 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 &#8211; 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 &#8211; 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 &#8211; <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 &#8211; Etesian</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/ToolEngines.html#router-katana">8.1 Router &#8211; 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>
<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>
<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>
<li class="toctree-l1"><a class="reference internal" href="../RDS/index.html">RDS &#8211; Symbolic to Real Conversion in Alliance</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../RDS/RDSpage.html">Symbolic Layout</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#symbolic-components">Symbolic Components</a></li>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#symbolic-segments">Symbolic Segments</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../RDS/RDSpage.html#the-rds-file">The RDS File</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#physical-grid-lambda-value">Physical Grid &amp; Lambda Value</a></li>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#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="../RDS/RDSpage.html#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="../RDS/RDSpage.html#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="../RDS/RDSpage.html#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="../RDS/RDSpage.html#the-mbk-wiresetting-table">The <code class="docutils literal"><span class="pre">MBK_WIRESETTING</span></code> table</a></li>
</ul>
</li>
</ul>
</li>
<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>
<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>
</ul>
</div>
&nbsp;
</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> &raquo;</li>
<li><a href="index.html">Coriolis User&#8217;s Guide</a> &raquo;</li>
<li>CGT - The Graphical Interface</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document">
<div class="section" id="cgt-the-graphical-interface">
<h1>CGT - The Graphical Interface<a class="headerlink" href="#cgt-the-graphical-interface" title="Permalink to this headline"></a></h1>
<p>The <span class="sc">Coriolis</span> graphical interface is split up into two windows.</p>
<ul class="simple">
<li>The <strong>Viewer</strong>, with the following features:<ul>
<li>Basic load/save capabilities.</li>
<li>Display the current working cell. Could be empty if the design
is not yet placed.</li>
<li>Execute Stratus Scripts.</li>
<li>Menu to run the tools (placement, routage).</li>
</ul>
</li>
</ul>
<p>Features are detailed in <a class="reference internal" href="#viewer-tools">Viewer &amp; Tools</a>.</p>
<p><a class="reference internal" href="../_images/Viewer-1.png"><img alt="Viewer Basic Snapshot" class="align-middle" src="../_images/Viewer-1.png" style="width: 80%;" /></a></p>
<ul class="simple">
<li>The <strong>Controller</strong>, which allows:<ul>
<li>Tweak what is displayer by the <em>Viewer</em>. Through the <em>Look</em>,
<em>Filter</em> and <em>Layers&amp;Gos</em> tabs.</li>
<li>Browse the <em>netlist</em> with eponym tab.</li>
<li>Show the list of selected objects (if any) with <em>selection</em></li>
<li>Walk through the Database, the Cell or the Selection with <em>Inspector</em>.
This is an advanced feature, reserved for experimented users.</li>
<li>The tab <em>Settings</em> which give access to all the settings.
They are closely related to Configuration &amp; Initialisation.</li>
</ul>
</li>
</ul>
<p> <a class="reference internal" href="../_images/Controller-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-1.png" style="width: 80%;" /></a> </p>
<div class="section" id="viewer-tools">
<span id="id1"></span><h2>Viewer &amp; Tools<a class="headerlink" href="#viewer-tools" title="Permalink to this headline"></a></h2>
<div class="section" id="stratus-netlist-capture">
<h3><span class="sc">Stratus</span> Netlist Capture<a class="headerlink" href="#stratus-netlist-capture" title="Permalink to this headline"></a></h3>
<p><span class="sc">Stratus</span> is the replacement for <span class="sc">GenLib</span> procedural netlist capture language.
It is designed as a set of <span class="sc">Python</span> classes, and comes with it&#8217;s own documentation
(<a class="reference external" href="file:///usr/share/doc/coriolis2/en/html/stratus/index.html">Stratus Documentation</a>)</p>
</div>
<div class="section" id="the-hurricane-data-base">
<h3>The <span class="sc">Hurricane</span> Data-Base<a class="headerlink" href="#the-hurricane-data-base" title="Permalink to this headline"></a></h3>
<p>The <span class="sc">Alliance</span> flow is based on the <span class="sc">mbk</span> data-base, which has one data-structure
for each view. That is, <span class="cb">Lofig</span> for the <em>logical</em> view and <span class="cb">Phfig</span> for the <em>physical</em>
view. The place and route tools were responsible for maintaining (or not) the
coherency between views. Reflecting this weak coupling between views, each one
was stored in a separate file with a specific format. The <em>logical</em> view is stored
in a <span class="cb">vst</span> file in <span class="sc">vhdl</span> format and the <em>physical</em> in an <span class="cb">ap</span> file in an ad-hoc format.</p>
<p>The <span class="sc">Coriolis</span> flow is based on the <span class="sc">Hurricane</span> data-base, which has a unified
structure for <em>logical</em> and <em>physical</em> view. That data structure is the <em>Cell</em> object.
The <em>Cell</em> can have any state between pure netlist and completly placed and
routed design. Although the memory representation of the views has deeply
changed we still use the <span class="sc">Alliance</span> files format, but they now really represent
views of the same object. The point is that one must be very careful about
view coherency when going to and from <span class="sc">Coriolis</span>.</p>
<p>As for the second release, <span class="sc">Coriolis</span> can be used only for three purposes :</p>
<ul class="simple">
<li><strong>Placing a design</strong>, in which case the <em>netlist</em> view must be present.</li>
<li><strong>Routing a design</strong>, in that case the <em>netlist</em>
view and the <em>layout</em> view must be present and <em>layout</em> view must contain
a placement. Both views must have the same name. When saving the routed design,
it is advised to change the design name otherwise the original unrouted placement
in the <em>layout</em> view will be overwritten.</li>
<li><strong>Viewing a design</strong>, the <em>netlist</em> view must be present, if a <em>layout</em>
view is present it still must have the same name but it can be in any
state.</li>
</ul>
</div>
<div class="section" id="synthetizing-and-loading-a-design">
<h3>Synthetizing and loading a design<a class="headerlink" href="#synthetizing-and-loading-a-design" title="Permalink to this headline"></a></h3>
<p><span class="sc">Coriolis</span> supports several file formats. It can load all file format
from the <span class="sc">Alliance</span> toolchain (.ap for layout, behavioural and structural vhdl .vbe and .vst),
BLIF netlist format as well as benchmark formats from the ISPD contests.</p>
<p>It can be compiled with LEF/DEF support, although it requires acceptance of the SI2 license
and may not be compiled in your version of the software.</p>
<div class="section" id="synthesis-under-yosys">
<h4>Synthesis under Yosys<a class="headerlink" href="#synthesis-under-yosys" title="Permalink to this headline"></a></h4>
<p>You can create a BLIF file from the <span class="sc">Yosys</span> synthetizer, which can be imported under Coriolis.
Most libraries are specified as a .lib liberty file and a .lef LEF file.
<span class="sc">Yosys</span> opens most .lib files with minor modifications, but LEF support in Coriolis relies on SI2.
If Coriolis hasn&#8217;t been compiled against it, the library is given in <span class="sc">Alliance</span> .ap format.
<a class="reference external" href="http://vlsitechnology.org">Some free libraries</a> already provide both .ap and .lib files.</p>
<p>Once you have installed a common library under <span class="sc">Yosys</span> and Coriolis, just synthetize your design
with <span class="sc">Yosys</span> and import it (as Blif without the extension) under Coriolis to perform place&amp;route.</p>
</div>
<div class="section" id="synthesis-under-alliance">
<h4>Synthesis under Alliance<a class="headerlink" href="#synthesis-under-alliance" title="Permalink to this headline"></a></h4>
<p><span class="sc">Alliance</span> is an older toolchain but has been extensively used for years. Coriolis can import
and write Alliance designs and libraries directly.</p>
</div>
</div>
<div class="section" id="etesian-placer">
<h3>Etesian &#8211; Placer<a class="headerlink" href="#etesian-placer" title="Permalink to this headline"></a></h3>
<p>The <span class="sc">Etesian</span> placer is a state of the art (as of 2015) analytical placer. It is
within <code class="docutils literal"><span class="pre">5%</span></code> of other placers&#8217; solutions, but is normally a bit worse than ePlace.
This <span class="sc">Coriolis</span> tool is actually an encapsulation of <span class="sc">Coloquinte</span> which <em>is</em> the placer.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><em>Instance Uniquification Unsupported:</em> a same logical instance cannot have
two different placements. So, either you manually make a clone of it or you
supply a placement for it. We need to implement uniquification in the
<span class="sc">Hurricane</span> database.</p>
</div>
<p> <span class="raw-html"><p class="noindent"></p></span>
<strong>Hierarchical Placement</strong></p>
<p>The placement area is defined by the top cell abutment box.</p>
<p>When placing a complete hierarchy, the abutment boxes of the cells (models) other than
the top cell are sets identical to the one of the top cell and their instances are
all placed at position <code class="docutils literal"><span class="pre">(0,0,ID)</span></code>. That is, all the abutments boxes, whatever the
hierarchical level, defines the same area (they are exactly superposed).</p>
<p>We choose this scheme because the placer will see all the instances as virtually
flattened, so they can be placed anywhere inside the top-cell abutment box.</p>
<p> <a class="reference internal" href="../_images/etesian-1.png"><img alt="Etesian Abutment Box" class="align-middle" src="../_images/etesian-1.png" style="width: 80%;" /></a> </p>
<p> <span class="raw-html"><p class="noindent"></p></span>
<strong>Computing the Placement Area</strong></p>
<p>The placement area is computed using the <code class="docutils literal"><span class="pre">etesian.aspectRatio</span></code> and <code class="docutils literal"><span class="pre">etesian.spaceMargin</span></code>
parameters only if the top-cell has an empty abutment box. If the top-cell abutment
box has to be set, then it is propagated to all the instances models recursively.</p>
<p> <span class="raw-html"><p class="noindent"></p></span>
<strong>Reseting the Placement</strong></p>
<p>Once a placement has been done, the placer cannot reset it (will be implemented
later). To perform a new placement, you must restart <span class="cb">cgt</span>. In addition, if you
have saved the placement on disk, you must erase any <span class="cb">.ap</span> file, which are
automatically reloaded along with the netlist (<span class="cb">.vst</span>).</p>
<p> <span class="raw-html"><p class="noindent"></p></span>
<strong>Limitations</strong></p>
<p>Etesian supports standard cells and fixed macros. As for the Coriolis 2.1 version,
it doesn&#8217;t support movable macros, and you must place every macro beforehand.
Timing and routability analysis are not included either, and the returned placement
may be unroutable.</p>
<div class="section" id="etesian-configuration-parameters">
<h4>Etesian Configuration Parameters<a class="headerlink" href="#etesian-configuration-parameters" title="Permalink to this headline"></a></h4>
<table border="1" class="docutils">
<colgroup>
<col width="43%" />
<col width="22%" />
<col width="35%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Parameter Identifier</th>
<th class="head">Type</th>
<th class="head">Default</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td colspan="3"><strong>Etesian Parameters</strong></td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.aspectRatio</span></code></td>
<td>TypePercentage</td>
<td><span class="cb">100</span></td>
</tr>
<tr class="row-even"><td colspan="2">Define the height on width <code class="docutils literal"><span class="pre">H/W</span></code> aspect
ratio, can be comprised between 10 and 1000</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.spaceMargin</span></code></td>
<td>TypePercentage</td>
<td><span class="cb">5</span></td>
</tr>
<tr class="row-even"><td colspan="2">The extra white space added to the total area
of the standard cells</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.uniformDensity</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
<tr class="row-even"><td colspan="2">Whether the cells will be spread envenly
across the area or allowed to form denser
clusters</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.effort</span></code></td>
<td>TypeInt</td>
<td><span class="cb">2</span></td>
</tr>
<tr class="row-even"><td colspan="2">Sets the balance between the speed of the
placer and the solution quality</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.routingDriven</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
<tr class="row-even"><td colspan="2">Whether the tool will try routing iterations
and whitespace allocation to improve
routability; to be implemented</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.graphics</span></code></td>
<td>TypeInt</td>
<td><span class="cb">2</span></td>
</tr>
<tr class="row-even"><td colspan="2"><p class="first">How often the display will be refreshed
More refreshing slows the placer.</p>
<ul class="last simple">
<li><code class="docutils literal"><span class="pre">1</span></code> shows both upper and lower bounds</li>
<li><code class="docutils literal"><span class="pre">2</span></code> only shows lower bound results</li>
<li><code class="docutils literal"><span class="pre">3</span></code> only shows the final results</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p></p>
</div>
</div>
<div class="section" id="knik-global-router">
<h3>Knik &#8211; Global Router<a class="headerlink" href="#knik-global-router" title="Permalink to this headline"></a></h3>
<p>The quality of <span class="sc">Knik</span> global routing solutions are equivalent to those of <a class="reference external" href="http://vlsicad.eecs.umich.edu/BK/FGR/">FGR</a> 1.0.
For an in-depth description of <span class="sc">Knik</span> algorithms, you may download the thesis of
D. <span class="sc">Dupuis</span> avalaible from here~: <a class="reference external" href="http://www-soc.lip6.fr/en/users/damiendupuis/PhD/">Knik Thesis</a>.</p>
<p>The global router is (not yet) deterministic. To circumvent this limitation,
a global routing <em>solution</em> can be saved to disk and reloaded for later uses.</p>
<p>A global routing is saved into a file with the same name as the design and a
<span class="cb">kgr</span> extention. It is in <a class="reference external" href="http://www.cerc.utexas.edu/~thyeros/boxrouter/boxrouter.htm">Box Router</a> output format.</p>
<p> <span class="raw-html"><p class="noindent"></p></span> Menus:</p>
<ul class="simple">
<li><img class="math" src="../_images/math/ab9c214f89790a2afdc94a731f08c35d0fafa77d.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Save Global Routing}"/></li>
<li><img class="math" src="../_images/math/0b37db03668389c8e33d766f186469af280334bb.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Load Global Routing}"/></li>
</ul>
</div>
<div class="section" id="kite-detailed-router">
<h3>Kite &#8211; Detailed Router<a class="headerlink" href="#kite-detailed-router" title="Permalink to this headline"></a></h3>
<p><span class="sc">Kite</span> no longer suffers from the limitations of <span class="sc">Nero</span>. It can route big designs
as its runtime and memory footprint is almost linear (with respect to the number
of gates). It has successfully routed design of more than <cite>150K</cite> gates.
<span class="raw-html"><br class="medskip"/></span></p>
<p> <span class="raw-html"><p class="noindent"></p></span> However, this first release comes with the temporary the following
restrictions:</p>
<ul class="simple">
<li>Works only with <span class="sc">SxLib</span> standard cell gauge.</li>
<li>Works always with 4 routing metal layers (<cite>M2</cite> through <cite>M5</cite>).</li>
<li>Do not allow (take into account) pre-routed wires on signals
other than <span class="sc">power</span> or <span class="sc">ground</span>.</li>
</ul>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>Slow Layer Assignment.</strong> Most of the time, the layer assignment stage is
fast (less than a dozen seconds), but in some instances it can take more
than a dozen <em>minutes</em>. This is a known bug and will be corrected in later
releases.</p>
</div>
<p>After each run, <span class="sc">Kite</span> displays a set of <em>completion ratios</em> which must all
be equal to <cite>100%</cite> if the detailed routing has been successfull.
In the event of a failure, on a saturated design, you may decrease the
<cite>edge saturation ratio</cite> (argument <cite>&#8211;edge</cite>) to balance more evenly the design
saturation. That is, the maximum saturation decrease at the price of a wider
saturated area and increased wirelength. This is the saturation of the
<em>global</em> router <span class="sc">Knik</span>, and you may increase/decrease by steps of <code class="docutils literal"><span class="pre">5%</span></code>,
which represent one track. The maximum capacity of the <span class="sc">SxLib</span> gauge is
10 tracks in two layers, that makes 20 tracks by <span class="sc">Knik</span> edge.</p>
<p>Routing a design is done in four ordered steps:</p>
<ol class="arabic simple">
<li>Detailed pre-route <img class="math" src="../_images/math/9354e2441491d324ef5fd162920f581bdf022af5.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Detailed PreRoute}"/></li>
<li>Global routing <img class="math" src="../_images/math/8080e7327f421afe79e142b39735819ab9631cb9.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Global Route}"/></li>
<li>Detailed routing <img class="math" src="../_images/math/44344a23b2a3007fed067629259108385790ee6a.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Detailed Route}"/></li>
<li>Finalize routing <img class="math" src="../_images/math/0d59c123dd2cd130ca29a2ba930fabbc4f547771.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Finalize Route}"/></li>
</ol>
<p>It is possible to supply to the router a complete wiring for some nets that the user&#8217;s
wants to be routed according to a specific topology. The supplied topology must respect
the building rules of the <span class="sc">Katabatic</span> database (contacts must be, terminals, turns, h-tee
&amp; v-tee only). During the first step <span class="fboxtt">Detailed Pre-Route</span> the router will solve
overlaps between the segments, without making any dogleg. If no pre-routed topologies
are present, this step may be ommited. Any net routed at this step is then fixed and
become unmovable for the later stages.</p>
<p>After the detailed routing step the <span class="sc">Kite</span> data-structure is still active
(the Hurricane wiring is decorated). The finalize step performs the removal of
the <span class="sc">Kite</span> data-structure, and it is not advisable to save the design before
that step.</p>
<p>You may visualize the density (saturation) of either <span class="sc">Knik</span> (on edges) or
<span class="sc">Kite</span> (on GCells) until the routing is finalized. Special layers appears
to that effect in the <a class="reference internal" href="#the-layers-go-tab">The Layers&amp;Go Tab</a>.</p>
<div class="section" id="kite-configuration-parameters">
<h4>Kite Configuration Parameters<a class="headerlink" href="#kite-configuration-parameters" title="Permalink to this headline"></a></h4>
<p>As <span class="sc">Knik</span> is only called through <span class="sc">Kite</span>, it&#8217;s parameters also have
the <span class="cb">kite.</span> prefix.</p>
<p>The <span class="sc">Katabatic</span> parameters control the layer assignment step.</p>
<p>All the defaults value given below are from the default <span class="sc">Alliance</span> technology
(<span class="cb">cmos</span> and <span class="cb">SxLib</span> cell gauge/routing gauge).</p>
<table border="1" class="docutils">
<colgroup>
<col width="43%" />
<col width="22%" />
<col width="35%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Parameter Identifier</th>
<th class="head">Type</th>
<th class="head">Default</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td colspan="3"><strong>Katabatic Parameters</strong></td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">katabatic.topRoutingLayer</span></code></td>
<td>TypeString</td>
<td><span class="cb">METAL5</span></td>
</tr>
<tr class="row-even"><td colspan="2">Define the highest metal layer that will be
used for routing (inclusive).</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">katabatic.globalLengthThreshold</span></code></td>
<td>TypeInt</td>
<td><span class="cb">1450</span></td>
</tr>
<tr class="row-even"><td colspan="2">This parameter is used by a layer assignment
method which is no longer used (did not give
good results)</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">katabatic.saturateRatio</span></code></td>
<td>TypePercentage</td>
<td><span class="cb">80</span></td>
</tr>
<tr class="row-even"><td colspan="2">If <code class="docutils literal"><span class="pre">M(x)</span></code> density is above this ratio,
move up feedthru global segments up from
depth <code class="docutils literal"><span class="pre">x</span></code> to <code class="docutils literal"><span class="pre">x+2</span></code></td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">katabatic.saturateRp</span></code></td>
<td>TypeInt</td>
<td><span class="cb">8</span></td>
</tr>
<tr class="row-even"><td colspan="2">If a GCell contains more terminals
(<span class="cb">RoutingPad</span>) than that number, force a
move up of the connecting segments to those
in excess</td>
</tr>
<tr class="row-odd"><td colspan="3"><strong>Knik Parameters</strong></td>
</tr>
<tr class="row-even"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.hTracksReservedLocal</span></code></td>
<td>TypeInt</td>
<td><span class="cb">3</span></td>
</tr>
<tr class="row-odd"><td colspan="2">To take account the tracks needed <em>inside</em> a
GCell to build the <em>local</em> routing, decrease
the capacity of the edges of the global
router. Horizontal and vertical locally
reserved capacity can be distinguished for
more accuracy.</td>
</tr>
<tr class="row-even"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.vTracksReservedLocal</span></code></td>
<td>TypeInt</td>
<td><span class="cb">3</span></td>
</tr>
<tr class="row-odd"><td colspan="2">cf. <code class="docutils literal"><span class="pre">kite.hTracksReservedLocal</span></code></td>
</tr>
<tr class="row-even"><td colspan="3"><strong>Kite Parameters</strong></td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.eventsLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">4000002</span></td>
</tr>
<tr class="row-even"><td colspan="2">The maximum number of segment displacements,
this is a last ditch safety against infinite
loop. It&#8217;s perhaps a little too low for big
designs</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.ripupCost</span></code></td>
<td>TypeInt</td>
<td><span class="cb">3</span></td>
</tr>
<tr class="row-even"><td colspan="2">Differential introduced between two ripup
cost to avoid a loop between two ripped up
segments</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.strapRipupLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">16</span></td>
</tr>
<tr class="row-even"><td colspan="2">Maximum number of ripup for <em>strap</em> segments</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.localRipupLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">9</span></td>
</tr>
<tr class="row-even"><td colspan="2">Maximum number of ripup for <em>local</em> segments</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.globalRipupLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">5</span></td>
</tr>
<tr class="row-even"><td colspan="2">Maximum number of ripup for <em>global</em> segments,
when this limit is reached, triggers topologic
modification</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.longGlobalRipupLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">5</span></td>
</tr>
<tr class="row-even"><td colspan="2">Maximum number of ripup for <em>long global</em>
segments, when this limit is reached, triggers
topological modification</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="section" id="executing-python-scripts-in-cgt">
<span id="python-scripts-in-cgt"></span><h3>Executing Python Scripts in Cgt<a class="headerlink" href="#executing-python-scripts-in-cgt" title="Permalink to this headline"></a></h3>
<p>Python/Stratus scripts can be executed either in text or graphical mode.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>How Cgt Locates Python Scripts:</strong>
<span class="cb">cgt</span> uses the Python <code class="docutils literal"><span class="pre">import</span></code> mechanism to load Python scripts.
So you must give the name of your script whitout <code class="docutils literal"><span class="pre">.py</span></code> extention and
it must be reachable through the <code class="docutils literal"><span class="pre">PYTHONPATH</span></code>. You may uses the
dotted module notation.</p>
</div>
<p>A Python/Stratus script must contains a function called <code class="docutils literal"><span class="pre">ScriptMain()</span></code>
with one optional argument, the graphical editor into which it may be
running (will be set to <code class="docutils literal"><span class="pre">None</span></code> in text mode). The Python interface to
the editor (type: <span class="cb">CellViewer</span>) is limited to basic capabilities
only.</p>
<p>Any script given on the command line will be run immediatly <em>after</em> the
initializations and <em>before</em> any other argument is processed.</p>
<p>For more explanation on Python scripts see <a class="reference internal" href="ScriptsPlugins.html#python-interface-to-coriolis"><span class="std std-ref">Python Interface for Hurricane / Coriolis</span></a>.</p>
</div>
<div class="section" id="printing-snapshots">
<h3>Printing &amp; Snapshots<a class="headerlink" href="#printing-snapshots" title="Permalink to this headline"></a></h3>
<p>Printing or saving into a <span class="sc">pdf</span> is fairly simple, just uses the <strong>File -&gt; Print</strong>
menu or the <span class="fboxtt">CTRL+P</span> shortcut to open the dialog box.</p>
<p>The print functionality uses exactly the same rendering mechanism as for the
screen, beeing almost <em>WYSIWYG</em>. Thus, to obtain the best results it is advisable
to select the <code class="docutils literal"><span class="pre">Coriolis.Printer</span></code> look (in the <em>Controller</em>), which uses a
white background and much suited for high resolutions <code class="docutils literal"><span class="pre">32x32</span></code> pixels patterns</p>
<p>There is also two mode of printing selectable through the <em>Controller</em>
<strong>Settings -&gt; Misc -&gt; Printer/Snapshot Mode</strong>:</p>
<table border="1" class="docutils">
<colgroup>
<col width="18%" />
<col width="20%" />
<col width="62%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td>Mode</td>
<td>DPI (approx.)</td>
<td>Intended Usage</td>
</tr>
<tr class="row-even"><td><strong>Cell Mode</strong></td>
<td>150</td>
<td>For single <code class="docutils literal"><span class="pre">Cell</span></code> printing or very small designs.
Patterns will be bigger and more readable.</td>
</tr>
<tr class="row-odd"><td><strong>Design Mode</strong></td>
<td>300</td>
<td>For designs (mostly commposed of wires and cells
outlines).</td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><em>The pdf file size</em>
Be aware that the generated <span class="sc">pdf</span> files are indeed only pixmaps.
So they can grew very large if you select paper format above <code class="docutils literal"><span class="pre">A2</span></code>
or similar.</p>
</div>
<p> <span class="raw-html"><p class="noindent"></p></span>
Saving into an image is subject to the same remarks as for <span class="sc">pdf</span>.</p>
</div>
<div class="section" id="memento-of-shortcuts-in-graphic-mode">
<h3>Memento of Shortcuts in Graphic Mode<a class="headerlink" href="#memento-of-shortcuts-in-graphic-mode" title="Permalink to this headline"></a></h3>
<p>The main application binary is <span class="cb">cgt</span>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="16%" />
<col width="20%" />
<col width="63%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Category</th>
<th class="head">Keys</th>
<th class="head">Action</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td><strong>Moves</strong></td>
<td><div class="first last line-block">
<div class="line"><span class="fboxtt">Up</span>,
<span class="fboxtt">Down</span></div>
<div class="line"><span class="fboxtt">Left</span>,
<span class="fboxtt">Right</span></div>
</div>
</td>
<td>Shift the view in the according direction</td>
</tr>
<tr class="row-odd"><td><strong>Fit</strong></td>
<td><span class="fboxtt">f</span></td>
<td>Fit to the Cell abutment box</td>
</tr>
<tr class="row-even"><td><strong>Refresh</strong></td>
<td><span class="fboxtt">CTRL+L</span></td>
<td>Triggers a complete display redraw</td>
</tr>
<tr class="row-odd"><td><strong>Goto</strong></td>
<td><span class="fboxtt">g</span></td>
<td><em>apperture</em> is the minimum side of the area
displayed around the point to go to. It&#8217;s an
alternative way of setting the zoom level</td>
</tr>
<tr class="row-even"><td rowspan="2"><strong>Zoom</strong></td>
<td><span class="fboxtt">z</span>,
<span class="fboxtt">m</span></td>
<td>Respectively zoom by a 2 factor and <em>unzoom</em>
by a 2 factor</td>
</tr>
<tr class="row-odd"><td><div class="first last line-block">
<div class="line"><a class="reference internal" href="../_images/ComputerMouse.png"><img alt="BigMouse" src="../_images/ComputerMouse.png" style="width: 33.75px; height: 33.75px;" /></a></div>
<div class="line">Area Zoom</div>
</div>
</td>
<td>You can perform a zoom to an area.
Define the zoom area by <em>holding down the left
mouse button</em> while moving the mouse.</td>
</tr>
<tr class="row-even"><td rowspan="3"><strong>Selection</strong></td>
<td><div class="first last line-block">
<div class="line"><a class="reference internal" href="../_images/ComputerMouse.png"><img alt="BigMouse" src="../_images/ComputerMouse.png" style="width: 33.75px; height: 33.75px;" /></a></div>
<div class="line">Area Selection</div>
</div>
</td>
<td>You can select displayed objects under an area.
Define the selection area by <em>holding down the
right mouse button</em> while moving the mouse.</td>
</tr>
<tr class="row-odd"><td><div class="first last line-block">
<div class="line"><a class="reference internal" href="../_images/ComputerMouse.png"><img alt="BigMouse" src="../_images/ComputerMouse.png" style="width: 33.75px; height: 33.75px;" /></a></div>
<div class="line">Toggle Selection</div>
</div>
</td>
<td>You can toggle the selection of one object under
the mouse position by pressing <span class="fboxtt">CTRL</span> and
pressing down <em>the right mouse button</em>. A popup
list of what&#8217;s under the position shows up into
which you can toggle the selection state of one
item.</td>
</tr>
<tr class="row-even"><td><span class="fboxtt">S</span></td>
<td>Toggle the selection visibility</td>
</tr>
<tr class="row-odd"><td><strong>Controller</strong></td>
<td><span class="fboxtt">CTRL+I</span></td>
<td><p class="first">Show/hide the controller window.</p>
<p class="last">It&#8217;s the Swiss Army Knife of the viewer.
From it, you can fine-control the display and
inspect almost everything in your design.</p>
</td>
</tr>
<tr class="row-even"><td rowspan="2"><strong>Rulers</strong></td>
<td><span class="fboxtt">k</span>,
<span class="fboxtt">ESC</span></td>
<td>One stroke on <span class="fboxtt">k</span> enters the ruler mode, in
which you can draw one ruler. You can exit the
ruler mode by pressing <span class="fboxtt">ESC</span>. Once in ruler
mode, the first click on the <em>left mouse button</em>
sets the ruler&#8217;s starting point and the second
click the ruler&#8217;s end point. The second click
exits automatically the ruler mode.</td>
</tr>
<tr class="row-odd"><td><span class="fboxtt">K</span></td>
<td>Clears all the drawn rulers</td>
</tr>
<tr class="row-even"><td><strong>Print</strong></td>
<td><span class="fboxtt">CTRL+P</span></td>
<td>Currently rather crude. It&#8217;s a direct copy of
what&#8217;s displayed in pixels. So the resulting
picture will be a little blurred due to
anti-aliasing mechanism.</td>
</tr>
<tr class="row-odd"><td rowspan="3"><strong>Open/Close</strong></td>
<td><span class="fboxtt">CTRL+O</span></td>
<td>Opens a new design. The design name must be
given without path or extention.</td>
</tr>
<tr class="row-even"><td><span class="fboxtt">CTRL+W</span></td>
<td>Close the current viewer window, but do not quit
the application.</td>
</tr>
<tr class="row-odd"><td><span class="fboxtt">CTRL+Q</span></td>
<td><cite>CTRL+Q</cite> quit the application
(closing all windows).</td>
</tr>
<tr class="row-even"><td rowspan="2"><strong>Hierarchy</strong></td>
<td><span class="fboxtt">CTRL+Down</span></td>
<td>Go one hierarchy level down. That is, if there
is an <em>instance</em> under the cursor position, load
it&#8217;s <em>model</em> Cell in place of the current one.</td>
</tr>
<tr class="row-odd"><td><span class="fboxtt">CTRL+Up</span></td>
<td>Go one hierarchy level up. if we have entered
the current model through <span class="fboxtt">CTRL+Down</span>
reload the previous model (the one
in which this model is instanciated).</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="cgt-command-line-options">
<h3>Cgt Command Line Options<a class="headerlink" href="#cgt-command-line-options" title="Permalink to this headline"></a></h3>
<p>Appart from the obvious <code class="docutils literal"><span class="pre">--text</span></code> options, all can be used for text and graphical mode.</p>
<table border="1" class="docutils">
<colgroup>
<col width="38%" />
<col width="62%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Arguments</th>
<th class="head">Meaning</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td><cite>-t|&#8211;text</cite></td>
<td>Instruct <span class="cb">cgt</span> to run in text mode.</td>
</tr>
<tr class="row-odd"><td><cite>-L|&#8211;log-mode</cite></td>
<td>Disable the uses of <span class="sc">ansi</span> escape sequence on
the <span class="cb">tty</span>. Useful when the output is
redirected to a file.</td>
</tr>
<tr class="row-even"><td><cite>-c &lt;cell&gt;|&#8211;cell=&lt;cell&gt;</cite></td>
<td>The name of the design to load, without
leading path or extention.</td>
</tr>
<tr class="row-odd"><td><cite>-g|&#8211;load-global</cite></td>
<td>Reload a global routing solution from disk.
The file containing the solution must be named
<cite>&lt;cell&gt;.kgr</cite>.</td>
</tr>
<tr class="row-even"><td><cite>&#8211;save-global</cite></td>
<td>Save the global routing solution, into a file
named <cite>&lt;design&gt;.kgr</cite>.</td>
</tr>
<tr class="row-odd"><td><cite>-e &lt;ratio&gt;|&#8211;edge=&lt;ratio&gt;</cite></td>
<td>Change the edge capacity for the global
router, between 0 and 1 (<span class="sc">Knik</span>).</td>
</tr>
<tr class="row-even"><td><cite>-G|&#8211;global-route</cite></td>
<td>Run the global router (<span class="sc">Knik</span>).</td>
</tr>
<tr class="row-odd"><td><cite>-R|&#8211;detailed-route</cite></td>
<td>Run the detailed router (<span class="sc">Kite</span>).</td>
</tr>
<tr class="row-even"><td><cite>-s|&#8211;save-design=&lt;routed&gt;</cite></td>
<td>The design into which the routed layout will
be saved. It is strongly recommanded to choose
a different name from the source (unrouted)
design.</td>
</tr>
<tr class="row-odd"><td><cite>&#8211;events-limit=&lt;count&gt;</cite></td>
<td>The maximal number of events after which the
router will stops. This is mainly a failsafe
against looping. The limit is sets to 4
millions of iteration which should suffice to
any design of <cite>100K</cite>. gates. For bigger
designs you may wants to increase this limit.</td>
</tr>
<tr class="row-even"><td><cite>&#8211;stratus-script=&lt;module&gt;</cite></td>
<td>Run the Python/Stratus script <code class="docutils literal"><span class="pre">module</span></code>.
See <a class="reference internal" href="#python-scripts-in-cgt">Python Scripts in Cgt</a>.</td>
</tr>
</tbody>
</table>
<p></p>
<p>Some Examples :</p>
<ul>
<li><p class="first">Run both global and detailed router, then save the routed design :</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&gt;</span> <span class="n">cgt</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span><span class="n">t</span> <span class="o">-</span><span class="n">G</span> <span class="o">-</span><span class="n">R</span> <span class="o">--</span><span class="n">cell</span><span class="o">=</span><span class="n">design</span> <span class="o">--</span><span class="n">save</span><span class="o">-</span><span class="n">design</span><span class="o">=</span><span class="n">design_kite</span>
</pre></div>
</div>
</li>
<li><p class="first">Load a previous global solution, run the detailed router, then save the
routed design :</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&gt;</span> <span class="n">cgt</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span><span class="n">t</span> <span class="o">--</span><span class="n">load</span><span class="o">-</span><span class="k">global</span> <span class="o">-</span><span class="n">R</span> <span class="o">--</span><span class="n">cell</span><span class="o">=</span><span class="n">design</span> <span class="o">--</span><span class="n">save</span><span class="o">-</span><span class="n">design</span><span class="o">=</span><span class="n">design_kite</span>
</pre></div>
</div>
</li>
<li><p class="first">Run the global router, then save the global routing solution :</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&gt;</span> <span class="n">cgt</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span><span class="n">t</span> <span class="o">-</span><span class="n">G</span> <span class="o">--</span><span class="n">save</span><span class="o">-</span><span class="k">global</span> <span class="o">--</span><span class="n">cell</span><span class="o">=</span><span class="n">design</span>
</pre></div>
</div>
</li>
</ul>
</div>
<div class="section" id="miscellaneous-settings">
<h3>Miscellaneous Settings<a class="headerlink" href="#miscellaneous-settings" title="Permalink to this headline"></a></h3>
<table border="1" class="docutils">
<colgroup>
<col width="46%" />
<col width="21%" />
<col width="33%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Parameter Identifier</th>
<th class="head">Type</th>
<th class="head">Default</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td colspan="3"><strong>Verbosity/Log Parameters</strong></td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.info</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
<tr class="row-even"><td colspan="2">Enable display of <em>info</em> level message
(<span class="cb">cinfo</span> stream)</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.bug</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
<tr class="row-even"><td colspan="2">Enable display of <em>bug</em> level message
(<span class="cb">cbug</span> stream), messages can be a little
scarry</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.logMode</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
<tr class="row-even"><td colspan="2">If enabled, assume that the output device
is not a <code class="docutils literal"><span class="pre">tty</span></code> and suppress any escaped
sequences</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.verboseLevel1</span></code></td>
<td>TypeBool</td>
<td><span class="cb">True</span></td>
</tr>
<tr class="row-even"><td colspan="2">First level of verbosity, disable level 2</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.verboseLevel2</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
<tr class="row-even"><td colspan="2">Second level of verbosity</td>
</tr>
<tr class="row-odd"><td colspan="3"><strong>Development/Debug Parameters</strong></td>
</tr>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">misc.minTraceLevel</span></code></td>
<td>TypeInt</td>
<td><span class="cb">0</span></td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.maxTraceLevel</span></code></td>
<td>TypeInt</td>
<td><span class="cb">0</span></td>
</tr>
<tr class="row-even"><td colspan="2">Display trace information <em>between</em> those two
levels (<span class="cb">cdebug</span> stream)</td>
</tr>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.catchCore</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
<tr class="row-even"><td colspan="2">By default, <span class="cb">cgt</span> do not dump core.
To generate one set this flag to <span class="cb">True</span></td>
</tr>
</tbody>
</table>
<p></p>
</div>
</div>
<div class="section" id="the-controller">
<span id="id2"></span><h2>The Controller<a class="headerlink" href="#the-controller" title="Permalink to this headline"></a></h2>
<p>The <em>Controller</em> window is composed of seven tabs:</p>
<ol class="arabic simple">
<li><a class="reference internal" href="#the-look-tab">The Look Tab</a> to select the display style.</li>
<li><a class="reference internal" href="#the-filter-tab">The Filter Tab</a> the hierarchical levels to be displayed, the look of
rubbers and the dimension units.</li>
<li><a class="reference internal" href="#the-layers-go-tab">The Layers&amp;Go Tab</a> to selectively hide/display layers.</li>
<li><a class="reference internal" href="#the-netlist-tab">The Netlist Tab</a> to browse through the <em>netlist</em>. Works in association
with the <em>Selection</em> tab.</li>
<li><a class="reference internal" href="#the-selection-tab">The Selection Tab</a> allow to view all the currently selected elements.</li>
<li><a class="reference internal" href="#the-inspector-tab">The Inspector Tab</a> browse through either the DataBase, the Cell or
the current selection.</li>
<li><a class="reference internal" href="#the-settings-tab">The Settings Tab</a> access all the tool&#8217;s configuration settings.</li>
</ol>
<div class="section" id="the-look-tab">
<span id="id3"></span><h3>The Look Tab<a class="headerlink" href="#the-look-tab" title="Permalink to this headline"></a></h3>
<p>You can select how the layout will be displayed. There is a special one
<code class="docutils literal"><span class="pre">Printer.Coriolis</span></code> specifically designed for <a class="reference internal" href="#printing-snapshots">Printing &amp; Snapshots</a>.
You should select it prior to calling the print or snapshot dialog boxes.</p>
<p> <a class="reference internal" href="../_images/Controller-Look-1.png"><img alt="Controller Look, Snapshot 1" class="align-middle" src="../_images/Controller-Look-1.png" style="width: 80%;" /></a> </p>
<p></p>
</div>
<div class="section" id="the-filter-tab">
<span id="id4"></span><h3>The Filter Tab<a class="headerlink" href="#the-filter-tab" title="Permalink to this headline"></a></h3>
<p>The filter tab let you select what hierarchical levels of your design will be
displayed. Hierarchy level are numbered top-down: the level 0 correspond to
the top-level cell, the level one to the instances of the top-level Cell and
so on.</p>
<p>There are also check boxes to enable/disable the processing of Terminal Cell,
Master Cells and Compnents. The processing of Terminal Cell (hierarchy leaf
cells) is disabled by default when you load a hierarchical design and enabled
when you load a single Cell.</p>
<p>You can choose what kind of form to give to the rubbers and the type of
unit used to display coordinates.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p><em>What are Rubbers:</em> <span class="sc">Hurricane</span> uses <em>Rubbers</em> to materialize
physical gaps in net topology. That is, if some wires are missing to
connect two or more parts of net, a <em>rubber</em> will be drawn between them
to signal the gap.</p>
<p class="last">For example, after the detailed routing no <em>rubbers</em> should remains.
They have been made <em>very</em> visibles as big violet lines...</p>
</div>
<p> <a class="reference internal" href="../_images/Controller-Filter-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Filter-1.png" style="width: 80%;" /></a> </p>
<p></p>
</div>
<div class="section" id="the-layers-go-tab">
<span id="id5"></span><h3>The Layers&amp;Go Tab<a class="headerlink" href="#the-layers-go-tab" title="Permalink to this headline"></a></h3>
<p>Control the individual display of all <em>layers</em> and <em>Gos</em>.</p>
<ul class="simple">
<li><em>Layers</em> correspond to a true physical layer. From a <span class="sc">Hurricane</span> point of
view they are all the <em>BasicLayers</em> (could be matched to GDSII).</li>
<li><em>Gos</em> stands from <em>Graphical Objects</em>, they are drawings that have no
physical existence but are added by the various tools to display extra
information. One good exemple is the density map of the detailed router,
to easily locate congested areas.</li>
</ul>
<p>For each layer/Go there are two check boxes:</p>
<ul class="simple">
<li>The normal one triggers the display.</li>
<li>The red-outlined allows objects of that layer to be selectable or not.</li>
</ul>
<p> <a class="reference internal" href="../_images/Controller-LayersGos-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-LayersGos-1.png" style="width: 80%;" /></a> </p>
</div>
<div class="section" id="the-netlist-tab">
<span id="id6"></span><h3>The Netlist Tab<a class="headerlink" href="#the-netlist-tab" title="Permalink to this headline"></a></h3>
<p>The <em>Netlist</em> tab shows the list of nets... By default the tab is not
<em>synched</em> with the displayed Cell. To see the nets you must check the
<strong>Sync Netlist</strong> checkbox. You can narrow the set of displayed nets by
using the filter pattern (supports regular expressions).</p>
<p>An very useful feature is to enable the <strong>Sync Selection</strong>, which will
automatically select all the components of the selected net(s). You can
select multiple nets. In the figure the net <code class="docutils literal"><span class="pre">auxsc35</span></code> is selected and
is highlited in the <em>Viewer</em>.</p>
<p> <a class="reference internal" href="../_images/Controller-Netlist-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Netlist-1.png" style="width: 80%;" /></a>
<a class="reference internal" href="../_images/Viewer-Netlist-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Viewer-Netlist-1.png" style="width: 80%;" /></a> </p>
</div>
<div class="section" id="the-selection-tab">
<span id="id7"></span><h3>The Selection Tab<a class="headerlink" href="#the-selection-tab" title="Permalink to this headline"></a></h3>
<p>The <em>Selection</em> tab list all the components currently selecteds. They
can be filtered thanks to the filter pattern.</p>
<p>Used in conjunction with the <em>Netlist</em> <strong>Sync Selection</strong> you will all see
all the components part of <em>net</em>.</p>
<p>In this list, you can toggle individually the selection of component by
pressing the <code class="docutils literal"><span class="pre">t</span></code> key. When unselected in this way a component is not
removed from the the selection list but instead displayed in red italic.
To see where a component is you may make it blink by repeatedly press
the <code class="docutils literal"><span class="pre">t</span></code> key...</p>
<p> <a class="reference internal" href="../_images/Controller-Selection-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Selection-1.png" style="width: 80%;" /></a> </p>
</div>
<div class="section" id="the-inspector-tab">
<span id="id8"></span><h3>The Inspector Tab<a class="headerlink" href="#the-inspector-tab" title="Permalink to this headline"></a></h3>
<p>This tab is very useful, but mostly for <span class="sc">Coriolis</span> developpers. It allows
to browse through the live DataBase. The <em>Inspector</em> provide three entry points:</p>
<ul class="simple">
<li><strong>DataBase</strong>: Starts from the whole <span class="sc">Hurricane</span> DataBase.</li>
<li><strong>Cell</strong>: Inspect the currently loaded Cell.</li>
<li><strong>Selection</strong>: Inspect the object currently highlited in the <em>Selection</em> tab.</li>
</ul>
<p>Once an entry point has been activated, you may recursively expore all
it&#8217;s fields using the right/left arrows.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><em>Do not put your fingers in the socket:</em> when inspecting
anything, do not modify the DataBase. If any object under inspection
is deleted, you will crash the application...</p>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><em>Implementation Detail:</em> the inspector support is done with
<code class="docutils literal"><span class="pre">Slot</span></code>, <code class="docutils literal"><span class="pre">Record</span></code> and <code class="docutils literal"><span class="pre">getString()</span></code>.</p>
</div>
<p> <a class="reference internal" href="../_images/Controller-Inspector-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Inspector-1.png" style="width: 80%;" /></a>
<a class="reference internal" href="../_images/Controller-Inspector-2.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Inspector-2.png" style="width: 80%;" /></a>
<a class="reference internal" href="../_images/Controller-Inspector-3.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Inspector-3.png" style="width: 80%;" /></a> </p>
</div>
<div class="section" id="the-settings-tab">
<span id="id9"></span><h3>The Settings Tab<a class="headerlink" href="#the-settings-tab" title="Permalink to this headline"></a></h3>
<p>Here comes the description of the <em>Settings</em> tab.</p>
<p> <a class="reference internal" href="../_images/Controller-Settings-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Settings-1.png" style="width: 80%;" /></a> </p>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="ScriptsPlugins.html" class="btn btn-neutral float-right" title="Python Interface for Hurricane / Coriolis" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="Configuration.html" class="btn btn-neutral" title="Coriolis Configuration &amp; Initialisation" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<table class="footer1">
<tr>
<td class="LFooter"><small>
Generated by <a href="http://sphinx-doc.org/">Sphinx</a>
using a <a href="https://readthedocs.org">RTD</a> theme on May 14, 2018.
</small></td>
<td class="RFooter"></td>
</tr>
</table>
<table class="footer2">
<tr>
<td class="LFooter">Coriolis 2 Documentation</td>
<td class="RFooter"><small>
&copy; Copyright 2000-2018, UPMC.
</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>