Forgotten HTML files in PythonTutorial.

This commit is contained in:
Jean-Paul Chaput 2018-03-19 18:14:38 +01:00
parent d4913dfb22
commit d9ac21e594
4 changed files with 2324 additions and 0 deletions

View File

@ -0,0 +1,447 @@
<!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>9. Advanced Topics &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="Hurricane+Python Tutorial" href="index.html"/>
<link rel="next" title="Stratus Reference" href="../Stratus/Stratus.html"/>
<link rel="prev" title="8. Tool Engines (CRL Core)" href="ToolEngines.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"><a class="reference internal" href="../UsersGuide/index.html">Coriolis User&#8217;s Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/LicenseCredits.html">Credits &amp; License</a></li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Releases.html">Release Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1475">Release 1.0.1475</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1963">Release 1.0.1963</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-2049">Release 1.0.2049</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-0-1">Release v2.0.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-1">Release v2.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-2"><strong>Release v2.2</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Installation.html">Installation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#fixed-directory-tree">Fixed Directory Tree</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#building-coriolis">Building Coriolis</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#building-the-devel-branch">Building the Devel Branch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#additionnal-requirement-under-macos">Additionnal Requirement under <span class="sc">MacOS</span></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#packaging-coriolis">Packaging Coriolis</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#hooking-up-into-alliance">Hooking up into <span class="sc">Alliance</span></a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#setting-up-the-environment-coriolisenv-py">Setting up the Environment (coriolisEnv.py)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Configuration.html">Coriolis Configuration &amp; Initialisation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#general-software-architecture">General Software Architecture</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#first-stage-technology-selection">First Stage: Technology Selection</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#second-stage-technology-configuration-loading">Second Stage: Technology Configuration Loading</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#configuration-helpers">Configuration Helpers</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#alliance-helper"><span class="sc">Alliance</span> Helper</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#tools-configuration-helpers">Tools Configuration Helpers</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#hacking-the-configuration-files">Hacking the Configuration Files</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ViewerTools.html">CGT - The Graphical Interface</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#viewer-tools">Viewer &amp; Tools</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#stratus-netlist-capture"><span class="sc">Stratus</span> Netlist Capture</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-hurricane-data-base">The <span class="sc">Hurricane</span> Data-Base</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#synthetizing-and-loading-a-design">Synthetizing and loading a design</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#etesian-placer">Etesian &#8211; Placer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#knik-global-router">Knik &#8211; Global Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#kite-detailed-router">Kite &#8211; Detailed Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#executing-python-scripts-in-cgt">Executing Python Scripts in Cgt</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#printing-snapshots">Printing &amp; Snapshots</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#memento-of-shortcuts-in-graphic-mode">Memento of Shortcuts in Graphic Mode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#cgt-command-line-options">Cgt Command Line Options</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#miscellaneous-settings">Miscellaneous Settings</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-controller">The Controller</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-look-tab">The Look Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-filter-tab">The Filter Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-layers-go-tab">The Layers&amp;Go Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-netlist-tab">The Netlist Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-selection-tab">The Selection Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-inspector-tab">The Inspector Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-settings-tab">The Settings Tab</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html">Python Interface for <span class="sc">Hurricane</span> / <span class="sc">Coriolis</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#plugins">Plugins</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#chip-placement">Chip Placement</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#clock-tree">Clock Tree</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#recursive-save-rsave">Recursive-Save (RSave)</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#a-simple-example-am2901">A Simple Example: AM2901</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Hurricane+Python Tutorial</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Introduction.html">1. Introduction</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#terminology">1.1 Terminology</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#generalities">1.2 Generalities</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#various-kinds-of-constructors">1.3 Various Kinds of Constructors</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Environment.html">2. Setting up the Environment</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Environment.html#setting-up-the-pathes">2.1 Setting up the Pathes</a></li>
<li class="toctree-l3"><a class="reference internal" href="Environment.html#user-s-configurations-file">2.2 User&#8217;s Configurations File</a><ul>
<li class="toctree-l4"><a class="reference internal" href="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="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="CellNetComponent.html">3. Making a Standard Cell &#8211; Layout</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CellNetComponent.html#the-allianceframework-crl-core">3.1 The AllianceFramework (CRL Core)</a></li>
<li class="toctree-l3"><a class="reference internal" href="CellNetComponent.html#session-mechanism-hurricane">3.2 Session Mechanism (Hurricane)</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#the-dbu-measurement-unit">3.4 The DbU Measurement Unit</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#adding-nets-and-components">3.6 Adding Nets and Components</a><ul>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#getting-a-layer">3.6.1 Getting a Layer</a></li>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#creating-a-net">3.6.2 Creating a Net</a></li>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#id1">3.6.3 Creating a Component</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#the-complete-example-file">3.8 The Complete Example File</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Collections.html">4. Manipulating Cells, Nets and Components</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Collections.html#hurricane-collections">4.1 Hurricane Collections</a><ul>
<li class="toctree-l4"><a class="reference internal" href="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="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="CgtScript.html">5. Make a script runnable through <span class="cb">cgt</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="CgtScript.html#using-breakpoints">5.1 Using Breakpoints</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Netlist.html">6. Making a hierarchical Cell &#8211; Netlist</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Netlist.html#creating-an-instance">6.1 Creating an Instance</a></li>
<li class="toctree-l3"><a class="reference internal" href="Netlist.html#id1">6.2 Creating Nets and connecting to Instances</a></li>
<li class="toctree-l3"><a class="reference internal" href="Netlist.html#power-supplies-special-case">6.3 Power supplies special case</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="Netlist.html#id2">6.4.1 Transformation</a></li>
<li class="toctree-l4"><a class="reference internal" href="Netlist.html#placing-an-instance">6.4.2 Placing an Instance</a></li>
<li class="toctree-l4"><a class="reference internal" href="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="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="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="RealDesigns.html">7. Working in real mode</a><ul>
<li class="toctree-l3"><a class="reference internal" href="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="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="ToolEngines.html">8. Tool Engines (CRL Core)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="ToolEngines.html#placer-etesian">8.1 Placer &#8211; Etesian</a></li>
<li class="toctree-l3"><a class="reference internal" href="ToolEngines.html#router-katana">8.1 Router &#8211; Katana</a></li>
<li class="toctree-l3"><a class="reference internal" href="ToolEngines.html#a-complete-example">8.2 A Complete Example</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">9. Advanced Topics</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">9.1 Occurrence</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">9.2 RoutingPads</a></li>
<li class="toctree-l3"><a class="reference internal" href="#hypernets">9.3 HyperNets</a></li>
<li class="toctree-l3"><a class="reference internal" href="#miscellaeous-trans-hierarchical-functions">9.4 Miscellaeous trans-hierarchical functions</a></li>
</ul>
</li>
</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>
<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">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">Hurricane+Python Tutorial</a> &raquo;</li>
<li>9. Advanced Topics</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document">
<div class="section" id="advanced-topics">
<h1>9. Advanced Topics<a class="headerlink" href="#advanced-topics" title="Permalink to this headline"></a></h1>
<p>This is a place holder as well as a reminder to myself to write this part of
the documentation.</p>
<div class="section" id="id1">
<h2>9.1 Occurrence<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h2>
<p>The trans-hierarchical workhorse.</p>
</div>
<div class="section" id="id2">
<h2>9.2 RoutingPads<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h2>
<p>Unlike the <a class="reference external" href="../../hurricane/classHurricane_1_1Plug.html">Plugs</a> that only make connexions between two <strong>adjacent</strong>
hierarchical levels, <a class="reference external" href="../../hurricane/classHurricane_1_1RoutingPad.html">RoutingPads</a> can refer to a deeply buried terminal.</p>
</div>
<div class="section" id="hypernets">
<h2>9.3 HyperNets<a class="headerlink" href="#hypernets" title="Permalink to this headline"></a></h2>
<p>This class is part of the <em>virtual flattening</em> mechanisms, it allows to
go through all the components of a trans-hierarchical net.</p>
</div>
<div class="section" id="miscellaeous-trans-hierarchical-functions">
<h2>9.4 Miscellaeous trans-hierarchical functions<a class="headerlink" href="#miscellaeous-trans-hierarchical-functions" title="Permalink to this headline"></a></h2>
<p>For a starter, how to get all the leaf cells...</p>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../Stratus/Stratus.html" class="btn btn-neutral float-right" title="Stratus Reference" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="ToolEngines.html" class="btn btn-neutral" title="8. Tool Engines (CRL Core)" 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 Mar 18, 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>

View File

@ -0,0 +1,786 @@
<!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>6. Making a hierarchical Cell Netlist &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="Hurricane+Python Tutorial" href="index.html"/>
<link rel="next" title="7. Working in real mode" href="RealDesigns.html"/>
<link rel="prev" title="5. Make a script runnable through cgt" href="CgtScript.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"><a class="reference internal" href="../UsersGuide/index.html">Coriolis User&#8217;s Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/LicenseCredits.html">Credits &amp; License</a></li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Releases.html">Release Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1475">Release 1.0.1475</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1963">Release 1.0.1963</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-2049">Release 1.0.2049</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-0-1">Release v2.0.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-1">Release v2.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-2"><strong>Release v2.2</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Installation.html">Installation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#fixed-directory-tree">Fixed Directory Tree</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#building-coriolis">Building Coriolis</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#building-the-devel-branch">Building the Devel Branch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#additionnal-requirement-under-macos">Additionnal Requirement under <span class="sc">MacOS</span></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#packaging-coriolis">Packaging Coriolis</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#hooking-up-into-alliance">Hooking up into <span class="sc">Alliance</span></a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#setting-up-the-environment-coriolisenv-py">Setting up the Environment (coriolisEnv.py)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Configuration.html">Coriolis Configuration &amp; Initialisation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#general-software-architecture">General Software Architecture</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#first-stage-technology-selection">First Stage: Technology Selection</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#second-stage-technology-configuration-loading">Second Stage: Technology Configuration Loading</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#configuration-helpers">Configuration Helpers</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#alliance-helper"><span class="sc">Alliance</span> Helper</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#tools-configuration-helpers">Tools Configuration Helpers</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#hacking-the-configuration-files">Hacking the Configuration Files</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ViewerTools.html">CGT - The Graphical Interface</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#viewer-tools">Viewer &amp; Tools</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#stratus-netlist-capture"><span class="sc">Stratus</span> Netlist Capture</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-hurricane-data-base">The <span class="sc">Hurricane</span> Data-Base</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#synthetizing-and-loading-a-design">Synthetizing and loading a design</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#etesian-placer">Etesian &#8211; Placer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#knik-global-router">Knik &#8211; Global Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#kite-detailed-router">Kite &#8211; Detailed Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#executing-python-scripts-in-cgt">Executing Python Scripts in Cgt</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#printing-snapshots">Printing &amp; Snapshots</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#memento-of-shortcuts-in-graphic-mode">Memento of Shortcuts in Graphic Mode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#cgt-command-line-options">Cgt Command Line Options</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#miscellaneous-settings">Miscellaneous Settings</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-controller">The Controller</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-look-tab">The Look Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-filter-tab">The Filter Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-layers-go-tab">The Layers&amp;Go Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-netlist-tab">The Netlist Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-selection-tab">The Selection Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-inspector-tab">The Inspector Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-settings-tab">The Settings Tab</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html">Python Interface for <span class="sc">Hurricane</span> / <span class="sc">Coriolis</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#plugins">Plugins</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#chip-placement">Chip Placement</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#clock-tree">Clock Tree</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#recursive-save-rsave">Recursive-Save (RSave)</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#a-simple-example-am2901">A Simple Example: AM2901</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Hurricane+Python Tutorial</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Introduction.html">1. Introduction</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#terminology">1.1 Terminology</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#generalities">1.2 Generalities</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#various-kinds-of-constructors">1.3 Various Kinds of Constructors</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Environment.html">2. Setting up the Environment</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Environment.html#setting-up-the-pathes">2.1 Setting up the Pathes</a></li>
<li class="toctree-l3"><a class="reference internal" href="Environment.html#user-s-configurations-file">2.2 User&#8217;s Configurations File</a><ul>
<li class="toctree-l4"><a class="reference internal" href="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="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="CellNetComponent.html">3. Making a Standard Cell &#8211; Layout</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CellNetComponent.html#the-allianceframework-crl-core">3.1 The AllianceFramework (CRL Core)</a></li>
<li class="toctree-l3"><a class="reference internal" href="CellNetComponent.html#session-mechanism-hurricane">3.2 Session Mechanism (Hurricane)</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#the-dbu-measurement-unit">3.4 The DbU Measurement Unit</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#adding-nets-and-components">3.6 Adding Nets and Components</a><ul>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#getting-a-layer">3.6.1 Getting a Layer</a></li>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#creating-a-net">3.6.2 Creating a Net</a></li>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#id1">3.6.3 Creating a Component</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#the-complete-example-file">3.8 The Complete Example File</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Collections.html">4. Manipulating Cells, Nets and Components</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Collections.html#hurricane-collections">4.1 Hurricane Collections</a><ul>
<li class="toctree-l4"><a class="reference internal" href="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="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="CgtScript.html">5. Make a script runnable through <span class="cb">cgt</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="CgtScript.html#using-breakpoints">5.1 Using Breakpoints</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">6. Making a hierarchical Cell &#8211; Netlist</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#creating-an-instance">6.1 Creating an Instance</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id1">6.2 Creating Nets and connecting to Instances</a></li>
<li class="toctree-l3"><a class="reference internal" href="#power-supplies-special-case">6.3 Power supplies special case</a></li>
<li class="toctree-l3"><a class="reference internal" href="#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="#id2">6.4.1 Transformation</a></li>
<li class="toctree-l4"><a class="reference internal" href="#placing-an-instance">6.4.2 Placing an Instance</a></li>
<li class="toctree-l4"><a class="reference internal" href="#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="#nets-regular-wiring">6.4.4 Nets &#8211; Regular wiring</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#the-complete-example-file">6.5 The Complete Example File</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="RealDesigns.html">7. Working in real mode</a><ul>
<li class="toctree-l3"><a class="reference internal" href="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="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="ToolEngines.html">8. Tool Engines (CRL Core)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="ToolEngines.html#placer-etesian">8.1 Placer &#8211; Etesian</a></li>
<li class="toctree-l3"><a class="reference internal" href="ToolEngines.html#router-katana">8.1 Router &#8211; Katana</a></li>
<li class="toctree-l3"><a class="reference internal" href="ToolEngines.html#a-complete-example">8.2 A Complete Example</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="AdvancedTopics.html">9. Advanced Topics</a><ul>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#id1">9.1 Occurrence</a></li>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#id2">9.2 RoutingPads</a></li>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#hypernets">9.3 HyperNets</a></li>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#miscellaeous-trans-hierarchical-functions">9.4 Miscellaeous trans-hierarchical functions</a></li>
</ul>
</li>
</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>
<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">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">Hurricane+Python Tutorial</a> &raquo;</li>
<li>6. Making a hierarchical Cell &#8211; Netlist</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document">
<div class="section" id="making-a-hierarchical-cell-netlist">
<h1>6. Making a hierarchical Cell &#8211; Netlist<a class="headerlink" href="#making-a-hierarchical-cell-netlist" title="Permalink to this headline"></a></h1>
<p>To illustrate the topic, we will build the netlist of a fulladder from
standard cell.</p>
<p><a class="reference internal" href="../_images/fulladder-1.png"><img alt="The fulladder netlist" class="align-middle" src="../_images/fulladder-1.png" style="width: 80%;" /></a></p>
<div class="section" id="creating-an-instance">
<h2>6.1 Creating an <a class="reference external" href="../../hurricane/classHurricane_1_1Instance.html">Instance</a><a class="headerlink" href="#creating-an-instance" title="Permalink to this headline"></a></h2>
<p>Creating an <a class="reference external" href="../../hurricane/classHurricane_1_1Instance.html">Instance</a> is straigthforward, the constructor needs only three
parameters:</p>
<ol class="arabic simple">
<li>The <a class="reference external" href="../../hurricane/classHurricane_1_1Cell.html">Cell</a> <strong>into which</strong> the instance is to be created.</li>
<li>The name of the instance.</li>
<li>The <strong>master cell</strong>, the <a class="reference external" href="../../hurricane/classHurricane_1_1Cell.html">Cell</a> model it refers to. The master cell
will be part of the hierarchical level just below the <code class="docutils literal"><span class="pre">fulladder</span></code>
cell.</li>
</ol>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Do not confuse the cell the instance is create into (<code class="docutils literal"><span class="pre">fulladder</span></code>)
and the cells it refers to (the <em>master cell</em> <code class="docutils literal"><span class="pre">xr2_x2</span></code>).</p>
</div>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="n">af</span> <span class="o">=</span> <span class="n">AllianceFramework</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
<span class="n">xr2_x2</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">getCell</span><span class="p">(</span> <span class="s1">&#39;xr2_x1&#39;</span><span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="n">fulladder</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">createCell</span><span class="p">(</span> <span class="s1">&#39;fulladder&#39;</span> <span class="p">)</span>
<span class="n">xr2_1</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;xr2_1&#39;</span><span class="p">,</span> <span class="n">xr2_x2</span> <span class="p">)</span>
</pre></div>
</div>
</div>
<div class="section" id="id1">
<h2>6.2 Creating Nets and connecting to Instances<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h2>
<p>An <a class="reference external" href="../../hurricane/classHurricane_1_1Instance.html">Instance</a> as one <a class="reference external" href="../../hurricane/classHurricane_1_1Plug.html">Plug</a> for each external net of the <em>master cell</em>.
The plug allows to create a <strong>logical</strong> connexion bewteen a <a class="reference external" href="../../hurricane/classHurricane_1_1Net.html">Net</a> of
<code class="docutils literal"><span class="pre">fulladder</span></code> and a net from an <a class="reference external" href="../../hurricane/classHurricane_1_1Instance.html">Instance</a> <em>master cell</em>.</p>
<p>A plug is somewhat equivalent to an <em>instance terminal</em> in others
well known databases.</p>
<p>Therefore, a plug is related to two nets:</p>
<ol class="arabic simple">
<li>The net of the <em>master cell</em> it is linked to. Obviously that
net cannot be changed. You can access the master net with the
function <code class="docutils literal"><span class="pre">plug.getMasterNet()</span></code>.</li>
<li>The net of <code class="docutils literal"><span class="pre">fulladder</span></code> the plug is connected to. This can
be set, it is how we build the netlist. To set the net, use
the function <code class="docutils literal"><span class="pre">plug.setNet(</span> <span class="pre">net</span> <span class="pre">)</span></code>. It the argument is <code class="docutils literal"><span class="pre">None</span></code>,
the plug is <em>disconnected</em>.</li>
</ol>
<p>To find the plug of an instance associated to a given net in
the <em>master cell</em>, use <code class="docutils literal"><span class="pre">instance.getPlug(</span> <span class="pre">masterNet</span> <span class="pre">)</span></code>.
The <code class="docutils literal"><span class="pre">masterNet</span></code> argument being an object of class net (not
it&#8217;s name).</p>
<p>Building the <span class="cb">a</span> net of <code class="docutils literal"><span class="pre">fulladder</span></code>:</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="n">a</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s2">&quot;a&quot;</span> <span class="p">)</span>
<span class="n">a</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s2">&quot;i0&quot;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">a</span> <span class="p">)</span>
<span class="n">a2_1</span> <span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s2">&quot;i0&quot;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">a</span> <span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p><strong>Limitation of Hurricane Netlists.</strong> There is no explicit
terminal object in the <span class="sc">Hurricane</span> database. Plugs are
generated <em>on the fly</em> for each <em>external net</em> of the
instance. One important consequence is that a <em>net</em>
cannot appear on the interface as two differently named
terminals (sometimes referred as <em>weekly connected</em>
terminals). There is a strict bijection between external
nets and plugs.</p>
<p class="last">While it may be restrictive, it enforce cleaner designs
and make it possible for the <a class="reference external" href="../../hurricane/classHurricane_1_1HyperNet.html">HyperNet</a> concept/class.</p>
</div>
</div>
<div class="section" id="power-supplies-special-case">
<h2>6.3 Power supplies special case<a class="headerlink" href="#power-supplies-special-case" title="Permalink to this headline"></a></h2>
<p>For supplies, it may be tedious to connect the <a class="reference external" href="../../hurricane/classHurricane_1_1Plug.html">Plugs</a> of each cell one by one
(and create a lot of uneeded objects). To avoid that, we may use <strong>Named
connections</strong>. If a signal in <code class="docutils literal"><span class="pre">fulladder</span></code> is set to <em>global</em>, then it will
be considered as connected to any signal with the <em>same name</em> and <em>global</em> in
the master cell of the instances.</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="n">vdd</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s2">&quot;vdd&quot;</span> <span class="p">)</span>
<span class="n">vdd</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">vdd</span><span class="o">.</span><span class="n">setGlobal</span> <span class="p">(</span> <span class="bp">True</span> <span class="p">)</span> <span class="c1"># Will be connected to all the instances.</span>
</pre></div>
</div>
</div>
<div class="section" id="creating-the-physical-view-of-a-cell-netlist">
<h2>6.4 Creating the physical view of a Cell netlist<a class="headerlink" href="#creating-the-physical-view-of-a-cell-netlist" title="Permalink to this headline"></a></h2>
<p>Even if loaded in the viewer, an Instance will not be displayed
until it is placed.</p>
<div class="section" id="id2">
<h3>6.4.1 Transformation<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h3>
<p>To place an Instance, we apply a <a class="reference external" href="../../hurricane/classHurricane_1_1Transformation.html">Transformation</a> to the coordinate system
of the <em>master cell</em>. A transformation is composed of two operations :</p>
<ol class="arabic simple">
<li>An <a class="reference external" href="../../hurricane/classHurricane_1_1Orientation.html">Orientation</a>, which can be a symmetry or a rotation (or a combination
of those two). The Orientation <strong>is applied first</strong> to the coordinate
system of the <em>master cell</em>. The complete list of Orientation and their
codes are given on the Orientation documentation page.</li>
<li>A <strong>Translation</strong>, applied in second. Translation are represented by
<a class="reference external" href="../../hurricane/classHurricane_1_1Point.html">Points</a>.</li>
</ol>
<p>The transformation is a change of coordinate system, be aware that if the
abutment box lower left corner of the <em>master</em> cell is <strong>not</strong> at <code class="docutils literal"><span class="pre">(0,0)</span></code>
the result of the Transformation may not be what you expect. To simplificate
the computation of the transformation of an instance, always place the
lower left corner of the abutment box at <code class="docutils literal"><span class="pre">(0,0)</span></code></p>
</div>
<div class="section" id="placing-an-instance">
<h3>6.4.2 Placing an Instance<a class="headerlink" href="#placing-an-instance" title="Permalink to this headline"></a></h3>
<p>Assuming that we want to place the cells of the <code class="docutils literal"><span class="pre">fulladder</span></code> into two rows,
that the abutment box lower left corner is at <code class="docutils literal"><span class="pre">(0,0)</span></code> (same for the
<code class="docutils literal"><span class="pre">xr2_x2</span></code> <em>master cell</em> layout). Here is the code to place the <code class="docutils literal"><span class="pre">xr2_1</span></code>
instance to left of the second row.</p>
<p>Setting the translation on an <a class="reference external" href="../../hurricane/classHurricane_1_1Instance.html">Instance</a> is not enough to make it be displayed,
we also must set it&#8217;s <em>placement status</em> to <code class="docutils literal"><span class="pre">Instance.PlacementStatus.PLACED</span></code>.</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="n">xr2_1</span><span class="o">.</span><span class="n">setTransformation</span><span class="p">(</span> <span class="n">Transformation</span><span class="p">(</span> <span class="n">DbU</span><span class="o">.</span><span class="n">fromLambda</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">DbU</span><span class="o">.</span><span class="n">fromLambda</span><span class="p">(</span><span class="mf">100.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">Transformation</span><span class="o">.</span><span class="n">Orientation</span><span class="o">.</span><span class="n">MY</span> <span class="p">)</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">setPlacementStatus</span><span class="p">(</span> <span class="n">Instance</span><span class="o">.</span><span class="n">PlacementStatus</span><span class="o">.</span><span class="n">PLACED</span> <span class="p">)</span>
</pre></div>
</div>
</div>
<div class="section" id="nets-from-plugs-to-routingpads">
<h3>6.4.3 Nets &#8211; From Plugs to RoutingPads<a class="headerlink" href="#nets-from-plugs-to-routingpads" title="Permalink to this headline"></a></h3>
<p>As was stated before, <a class="reference external" href="../../hurricane/classHurricane_1_1Plug.html">Plugs</a> represent a logical connexion between two
levels of hierarchy. To make the physical connexion to the <em>master net</em>
in the instance, we now must create, in the <code class="docutils literal"><span class="pre">fulladder</span></code>, a special
component which is a kind of <em>reference</em> to a component of the
<em>master net</em> (in the master cell).</p>
<p>The so called <em>special component</em> is a <a class="reference external" href="../../hurricane/classHurricane_1_1RoutingPad.html">RoutingPad</a>.</p>
<p>The <code class="docutils literal"><span class="pre">RoutingPad</span></code> can be considered as an equivalent to <code class="docutils literal"><span class="pre">pin</span></code> in others
well known databases.</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="n">rp</span> <span class="o">=</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">a</span>
<span class="p">,</span> <span class="n">Occurrence</span><span class="p">(</span> <span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s2">&quot;i0&quot;</span><span class="p">))</span> <span class="p">)</span>
<span class="p">,</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">BiggestArea</span> <span class="p">)</span>
</pre></div>
</div>
<p>For the second parameter, we must pass an <a class="reference external" href="../../hurricane/classHurricane_1_1Occurrence.html">Occurrence</a>. Occurrence objects will
be explained in detail later, for now, suffice to say that we must construct the
Occurrence object with one parameter : the <a class="reference external" href="../../hurricane/classHurricane_1_1Plug.html">Plug</a> for which we want to create a
physical connexion.</p>
<p>The <a class="reference external" href="../../hurricane/classHurricane_1_1RoutingPad.html">RoutingPad</a> <code class="docutils literal"><span class="pre">rp</span></code> will be a component of the <code class="docutils literal"><span class="pre">a</span></code> net.</p>
<p>The third argument ask the constructor of the <a class="reference external" href="../../hurricane/classHurricane_1_1RoutingPad.html">RoutingPad</a> to select in the
master net, the component which has the biggest area.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p><strong>Component selection.</strong> Not all the components of a net can be
selected for connexion through a <a class="reference external" href="../../hurricane/classHurricane_1_1RoutingPad.html">RoutingPad</a>. The candidates must
have been flagged with the <a class="reference external" href="../../hurricane/classHurricane_1_1NetExternalComponents.html">NetExternalComponents</a> class.</p>
<p class="last">See <a class="reference external" href="./CellNetComponent.html#id1">3.6.3 Creating a Component</a>.</p>
</div>
</div>
<div class="section" id="nets-regular-wiring">
<h3>6.4.4 Nets &#8211; Regular wiring<a class="headerlink" href="#nets-regular-wiring" title="Permalink to this headline"></a></h3>
<p>After the creation of the <a class="reference external" href="../../hurricane/classHurricane_1_1RoutingPad.html">RoutingPads</a>, the wiring is to be created with
ordinary layout components (<a class="reference external" href="../../hurricane/classHurricane_1_1Horizontal.html">Horizontal</a>, <a class="reference external" href="../../hurricane/classHurricane_1_1Vertical.html">Vertical</a> and <a class="reference external" href="../../hurricane/classHurricane_1_1Contact.html">Contact</a> possibly
articulated). Here is the complete code for net <code class="docutils literal"><span class="pre">a</span></code>. We made an articulated
layout where contacts are created over <a class="reference external" href="../../hurricane/classHurricane_1_1RoutingPad.html">RoutingPads</a> then segments over
contacts.</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="c1"># Build wiring for a.</span>
<span class="c1"># Create RoutingPads first.</span>
<span class="n">rp1</span> <span class="o">=</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">a</span>
<span class="p">,</span> <span class="n">Occurrence</span><span class="p">(</span> <span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s2">&quot;i0&quot;</span><span class="p">))</span> <span class="p">)</span>
<span class="p">,</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">BiggestArea</span> <span class="p">)</span>
<span class="n">rp2</span> <span class="o">=</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">a</span>
<span class="p">,</span> <span class="n">Occurrence</span><span class="p">(</span> <span class="n">a2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s2">&quot;i0&quot;</span><span class="p">))</span> <span class="p">)</span>
<span class="p">,</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">BiggestArea</span> <span class="p">)</span>
<span class="c1"># Then regular wiring.</span>
<span class="n">contact1</span> <span class="o">=</span> <span class="n">Contact</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">rp1</span><span class="p">,</span> <span class="n">via12</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span><span class="o">-</span><span class="mf">15.0</span><span class="p">)</span> <span class="p">)</span>
<span class="n">contact2</span> <span class="o">=</span> <span class="n">Contact</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">rp2</span><span class="p">,</span> <span class="n">via12</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">10.0</span><span class="p">)</span> <span class="p">)</span>
<span class="n">turn</span> <span class="o">=</span> <span class="n">Contact</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">a</span> <span class="p">,</span> <span class="n">via23</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">10.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">35.0</span><span class="p">)</span> <span class="p">)</span>
<span class="n">Horizontal</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">contact2</span><span class="p">,</span> <span class="n">turn</span> <span class="p">,</span> <span class="n">metal2</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">35.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">2.0</span><span class="p">)</span> <span class="p">)</span>
<span class="n">Vertical</span> <span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">turn</span> <span class="p">,</span> <span class="n">contact1</span> <span class="p">,</span> <span class="n">metal3</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">10.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">2.0</span><span class="p">)</span> <span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">In order to better see the layout of the wiring only, open the
<code class="docutils literal"><span class="pre">Controller</span></code> and in the <span class="fboxtt">Filter</span> tab, uncheck
<span class="fboxtt">Process Terminal Cells</span>.</p>
</div>
</div>
</div>
<div class="section" id="the-complete-example-file">
<h2>6.5 The Complete Example File<a class="headerlink" href="#the-complete-example-file" title="Permalink to this headline"></a></h2>
<p>The example file <code class="docutils literal"><span class="pre">fulladder.py</span></code> can be found in the <code class="docutils literal"><span class="pre">share/doc/coriolis2/examples/scripts/</span></code>
directory (under the the root of the <span class="sc">Coriolis</span> installation).</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/python</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">Hurricane</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">CRL</span> <span class="kn">import</span> <span class="o">*</span>
<span class="k">def</span> <span class="nf">toDbU</span> <span class="p">(</span> <span class="n">l</span> <span class="p">):</span> <span class="k">return</span> <span class="n">DbU</span><span class="o">.</span><span class="n">fromLambda</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">doBreak</span> <span class="p">(</span> <span class="n">level</span><span class="p">,</span> <span class="n">message</span> <span class="p">):</span>
<span class="n">UpdateSession</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">Breakpoint</span><span class="o">.</span><span class="n">stop</span><span class="p">(</span> <span class="n">level</span><span class="p">,</span> <span class="n">message</span> <span class="p">)</span>
<span class="n">UpdateSession</span><span class="o">.</span><span class="n">open</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">buildFulladder</span> <span class="p">(</span> <span class="n">editor</span> <span class="p">):</span>
<span class="c1"># Get the Framework and all the master cells.</span>
<span class="n">af</span> <span class="o">=</span> <span class="n">AllianceFramework</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
<span class="n">xr2_x2</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">getCell</span><span class="p">(</span> <span class="s1">&#39;xr2_x1&#39;</span><span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="n">a2_x2</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">getCell</span><span class="p">(</span> <span class="s1">&#39;a2_x2&#39;</span> <span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="n">o2_x2</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">getCell</span><span class="p">(</span> <span class="s1">&#39;o2_x2&#39;</span> <span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="n">UpdateSession</span><span class="o">.</span><span class="n">open</span><span class="p">()</span>
<span class="n">fulladder</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">createCell</span><span class="p">(</span> <span class="s1">&#39;fulladder&#39;</span> <span class="p">)</span>
<span class="n">fulladder</span><span class="o">.</span><span class="n">setAbutmentBox</span><span class="p">(</span> <span class="n">Box</span><span class="p">(</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">0.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">0.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">90.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">100.0</span><span class="p">)</span> <span class="p">)</span> <span class="p">)</span>
<span class="k">if</span> <span class="n">editor</span><span class="p">:</span>
<span class="n">UpdateSession</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">editor</span><span class="o">.</span><span class="n">setCell</span><span class="p">(</span> <span class="n">fulladder</span> <span class="p">)</span>
<span class="n">editor</span><span class="o">.</span><span class="n">fit</span><span class="p">()</span>
<span class="n">UpdateSession</span><span class="o">.</span><span class="n">open</span><span class="p">()</span>
<span class="c1"># Create Instances.</span>
<span class="n">a2_1</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;a2_1&#39;</span><span class="p">,</span> <span class="n">a2_x2</span> <span class="p">)</span>
<span class="n">a2_2</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;a2_2&#39;</span><span class="p">,</span> <span class="n">a2_x2</span> <span class="p">)</span>
<span class="n">xr2_1</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;xr2_1&#39;</span><span class="p">,</span> <span class="n">xr2_x2</span> <span class="p">)</span>
<span class="n">xr2_2</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;xr2_2&#39;</span><span class="p">,</span> <span class="n">xr2_x2</span> <span class="p">)</span>
<span class="n">o2_1</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;o2_1&#39;</span><span class="p">,</span> <span class="n">o2_x2</span> <span class="p">)</span>
<span class="c1"># Create Nets.</span>
<span class="n">vss</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s2">&quot;vss&quot;</span> <span class="p">)</span>
<span class="n">vss</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">vss</span><span class="o">.</span><span class="n">setGlobal</span> <span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">vdd</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s2">&quot;vdd&quot;</span> <span class="p">)</span>
<span class="n">vdd</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">vdd</span><span class="o">.</span><span class="n">setGlobal</span> <span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">cin</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s2">&quot;cin&quot;</span> <span class="p">)</span>
<span class="n">cin</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">xr2_2</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">cin</span> <span class="p">)</span>
<span class="n">a2_2</span> <span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">cin</span> <span class="p">)</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span> <span class="p">)</span>
<span class="n">a</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">a</span> <span class="p">)</span>
<span class="n">a2_1</span> <span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">a</span> <span class="p">)</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span> <span class="p">)</span>
<span class="n">b</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">b</span> <span class="p">)</span>
<span class="n">a2_1</span> <span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">b</span> <span class="p">)</span>
<span class="n">sout_1</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;sout_1&#39;</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span> <span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">sout_1</span> <span class="p">)</span>
<span class="n">xr2_2</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">sout_1</span> <span class="p">)</span>
<span class="n">a2_2</span> <span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">sout_1</span> <span class="p">)</span>
<span class="n">carry_1</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;carry_1&#39;</span> <span class="p">)</span>
<span class="n">a2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span> <span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">carry_1</span> <span class="p">)</span>
<span class="n">o2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">o2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">carry_1</span> <span class="p">)</span>
<span class="n">carry_2</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;carry_2&#39;</span> <span class="p">)</span>
<span class="n">a2_2</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span> <span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">carry_2</span> <span class="p">)</span>
<span class="n">o2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">o2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">carry_2</span> <span class="p">)</span>
<span class="n">sout</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;sout&#39;</span> <span class="p">)</span>
<span class="n">sout</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">xr2_2</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">sout</span> <span class="p">)</span>
<span class="n">cout</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;cout&#39;</span> <span class="p">)</span>
<span class="n">cout</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">o2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">o2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">cout</span> <span class="p">)</span>
<span class="c1"># Instances placement.</span>
<span class="n">a2_1</span><span class="o">.</span><span class="n">setTransformation</span><span class="p">(</span> <span class="n">Transformation</span><span class="p">(</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">0.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">0.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">Transformation</span><span class="o">.</span><span class="n">Orientation</span><span class="o">.</span><span class="n">ID</span> <span class="p">)</span> <span class="p">)</span>
<span class="n">a2_1</span><span class="o">.</span><span class="n">setPlacementStatus</span><span class="p">(</span> <span class="n">Instance</span><span class="o">.</span><span class="n">PlacementStatus</span><span class="o">.</span><span class="n">PLACED</span> <span class="p">)</span>
<span class="n">doBreak</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;Placed a2_1&#39;</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">setTransformation</span><span class="p">(</span> <span class="n">Transformation</span><span class="p">(</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">100.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">Transformation</span><span class="o">.</span><span class="n">Orientation</span><span class="o">.</span><span class="n">MY</span> <span class="p">)</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">setPlacementStatus</span><span class="p">(</span> <span class="n">Instance</span><span class="o">.</span><span class="n">PlacementStatus</span><span class="o">.</span><span class="n">PLACED</span> <span class="p">)</span>
<span class="n">doBreak</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;Placed xr2_1&#39;</span> <span class="p">)</span>
<span class="n">a2_2</span><span class="o">.</span><span class="n">setTransformation</span><span class="p">(</span> <span class="n">Transformation</span><span class="p">(</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">25.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">Transformation</span><span class="o">.</span><span class="n">Orientation</span><span class="o">.</span><span class="n">ID</span> <span class="p">)</span> <span class="p">)</span>
<span class="n">a2_2</span><span class="o">.</span><span class="n">setPlacementStatus</span><span class="p">(</span> <span class="n">Instance</span><span class="o">.</span><span class="n">PlacementStatus</span><span class="o">.</span><span class="n">PLACED</span> <span class="p">)</span>
<span class="n">doBreak</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;Placed a2_2&#39;</span> <span class="p">)</span>
<span class="n">xr2_2</span><span class="o">.</span><span class="n">setTransformation</span><span class="p">(</span> <span class="n">Transformation</span><span class="p">(</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">45.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">100.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">Transformation</span><span class="o">.</span><span class="n">Orientation</span><span class="o">.</span><span class="n">MY</span> <span class="p">)</span> <span class="p">)</span>
<span class="n">xr2_2</span><span class="o">.</span><span class="n">setPlacementStatus</span><span class="p">(</span> <span class="n">Instance</span><span class="o">.</span><span class="n">PlacementStatus</span><span class="o">.</span><span class="n">PLACED</span> <span class="p">)</span>
<span class="n">doBreak</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;Placed xr2_2&#39;</span> <span class="p">)</span>
<span class="n">o2_1</span><span class="o">.</span><span class="n">setTransformation</span><span class="p">(</span> <span class="n">Transformation</span><span class="p">(</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">65.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">Transformation</span><span class="o">.</span><span class="n">Orientation</span><span class="o">.</span><span class="n">ID</span> <span class="p">)</span> <span class="p">)</span>
<span class="n">o2_1</span><span class="o">.</span><span class="n">setPlacementStatus</span><span class="p">(</span> <span class="n">Instance</span><span class="o">.</span><span class="n">PlacementStatus</span><span class="o">.</span><span class="n">PLACED</span> <span class="p">)</span>
<span class="n">doBreak</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;Placed o2_1&#39;</span> <span class="p">)</span>
<span class="c1"># Add filler cells.</span>
<span class="n">tie_x0</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">getCell</span><span class="p">(</span> <span class="s1">&#39;tie_x0&#39;</span><span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="n">rowend_x0</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">getCell</span><span class="p">(</span> <span class="s1">&#39;rowend_x0&#39;</span><span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="n">filler_1</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;filler_1&#39;</span><span class="p">,</span> <span class="n">tie_x0</span> <span class="p">)</span>
<span class="n">filler_2</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;filler_2&#39;</span><span class="p">,</span> <span class="n">rowend_x0</span> <span class="p">)</span>
<span class="n">filler_1</span><span class="o">.</span><span class="n">setTransformation</span><span class="p">(</span> <span class="n">Transformation</span><span class="p">(</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">50.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">Transformation</span><span class="o">.</span><span class="n">Orientation</span><span class="o">.</span><span class="n">ID</span> <span class="p">)</span> <span class="p">)</span>
<span class="n">filler_1</span><span class="o">.</span><span class="n">setPlacementStatus</span><span class="p">(</span> <span class="n">Instance</span><span class="o">.</span><span class="n">PlacementStatus</span><span class="o">.</span><span class="n">PLACED</span> <span class="p">)</span>
<span class="n">filler_2</span><span class="o">.</span><span class="n">setTransformation</span><span class="p">(</span> <span class="n">Transformation</span><span class="p">(</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">60.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">)</span>
<span class="p">,</span> <span class="n">Transformation</span><span class="o">.</span><span class="n">Orientation</span><span class="o">.</span><span class="n">ID</span> <span class="p">)</span> <span class="p">)</span>
<span class="n">filler_2</span><span class="o">.</span><span class="n">setPlacementStatus</span><span class="p">(</span> <span class="n">Instance</span><span class="o">.</span><span class="n">PlacementStatus</span><span class="o">.</span><span class="n">PLACED</span> <span class="p">)</span>
<span class="n">doBreak</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;Filler cell placeds&#39;</span> <span class="p">)</span>
<span class="c1"># Getting the layers.</span>
<span class="n">technology</span> <span class="o">=</span> <span class="n">DataBase</span><span class="o">.</span><span class="n">getDB</span><span class="p">()</span><span class="o">.</span><span class="n">getTechnology</span><span class="p">()</span>
<span class="n">metal2</span> <span class="o">=</span> <span class="n">technology</span><span class="o">.</span><span class="n">getLayer</span><span class="p">(</span> <span class="s2">&quot;METAL2&quot;</span> <span class="p">)</span>
<span class="n">metal3</span> <span class="o">=</span> <span class="n">technology</span><span class="o">.</span><span class="n">getLayer</span><span class="p">(</span> <span class="s2">&quot;METAL3&quot;</span> <span class="p">)</span>
<span class="n">via12</span> <span class="o">=</span> <span class="n">technology</span><span class="o">.</span><span class="n">getLayer</span><span class="p">(</span> <span class="s2">&quot;VIA12&quot;</span> <span class="p">)</span>
<span class="n">via23</span> <span class="o">=</span> <span class="n">technology</span><span class="o">.</span><span class="n">getLayer</span><span class="p">(</span> <span class="s2">&quot;VIA23&quot;</span> <span class="p">)</span>
<span class="c1"># Build wiring for a.</span>
<span class="c1"># Create RoutingPads first.</span>
<span class="n">rp1</span> <span class="o">=</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">a</span>
<span class="p">,</span> <span class="n">Occurrence</span><span class="p">(</span> <span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s2">&quot;i0&quot;</span><span class="p">))</span> <span class="p">)</span>
<span class="p">,</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">BiggestArea</span> <span class="p">)</span>
<span class="n">rp2</span> <span class="o">=</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">a</span>
<span class="p">,</span> <span class="n">Occurrence</span><span class="p">(</span> <span class="n">a2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s2">&quot;i0&quot;</span><span class="p">))</span> <span class="p">)</span>
<span class="p">,</span> <span class="n">RoutingPad</span><span class="o">.</span><span class="n">BiggestArea</span> <span class="p">)</span>
<span class="c1"># Then regular wiring.</span>
<span class="n">contact1</span> <span class="o">=</span> <span class="n">Contact</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">rp1</span><span class="p">,</span> <span class="n">via12</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span><span class="o">-</span><span class="mf">15.0</span><span class="p">)</span> <span class="p">)</span>
<span class="n">contact2</span> <span class="o">=</span> <span class="n">Contact</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">rp2</span><span class="p">,</span> <span class="n">via12</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">0.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">10.0</span><span class="p">)</span> <span class="p">)</span>
<span class="n">turn</span> <span class="o">=</span> <span class="n">Contact</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">a</span> <span class="p">,</span> <span class="n">via23</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">10.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span> <span class="mf">35.0</span><span class="p">)</span> <span class="p">)</span>
<span class="n">Horizontal</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">contact2</span><span class="p">,</span> <span class="n">turn</span> <span class="p">,</span> <span class="n">metal2</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">35.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">2.0</span><span class="p">)</span> <span class="p">)</span>
<span class="n">Vertical</span> <span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">turn</span> <span class="p">,</span> <span class="n">contact1</span> <span class="p">,</span> <span class="n">metal3</span><span class="p">,</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">10.0</span><span class="p">),</span> <span class="n">toDbU</span><span class="p">(</span><span class="mf">2.0</span><span class="p">)</span> <span class="p">)</span>
<span class="n">UpdateSession</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">af</span><span class="o">.</span><span class="n">saveCell</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">ScriptMain</span> <span class="p">(</span> <span class="o">**</span><span class="n">kw</span> <span class="p">):</span>
<span class="n">editor</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="n">kw</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s1">&#39;editor&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">kw</span><span class="p">[</span><span class="s1">&#39;editor&#39;</span><span class="p">]:</span>
<span class="n">editor</span> <span class="o">=</span> <span class="n">kw</span><span class="p">[</span><span class="s1">&#39;editor&#39;</span><span class="p">]</span>
<span class="n">buildFulladder</span><span class="p">(</span> <span class="n">editor</span> <span class="p">)</span>
<span class="k">return</span> <span class="bp">True</span>
</pre></div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="RealDesigns.html" class="btn btn-neutral float-right" title="7. Working in real mode" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="CgtScript.html" class="btn btn-neutral" title="5. Make a script runnable through cgt" 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 Mar 18, 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>

View File

@ -0,0 +1,464 @@
<!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>7. Working in real mode &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="Hurricane+Python Tutorial" href="index.html"/>
<link rel="next" title="8. Tool Engines (CRL Core)" href="ToolEngines.html"/>
<link rel="prev" title="6. Making a hierarchical Cell Netlist" href="Netlist.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"><a class="reference internal" href="../UsersGuide/index.html">Coriolis User&#8217;s Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/LicenseCredits.html">Credits &amp; License</a></li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Releases.html">Release Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1475">Release 1.0.1475</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1963">Release 1.0.1963</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-2049">Release 1.0.2049</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-0-1">Release v2.0.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-1">Release v2.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-2"><strong>Release v2.2</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Installation.html">Installation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#fixed-directory-tree">Fixed Directory Tree</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#building-coriolis">Building Coriolis</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#building-the-devel-branch">Building the Devel Branch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#additionnal-requirement-under-macos">Additionnal Requirement under <span class="sc">MacOS</span></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#packaging-coriolis">Packaging Coriolis</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#hooking-up-into-alliance">Hooking up into <span class="sc">Alliance</span></a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#setting-up-the-environment-coriolisenv-py">Setting up the Environment (coriolisEnv.py)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Configuration.html">Coriolis Configuration &amp; Initialisation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#general-software-architecture">General Software Architecture</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#first-stage-technology-selection">First Stage: Technology Selection</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#second-stage-technology-configuration-loading">Second Stage: Technology Configuration Loading</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#configuration-helpers">Configuration Helpers</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#alliance-helper"><span class="sc">Alliance</span> Helper</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#tools-configuration-helpers">Tools Configuration Helpers</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#hacking-the-configuration-files">Hacking the Configuration Files</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ViewerTools.html">CGT - The Graphical Interface</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#viewer-tools">Viewer &amp; Tools</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#stratus-netlist-capture"><span class="sc">Stratus</span> Netlist Capture</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-hurricane-data-base">The <span class="sc">Hurricane</span> Data-Base</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#synthetizing-and-loading-a-design">Synthetizing and loading a design</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#etesian-placer">Etesian &#8211; Placer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#knik-global-router">Knik &#8211; Global Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#kite-detailed-router">Kite &#8211; Detailed Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#executing-python-scripts-in-cgt">Executing Python Scripts in Cgt</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#printing-snapshots">Printing &amp; Snapshots</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#memento-of-shortcuts-in-graphic-mode">Memento of Shortcuts in Graphic Mode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#cgt-command-line-options">Cgt Command Line Options</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#miscellaneous-settings">Miscellaneous Settings</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-controller">The Controller</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-look-tab">The Look Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-filter-tab">The Filter Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-layers-go-tab">The Layers&amp;Go Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-netlist-tab">The Netlist Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-selection-tab">The Selection Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-inspector-tab">The Inspector Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-settings-tab">The Settings Tab</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html">Python Interface for <span class="sc">Hurricane</span> / <span class="sc">Coriolis</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#plugins">Plugins</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#chip-placement">Chip Placement</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#clock-tree">Clock Tree</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#recursive-save-rsave">Recursive-Save (RSave)</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#a-simple-example-am2901">A Simple Example: AM2901</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Hurricane+Python Tutorial</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Introduction.html">1. Introduction</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#terminology">1.1 Terminology</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#generalities">1.2 Generalities</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#various-kinds-of-constructors">1.3 Various Kinds of Constructors</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Environment.html">2. Setting up the Environment</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Environment.html#setting-up-the-pathes">2.1 Setting up the Pathes</a></li>
<li class="toctree-l3"><a class="reference internal" href="Environment.html#user-s-configurations-file">2.2 User&#8217;s Configurations File</a><ul>
<li class="toctree-l4"><a class="reference internal" href="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="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="CellNetComponent.html">3. Making a Standard Cell &#8211; Layout</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CellNetComponent.html#the-allianceframework-crl-core">3.1 The AllianceFramework (CRL Core)</a></li>
<li class="toctree-l3"><a class="reference internal" href="CellNetComponent.html#session-mechanism-hurricane">3.2 Session Mechanism (Hurricane)</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#the-dbu-measurement-unit">3.4 The DbU Measurement Unit</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#adding-nets-and-components">3.6 Adding Nets and Components</a><ul>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#getting-a-layer">3.6.1 Getting a Layer</a></li>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#creating-a-net">3.6.2 Creating a Net</a></li>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#id1">3.6.3 Creating a Component</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#the-complete-example-file">3.8 The Complete Example File</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Collections.html">4. Manipulating Cells, Nets and Components</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Collections.html#hurricane-collections">4.1 Hurricane Collections</a><ul>
<li class="toctree-l4"><a class="reference internal" href="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="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="CgtScript.html">5. Make a script runnable through <span class="cb">cgt</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="CgtScript.html#using-breakpoints">5.1 Using Breakpoints</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Netlist.html">6. Making a hierarchical Cell &#8211; Netlist</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Netlist.html#creating-an-instance">6.1 Creating an Instance</a></li>
<li class="toctree-l3"><a class="reference internal" href="Netlist.html#id1">6.2 Creating Nets and connecting to Instances</a></li>
<li class="toctree-l3"><a class="reference internal" href="Netlist.html#power-supplies-special-case">6.3 Power supplies special case</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="Netlist.html#id2">6.4.1 Transformation</a></li>
<li class="toctree-l4"><a class="reference internal" href="Netlist.html#placing-an-instance">6.4.2 Placing an Instance</a></li>
<li class="toctree-l4"><a class="reference internal" href="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="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="Netlist.html#the-complete-example-file">6.5 The Complete Example File</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">7. Working in real mode</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#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="#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="ToolEngines.html">8. Tool Engines (CRL Core)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="ToolEngines.html#placer-etesian">8.1 Placer &#8211; Etesian</a></li>
<li class="toctree-l3"><a class="reference internal" href="ToolEngines.html#router-katana">8.1 Router &#8211; Katana</a></li>
<li class="toctree-l3"><a class="reference internal" href="ToolEngines.html#a-complete-example">8.2 A Complete Example</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="AdvancedTopics.html">9. Advanced Topics</a><ul>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#id1">9.1 Occurrence</a></li>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#id2">9.2 RoutingPads</a></li>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#hypernets">9.3 HyperNets</a></li>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#miscellaeous-trans-hierarchical-functions">9.4 Miscellaeous trans-hierarchical functions</a></li>
</ul>
</li>
</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>
<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">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">Hurricane+Python Tutorial</a> &raquo;</li>
<li>7. Working in real mode</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document">
<div class="section" id="working-in-real-mode">
<h1>7. Working in real mode<a class="headerlink" href="#working-in-real-mode" title="Permalink to this headline"></a></h1>
<p>The <a class="reference external" href="../../crlcore/classCRL_1_1AllianceFramework.html">AllianceFramework</a> only manage <em>symbolic</em> layout as <span class="sc">Alliance</span> do.
But <span class="sc">Coriolis</span> is also able to work directly in <em>real</em> mode, meaning
that distances will be expresseds in microns instead of lambdas.</p>
<p>The <em>real</em> mode will be illustrated by working with the <a class="reference external" href="https://www.eda.ncsu.edu/wiki/FreePDK45:Contents">FreePDK45</a>.</p>
<p>We will assume that the <a class="reference external" href="https://www.eda.ncsu.edu/wiki/FreePDK45:Contents">FreePDK45</a> archives is installed under:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">home</span><span class="o">/</span><span class="n">dks</span><span class="o">/</span>
</pre></div>
</div>
<div class="section" id="loading-a-lef-file">
<h2>7.1 Loading a <span class="sc">lef</span> file<a class="headerlink" href="#loading-a-lef-file" title="Permalink to this headline"></a></h2>
<p>Importing a <span class="sc">lef</span> file is simple, you just call the static function
<code class="docutils literal"><span class="pre">LefImport.load()</span></code>. Multiple <span class="sc">lef</span> file can be imported one after
another.</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="c1"># You must set &quot;DKsdir&quot; to where you did install the NCSU FreePDK 45nm DK.</span>
<span class="n">DKsdir</span> <span class="o">=</span> <span class="s1">&#39;/home/dks&#39;</span>
<span class="n">library</span> <span class="o">=</span> <span class="n">LefImport</span><span class="o">.</span><span class="n">load</span><span class="p">(</span> <span class="n">DKsdir</span> <span class="o">+</span> <span class="s1">&#39;/FreePDK45/osu_soc/lib/files/gscl45nm.lef&#39;</span> <span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>Technology checking.</strong> The first imported <span class="sc">lef</span> file must contains the
technology. The technology described in the <span class="sc">lef</span> file will be checked
against the one configured in the running instance of <span class="sc">Coriolis</span> to look
for any discrepencies.</p>
</div>
</div>
<div class="section" id="loading-a-blif-file-yosys">
<h2>7.2 Loading a <span class="sc">blif</span> file &#8211; <span class="sc">Yosys</span><a class="headerlink" href="#loading-a-blif-file-yosys" title="Permalink to this headline"></a></h2>
<p>The <span class="sc">blif</span> format is generated by the <a class="reference external" href="http://www.clifford.at/yosys/">Yosys</a> logic synthetizer. Here again, it is
pretty straightforward: call the static function <code class="docutils literal"><span class="pre">Blif.load()</span></code>. If you did make
your synthesis on a cell library not managed by <a class="reference external" href="../../crlcore/classCRL_1_1AllianceFramework.html">AllianceFramework</a>, For example
the one of the FreePDK45, you must load it prior to calling the <span class="sc">blif</span> loader.</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="n">cell</span> <span class="o">=</span> <span class="n">Blif</span><span class="o">.</span><span class="n">load</span><span class="p">(</span> <span class="s1">&#39;snx&#39;</span> <span class="p">)</span> <span class="c1"># load &quot;snx.blif&quot; in the working directory.</span>
</pre></div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="ToolEngines.html" class="btn btn-neutral float-right" title="8. Tool Engines (CRL Core)" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="Netlist.html" class="btn btn-neutral" title="6. Making a hierarchical Cell Netlist" 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 Mar 18, 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>

View File

@ -0,0 +1,627 @@
<!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>8. Tool Engines (CRL Core) &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="Hurricane+Python Tutorial" href="index.html"/>
<link rel="next" title="9. Advanced Topics" href="AdvancedTopics.html"/>
<link rel="prev" title="7. Working in real mode" href="RealDesigns.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"><a class="reference internal" href="../UsersGuide/index.html">Coriolis User&#8217;s Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/LicenseCredits.html">Credits &amp; License</a></li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Releases.html">Release Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1475">Release 1.0.1475</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1963">Release 1.0.1963</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-2049">Release 1.0.2049</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-0-1">Release v2.0.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-1">Release v2.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-2"><strong>Release v2.2</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Installation.html">Installation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#fixed-directory-tree">Fixed Directory Tree</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#building-coriolis">Building Coriolis</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#building-the-devel-branch">Building the Devel Branch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#additionnal-requirement-under-macos">Additionnal Requirement under <span class="sc">MacOS</span></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#packaging-coriolis">Packaging Coriolis</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#hooking-up-into-alliance">Hooking up into <span class="sc">Alliance</span></a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#setting-up-the-environment-coriolisenv-py">Setting up the Environment (coriolisEnv.py)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Configuration.html">Coriolis Configuration &amp; Initialisation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#general-software-architecture">General Software Architecture</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#first-stage-technology-selection">First Stage: Technology Selection</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#second-stage-technology-configuration-loading">Second Stage: Technology Configuration Loading</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#configuration-helpers">Configuration Helpers</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#alliance-helper"><span class="sc">Alliance</span> Helper</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#tools-configuration-helpers">Tools Configuration Helpers</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#hacking-the-configuration-files">Hacking the Configuration Files</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ViewerTools.html">CGT - The Graphical Interface</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#viewer-tools">Viewer &amp; Tools</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#stratus-netlist-capture"><span class="sc">Stratus</span> Netlist Capture</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-hurricane-data-base">The <span class="sc">Hurricane</span> Data-Base</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#synthetizing-and-loading-a-design">Synthetizing and loading a design</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#etesian-placer">Etesian &#8211; Placer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#knik-global-router">Knik &#8211; Global Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#kite-detailed-router">Kite &#8211; Detailed Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#executing-python-scripts-in-cgt">Executing Python Scripts in Cgt</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#printing-snapshots">Printing &amp; Snapshots</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#memento-of-shortcuts-in-graphic-mode">Memento of Shortcuts in Graphic Mode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#cgt-command-line-options">Cgt Command Line Options</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#miscellaneous-settings">Miscellaneous Settings</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-controller">The Controller</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-look-tab">The Look Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-filter-tab">The Filter Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-layers-go-tab">The Layers&amp;Go Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-netlist-tab">The Netlist Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-selection-tab">The Selection Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-inspector-tab">The Inspector Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-settings-tab">The Settings Tab</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html">Python Interface for <span class="sc">Hurricane</span> / <span class="sc">Coriolis</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#plugins">Plugins</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#chip-placement">Chip Placement</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#clock-tree">Clock Tree</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#recursive-save-rsave">Recursive-Save (RSave)</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#a-simple-example-am2901">A Simple Example: AM2901</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Hurricane+Python Tutorial</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Introduction.html">1. Introduction</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#terminology">1.1 Terminology</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#generalities">1.2 Generalities</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#various-kinds-of-constructors">1.3 Various Kinds of Constructors</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Environment.html">2. Setting up the Environment</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Environment.html#setting-up-the-pathes">2.1 Setting up the Pathes</a></li>
<li class="toctree-l3"><a class="reference internal" href="Environment.html#user-s-configurations-file">2.2 User&#8217;s Configurations File</a><ul>
<li class="toctree-l4"><a class="reference internal" href="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="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="CellNetComponent.html">3. Making a Standard Cell &#8211; Layout</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CellNetComponent.html#the-allianceframework-crl-core">3.1 The AllianceFramework (CRL Core)</a></li>
<li class="toctree-l3"><a class="reference internal" href="CellNetComponent.html#session-mechanism-hurricane">3.2 Session Mechanism (Hurricane)</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#the-dbu-measurement-unit">3.4 The DbU Measurement Unit</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#adding-nets-and-components">3.6 Adding Nets and Components</a><ul>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#getting-a-layer">3.6.1 Getting a Layer</a></li>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#creating-a-net">3.6.2 Creating a Net</a></li>
<li class="toctree-l4"><a class="reference internal" href="CellNetComponent.html#id1">3.6.3 Creating a Component</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="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="CellNetComponent.html#the-complete-example-file">3.8 The Complete Example File</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Collections.html">4. Manipulating Cells, Nets and Components</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Collections.html#hurricane-collections">4.1 Hurricane Collections</a><ul>
<li class="toctree-l4"><a class="reference internal" href="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="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="CgtScript.html">5. Make a script runnable through <span class="cb">cgt</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="CgtScript.html#using-breakpoints">5.1 Using Breakpoints</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Netlist.html">6. Making a hierarchical Cell &#8211; Netlist</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Netlist.html#creating-an-instance">6.1 Creating an Instance</a></li>
<li class="toctree-l3"><a class="reference internal" href="Netlist.html#id1">6.2 Creating Nets and connecting to Instances</a></li>
<li class="toctree-l3"><a class="reference internal" href="Netlist.html#power-supplies-special-case">6.3 Power supplies special case</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="Netlist.html#id2">6.4.1 Transformation</a></li>
<li class="toctree-l4"><a class="reference internal" href="Netlist.html#placing-an-instance">6.4.2 Placing an Instance</a></li>
<li class="toctree-l4"><a class="reference internal" href="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="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="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="RealDesigns.html">7. Working in real mode</a><ul>
<li class="toctree-l3"><a class="reference internal" href="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="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 current"><a class="current reference internal" href="#">8. Tool Engines (CRL Core)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#placer-etesian">8.1 Placer &#8211; Etesian</a></li>
<li class="toctree-l3"><a class="reference internal" href="#router-katana">8.1 Router &#8211; Katana</a></li>
<li class="toctree-l3"><a class="reference internal" href="#a-complete-example">8.2 A Complete Example</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="AdvancedTopics.html">9. Advanced Topics</a><ul>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#id1">9.1 Occurrence</a></li>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#id2">9.2 RoutingPads</a></li>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#hypernets">9.3 HyperNets</a></li>
<li class="toctree-l3"><a class="reference internal" href="AdvancedTopics.html#miscellaeous-trans-hierarchical-functions">9.4 Miscellaeous trans-hierarchical functions</a></li>
</ul>
</li>
</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>
<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">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">Hurricane+Python Tutorial</a> &raquo;</li>
<li>8. Tool Engines (CRL Core)</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document">
<div class="section" id="tool-engines-crl-core">
<h1>8. Tool Engines (CRL Core)<a class="headerlink" href="#tool-engines-crl-core" title="Permalink to this headline"></a></h1>
<p>The <a class="reference external" href="../../crlcore/classCRL_1_1ToolEngine.html">ToolEngine</a> class is the base class for all tools developpeds in
<span class="sc">Coriolis</span>. In the rest of the tutorial we will use the names <code class="docutils literal"><span class="pre">tool</span></code>
or <code class="docutils literal"><span class="pre">engine</span></code> as synonyms.</p>
<div class="section" id="placer-etesian">
<h2>8.1 Placer &#8211; Etesian<a class="headerlink" href="#placer-etesian" title="Permalink to this headline"></a></h2>
<p>To run the placer, create the <span class="sc">Etesian</span> engine, then call the <code class="docutils literal"><span class="pre">place()</span></code>
function.</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">Etesian</span>
<span class="c1"># [...]</span>
<span class="n">etesian</span> <span class="o">=</span> <span class="n">Etesian</span><span class="o">.</span><span class="n">EtesianEngine</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">cell</span><span class="p">)</span>
<span class="n">etesian</span><span class="o">.</span><span class="n">place</span><span class="p">()</span>
</pre></div>
</div>
<p>You can configure the placer in two ways:</p>
<ol class="arabic">
<li><p class="first">Prior to the creation of the engine, setup an abutment for the cell.
The placer will fit the cells into that area. If the area is too
small, it will issue an error.</p>
</li>
<li><p class="first">Setup <span class="sc">Etesian</span> parameters through the <code class="docutils literal"><span class="pre">settings.py</span></code> configuration
file. For example:</p>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="n">parametersTable</span> <span class="o">=</span> \
<span class="p">(</span> <span class="p">(</span><span class="s2">&quot;etesian.effort&quot;</span> <span class="p">,</span> <span class="n">TypeEnumerate</span> <span class="p">,</span> <span class="mi">2</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;etesian.uniformDensity&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="bp">True</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;etesian.spaceMargin&#39;</span> <span class="p">,</span> <span class="n">TypePercentage</span><span class="p">,</span> <span class="mf">3.0</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;etesian.aspectRatio&#39;</span> <span class="p">,</span> <span class="n">TypePercentage</span><span class="p">,</span> <span class="mf">100.0</span> <span class="p">)</span>
<span class="p">)</span>
</pre></div>
</div>
<p>With this setup, the cells will be spread uniformally over the
area (<code class="docutils literal"><span class="pre">etesian.uniformDensity</span></code>), with <code class="docutils literal"><span class="pre">3.0%</span></code> of free space
added and an aspect ratio of <code class="docutils literal"><span class="pre">100%</span></code> (square shape).</p>
</li>
</ol>
</div>
<div class="section" id="router-katana">
<h2>8.1 Router &#8211; Katana<a class="headerlink" href="#router-katana" title="Permalink to this headline"></a></h2>
<p>Like for <span class="sc">Etesian</span>, you have to create the engine on the cell then call
the sequence of functions detailed below.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>Kite vs. Katana.</strong> There are currently two router in <span class="sc">Coriolis</span>,
<span class="sc">Kite</span> is the old one and digital only. <span class="sc">Katana</span> is a re-implementation
with support for mixed routing (digital <strong>and</strong> analog).
Until <span class="sc">Katana</span> is fully implemented we keep both of them.</p>
</div>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">Anabatic</span>
<span class="kn">import</span> <span class="nn">Katana</span>
<span class="c1"># [...]</span>
<span class="n">katana</span> <span class="o">=</span> <span class="n">Katana</span><span class="o">.</span><span class="n">KatanaEngine</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">cell</span><span class="p">)</span>
<span class="n">katana</span><span class="o">.</span><span class="n">digitalInit</span> <span class="p">()</span>
<span class="n">katana</span><span class="o">.</span><span class="n">runGlobalRouter</span> <span class="p">()</span>
<span class="n">katana</span><span class="o">.</span><span class="n">loadGlobalRouting</span><span class="p">(</span> <span class="n">Anabatic</span><span class="o">.</span><span class="n">EngineLoadGrByNet</span> <span class="p">)</span>
<span class="n">katana</span><span class="o">.</span><span class="n">layerAssign</span> <span class="p">(</span> <span class="n">Anabatic</span><span class="o">.</span><span class="n">EngineNoNetLayerAssign</span> <span class="p">)</span>
<span class="n">katana</span><span class="o">.</span><span class="n">runNegociate</span> <span class="p">(</span> <span class="n">Katana</span><span class="o">.</span><span class="n">Flags</span><span class="o">.</span><span class="n">NoFlags</span> <span class="p">)</span>
</pre></div>
</div>
</div>
<div class="section" id="a-complete-example">
<h2>8.2 A Complete Example<a class="headerlink" href="#a-complete-example" title="Permalink to this headline"></a></h2>
<p>The example file <code class="docutils literal"><span class="pre">toolengines.py</span></code> can be found in the <code class="docutils literal"><span class="pre">share/doc/coriolis2/examples/scripts/</span></code>
directory (under the the root of the <span class="sc">Coriolis</span> installation).</p>
<p>This script automatically place and route the <code class="docutils literal"><span class="pre">fulladder</span></code> netlist as seen
previously. The call to the <a class="reference external" href="../../crlcore/classCRL_1_1ToolEngine.html">ToolEngines</a> is made inside the new function
<code class="docutils literal"><span class="pre">placeAndRoute()</span></code>.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">As the <code class="docutils literal"><span class="pre">ToolEngine</span></code> take care of opening and closing <a class="reference external" href="../../hurricane/classHurricane_1_1UpdateSession.html">UpdateSession</a>, we
do not need the wrapper function <code class="docutils literal"><span class="pre">doBreak()</span></code> around the breakpoints.
We directly call <a class="reference external" href="../../hurricane/classHurricane_1_1Breakpoint.html">Breakpoint</a>.</p>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">The space margin for this example is very high (<code class="docutils literal"><span class="pre">30%</span></code>), it&#8217;s only
because it&#8217;s too small for the placer to run correctly. For normal
case it is around <code class="docutils literal"><span class="pre">3%</span></code>.</p>
</div>
<div class="highlight-Python"><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/python</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">Hurricane</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">CRL</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">import</span> <span class="nn">Etesian</span>
<span class="kn">import</span> <span class="nn">Anabatic</span>
<span class="kn">import</span> <span class="nn">Katana</span>
<span class="c1"># Everybody needs it.</span>
<span class="n">af</span> <span class="o">=</span> <span class="n">AllianceFramework</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">toDbU</span> <span class="p">(</span> <span class="n">l</span> <span class="p">):</span> <span class="k">return</span> <span class="n">DbU</span><span class="o">.</span><span class="n">fromLambda</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">buildFulladder</span> <span class="p">(</span> <span class="n">editor</span> <span class="p">):</span>
<span class="c1"># Get the Framework and all the master cells.</span>
<span class="n">xr2_x2</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">getCell</span><span class="p">(</span> <span class="s1">&#39;xr2_x1&#39;</span><span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="n">a2_x2</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">getCell</span><span class="p">(</span> <span class="s1">&#39;a2_x2&#39;</span> <span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="n">o2_x2</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">getCell</span><span class="p">(</span> <span class="s1">&#39;o2_x2&#39;</span> <span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="n">UpdateSession</span><span class="o">.</span><span class="n">open</span><span class="p">()</span>
<span class="n">fulladder</span> <span class="o">=</span> <span class="n">af</span><span class="o">.</span><span class="n">createCell</span><span class="p">(</span> <span class="s1">&#39;fulladder&#39;</span> <span class="p">)</span>
<span class="c1"># Create Instances.</span>
<span class="n">a2_1</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;a2_1&#39;</span><span class="p">,</span> <span class="n">a2_x2</span> <span class="p">)</span>
<span class="n">a2_2</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;a2_2&#39;</span><span class="p">,</span> <span class="n">a2_x2</span> <span class="p">)</span>
<span class="n">xr2_1</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;xr2_1&#39;</span><span class="p">,</span> <span class="n">xr2_x2</span> <span class="p">)</span>
<span class="n">xr2_2</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;xr2_2&#39;</span><span class="p">,</span> <span class="n">xr2_x2</span> <span class="p">)</span>
<span class="n">o2_1</span> <span class="o">=</span> <span class="n">Instance</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;o2_1&#39;</span><span class="p">,</span> <span class="n">o2_x2</span> <span class="p">)</span>
<span class="c1"># Create Nets.</span>
<span class="n">vss</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s2">&quot;vss&quot;</span> <span class="p">)</span>
<span class="n">vss</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">vss</span><span class="o">.</span><span class="n">setGlobal</span> <span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">vdd</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s2">&quot;vdd&quot;</span> <span class="p">)</span>
<span class="n">vdd</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">vdd</span><span class="o">.</span><span class="n">setGlobal</span> <span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">cin</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s2">&quot;cin&quot;</span> <span class="p">)</span>
<span class="n">cin</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">xr2_2</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">cin</span> <span class="p">)</span>
<span class="n">a2_2</span> <span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">cin</span> <span class="p">)</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span> <span class="p">)</span>
<span class="n">a</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">a</span> <span class="p">)</span>
<span class="n">a2_1</span> <span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">a</span> <span class="p">)</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span> <span class="p">)</span>
<span class="n">b</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">b</span> <span class="p">)</span>
<span class="n">a2_1</span> <span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">b</span> <span class="p">)</span>
<span class="n">sout_1</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;sout_1&#39;</span> <span class="p">)</span>
<span class="n">xr2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span> <span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">sout_1</span> <span class="p">)</span>
<span class="n">xr2_2</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">sout_1</span> <span class="p">)</span>
<span class="n">a2_2</span> <span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">sout_1</span> <span class="p">)</span>
<span class="n">carry_1</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;carry_1&#39;</span> <span class="p">)</span>
<span class="n">a2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span> <span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">carry_1</span> <span class="p">)</span>
<span class="n">o2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">o2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i1&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">carry_1</span> <span class="p">)</span>
<span class="n">carry_2</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;carry_2&#39;</span> <span class="p">)</span>
<span class="n">a2_2</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">a2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span> <span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">carry_2</span> <span class="p">)</span>
<span class="n">o2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">o2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;i0&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">carry_2</span> <span class="p">)</span>
<span class="n">sout</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;sout&#39;</span> <span class="p">)</span>
<span class="n">sout</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">xr2_2</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">xr2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">sout</span> <span class="p">)</span>
<span class="n">cout</span> <span class="o">=</span> <span class="n">Net</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="s1">&#39;cout&#39;</span> <span class="p">)</span>
<span class="n">cout</span><span class="o">.</span><span class="n">setExternal</span><span class="p">(</span> <span class="bp">True</span> <span class="p">)</span>
<span class="n">o2_1</span><span class="o">.</span><span class="n">getPlug</span><span class="p">(</span> <span class="n">o2_x2</span><span class="o">.</span><span class="n">getNet</span><span class="p">(</span><span class="s1">&#39;q&#39;</span><span class="p">)</span> <span class="p">)</span><span class="o">.</span><span class="n">setNet</span><span class="p">(</span> <span class="n">cout</span> <span class="p">)</span>
<span class="n">UpdateSession</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">af</span><span class="o">.</span><span class="n">saveCell</span><span class="p">(</span> <span class="n">fulladder</span><span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="k">return</span> <span class="n">fulladder</span>
<span class="k">def</span> <span class="nf">placeAndRoute</span> <span class="p">(</span> <span class="n">editor</span><span class="p">,</span> <span class="n">cell</span> <span class="p">):</span>
<span class="c1"># Run the placer.</span>
<span class="n">etesian</span> <span class="o">=</span> <span class="n">Etesian</span><span class="o">.</span><span class="n">EtesianEngine</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">cell</span><span class="p">)</span>
<span class="n">etesian</span><span class="o">.</span><span class="n">place</span><span class="p">()</span>
<span class="k">if</span> <span class="n">editor</span><span class="p">:</span>
<span class="n">editor</span><span class="o">.</span><span class="n">setCell</span><span class="p">(</span> <span class="n">cell</span> <span class="p">)</span>
<span class="n">editor</span><span class="o">.</span><span class="n">fit</span><span class="p">()</span>
<span class="n">Breakpoint</span><span class="o">.</span><span class="n">stop</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;After placement&#39;</span> <span class="p">)</span>
<span class="c1"># Run the router.</span>
<span class="n">katana</span> <span class="o">=</span> <span class="n">Katana</span><span class="o">.</span><span class="n">KatanaEngine</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">cell</span><span class="p">)</span>
<span class="n">katana</span><span class="o">.</span><span class="n">digitalInit</span> <span class="p">()</span>
<span class="n">katana</span><span class="o">.</span><span class="n">runGlobalRouter</span> <span class="p">()</span>
<span class="n">katana</span><span class="o">.</span><span class="n">loadGlobalRouting</span><span class="p">(</span> <span class="n">Anabatic</span><span class="o">.</span><span class="n">EngineLoadGrByNet</span> <span class="p">)</span>
<span class="n">katana</span><span class="o">.</span><span class="n">layerAssign</span> <span class="p">(</span> <span class="n">Anabatic</span><span class="o">.</span><span class="n">EngineNoNetLayerAssign</span> <span class="p">)</span>
<span class="n">katana</span><span class="o">.</span><span class="n">runNegociate</span> <span class="p">(</span> <span class="n">Katana</span><span class="o">.</span><span class="n">Flags</span><span class="o">.</span><span class="n">NoFlags</span> <span class="p">)</span>
<span class="n">af</span><span class="o">.</span><span class="n">saveCell</span><span class="p">(</span> <span class="n">cell</span><span class="p">,</span> <span class="n">Catalog</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">Views</span> <span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">ScriptMain</span> <span class="p">(</span> <span class="o">**</span><span class="n">kw</span> <span class="p">):</span>
<span class="n">editor</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="n">kw</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s1">&#39;editor&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">kw</span><span class="p">[</span><span class="s1">&#39;editor&#39;</span><span class="p">]:</span>
<span class="n">editor</span> <span class="o">=</span> <span class="n">kw</span><span class="p">[</span><span class="s1">&#39;editor&#39;</span><span class="p">]</span>
<span class="n">fulladder</span> <span class="o">=</span> <span class="n">buildFulladder</span><span class="p">(</span> <span class="n">editor</span> <span class="p">)</span>
<span class="n">placeAndRoute</span><span class="p">(</span> <span class="n">editor</span><span class="p">,</span> <span class="n">fulladder</span> <span class="p">)</span>
<span class="k">return</span> <span class="bp">True</span>
</pre></div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="AdvancedTopics.html" class="btn btn-neutral float-right" title="9. Advanced Topics" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="RealDesigns.html" class="btn btn-neutral" title="7. Working in real mode" 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 Mar 18, 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>