714 lines
40 KiB
HTML
714 lines
40 KiB
HTML
|
||
|
||
|
||
<!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>Python Interface for Hurricane / Coriolis — Coriolis 2 documentation</title>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../_static/SoC.css" type="text/css" />
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="top" title="Coriolis 2 documentation" href="../index.html"/>
|
||
<link rel="up" title="Coriolis User’s Guide" href="index.html"/>
|
||
<link rel="next" title="Stratus Reference" href="../Stratus/Stratus.html"/>
|
||
<link rel="prev" title="CGT - The Graphical Interface" href="ViewerTools.html"/>
|
||
|
||
|
||
<script src="_static/js/modernizr.min.js"></script>
|
||
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav" role="document">
|
||
|
||
<div class="wy-grid-for-nav">
|
||
|
||
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-nav-search">
|
||
|
||
|
||
|
||
<a href="../index.html" class="icon icon-home"> Coriolis
|
||
|
||
|
||
|
||
</a>
|
||
|
||
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||
|
||
|
||
|
||
<ul class="current">
|
||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Coriolis User’s Guide</a><ul class="current">
|
||
<li class="toctree-l2"><a class="reference internal" href="LicenseCredits.html">Credits & License</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="Releases.html">Release Notes</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-1-0-1475">Release 1.0.1475</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-1-0-1963">Release 1.0.1963</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-1-0-2049">Release 1.0.2049</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-v2-0-1">Release v2.0.1</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-v2-1">Release v2.1</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-v2-2"><strong>Release v2.2</strong></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="Installation.html">Installation</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="Installation.html#fixed-directory-tree">Fixed Directory Tree</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Installation.html#building-coriolis">Building Coriolis</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="Installation.html#building-the-devel-branch">Building the Devel Branch</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="Installation.html#additionnal-requirement-under-macos">Additionnal Requirement under <span class="sc">MacOS</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Installation.html#packaging-coriolis">Packaging Coriolis</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Installation.html#hooking-up-into-alliance">Hooking up into <span class="sc">Alliance</span></a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Installation.html#setting-up-the-environment-coriolisenv-py">Setting up the Environment (coriolisEnv.py)</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="Configuration.html">Coriolis Configuration & Initialisation</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#general-software-architecture">General Software Architecture</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#first-stage-symbolic-technology-selection">First Stage: Symbolic Technology Selection</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#second-stage-technology-configuration-loading">Second Stage: Technology Configuration Loading</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#configuration-helpers">Configuration Helpers</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="Configuration.html#alliance-helper"><span class="sc">Alliance</span> Helper</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="Configuration.html#tools-configuration-helpers">Tools Configuration Helpers</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#hacking-the-configuration-files">Hacking the Configuration Files</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="ViewerTools.html">CGT - The Graphical Interface</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="ViewerTools.html#viewer-tools">Viewer & Tools</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#stratus-netlist-capture"><span class="sc">Stratus</span> Netlist Capture</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="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="ViewerTools.html#synthetizing-and-loading-a-design">Synthetizing and loading a design</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#etesian-placer">Etesian – Placer</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#knik-global-router">Knik – Global Router</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#kite-detailed-router">Kite – Detailed Router</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#executing-python-scripts-in-cgt">Executing Python Scripts in Cgt</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#printing-snapshots">Printing & Snapshots</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="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="ViewerTools.html#cgt-command-line-options">Cgt Command Line Options</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#miscellaneous-settings">Miscellaneous Settings</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l3"><a class="reference internal" href="ViewerTools.html#the-controller">The Controller</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#the-look-tab">The Look Tab</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#the-filter-tab">The Filter Tab</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#the-layers-go-tab">The Layers&Go Tab</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#the-netlist-tab">The Netlist Tab</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#the-selection-tab">The Selection Tab</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#the-inspector-tab">The Inspector Tab</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="ViewerTools.html#the-settings-tab">The Settings Tab</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2 current"><a class="current reference internal" href="">Python Interface for <span class="sc">Hurricane</span> / <span class="sc">Coriolis</span></a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="#plugins">Plugins</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="#chip-placement">Chip Placement</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#clock-tree">Clock Tree</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#recursive-save-rsave">Recursive-Save (RSave)</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#a-simple-example-am2901">A Simple Example: AM2901</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 & Lambda Value</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-to-rds-segment-table">The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_SEGMENT</span></tt> table</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-to-rds-via-table">The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_VIA</span></tt> table</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-to-rds-bigvia-hole-table">The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_HOLE</span></tt> table</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-to-rds-bigvia-metal-table">The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_METAL</span></tt> table</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-wiresetting-table">The <tt class="docutils literal"><span class="pre">MBK_WIRESETTING</span></tt> table</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||
|
||
|
||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="../index.html">Coriolis</a>
|
||
</nav>
|
||
|
||
|
||
|
||
<div class="wy-nav-content">
|
||
<div class="rst-content">
|
||
<div role="navigation" aria-label="breadcrumbs navigation">
|
||
<ul class="wy-breadcrumbs">
|
||
<li><a href="../index.html">Docs</a> »</li>
|
||
|
||
<li><a href="index.html">Coriolis User’s Guide</a> »</li>
|
||
|
||
<li>Python Interface for <span class="sc">Hurricane</span> / <span class="sc">Coriolis</span></li>
|
||
<li class="wy-breadcrumbs-aside">
|
||
|
||
|
||
|
||
</li>
|
||
</ul>
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document">
|
||
|
||
<div class="section" id="python-interface-for-hurricane-coriolis">
|
||
<span id="python-interface-to-coriolis"></span><h1>Python Interface for <span class="sc">Hurricane</span> / <span class="sc">Coriolis</span><a class="headerlink" href="#python-interface-for-hurricane-coriolis" title="Permalink to this headline">¶</a></h1>
|
||
<p>The (almost) complete interface of <span class="sc">Hurricane</span> is exported as a <span class="sc">Python</span> module
|
||
and some part of the other components of <span class="sc">Coriolis</span> (each one in a separate
|
||
module). The interface has been made to mirror as closely as possible the
|
||
C++ one, so the C++ doxygen documentation could be used to write code with
|
||
either languages.</p>
|
||
<p><a class="reference external" href="file:../../../index.html">Summary of the C++ Documentation</a></p>
|
||
<p>A script could be run directly in text mode from the command line or through
|
||
the graphical interface (see <a class="reference internal" href="ViewerTools.html#python-scripts-in-cgt"><em>Executing Python Scripts in Cgt</em></a>).</p>
|
||
<p>Asides for this requirement, the python script can contain anything valid
|
||
in <span class="sc">Python</span>, so don’t hesitate to use any package or extention.</p>
|
||
<p>Small example of Python/Stratus script:</p>
|
||
<div class="highlight-python"><pre>from Hurricane import *
|
||
from Stratus import *
|
||
|
||
def doSomething ():
|
||
# ...
|
||
return
|
||
|
||
def ScriptMain ( **kw ):
|
||
editor = None
|
||
if kw.has_key('editor') and kw['editor']:
|
||
editor = kw['editor']
|
||
stratus.setEditor( editor )
|
||
|
||
doSomething()
|
||
return
|
||
|
||
if __name__ == "__main__" :
|
||
kw = {}
|
||
success = ScriptMain( **kw )
|
||
shellSuccess = 0
|
||
if not success: shellSuccess = 1
|
||
|
||
sys.exit( shellSuccess )
|
||
ScriptMain ()</pre>
|
||
</div>
|
||
<p>This typical script can be executed in two ways:</p>
|
||
<ol class="arabic">
|
||
<li><p class="first">Run directly as a <span class="sc">Python</span> script, thanks to the</p>
|
||
<div class="highlight-python"><pre>if __name__ == "__main__" :</pre>
|
||
</div>
|
||
<p>part (this is standart <span class="sc">Python</span>). It is a simple adapter that will
|
||
calls <span class="cb">ScriptMain()</span>.</p>
|
||
</li>
|
||
<li><p class="first">Through <span class="cb">cgt</span>, either in text or graphical mode. In that case, the
|
||
<span class="cb">ScriptMain()</span> is directly called trough a sub-interpreter.
|
||
The arguments of the script are passed through the <tt class="docutils literal"><span class="pre">**kw</span></tt> dictionnary.</p>
|
||
<table border="1" class="docutils">
|
||
<colgroup>
|
||
<col width="32%" />
|
||
<col width="68%" />
|
||
</colgroup>
|
||
<thead valign="bottom">
|
||
<tr class="row-odd"><th class="head" colspan="2">**kw Dictionnary</th>
|
||
</tr>
|
||
<tr class="row-even"><th class="head">Parameter Key/Name</th>
|
||
<th class="head">Contents type</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody valign="top">
|
||
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">'cell'</span></tt></td>
|
||
<td>A Hurricane cell on which to work. Depending
|
||
on the context, it may be <tt class="docutils literal"><span class="pre">None</span></tt>.
|
||
For example, when run from <span class="cb">cgt</span>, it the cell
|
||
currently loaded in the viewer, if any.</td>
|
||
</tr>
|
||
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">'editor'</span></tt></td>
|
||
<td>The viewer from which the script is run, when
|
||
lauched through <span class="cb">cgt</span>.</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</li>
|
||
</ol>
|
||
<div class="section" id="plugins">
|
||
<h2>Plugins<a class="headerlink" href="#plugins" title="Permalink to this headline">¶</a></h2>
|
||
<p>Plugins are <span class="sc">Python</span> scripts specially crafted to integrate with <span class="cb">cgt</span>.
|
||
Their entry point is a <span class="cb">ScriptMain()</span> method as described in
|
||
<a class="reference internal" href="#python-interface-to-coriolis">Python Interface to Coriolis</a>. They can be called by user scripts
|
||
through this method.</p>
|
||
<div class="section" id="chip-placement">
|
||
<h3>Chip Placement<a class="headerlink" href="#chip-placement" title="Permalink to this headline">¶</a></h3>
|
||
<p>Automatically perform the placement of a complete chip. This plugin, as well
|
||
as the other P&R tools expect a specific top-level hierarchy for the design.
|
||
The top-level hierarchy must contains the instances of all the I/O pads and
|
||
<strong>exactly one</strong> instance of the chip’s core model.</p>
|
||
<p> <img alt="Chip Top Structure" class="align-middle" src="../_images/chip-structure-1.png" style="width: 90%;" /> </p>
|
||
<p>The designer must provide a configuration file that define the rules for the
|
||
placement of the top-level hierarchy (that is, the pads and the core).
|
||
This file must be named after the chip’s name, by appending <tt class="docutils literal"><span class="pre">_chip.py</span></tt>
|
||
(obviously, it is a <span class="sc">Python</span> file). For instance if the chip netlist file
|
||
is called <tt class="docutils literal"><span class="pre">amd2901_crl.vst</span></tt>, then the configuration file must be named
|
||
<tt class="docutils literal"><span class="pre">amd2901_crl_chip.vst</span></tt>.</p>
|
||
<p>Example of chip placement configuration file (for <tt class="docutils literal"><span class="pre">AM2901</span></tt>):</p>
|
||
<div class="highlight-python"><div class="highlight"><pre><span class="n">chip</span> <span class="o">=</span> \
|
||
<span class="p">{</span> <span class="s">'pads.south'</span> <span class="p">:</span> <span class="p">[</span> <span class="s">'p_a3'</span> <span class="p">,</span> <span class="s">'p_a2'</span> <span class="p">,</span> <span class="s">'p_a1'</span> <span class="p">,</span> <span class="s">'p_r0'</span>
|
||
<span class="p">,</span> <span class="s">'p_vddick0'</span><span class="p">,</span> <span class="s">'p_vssick0'</span><span class="p">,</span> <span class="s">'p_a0'</span> <span class="p">,</span> <span class="s">'p_i6'</span>
|
||
<span class="p">,</span> <span class="s">'p_i8'</span> <span class="p">,</span> <span class="s">'p_i7'</span> <span class="p">,</span> <span class="s">'p_r3'</span> <span class="p">]</span>
|
||
<span class="p">,</span> <span class="s">'pads.east'</span> <span class="p">:</span> <span class="p">[</span> <span class="s">'p_zero'</span> <span class="p">,</span> <span class="s">'p_i0'</span> <span class="p">,</span> <span class="s">'p_i1'</span> <span class="p">,</span> <span class="s">'p_i2'</span>
|
||
<span class="p">,</span> <span class="s">'p_vddeck0'</span><span class="p">,</span> <span class="s">'p_vsseck0'</span><span class="p">,</span> <span class="s">'p_q3'</span> <span class="p">,</span> <span class="s">'p_b0'</span>
|
||
<span class="p">,</span> <span class="s">'p_b1'</span> <span class="p">,</span> <span class="s">'p_b2'</span> <span class="p">,</span> <span class="s">'p_b3'</span> <span class="p">]</span>
|
||
<span class="p">,</span> <span class="s">'pads.north'</span> <span class="p">:</span> <span class="p">[</span> <span class="s">'p_noe'</span> <span class="p">,</span> <span class="s">'p_y3'</span> <span class="p">,</span> <span class="s">'p_y2'</span> <span class="p">,</span> <span class="s">'p_y1'</span>
|
||
<span class="p">,</span> <span class="s">'p_y0'</span> <span class="p">,</span> <span class="s">'p_vddeck1'</span><span class="p">,</span> <span class="s">'p_vsseck1'</span><span class="p">,</span> <span class="s">'p_np'</span>
|
||
<span class="p">,</span> <span class="s">'p_ovr'</span> <span class="p">,</span> <span class="s">'p_cout'</span> <span class="p">,</span> <span class="s">'p_ng'</span> <span class="p">]</span>
|
||
<span class="p">,</span> <span class="s">'pads.west'</span> <span class="p">:</span> <span class="p">[</span> <span class="s">'p_cin'</span> <span class="p">,</span> <span class="s">'p_i4'</span> <span class="p">,</span> <span class="s">'p_i5'</span> <span class="p">,</span> <span class="s">'p_i3'</span>
|
||
<span class="p">,</span> <span class="s">'p_ck'</span> <span class="p">,</span> <span class="s">'p_d0'</span> <span class="p">,</span> <span class="s">'p_d1'</span> <span class="p">,</span> <span class="s">'p_d2'</span>
|
||
<span class="p">,</span> <span class="s">'p_d3'</span> <span class="p">,</span> <span class="s">'p_q0'</span> <span class="p">,</span> <span class="s">'p_f3'</span> <span class="p">]</span>
|
||
<span class="p">,</span> <span class="s">'core.size'</span> <span class="p">:</span> <span class="p">(</span> <span class="mi">1500</span><span class="p">,</span> <span class="mi">1500</span> <span class="p">)</span>
|
||
<span class="p">,</span> <span class="s">'chip.size'</span> <span class="p">:</span> <span class="p">(</span> <span class="mi">3000</span><span class="p">,</span> <span class="mi">3000</span> <span class="p">)</span>
|
||
<span class="p">,</span> <span class="s">'chip.clockTree'</span> <span class="p">:</span> <span class="bp">True</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The file must contain <em>one dictionnary</em> named <tt class="docutils literal"><span class="pre">chip</span></tt>.</p>
|
||
<table border="1" class="docutils">
|
||
<colgroup>
|
||
<col width="29%" />
|
||
<col width="71%" />
|
||
</colgroup>
|
||
<thead valign="bottom">
|
||
<tr class="row-odd"><th class="head" colspan="2">Chip Dictionnary</th>
|
||
</tr>
|
||
<tr class="row-even"><th class="head">Parameter Key/Name</th>
|
||
<th class="head">Value/Contents type</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody valign="top">
|
||
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">'pad.south'</span></tt></td>
|
||
<td>Ordered list (left to right) of pad instances names
|
||
to put on the south side of the chip</td>
|
||
</tr>
|
||
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">'pad.east'</span></tt></td>
|
||
<td>Ordered list (down to up) of pad instances names
|
||
to put on the east side of the chip</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">'pad.north'</span></tt></td>
|
||
<td>Ordered list (left to right) of pad instances names
|
||
to put on the north side of the chip</td>
|
||
</tr>
|
||
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">'pad.west'</span></tt></td>
|
||
<td>Ordered list (down to up) of pad instances names
|
||
to put on the west side of the chip</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">'core.size'</span></tt></td>
|
||
<td>The size of the core (to be used by the placer)</td>
|
||
</tr>
|
||
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">'chip.size'</span></tt></td>
|
||
<td>The size of the whole chip. The sides must be great
|
||
enough to accomodate all the pads</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">'chip.clockTree'</span></tt></td>
|
||
<td>Whether to generate a clock tree or not. This calls
|
||
the ClockTree plugin</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>Configuration parameters, defaults are defined in <tt class="docutils literal"><span class="pre">etc/coriolis2/<STECHNO>/plugins.conf</span></tt>.</p>
|
||
<table border="1" class="docutils">
|
||
<colgroup>
|
||
<col width="43%" />
|
||
<col width="22%" />
|
||
<col width="35%" />
|
||
</colgroup>
|
||
<thead valign="bottom">
|
||
<tr class="row-odd"><th class="head">Parameter Identifier</th>
|
||
<th class="head">Type</th>
|
||
<th class="head">Default</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody valign="top">
|
||
<tr class="row-even"><td colspan="3"><strong>Chip Plugin Parameters</strong></td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.block.rails.count</span></tt></td>
|
||
<td>TypeInt</td>
|
||
<td><span class="cb">5</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The minimum number of rails around the core
|
||
block. Must be odd and suppérior to 5.
|
||
One rail for the clock and at least two pairs
|
||
of power/grounds</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.block.rails.hWidth</span></tt></td>
|
||
<td>TypeInt</td>
|
||
<td><span class="cb">12</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The horizontal with of the rails</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.block.rails.vWidth</span></tt></td>
|
||
<td>TypeInt</td>
|
||
<td><span class="cb">12</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The vertical with of the rails</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.block.rails.hSpacing</span></tt></td>
|
||
<td>TypeInt</td>
|
||
<td><span class="cb">6</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The spacing, <em>edge to edge</em> of two adjacent
|
||
horizontal rails</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.block.rails.vSpacing</span></tt></td>
|
||
<td>TypeInt</td>
|
||
<td><span class="cb">6</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The spacing, <em>edge to edge</em> of two adjacent
|
||
vertical rails</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.pad.pck</span></tt></td>
|
||
<td>TypeString</td>
|
||
<td><span class="cb">pck_px</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The model name of the pad connected to the
|
||
chip external clock</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.pad.pvddeck</span></tt></td>
|
||
<td>TypeString</td>
|
||
<td><span class="cb">pvddeck_px</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The model name of the pad connected to the
|
||
<tt class="docutils literal"><span class="pre">vdde</span></tt> (external power) and suppling it to
|
||
the core</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.pad.pvsseck</span></tt></td>
|
||
<td>TypeString</td>
|
||
<td><span class="cb">pvsseck_px</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The model name of the pad connected to the
|
||
<tt class="docutils literal"><span class="pre">vsse</span></tt> (external ground) and suppling it to
|
||
the core</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.pad.pvddick</span></tt></td>
|
||
<td>TypeString</td>
|
||
<td><span class="cb">pvddick_px</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The model name of the pad connected to the
|
||
<tt class="docutils literal"><span class="pre">vddi</span></tt> (internal power) and suppling it to
|
||
the core</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">chip.pad.pvssick</span></tt></td>
|
||
<td>TypeString</td>
|
||
<td><span class="cb">pvssick_px</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The model name of the pad connected to the
|
||
<tt class="docutils literal"><span class="pre">vssi</span></tt> (internal ground) and suppling it to
|
||
the core</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div class="admonition note">
|
||
<p class="first admonition-title">Note</p>
|
||
<p class="last">If no clock tree is generated, then the clock rail is <em>not</em> created.
|
||
So even if the requested number of rails <tt class="docutils literal"><span class="pre">chip.block.rails.count</span></tt> is, say 5,
|
||
only four rails (2* <tt class="docutils literal"><span class="pre">power</span></tt>, 2* <tt class="docutils literal"><span class="pre">ground</span></tt>) will be generateds.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="clock-tree">
|
||
<h3>Clock Tree<a class="headerlink" href="#clock-tree" title="Permalink to this headline">¶</a></h3>
|
||
<p>Insert a clock tree into a block. The clock tree uses the H strategy.
|
||
The clock net is splitted into sub-nets, one for each branch of the
|
||
tree.</p>
|
||
<ul>
|
||
<li><p class="first">On <strong>chips</strong> design, the sub-nets are createds in the model of the
|
||
core block (then trans-hierarchically flattened to be shown at
|
||
chip level).</p>
|
||
</li>
|
||
<li><p class="first">On <strong>blocks</strong>, the sub nets are created directly in the top block.</p>
|
||
</li>
|
||
<li><p class="first">The sub-nets are named according to a simple geometrical scheme.
|
||
A common prefix <tt class="docutils literal"><span class="pre">ck_htree</span></tt>, then one postfix by level telling
|
||
on which quarter of plane the sub-clock is located:</p>
|
||
<ol class="arabic simple">
|
||
<li><tt class="docutils literal"><span class="pre">_bl</span></tt>: bottom left plane quarter.</li>
|
||
<li><tt class="docutils literal"><span class="pre">_br</span></tt>: bottom right plane quarter.</li>
|
||
<li><tt class="docutils literal"><span class="pre">_tl</span></tt>: top left plane quarter.</li>
|
||
<li><tt class="docutils literal"><span class="pre">_tr</span></tt>: top right plane quarter.</li>
|
||
</ol>
|
||
<p>We can have <tt class="docutils literal"><span class="pre">ck_htree_bl</span></tt>, <tt class="docutils literal"><span class="pre">ck_htree_bl_bl</span></tt>, <tt class="docutils literal"><span class="pre">ch_htree_bl_tl</span></tt> and so on.</p>
|
||
</li>
|
||
</ul>
|
||
<p>The clock tree plugin works in four steps:</p>
|
||
<ol class="arabic simple">
|
||
<li>Build the clock tree: creates the top-block abutment box, compute the
|
||
levels of H tree neededs and place the clock buffers.</li>
|
||
<li>Once the clock buffers are placed, calls the placer (<span class="sc">Etesian</span>) to place
|
||
the ordinary standart cells, whithout disturbing clock H-tree buffers.</li>
|
||
<li>At this point we know the exact positions of all the DFFs, so we can
|
||
connect them to the nearest H-tree leaf clock signal.</li>
|
||
<li>Leaf clock signals that are not connecteds to any DFFs are removed.</li>
|
||
</ol>
|
||
<p>Netlist reorganisation:</p>
|
||
<ul class="simple">
|
||
<li>Obviously the top block or chip core model netlist is modificated to
|
||
contains all the clock sub-nets. The interface is <em>not</em> changed.</li>
|
||
<li>If the top block contains instances of other models <em>and</em> those models
|
||
contains DFFs that get re-connecteds to the clock sub-nets (from the
|
||
top level). Change both the model netlist and interface to propagate
|
||
the relevant clock sub-nets to the instanciated model. The new model
|
||
with the added clock signal is renamed with a <tt class="docutils literal"><span class="pre">_clocked</span></tt> suffix.
|
||
For example, the sub-block model <tt class="docutils literal"><span class="pre">ram.vst</span></tt> will become <tt class="docutils literal"><span class="pre">ram_clocked.vst</span></tt>.</li>
|
||
</ul>
|
||
<div class="admonition note">
|
||
<p class="first admonition-title">Note</p>
|
||
<p class="last">If you are to re-run the clock tree plugin on a netlist, be careful
|
||
to erase any previously generated <tt class="docutils literal"><span class="pre">_clocked</span></tt> file (both netlist and
|
||
layout: <tt class="docutils literal"><span class="pre">rm</span> <span class="pre">*.clocked.{ap,vst}</span></tt>). And restart <span class="cb">cgt</span> to clear it’s
|
||
memory cache.</p>
|
||
</div>
|
||
<p>Configuration parameters, defaults are defined in <tt class="docutils literal"><span class="pre">etc/coriolis2/<STECHNO>/plugins.conf</span></tt>.</p>
|
||
<table border="1" class="docutils">
|
||
<colgroup>
|
||
<col width="43%" />
|
||
<col width="22%" />
|
||
<col width="35%" />
|
||
</colgroup>
|
||
<thead valign="bottom">
|
||
<tr class="row-odd"><th class="head">Parameter Identifier</th>
|
||
<th class="head">Type</th>
|
||
<th class="head">Default</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody valign="top">
|
||
<tr class="row-even"><td colspan="3"><strong>ClockTree Plugin Parameters</strong></td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">clockTree.minimumSide</span></tt></td>
|
||
<td>TypeInt</td>
|
||
<td><span class="cb">300</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The minimum size below which the clock tree
|
||
will stop to perform quadri-partitions</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">clockTree.buffer</span></tt></td>
|
||
<td>TypeString</td>
|
||
<td><span class="cb">buf_x2</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The buffer model to use to drive sub-nets</td>
|
||
</tr>
|
||
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">clockTree.placerEngine</span></tt></td>
|
||
<td>TypeString</td>
|
||
<td><span class="cb">Etesian</span></td>
|
||
</tr>
|
||
<tr class="row-even"><td colspan="2">The placer to use. Other value is <tt class="docutils literal"><span class="pre">Mauka</span></tt>
|
||
the simulated annealing placer which will go
|
||
into retirement very soon</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<div class="section" id="recursive-save-rsave">
|
||
<h3>Recursive-Save (RSave)<a class="headerlink" href="#recursive-save-rsave" title="Permalink to this headline">¶</a></h3>
|
||
<p>Perform a recursive top down save of all the models from the top cell
|
||
loaded in <span class="cb">cgt</span>. Force a write of any non-terminal model. This plugin is used
|
||
by the clock tree plugin after the netlist clock sub-nets creation.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="a-simple-example-am2901">
|
||
<h2>A Simple Example: AM2901<a class="headerlink" href="#a-simple-example-am2901" title="Permalink to this headline">¶</a></h2>
|
||
<p>To illustrate the capabilities of <span class="sc">Coriolis</span> tools and <span class="sc">Python</span> scripting, a small
|
||
example, derived from the <span class="sc">Alliance</span> <span class="cb">AM2901</span> is supplied.</p>
|
||
<p>This example contains only the synthetized netlists and the <span class="cb">doChip.py</span> script
|
||
which perform the whole P&R of the design.</p>
|
||
<p>You can generate the chip using one of the following method:</p>
|
||
<ol class="arabic">
|
||
<li><p class="first"><strong>Command line mode:</strong> directly run the script:</p>
|
||
<div class="highlight-python"><pre>dummy@lepka:AM2901$ ./doChip -V --cell=amd2901</pre>
|
||
</div>
|
||
</li>
|
||
<li><p class="first"><strong>Graphic mode:</strong> launch <span class="cb">cgt</span>, load chip netlist <tt class="docutils literal"><span class="pre">amd2901</span></tt> (the top cell)
|
||
then run the <span class="sc">Python</span> script <span class="cb">doChip.py</span>.</p>
|
||
</li>
|
||
</ol>
|
||
<div class="admonition note">
|
||
<p class="first admonition-title">Note</p>
|
||
<p>Between two consecutive run, be sure to erase the netlist/layout generateds:</p>
|
||
<div class="last highlight-python"><pre>dummy@lepka:AM2901$ rm *_clocked*.vst *.ap</pre>
|
||
</div>
|
||
</div>
|
||
</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="ViewerTools.html" class="btn btn-neutral" title="CGT - The Graphical Interface" 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 Jul 17, 2017.
|
||
</small></td>
|
||
<td class="RFooter"></td>
|
||
</tr>
|
||
</table>
|
||
<table class="footer2">
|
||
<tr>
|
||
<td class="LFooter">Coriolis 2 Documentation</td>
|
||
<td class="RFooter"><small>
|
||
© Copyright 2000-2017, 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> |