Update documentation to build on Debian 9.2 (stretch).

* Change: In documentation/CMakeLists.txt, for add_custom_targets(),
    add_dependencies() no longer allow to give files (only others
    *target* in the sense of cmake). We must use the DEPENDS option
    of add_custom_target().
* Change: In documentation/UsersGuide, it seems that docutils no longer
    handle correctly '$' and/or '_' in verbatim in the LaTeX backend.
    (i.e. they are *not* escaped, resulting in math mode errors).
    Remove those characters as we can use others...
* Commit a snaphot of the current documentation.
This commit is contained in:
Jean-Paul Chaput 2017-10-30 15:33:37 +01:00
parent e4575cf8c2
commit 4d6b06d368
105 changed files with 1732 additions and 1415 deletions

2
.gitignore vendored
View File

@ -8,7 +8,7 @@ TAGS
GTAGS
GPATH
GRTAGS
dir-locals.el
.dir-locals.el
.projectile

View File

@ -22,7 +22,7 @@
if(BUILD_DOC)
set ( htmlInstallDir share/doc/coriolis2/en/html/main )
set ( pdfInstallDir share/doc/coriolis2/en/pdf/main )
set ( pythonCppRst PythonCpp/pdfHeader.rst
PythonCpp/Introduction.rst
PythonCpp/Configuration.rst
@ -46,46 +46,44 @@
add_custom_target ( doc_HTML ALL
cd ${DOCUMENTATION_SOURCE_DIR}
&& rm -rf _build
&& sphinx-build -b html -d _build/doctrees . _build/html )
add_dependencies ( doc_HTML ../etc/definitions.rst
../_static/SoC.css
../_static/www-SoC.css
../_static/SoC-ReST.css
../_static/pygments.css
CrlCore/CrlCore.rst
DpGen/DpGen.rst
Hurricane/Hurricane.rst
Patterns/Patterns.rst
Stratus/Stratus.rst
Unicorn/Unicorn.rst
Viewer/Viewer.rst
${usersGuideRst} UsersGuide/index.rst
${pythonCppRst} PythonCpp/index.rst
${rdsRst} RDS/index.rst
&& sphinx-build -b html -d _build/doctrees . _build/html
DEPENDS etc/definitions.rst
_static/SoC.css
_static/www-SoC.css
_static/SoC-ReST.css
_static/pygments.css
CrlCore/CrlCore.rst
DpGen/DpGen.rst
Hurricane/Hurricane.rst
Patterns/Patterns.rst
Stratus/Stratus.rst
Unicorn/Unicorn.rst
Viewer/Viewer.rst
${usersGuideRst} UsersGuide/index.rst
${pythonCppRst} PythonCpp/index.rst
${rdsRst} RDS/index.rst
)
add_custom_target ( pdf_UsersGuide ALL
cd ${DOCUMENTATION_SOURCE_DIR}/UsersGuide
&& ../etc/doPdf.sh ${usersGuideRst} UsersGuide.rst )
add_dependencies ( pdf_UsersGuide ../etc/definitions.rst
../etc/SoC-ReST.tex
${usersGuideRst} )
&& ../etc/doPdf.sh ${usersGuideRst} UsersGuide.rst
DEPENDS etc/definitions.rst
etc/SoC-ReST.tex
${usersGuideRst} )
add_custom_target ( pdf_PythonCpp ALL
cd ${DOCUMENTATION_SOURCE_DIR}/PythonCpp
&& ../etc/doPdf.sh ${pythonCppRst} PythonCpp.rst
)
add_dependencies ( pdf_PythonCpp ../etc/definitions.rst
../etc/SoC-ReST.tex
${pythonCppRst} )
DEPENDS etc/definitions.rst
etc/SoC-ReST.tex
${pythonCppRst} )
add_custom_target ( pdf_RDS ALL
cd ${DOCUMENTATION_SOURCE_DIR}/RDS
&& ../etc/doPdf.sh ${rdsRst} RDS.rst
)
add_dependencies ( pdf_RDS ../etc/definitions.rst
../etc/SoC-ReST.tex
${pythonCppRst} )
DEPENDS etc/definitions.rst
etc/SoC-ReST.tex
${pythonCppRst} )
install ( DIRECTORY _build/html/ DESTINATION ${htmlInstallDir} )
install ( FILES RDS/RDS.pdf

Binary file not shown.

View File

@ -103,23 +103,23 @@ First step is to install the prerequisites. Currently, only RapidJSON_.
As RapidJSON is evolving fast, if you encounter compatibility problems,
the exact version we compiled against is given below. ::
dummy@lepka:~$ mkdir -p ~/coriolis-2.x/src/support
dummy@lepka:~$ cd ~/coriolis-2.x/src/support
dummy@lepka:~$ git clone http://github.com/miloyip/rapidjson
dummy@lepka:~$ git checkout ec322005072076ef53984462fb4a1075c27c7dfd
dummy@lepka:~> mkdir -p ~/coriolis-2.x/src/support
dummy@lepka:~> cd ~/coriolis-2.x/src/support
dummy@lepka:~> git clone http://github.com/miloyip/rapidjson
dummy@lepka:~> git checkout ec322005072076ef53984462fb4a1075c27c7dfd
The second step is to create the source directory and pull the |git| repository: ::
dummy@lepka:~$ mkdir -p ~/coriolis-2.x/src
dummy@lepka:~$ cd ~/coriolis-2.x/src
dummy@lepka:~$ git clone https://www-soc.lip6.fr/git/coriolis.git
dummy@lepka:~> mkdir -p ~/coriolis-2.x/src
dummy@lepka:~> cd ~/coriolis-2.x/src
dummy@lepka:~> git clone https://www-soc.lip6.fr/git/coriolis.git
Third and final step, build & install: ::
dummy@lepka:src$ ./bootstrap/ccb.py --project=support \
dummy@lepka:src> ./bootstrap/ccb.py --project=support \
--project=coriolis \
--make="-j4 install"
dummy@lepka:src$ ./bootstrap/ccb.py --project=support \
dummy@lepka:src> ./bootstrap/ccb.py --project=support \
--project=coriolis \
--doc --make="-j1 install"
@ -129,7 +129,7 @@ stage in ``-j4`` (or whatever) then we generate the documentation in ``-j1``
Under |RHEL6| or clones, you must build using the |devtoolset2|: ::
dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \
dummy@lepka:src> ./bootstrap/ccb.py --project=coriolis \
--devtoolset-2 --make="-j4 install"
If you want to uses Qt 5 instead of Qt 4, you may add the ``--qt5`` argument.
@ -150,8 +150,8 @@ In the |Coriolis| |git| repository, two branches are present:
development team. To use it instead of the :cb:`master` one, do the following
command just after the first step: ::
dummy@lepka:~$ git checkout devel
dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \
dummy@lepka:~> git checkout devel
dummy@lepka:src> ./bootstrap/ccb.py --project=coriolis \
--make="-j4 install" --debug
Be aware that it may requires newer versions of the dependencies and may introduce
@ -160,7 +160,7 @@ In the |Coriolis| |git| repository, two branches are present:
In the (unlikely) event of a crash of |cgt|, as it is a |Python| script, the right
command to run |gdb| on it is: ::
dummy@lepka:work$ gdb python core.XXXX
dummy@lepka:work> gdb python core.XXXX
|newpage|
@ -172,9 +172,9 @@ Additionnal Requirement under |MacOS|
seems unable to work with the |Python| bundled with |MacOS|. So you have to install
both of them from |macports|: ::
dummy@macos:~$ port install boost +python27
dummy@macos:~$ port select python python27
dummy@macos:-$ export DYLD_FRAMEWORK_PATH=/opt/local/Library/Frameworks
dummy@macos:~> port install boost +python27
dummy@macos:~> port select python python27
dummy@macos:-> export DYLD_FRAMEWORK_PATH=/opt/local/Library/Frameworks
The last two lines tell |MacOS| to use the |Python| from |macports| and *not* from
the system.

View File

@ -321,7 +321,7 @@ You can generate the chip using one of the following method:
#. **Command line mode:** directly run the script: ::
dummy@lepka:AM2901$ ./doChip -V --cell=amd2901
dummy@lepka:AM2901> ./doChip -V --cell=amd2901
#. **Graphic mode:** launch |cgt|, load chip netlist ``amd2901`` (the top cell)
then run the |Python| script :cb:`doChip.py`.
@ -329,4 +329,4 @@ You can generate the chip using one of the following method:
.. note::
Between two consecutive run, be sure to erase the netlist/layout generateds: ::
dummy@lepka:AM2901$ rm *_clocked*.vst *.ap
dummy@lepka:AM2901> rm *clocked*.vst *.ap

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 1563ffe9c48542af75d7298c4e351220
tags: fbb0d17656682115ca4d033fb2f83ba1
config: 83e863ac4925ece5af3eb6ded540e3dc
tags: 645f666f9bcd5a90fca523b33c5a78b7

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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"/>
@ -202,15 +204,18 @@
</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 <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>
<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></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>
@ -389,11 +394,11 @@
</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 <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>
<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>
@ -414,7 +419,7 @@
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>
@ -444,7 +449,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'',
URL_ROOT:'./',
VERSION:'2',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="Katabatic Reference" href="../Katabatic/Katabatic.html"/>
<link rel="prev" title="Viewer Reference" href="../Viewer/Viewer.html"/>
@ -152,7 +154,7 @@
<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 current"><a class="current reference internal" href="">CRL Core Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -275,7 +280,7 @@ available here: <a class="reference external" href="file:../../crlcore/index.htm
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="Patterns Reference" href="../Patterns/Patterns.html"/>
<link rel="prev" title="Stratus Reference" href="../Stratus/Stratus.html"/>
@ -148,7 +150,7 @@
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../Stratus/Stratus.html">Stratus Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="">DpGen Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -275,7 +280,7 @@ available here: <a class="reference external" href="file:../../dpgen/index.html"
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="Viewer Reference" href="../Viewer/Viewer.html"/>
<link rel="prev" title="Patterns Reference" href="../Patterns/Patterns.html"/>
@ -150,7 +152,7 @@
<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 current"><a class="current reference internal" href="">Hurricane Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -275,7 +280,7 @@ available here: <a class="reference external" href="file:../../hurricane/index.h
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="Kite Reference" href="../Kite/Kite.html"/>
<link rel="prev" title="CRL Core Reference" href="../CrlCore/CrlCore.html"/>
@ -153,7 +155,7 @@
<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 current"><a class="current reference internal" href="">Katabatic Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -280,7 +285,7 @@ mixed signal conterpart <strong>Anabatic</strong>.</p>
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="Unicorn Reference" href="../Unicorn/Unicorn.html"/>
<link rel="prev" title="Katabatic Reference" href="../Katabatic/Katabatic.html"/>
@ -154,7 +156,7 @@
<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 current"><a class="current reference internal" href="">Kite Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -280,7 +285,7 @@ mixed-signal conterpart Katana (<span class="sc">Kit[e]-Ana[logic]</span>).</p>
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="Hurricane Reference" href="../Hurricane/Hurricane.html"/>
<link rel="prev" title="DpGen Reference" href="../DpGen/DpGen.html"/>
@ -149,7 +151,7 @@
</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 current"><a class="current reference internal" href="">Patterns Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -275,7 +280,7 @@ available here: <a class="reference external" href="file:../../patterns/index.ht
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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/C++ API Tutorial" href="index.html"/>
<link rel="next" title="3. Case 1 - DBo Derived, Standalone" href="DBoStandalone.html"/>
@ -164,7 +166,7 @@
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#botched-design">1.3 Botched Design</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="">2. Basic File Structure and CMake configuration</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">2. Basic File Structure and CMake configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="DBoStandalone.html">3. Case 1 - DBo Derived, Standalone</a><ul>
<li class="toctree-l3"><a class="reference internal" href="DBoStandalone.html#class-associated-header-file">3.1 Class Associated Header File</a></li>
<li class="toctree-l3"><a class="reference internal" href="DBoStandalone.html#class-associated-file">3.2 Class Associated File</a><ul>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -253,22 +258,22 @@
<div class="section" id="basic-file-structure-and-cmake-configuration">
<h1>2. Basic File Structure and CMake configuration<a class="headerlink" href="#basic-file-structure-and-cmake-configuration" title="Permalink to this headline"></a></h1>
<p>As a first example we will consider the <tt class="docutils literal"><span class="pre">Hurrican::Library</span></tt>
<p>As a first example we will consider the <code class="docutils literal"><span class="pre">Hurrican::Library</span></code>
class. To export a class into Python, we must create three files:</p>
<ol class="arabic simple">
<li><tt class="docutils literal"><span class="pre">PyLibrary.h</span></tt>, defines the <tt class="docutils literal"><span class="pre">PyLibrary</span></tt> C-Struct and the functions
needed outside the module istself (mostly for <tt class="docutils literal"><span class="pre">PyHurricane.cpp</span></tt>).</li>
<li><tt class="docutils literal"><span class="pre">PyLibrary.cpp</span></tt>, contains the complete wrapping of the class and
the Python type definition (<tt class="docutils literal"><span class="pre">PyTypeLibrary</span></tt>).</li>
<li><tt class="docutils literal"><span class="pre">PyHurricane.cpp</span></tt>, the definition of the Python module into which
the classes are registered. The module act as a <tt class="docutils literal"><span class="pre">namespace</span></tt> in
<li><code class="docutils literal"><span class="pre">PyLibrary.h</span></code>, defines the <code class="docutils literal"><span class="pre">PyLibrary</span></code> C-Struct and the functions
needed outside the module istself (mostly for <code class="docutils literal"><span class="pre">PyHurricane.cpp</span></code>).</li>
<li><code class="docutils literal"><span class="pre">PyLibrary.cpp</span></code>, contains the complete wrapping of the class and
the Python type definition (<code class="docutils literal"><span class="pre">PyTypeLibrary</span></code>).</li>
<li><code class="docutils literal"><span class="pre">PyHurricane.cpp</span></code>, the definition of the Python module into which
the classes are registered. The module act as a <code class="docutils literal"><span class="pre">namespace</span></code> in
Python so it is good practice to give it the same name as it&#8217;s
associated C++ namespace.</li>
</ol>
<p></p>
<p>To build a Python module in <span class="cb">cmake</span>, use the following macro:</p>
<blockquote>
<div><div class="highlight-cmake"><div class="highlight"><pre> <span class="nb">set</span><span class="p">(</span> <span class="s">pyCpps</span> <span class="s">PyLibrary.cpp</span>
<div><div class="highlight-cmake"><div class="highlight"><pre><span></span> <span class="nb">set</span><span class="p">(</span> <span class="s">pyCpps</span> <span class="s">PyLibrary.cpp</span>
<span class="s">PyHurricane.cpp</span> <span class="p">)</span>
<span class="nb">set</span><span class="p">(</span> <span class="s">pyIncludes</span> <span class="s">hurricane/isobar/PyLibrary.h</span>
@ -308,7 +313,7 @@ associated C++ namespace.</li>
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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/C++ API Tutorial" href="index.html"/>
<link rel="next" title="5. Case 3 - Non-DBo Standalone Classe" href="NonDBo.html"/>
@ -177,7 +179,7 @@
<li class="toctree-l3"><a class="reference internal" href="DBoStandalone.html#python-module-c-namespace">3.3 Python Module (C++ namespace)</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="">4. Case 2 - Hierarchy of DBo Derived Classes</a><ul>
<li class="toctree-l2 current"><a class="current reference internal" href="#">4. Case 2 - Hierarchy of DBo Derived Classes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#base-class-header">4.1 Base Class Header</a></li>
<li class="toctree-l3"><a class="reference internal" href="#base-class-file">4.2 Base Class File</a></li>
<li class="toctree-l3"><a class="reference internal" href="#intermediate-class-header">4.3 Intermediate Class Header</a></li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -255,37 +260,38 @@
<div class="section" id="case-2-hierarchy-of-dbo-derived-classes">
<h1>4. Case 2 - Hierarchy of DBo Derived Classes<a class="headerlink" href="#case-2-hierarchy-of-dbo-derived-classes" title="Permalink to this headline"></a></h1>
<p>Now we want to export the following C++ class hierarchy into Python:</p>
<div class="highlight-python"><pre>PyEntity &lt;-- PyComponent &lt;-+- PyContact
+- PySegment &lt;-+- PyHorizontal
+- PyVertical</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">PyEntity</span> <span class="o">&lt;--</span> <span class="n">PyComponent</span> <span class="o">&lt;-+-</span> <span class="n">PyContact</span>
<span class="o">+-</span> <span class="n">PySegment</span> <span class="o">&lt;-+-</span> <span class="n">PyHorizontal</span>
<span class="o">+-</span> <span class="n">PyVertical</span>
</pre></div>
</div>
<div class="section" id="base-class-header">
<h2>4.1 Base Class Header<a class="headerlink" href="#base-class-header" title="Permalink to this headline"></a></h2>
<p><strong>Remark:</strong> this is only a partial description of the tree for the sake of
clarity.</p>
<p>One important fact to remember is that <tt class="docutils literal"><span class="pre">PyEntity</span></tt> and <tt class="docutils literal"><span class="pre">PyComponent</span></tt>
<p>One important fact to remember is that <code class="docutils literal"><span class="pre">PyEntity</span></code> and <code class="docutils literal"><span class="pre">PyComponent</span></code>
being related to C++ abstract classes, no objects of those types will be
created, only <tt class="docutils literal"><span class="pre">PyContact</span></tt>, <tt class="docutils literal"><span class="pre">PyHorizontal</span></tt> or <tt class="docutils literal"><span class="pre">PyVertical</span></tt> will.</p>
<p>The consequence is that there is no <tt class="docutils literal"><span class="pre">PyEntity_Link()</span></tt> like in <a class="reference internal" href="DBoStandalone.html#id1"><em>3.1 Class Associated Header File</em></a>
created, only <code class="docutils literal"><span class="pre">PyContact</span></code>, <code class="docutils literal"><span class="pre">PyHorizontal</span></code> or <code class="docutils literal"><span class="pre">PyVertical</span></code> will.</p>
<p>The consequence is that there is no <code class="docutils literal"><span class="pre">PyEntity_Link()</span></code> like in <a class="reference internal" href="DBoStandalone.html#id1"><span class="std std-ref">3.1 Class Associated Header File</span></a>
but instead two functions:</p>
<ol class="arabic simple">
<li><tt class="docutils literal"><span class="pre">PyEntity_NEW()</span></tt> which create the relevant <tt class="docutils literal"><span class="pre">PyEntity</span></tt> <em>derived</em>
object from the <tt class="docutils literal"><span class="pre">Entity</span></tt> one. For example, if the <tt class="docutils literal"><span class="pre">Entity*</span></tt> given
as argument is in fact a <tt class="docutils literal"><span class="pre">Horizontal*</span></tt>, then the function will
return a <tt class="docutils literal"><span class="pre">PyHorizontal*</span></tt>.</li>
<li><tt class="docutils literal"><span class="pre">EntityCast()</span></tt> do the reverse of <tt class="docutils literal"><span class="pre">PyEntity_NEW()</span></tt> that is, from
a <tt class="docutils literal"><span class="pre">PyEntity</span></tt>, return the C++ <em>derived</em> object. Again, if the
<tt class="docutils literal"><span class="pre">PyEntity*</span></tt> is a <tt class="docutils literal"><span class="pre">PyHorizontal*</span></tt>, the function will cast it as
a <tt class="docutils literal"><span class="pre">Horizontal*</span></tt> <em>then</em> return it as an <tt class="docutils literal"><span class="pre">Entity*</span></tt>.</li>
<li><code class="docutils literal"><span class="pre">PyEntity_NEW()</span></code> which create the relevant <code class="docutils literal"><span class="pre">PyEntity</span></code> <em>derived</em>
object from the <code class="docutils literal"><span class="pre">Entity</span></code> one. For example, if the <code class="docutils literal"><span class="pre">Entity*</span></code> given
as argument is in fact a <code class="docutils literal"><span class="pre">Horizontal*</span></code>, then the function will
return a <code class="docutils literal"><span class="pre">PyHorizontal*</span></code>.</li>
<li><code class="docutils literal"><span class="pre">EntityCast()</span></code> do the reverse of <code class="docutils literal"><span class="pre">PyEntity_NEW()</span></code> that is, from
a <code class="docutils literal"><span class="pre">PyEntity</span></code>, return the C++ <em>derived</em> object. Again, if the
<code class="docutils literal"><span class="pre">PyEntity*</span></code> is a <code class="docutils literal"><span class="pre">PyHorizontal*</span></code>, the function will cast it as
a <code class="docutils literal"><span class="pre">Horizontal*</span></code> <em>then</em> return it as an <code class="docutils literal"><span class="pre">Entity*</span></code>.</li>
</ol>
<div class="highlight-python"><div class="highlight"><pre><span class="c">#ifndef ISOBAR_PY_ENTITY_H</span>
<span class="c">#define ISOBAR_PY_ENTITY_H</span>
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="c1">#ifndef ISOBAR_PY_ENTITY_H</span>
<span class="c1">#define ISOBAR_PY_ENTITY_H</span>
<span class="c">#include &quot;hurricane/isobar/PyHurricane.h&quot;</span>
<span class="c">#include &quot;hurricane/Entity.h&quot;</span>
<span class="c1">#include &quot;hurricane/isobar/PyHurricane.h&quot;</span>
<span class="c1">#include &quot;hurricane/Entity.h&quot;</span>
<span class="n">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="n">extern</span> <span class="s">&quot;C&quot;</span> <span class="p">{</span>
<span class="n">extern</span> <span class="s2">&quot;C&quot;</span> <span class="p">{</span>
<span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span>
<span class="n">PyObject_HEAD</span>
@ -298,34 +304,34 @@ a <tt class="docutils literal"><span class="pre">Horizontal*</span></tt> <em>the
<span class="n">extern</span> <span class="n">PyMethodDef</span> <span class="n">PyEntity_Methods</span><span class="p">[];</span>
<span class="c">#define IsPyEntity(v) ( (v)-&gt;ob_type == &amp;PyTypeEntity )</span>
<span class="c">#define PYENTITY(v) ( (PyEntity*)(v) )</span>
<span class="c">#define PYENTITY_O(v) ( PYENTITY(v)-&gt;_object )</span>
<span class="c1">#define IsPyEntity(v) ( (v)-&gt;ob_type == &amp;PyTypeEntity )</span>
<span class="c1">#define PYENTITY(v) ( (PyEntity*)(v) )</span>
<span class="c1">#define PYENTITY_O(v) ( PYENTITY(v)-&gt;_object )</span>
<span class="p">}</span> <span class="o">//</span> <span class="n">extern</span> <span class="s">&quot;C&quot;</span><span class="o">.</span>
<span class="p">}</span> <span class="o">//</span> <span class="n">extern</span> <span class="s2">&quot;C&quot;</span><span class="o">.</span>
<span class="n">Hurricane</span><span class="p">::</span><span class="n">Entity</span><span class="o">*</span> <span class="n">EntityCast</span> <span class="p">(</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">derivedObject</span> <span class="p">);</span>
<span class="p">}</span> <span class="o">//</span> <span class="n">Isobar</span> <span class="n">namespace</span><span class="o">.</span>
<span class="c">#endif // ISOBAR_PY_ENTITY_H</span>
<span class="c1">#endif // ISOBAR_PY_ENTITY_H</span>
</pre></div>
</div>
<p></p>
</div>
<div class="section" id="base-class-file">
<h2>4.2 Base Class File<a class="headerlink" href="#base-class-file" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-file"><em>3.2 Class Associated File</em></a> are:</p>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-file"><span class="std std-ref">3.2 Class Associated File</span></a> are:</p>
<ol class="arabic simple">
<li>No call to <tt class="docutils literal"><span class="pre">DBoLinkCreateMethod()</span></tt> because there must be no <tt class="docutils literal"><span class="pre">PyEntity_Link()</span></tt>,
but the definitions of <tt class="docutils literal"><span class="pre">PyEntity_NEW()</span></tt> and <tt class="docutils literal"><span class="pre">EntityCast</span></tt>.</li>
<li>For defining the <tt class="docutils literal"><span class="pre">PyTypeEntity</span></tt> Python type, we call a different
macro: <tt class="docutils literal"><span class="pre">PyTypeRootObjectDefinitions</span></tt>, dedicated to base classes.</li>
<li>No call to <code class="docutils literal"><span class="pre">DBoLinkCreateMethod()</span></code> because there must be no <code class="docutils literal"><span class="pre">PyEntity_Link()</span></code>,
but the definitions of <code class="docutils literal"><span class="pre">PyEntity_NEW()</span></code> and <code class="docutils literal"><span class="pre">EntityCast</span></code>.</li>
<li>For defining the <code class="docutils literal"><span class="pre">PyTypeEntity</span></code> Python type, we call a different
macro: <code class="docutils literal"><span class="pre">PyTypeRootObjectDefinitions</span></code>, dedicated to base classes.</li>
</ol>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include &quot;hurricane/isobar/PyCell.h&quot;</span>
<span class="cp">#include &quot;hurricane/isobar/PyHorizontal.h&quot;</span>
<span class="cp">#include &quot;hurricane/isobar/PyVertical.h&quot;</span>
<span class="cp">#include &quot;hurricane/isobar/PyContact.h&quot;</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyCell.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyHorizontal.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyVertical.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyContact.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">Hurricane</span><span class="p">;</span>
@ -342,10 +348,10 @@ macro: <tt class="docutils literal"><span class="pre">PyTypeRootObjectDefinition
<span class="p">{</span>
<span class="n">Cell</span><span class="o">*</span> <span class="n">cell</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">HTRY</span>
<span class="n">METHOD_HEAD</span><span class="p">(</span> <span class="s">&quot;Entity.getCell()&quot;</span> <span class="p">)</span>
<span class="nf">METHOD_HEAD</span><span class="p">(</span> <span class="s">&quot;Entity.getCell()&quot; )</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">entity</span><span class="o">-&gt;</span><span class="n">getCell</span><span class="p">();</span>
<span class="n">HCATCH</span>
<span class="k">return</span> <span class="n">PyCell_Link</span><span class="p">(</span> <span class="n">cell</span> <span class="p">);</span>
<span class="k">return</span> <span class="nf">PyCell_Link</span><span class="p">(</span> <span class="n">cell</span> <span class="p">);</span>
<span class="p">}</span>
<span class="n">PyMethodDef</span> <span class="n">PyEntity_Methods</span><span class="p">[]</span> <span class="o">=</span>
@ -406,21 +412,21 @@ macro: <tt class="docutils literal"><span class="pre">PyTypeRootObjectDefinition
</div>
<div class="section" id="intermediate-class-header">
<h2>4.3 Intermediate Class Header<a class="headerlink" href="#intermediate-class-header" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-header-file"><em>3.1 Class Associated Header File</em></a> are:</p>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-header-file"><span class="std std-ref">3.1 Class Associated Header File</span></a> are:</p>
<ol class="arabic simple">
<li>As for <tt class="docutils literal"><span class="pre">PyEntity</span></tt>, and because this is still an abstract class,
there is no <tt class="docutils literal"><span class="pre">PyComponent_Link()</span></tt> function.</li>
<li>The definition of the <tt class="docutils literal"><span class="pre">PyComponent</span></tt> <span class="cb">struct</span> is differs. There is
no <tt class="docutils literal"><span class="pre">PyObject_HEAD</span></tt> (it is a Python <em>derived</em> class). The only
field is of the base class type <tt class="docutils literal"><span class="pre">PyEntity</span></tt> and for use with
Coriolis macros, <strong>it must</strong> be named <tt class="docutils literal"><span class="pre">_baseObject</span></tt> (note that
<li>As for <code class="docutils literal"><span class="pre">PyEntity</span></code>, and because this is still an abstract class,
there is no <code class="docutils literal"><span class="pre">PyComponent_Link()</span></code> function.</li>
<li>The definition of the <code class="docutils literal"><span class="pre">PyComponent</span></code> <span class="cb">struct</span> is differs. There is
no <code class="docutils literal"><span class="pre">PyObject_HEAD</span></code> (it is a Python <em>derived</em> class). The only
field is of the base class type <code class="docutils literal"><span class="pre">PyEntity</span></code> and for use with
Coriolis macros, <strong>it must</strong> be named <code class="docutils literal"><span class="pre">_baseObject</span></code> (note that
this is <em>not</em> a pointer but a whole object).</li>
</ol>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#ifndef ISOBAR_PY_COMPONENT_H</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#ifndef ISOBAR_PY_COMPONENT_H</span>
<span class="cp">#define ISOBAR_PY_COMPONENT_H</span>
<span class="cp">#include &quot;hurricane/isobar/PyEntity.h&quot;</span>
<span class="cp">#include &quot;hurricane/Component.h&quot;</span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyEntity.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/Component.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">extern</span> <span class="s">&quot;C&quot;</span> <span class="p">{</span>
@ -431,7 +437,7 @@ this is <em>not</em> a pointer but a whole object).</li>
<span class="k">extern</span> <span class="n">PyTypeObject</span> <span class="n">PyTypeComponent</span><span class="p">;</span>
<span class="k">extern</span> <span class="n">PyMethodDef</span> <span class="n">PyComponent_Methods</span><span class="p">[];</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="n">PyComponent_LinkPyType</span> <span class="p">();</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="nf">PyComponent_LinkPyType</span> <span class="p">();</span>
<span class="cp">#define IsPyComponent(v) ((v)-&gt;ob_type == &amp;PyTypeComponent)</span>
<span class="cp">#define PYCOMPONENT(v) ((PyComponent*)(v))</span>
@ -446,27 +452,27 @@ this is <em>not</em> a pointer but a whole object).</li>
</div>
<div class="section" id="intermediate-class-file">
<h2>4.4 Intermediate Class File<a class="headerlink" href="#intermediate-class-file" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-file"><em>3.2 Class Associated File</em></a> are:</p>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-file"><span class="std std-ref">3.2 Class Associated File</span></a> are:</p>
<ol class="arabic simple">
<li>Redefinition of the default macros <tt class="docutils literal"><span class="pre">ACCESS_OBJECT</span></tt> and <tt class="docutils literal"><span class="pre">ACCESS_CLASS</span></tt>.<ul>
<li>The pointer to the C++ encapsulated object (attribute <tt class="docutils literal"><span class="pre">_object</span></tt>) is hold
by the base class <tt class="docutils literal"><span class="pre">PyEntity</span></tt>. The <tt class="docutils literal"><span class="pre">ACCESS_OBJECT</span></tt> macro which is tasked
to give access to that attribute is then <tt class="docutils literal"><span class="pre">_baseObject._object</span></tt> as
<tt class="docutils literal"><span class="pre">PyComponent</span></tt> is a direct derived class of <tt class="docutils literal"><span class="pre">PyEntity</span></tt>.</li>
<li><tt class="docutils literal"><span class="pre">ACCESS_CLASS</span></tt> is similar to <tt class="docutils literal"><span class="pre">ACCESS_OBJECT</span></tt> for accessing the base
class, that is a pointer to <tt class="docutils literal"><span class="pre">PyEntity</span></tt>.</li>
<li>Redefinition of the default macros <code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> and <code class="docutils literal"><span class="pre">ACCESS_CLASS</span></code>.<ul>
<li>The pointer to the C++ encapsulated object (attribute <code class="docutils literal"><span class="pre">_object</span></code>) is hold
by the base class <code class="docutils literal"><span class="pre">PyEntity</span></code>. The <code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> macro which is tasked
to give access to that attribute is then <code class="docutils literal"><span class="pre">_baseObject._object</span></code> as
<code class="docutils literal"><span class="pre">PyComponent</span></code> is a direct derived class of <code class="docutils literal"><span class="pre">PyEntity</span></code>.</li>
<li><code class="docutils literal"><span class="pre">ACCESS_CLASS</span></code> is similar to <code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> for accessing the base
class, that is a pointer to <code class="docutils literal"><span class="pre">PyEntity</span></code>.</li>
</ul>
</li>
</ol>
<p></p>
<ol class="arabic simple" start="2">
<li>For defining the <tt class="docutils literal"><span class="pre">PyTypeComponent</span></tt> Python type, we call a yet different
macro: <tt class="docutils literal"><span class="pre">PyTypeInheritedObjectDefinitions()</span></tt>, dedicated to derived classes.
<li>For defining the <code class="docutils literal"><span class="pre">PyTypeComponent</span></code> Python type, we call a yet different
macro: <code class="docutils literal"><span class="pre">PyTypeInheritedObjectDefinitions()</span></code>, dedicated to derived classes.
For this this macro we need to give as argument the derived class and the
base class.</li>
</ol>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include &quot;hurricane/isobar/PyComponent.h&quot;</span>
<span class="cp">#include &quot;hurricane/isobar/PyNet.h&quot;</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyComponent.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyNet.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">Hurricane</span><span class="p">;</span>
@ -489,10 +495,10 @@ base class.</li>
<span class="p">{</span>
<span class="n">Net</span><span class="o">*</span> <span class="n">net</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">HTRY</span>
<span class="n">METHOD_HEAD</span><span class="p">(</span> <span class="s">&quot;Component.getNet()&quot;</span> <span class="p">)</span>
<span class="nf">METHOD_HEAD</span><span class="p">(</span> <span class="s">&quot;Component.getNet()&quot; )</span>
<span class="n">net</span> <span class="o">=</span> <span class="n">component</span><span class="o">-&gt;</span><span class="n">getNet</span><span class="p">(</span> <span class="p">);</span>
<span class="n">HCATCH</span>
<span class="k">return</span> <span class="n">PyNet_Link</span><span class="p">(</span> <span class="n">net</span> <span class="p">);</span>
<span class="k">return</span> <span class="nf">PyNet_Link</span><span class="p">(</span> <span class="n">net</span> <span class="p">);</span>
<span class="p">}</span>
<span class="n">PyMethodDef</span> <span class="n">PyComponent_Methods</span><span class="p">[]</span> <span class="o">=</span>
@ -524,13 +530,13 @@ base class.</li>
<div class="section" id="terminal-class-header">
<h2>4.5 Terminal Class Header<a class="headerlink" href="#terminal-class-header" title="Permalink to this headline"></a></h2>
<p>The contents of this file is almost identical to <a class="reference internal" href="#intermediate-class-header">4.3 Intermediate Class Header</a>,
save for the presence of a <tt class="docutils literal"><span class="pre">PyContact_Link()</span></tt> function. She is present
save for the presence of a <code class="docutils literal"><span class="pre">PyContact_Link()</span></code> function. She is present
at this level because the class is a concrete one and can be instanciated.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#ifndef ISOBAR_PY_CONTACT_H</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#ifndef ISOBAR_PY_CONTACT_H</span>
<span class="cp">#define ISOBAR_PY_CONTACT_H</span>
<span class="cp">#include &quot;hurricane/isobar/PyComponent.h&quot;</span>
<span class="cp">#include &quot;hurricane/Contact.h&quot;</span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyComponent.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/Contact.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">extern</span> <span class="s">&quot;C&quot;</span> <span class="p">{</span>
@ -541,8 +547,8 @@ at this level because the class is a concrete one and can be instanciated.</p>
<span class="k">extern</span> <span class="n">PyTypeObject</span> <span class="n">PyTypeContact</span><span class="p">;</span>
<span class="k">extern</span> <span class="n">PyMethodDef</span> <span class="n">PyContact_Methods</span><span class="p">[];</span>
<span class="k">extern</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyContact_Link</span> <span class="p">(</span> <span class="n">Hurricane</span><span class="o">::</span><span class="n">Contact</span><span class="o">*</span> <span class="n">object</span> <span class="p">);</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="n">PyContact_LinkPyType</span> <span class="p">();</span>
<span class="k">extern</span> <span class="n">PyObject</span><span class="o">*</span> <span class="nf">PyContact_Link</span> <span class="p">(</span> <span class="n">Hurricane</span><span class="o">::</span><span class="n">Contact</span><span class="o">*</span> <span class="n">object</span> <span class="p">);</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="nf">PyContact_LinkPyType</span> <span class="p">();</span>
<span class="cp">#define IsPyContact(v) ( (v)-&gt;ob_type == &amp;PyTypeContact )</span>
<span class="cp">#define PYCONTACT(v) ( (PyContact*)(v) )</span>
@ -559,20 +565,20 @@ at this level because the class is a concrete one and can be instanciated.</p>
<h2>4.6 Terminal Class File<a class="headerlink" href="#terminal-class-file" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="#intermediate-class-file">4.4 Intermediate Class File</a> are:</p>
<ol class="arabic simple">
<li>As previously, we have to redefine the macros <tt class="docutils literal"><span class="pre">ACCESS_OBJECT</span></tt> and <tt class="docutils literal"><span class="pre">ACCESS_CLASS</span></tt>.
<li>As previously, we have to redefine the macros <code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> and <code class="docutils literal"><span class="pre">ACCESS_CLASS</span></code>.
But, as we are one level deeper into the hierarchy, one more level of
indirection using <tt class="docutils literal"><span class="pre">_baseObject</span></tt> must be used.<ul>
<li><tt class="docutils literal"><span class="pre">ACCESS_OBJECT</span></tt> becomes <tt class="docutils literal"><span class="pre">_baseObject._baseObject._object</span></tt>.</li>
<li><tt class="docutils literal"><span class="pre">ACCESS_CLASS</span></tt> becomes <tt class="docutils literal"><span class="pre">&amp;(_pyObject-&gt;_baseObject._baseObject)</span></tt>.</li>
indirection using <code class="docutils literal"><span class="pre">_baseObject</span></code> must be used.<ul>
<li><code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> becomes <code class="docutils literal"><span class="pre">_baseObject._baseObject._object</span></code>.</li>
<li><code class="docutils literal"><span class="pre">ACCESS_CLASS</span></code> becomes <code class="docutils literal"><span class="pre">&amp;(_pyObject-&gt;_baseObject._baseObject)</span></code>.</li>
</ul>
</li>
<li>For defining the <tt class="docutils literal"><span class="pre">PyTypeContact</span></tt> Python type, we call again
<tt class="docutils literal"><span class="pre">PyTypeInheritedObjectDefinitions()</span></tt>. It is the same whether the class is
<li>For defining the <code class="docutils literal"><span class="pre">PyTypeContact</span></code> Python type, we call again
<code class="docutils literal"><span class="pre">PyTypeInheritedObjectDefinitions()</span></code>. It is the same whether the class is
terminal or not.</li>
<li>And, this time, as the Python class is concrete, we call the macro
<tt class="docutils literal"><span class="pre">DBoLinkCreateMethod()</span></tt> to create the <tt class="docutils literal"><span class="pre">PyContact_Link()</span></tt> function.</li>
<code class="docutils literal"><span class="pre">DBoLinkCreateMethod()</span></code> to create the <code class="docutils literal"><span class="pre">PyContact_Link()</span></code> function.</li>
</ol>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include &quot;hurricane/isobar/PyContact.h&quot;</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyContact.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">Hurricane</span><span class="p">;</span>
@ -629,7 +635,7 @@ terminal or not.</li>
</div>
<div class="section" id="python-module">
<h2>4.8 Python Module<a class="headerlink" href="#python-module" title="Permalink to this headline"></a></h2>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">DL_EXPORT</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="n">initHurricane</span> <span class="p">()</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">DL_EXPORT</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="n">initHurricane</span> <span class="p">()</span>
<span class="p">{</span>
<span class="n">PyEntity_LinkPyType</span><span class="p">();</span> <span class="c1">// step 1.</span>
<span class="n">PyComponent_LinkPyType</span><span class="p">();</span>
@ -639,9 +645,9 @@ terminal or not.</li>
<span class="n">PYTYPE_READY_SUB</span><span class="p">(</span> <span class="n">Component</span><span class="p">,</span> <span class="n">Entity</span> <span class="p">)</span>
<span class="n">PYTYPE_READY_SUB</span><span class="p">(</span> <span class="n">Contact</span> <span class="p">,</span> <span class="n">Component</span> <span class="p">)</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;ent&quot;</span> <span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeEntity</span> <span class="p">,</span> <span class="s">&quot;&lt;Entity&gt;&quot;</span> <span class="p">,</span> <span class="kc">false</span> <span class="p">);</span> <span class="c1">// step 3.</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;comp&quot;</span> <span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeComponent</span><span class="p">,</span> <span class="s">&quot;&lt;Component&gt;&quot;</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="s">&quot;ent&quot;</span> <span class="p">);</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;contact&quot;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeContact</span> <span class="p">,</span> <span class="s">&quot;&lt;Contact&gt;&quot;</span> <span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="s">&quot;comp&quot;</span> <span class="p">);</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;ent&quot;</span> <span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeEntity</span> <span class="p">,</span> <span class="s">&quot;&lt;Entity&gt;&quot;</span> <span class="p">,</span> <span class="nb">false</span> <span class="p">);</span> <span class="c1">// step 3.</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;comp&quot;</span> <span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeComponent</span><span class="p">,</span> <span class="s">&quot;&lt;Component&gt;&quot;</span><span class="p">,</span> <span class="nb">false</span><span class="p">,</span> <span class="s">&quot;ent&quot;</span> <span class="p">);</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;contact&quot;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeContact</span> <span class="p">,</span> <span class="s">&quot;&lt;Contact&gt;&quot;</span> <span class="p">,</span> <span class="nb">false</span><span class="p">,</span> <span class="s">&quot;comp&quot;</span> <span class="p">);</span>
<span class="n">PyObject</span><span class="o">*</span> <span class="n">module</span> <span class="o">=</span> <span class="n">Py_InitModule</span><span class="p">(</span> <span class="s">&quot;Hurricane&quot;</span><span class="p">,</span> <span class="n">PyHurricane_Methods</span> <span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">module</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span>
@ -679,7 +685,7 @@ terminal or not.</li>
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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/C++ API Tutorial" href="index.html"/>
<link rel="next" title="4. Case 2 - Hierarchy of DBo Derived Classes" href="DBoHierarchy.html"/>
@ -165,7 +167,7 @@
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Configuration.html">2. Basic File Structure and CMake configuration</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="">3. Case 1 - DBo Derived, Standalone</a><ul>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3. Case 1 - DBo Derived, Standalone</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#class-associated-header-file">3.1 Class Associated Header File</a></li>
<li class="toctree-l3"><a class="reference internal" href="#class-associated-file">3.2 Class Associated File</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#head-of-the-file">3.2.1 Head of the file</a></li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -253,17 +258,17 @@
<div class="section" id="case-1-dbo-derived-standalone">
<h1>3. Case 1 - DBo Derived, Standalone<a class="headerlink" href="#case-1-dbo-derived-standalone" title="Permalink to this headline"></a></h1>
<p>As example, we take <tt class="docutils literal"><span class="pre">Library</span></tt>. This a <tt class="docutils literal"><span class="pre">DBo</span></tt> derived class, but we
<p>As example, we take <code class="docutils literal"><span class="pre">Library</span></code>. This a <code class="docutils literal"><span class="pre">DBo</span></code> derived class, but we
choose not to export the parent classes. From Python, it will appear
as a base class.</p>
<div class="section" id="class-associated-header-file">
<span id="id1"></span><span id="id2"></span><h2>3.1 Class Associated Header File<a class="headerlink" href="#class-associated-header-file" title="Permalink to this headline"></a></h2>
<p>Here is the typical content of a header file (for <tt class="docutils literal"><span class="pre">PyLibrary</span></tt>):</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#ifndef PY_LIBRARY_H</span>
<p>Here is the typical content of a header file (for <code class="docutils literal"><span class="pre">PyLibrary</span></code>):</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#ifndef PY_LIBRARY_H</span>
<span class="cp">#define PY_LIBRARY_H</span>
<span class="cp">#include &quot;hurricane/isobar/PyHurricane.h&quot;</span>
<span class="cp">#include &quot;hurricane/Library.h&quot;</span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyHurricane.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/Library.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">Hurricane</span><span class="p">;</span>
@ -277,8 +282,8 @@ as a base class.</p>
<span class="k">extern</span> <span class="n">PyTypeObject</span> <span class="n">PyTypeLibrary</span><span class="p">;</span>
<span class="k">extern</span> <span class="n">PyMethodDef</span> <span class="n">PyLibrary_Methods</span><span class="p">[];</span>
<span class="k">extern</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyLibrary_Link</span> <span class="p">(</span> <span class="n">Hurricane</span><span class="o">::</span><span class="n">Library</span><span class="o">*</span> <span class="n">lib</span> <span class="p">);</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="n">PyLibrary_LinkPyType</span> <span class="p">();</span>
<span class="k">extern</span> <span class="n">PyObject</span><span class="o">*</span> <span class="nf">PyLibrary_Link</span> <span class="p">(</span> <span class="n">Hurricane</span><span class="o">::</span><span class="n">Library</span><span class="o">*</span> <span class="n">lib</span> <span class="p">);</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="nf">PyLibrary_LinkPyType</span> <span class="p">();</span>
<span class="cp">#define IsPyLibrary(v) ( (v)-&gt;ob_type == &amp;PyTypeLibrary )</span>
@ -293,14 +298,14 @@ as a base class.</p>
</div>
<p>The code is organized as follow:</p>
<ol class="arabic">
<li><p class="first">It must have, <em>as the first include</em> <tt class="docutils literal"><span class="pre">PyHurricane.h</span></tt>, which provides
<li><p class="first">It must have, <em>as the first include</em> <code class="docutils literal"><span class="pre">PyHurricane.h</span></code>, which provides
the complete bunch of macros needed to build the module. Then the include
of the C++ class we want to wrap (<tt class="docutils literal"><span class="pre">Library.h</span></tt>).</p>
of the C++ class we want to wrap (<code class="docutils literal"><span class="pre">Library.h</span></code>).</p>
</li>
<li><p class="first">As Python is written in C, all the wrapper code has to be but inside
an <tt class="docutils literal"><span class="pre">extern</span> <span class="pre">&quot;C&quot;</span></tt> namespace.</p>
an <code class="docutils literal"><span class="pre">extern</span> <span class="pre">&quot;C&quot;</span></code> namespace.</p>
</li>
<li><p class="first">Definition of the wrapped <span class="cb">struct</span>, <tt class="docutils literal"><span class="pre">PyLibrary</span></tt>. It is standard Python here.</p>
<li><p class="first">Definition of the wrapped <span class="cb">struct</span>, <code class="docutils literal"><span class="pre">PyLibrary</span></code>. It is standard Python here.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">For our set of macros to work, the name of the pointer to the
@ -309,21 +314,21 @@ macros defined here must take the name of the class (either in
lowercase, camel case or capitals).</p>
</div>
</li>
<li><p class="first">Declaration of the Python type <tt class="docutils literal"><span class="pre">PyTypeLibrary</span></tt> (standard).</p>
<li><p class="first">Declaration of the Python type <code class="docutils literal"><span class="pre">PyTypeLibrary</span></code> (standard).</p>
</li>
<li><p class="first">Declaration of the Python type table of methods <tt class="docutils literal"><span class="pre">PyLibrary_Methods</span></tt> (standard).</p>
<li><p class="first">Declaration of the Python type table of methods <code class="docutils literal"><span class="pre">PyLibrary_Methods</span></code> (standard).</p>
</li>
</ol>
<ol class="arabic simple" id="id3" start="6">
<li>Declaration of <tt class="docutils literal"><span class="pre">PyLibrary_Link()</span></tt>, helper to convert a C++ <tt class="docutils literal"><span class="pre">Lybrary</span></tt> into
a <tt class="docutils literal"><span class="pre">PyLibrary</span></tt> (put in the support shared library).</li>
<li>Declaration of <tt class="docutils literal"><span class="pre">PyLibrary_LinkPyType()</span></tt>, this function setup the class-level
function of the new Python type (here, <tt class="docutils literal"><span class="pre">PyTypeLibrary</span></tt>).</li>
<li>Declaration of <code class="docutils literal"><span class="pre">PyLibrary_Link()</span></code>, helper to convert a C++ <code class="docutils literal"><span class="pre">Lybrary</span></code> into
a <code class="docutils literal"><span class="pre">PyLibrary</span></code> (put in the support shared library).</li>
<li>Declaration of <code class="docutils literal"><span class="pre">PyLibrary_LinkPyType()</span></code>, this function setup the class-level
function of the new Python type (here, <code class="docutils literal"><span class="pre">PyTypeLibrary</span></code>).</li>
<li>And, lastly, three macros to:<ul>
<li><tt class="docutils literal"><span class="pre">IsPylibrary()</span></tt>, know if a Python object is a <tt class="docutils literal"><span class="pre">PyLibrary</span></tt></li>
<li><tt class="docutils literal"><span class="pre">PYLIBRARY()</span></tt>, force cast (C style) of a <tt class="docutils literal"><span class="pre">PyObject</span></tt> into a <tt class="docutils literal"><span class="pre">PyLibrary</span></tt>.</li>
<li><tt class="docutils literal"><span class="pre">PYLIBRARY_O()</span></tt>, extract the C++ object (<tt class="docutils literal"><span class="pre">Library*</span></tt>) from the Python
object (<tt class="docutils literal"><span class="pre">PyLibrary</span></tt>).</li>
<li><code class="docutils literal"><span class="pre">IsPylibrary()</span></code>, know if a Python object is a <code class="docutils literal"><span class="pre">PyLibrary</span></code></li>
<li><code class="docutils literal"><span class="pre">PYLIBRARY()</span></code>, force cast (C style) of a <code class="docutils literal"><span class="pre">PyObject</span></code> into a <code class="docutils literal"><span class="pre">PyLibrary</span></code>.</li>
<li><code class="docutils literal"><span class="pre">PYLIBRARY_O()</span></code>, extract the C++ object (<code class="docutils literal"><span class="pre">Library*</span></code>) from the Python
object (<code class="docutils literal"><span class="pre">PyLibrary</span></code>).</li>
</ul>
</li>
</ol>
@ -332,9 +337,9 @@ object (<tt class="docutils literal"><span class="pre">PyLibrary</span></tt>).</
<span id="id4"></span><h2>3.2 Class Associated File<a class="headerlink" href="#class-associated-file" title="Permalink to this headline"></a></h2>
<div class="section" id="head-of-the-file">
<h3>3.2.1 Head of the file<a class="headerlink" href="#head-of-the-file" title="Permalink to this headline"></a></h3>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include &quot;hurricane/isobar/PyLibrary.h&quot;</span>
<span class="cp">#include &quot;hurricane/isobar/PyDataBase.h&quot;</span>
<span class="cp">#include &quot;hurricane/isobar/PyCell.h&quot;</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyLibrary.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyDataBase.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyCell.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">Hurricane</span><span class="p">;</span>
@ -344,14 +349,14 @@ object (<tt class="docutils literal"><span class="pre">PyLibrary</span></tt>).</
<span class="cp">#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Library,lib,function)</span>
</pre></div>
</div>
<p>As for the header, all the code must be put inside a <tt class="docutils literal"><span class="pre">extern</span> <span class="pre">&quot;C&quot;</span></tt> namespace.</p>
<p>A convenience macro <tt class="docutils literal"><span class="pre">METHOD_HEAD()</span></tt> must be defined, by refining
<tt class="docutils literal"><span class="pre">GENERIC_METHOD_HEAD()</span></tt>. This macro will be used in the method wrappers
below to cast the <tt class="docutils literal"><span class="pre">_object</span></tt> field of the Python object into the
<p>As for the header, all the code must be put inside a <code class="docutils literal"><span class="pre">extern</span> <span class="pre">&quot;C&quot;</span></code> namespace.</p>
<p>A convenience macro <code class="docutils literal"><span class="pre">METHOD_HEAD()</span></code> must be defined, by refining
<code class="docutils literal"><span class="pre">GENERIC_METHOD_HEAD()</span></code>. This macro will be used in the method wrappers
below to cast the <code class="docutils literal"><span class="pre">_object</span></code> field of the Python object into the
appropriate C++ class, this is done using a C-style cast.
The parameters of that macro are:</p>
<ol class="arabic simple">
<li>The C++ encapsulated class (<tt class="docutils literal"><span class="pre">Library</span></tt>).</li>
<li>The C++ encapsulated class (<code class="docutils literal"><span class="pre">Library</span></code>).</li>
<li>The name of the <em>variable</em> that will be used to store a pointer
to the C++ working object.</li>
<li>The name of the C++ method which is to be wrapped.</li>
@ -362,8 +367,8 @@ to the C++ working object.</li>
<p>First, we have to build all the wrappers to the C++ methods of
the class. For common predicates, accessors, and mutators macros
are supplied.</p>
<p>Wrapping of the <tt class="docutils literal"><span class="pre">Library::getCell()</span></tt> method:</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyLibrary_getCell</span> <span class="p">(</span> <span class="n">PyLibrary</span><span class="o">*</span> <span class="n">self</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span> <span class="p">)</span>
<p>Wrapping of the <code class="docutils literal"><span class="pre">Library::getCell()</span></code> method:</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="nf">PyLibrary_getCell</span> <span class="p">(</span> <span class="n">PyLibrary</span><span class="o">*</span> <span class="n">self</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">Cell</span><span class="o">*</span> <span class="n">cell</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
@ -385,18 +390,18 @@ are supplied.</p>
</div>
<p>Key points about this method wrapper:</p>
<ol class="arabic simple">
<li>The <tt class="docutils literal"><span class="pre">HTRY</span></tt> / <tt class="docutils literal"><span class="pre">HCATCH</span></tt> macros provides an insulation from the C++
<li>The <code class="docutils literal"><span class="pre">HTRY</span></code> / <code class="docutils literal"><span class="pre">HCATCH</span></code> macros provides an insulation from the C++
exceptions. If one is emitted, it will be catched and transformed in
a Python one. This way, the Python program will be cleanly interrupted
and the usual stack trace displayed.</li>
<li>The returned value of this method is of type <tt class="docutils literal"><span class="pre">Cell*</span></tt>, we have to
transform it into a Python one. This is done with <tt class="docutils literal"><span class="pre">PyCell_Link()</span></tt>.
This macro is supplied by the <tt class="docutils literal"><span class="pre">PyCell.h</span></tt> header and this is why
<li>The returned value of this method is of type <code class="docutils literal"><span class="pre">Cell*</span></code>, we have to
transform it into a Python one. This is done with <code class="docutils literal"><span class="pre">PyCell_Link()</span></code>.
This macro is supplied by the <code class="docutils literal"><span class="pre">PyCell.h</span></code> header and this is why
it must be included.</li>
</ol>
<p></p>
<p>Wrapping of the <tt class="docutils literal"><span class="pre">Library::create()</span></tt> method:</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyLibrary_create</span><span class="p">(</span> <span class="n">PyObject</span><span class="o">*</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span> <span class="p">)</span>
<p>Wrapping of the <code class="docutils literal"><span class="pre">Library::create()</span></code> method:</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="nf">PyLibrary_create</span><span class="p">(</span> <span class="n">PyObject</span><span class="o">*</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">PyObject</span><span class="o">*</span> <span class="n">arg0</span><span class="p">;</span>
<span class="n">PyObject</span><span class="o">*</span> <span class="n">arg1</span><span class="p">;</span>
@ -432,42 +437,42 @@ it must be included.</li>
<ol class="arabic simple">
<li>We want the Python interface to mimic as closely as possible the
C++ API. As such, Python object will be created using a static
<tt class="docutils literal"><span class="pre">.create()</span></tt> method. So we do not use the usual Python allocation
<code class="docutils literal"><span class="pre">.create()</span></code> method. So we do not use the usual Python allocation
mechanism.</li>
<li>As it is a <em>static</em> method, there is no first argument.</li>
<li>Python do not allow function overload like C++. To emulate that
behavior we use the <tt class="docutils literal"><span class="pre">__cs</span></tt> object (which is a global variable).<ol class="arabic">
<li>Init/reset the <tt class="docutils literal"><span class="pre">__cs</span></tt> object: see <em>step (1)</em>.</li>
<li>Call <tt class="docutils literal"><span class="pre">PyArg_ParseTuple()</span></tt>, read every mandatory or optional
argument as a Python object (<tt class="docutils literal"><span class="pre">&quot;O&amp;&quot;</span></tt>) and use <tt class="docutils literal"><span class="pre">Converter</span></tt>
on each one. <tt class="docutils literal"><span class="pre">Converter</span></tt> will determine the real type of
behavior we use the <code class="docutils literal"><span class="pre">__cs</span></code> object (which is a global variable).<ol class="arabic">
<li>Init/reset the <code class="docutils literal"><span class="pre">__cs</span></code> object: see <em>step (1)</em>.</li>
<li>Call <code class="docutils literal"><span class="pre">PyArg_ParseTuple()</span></code>, read every mandatory or optional
argument as a Python object (<code class="docutils literal"><span class="pre">&quot;O&amp;&quot;</span></code>) and use <code class="docutils literal"><span class="pre">Converter</span></code>
on each one. <code class="docutils literal"><span class="pre">Converter</span></code> will determine the real type of
the Python object given as argument by looking at the
encapsulated C++ class. It then update the <tt class="docutils literal"><span class="pre">__cs</span></tt> object.
encapsulated C++ class. It then update the <code class="docutils literal"><span class="pre">__cs</span></code> object.
Done in <em>step (2)</em></li>
<li>After the call to <tt class="docutils literal"><span class="pre">PyArg_ParseTuple()</span></tt>, the function
<tt class="docutils literal"><span class="pre">__cs.getObjectIds()</span></tt> will return the <em>signature</em> of
<li>After the call to <code class="docutils literal"><span class="pre">PyArg_ParseTuple()</span></code>, the function
<code class="docutils literal"><span class="pre">__cs.getObjectIds()</span></code> will return the <em>signature</em> of
the various arguments. In our case, the valid signatures
will be <tt class="docutils literal"><span class="pre">&quot;:db:string&quot;</span></tt> (<em>step (3.a)*a) and ``&#8221;:library:string&#8221;``
will be <code class="docutils literal"><span class="pre">&quot;:db:string&quot;</span></code> (<em>step (3.a)*a) and ``&#8221;:library:string&#8221;``
(*step (3.b)</em>).</li>
<li>Call the C++ method after extracting the C++ objects from
the Python arguments. Note the use of the <tt class="docutils literal"><span class="pre">PYLIBRARY_O()</span></tt>
and <tt class="docutils literal"><span class="pre">PYDATABSE_O()</span></tt> macros to perform the conversion.</li>
the Python arguments. Note the use of the <code class="docutils literal"><span class="pre">PYLIBRARY_O()</span></code>
and <code class="docutils literal"><span class="pre">PYDATABSE_O()</span></code> macros to perform the conversion.</li>
</ol>
</li>
<li>Return the result, encapsulated through a call to <tt class="docutils literal"><span class="pre">PyLibrary_Link()</span></tt>.</li>
<li>Return the result, encapsulated through a call to <code class="docutils literal"><span class="pre">PyLibrary_Link()</span></code>.</li>
</ol>
<p></p>
<p>Wrapping of the <tt class="docutils literal"><span class="pre">Library::destroy()</span></tt> method:</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">DBoDestroyAttribute</span><span class="p">(</span><span class="n">PyLibrary_destroy</span><span class="p">,</span> <span class="n">PyLibrary</span><span class="p">)</span>
<p>Wrapping of the <code class="docutils literal"><span class="pre">Library::destroy()</span></code> method:</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">DBoDestroyAttribute</span><span class="p">(</span><span class="n">PyLibrary_destroy</span><span class="p">,</span> <span class="n">PyLibrary</span><span class="p">)</span>
</pre></div>
</div>
<p>For C++ classes <strong>that are derived</strong> from <tt class="docutils literal"><span class="pre">DBo</span></tt>, the destroy method
wrapper must be defined using the macro <tt class="docutils literal"><span class="pre">DBoDestroyAttribute()</span></tt>.
<p>For C++ classes <strong>that are derived</strong> from <code class="docutils literal"><span class="pre">DBo</span></code>, the destroy method
wrapper must be defined using the macro <code class="docutils literal"><span class="pre">DBoDestroyAttribute()</span></code>.
This macro implements the bi-directional communication mechanism
using <tt class="docutils literal"><span class="pre">Hurricane::Property</span></tt>. It <strong>must not</strong> be used for
non <tt class="docutils literal"><span class="pre">DBo</span></tt> derived classes.</p>
using <code class="docutils literal"><span class="pre">Hurricane::Property</span></code>. It <strong>must not</strong> be used for
non <code class="docutils literal"><span class="pre">DBo</span></code> derived classes.</p>
<p>Defining the method table of the PyLibrary type:</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">PyMethodDef</span> <span class="n">PyLibrary_Methods</span><span class="p">[]</span> <span class="o">=</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">PyMethodDef</span> <span class="n">PyLibrary_Methods</span><span class="p">[]</span> <span class="o">=</span>
<span class="p">{</span> <span class="p">{</span> <span class="s">&quot;create&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyLibrary_create</span> <span class="p">,</span> <span class="n">METH_VARARGS</span><span class="o">|</span><span class="n">METH_STATIC</span>
<span class="p">,</span> <span class="s">&quot;Creates a new library.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span> <span class="s">&quot;getCell&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyLibrary_getCell</span><span class="p">,</span> <span class="n">METH_VARARGS</span>
@ -478,79 +483,79 @@ non <tt class="docutils literal"><span class="pre">DBo</span></tt> derived class
<span class="p">};</span>
</pre></div>
</div>
<p>This is standard Python/C API. The name of the <tt class="docutils literal"><span class="pre">PyMethodDef</span></tt> table must be
named from the class: <tt class="docutils literal"><span class="pre">PyLibrary_Methods</span></tt>.</p>
<p>This is standard Python/C API. The name of the <code class="docutils literal"><span class="pre">PyMethodDef</span></code> table must be
named from the class: <code class="docutils literal"><span class="pre">PyLibrary_Methods</span></code>.</p>
</div>
<div class="section" id="python-type-linking">
<h3>3.2.3 Python Type Linking<a class="headerlink" href="#python-type-linking" title="Permalink to this headline"></a></h3>
<p>Defining the <tt class="docutils literal"><span class="pre">PyTypeLibrary</span></tt> class methods and the type linking function.</p>
<p>Defining the <code class="docutils literal"><span class="pre">PyTypeLibrary</span></code> class methods and the type linking function.</p>
<p>Those are the functions for the Python object itself to work, not the
wrapped method from the C++ class.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">At this point we <strong>do not</strong> define the <tt class="docutils literal"><span class="pre">PyTypeLibrary</span></tt> itself.
<p class="last">At this point we <strong>do not</strong> define the <code class="docutils literal"><span class="pre">PyTypeLibrary</span></code> itself.
Only it&#8217;s functions and a function to set them up <em>once</em> the
type will be defined.</p>
</div>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">DBoDeleteMethod</span><span class="p">(</span><span class="n">Library</span><span class="p">)</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">DBoDeleteMethod</span><span class="p">(</span><span class="n">Library</span><span class="p">)</span>
<span class="n">PyTypeObjectLinkPyType</span><span class="p">(</span><span class="n">Library</span><span class="p">)</span>
</pre></div>
</div>
<p>The macro <tt class="docutils literal"><span class="pre">DBoDeleteMethod()</span></tt> define the function to delete a
<tt class="docutils literal"><span class="pre">PyLibrary</span></tt> <em>Python</em> object. Again, do not mistake it for the deletion
of the C++ class (implemented by <tt class="docutils literal"><span class="pre">DBoDestroyAttribute()</span></tt>).
Here again, <tt class="docutils literal"><span class="pre">DBoDeleteMethod()</span></tt> is specially tailored for
<tt class="docutils literal"><span class="pre">DBo</span></tt> derived classes.</p>
<p id="pylibrary-linkpytype">To define <tt class="docutils literal"><span class="pre">PyLibrary_LinkPyType()</span></tt>, use the <tt class="docutils literal"><span class="pre">PyTypeObjectLinkPyType()</span></tt>
macro. This macro is specific for <tt class="docutils literal"><span class="pre">DBo</span></tt> derived classes that are seen as
<p>The macro <code class="docutils literal"><span class="pre">DBoDeleteMethod()</span></code> define the function to delete a
<code class="docutils literal"><span class="pre">PyLibrary</span></code> <em>Python</em> object. Again, do not mistake it for the deletion
of the C++ class (implemented by <code class="docutils literal"><span class="pre">DBoDestroyAttribute()</span></code>).
Here again, <code class="docutils literal"><span class="pre">DBoDeleteMethod()</span></code> is specially tailored for
<code class="docutils literal"><span class="pre">DBo</span></code> derived classes.</p>
<p id="pylibrary-linkpytype">To define <code class="docutils literal"><span class="pre">PyLibrary_LinkPyType()</span></code>, use the <code class="docutils literal"><span class="pre">PyTypeObjectLinkPyType()</span></code>
macro. This macro is specific for <code class="docutils literal"><span class="pre">DBo</span></code> derived classes that are seen as
base classes under Python (i.e. we don&#8217;t bother exposing the base
class under Python). <tt class="docutils literal"><span class="pre">PyLibrary_LinkPyType()</span></tt> setup the class functions
in the <tt class="docutils literal"><span class="pre">PyTypeLibrary</span></tt> type object, it <strong>must</strong> be called in the
Python module this class is part of (in this case: <tt class="docutils literal"><span class="pre">PyHurricane.cpp</span></tt>).
class under Python). <code class="docutils literal"><span class="pre">PyLibrary_LinkPyType()</span></code> setup the class functions
in the <code class="docutils literal"><span class="pre">PyTypeLibrary</span></code> type object, it <strong>must</strong> be called in the
Python module this class is part of (in this case: <code class="docutils literal"><span class="pre">PyHurricane.cpp</span></code>).
This particular flavor of the macro <em>will define</em> and setup the
following class functions:</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">PyTypeLibrary.tp_compare</span></tt> (defined by the macro).</li>
<li><tt class="docutils literal"><span class="pre">PyTypeLibrary.tp_repr</span></tt> (defined by the macro).</li>
<li><tt class="docutils literal"><span class="pre">PyTypeLibrary.tp_str</span></tt> (defined by the macro).</li>
<li><tt class="docutils literal"><span class="pre">PyTypeLibrary.tp_hash</span></tt> (defined by the macro).</li>
<li><tt class="docutils literal"><span class="pre">PyTypeLibrary.tp_methods</span></tt> sets to the previously defined <tt class="docutils literal"><span class="pre">PyLibrary_Methods</span></tt> table.</li>
<li><tt class="docutils literal"><span class="pre">PyTypeLibrary.tp_dealloc</span></tt> is set to a function that <em>must</em> be named <tt class="docutils literal"><span class="pre">PyLibrary_DeAlloc</span></tt>,
this is what <tt class="docutils literal"><span class="pre">DBoDeleteMethod</span></tt> does. It is <em>not</em> done by <tt class="docutils literal"><span class="pre">PyTypeObjectLinkPyType</span></tt>.</li>
<li><code class="docutils literal"><span class="pre">PyTypeLibrary.tp_compare</span></code> (defined by the macro).</li>
<li><code class="docutils literal"><span class="pre">PyTypeLibrary.tp_repr</span></code> (defined by the macro).</li>
<li><code class="docutils literal"><span class="pre">PyTypeLibrary.tp_str</span></code> (defined by the macro).</li>
<li><code class="docutils literal"><span class="pre">PyTypeLibrary.tp_hash</span></code> (defined by the macro).</li>
<li><code class="docutils literal"><span class="pre">PyTypeLibrary.tp_methods</span></code> sets to the previously defined <code class="docutils literal"><span class="pre">PyLibrary_Methods</span></code> table.</li>
<li><code class="docutils literal"><span class="pre">PyTypeLibrary.tp_dealloc</span></code> is set to a function that <em>must</em> be named <code class="docutils literal"><span class="pre">PyLibrary_DeAlloc</span></code>,
this is what <code class="docutils literal"><span class="pre">DBoDeleteMethod</span></code> does. It is <em>not</em> done by <code class="docutils literal"><span class="pre">PyTypeObjectLinkPyType</span></code>.</li>
</ul>
<p>Defining the <tt class="docutils literal"><span class="pre">PyTypeLibrary</span></tt> type:</p>
<p>Defining the <code class="docutils literal"><span class="pre">PyTypeLibrary</span></code> type:</p>
</div>
<div class="section" id="the-shared-library-part">
<h3>3.2.4 The Shared Library Part<a class="headerlink" href="#the-shared-library-part" title="Permalink to this headline"></a></h3>
<p>This part will be put in a separate supporting shared library, allowing
other Python module to link against it (and make use of its symbols).</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">DBoLinkCreateMethod</span><span class="p">(</span><span class="n">Library</span><span class="p">)</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">DBoLinkCreateMethod</span><span class="p">(</span><span class="n">Library</span><span class="p">)</span>
<span class="n">PyTypeObjectDefinitions</span><span class="p">(</span><span class="n">Library</span><span class="p">)</span>
</pre></div>
</div>
<p>To define <tt class="docutils literal"><span class="pre">PyTypeLibrary</span></tt>, use the <tt class="docutils literal"><span class="pre">PyTypeObjectDefinitions()</span></tt> macro.
<p>To define <code class="docutils literal"><span class="pre">PyTypeLibrary</span></code>, use the <code class="docutils literal"><span class="pre">PyTypeObjectDefinitions()</span></code> macro.
This macro is specific for classes that, as exposed by Python,
are neither <em>derived</em> classes nor <em>base</em> classes for others.
That is, they are standalone from the inheritance point of view.</p>
<p>The <tt class="docutils literal"><span class="pre">DBoLinkCreateMethod()</span></tt> macro will define the <tt class="docutils literal"><span class="pre">PyLibrary_Link()</span></tt>
function which is responsible for encapsulating a C++ <tt class="docutils literal"><span class="pre">Library</span></tt> object
into a Python <tt class="docutils literal"><span class="pre">PyLibrary</span></tt> one.</p>
<p>The <code class="docutils literal"><span class="pre">DBoLinkCreateMethod()</span></code> macro will define the <code class="docutils literal"><span class="pre">PyLibrary_Link()</span></code>
function which is responsible for encapsulating a C++ <code class="docutils literal"><span class="pre">Library</span></code> object
into a Python <code class="docutils literal"><span class="pre">PyLibrary</span></code> one.</p>
</div>
</div>
<div class="section" id="python-module-c-namespace">
<h2>3.3 Python Module (C++ namespace)<a class="headerlink" href="#python-module-c-namespace" title="Permalink to this headline"></a></h2>
<p>We use the Python module to replicate the C++ <em>namespace</em>. Thus, for the
<tt class="docutils literal"><span class="pre">Hurricane</span></tt> namespace we create a Python <tt class="docutils literal"><span class="pre">Hurricane</span></tt> module which is
defined in the <tt class="docutils literal"><span class="pre">PyHurricane.cpp</span></tt> file, then we add into that module
<code class="docutils literal"><span class="pre">Hurricane</span></code> namespace we create a Python <code class="docutils literal"><span class="pre">Hurricane</span></code> module which is
defined in the <code class="docutils literal"><span class="pre">PyHurricane.cpp</span></code> file, then we add into that module
dictionary all the Python types encapsulating the C++ classes of that
namespace.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">DL_EXPORT</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="n">initHurricane</span> <span class="p">()</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">DL_EXPORT</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="n">initHurricane</span> <span class="p">()</span>
<span class="p">{</span>
<span class="n">PyLibrary_LinkPyType</span><span class="p">();</span> <span class="c1">// step 1.</span>
<span class="n">PYTYPE_READY</span><span class="p">(</span> <span class="n">Library</span> <span class="p">)</span> <span class="c1">// step 2.</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;library&quot;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeLibrary</span><span class="p">,</span> <span class="s">&quot;&lt;Library&gt;&quot;</span><span class="p">,</span> <span class="kc">false</span> <span class="p">);</span> <span class="c1">// step 3.</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;library&quot;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeLibrary</span><span class="p">,</span> <span class="s">&quot;&lt;Library&gt;&quot;</span><span class="p">,</span> <span class="nb">false</span> <span class="p">);</span> <span class="c1">// step 3.</span>
<span class="n">PyObject</span><span class="o">*</span> <span class="n">module</span> <span class="o">=</span> <span class="n">Py_InitModule</span><span class="p">(</span> <span class="s">&quot;Hurricane&quot;</span><span class="p">,</span> <span class="n">PyHurricane_Methods</span> <span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">module</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span>
@ -564,24 +569,24 @@ namespace.</p>
<span class="p">}</span>
</pre></div>
</div>
<p>The <tt class="docutils literal"><span class="pre">initHurricane()</span></tt> initialisation function shown above has
been scrubbed of everything not relevant to the <tt class="docutils literal"><span class="pre">PyLibrary</span></tt> class.
The integration of the <tt class="docutils literal"><span class="pre">PyLibrary</span></tt> class into the module needs
<p>The <code class="docutils literal"><span class="pre">initHurricane()</span></code> initialisation function shown above has
been scrubbed of everything not relevant to the <code class="docutils literal"><span class="pre">PyLibrary</span></code> class.
The integration of the <code class="docutils literal"><span class="pre">PyLibrary</span></code> class into the module needs
four steps:</p>
<ol class="arabic">
<li><p class="first">A call to <a class="reference internal" href="#pylibrary-linkpytype">PyLibrary_LinkPyType()</a> to hook the Python type functions
in the Python type object.</p>
</li>
<li><p class="first">A call to the <tt class="docutils literal"><span class="pre">PYTYPE_READY()</span></tt> macro (standard Python).</p>
<li><p class="first">A call to the <code class="docutils literal"><span class="pre">PYTYPE_READY()</span></code> macro (standard Python).</p>
</li>
<li><p class="first">Registering the type into the <tt class="docutils literal"><span class="pre">__cs</span></tt> object, with <tt class="docutils literal"><span class="pre">addType()</span></tt>.
<li><p class="first">Registering the type into the <code class="docutils literal"><span class="pre">__cs</span></code> object, with <code class="docutils literal"><span class="pre">addType()</span></code>.
The arguments are self explanatory, save for the last which is a
boolean to tell if this is a <em>derived</em> class or not.</p>
</li>
<li><p class="first">Adding the type object (<tt class="docutils literal"><span class="pre">PyTypeLibrary</span></tt>) into the dictionnary of
<li><p class="first">Adding the type object (<code class="docutils literal"><span class="pre">PyTypeLibrary</span></code>) into the dictionnary of
the module itself. This allow to mimic closely the C++ syntax:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">Hurricane</span>
<span class="n">lib</span> <span class="o">=</span> <span class="n">Hurricane</span><span class="o">.</span><span class="n">Library</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">db</span><span class="p">,</span> <span class="s">&#39;root&#39;</span> <span class="p">)</span>
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">Hurricane</span>
<span class="n">lib</span> <span class="o">=</span> <span class="n">Hurricane</span><span class="o">.</span><span class="n">Library</span><span class="o">.</span><span class="n">create</span><span class="p">(</span> <span class="n">db</span><span class="p">,</span> <span class="s1">&#39;root&#39;</span> <span class="p">)</span>
</pre></div>
</div>
</li>
@ -610,7 +615,7 @@ the module itself. This allow to mimic closely the C++ syntax:</p>
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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/C++ API Tutorial" href="index.html"/>
<link rel="next" title="7. No C++ Hurricane::Name encapsulation" href="Name.html"/>
@ -193,7 +195,7 @@
<li class="toctree-l3"><a class="reference internal" href="NonDBo.html#id1">5.2 Class File</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="">6. Encapsulating DbU</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">6. Encapsulating DbU</a></li>
<li class="toctree-l2"><a class="reference internal" href="Name.html">7. No C++ Hurricane::Name encapsulation</a></li>
</ul>
</li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -253,19 +258,19 @@
<div class="section" id="encapsulating-dbu">
<h1>6. Encapsulating DbU<a class="headerlink" href="#encapsulating-dbu" title="Permalink to this headline"></a></h1>
<p>While <tt class="docutils literal"><span class="pre">Hurricane::DbU</span></tt> is a class, the <tt class="docutils literal"><span class="pre">Hurricane::DbU::Unit</span></tt> is only
a <tt class="docutils literal"><span class="pre">typedef</span></tt> over <tt class="docutils literal"><span class="pre">uint64_t</span></tt>. The <tt class="docutils literal"><span class="pre">DbU</span></tt> class only provides a set of
<p>While <code class="docutils literal"><span class="pre">Hurricane::DbU</span></code> is a class, the <code class="docutils literal"><span class="pre">Hurricane::DbU::Unit</span></code> is only
a <code class="docutils literal"><span class="pre">typedef</span></code> over <code class="docutils literal"><span class="pre">uint64_t</span></code>. The <code class="docutils literal"><span class="pre">DbU</span></code> class only provides a set of
static methods to manipulate and convert to and from other units.
At Python level, <tt class="docutils literal"><span class="pre">DbU::Unit</span></tt> will be stored in plain <tt class="docutils literal"><span class="pre">long</span> <span class="pre">long</span></tt>.</p>
<p>When a <tt class="docutils literal"><span class="pre">DbU::Unit</span></tt> argument is expected in a Python functions, just use
the <tt class="docutils literal"><span class="pre">DbU::Unit</span>&nbsp; <span class="pre">PyAny_AsLong(</span> <span class="pre">PyObject*</span> <span class="pre">)</span></tt> function to convert it.</p>
At Python level, <code class="docutils literal"><span class="pre">DbU::Unit</span></code> will be stored in plain <code class="docutils literal"><span class="pre">long</span> <span class="pre">long</span></code>.</p>
<p>When a <code class="docutils literal"><span class="pre">DbU::Unit</span></code> argument is expected in a Python functions, just use
the <code class="docutils literal"><span class="pre">DbU::Unit</span>&#160; <span class="pre">PyAny_AsLong(</span> <span class="pre">PyObject*</span> <span class="pre">)</span></code> function to convert it.</p>
<p>For example, if we explicit the expension of:</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">DirectSetLongAttribute</span><span class="p">(</span><span class="n">PyPoint_SetX</span><span class="p">,</span><span class="n">setX</span><span class="p">,</span><span class="n">PyPoint</span><span class="p">,</span><span class="n">Point</span><span class="p">)</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">DirectSetLongAttribute</span><span class="p">(</span><span class="n">PyPoint_SetX</span><span class="p">,</span><span class="n">setX</span><span class="p">,</span><span class="n">PyPoint</span><span class="p">,</span><span class="n">Point</span><span class="p">)</span>
</pre></div>
</div>
<p></p>
<p>We would get:</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyPoint_setX</span> <span class="p">(</span> <span class="n">PyPoint</span> <span class="o">*</span><span class="n">self</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span> <span class="p">)</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="nf">PyPoint_setX</span> <span class="p">(</span> <span class="n">PyPoint</span> <span class="o">*</span><span class="n">self</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">Point</span><span class="o">*</span> <span class="n">cobject</span> <span class="o">=</span> <span class="k">static_cast</span><span class="o">&lt;</span><span class="n">Point</span><span class="o">*&gt;</span><span class="p">(</span> <span class="n">self</span><span class="o">-&gt;</span><span class="n">_object</span> <span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">cobject</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span>
@ -284,12 +289,12 @@ the <tt class="docutils literal"><span class="pre">DbU::Unit</span>&nbsp; <span
<span class="p">}</span>
</pre></div>
</div>
<p>For the other way around, use <tt class="docutils literal"><span class="pre">PyObject*</span> <span class="pre">PyDbU_FromLong(</span> <span class="pre">DbU::Unit</span> <span class="pre">)</span></tt>.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">DirectGetLongAttribute</span><span class="p">(</span><span class="n">PyPoint_GetX</span><span class="p">,</span><span class="n">getX</span><span class="p">,</span><span class="n">PyPoint</span><span class="p">,</span><span class="n">Point</span><span class="p">)</span>
<p>For the other way around, use <code class="docutils literal"><span class="pre">PyObject*</span> <span class="pre">PyDbU_FromLong(</span> <span class="pre">DbU::Unit</span> <span class="pre">)</span></code>.</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">DirectGetLongAttribute</span><span class="p">(</span><span class="n">PyPoint_GetX</span><span class="p">,</span><span class="n">getX</span><span class="p">,</span><span class="n">PyPoint</span><span class="p">,</span><span class="n">Point</span><span class="p">)</span>
</pre></div>
</div>
<p>We would get:</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyPoint_GetX</span> <span class="p">(</span> <span class="n">PyPoint</span> <span class="o">*</span><span class="n">self</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span> <span class="p">)</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="nf">PyPoint_GetX</span> <span class="p">(</span> <span class="n">PyPoint</span> <span class="o">*</span><span class="n">self</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">Point</span><span class="o">*</span> <span class="n">cobject</span> <span class="o">=</span> <span class="k">static_cast</span><span class="o">&lt;</span><span class="n">Point</span><span class="o">*&gt;</span><span class="p">(</span> <span class="n">self</span><span class="o">-&gt;</span><span class="n">_object</span> <span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">cobject</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span>
@ -324,7 +329,7 @@ the <tt class="docutils literal"><span class="pre">DbU::Unit</span>&nbsp; <span
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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/C++ API Tutorial" href="index.html"/>
<link rel="next" title="2. Basic File Structure and CMake configuration" href="Configuration.html"/>
@ -158,7 +160,7 @@
<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 current"><a class="reference internal" href="index.html">Hurricane Python/C++ API Tutorial</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="">1. Introduction</a><ul>
<li class="toctree-l2 current"><a class="current reference internal" href="#">1. Introduction</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#first-a-disclaimer">1.1 First, A Disclaimer</a></li>
<li class="toctree-l3"><a class="reference internal" href="#about-technical-choices">1.2 About Technical Choices</a></li>
<li class="toctree-l3"><a class="reference internal" href="#botched-design">1.3 Botched Design</a></li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -268,17 +273,17 @@ You only have to respect some naming convention.</li>
my mastering of template programming was less than complete. This is why this
interface is build with old fashioned C macro instead of C++ template.</p>
<p>It is my hope that at some point in the future I will have time to completly
rewrite it, borrowing the interface from <tt class="docutils literal"><span class="pre">boost::python</span></tt>.</p>
rewrite it, borrowing the interface from <code class="docutils literal"><span class="pre">boost::python</span></code>.</p>
</div>
<div class="section" id="about-technical-choices">
<h2>1.2 About Technical Choices<a class="headerlink" href="#about-technical-choices" title="Permalink to this headline"></a></h2>
<p>Some would say, why not use <em>off the shelf</em> wrappers like <tt class="docutils literal"><span class="pre">swig</span></tt>
or <tt class="docutils literal"><span class="pre">boost::python</span></tt>, here are some clues.</p>
<p>Some would say, why not use <em>off the shelf</em> wrappers like <code class="docutils literal"><span class="pre">swig</span></code>
or <code class="docutils literal"><span class="pre">boost::python</span></code>, here are some clues.</p>
<ol class="arabic">
<li><p class="first"><strong>Partial exposure of the C++ class tree.</strong> We expose at Python level
C++ base classes, only if they provides common methods that we want
to see. Otherwise, we just show them as base classes under Python.
For instance <tt class="docutils literal"><span class="pre">Library</span></tt> is derived from <tt class="docutils literal"><span class="pre">DBo</span></tt>, but we won&#8217;t see
For instance <code class="docutils literal"><span class="pre">Library</span></code> is derived from <code class="docutils literal"><span class="pre">DBo</span></code>, but we won&#8217;t see
it under Python.</p>
</li>
<li><p class="first"><strong>Bi-directional communication.</strong> When a Python object is deleted, the
@ -293,14 +298,14 @@ C++ pointer. So our Python objects can be warned by the C++ objects
that they are no longer valid and any other operation than the
deletion should result in a severe non-blocking error.</p>
<p>To be precise, this apply to persistent object in the C++ database,
like <tt class="docutils literal"><span class="pre">Cell</span></tt>, <tt class="docutils literal"><span class="pre">Net</span></tt>, <tt class="docutils literal"><span class="pre">Instance</span></tt> or <tt class="docutils literal"><span class="pre">Component</span></tt>. Short lived
objects like <tt class="docutils literal"><span class="pre">Box</span></tt> or <tt class="docutils literal"><span class="pre">Point</span></tt> retains the classic Python behavior.</p>
<p>Another aspect is that, for all derived <tt class="docutils literal"><span class="pre">DBo</span></tt> objects, one and only
one Python object is associated. For one given <tt class="docutils literal"><span class="pre">Instance</span></tt> object we
will always return the <em>same</em> <tt class="docutils literal"><span class="pre">PyInstance</span></tt> object, thanks to the
like <code class="docutils literal"><span class="pre">Cell</span></code>, <code class="docutils literal"><span class="pre">Net</span></code>, <code class="docutils literal"><span class="pre">Instance</span></code> or <code class="docutils literal"><span class="pre">Component</span></code>. Short lived
objects like <code class="docutils literal"><span class="pre">Box</span></code> or <code class="docutils literal"><span class="pre">Point</span></code> retains the classic Python behavior.</p>
<p>Another aspect is that, for all derived <code class="docutils literal"><span class="pre">DBo</span></code> objects, one and only
one Python object is associated. For one given <code class="docutils literal"><span class="pre">Instance</span></code> object we
will always return the <em>same</em> <code class="docutils literal"><span class="pre">PyInstance</span></code> object, thanks to the
bi-directional link. Obviously, the <em>reference count</em> of the
<tt class="docutils literal"><span class="pre">PyInstance</span></tt> is managed accordingly. This mechanism is implemented
by the <tt class="docutils literal"><span class="pre">PyInstance_Link()</span></tt> function.</p>
<code class="docutils literal"><span class="pre">PyInstance</span></code> is managed accordingly. This mechanism is implemented
by the <code class="docutils literal"><span class="pre">PyInstance_Link()</span></code> function.</p>
</li>
<li><p class="first"><strong>Linking accross modules.</strong> As far as I understand, the wrappers
are for monolithic libraries. That is, you wrap the entire library
@ -322,17 +327,17 @@ requiring the functions will link against the associated shared
library.</li>
</ul>
<p>Each module file will be compiled <em>twice</em>, once to build the Python
module (<tt class="docutils literal"><span class="pre">__PYTHON_MODULE</span></tt> is defined) and once to build the supporting
shared library (<tt class="docutils literal"><span class="pre">__PYTHON_MODULE__</span></tt> <strong>not</strong> defined). This tricky
double compilation is taken care of though the <tt class="docutils literal"><span class="pre">add_python_module</span></tt>
<tt class="docutils literal"><span class="pre">cmake</span></tt> macro.</p>
module (<code class="docutils literal"><span class="pre">__PYTHON_MODULE</span></code> is defined) and once to build the supporting
shared library (<code class="docutils literal"><span class="pre">__PYTHON_MODULE__</span></code> <strong>not</strong> defined). This tricky
double compilation is taken care of though the <code class="docutils literal"><span class="pre">add_python_module</span></code>
<code class="docutils literal"><span class="pre">cmake</span></code> macro.</p>
<p>For the core Hurricane library we will have:</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">Hurricane.so</span></tt> the Python module (use with: <tt class="docutils literal"><span class="pre">import</span> <span class="pre">Hurricane</span></tt>).</li>
<li><tt class="docutils literal"><span class="pre">libisobar.so.1.0</span></tt> the supporting shared library.</li>
<li><code class="docutils literal"><span class="pre">Hurricane.so</span></code> the Python module (use with: <code class="docutils literal"><span class="pre">import</span> <span class="pre">Hurricane</span></code>).</li>
<li><code class="docutils literal"><span class="pre">libisobar.so.1.0</span></code> the supporting shared library.</li>
</ul>
<p>The <tt class="docutils literal"><span class="pre">PyLibrary.cpp</span></tt> file will have the following structure:</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include &quot;hurricane/isobar/PyLibrary.h&quot;</span>
<p>The <code class="docutils literal"><span class="pre">PyLibrary.cpp</span></code> file will have the following structure:</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyLibrary.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
@ -340,21 +345,21 @@ double compilation is taken care of though the <tt class="docutils literal"><spa
<span class="cp">#if defined(__PYTHON_MODULE__)</span>
<span class="cp"> // +=================================================================+</span>
<span class="cp"> // | &quot;PyLibrary&quot; Python Module Code Part |</span>
<span class="cp"> // +=================================================================+</span>
<span class="cp"> //</span>
<span class="cp"> // The classic part of a Python module. Goes into Hurricane.so.</span>
<span class="c1">// +=================================================================+</span>
<span class="c1">// | &quot;PyLibrary&quot; Python Module Code Part |</span>
<span class="c1">// +=================================================================+</span>
<span class="c1">//</span>
<span class="c1">// The classic part of a Python module. Goes into Hurricane.so.</span>
<span class="cp">#else </span><span class="c1">// End of Python Module Code Part.</span>
<span class="cp"> // x=================================================================x</span>
<span class="cp"> // | &quot;PyLibrary&quot; Shared Library Code Part |</span>
<span class="cp"> // x=================================================================x</span>
<span class="cp"> //</span>
<span class="cp"> // Functions here will be part of the associated shared library and</span>
<span class="cp"> // made available to all other Python modules. Goes into libisobar.so.1.0</span>
<span class="c1">// x=================================================================x</span>
<span class="c1">// | &quot;PyLibrary&quot; Shared Library Code Part |</span>
<span class="c1">// x=================================================================x</span>
<span class="c1">//</span>
<span class="c1">// Functions here will be part of the associated shared library and</span>
<span class="c1">// made available to all other Python modules. Goes into libisobar.so.1.0</span>
<span class="cp"># endif </span><span class="c1">// Shared Library Code Part.</span>
@ -372,12 +377,12 @@ modules, but directly uses linker capabilities.</p>
<div class="section" id="botched-design">
<h2>1.3 Botched Design<a class="headerlink" href="#botched-design" title="Permalink to this headline"></a></h2>
<p>The mechanism to compute the signature of a call to a Python function,
the <tt class="docutils literal"><span class="pre">__cs</span></tt> object, is much too complex and, in fact, not needed.
the <code class="docutils literal"><span class="pre">__cs</span></code> object, is much too complex and, in fact, not needed.
At some point I may root it out, but it is used in so many places...</p>
<p>What I should have used the <tt class="docutils literal"><span class="pre">&quot;O!&quot;</span></tt> capablity of <tt class="docutils literal"><span class="pre">PyArg_ParseTuple()</span></tt>,
<p>What I should have used the <code class="docutils literal"><span class="pre">&quot;O!&quot;</span></code> capablity of <code class="docutils literal"><span class="pre">PyArg_ParseTuple()</span></code>,
like in the code below:</p>
<p></p>
<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyContact_create</span> <span class="p">(</span> <span class="n">PyObject</span><span class="o">*</span><span class="p">,</span> <span class="n">PyObject</span> <span class="o">*</span><span class="n">args</span> <span class="p">)</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="nf">PyContact_create</span> <span class="p">(</span> <span class="n">PyObject</span><span class="o">*</span><span class="p">,</span> <span class="n">PyObject</span> <span class="o">*</span><span class="n">args</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">Contact</span><span class="o">*</span> <span class="n">contact</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">HTRY</span>
@ -438,7 +443,7 @@ like in the code below:</p>
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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/C++ API Tutorial" href="index.html"/>
<link rel="next" title="Symbolic to Real Conversion in Alliance" href="../RDS/index.html"/>
@ -194,7 +196,7 @@
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="DbU.html">6. Encapsulating DbU</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="">7. No C++ Hurricane::Name encapsulation</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">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>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -277,7 +282,7 @@
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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/C++ API Tutorial" href="index.html"/>
<link rel="next" title="6. Encapsulating DbU" href="DbU.html"/>
@ -187,7 +189,7 @@
<li class="toctree-l3"><a class="reference internal" href="DBoHierarchy.html#python-module">4.8 Python Module</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="">5. Case 3 - Non-DBo Standalone Classe</a><ul>
<li class="toctree-l2 current"><a class="current reference internal" href="#">5. Case 3 - Non-DBo Standalone Classe</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#class-header">5.1 Class Header</a></li>
<li class="toctree-l3"><a class="reference internal" href="#class-file">5.2 Class File</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id1">5.2 Class File</a></li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -253,30 +258,30 @@
<div class="section" id="case-3-non-dbo-standalone-classe">
<h1>5. Case 3 - Non-DBo Standalone Classe<a class="headerlink" href="#case-3-non-dbo-standalone-classe" title="Permalink to this headline"></a></h1>
<p>Let&#8217;s have a look at the encapsulation of <tt class="docutils literal"><span class="pre">Hurricane::Point</span></tt>.</p>
<p>Let&#8217;s have a look at the encapsulation of <code class="docutils literal"><span class="pre">Hurricane::Point</span></code>.</p>
<p>Non-BDo derived classes do not support the bi-directionnal communication.
So each Python object is associated with one C++ object. The C++ object
is created and deleted along with the Python one. This behavior implies
that the C++ object is <em>copy constructible</em> (which should be the case).</p>
<div class="section" id="class-header">
<h2>5.1 Class Header<a class="headerlink" href="#class-header" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-header-file"><em>3.1 Class Associated Header File</em></a>:</p>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-header-file"><span class="std std-ref">3.1 Class Associated Header File</span></a>:</p>
<ul class="simple">
<li>There is no <tt class="docutils literal"><span class="pre">PyPoint_Link()</span></tt> function, as it&#8217;s related to the
<li>There is no <code class="docutils literal"><span class="pre">PyPoint_Link()</span></code> function, as it&#8217;s related to the
bi-directional communication mechanism.</li>
</ul>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>About the _object attribute</strong> of the PyPoint. As the C++ object life span
(<tt class="docutils literal"><span class="pre">Point</span></tt>) is linked to the Python (<tt class="docutils literal"><span class="pre">PyPoint</span></tt>) one, we may have used a
(<code class="docutils literal"><span class="pre">Point</span></code>) is linked to the Python (<code class="docutils literal"><span class="pre">PyPoint</span></code>) one, we may have used a
value instead of a pointer. It is best to keep a pointer as the macros
written for <tt class="docutils literal"><span class="pre">DBo</span></tt> derived classes will remain usables.</p>
written for <code class="docutils literal"><span class="pre">DBo</span></code> derived classes will remain usables.</p>
</div>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#ifndef ISOBAR_PY_POINT_H</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#ifndef ISOBAR_PY_POINT_H</span>
<span class="cp">#define ISOBAR_PY_POINT_H</span>
<span class="cp">#include &quot;hurricane/isobar/PyHurricane.h&quot;</span>
<span class="cp">#include &quot;hurricane/Point.h&quot;</span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyHurricane.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/Point.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">extern</span> <span class="s">&quot;C&quot;</span> <span class="p">{</span>
@ -288,7 +293,7 @@ written for <tt class="docutils literal"><span class="pre">DBo</span></tt> deriv
<span class="k">extern</span> <span class="n">PyTypeObject</span> <span class="n">PyTypePoint</span><span class="p">;</span>
<span class="k">extern</span> <span class="n">PyMethodDef</span> <span class="n">PyPoint_Methods</span><span class="p">[];</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="n">PyPoint_LinkPyType</span><span class="p">();</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="nf">PyPoint_LinkPyType</span><span class="p">();</span>
<span class="cp">#define IsPyPoint(v) ( (v)-&gt;ob_type == &amp;PyTypePoint )</span>
<span class="cp">#define PYPOINT(v) ( (PyPoint*)(v) )</span>
@ -304,21 +309,21 @@ written for <tt class="docutils literal"><span class="pre">DBo</span></tt> deriv
</div>
<div class="section" id="class-file">
<h2>5.2 Class File<a class="headerlink" href="#class-file" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-file"><em>3.2 Class Associated File</em></a>:</p>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-file"><span class="std std-ref">3.2 Class Associated File</span></a>:</p>
<ul class="simple">
<li>As there is no <tt class="docutils literal"><span class="pre">PyPoint_Link()</span></tt> function, there is no call to any
flavor of the <tt class="docutils literal"><span class="pre">DBoLinkcreatemethod()</span></tt> macro (obvious as it&#8217;s <em>not</em>
a <tt class="docutils literal"><span class="pre">DBo</span></tt>).</li>
<li>To use the standard Python constructor, we have to define <tt class="docutils literal"><span class="pre">PyPoint_NEW()</span></tt>
and <tt class="docutils literal"><span class="pre">PyPoint_Init()</span></tt> functions, I&#8217;m not absolutely certain that the later
<li>As there is no <code class="docutils literal"><span class="pre">PyPoint_Link()</span></code> function, there is no call to any
flavor of the <code class="docutils literal"><span class="pre">DBoLinkcreatemethod()</span></code> macro (obvious as it&#8217;s <em>not</em>
a <code class="docutils literal"><span class="pre">DBo</span></code>).</li>
<li>To use the standard Python constructor, we have to define <code class="docutils literal"><span class="pre">PyPoint_NEW()</span></code>
and <code class="docutils literal"><span class="pre">PyPoint_Init()</span></code> functions, I&#8217;m not absolutely certain that the later
needs to be defined (that part is still not clear to me from the Python doc).</li>
<li>As it&#8217;s not a <tt class="docutils literal"><span class="pre">DBo</span></tt> there is no <tt class="docutils literal"><span class="pre">destroy()</span></tt> method, so no call to
<tt class="docutils literal"><span class="pre">DirectDestroyMethod()</span></tt></li>
<li>Lastly, as this object has a <tt class="docutils literal"><span class="pre">PyPoint_NEW()</span></tt> (field <tt class="docutils literal"><span class="pre">tp_new</span></tt>) and
a <tt class="docutils literal"><span class="pre">PyPoint_Init()</span></tt> (field <tt class="docutils literal"><span class="pre">tp_init</span></tt>) we have to use the macro
<tt class="docutils literal"><span class="pre">PyTypeObjectLinkPyTypeNewInit()</span></tt> to define <tt class="docutils literal"><span class="pre">PyPoint_LinkPyType()</span></tt>.</li>
<li>As it&#8217;s not a <code class="docutils literal"><span class="pre">DBo</span></code> there is no <code class="docutils literal"><span class="pre">destroy()</span></code> method, so no call to
<code class="docutils literal"><span class="pre">DirectDestroyMethod()</span></code></li>
<li>Lastly, as this object has a <code class="docutils literal"><span class="pre">PyPoint_NEW()</span></code> (field <code class="docutils literal"><span class="pre">tp_new</span></code>) and
a <code class="docutils literal"><span class="pre">PyPoint_Init()</span></code> (field <code class="docutils literal"><span class="pre">tp_init</span></code>) we have to use the macro
<code class="docutils literal"><span class="pre">PyTypeObjectLinkPyTypeNewInit()</span></code> to define <code class="docutils literal"><span class="pre">PyPoint_LinkPyType()</span></code>.</li>
</ul>
<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include &quot;hurricane/isobar/PyPoint.h&quot;</span>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyPoint.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">Hurricane</span><span class="p">;</span>
@ -362,7 +367,7 @@ a <tt class="docutils literal"><span class="pre">PyPoint_Init()</span></tt> (fie
<span class="n">pyPoint</span><span class="o">-&gt;</span><span class="n">_object</span> <span class="o">=</span> <span class="n">point</span><span class="p">;</span>
<span class="n">HCATCH</span>
<span class="k">return</span> <span class="p">(</span><span class="n">PyObject</span><span class="o">*</span><span class="p">)</span><span class="n">pyPoint</span><span class="p">;</span>
<span class="nf">return</span> <span class="p">(</span><span class="n">PyObject</span><span class="o">*</span><span class="p">)</span><span class="n">pyPoint</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">static</span> <span class="kt">int</span> <span class="n">PyPoint_Init</span> <span class="p">(</span> <span class="n">PyPoint</span><span class="o">*</span> <span class="n">self</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">kwargs</span> <span class="p">)</span>
@ -402,7 +407,7 @@ a <tt class="docutils literal"><span class="pre">PyPoint_Init()</span></tt> (fie
<div class="section" id="id1">
<h2>5.2 Class File<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h2>
<p>To put it bluntly, there is no difference in the Python module for
a standalone <tt class="docutils literal"><span class="pre">DBo</span></tt> class and a non-<tt class="docutils literal"><span class="pre">DBo</span></tt> class.</p>
a standalone <code class="docutils literal"><span class="pre">DBo</span></code> class and a non-<code class="docutils literal"><span class="pre">DBo</span></code> class.</p>
</div>
</div>
@ -427,7 +432,7 @@ a standalone <tt class="docutils literal"><span class="pre">DBo</span></tt> clas
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="1. Introduction" href="Introduction.html"/>
<link rel="prev" title="Unicorn Reference" href="../Unicorn/Unicorn.html"/>
@ -156,7 +158,7 @@
<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 current"><a class="current reference internal" href="">Hurricane Python/C++ API Tutorial</a><ul>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Hurricane Python/C++ API Tutorial</a><ul>
<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#first-a-disclaimer">1.1 First, A Disclaimer</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#about-technical-choices">1.2 About Technical Choices</a></li>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -309,7 +314,7 @@
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,8 +30,12 @@
<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="Symbolic to Real Conversion in Alliance" href="index.html"/>
<link rel="next" title="LEF API Reference" href="../lefapi/lefapi.html"/>
<link rel="prev" title="Symbolic to Real Conversion in Alliance" href="index.html"/>
@ -197,22 +200,25 @@
</ul>
</li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Symbolic to Real Conversion in Alliance</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="">Symbolic Layout</a><ul>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Symbolic Layout</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#symbolic-components">Symbolic Components</a></li>
<li class="toctree-l3"><a class="reference internal" href="#symbolic-segments">Symbolic Segments</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#the-rds-file">The RDS File</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#physical-grid-lambda-value">Physical Grid &amp; Lambda Value</a></li>
<li class="toctree-l3"><a class="reference internal" href="#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="#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="#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="#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="#the-mbk-wiresetting-table">The <tt class="docutils literal"><span class="pre">MBK_WIRESETTING</span></tt> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="#the-mbk-to-rds-segment-table">The <code class="docutils literal"><span class="pre">MBK_TO_RDS_SEGMENT</span></code> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="#the-mbk-to-rds-via-table">The <code class="docutils literal"><span class="pre">MBK_TO_RDS_VIA</span></code> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="#the-mbk-to-rds-bigvia-hole-table">The <code class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_HOLE</span></code> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="#the-mbk-to-rds-bigvia-metal-table">The <code class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_METAL</span></code> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="#the-mbk-wiresetting-table">The <code class="docutils literal"><span class="pre">MBK_WIRESETTING</span></code> table</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../lefapi/lefapi.html">LEF API Reference</a></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>
@ -270,15 +276,15 @@
</thead>
<tbody valign="top">
<tr class="row-even"><td>Segments</td>
<td><tt class="docutils literal"><span class="pre">phseg</span></tt></td>
<td><code class="docutils literal"><span class="pre">phseg</span></code></td>
<td>Oriented segments with a width and an orientation.</td>
</tr>
<tr class="row-odd"><td>VIAs &amp; contacts</td>
<td><tt class="docutils literal"><span class="pre">phvia</span></tt></td>
<td><code class="docutils literal"><span class="pre">phvia</span></code></td>
<td>Boils down to just a point.</td>
</tr>
<tr class="row-even"><td>Big VIAs &amp; Big Contacts</td>
<td><tt class="docutils literal"><span class="pre">phvia</span></tt></td>
<td><code class="docutils literal"><span class="pre">phvia</span></code></td>
<td>Point with a width and a height
That is a rectangle of width by height centered
on the VIA coordinates.</td>
@ -302,98 +308,98 @@ control how the object is translated in many <em>real rectangles</em>.</p>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td rowspan="12"><tt class="docutils literal"><span class="pre">phseg</span></tt></td>
<tr class="row-even"><td rowspan="12"><code class="docutils literal"><span class="pre">phseg</span></code></td>
<td><span class="sc">nwell</span></td>
<td>Segment</td>
<td>N Well</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">PWELL</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">PWELL</span></code></td>
<td>Segment</td>
<td>P Well</td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">NDIF</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">NDIF</span></code></td>
<td>Segment</td>
<td>N Diffusion</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">PDIF</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">PDIF</span></code></td>
<td>Segment</td>
<td>P Diffusion</td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">NTIE</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">NTIE</span></code></td>
<td>Segment</td>
<td>N Tie</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">PTIE</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">PTIE</span></code></td>
<td>Segment</td>
<td>P Tie</td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">NTRANS</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">NTRANS</span></code></td>
<td>Segment</td>
<td>N transistor, in <span class="sc">Alliance</span>, a transistor
is represented as a segment (it&#8217;s grid).</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">PTRANS</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">PTRANS</span></code></td>
<td>Segment</td>
<td>P transistor</td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">POLY</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">POLY</span></code></td>
<td>Segment</td>
<td>Polysilicium</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">ALUx</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">ALUx</span></code></td>
<td>Segment</td>
<td>Metal level <em>x</em></td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">CALUx</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">CALUx</span></code></td>
<td>Segment</td>
<td>Metal level <em>x</em>, that can be used by the
upper hierarchical level as a connector.
From the layout point of view it is the
same as <tt class="docutils literal"><span class="pre">ALUx</span></tt>.</td>
same as <code class="docutils literal"><span class="pre">ALUx</span></code>.</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">TALUx</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">TALUx</span></code></td>
<td>Segment</td>
<td>Blockage for metal level <em>x</em>. Will
diseappear in the real layout as it is an
information for the P&amp;R tools only.</td>
</tr>
<tr class="row-even"><td rowspan="9"><tt class="docutils literal"><span class="pre">phvia</span></tt></td>
<td><tt class="docutils literal"><span class="pre">CONT_BODY_N</span></tt></td>
<tr class="row-even"><td rowspan="9"><code class="docutils literal"><span class="pre">phvia</span></code></td>
<td><code class="docutils literal"><span class="pre">CONT_BODY_N</span></code></td>
<td>VIA, BIGVIA</td>
<td>Contact to N Well</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">CONT_BODY_P</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">CONT_BODY_P</span></code></td>
<td>VIA, BIGVIA</td>
<td>Contact to P Well</td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">CONT_DIF_N</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">CONT_DIF_N</span></code></td>
<td>VIA, BIGVIA</td>
<td>Contact to N Diffusion</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">CONT_DIF_P</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">CONT_DIF_P</span></code></td>
<td>VIA, BIGVIA</td>
<td>Contact to P Diffusion</td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">CONT_POLY</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">CONT_POLY</span></code></td>
<td>VIA, BIGVIA</td>
<td>Contact to polysilicium</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">CONT_VIA</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">CONT_VIA</span></code></td>
<td>VIA, BIGVIA</td>
<td>Contact between metal1 and metal2</td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">CONT_VIAx</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">CONT_VIAx</span></code></td>
<td>VIA, BIGVIA</td>
<td>Contact between metal <em>x</em> and metal <em>x+1</em>.
The index is the the one of the bottom
metal of the VIA.</td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">C_X_N</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">C_X_N</span></code></td>
<td>VIA</td>
<td>N transistor corner, to build transistor
bend. Not used anymore in recent technos</td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">C_X_P</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">C_X_P</span></code></td>
<td>VIA</td>
<td>P transistor corner, to build transistor
bend. Not used anymore in recent technos</td>
@ -403,11 +409,11 @@ bend. Not used anymore in recent technos</td>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Not all association of object and symbolic layers are meaningful.
For instance you cannot associate a contact to a <tt class="docutils literal"><span class="pre">NTRANS</span></tt> layer.</p>
For instance you cannot associate a contact to a <code class="docutils literal"><span class="pre">NTRANS</span></code> layer.</p>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">The symbolic layer associated with blockages is prefixed by a <tt class="docutils literal"><span class="pre">T</span></tt>,
<p class="last">The symbolic layer associated with blockages is prefixed by a <code class="docutils literal"><span class="pre">T</span></code>,
for <em>transparency</em>, which may seems silly. It is for historical reasons,
it started as a true transparency, but at some point we had to invert
the meaning (blockage) with the rise of over-the-cell routing, but the
@ -417,9 +423,9 @@ name stuck...</p>
<div class="section" id="symbolic-segments">
<h2>Symbolic Segments<a class="headerlink" href="#symbolic-segments" title="Permalink to this headline"></a></h2>
<p>In <span class="sc">Alliance</span>, segments are oriented (up, down, left, right). This disambiguate
the left or right side when using the <tt class="docutils literal"><span class="pre">LCW</span></tt> and <tt class="docutils literal"><span class="pre">RCW</span></tt> rules in the <span class="sc">rds</span> file.
the left or right side when using the <code class="docutils literal"><span class="pre">LCW</span></code> and <code class="docutils literal"><span class="pre">RCW</span></code> rules in the <span class="sc">rds</span> file.
It allows to generate, if needed, asymetric object in the real layout file.</p>
<p> <img alt="Symbolic Segment Orientations" class="align-middle" src="../_images/SegmentOrientation.png" style="width: 50%;" /> </p>
<p> <a class="reference internal" href="../_images/SegmentOrientation.png"><img alt="Symbolic Segment Orientations" class="align-middle" src="../_images/SegmentOrientation.png" style="width: 50%;" /></a> </p>
<p></p>
</div>
</div>
@ -446,42 +452,43 @@ conterpart.</p>
</thead>
<tbody valign="top">
<tr class="row-even"><td>Layout editor</td>
<td><tt class="docutils literal"><span class="pre">graal</span></tt></td>
<td><tt class="docutils literal"><span class="pre">ALL</span></tt></td>
<td><code class="docutils literal"><span class="pre">graal</span></code></td>
<td><code class="docutils literal"><span class="pre">ALL</span></code></td>
</tr>
<tr class="row-odd"><td>Design Rule Checker</td>
<td><tt class="docutils literal"><span class="pre">druc</span></tt></td>
<td><tt class="docutils literal"><span class="pre">ALL</span></tt>, <tt class="docutils literal"><span class="pre">DRC</span></tt></td>
<td><code class="docutils literal"><span class="pre">druc</span></code></td>
<td><code class="docutils literal"><span class="pre">ALL</span></code>, <code class="docutils literal"><span class="pre">DRC</span></code></td>
</tr>
<tr class="row-even"><td>Electrical extractor</td>
<td><tt class="docutils literal"><span class="pre">cougar</span></tt></td>
<td><tt class="docutils literal"><span class="pre">ALL</span></tt>, <tt class="docutils literal"><span class="pre">EXT</span></tt></td>
<td><code class="docutils literal"><span class="pre">cougar</span></code></td>
<td><code class="docutils literal"><span class="pre">ALL</span></code>, <code class="docutils literal"><span class="pre">EXT</span></code></td>
</tr>
<tr class="row-odd"><td>The symbolic to real layout translator</td>
<td><tt class="docutils literal"><span class="pre">s2r</span></tt></td>
<td><tt class="docutils literal"><span class="pre">ALL</span></tt></td>
<td><code class="docutils literal"><span class="pre">s2r</span></code></td>
<td><code class="docutils literal"><span class="pre">ALL</span></code></td>
</tr>
</tbody>
</table>
<div class="section" id="physical-grid-lambda-value">
<h2>Physical Grid &amp; Lambda Value<a class="headerlink" href="#physical-grid-lambda-value" title="Permalink to this headline"></a></h2>
<p>RDS file:</p>
<div class="highlight-python"><pre>DEFINE PHYSICAL_GRID 0.005
DEFINE LAMBDA 0.09</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">DEFINE</span> <span class="n">PHYSICAL_GRID</span> <span class="mf">0.005</span>
<span class="n">DEFINE</span> <span class="n">LAMBDA</span> <span class="mf">0.09</span>
</pre></div>
</div>
<p>Tells that the physical grid (founder grid) step is 0.005µm and the lambda has
a value of 0.09µm. That is, one lambda is 18 grid steps.</p>
<p>We can distinguish two kind of <span class="sc">rds</span> files:</p>
<ul class="simple">
<li>The <em>1µm</em> kind, odd segment widths and coordinates are allowed, but the <tt class="docutils literal"><span class="pre">LAMBDA</span></tt>
<li>The <em>1µm</em> kind, odd segment widths and coordinates are allowed, but the <code class="docutils literal"><span class="pre">LAMBDA</span></code>
value <strong>must</strong> represent an <em>even</em> number of foundry grid step.</li>
<li>The <em>2µm</em> kind, segments widths and coordinates must all be even. And in that case
the <tt class="docutils literal"><span class="pre">LAMBDA</span></tt> value can be any multiple of the foundry grid.</li>
the <code class="docutils literal"><span class="pre">LAMBDA</span></code> value can be any multiple of the foundry grid.</li>
</ul>
</div>
<div class="section" id="the-mbk-to-rds-segment-table">
<h2>The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_SEGMENT</span></tt> table<a class="headerlink" href="#the-mbk-to-rds-segment-table" title="Permalink to this headline"></a></h2>
<p>The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_SEGMENT</span></tt> table control the way segments are translated into
<h2>The <code class="docutils literal"><span class="pre">MBK_TO_RDS_SEGMENT</span></code> table<a class="headerlink" href="#the-mbk-to-rds-segment-table" title="Permalink to this headline"></a></h2>
<p>The <code class="docutils literal"><span class="pre">MBK_TO_RDS_SEGMENT</span></code> table control the way segments are translated into
real rectangles. Be aware that we are translating <em>segments</em> and not <em>rectangles</em>.
Segments are defined by their axis (source &amp; target points) and their width.
The geometrical transformations are described according to that model.
@ -491,80 +498,81 @@ Obviously, they are either horizontal or vertical.</p>
<li><p class="first">The segment is translated into one or more physical rectangles.
The generated rectangles depends on the tool which is actually
using <span class="sc">rds</span> and the flag for the considered real layer.
For instance, real layers flagged with <tt class="docutils literal"><span class="pre">DRC</span></tt> will be generated
for <tt class="docutils literal"><span class="pre">s2r</span></tt> (for the <tt class="docutils literal"><span class="pre">cif</span></tt> or <tt class="docutils literal"><span class="pre">gds</span></tt>) and <tt class="docutils literal"><span class="pre">druc</span></tt>, but will not
be shown under <tt class="docutils literal"><span class="pre">graal</span></tt>.</p>
For instance, real layers flagged with <code class="docutils literal"><span class="pre">DRC</span></code> will be generated
for <code class="docutils literal"><span class="pre">s2r</span></code> (for the <code class="docutils literal"><span class="pre">cif</span></code> or <code class="docutils literal"><span class="pre">gds</span></code>) and <code class="docutils literal"><span class="pre">druc</span></code>, but will not
be shown under <code class="docutils literal"><span class="pre">graal</span></code>.</p>
</li>
<li><p class="first">Translation into one real layer. <em>First</em> the source &amp; target coordinates and width
of the symbolic segment are multiplied by the <tt class="docutils literal"><span class="pre">LAMBDA</span></tt> value to obtain a real
segment. <em>Then</em> one of the <tt class="docutils literal"><span class="pre">VW</span></tt>, <tt class="docutils literal"><span class="pre">LCW</span></tt> or <tt class="docutils literal"><span class="pre">RCW</span></tt> transformation is applied to
of the symbolic segment are multiplied by the <code class="docutils literal"><span class="pre">LAMBDA</span></code> value to obtain a real
segment. <em>Then</em> one of the <code class="docutils literal"><span class="pre">VW</span></code>, <code class="docutils literal"><span class="pre">LCW</span></code> or <code class="docutils literal"><span class="pre">RCW</span></code> transformation is applied to
that segment to get the final real rectangle.</p>
<ul>
<li><p class="first"><tt class="docutils literal"><span class="pre">VW</span></tt> for Variable Width, expand the real layer staying centered from the
<li><p class="first"><code class="docutils literal"><span class="pre">VW</span></code> for Variable Width, expand the real layer staying centered from the
original one. In those rules, the third number is not used, it is only here
to make the life easier for the parser...</p>
<p> <img alt="RDS Variable Width Rule" class="align-middle" src="../_images/RDS_VW.png" style="width: 60%;" /> </p>
<p> <a class="reference internal" href="../_images/RDS_VW.png"><img alt="RDS Variable Width Rule" class="align-middle" src="../_images/RDS_VW.png" style="width: 60%;" /></a> </p>
</li>
<li><p class="first"><tt class="docutils literal"><span class="pre">LCW</span></tt> or <tt class="docutils literal"><span class="pre">RCW</span></tt> for Left/Right Constant Width, create an off-center rectangle
of fixed width relatively to the real segment. Note that the <tt class="docutils literal"><span class="pre">SP</span></tt> number
<li><p class="first"><code class="docutils literal"><span class="pre">LCW</span></code> or <code class="docutils literal"><span class="pre">RCW</span></code> for Left/Right Constant Width, create an off-center rectangle
of fixed width relatively to the real segment. Note that the <code class="docutils literal"><span class="pre">SP</span></code> number
is the distance <em>between the edge</em> of the real segment and the edge of the
generated real rectangle (<em>not</em> from the axis). It is often zero.</p>
<p> <img alt="RDS Left Constant Width Rule" class="align-middle" src="../_images/RDS_LCW.png" style="width: 40%;" /> </p>
<p> <a class="reference internal" href="../_images/RDS_LCW.png"><img alt="RDS Left Constant Width Rule" class="align-middle" src="../_images/RDS_LCW.png" style="width: 40%;" /></a> </p>
</li>
</ul>
</li>
</ol>
<p></p>
<p>Examples:</p>
<div class="highlight-python"><pre>TABLE MBK_TO_RDS_SEGMENT
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">TABLE</span> <span class="n">MBK_TO_RDS_SEGMENT</span>
# (Case 1)
ALU1 RDS_ALU1 VW 0.18 0.09 0.0 ALL
<span class="c1"># (Case 1)</span>
<span class="n">ALU1</span> <span class="n">RDS_ALU1</span> <span class="n">VW</span> <span class="mf">0.18</span> <span class="mf">0.09</span> <span class="mf">0.0</span> <span class="n">ALL</span>
# (Case 2)
NDIF RDS_NDIF VW 0.18 0.0 0.0 ALL \
RDS_ACTIV VW 0.18 0.0 0.0 DRC \
RDS_NIMP VW 0.36 0.36 0.0 DRC
<span class="c1"># (Case 2)</span>
<span class="n">NDIF</span> <span class="n">RDS_NDIF</span> <span class="n">VW</span> <span class="mf">0.18</span> <span class="mf">0.0</span> <span class="mf">0.0</span> <span class="n">ALL</span> \
<span class="n">RDS_ACTIV</span> <span class="n">VW</span> <span class="mf">0.18</span> <span class="mf">0.0</span> <span class="mf">0.0</span> <span class="n">DRC</span> \
<span class="n">RDS_NIMP</span> <span class="n">VW</span> <span class="mf">0.36</span> <span class="mf">0.36</span> <span class="mf">0.0</span> <span class="n">DRC</span>
# (Case 3)
NTRANS RDS_POLY VW 0.27 0.00 0.0 ALL \
RDS_GATE VW 0.27 0.00 0.0 DRC \
RDS_NDIF LCW 0.0 0.27 0.0 EXT \
RDS_NDIF RCW 0.0 0.27 0.0 EXT \
RDS_NDIF VW 0.0 0.72 0.0 DRC \
RDS_ACTIV VW 0.0 0.72 0.0 ALL \
RDS_NIMP VW 0.18 1.26 0.0 DRC
<span class="c1"># (Case 3)</span>
<span class="n">NTRANS</span> <span class="n">RDS_POLY</span> <span class="n">VW</span> <span class="mf">0.27</span> <span class="mf">0.00</span> <span class="mf">0.0</span> <span class="n">ALL</span> \
<span class="n">RDS_GATE</span> <span class="n">VW</span> <span class="mf">0.27</span> <span class="mf">0.00</span> <span class="mf">0.0</span> <span class="n">DRC</span> \
<span class="n">RDS_NDIF</span> <span class="n">LCW</span> <span class="mf">0.0</span> <span class="mf">0.27</span> <span class="mf">0.0</span> <span class="n">EXT</span> \
<span class="n">RDS_NDIF</span> <span class="n">RCW</span> <span class="mf">0.0</span> <span class="mf">0.27</span> <span class="mf">0.0</span> <span class="n">EXT</span> \
<span class="n">RDS_NDIF</span> <span class="n">VW</span> <span class="mf">0.0</span> <span class="mf">0.72</span> <span class="mf">0.0</span> <span class="n">DRC</span> \
<span class="n">RDS_ACTIV</span> <span class="n">VW</span> <span class="mf">0.0</span> <span class="mf">0.72</span> <span class="mf">0.0</span> <span class="n">ALL</span> \
<span class="n">RDS_NIMP</span> <span class="n">VW</span> <span class="mf">0.18</span> <span class="mf">1.26</span> <span class="mf">0.0</span> <span class="n">DRC</span>
END</pre>
<span class="n">END</span>
</pre></div>
</div>
<p><span class="fboxtt">Case 1</span> the <tt class="docutils literal"><span class="pre">ALU1</span></tt> is translated in exacltly one real rectangle of
<tt class="docutils literal"><span class="pre">RDS_ALU1</span></tt>, both ends are extended by 0.18µm and it&#8217;s width is increased
<p><span class="fboxtt">Case 1</span> the <code class="docutils literal"><span class="pre">ALU1</span></code> is translated in exacltly one real rectangle of
<code class="docutils literal"><span class="pre">RDS_ALU1</span></code>, both ends are extended by 0.18µm and it&#8217;s width is increased
by 0.09µm.</p>
<p><span class="fboxtt">Case 2</span> the <tt class="docutils literal"><span class="pre">NDIF</span></tt> will be translated into only one segment
under <tt class="docutils literal"><span class="pre">graal</span></tt>, for symbolic visualization. And into three real rectangles
for <tt class="docutils literal"><span class="pre">s2r</span></tt> and <tt class="docutils literal"><span class="pre">druc</span></tt>.</p>
<p><span class="fboxtt">Case 3</span> the <tt class="docutils literal"><span class="pre">NTRANS</span></tt>, associated to a transistor is a little bit
more complex, the generated shapes are different for the extractor <tt class="docutils literal"><span class="pre">cougar</span></tt>
in one hand, and for both <tt class="docutils literal"><span class="pre">druc</span></tt> &amp; <tt class="docutils literal"><span class="pre">s2r</span></tt> in the other hand.</p>
<p><span class="fboxtt">Case 2</span> the <code class="docutils literal"><span class="pre">NDIF</span></code> will be translated into only one segment
under <code class="docutils literal"><span class="pre">graal</span></code>, for symbolic visualization. And into three real rectangles
for <code class="docutils literal"><span class="pre">s2r</span></code> and <code class="docutils literal"><span class="pre">druc</span></code>.</p>
<p><span class="fboxtt">Case 3</span> the <code class="docutils literal"><span class="pre">NTRANS</span></code>, associated to a transistor is a little bit
more complex, the generated shapes are different for the extractor <code class="docutils literal"><span class="pre">cougar</span></code>
in one hand, and for both <code class="docutils literal"><span class="pre">druc</span></code> &amp; <code class="docutils literal"><span class="pre">s2r</span></code> in the other hand.</p>
<ul>
<li><p class="first">For the extractor (<tt class="docutils literal"><span class="pre">EXT</span></tt> &amp; <tt class="docutils literal"><span class="pre">ALL</span></tt> flags) there will be four rectangles
<li><p class="first">For the extractor (<code class="docutils literal"><span class="pre">EXT</span></code> &amp; <code class="docutils literal"><span class="pre">ALL</span></code> flags) there will be four rectangles
generateds:</p>
<ol class="arabic simple">
<li>The gate (<tt class="docutils literal"><span class="pre">RDS_GATE</span></tt>)</li>
<li>The left diffusion of the transistor (source or drain) (<tt class="docutils literal"><span class="pre">RDS_NDIF</span></tt>).</li>
<li>The right diffusion of the transistor (drain or source) (<tt class="docutils literal"><span class="pre">RDS_NDIF</span></tt>).</li>
<li>The active area (<tt class="docutils literal"><span class="pre">RDS_ACTIV</span></tt>).</li>
<li>The gate (<code class="docutils literal"><span class="pre">RDS_GATE</span></code>)</li>
<li>The left diffusion of the transistor (source or drain) (<code class="docutils literal"><span class="pre">RDS_NDIF</span></code>).</li>
<li>The right diffusion of the transistor (drain or source) (<code class="docutils literal"><span class="pre">RDS_NDIF</span></code>).</li>
<li>The active area (<code class="docutils literal"><span class="pre">RDS_ACTIV</span></code>).</li>
</ol>
<p>As the extractor must kept separate the source and the drain of the transistor,
they are generated as two offset rectangles, using the <tt class="docutils literal"><span class="pre">LCW</span></tt> and <tt class="docutils literal"><span class="pre">RCW</span></tt> directives.</p>
they are generated as two offset rectangles, using the <code class="docutils literal"><span class="pre">LCW</span></code> and <code class="docutils literal"><span class="pre">RCW</span></code> directives.</p>
</li>
<li><p class="first">For <tt class="docutils literal"><span class="pre">s2r</span></tt> and <tt class="docutils literal"><span class="pre">druc</span></tt> (<tt class="docutils literal"><span class="pre">DRC</span></tt> and <tt class="docutils literal"><span class="pre">ALL</span></tt>), five rectangles are generateds:</p>
<li><p class="first">For <code class="docutils literal"><span class="pre">s2r</span></code> and <code class="docutils literal"><span class="pre">druc</span></code> (<code class="docutils literal"><span class="pre">DRC</span></code> and <code class="docutils literal"><span class="pre">ALL</span></code>), five rectangles are generateds:</p>
<ol class="arabic simple">
<li>The poly (<tt class="docutils literal"><span class="pre">RDS_POLY</span></tt>).</li>
<li>The gate (<tt class="docutils literal"><span class="pre">RDS_GATE</span></tt>).</li>
<li>The diffusion, as one rectangle that covers both the <tt class="docutils literal"><span class="pre">LCW</span></tt> and the <tt class="docutils literal"><span class="pre">RCW</span></tt> (<tt class="docutils literal"><span class="pre">RDS_NDIF</span></tt>).</li>
<li>The active area (<tt class="docutils literal"><span class="pre">RDS_ACTIV</span></tt>).</li>
<li>The N implantation (<tt class="docutils literal"><span class="pre">RDS_NIMP</span></tt>).</li>
<li>The poly (<code class="docutils literal"><span class="pre">RDS_POLY</span></code>).</li>
<li>The gate (<code class="docutils literal"><span class="pre">RDS_GATE</span></code>).</li>
<li>The diffusion, as one rectangle that covers both the <code class="docutils literal"><span class="pre">LCW</span></code> and the <code class="docutils literal"><span class="pre">RCW</span></code> (<code class="docutils literal"><span class="pre">RDS_NDIF</span></code>).</li>
<li>The active area (<code class="docutils literal"><span class="pre">RDS_ACTIV</span></code>).</li>
<li>The N implantation (<code class="docutils literal"><span class="pre">RDS_NIMP</span></code>).</li>
</ol>
<p>In the layout send to the foundry, the source &amp; drain are draw as one rectangle
across the gate area (the transistor being defined by the intersection of both
@ -574,7 +582,7 @@ rectangles).</p>
<p></p>
</div>
<div class="section" id="the-mbk-to-rds-via-table">
<h2>The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_VIA</span></tt> table<a class="headerlink" href="#the-mbk-to-rds-via-table" title="Permalink to this headline"></a></h2>
<h2>The <code class="docutils literal"><span class="pre">MBK_TO_RDS_VIA</span></code> table<a class="headerlink" href="#the-mbk-to-rds-via-table" title="Permalink to this headline"></a></h2>
<p>This table is to translate <em>default</em> VIAs into real via. In the symbolic layout
the default VIA is simply a point and a set of layers. All layers are converted
in squares shapes centered on the VIA coordinate. The one dimension given is the
@ -582,67 +590,69 @@ size of the side of that square.</p>
<p>Note that although we are refering to VIAs, which for the purists are between two
metal layers, this table also describe <em>contacts</em>.</p>
<p>Example:</p>
<div class="highlight-python"><pre>TABLE MBK_TO_RDS_VIA
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">TABLE</span> <span class="n">MBK_TO_RDS_VIA</span>
CONT_DIF_P RDS_PDIF 0.54 ALL \
RDS_CONT 0.18 ALL \
RDS_ALU1 0.36 ALL \
RDS_ACTIV 0.54 DRC \
RDS_PIMP 0.90 DRC
<span class="n">CONT_DIF_P</span> <span class="n">RDS_PDIF</span> <span class="mf">0.54</span> <span class="n">ALL</span> \
<span class="n">RDS_CONT</span> <span class="mf">0.18</span> <span class="n">ALL</span> \
<span class="n">RDS_ALU1</span> <span class="mf">0.36</span> <span class="n">ALL</span> \
<span class="n">RDS_ACTIV</span> <span class="mf">0.54</span> <span class="n">DRC</span> \
<span class="n">RDS_PIMP</span> <span class="mf">0.90</span> <span class="n">DRC</span>
CONT_POLY RDS_POLY 0.54 ALL \
RDS_CONT 0.18 ALL \
RDS_ALU1 0.36 ALL
<span class="n">CONT_POLY</span> <span class="n">RDS_POLY</span> <span class="mf">0.54</span> <span class="n">ALL</span> \
<span class="n">RDS_CONT</span> <span class="mf">0.18</span> <span class="n">ALL</span> \
<span class="n">RDS_ALU1</span> <span class="mf">0.36</span> <span class="n">ALL</span>
CONT_VIA RDS_ALU1 0.45 ALL \
RDS_VIA1 0.27 ALL \
RDS_ALU2 0.45 ALL
<span class="n">CONT_VIA</span> <span class="n">RDS_ALU1</span> <span class="mf">0.45</span> <span class="n">ALL</span> \
<span class="n">RDS_VIA1</span> <span class="mf">0.27</span> <span class="n">ALL</span> \
<span class="n">RDS_ALU2</span> <span class="mf">0.45</span> <span class="n">ALL</span>
END</pre>
<span class="n">END</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>In CONT_DIF_P</strong> you may see that only three layers will be shown under
<tt class="docutils literal"><span class="pre">graal</span></tt>, but five will be generated in the <tt class="docutils literal"><span class="pre">gds</span></tt> layout.</p>
<code class="docutils literal"><span class="pre">graal</span></code>, but five will be generated in the <code class="docutils literal"><span class="pre">gds</span></code> layout.</p>
</div>
</div>
<div class="section" id="the-mbk-to-rds-bigvia-hole-table">
<h2>The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_HOLE</span></tt> table<a class="headerlink" href="#the-mbk-to-rds-bigvia-hole-table" title="Permalink to this headline"></a></h2>
<p>In <tt class="docutils literal"><span class="pre">s2r</span></tt>, when generating BIGVIAs, the matrix of holes they contains is
<h2>The <code class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_HOLE</span></code> table<a class="headerlink" href="#the-mbk-to-rds-bigvia-hole-table" title="Permalink to this headline"></a></h2>
<p>In <code class="docutils literal"><span class="pre">s2r</span></code>, when generating BIGVIAs, the matrix of holes they contains is
not draw relative to the position of the BIGVIA itself, but on a grid which
is common througout all the design real layout. This is to allow overlap
between two BIGVIA without risking the holes matrix to be not exactly overlapping.
As a consequence, when visualizing the <tt class="docutils literal"><span class="pre">gds</span></tt> file, the holes may not be centerend
As a consequence, when visualizing the <code class="docutils literal"><span class="pre">gds</span></code> file, the holes may not be centerend
inside one individual BIGVIA.</p>
<p>The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_HOLE</span></tt> table define the global hole matrix for the whole
<p>The <code class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_HOLE</span></code> table define the global hole matrix for the whole
design. The first number is the individual hole side and the second the grid step
(edge to edge). The figure below show the hole generation.</p>
<p> <img alt="BIGVIA holes" class="align-middle" src="../_images/bigvia-1.png" style="width: 40%;" /> </p>
<p> <a class="reference internal" href="../_images/bigvia-1.png"><img alt="BIGVIA holes" class="align-middle" src="../_images/bigvia-1.png" style="width: 40%;" /></a> </p>
<p>Example of BIGVIA overlap:</p>
<p> <img alt="BIGVIA holes overlap" class="align-middle" src="../_images/bigvia-2.png" style="width: 40%;" /> </p>
<p> <a class="reference internal" href="../_images/bigvia-2.png"><img alt="BIGVIA holes overlap" class="align-middle" src="../_images/bigvia-2.png" style="width: 40%;" /></a> </p>
<p>Example:</p>
<div class="highlight-python"><pre>TABLE MBK_TO_RDS_BIGVIA_HOLE
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">TABLE</span> <span class="n">MBK_TO_RDS_BIGVIA_HOLE</span>
CONT_VIA RDS_VIA1 0.27 0.27 ALL
CONT_VIA2 RDS_VIA2 0.27 0.27 ALL
CONT_VIA3 RDS_VIA3 0.27 0.27 ALL
CONT_VIA4 RDS_VIA4 0.27 0.27 ALL
CONT_VIA5 RDS_VIA5 0.36 0.36 ALL
<span class="n">CONT_VIA</span> <span class="n">RDS_VIA1</span> <span class="mf">0.27</span> <span class="mf">0.27</span> <span class="n">ALL</span>
<span class="n">CONT_VIA2</span> <span class="n">RDS_VIA2</span> <span class="mf">0.27</span> <span class="mf">0.27</span> <span class="n">ALL</span>
<span class="n">CONT_VIA3</span> <span class="n">RDS_VIA3</span> <span class="mf">0.27</span> <span class="mf">0.27</span> <span class="n">ALL</span>
<span class="n">CONT_VIA4</span> <span class="n">RDS_VIA4</span> <span class="mf">0.27</span> <span class="mf">0.27</span> <span class="n">ALL</span>
<span class="n">CONT_VIA5</span> <span class="n">RDS_VIA5</span> <span class="mf">0.36</span> <span class="mf">0.36</span> <span class="n">ALL</span>
END</pre>
<span class="n">END</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>BIGVIA demotion.</strong> If the size of the bigvia is too small, there is
a possibility that no hole from the global matrix will be under it.
To avoid that case, if the either side of the BIGVIA is less than
<tt class="docutils literal"><span class="pre">1.5</span> <span class="pre">*</span> <span class="pre">step</span></tt>, the BIGVIA is demoted to a simple VIA.</p>
<code class="docutils literal"><span class="pre">1.5</span> <span class="pre">*</span> <span class="pre">step</span></code>, the BIGVIA is demoted to a simple VIA.</p>
</div>
</div>
<div class="section" id="the-mbk-to-rds-bigvia-metal-table">
<h2>The <tt class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_METAL</span></tt> table<a class="headerlink" href="#the-mbk-to-rds-bigvia-metal-table" title="Permalink to this headline"></a></h2>
<h2>The <code class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_METAL</span></code> table<a class="headerlink" href="#the-mbk-to-rds-bigvia-metal-table" title="Permalink to this headline"></a></h2>
<p>This table describe how the metal part of a BIGVIA is expanded (for the hole
part, see the previous table <tt class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_HOLE</span></tt>). The rule give for each
part, see the previous table <code class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_HOLE</span></code>). The rule give for each
metal:</p>
<ol class="arabic simple">
<li>The <em>delta-with</em> (have to ask Franck).</li>
@ -650,58 +660,60 @@ metal:</p>
the symbolic rectange.</li>
</ol>
<p>Example:</p>
<div class="highlight-python"><pre>TABLE MBK_TO_RDS_BIGVIA_METAL
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">TABLE</span> <span class="n">MBK_TO_RDS_BIGVIA_METAL</span>
CONT_VIA RDS_ALU1 0.0 0.09 ALL \
RDS_ALU2 0.0 0.09 ALL
<span class="n">CONT_VIA</span> <span class="n">RDS_ALU1</span> <span class="mf">0.0</span> <span class="mf">0.09</span> <span class="n">ALL</span> \
<span class="n">RDS_ALU2</span> <span class="mf">0.0</span> <span class="mf">0.09</span> <span class="n">ALL</span>
CONT_VIA2 RDS_ALU2 0.0 0.09 ALL \
RDS_ALU3 0.0 0.09 ALL
<span class="n">CONT_VIA2</span> <span class="n">RDS_ALU2</span> <span class="mf">0.0</span> <span class="mf">0.09</span> <span class="n">ALL</span> \
<span class="n">RDS_ALU3</span> <span class="mf">0.0</span> <span class="mf">0.09</span> <span class="n">ALL</span>
CONT_VIA3 RDS_ALU3 0.0 0.09 ALL \
RDS_ALU4 0.0 0.09 ALL
<span class="n">CONT_VIA3</span> <span class="n">RDS_ALU3</span> <span class="mf">0.0</span> <span class="mf">0.09</span> <span class="n">ALL</span> \
<span class="n">RDS_ALU4</span> <span class="mf">0.0</span> <span class="mf">0.09</span> <span class="n">ALL</span>
CONT_VIA4 RDS_ALU4 0.0 0.09 ALL \
RDS_ALU5 0.0 0.09 ALL
<span class="n">CONT_VIA4</span> <span class="n">RDS_ALU4</span> <span class="mf">0.0</span> <span class="mf">0.09</span> <span class="n">ALL</span> \
<span class="n">RDS_ALU5</span> <span class="mf">0.0</span> <span class="mf">0.09</span> <span class="n">ALL</span>
CONT_VIA5 RDS_ALU5 0.0 0.09 ALL \
RDS_ALU6 0.0 0.18 ALL
END</pre>
<span class="n">CONT_VIA5</span> <span class="n">RDS_ALU5</span> <span class="mf">0.0</span> <span class="mf">0.09</span> <span class="n">ALL</span> \
<span class="n">RDS_ALU6</span> <span class="mf">0.0</span> <span class="mf">0.18</span> <span class="n">ALL</span>
<span class="n">END</span>
</pre></div>
</div>
</div>
<div class="section" id="the-mbk-wiresetting-table">
<h2>The <tt class="docutils literal"><span class="pre">MBK_WIRESETTING</span></tt> table<a class="headerlink" href="#the-mbk-wiresetting-table" title="Permalink to this headline"></a></h2>
<h2>The <code class="docutils literal"><span class="pre">MBK_WIRESETTING</span></code> table<a class="headerlink" href="#the-mbk-wiresetting-table" title="Permalink to this headline"></a></h2>
<p>From a strict standpoint this table shouldn&#8217;t be here but put in a separate
configuration file, because it contains informations only used by the symbolic
layout tools (<tt class="docutils literal"><span class="pre">ocp</span></tt>, <tt class="docutils literal"><span class="pre">nero</span></tt>, <tt class="docutils literal"><span class="pre">ring</span></tt>).</p>
layout tools (<code class="docutils literal"><span class="pre">ocp</span></code>, <code class="docutils literal"><span class="pre">nero</span></code>, <code class="docutils literal"><span class="pre">ring</span></code>).</p>
<p>This table defines the cell gauge the routing pitch and minimal (symbolic)
wire width and minimal spacing for the routers. They are patly redundant.</p>
<p>Example:</p>
<div class="highlight-python"><pre>TABLE MBK_WIRESETTING
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">TABLE</span> <span class="n">MBK_WIRESETTING</span>
X_GRID 10
Y_GRID 10
Y_SLICE 100
WIDTH_VDD 12
WIDTH_VSS 12
TRACK_WIDTH_ALU8 0
TRACK_WIDTH_ALU7 4
TRACK_WIDTH_ALU6 4
TRACK_WIDTH_ALU5 4
TRACK_WIDTH_ALU4 3
TRACK_WIDTH_ALU3 3
TRACK_WIDTH_ALU2 3
TRACK_WIDTH_ALU1 3
TRACK_SPACING_ALU8 0
TRACK_SPACING_ALU7 4
TRACK_SPACING_ALU6 4
TRACK_SPACING_ALU5 4
TRACK_SPACING_ALU4 4
TRACK_SPACING_ALU3 4
TRACK_SPACING_ALU2 4
TRACK_SPACING_ALU1 3
<span class="n">X_GRID</span> <span class="mi">10</span>
<span class="n">Y_GRID</span> <span class="mi">10</span>
<span class="n">Y_SLICE</span> <span class="mi">100</span>
<span class="n">WIDTH_VDD</span> <span class="mi">12</span>
<span class="n">WIDTH_VSS</span> <span class="mi">12</span>
<span class="n">TRACK_WIDTH_ALU8</span> <span class="mi">0</span>
<span class="n">TRACK_WIDTH_ALU7</span> <span class="mi">4</span>
<span class="n">TRACK_WIDTH_ALU6</span> <span class="mi">4</span>
<span class="n">TRACK_WIDTH_ALU5</span> <span class="mi">4</span>
<span class="n">TRACK_WIDTH_ALU4</span> <span class="mi">3</span>
<span class="n">TRACK_WIDTH_ALU3</span> <span class="mi">3</span>
<span class="n">TRACK_WIDTH_ALU2</span> <span class="mi">3</span>
<span class="n">TRACK_WIDTH_ALU1</span> <span class="mi">3</span>
<span class="n">TRACK_SPACING_ALU8</span> <span class="mi">0</span>
<span class="n">TRACK_SPACING_ALU7</span> <span class="mi">4</span>
<span class="n">TRACK_SPACING_ALU6</span> <span class="mi">4</span>
<span class="n">TRACK_SPACING_ALU5</span> <span class="mi">4</span>
<span class="n">TRACK_SPACING_ALU4</span> <span class="mi">4</span>
<span class="n">TRACK_SPACING_ALU3</span> <span class="mi">4</span>
<span class="n">TRACK_SPACING_ALU2</span> <span class="mi">4</span>
<span class="n">TRACK_SPACING_ALU1</span> <span class="mi">3</span>
END</pre>
<span class="n">END</span>
</pre></div>
</div>
</div>
</div>
@ -712,6 +724,8 @@ END</pre>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../lefapi/lefapi.html" class="btn btn-neutral float-right" title="LEF API Reference" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="index.html" class="btn btn-neutral" title="Symbolic to Real Conversion in Alliance" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
@ -725,7 +739,7 @@ END</pre>
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="Symbolic Layout" href="RDSpage.html"/>
<link rel="prev" title="7. No C++ Hurricane::Name encapsulation" href="../PythonCpp/Name.html"/>
@ -196,7 +198,7 @@
<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 current"><a class="current reference internal" href="">Symbolic to Real Conversion in Alliance</a><ul>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Symbolic to Real Conversion in Alliance</a><ul>
<li class="toctree-l2"><a class="reference internal" href="RDSpage.html">Symbolic Layout</a><ul>
<li class="toctree-l3"><a class="reference internal" href="RDSpage.html#symbolic-components">Symbolic Components</a></li>
<li class="toctree-l3"><a class="reference internal" href="RDSpage.html#symbolic-segments">Symbolic Segments</a></li>
@ -204,15 +206,18 @@
</li>
<li class="toctree-l2"><a class="reference internal" href="RDSpage.html#the-rds-file">The RDS File</a><ul>
<li class="toctree-l3"><a class="reference internal" href="RDSpage.html#physical-grid-lambda-value">Physical Grid &amp; Lambda Value</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="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="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="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="RDSpage.html#the-mbk-wiresetting-table">The <tt class="docutils literal"><span class="pre">MBK_WIRESETTING</span></tt> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="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="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="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="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="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></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>
@ -261,11 +266,11 @@
</li>
<li class="toctree-l1"><a class="reference internal" href="RDSpage.html#the-rds-file">The RDS File</a><ul>
<li class="toctree-l2"><a class="reference internal" href="RDSpage.html#physical-grid-lambda-value">Physical Grid &amp; Lambda Value</a></li>
<li class="toctree-l2"><a class="reference internal" href="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-l2"><a class="reference internal" href="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-l2"><a class="reference internal" href="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-l2"><a class="reference internal" href="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-l2"><a class="reference internal" href="RDSpage.html#the-mbk-wiresetting-table">The <tt class="docutils literal"><span class="pre">MBK_WIRESETTING</span></tt> table</a></li>
<li class="toctree-l2"><a class="reference internal" href="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-l2"><a class="reference internal" href="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-l2"><a class="reference internal" href="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-l2"><a class="reference internal" href="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-l2"><a class="reference internal" href="RDSpage.html#the-mbk-wiresetting-table">The <code class="docutils literal"><span class="pre">MBK_WIRESETTING</span></code> table</a></li>
</ul>
</li>
</ul>
@ -293,7 +298,7 @@
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="DpGen Reference" href="../DpGen/DpGen.html"/>
<link rel="prev" title="Python Interface for Hurricane / Coriolis" href="../UsersGuide/ScriptsPlugins.html"/>
@ -147,7 +149,7 @@
</li>
</ul>
</li>
<li class="toctree-l1 current"><a class="current reference internal" href="">Stratus Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -275,7 +280,7 @@ available here: <a class="reference external" href="file:../../stratus/index.htm
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="Hurricane Python/C++ API Tutorial" href="../PythonCpp/index.html"/>
<link rel="prev" title="Kite Reference" href="../Kite/Kite.html"/>
@ -155,7 +157,7 @@
<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 current"><a class="current reference internal" href="">Unicorn Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -275,7 +280,7 @@ available here: <a class="reference external" href="file:../../unicorn/index.htm
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="../index.html"/>
<link rel="up" title="Coriolis Users Guide" href="index.html"/>
<link rel="next" title="CGT - The Graphical Interface" href="ViewerTools.html"/>
@ -97,7 +99,7 @@
<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 current"><a class="current reference internal" href="">Coriolis Configuration &amp; Initialisation</a><ul>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Coriolis Configuration &amp; Initialisation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#general-software-architecture">General Software Architecture</a></li>
<li class="toctree-l3"><a class="reference internal" href="#first-stage-symbolic-technology-selection">First Stage: Symbolic Technology Selection</a></li>
<li class="toctree-l3"><a class="reference internal" href="#second-stage-technology-configuration-loading">Second Stage: Technology Configuration Loading</a></li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -274,7 +279,7 @@ the tools. However, the <span class="sc">Python</span> bindings have been create
mimic <em>as closely as possible</em> the C++ interface, so the documentation
applies to both languages with only minor syntactic changes.</p>
</div>
<p> <img alt="Coriolis Software Schematic" class="align-middle" src="../_images/Coriolis-Soft-Schema.png" style="width: 60%;" /> </p>
<p> <a class="reference internal" href="../_images/Coriolis-Soft-Schema.png"><img alt="Coriolis Software Schematic" class="align-middle" src="../_images/Coriolis-Soft-Schema.png" style="width: 60%;" /></a> </p>
<p>All configuration &amp; initialization files are Python scripts, despite their
<span class="cb">.conf</span> extention. From a syntactic point of view, there is no difference
between the system-wide configuration files and the user&#8217;s configuration,
@ -321,10 +326,10 @@ file(s):</p>
</table>
<p>Thoses files must provides only two variables, the name of the symbolic technology
and the one of the real technology. For example:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="c"># -*- Mode:Python -*-</span>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1"># -*- Mode:Python -*-</span>
<span class="n">symbolicTechno</span> <span class="o">=</span> <span class="s">&#39;cmos&#39;</span>
<span class="n">realTechno</span> <span class="o">=</span> <span class="s">&#39;hcmos9&#39;</span>
<span class="n">symbolicTechno</span> <span class="o">=</span> <span class="s1">&#39;cmos&#39;</span>
<span class="n">realTechno</span> <span class="o">=</span> <span class="s1">&#39;hcmos9&#39;</span>
</pre></div>
</div>
</div>
@ -378,7 +383,8 @@ which <em>must</em> contain a <span class="cb">coriolisConfigure()</span> functi
<p>To ease the writing of configuration files, a set of small helpers
is available. They allow to setup the configuration parameters through
simple assembly of tuples. The helpers are installed under the directory:</p>
<div class="highlight-python"><pre>&lt;install&gt;/etc/coriolis2/</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">install</span><span class="o">&gt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">coriolis2</span><span class="o">/</span>
</pre></div>
</div>
<p>Where <span class="cb">&lt;install&gt;/</span> is the root of the installation.</p>
<p></p>
@ -386,30 +392,30 @@ simple assembly of tuples. The helpers are installed under the directory:</p>
<span id="id1"></span><h3><span class="sc">Alliance</span> Helper<a class="headerlink" href="#alliance-helper" title="Permalink to this headline"></a></h3>
<p>The configuration file must provide a <span class="cb">allianceConfig</span> tuple of
the form:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">cellsTop</span> <span class="o">=</span> <span class="s">&#39;/usr/share/alliance/cells/&#39;</span>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">cellsTop</span> <span class="o">=</span> <span class="s1">&#39;/usr/share/alliance/cells/&#39;</span>
<span class="n">allianceConfig</span> <span class="o">=</span> \
<span class="p">(</span> <span class="p">(</span> <span class="s">&#39;SYMBOLIC_TECHNOLOGY&#39;</span><span class="p">,</span> <span class="n">helpers</span><span class="o">.</span><span class="n">sysConfDir</span><span class="o">+</span><span class="s">&#39;/technology.symbolic.xml&#39;</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;REAL_TECHNOLOGY&#39;</span> <span class="p">,</span> <span class="n">helpers</span><span class="o">.</span><span class="n">sysConfDir</span><span class="o">+</span><span class="s">&#39;/technology.cmos130.s2r.xml&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;DISPLAY&#39;</span> <span class="p">,</span> <span class="n">helpers</span><span class="o">.</span><span class="n">sysConfDir</span><span class="o">+</span><span class="s">&#39;/display.xml&#39;</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;CATALOG&#39;</span> <span class="p">,</span> <span class="s">&#39;CATAL&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;WORKING_LIBRARY&#39;</span> <span class="p">,</span> <span class="s">&#39;.&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;SYSTEM_LIBRARY&#39;</span> <span class="p">,</span> <span class="p">(</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s">&#39;sxlib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s">&#39;dp_sxlib&#39;</span><span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s">&#39;ramlib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s">&#39;romlib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s">&#39;rflib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s">&#39;rf2lib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s">&#39;pxlib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span> <span class="p">)</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;SCALE_X&#39;</span> <span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;IN_LO&#39;</span> <span class="p">,</span> <span class="s">&#39;vst&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;IN_PH&#39;</span> <span class="p">,</span> <span class="s">&#39;ap&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;OUT_LO&#39;</span> <span class="p">,</span> <span class="s">&#39;vst&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;OUT_PH&#39;</span> <span class="p">,</span> <span class="s">&#39;ap&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;POWER&#39;</span> <span class="p">,</span> <span class="s">&#39;vdd&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;GROUND&#39;</span> <span class="p">,</span> <span class="s">&#39;vss&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;CLOCK&#39;</span> <span class="p">,</span> <span class="s">&#39;^ck.*&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s">&#39;BLOCKAGE&#39;</span> <span class="p">,</span> <span class="s">&#39;^blockageNet*&#39;</span><span class="p">)</span>
<span class="p">(</span> <span class="p">(</span> <span class="s1">&#39;SYMBOLIC_TECHNOLOGY&#39;</span><span class="p">,</span> <span class="n">helpers</span><span class="o">.</span><span class="n">sysConfDir</span><span class="o">+</span><span class="s1">&#39;/technology.symbolic.xml&#39;</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;REAL_TECHNOLOGY&#39;</span> <span class="p">,</span> <span class="n">helpers</span><span class="o">.</span><span class="n">sysConfDir</span><span class="o">+</span><span class="s1">&#39;/technology.cmos130.s2r.xml&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;DISPLAY&#39;</span> <span class="p">,</span> <span class="n">helpers</span><span class="o">.</span><span class="n">sysConfDir</span><span class="o">+</span><span class="s1">&#39;/display.xml&#39;</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;CATALOG&#39;</span> <span class="p">,</span> <span class="s1">&#39;CATAL&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;WORKING_LIBRARY&#39;</span> <span class="p">,</span> <span class="s1">&#39;.&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;SYSTEM_LIBRARY&#39;</span> <span class="p">,</span> <span class="p">(</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s1">&#39;sxlib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s1">&#39;dp_sxlib&#39;</span><span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s1">&#39;ramlib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s1">&#39;romlib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s1">&#39;rflib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s1">&#39;rf2lib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">cellsTop</span><span class="o">+</span><span class="s1">&#39;pxlib&#39;</span> <span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span> <span class="p">)</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;SCALE_X&#39;</span> <span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;IN_LO&#39;</span> <span class="p">,</span> <span class="s1">&#39;vst&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;IN_PH&#39;</span> <span class="p">,</span> <span class="s1">&#39;ap&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;OUT_LO&#39;</span> <span class="p">,</span> <span class="s1">&#39;vst&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;OUT_PH&#39;</span> <span class="p">,</span> <span class="s1">&#39;ap&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;POWER&#39;</span> <span class="p">,</span> <span class="s1">&#39;vdd&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;GROUND&#39;</span> <span class="p">,</span> <span class="s1">&#39;vss&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;CLOCK&#39;</span> <span class="p">,</span> <span class="s1">&#39;^ck.*&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="s1">&#39;BLOCKAGE&#39;</span> <span class="p">,</span> <span class="s1">&#39;^blockageNet*&#39;</span><span class="p">)</span>
<span class="p">)</span>
</pre></div>
</div>
@ -417,11 +423,11 @@ the form:</p>
available settings. Some important remarks about thoses settings:</p>
<ul>
<li><p class="first">In it&#8217;s configuration file, the user do not need to redefine all the settings,
just the one he wants to change. In most of the cases, the <tt class="docutils literal"><span class="pre">SYSTEM_LIBRARY</span></tt>,
the <tt class="docutils literal"><span class="pre">WORKING_LIBRARY</span></tt> and the special net names (at this point there is not
just the one he wants to change. In most of the cases, the <code class="docutils literal"><span class="pre">SYSTEM_LIBRARY</span></code>,
the <code class="docutils literal"><span class="pre">WORKING_LIBRARY</span></code> and the special net names (at this point there is not
much alternatives for the others settings).</p>
</li>
<li><p class="first"><tt class="docutils literal"><span class="pre">SYSTEM_LIBRARY</span></tt> setting: Setting up the library search path.
<li><p class="first"><code class="docutils literal"><span class="pre">SYSTEM_LIBRARY</span></code> setting: Setting up the library search path.
Each library entry in the tuple will be added to the search path according
to the second parameter:</p>
<ul class="simple">
@ -432,29 +438,29 @@ it, whithout changing the search path order. If no library of that name
already exists, it is appended.</li>
</ul>
<p>A library is identified by it&#8217;s name, this name is the last component of the
path name. For instance: <tt class="docutils literal"><span class="pre">/soc/alliance/sxlib</span></tt> will be named <tt class="docutils literal"><span class="pre">sxlib</span></tt>.
Implementing the <span class="sc">Alliance</span> specification, when looking for a <em>Cell</em> <tt class="docutils literal"><span class="pre">name</span></tt>,
path name. For instance: <code class="docutils literal"><span class="pre">/soc/alliance/sxlib</span></code> will be named <code class="docutils literal"><span class="pre">sxlib</span></code>.
Implementing the <span class="sc">Alliance</span> specification, when looking for a <em>Cell</em> <code class="docutils literal"><span class="pre">name</span></code>,
the system will browse sequentially trought the library list and returns
the first <em>Cell</em> whose name match.</p>
</li>
<li><p class="first">For <tt class="docutils literal"><span class="pre">POWER</span></tt>, <tt class="docutils literal"><span class="pre">GROUND</span></tt>, <tt class="docutils literal"><span class="pre">CLOCK</span></tt> and <tt class="docutils literal"><span class="pre">BLOCKAGE</span></tt> net names, a regular
<li><p class="first">For <code class="docutils literal"><span class="pre">POWER</span></code>, <code class="docutils literal"><span class="pre">GROUND</span></code>, <code class="docutils literal"><span class="pre">CLOCK</span></code> and <code class="docutils literal"><span class="pre">BLOCKAGE</span></code> net names, a regular
expression (<span class="sc">gnu</span> regexp) is expected.</p>
</li>
<li><p class="first">The <tt class="docutils literal"><span class="pre">helpers.sysConfDir</span></tt> variable is supplied by the helpers, it is the
<li><p class="first">The <code class="docutils literal"><span class="pre">helpers.sysConfDir</span></code> variable is supplied by the helpers, it is the
directory in which the system-wide configuration files are locateds.
For a standard installation it would be: <tt class="docutils literal"><span class="pre">/soc/coriolis2</span></tt>.</p>
For a standard installation it would be: <code class="docutils literal"><span class="pre">/soc/coriolis2</span></code>.</p>
</li>
</ul>
<p>A typical user&#8217;s configuration file would be:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os</span>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span>
<span class="n">homeDir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">&#39;HOME&#39;</span><span class="p">)</span>
<span class="n">homeDir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;HOME&#39;</span><span class="p">)</span>
<span class="n">allianceConfig</span> <span class="o">=</span> \
<span class="p">(</span> <span class="p">(</span><span class="s">&#39;WORKING_LIBRARY&#39;</span> <span class="p">,</span> <span class="n">homeDir</span><span class="o">+</span><span class="s">&#39;/worklib&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;SYSTEM_LIBRARY&#39;</span> <span class="p">,</span> <span class="p">(</span> <span class="p">(</span><span class="n">homeDir</span><span class="o">+</span><span class="s">&#39;/mylib&#39;</span><span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span> <span class="p">)</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;POWER&#39;</span> <span class="p">,</span> <span class="s">&#39;vdd.*&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;GROUND&#39;</span> <span class="p">,</span> <span class="s">&#39;vss.*&#39;</span><span class="p">)</span>
<span class="p">(</span> <span class="p">(</span><span class="s1">&#39;WORKING_LIBRARY&#39;</span> <span class="p">,</span> <span class="n">homeDir</span><span class="o">+</span><span class="s1">&#39;/worklib&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;SYSTEM_LIBRARY&#39;</span> <span class="p">,</span> <span class="p">(</span> <span class="p">(</span><span class="n">homeDir</span><span class="o">+</span><span class="s1">&#39;/mylib&#39;</span><span class="p">,</span> <span class="n">Environment</span><span class="o">.</span><span class="n">Append</span><span class="p">)</span> <span class="p">)</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;POWER&#39;</span> <span class="p">,</span> <span class="s1">&#39;vdd.*&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;GROUND&#39;</span> <span class="p">,</span> <span class="s1">&#39;vss.*&#39;</span><span class="p">)</span>
<span class="p">)</span>
</pre></div>
</div>
@ -471,37 +477,37 @@ configuration files are defined:</p>
<li><span class="cb">stratus1.conf</span>: for the <span class="sc">Stratus1</span> tool.</li>
</ul>
<p>Here is the contents of <span class="cb">etesian.conf</span>:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="c"># Etesian parameters.</span>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1"># Etesian parameters.</span>
<span class="n">parametersTable</span> <span class="o">=</span> \
<span class="p">(</span> <span class="p">(</span><span class="s">&#39;etesian.aspectRatio&#39;</span> <span class="p">,</span> <span class="n">TypePercentage</span><span class="p">,</span> <span class="mi">100</span> <span class="p">,</span> <span class="p">{</span> <span class="s">&#39;min&#39;</span><span class="p">:</span><span class="mi">10</span><span class="p">,</span> <span class="s">&#39;max&#39;</span><span class="p">:</span><span class="mi">1000</span> <span class="p">}</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;etesian.spaceMargin&#39;</span> <span class="p">,</span> <span class="n">TypePercentage</span><span class="p">,</span> <span class="mi">5</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;etesian.uniformDensity&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="bp">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;etesian.routingDriven&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="bp">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&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="s">&#39;values&#39;</span><span class="p">:(</span> <span class="p">(</span><span class="s">&quot;Fast&quot;</span> <span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&quot;Standard&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&quot;High&quot;</span> <span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&quot;Extreme&quot;</span> <span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="p">)</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="mi">100</span> <span class="p">,</span> <span class="p">{</span> <span class="s1">&#39;min&#39;</span><span class="p">:</span><span class="mi">10</span><span class="p">,</span> <span class="s1">&#39;max&#39;</span><span class="p">:</span><span class="mi">1000</span> <span class="p">}</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="mi">5</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="kc">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;etesian.routingDriven&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="kc">False</span> <span class="p">)</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="s1">&#39;values&#39;</span><span class="p">:(</span> <span class="p">(</span><span class="s2">&quot;Fast&quot;</span> <span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s2">&quot;Standard&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s2">&quot;High&quot;</span> <span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s2">&quot;Extreme&quot;</span> <span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="p">)</span> <span class="p">}</span>
<span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&quot;etesian.graphics&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="s">&#39;values&#39;</span><span class="p">:(</span> <span class="p">(</span><span class="s">&quot;Show every step&quot;</span> <span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&quot;Show lower bound&quot;</span> <span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&quot;Show result only&quot;</span> <span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="p">)</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">(</span><span class="s2">&quot;etesian.graphics&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="s1">&#39;values&#39;</span><span class="p">:(</span> <span class="p">(</span><span class="s2">&quot;Show every step&quot;</span> <span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s2">&quot;Show lower bound&quot;</span> <span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s2">&quot;Show result only&quot;</span> <span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="p">)</span> <span class="p">}</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">layoutTable</span> <span class="o">=</span> \
<span class="p">(</span> <span class="p">(</span><span class="n">TypeTab</span> <span class="p">,</span> <span class="s">&#39;Etesian&#39;</span><span class="p">,</span> <span class="s">&#39;etesian&#39;</span><span class="p">)</span>
<span class="p">(</span> <span class="p">(</span><span class="n">TypeTab</span> <span class="p">,</span> <span class="s1">&#39;Etesian&#39;</span><span class="p">,</span> <span class="s1">&#39;etesian&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeTitle</span> <span class="p">,</span> <span class="s">&#39;Placement area&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s">&quot;etesian.aspectRatio&quot;</span> <span class="p">,</span> <span class="s">&quot;Aspect Ratio, X/Y (%)&quot;</span><span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s">&quot;etesian.spaceMargin&quot;</span> <span class="p">,</span> <span class="s">&quot;Space Margin&quot;</span> <span class="p">,</span> <span class="mi">1</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeTitle</span> <span class="p">,</span> <span class="s1">&#39;Placement area&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s2">&quot;etesian.aspectRatio&quot;</span> <span class="p">,</span> <span class="s2">&quot;Aspect Ratio, X/Y (%)&quot;</span><span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s2">&quot;etesian.spaceMargin&quot;</span> <span class="p">,</span> <span class="s2">&quot;Space Margin&quot;</span> <span class="p">,</span> <span class="mi">1</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeRule</span> <span class="p">,)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeTitle</span> <span class="p">,</span> <span class="s">&#39;Etesian - Placer&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s">&quot;etesian.uniformDensity&quot;</span><span class="p">,</span> <span class="s">&quot;Uniform density&quot;</span> <span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s">&quot;etesian.routingDriven&quot;</span> <span class="p">,</span> <span class="s">&quot;Routing driven&quot;</span> <span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s">&quot;etesian.effort&quot;</span> <span class="p">,</span> <span class="s">&quot;Placement effort&quot;</span> <span class="p">,</span> <span class="mi">1</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s">&quot;etesian.graphics&quot;</span> <span class="p">,</span> <span class="s">&quot;Placement view&quot;</span> <span class="p">,</span> <span class="mi">1</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeTitle</span> <span class="p">,</span> <span class="s1">&#39;Etesian - Placer&#39;</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s2">&quot;etesian.uniformDensity&quot;</span><span class="p">,</span> <span class="s2">&quot;Uniform density&quot;</span> <span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s2">&quot;etesian.routingDriven&quot;</span> <span class="p">,</span> <span class="s2">&quot;Routing driven&quot;</span> <span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s2">&quot;etesian.effort&quot;</span> <span class="p">,</span> <span class="s2">&quot;Placement effort&quot;</span> <span class="p">,</span> <span class="mi">1</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeOption</span><span class="p">,</span> <span class="s2">&quot;etesian.graphics&quot;</span> <span class="p">,</span> <span class="s2">&quot;Placement view&quot;</span> <span class="p">,</span> <span class="mi">1</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="n">TypeRule</span> <span class="p">,)</span>
<span class="p">)</span>
</pre></div>
@ -510,27 +516,27 @@ configuration files are defined:</p>
<p>Taxonomy of the file:</p>
<ul class="simple">
<li>It must contains, at least, the two tables:<ul>
<li><tt class="docutils literal"><span class="pre">parametersTable</span></tt>, defines &amp; initialise the configuration variables.</li>
<li><tt class="docutils literal"><span class="pre">layoutTables</span></tt>, defines how the various parameters will be displayed
in the configuration window (<a class="reference internal" href="ViewerTools.html#the-settings-tab"><em>The Settings Tab</em></a>).</li>
<li><code class="docutils literal"><span class="pre">parametersTable</span></code>, defines &amp; initialise the configuration variables.</li>
<li><code class="docutils literal"><span class="pre">layoutTables</span></code>, defines how the various parameters will be displayed
in the configuration window (<a class="reference internal" href="ViewerTools.html#the-settings-tab"><span class="std std-ref">The Settings Tab</span></a>).</li>
</ul>
</li>
<li>The <tt class="docutils literal"><span class="pre">parametersTable</span></tt>, is a tuple (list) of tuples. Each entry in the list
<li>The <code class="docutils literal"><span class="pre">parametersTable</span></code>, is a tuple (list) of tuples. Each entry in the list
describe a configuration parameter. In it&#8217;s simplest form, it&#8217;s a quadruplet
<span class="cb">(TypeOption, &#8216;paramId&#8217;, ParameterType, DefaultValue)</span> with:<ol class="arabic">
<li><tt class="docutils literal"><span class="pre">TypeOption</span></tt>, tells that this tuple describe a parameter.</li>
<li><tt class="docutils literal"><span class="pre">paramId</span></tt>, the identifier of the parameter. Identifiers are defined
<li><code class="docutils literal"><span class="pre">TypeOption</span></code>, tells that this tuple describe a parameter.</li>
<li><code class="docutils literal"><span class="pre">paramId</span></code>, the identifier of the parameter. Identifiers are defined
by the tools. The list of parameters is detailed in each tool section.</li>
<li><tt class="docutils literal"><span class="pre">ParameterType</span></tt>, the kind of parameter. Could be:<ul>
<li><tt class="docutils literal"><span class="pre">TypeBool</span></tt>, boolean.</li>
<li><tt class="docutils literal"><span class="pre">TypeInt</span></tt>, signed integer.</li>
<li><tt class="docutils literal"><span class="pre">TypeEnumerate</span></tt>, enumerated type, needs extra entry.</li>
<li><tt class="docutils literal"><span class="pre">TypePercentage</span></tt>, percentage, expressed between 0 and 100.</li>
<li><tt class="docutils literal"><span class="pre">TypeDouble</span></tt>, float.</li>
<li><tt class="docutils literal"><span class="pre">TypeString</span></tt>, character string.</li>
<li><code class="docutils literal"><span class="pre">ParameterType</span></code>, the kind of parameter. Could be:<ul>
<li><code class="docutils literal"><span class="pre">TypeBool</span></code>, boolean.</li>
<li><code class="docutils literal"><span class="pre">TypeInt</span></code>, signed integer.</li>
<li><code class="docutils literal"><span class="pre">TypeEnumerate</span></code>, enumerated type, needs extra entry.</li>
<li><code class="docutils literal"><span class="pre">TypePercentage</span></code>, percentage, expressed between 0 and 100.</li>
<li><code class="docutils literal"><span class="pre">TypeDouble</span></code>, float.</li>
<li><code class="docutils literal"><span class="pre">TypeString</span></code>, character string.</li>
</ul>
</li>
<li><tt class="docutils literal"><span class="pre">DefaultValue</span></tt>, the default value for that parameter.</li>
<li><code class="docutils literal"><span class="pre">DefaultValue</span></code>, the default value for that parameter.</li>
</ol>
</li>
</ul>
@ -542,34 +548,34 @@ by the tools. The list of parameters is detailed in each tool section.</li>
<span class="cb">allianceConfig</span> or <span class="cb">parametersTable</span>, you can put pretty much anything
in <span class="cb">&lt;CWD&gt;/.coriolis2/settings.py</span> (that is, written in <span class="sc">Python</span>).</p>
<p>For example:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="c"># -*- Mode:Python -*-</span>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1"># -*- Mode:Python -*-</span>
<span class="n">defaultStyle</span> <span class="o">=</span> <span class="s">&#39;Alliance.Classic [black]&#39;</span>
<span class="n">defaultStyle</span> <span class="o">=</span> <span class="s1">&#39;Alliance.Classic [black]&#39;</span>
<span class="c"># Regular Coriolis configuration.</span>
<span class="c1"># Regular Coriolis configuration.</span>
<span class="n">parametersTable</span> <span class="o">=</span> \
<span class="p">(</span> <span class="p">(</span><span class="s">&#39;misc.catchCore&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="bp">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;misc.info&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="bp">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;misc.paranoid&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="bp">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;misc.bug&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="bp">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;misc.logMode&#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="s">&#39;misc.verboseLevel1&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="bp">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;misc.verboseLevel2&#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="s">&#39;misc.minTraceLevel&#39;</span> <span class="p">,</span> <span class="n">TypeInt</span> <span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s">&#39;misc.maxTraceLevel&#39;</span> <span class="p">,</span> <span class="n">TypeInt</span> <span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">(</span> <span class="p">(</span><span class="s1">&#39;misc.catchCore&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="kc">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;misc.info&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="kc">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;misc.paranoid&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="kc">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;misc.bug&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="kc">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;misc.logMode&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="kc">True</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;misc.verboseLevel1&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="kc">False</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;misc.verboseLevel2&#39;</span> <span class="p">,</span> <span class="n">TypeBool</span> <span class="p">,</span> <span class="kc">True</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;misc.minTraceLevel&#39;</span> <span class="p">,</span> <span class="n">TypeInt</span> <span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">&#39;misc.maxTraceLevel&#39;</span> <span class="p">,</span> <span class="n">TypeInt</span> <span class="p">,</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">)</span>
<span class="c"># Some ordinary Python script...</span>
<span class="c1"># Some ordinary Python script...</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="k">print</span> <span class="s">&#39; o Cleaning up ClockTree previous run.&#39;</span>
<span class="k">for</span> <span class="n">fileName</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">fileName</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&#39;.ap&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">fileName</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;_clocked.&#39;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">):</span>
<span class="k">print</span> <span class="s">&#39; - &lt;</span><span class="si">%s</span><span class="s">&gt;&#39;</span> <span class="o">%</span> <span class="n">fileName</span>
<span class="nb">print</span> <span class="s1">&#39; o Cleaning up ClockTree previous run.&#39;</span>
<span class="k">for</span> <span class="n">fileName</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">fileName</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">&#39;.ap&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">fileName</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">&#39;_clocked.&#39;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">):</span>
<span class="nb">print</span> <span class="s1">&#39; - &lt;</span><span class="si">%s</span><span class="s1">&gt;&#39;</span> <span class="o">%</span> <span class="n">fileName</span>
<span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
</pre></div>
</div>
<p>See <a class="reference internal" href="ScriptsPlugins.html#python-interface-to-coriolis"><em>Python Interface for Hurricane / Coriolis</em></a> for more details those capabilities.</p>
<p>See <a class="reference internal" href="ScriptsPlugins.html#python-interface-to-coriolis"><span class="std std-ref">Python Interface for Hurricane / Coriolis</span></a> for more details those capabilities.</p>
</div>
</div>
@ -594,7 +600,7 @@ in <span class="cb">&lt;CWD&gt;/.coriolis2/settings.py</span> (that is, written
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="../index.html"/>
<link rel="up" title="Coriolis Users Guide" href="index.html"/>
<link rel="next" title="Coriolis Configuration &amp; Initialisation" href="Configuration.html"/>
@ -85,7 +87,7 @@
<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 current"><a class="current reference internal" href="">Installation</a><ul>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Installation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#fixed-directory-tree">Fixed Directory Tree</a></li>
<li class="toctree-l3"><a class="reference internal" href="#building-coriolis">Building Coriolis</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#building-the-devel-branch">Building the Devel Branch</a></li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -372,10 +377,10 @@ automatically created either by <span class="cb">ccb</span> or the build system.
</table>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p><em>Alternate build types:</em> the <tt class="docutils literal"><span class="pre">Release.Shared</span></tt> means an optimized build
with shared libraries. But there are also available <tt class="docutils literal"><span class="pre">Static</span></tt> instead of <tt class="docutils literal"><span class="pre">Shared</span></tt>
and <tt class="docutils literal"><span class="pre">Debug</span></tt> instead of <tt class="docutils literal"><span class="pre">Release</span></tt> and any combination of them.</p>
<p class="last"><tt class="docutils literal"><span class="pre">Static</span></tt> do not work because I don&#8217;t know yet to mix statically linked binaries
<p><em>Alternate build types:</em> the <code class="docutils literal"><span class="pre">Release.Shared</span></code> means an optimized build
with shared libraries. But there are also available <code class="docutils literal"><span class="pre">Static</span></code> instead of <code class="docutils literal"><span class="pre">Shared</span></code>
and <code class="docutils literal"><span class="pre">Debug</span></code> instead of <code class="docutils literal"><span class="pre">Release</span></code> and any combination of them.</p>
<p class="last"><code class="docutils literal"><span class="pre">Static</span></code> do not work because I don&#8217;t know yet to mix statically linked binaries
and Python modules (which must be dynamic).</p>
</div>
<p></p>
@ -385,34 +390,38 @@ and Python modules (which must be dynamic).</p>
<p>First step is to install the prerequisites. Currently, only <a class="reference external" href="http://miloyip.github.io/rapidjson/">RapidJSON</a>.
As RapidJSON is evolving fast, if you encounter compatibility problems,
the exact version we compiled against is given below.</p>
<div class="highlight-python"><pre>dummy@lepka:~$ mkdir -p ~/coriolis-2.x/src/support
dummy@lepka:~$ cd ~/coriolis-2.x/src/support
dummy@lepka:~$ git clone http://github.com/miloyip/rapidjson
dummy@lepka:~$ git checkout ec322005072076ef53984462fb4a1075c27c7dfd</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">mkdir</span> <span class="o">-</span><span class="n">p</span> <span class="o">~/</span><span class="n">coriolis</span><span class="o">-</span><span class="mf">2.</span><span class="n">x</span><span class="o">/</span><span class="n">src</span><span class="o">/</span><span class="n">support</span>
<span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">cd</span> <span class="o">~/</span><span class="n">coriolis</span><span class="o">-</span><span class="mf">2.</span><span class="n">x</span><span class="o">/</span><span class="n">src</span><span class="o">/</span><span class="n">support</span>
<span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">git</span> <span class="n">clone</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">github</span><span class="o">.</span><span class="n">com</span><span class="o">/</span><span class="n">miloyip</span><span class="o">/</span><span class="n">rapidjson</span>
<span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">git</span> <span class="n">checkout</span> <span class="n">ec322005072076ef53984462fb4a1075c27c7dfd</span>
</pre></div>
</div>
<p>The second step is to create the source directory and pull the <span class="cb">git</span> repository:</p>
<div class="highlight-python"><pre>dummy@lepka:~$ mkdir -p ~/coriolis-2.x/src
dummy@lepka:~$ cd ~/coriolis-2.x/src
dummy@lepka:~$ git clone https://www-soc.lip6.fr/git/coriolis.git</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">mkdir</span> <span class="o">-</span><span class="n">p</span> <span class="o">~/</span><span class="n">coriolis</span><span class="o">-</span><span class="mf">2.</span><span class="n">x</span><span class="o">/</span><span class="n">src</span>
<span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">cd</span> <span class="o">~/</span><span class="n">coriolis</span><span class="o">-</span><span class="mf">2.</span><span class="n">x</span><span class="o">/</span><span class="n">src</span>
<span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">git</span> <span class="n">clone</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">www</span><span class="o">-</span><span class="n">soc</span><span class="o">.</span><span class="n">lip6</span><span class="o">.</span><span class="n">fr</span><span class="o">/</span><span class="n">git</span><span class="o">/</span><span class="n">coriolis</span><span class="o">.</span><span class="n">git</span>
</pre></div>
</div>
<p>Third and final step, build &amp; install:</p>
<div class="highlight-python"><pre>dummy@lepka:src$ ./bootstrap/ccb.py --project=support \
--project=coriolis \
--make="-j4 install"
dummy@lepka:src$ ./bootstrap/ccb.py --project=support \
--project=coriolis \
--doc --make="-j1 install"</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="n">src</span><span class="o">&gt;</span> <span class="o">./</span><span class="n">bootstrap</span><span class="o">/</span><span class="n">ccb</span><span class="o">.</span><span class="n">py</span> <span class="o">--</span><span class="n">project</span><span class="o">=</span><span class="n">support</span> \
<span class="o">--</span><span class="n">project</span><span class="o">=</span><span class="n">coriolis</span> \
<span class="o">--</span><span class="n">make</span><span class="o">=</span><span class="s2">&quot;-j4 install&quot;</span>
<span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="n">src</span><span class="o">&gt;</span> <span class="o">./</span><span class="n">bootstrap</span><span class="o">/</span><span class="n">ccb</span><span class="o">.</span><span class="n">py</span> <span class="o">--</span><span class="n">project</span><span class="o">=</span><span class="n">support</span> \
<span class="o">--</span><span class="n">project</span><span class="o">=</span><span class="n">coriolis</span> \
<span class="o">--</span><span class="n">doc</span> <span class="o">--</span><span class="n">make</span><span class="o">=</span><span class="s2">&quot;-j1 install&quot;</span>
</pre></div>
</div>
<p>We need to separate to perform a separate installation of the documentation because it
do not support to be generated with a parallel build. So we compile &amp; install in a first
stage in <tt class="docutils literal"><span class="pre">-j4</span></tt> (or whatever) then we generate the documentation in <tt class="docutils literal"><span class="pre">-j1</span></tt></p>
stage in <code class="docutils literal"><span class="pre">-j4</span></code> (or whatever) then we generate the documentation in <code class="docutils literal"><span class="pre">-j1</span></code></p>
<p>Under <span class="sc">rhel6</span> or clones, you must build using the <span class="cb">devtoolset2</span>:</p>
<div class="highlight-python"><pre>dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \
--devtoolset-2 --make="-j4 install"</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="n">src</span><span class="o">&gt;</span> <span class="o">./</span><span class="n">bootstrap</span><span class="o">/</span><span class="n">ccb</span><span class="o">.</span><span class="n">py</span> <span class="o">--</span><span class="n">project</span><span class="o">=</span><span class="n">coriolis</span> \
<span class="o">--</span><span class="n">devtoolset</span><span class="o">-</span><span class="mi">2</span> <span class="o">--</span><span class="n">make</span><span class="o">=</span><span class="s2">&quot;-j4 install&quot;</span>
</pre></div>
</div>
<p>If you want to uses Qt 5 instead of Qt 4, you may add the <tt class="docutils literal"><span class="pre">--qt5</span></tt> argument.</p>
<p>The complete list of <span class="cb">ccb</span> functionalities can be accessed with the <tt class="docutils literal"><span class="pre">--help</span></tt> argument.
It also may be run in graphical mode (<tt class="docutils literal"><span class="pre">--gui</span></tt>).</p>
<p>If you want to uses Qt 5 instead of Qt 4, you may add the <code class="docutils literal"><span class="pre">--qt5</span></code> argument.</p>
<p>The complete list of <span class="cb">ccb</span> functionalities can be accessed with the <code class="docutils literal"><span class="pre">--help</span></code> argument.
It also may be run in graphical mode (<code class="docutils literal"><span class="pre">--gui</span></code>).</p>
<div class="section" id="building-the-devel-branch">
<h3>Building the Devel Branch<a class="headerlink" href="#building-the-devel-branch" title="Permalink to this headline"></a></h3>
<p>In the <span class="sc">Coriolis</span> <span class="cb">git</span> repository, two branches are present:</p>
@ -423,15 +432,17 @@ one used by default if you follow the above instructions.</p>
<li><p class="first">The <span class="cb">devel</span> branch, which obviously contains the latest commits from the
development team. To use it instead of the <span class="cb">master</span> one, do the following
command just after the first step:</p>
<div class="highlight-python"><pre>dummy@lepka:~$ git checkout devel
dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \
--make="-j4 install" --debug</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">git</span> <span class="n">checkout</span> <span class="n">devel</span>
<span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="n">src</span><span class="o">&gt;</span> <span class="o">./</span><span class="n">bootstrap</span><span class="o">/</span><span class="n">ccb</span><span class="o">.</span><span class="n">py</span> <span class="o">--</span><span class="n">project</span><span class="o">=</span><span class="n">coriolis</span> \
<span class="o">--</span><span class="n">make</span><span class="o">=</span><span class="s2">&quot;-j4 install&quot;</span> <span class="o">--</span><span class="n">debug</span>
</pre></div>
</div>
<p>Be aware that it may requires newer versions of the dependencies and may introduce
incompatibilites with the stable version.</p>
<p>In the (unlikely) event of a crash of <span class="cb">cgt</span>, as it is a <span class="sc">Python</span> script, the right
command to run <span class="cb">gdb</span> on it is:</p>
<div class="highlight-python"><pre>dummy@lepka:work$ gdb python core.XXXX</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="n">work</span><span class="o">&gt;</span> <span class="n">gdb</span> <span class="n">python</span> <span class="n">core</span><span class="o">.</span><span class="n">XXXX</span>
</pre></div>
</div>
</li>
</ul>
@ -442,9 +453,10 @@ command to run <span class="cb">gdb</span> on it is:</p>
<p><span class="sc">Coriolis</span> make uses of the <span class="cb">boost::python</span> module, but the <span class="sc">MacPorts</span> <span class="cb">boost</span>
seems unable to work with the <span class="sc">Python</span> bundled with <span class="sc">MacOS</span>. So you have to install
both of them from <span class="sc">MacPorts</span>:</p>
<div class="highlight-python"><pre>dummy@macos:~$ port install boost +python27
dummy@macos:~$ port select python python27
dummy@macos:-$ export DYLD_FRAMEWORK_PATH=/opt/local/Library/Frameworks</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dummy</span><span class="nd">@macos</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">port</span> <span class="n">install</span> <span class="n">boost</span> <span class="o">+</span><span class="n">python27</span>
<span class="n">dummy</span><span class="nd">@macos</span><span class="p">:</span><span class="o">~&gt;</span> <span class="n">port</span> <span class="n">select</span> <span class="n">python</span> <span class="n">python27</span>
<span class="n">dummy</span><span class="nd">@macos</span><span class="p">:</span><span class="o">-&gt;</span> <span class="n">export</span> <span class="n">DYLD_FRAMEWORK_PATH</span><span class="o">=/</span><span class="n">opt</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">Library</span><span class="o">/</span><span class="n">Frameworks</span>
</pre></div>
</div>
<p>The last two lines tell <span class="sc">MacOS</span> to use the <span class="sc">Python</span> from <span class="sc">MacPorts</span> and <em>not</em> from
the system.</p>
@ -453,13 +465,13 @@ the system.</p>
</div>
<div class="section" id="packaging-coriolis">
<h2>Packaging Coriolis<a class="headerlink" href="#packaging-coriolis" title="Permalink to this headline"></a></h2>
<p>Packager should not uses <span class="cb">ccb</span>, instead <tt class="docutils literal"><span class="pre">bootstrap/Makefile.package</span></tt> is provided
to emulate a top-level <tt class="docutils literal"><span class="pre">autotool</span></tt> makefile. Just copy it in the root of the
<span class="sc">Coriolis</span> git repository (<tt class="docutils literal"><span class="pre">~/corriolis-2.x/src/coriolis/</span></tt>) and build.</p>
<p>Sligthly outaded packaging configuration files can also be found under <tt class="docutils literal"><span class="pre">bootstrap/</span></tt>:</p>
<p>Packager should not uses <span class="cb">ccb</span>, instead <code class="docutils literal"><span class="pre">bootstrap/Makefile.package</span></code> is provided
to emulate a top-level <code class="docutils literal"><span class="pre">autotool</span></code> makefile. Just copy it in the root of the
<span class="sc">Coriolis</span> git repository (<code class="docutils literal"><span class="pre">~/corriolis-2.x/src/coriolis/</span></code>) and build.</p>
<p>Sligthly outaded packaging configuration files can also be found under <code class="docutils literal"><span class="pre">bootstrap/</span></code>:</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">bootstrap/coriolis2.spec.in</span></tt> for <span class="cb">rpm</span> based distributions.</li>
<li><tt class="docutils literal"><span class="pre">bootstrap/debian</span></tt> for <span class="sc">Debian</span> based distributions.</li>
<li><code class="docutils literal"><span class="pre">bootstrap/coriolis2.spec.in</span></code> for <span class="cb">rpm</span> based distributions.</li>
<li><code class="docutils literal"><span class="pre">bootstrap/debian</span></code> for <span class="sc">Debian</span> based distributions.</li>
</ul>
</div>
<div class="section" id="hooking-up-into-alliance">
@ -467,19 +479,21 @@ to emulate a top-level <tt class="docutils literal"><span class="pre">autotool</
<p><span class="sc">Coriolis</span> relies on <span class="sc">Alliance</span> for the cell libraries. So after installing or
packaging, you must configure it so that it can found those libraries.</p>
<p>This is done by editing the one variable <span class="cb">cellsTop</span> in the <span class="sc">Alliance</span> helper
(see <a class="reference internal" href="Configuration.html#alliance-helper"><em>Alliance Helper</em></a>). This variable must point to the directory of the
(see <a class="reference internal" href="Configuration.html#alliance-helper"><span class="std std-ref">Alliance Helper</span></a>). This variable must point to the directory of the
cells libraries. In a typical installation, this is generally
<span class="cb">/usr/share/alliance/cells</span>.</p>
</div>
<div class="section" id="setting-up-the-environment-coriolisenv-py">
<h2>Setting up the Environment (coriolisEnv.py)<a class="headerlink" href="#setting-up-the-environment-coriolisenv-py" title="Permalink to this headline"></a></h2>
<p>To simplify the tedious task of configuring your environment, a helper is provided
in the <tt class="docutils literal"><span class="pre">bootstrap</span></tt> source directory (also installed in the directory
<tt class="docutils literal"><span class="pre">.../install/etc/coriolis2/</span></tt>) :</p>
<div class="highlight-python"><pre>~/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py</pre>
in the <code class="docutils literal"><span class="pre">bootstrap</span></code> source directory (also installed in the directory
<code class="docutils literal"><span class="pre">.../install/etc/coriolis2/</span></code>) :</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">~/</span><span class="n">coriolis</span><span class="o">-</span><span class="mf">2.</span><span class="n">x</span><span class="o">/</span><span class="n">src</span><span class="o">/</span><span class="n">coriolis</span><span class="o">/</span><span class="n">bootstrap</span><span class="o">/</span><span class="n">coriolisEnv</span><span class="o">.</span><span class="n">py</span>
</pre></div>
</div>
<p>Use it like this:</p>
<div class="highlight-python"><pre>dummy@lepka:~&gt; eval `~/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py`</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span>dummy@lepka:~&gt; eval `~/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py`
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
@ -488,7 +502,8 @@ When used under <span class="sc">rhel6</span> or clones, it needs to be run in t
environement. The script then launch a new shell, which may cause an
infinite loop if it&#8217;s called again in, say <span class="cb">~/.bashrc</span>.</p>
<p>Instead you may want to create an alias:</p>
<div class="last highlight-python"><pre>alias c2r='eval "`~/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py`"'</pre>
<div class="last highlight-default"><div class="highlight"><pre><span></span><span class="n">alias</span> <span class="n">c2r</span><span class="o">=</span><span class="s1">&#39;eval &quot;`~/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py`&quot;&#39;</span>
</pre></div>
</div>
</div>
</div>
@ -515,7 +530,7 @@ infinite loop if it&#8217;s called again in, say <span class="cb">~/.bashrc</spa
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="../index.html"/>
<link rel="up" title="Coriolis Users Guide" href="index.html"/>
<link rel="next" title="Release Notes" href="Releases.html"/>
@ -75,7 +77,7 @@
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Coriolis User&#8217;s Guide</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="">Credits &amp; License</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Credits &amp; License</a></li>
<li class="toctree-l2"><a class="reference internal" href="Releases.html">Release Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-1-0-1475">Release 1.0.1475</a></li>
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-1-0-1963">Release 1.0.1963</a></li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -302,7 +307,7 @@ copyright© Chris C. N. <span class="sc">Chu</span> from the Iowa State Universi
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="../index.html"/>
<link rel="up" title="Coriolis Users Guide" href="index.html"/>
<link rel="next" title="Installation" href="Installation.html"/>
@ -76,7 +78,7 @@
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Coriolis User&#8217;s Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="LicenseCredits.html">Credits &amp; License</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="">Release Notes</a><ul>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Release Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#release-1-0-1475">Release 1.0.1475</a></li>
<li class="toctree-l3"><a class="reference internal" href="#release-1-0-1963">Release 1.0.1963</a></li>
<li class="toctree-l3"><a class="reference internal" href="#release-1-0-2049">Release 1.0.2049</a></li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -324,8 +329,8 @@ achieve a speedup factor greater than 20...</li>
<li>Added a Blif format parser to process circuits generated by the Yosys and ABC
logic synthetizers.</li>
<li>The multiples user defined configuration files are now grouped under
a common hidden (dot) directory <tt class="docutils literal"><span class="pre">.coriolis2</span></tt> and the file extension
is back from <tt class="docutils literal"><span class="pre">.conf</span></tt> to <tt class="docutils literal"><span class="pre">.py</span></tt>.</li>
a common hidden (dot) directory <code class="docutils literal"><span class="pre">.coriolis2</span></code> and the file extension
is back from <code class="docutils literal"><span class="pre">.conf</span></code> to <code class="docutils literal"><span class="pre">.py</span></code>.</li>
</ol>
</div>
<div class="section" id="release-v2-2">
@ -359,7 +364,7 @@ whole design down and including the standard cells.</li>
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="../index.html"/>
<link rel="up" title="Coriolis Users Guide" href="index.html"/>
<link rel="next" title="Stratus Reference" href="../Stratus/Stratus.html"/>
@ -136,7 +138,7 @@
</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-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>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -260,46 +265,48 @@ 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>
the graphical interface (see <a class="reference internal" href="ViewerTools.html#python-scripts-in-cgt"><span class="std std-ref">Executing Python Scripts in Cgt</span></a>).</p>
<p>Asides for this requirement, the python script can contain anything valid
in <span class="sc">Python</span>, so don&#8217;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 *
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">Hurricane</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">Stratus</span> <span class="k">import</span> <span class="o">*</span>
def doSomething ():
# ...
return
<span class="k">def</span> <span class="nf">doSomething</span> <span class="p">():</span>
<span class="c1"># ...</span>
<span class="k">return</span>
def ScriptMain ( **kw ):
editor = None
if kw.has_key('editor') and kw['editor']:
editor = kw['editor']
stratus.setEditor( editor )
<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="kc">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">stratus</span><span class="o">.</span><span class="n">setEditor</span><span class="p">(</span> <span class="n">editor</span> <span class="p">)</span>
doSomething()
return
<span class="n">doSomething</span><span class="p">()</span>
<span class="k">return</span>
if __name__ == "__main__" :
kw = {}
success = ScriptMain( **kw )
shellSuccess = 0
if not success: shellSuccess = 1
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span> <span class="p">:</span>
<span class="n">kw</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">success</span> <span class="o">=</span> <span class="n">ScriptMain</span><span class="p">(</span> <span class="o">**</span><span class="n">kw</span> <span class="p">)</span>
<span class="n">shellSuccess</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span> <span class="n">shellSuccess</span> <span class="o">=</span> <span class="mi">1</span>
sys.exit( shellSuccess )
ScriptMain ()</pre>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span> <span class="n">shellSuccess</span> <span class="p">)</span>
<span class="n">ScriptMain</span> <span class="p">()</span>
</pre></div>
</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 class="highlight-default"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span> <span class="p">:</span>
</pre></div>
</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>
The arguments of the script are passed through the <code class="docutils literal"><span class="pre">**kw</span></code> dictionnary.</p>
<table border="1" class="docutils">
<colgroup>
<col width="32%" />
@ -313,13 +320,13 @@ The arguments of the script are passed through the <tt class="docutils literal">
</tr>
</thead>
<tbody valign="top">
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">'cell'</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">'cell'</span></code></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>.
on the context, it may be <code class="docutils literal"><span class="pre">None</span></code>.
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>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">'editor'</span></code></td>
<td>The viewer from which the script is run, when
lauched through <span class="cb">cgt</span>.</td>
</tr>
@ -339,34 +346,34 @@ through this method.</p>
as the other P&amp;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&#8217;s core model.</p>
<p> <img alt="Chip Top Structure" class="align-middle" src="../_images/chip-structure-1.png" style="width: 90%;" /> </p>
<p> <a class="reference internal" href="../_images/chip-structure-1.png"><img alt="Chip Top Structure" class="align-middle" src="../_images/chip-structure-1.png" style="width: 90%;" /></a> </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&#8217;s name, by appending <tt class="docutils literal"><span class="pre">_chip.py</span></tt>
This file must be named after the chip&#8217;s name, by appending <code class="docutils literal"><span class="pre">_chip.py</span></code>
(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">&#39;pads.south&#39;</span> <span class="p">:</span> <span class="p">[</span> <span class="s">&#39;p_a3&#39;</span> <span class="p">,</span> <span class="s">&#39;p_a2&#39;</span> <span class="p">,</span> <span class="s">&#39;p_a1&#39;</span> <span class="p">,</span> <span class="s">&#39;p_r0&#39;</span>
<span class="p">,</span> <span class="s">&#39;p_vddick0&#39;</span><span class="p">,</span> <span class="s">&#39;p_vssick0&#39;</span><span class="p">,</span> <span class="s">&#39;p_a0&#39;</span> <span class="p">,</span> <span class="s">&#39;p_i6&#39;</span>
<span class="p">,</span> <span class="s">&#39;p_i8&#39;</span> <span class="p">,</span> <span class="s">&#39;p_i7&#39;</span> <span class="p">,</span> <span class="s">&#39;p_r3&#39;</span> <span class="p">]</span>
<span class="p">,</span> <span class="s">&#39;pads.east&#39;</span> <span class="p">:</span> <span class="p">[</span> <span class="s">&#39;p_zero&#39;</span> <span class="p">,</span> <span class="s">&#39;p_i0&#39;</span> <span class="p">,</span> <span class="s">&#39;p_i1&#39;</span> <span class="p">,</span> <span class="s">&#39;p_i2&#39;</span>
<span class="p">,</span> <span class="s">&#39;p_vddeck0&#39;</span><span class="p">,</span> <span class="s">&#39;p_vsseck0&#39;</span><span class="p">,</span> <span class="s">&#39;p_q3&#39;</span> <span class="p">,</span> <span class="s">&#39;p_b0&#39;</span>
<span class="p">,</span> <span class="s">&#39;p_b1&#39;</span> <span class="p">,</span> <span class="s">&#39;p_b2&#39;</span> <span class="p">,</span> <span class="s">&#39;p_b3&#39;</span> <span class="p">]</span>
<span class="p">,</span> <span class="s">&#39;pads.north&#39;</span> <span class="p">:</span> <span class="p">[</span> <span class="s">&#39;p_noe&#39;</span> <span class="p">,</span> <span class="s">&#39;p_y3&#39;</span> <span class="p">,</span> <span class="s">&#39;p_y2&#39;</span> <span class="p">,</span> <span class="s">&#39;p_y1&#39;</span>
<span class="p">,</span> <span class="s">&#39;p_y0&#39;</span> <span class="p">,</span> <span class="s">&#39;p_vddeck1&#39;</span><span class="p">,</span> <span class="s">&#39;p_vsseck1&#39;</span><span class="p">,</span> <span class="s">&#39;p_np&#39;</span>
<span class="p">,</span> <span class="s">&#39;p_ovr&#39;</span> <span class="p">,</span> <span class="s">&#39;p_cout&#39;</span> <span class="p">,</span> <span class="s">&#39;p_ng&#39;</span> <span class="p">]</span>
<span class="p">,</span> <span class="s">&#39;pads.west&#39;</span> <span class="p">:</span> <span class="p">[</span> <span class="s">&#39;p_cin&#39;</span> <span class="p">,</span> <span class="s">&#39;p_i4&#39;</span> <span class="p">,</span> <span class="s">&#39;p_i5&#39;</span> <span class="p">,</span> <span class="s">&#39;p_i3&#39;</span>
<span class="p">,</span> <span class="s">&#39;p_ck&#39;</span> <span class="p">,</span> <span class="s">&#39;p_d0&#39;</span> <span class="p">,</span> <span class="s">&#39;p_d1&#39;</span> <span class="p">,</span> <span class="s">&#39;p_d2&#39;</span>
<span class="p">,</span> <span class="s">&#39;p_d3&#39;</span> <span class="p">,</span> <span class="s">&#39;p_q0&#39;</span> <span class="p">,</span> <span class="s">&#39;p_f3&#39;</span> <span class="p">]</span>
<span class="p">,</span> <span class="s">&#39;core.size&#39;</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">&#39;chip.size&#39;</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">&#39;chip.clockTree&#39;</span> <span class="p">:</span> <span class="bp">True</span>
is called <code class="docutils literal"><span class="pre">amd2901_crl.vst</span></code>, then the configuration file must be named
<code class="docutils literal"><span class="pre">amd2901_crl_chip.vst</span></code>.</p>
<p>Example of chip placement configuration file (for <code class="docutils literal"><span class="pre">AM2901</span></code>):</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">chip</span> <span class="o">=</span> \
<span class="p">{</span> <span class="s1">&#39;pads.south&#39;</span> <span class="p">:</span> <span class="p">[</span> <span class="s1">&#39;p_a3&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_a2&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_a1&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_r0&#39;</span>
<span class="p">,</span> <span class="s1">&#39;p_vddick0&#39;</span><span class="p">,</span> <span class="s1">&#39;p_vssick0&#39;</span><span class="p">,</span> <span class="s1">&#39;p_a0&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_i6&#39;</span>
<span class="p">,</span> <span class="s1">&#39;p_i8&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_i7&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_r3&#39;</span> <span class="p">]</span>
<span class="p">,</span> <span class="s1">&#39;pads.east&#39;</span> <span class="p">:</span> <span class="p">[</span> <span class="s1">&#39;p_zero&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_i0&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_i1&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_i2&#39;</span>
<span class="p">,</span> <span class="s1">&#39;p_vddeck0&#39;</span><span class="p">,</span> <span class="s1">&#39;p_vsseck0&#39;</span><span class="p">,</span> <span class="s1">&#39;p_q3&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_b0&#39;</span>
<span class="p">,</span> <span class="s1">&#39;p_b1&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_b2&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_b3&#39;</span> <span class="p">]</span>
<span class="p">,</span> <span class="s1">&#39;pads.north&#39;</span> <span class="p">:</span> <span class="p">[</span> <span class="s1">&#39;p_noe&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_y3&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_y2&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_y1&#39;</span>
<span class="p">,</span> <span class="s1">&#39;p_y0&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_vddeck1&#39;</span><span class="p">,</span> <span class="s1">&#39;p_vsseck1&#39;</span><span class="p">,</span> <span class="s1">&#39;p_np&#39;</span>
<span class="p">,</span> <span class="s1">&#39;p_ovr&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_cout&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_ng&#39;</span> <span class="p">]</span>
<span class="p">,</span> <span class="s1">&#39;pads.west&#39;</span> <span class="p">:</span> <span class="p">[</span> <span class="s1">&#39;p_cin&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_i4&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_i5&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_i3&#39;</span>
<span class="p">,</span> <span class="s1">&#39;p_ck&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_d0&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_d1&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_d2&#39;</span>
<span class="p">,</span> <span class="s1">&#39;p_d3&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_q0&#39;</span> <span class="p">,</span> <span class="s1">&#39;p_f3&#39;</span> <span class="p">]</span>
<span class="p">,</span> <span class="s1">&#39;core.size&#39;</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="s1">&#39;chip.size&#39;</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="s1">&#39;chip.clockTree&#39;</span> <span class="p">:</span> <span class="kc">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>
<p>The file must contain <em>one dictionnary</em> named <code class="docutils literal"><span class="pre">chip</span></code>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="29%" />
@ -380,36 +387,36 @@ is called <tt class="docutils literal"><span class="pre">amd2901_crl.vst</span><
</tr>
</thead>
<tbody valign="top">
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">'pad.south'</span></tt></td>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">'pad.south'</span></code></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>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">'pad.east'</span></code></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>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">'pad.north'</span></code></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>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">'pad.west'</span></code></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>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">'core.size'</span></code></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>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">'chip.size'</span></code></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>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">'chip.clockTree'</span></code></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/&lt;STECHNO&gt;/plugins.conf</span></tt>.</p>
<p>Configuration parameters, defaults are defined in <code class="docutils literal"><span class="pre">etc/coriolis2/&lt;STECHNO&gt;/plugins.conf</span></code>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="43%" />
@ -425,7 +432,7 @@ the ClockTree plugin</td>
<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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.block.rails.count</span></code></td>
<td>TypeInt</td>
<td><span class="cb">5</span></td>
</tr>
@ -434,69 +441,69 @@ 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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.block.rails.hWidth</span></code></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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.block.rails.vWidth</span></code></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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.block.rails.hSpacing</span></code></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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.block.rails.vSpacing</span></code></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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.pad.pck</span></code></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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.pad.pvddeck</span></code></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
<code class="docutils literal"><span class="pre">vdde</span></code> (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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.pad.pvsseck</span></code></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
<code class="docutils literal"><span class="pre">vsse</span></code> (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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.pad.pvddick</span></code></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
<code class="docutils literal"><span class="pre">vddi</span></code> (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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">chip.pad.pvssick</span></code></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
<code class="docutils literal"><span class="pre">vssi</span></code> (internal ground) and suppling it to
the core</td>
</tr>
</tbody>
@ -504,8 +511,8 @@ the core</td>
<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>
So even if the requested number of rails <code class="docutils literal"><span class="pre">chip.block.rails.count</span></code> is, say 5,
only four rails (2* <code class="docutils literal"><span class="pre">power</span></code>, 2* <code class="docutils literal"><span class="pre">ground</span></code>) will be generateds.</p>
</div>
</div>
<div class="section" id="clock-tree">
@ -521,15 +528,15 @@ chip level).</p>
<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
A common prefix <code class="docutils literal"><span class="pre">ck_htree</span></code>, 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>
<li><code class="docutils literal"><span class="pre">_bl</span></code>: bottom left plane quarter.</li>
<li><code class="docutils literal"><span class="pre">_br</span></code>: bottom right plane quarter.</li>
<li><code class="docutils literal"><span class="pre">_tl</span></code>: top left plane quarter.</li>
<li><code class="docutils literal"><span class="pre">_tr</span></code>: 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>
<p>We can have <code class="docutils literal"><span class="pre">ck_htree_bl</span></code>, <code class="docutils literal"><span class="pre">ck_htree_bl_bl</span></code>, <code class="docutils literal"><span class="pre">ch_htree_bl_tl</span></code> and so on.</p>
</li>
</ul>
<p>The clock tree plugin works in four steps:</p>
@ -550,17 +557,17 @@ contains all the clock sub-nets. The interface is <em>not</em> changed.</li>
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>
with the added clock signal is renamed with a <code class="docutils literal"><span class="pre">_clocked</span></code> suffix.
For example, the sub-block model <code class="docutils literal"><span class="pre">ram.vst</span></code> will become <code class="docutils literal"><span class="pre">ram_clocked.vst</span></code>.</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&#8217;s
to erase any previously generated <code class="docutils literal"><span class="pre">_clocked</span></code> file (both netlist and
layout: <code class="docutils literal"><span class="pre">rm</span> <span class="pre">*.clocked.{ap,vst}</span></code>). And restart <span class="cb">cgt</span> to clear it&#8217;s
memory cache.</p>
</div>
<p>Configuration parameters, defaults are defined in <tt class="docutils literal"><span class="pre">etc/coriolis2/&lt;STECHNO&gt;/plugins.conf</span></tt>.</p>
<p>Configuration parameters, defaults are defined in <code class="docutils literal"><span class="pre">etc/coriolis2/&lt;STECHNO&gt;/plugins.conf</span></code>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="43%" />
@ -576,24 +583,24 @@ memory cache.</p>
<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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">clockTree.minimumSide</span></code></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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">clockTree.buffer</span></code></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>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">clockTree.placerEngine</span></code></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>
<tr class="row-even"><td colspan="2">The placer to use. Other value is <code class="docutils literal"><span class="pre">Mauka</span></code>
the simulated annealing placer which will go
into retirement very soon</td>
</tr>
@ -616,17 +623,19 @@ which perform the whole P&amp;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 class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="n">AM2901</span><span class="o">&gt;</span> <span class="o">./</span><span class="n">doChip</span> <span class="o">-</span><span class="n">V</span> <span class="o">--</span><span class="n">cell</span><span class="o">=</span><span class="n">amd2901</span>
</pre></div>
</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)
<li><p class="first"><strong>Graphic mode:</strong> launch <span class="cb">cgt</span>, load chip netlist <code class="docutils literal"><span class="pre">amd2901</span></code> (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 class="last highlight-default"><div class="highlight"><pre><span></span><span class="n">dummy</span><span class="nd">@lepka</span><span class="p">:</span><span class="n">AM2901</span><span class="o">&gt;</span> <span class="n">rm</span> <span class="o">*</span><span class="n">clocked</span><span class="o">*.</span><span class="n">vst</span> <span class="o">*.</span><span class="n">ap</span>
</pre></div>
</div>
</div>
</div>
@ -653,7 +662,7 @@ then run the <span class="sc">Python</span> script <span class="cb">doChip.py</s
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="../index.html"/>
<link rel="up" title="Coriolis Users Guide" href="index.html"/>
<link rel="next" title="Python Interface for Hurricane / Coriolis" href="ScriptsPlugins.html"/>
@ -109,7 +111,7 @@
<li class="toctree-l3"><a class="reference internal" href="Configuration.html#hacking-the-configuration-files">Hacking the Configuration Files</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="">CGT - The Graphical Interface</a><ul>
<li class="toctree-l2 current"><a class="current reference internal" href="#">CGT - The Graphical Interface</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#viewer-tools">Viewer &amp; Tools</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#stratus-netlist-capture"><span class="sc">Stratus</span> Netlist Capture</a></li>
<li class="toctree-l4"><a class="reference internal" href="#the-hurricane-data-base">The <span class="sc">Hurricane</span> Data-Base</a></li>
@ -205,15 +207,18 @@
</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 <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>
<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></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>
@ -265,7 +270,7 @@ is not yet placed.</li>
</li>
</ul>
<p>Features are detailed in <a class="reference internal" href="#viewer-tools">Viewer &amp; Tools</a>.</p>
<p><img alt="Viewer Basic Snapshot" class="align-middle" src="../_images/Viewer-1.png" style="width: 80%;" /></p>
<p><a class="reference internal" href="../_images/Viewer-1.png"><img alt="Viewer Basic Snapshot" class="align-middle" src="../_images/Viewer-1.png" style="width: 80%;" /></a></p>
<ul class="simple">
<li>The <strong>Controller</strong>, which allows:<ul>
<li>Tweak what is displayer by the <em>Viewer</em>. Through the <em>Look</em>,
@ -279,7 +284,7 @@ They are closely related to Configuration &amp; Initialisation.</li>
</ul>
</li>
</ul>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-1.png" style="width: 80%;" /> </p>
<p> <a class="reference internal" href="../_images/Controller-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-1.png" style="width: 80%;" /></a> </p>
<div class="section" id="viewer-tools">
<span id="id1"></span><h2>Viewer &amp; Tools<a class="headerlink" href="#viewer-tools" title="Permalink to this headline"></a></h2>
<div class="section" id="stratus-netlist-capture">
@ -342,7 +347,7 @@ and write Alliance designs and libraries directly.</p>
<div class="section" id="etesian-placer">
<h3>Etesian &#8211; Placer<a class="headerlink" href="#etesian-placer" title="Permalink to this headline"></a></h3>
<p>The <span class="sc">Etesian</span> placer is a state of the art (as of 2015) analytical placer. It is
within <tt class="docutils literal"><span class="pre">5%</span></tt> of other placers&#8217; solutions, but is normally a bit worse than ePlace.
within <code class="docutils literal"><span class="pre">5%</span></code> of other placers&#8217; solutions, but is normally a bit worse than ePlace.
This <span class="sc">Coriolis</span> tool is actually an encapsulation of <span class="sc">Coloquinte</span> which <em>is</em> the placer.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
@ -356,14 +361,14 @@ supply a placement for it. We need to implement uniquification in the
<p>The placement area is defined by the top cell abutment box.</p>
<p>When placing a complete hierarchy, the abutment boxes of the cells (models) other than
the top cell are sets identical to the one of the top cell and their instances are
all placed at position <tt class="docutils literal"><span class="pre">(0,0,ID)</span></tt>. That is, all the abutments boxes, whatever the
all placed at position <code class="docutils literal"><span class="pre">(0,0,ID)</span></code>. That is, all the abutments boxes, whatever the
hierarchical level, defines the same area (they are exactly superposed).</p>
<p>We choose this scheme because the placer will see all the instances as virtually
flattened, so they can be placed anywhere inside the top-cell abutment box.</p>
<p> <img alt="Etesian Abutment Box" class="align-middle" src="../_images/etesian-1.png" style="width: 80%;" /> </p>
<p> <a class="reference internal" href="../_images/etesian-1.png"><img alt="Etesian Abutment Box" class="align-middle" src="../_images/etesian-1.png" style="width: 80%;" /></a> </p>
<p> <span class="raw-html"><p class="noindent"></p></span>
<strong>Computing the Placement Area</strong></p>
<p>The placement area is computed using the <tt class="docutils literal"><span class="pre">etesian.aspectRatio</span></tt> and <tt class="docutils literal"><span class="pre">etesian.spaceMargin</span></tt>
<p>The placement area is computed using the <code class="docutils literal"><span class="pre">etesian.aspectRatio</span></code> and <code class="docutils literal"><span class="pre">etesian.spaceMargin</span></code>
parameters only if the top-cell has an empty abutment box. If the top-cell abutment
box has to be set, then it is propagated to all the instances models recursively.</p>
<p> <span class="raw-html"><p class="noindent"></p></span>
@ -395,21 +400,21 @@ may be unroutable.</p>
<tbody valign="top">
<tr class="row-even"><td colspan="3"><strong>Etesian Parameters</strong></td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">etesian.aspectRatio</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.aspectRatio</span></code></td>
<td>TypePercentage</td>
<td><span class="cb">100</span></td>
</tr>
<tr class="row-even"><td colspan="2">Define the height on width <tt class="docutils literal"><span class="pre">H/W</span></tt> aspect
<tr class="row-even"><td colspan="2">Define the height on width <code class="docutils literal"><span class="pre">H/W</span></code> aspect
ratio, can be comprised between 10 and 1000</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">etesian.spaceMargin</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.spaceMargin</span></code></td>
<td>TypePercentage</td>
<td><span class="cb">5</span></td>
</tr>
<tr class="row-even"><td colspan="2">The extra white space added to the total area
of the standard cells</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">etesian.uniformDensity</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.uniformDensity</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
@ -417,14 +422,14 @@ of the standard cells</td>
across the area or allowed to form denser
clusters</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">etesian.effort</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.effort</span></code></td>
<td>TypeInt</td>
<td><span class="cb">2</span></td>
</tr>
<tr class="row-even"><td colspan="2">Sets the balance between the speed of the
placer and the solution quality</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">etesian.routingDriven</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.routingDriven</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
@ -432,16 +437,16 @@ placer and the solution quality</td>
and whitespace allocation to improve
routability; to be implemented</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">etesian.graphics</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">etesian.graphics</span></code></td>
<td>TypeInt</td>
<td><span class="cb">2</span></td>
</tr>
<tr class="row-even"><td colspan="2"><p class="first">How often the display will be refreshed
More refreshing slows the placer.</p>
<ul class="last simple">
<li><tt class="docutils literal"><span class="pre">1</span></tt> shows both upper and lower bounds</li>
<li><tt class="docutils literal"><span class="pre">2</span></tt> only shows lower bound results</li>
<li><tt class="docutils literal"><span class="pre">3</span></tt> only shows the final results</li>
<li><code class="docutils literal"><span class="pre">1</span></code> shows both upper and lower bounds</li>
<li><code class="docutils literal"><span class="pre">2</span></code> only shows lower bound results</li>
<li><code class="docutils literal"><span class="pre">3</span></code> only shows the final results</li>
</ul>
</td>
</tr>
@ -461,8 +466,8 @@ a global routing <em>solution</em> can be saved to disk and reloaded for later u
<span class="cb">kgr</span> extention. It is in <a class="reference external" href="http://www.cerc.utexas.edu/~thyeros/boxrouter/boxrouter.htm">Box Router</a> output format.</p>
<p> <span class="raw-html"><p class="noindent"></p></span> Menus:</p>
<ul class="simple">
<li><img class="math" src="../_images/math/0183b70ce5b7bb56d8ad838429a01d2858d99612.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Save Global Routing}"/></li>
<li><img class="math" src="../_images/math/7242aab75de488b349c95eca46e25a03ea80c207.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Load Global Routing}"/></li>
<li><img class="math" src="../_images/math/ab9c214f89790a2afdc94a731f08c35d0fafa77d.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Save Global Routing}"/></li>
<li><img class="math" src="../_images/math/0b37db03668389c8e33d766f186469af280334bb.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Load Global Routing}"/></li>
</ul>
</div>
<div class="section" id="kite-detailed-router">
@ -492,15 +497,15 @@ In the event of a failure, on a saturated design, you may decrease the
<cite>edge saturation ratio</cite> (argument <cite>&#8211;edge</cite>) to balance more evenly the design
saturation. That is, the maximum saturation decrease at the price of a wider
saturated area and increased wirelength. This is the saturation of the
<em>global</em> router <span class="sc">Knik</span>, and you may increase/decrease by steps of <tt class="docutils literal"><span class="pre">5%</span></tt>,
<em>global</em> router <span class="sc">Knik</span>, and you may increase/decrease by steps of <code class="docutils literal"><span class="pre">5%</span></code>,
which represent one track. The maximum capacity of the <span class="sc">SxLib</span> gauge is
10 tracks in two layers, that makes 20 tracks by <span class="sc">Knik</span> edge.</p>
<p>Routing a design is done in four ordered steps:</p>
<ol class="arabic simple">
<li>Detailed pre-route <img class="math" src="../_images/math/6a2cfe8749bfed89e3c82527f74daaff6378d70e.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Detailed PreRoute}"/></li>
<li>Global routing <img class="math" src="../_images/math/d3499f8834024d33c997cd9730e31d3a02ebab18.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Global Route}"/></li>
<li>Detailed routing <img class="math" src="../_images/math/642cf89034341e49c1fbc546ca776e1205ae49c0.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Detailed Route}"/></li>
<li>Finalize routing <img class="math" src="../_images/math/e171f7265a6f90fdc6622dfa4a4fd08927ae5fea.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Finalize Route}"/></li>
<li>Detailed pre-route <img class="math" src="../_images/math/9354e2441491d324ef5fd162920f581bdf022af5.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Detailed PreRoute}"/></li>
<li>Global routing <img class="math" src="../_images/math/8080e7327f421afe79e142b39735819ab9631cb9.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Global Route}"/></li>
<li>Detailed routing <img class="math" src="../_images/math/44344a23b2a3007fed067629259108385790ee6a.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Detailed Route}"/></li>
<li>Finalize routing <img class="math" src="../_images/math/0d59c123dd2cd130ca29a2ba930fabbc4f547771.png" alt="\textbf{P\&amp;R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Finalize Route}"/></li>
</ol>
<p>It is possible to supply to the router a complete wiring for some nets that the user&#8217;s
wants to be routed according to a specific topology. The supplied topology must respect
@ -538,14 +543,14 @@ the <span class="cb">kite.</span> prefix.</p>
<tbody valign="top">
<tr class="row-even"><td colspan="3"><strong>Katabatic Parameters</strong></td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">katabatic.topRoutingLayer</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">katabatic.topRoutingLayer</span></code></td>
<td>TypeString</td>
<td><span class="cb">METAL5</span></td>
</tr>
<tr class="row-even"><td colspan="2">Define the highest metal layer that will be
used for routing (inclusive).</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">katabatic.globalLengthThreshold</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">katabatic.globalLengthThreshold</span></code></td>
<td>TypeInt</td>
<td><span class="cb">1450</span></td>
</tr>
@ -553,15 +558,15 @@ used for routing (inclusive).</td>
method which is no longer used (did not give
good results)</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">katabatic.saturateRatio</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">katabatic.saturateRatio</span></code></td>
<td>TypePercentage</td>
<td><span class="cb">80</span></td>
</tr>
<tr class="row-even"><td colspan="2">If <tt class="docutils literal"><span class="pre">M(x)</span></tt> density is above this ratio,
<tr class="row-even"><td colspan="2">If <code class="docutils literal"><span class="pre">M(x)</span></code> density is above this ratio,
move up feedthru global segments up from
depth <tt class="docutils literal"><span class="pre">x</span></tt> to <tt class="docutils literal"><span class="pre">x+2</span></tt></td>
depth <code class="docutils literal"><span class="pre">x</span></code> to <code class="docutils literal"><span class="pre">x+2</span></code></td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">katabatic.saturateRp</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">katabatic.saturateRp</span></code></td>
<td>TypeInt</td>
<td><span class="cb">8</span></td>
</tr>
@ -572,7 +577,7 @@ in excess</td>
</tr>
<tr class="row-odd"><td colspan="3"><strong>Knik Parameters</strong></td>
</tr>
<tr class="row-even"><td rowspan="2"><tt class="docutils literal"><span class="pre">kite.hTracksReservedLocal</span></tt></td>
<tr class="row-even"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.hTracksReservedLocal</span></code></td>
<td>TypeInt</td>
<td><span class="cb">3</span></td>
</tr>
@ -583,15 +588,15 @@ router. Horizontal and vertical locally
reserved capacity can be distinguished for
more accuracy.</td>
</tr>
<tr class="row-even"><td rowspan="2"><tt class="docutils literal"><span class="pre">kite.vTracksReservedLocal</span></tt></td>
<tr class="row-even"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.vTracksReservedLocal</span></code></td>
<td>TypeInt</td>
<td><span class="cb">3</span></td>
</tr>
<tr class="row-odd"><td colspan="2">cf. <tt class="docutils literal"><span class="pre">kite.hTracksReservedLocal</span></tt></td>
<tr class="row-odd"><td colspan="2">cf. <code class="docutils literal"><span class="pre">kite.hTracksReservedLocal</span></code></td>
</tr>
<tr class="row-even"><td colspan="3"><strong>Kite Parameters</strong></td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">kite.eventsLimit</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.eventsLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">4000002</span></td>
</tr>
@ -600,7 +605,7 @@ this is a last ditch safety against infinite
loop. It&#8217;s perhaps a little too low for big
designs</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">kite.ripupCost</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.ripupCost</span></code></td>
<td>TypeInt</td>
<td><span class="cb">3</span></td>
</tr>
@ -608,19 +613,19 @@ designs</td>
cost to avoid a loop between two ripped up
segments</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">kite.strapRipupLimit</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.strapRipupLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">16</span></td>
</tr>
<tr class="row-even"><td colspan="2">Maximum number of ripup for <em>strap</em> segments</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">kite.localRipupLimit</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.localRipupLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">9</span></td>
</tr>
<tr class="row-even"><td colspan="2">Maximum number of ripup for <em>local</em> segments</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">kite.globalRipupLimit</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.globalRipupLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">5</span></td>
</tr>
@ -628,7 +633,7 @@ segments</td>
when this limit is reached, triggers topologic
modification</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">kite.longGlobalRipupLimit</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">kite.longGlobalRipupLimit</span></code></td>
<td>TypeInt</td>
<td><span class="cb">5</span></td>
</tr>
@ -646,19 +651,19 @@ topological modification</td>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>How Cgt Locates Python Scripts:</strong>
<span class="cb">cgt</span> uses the Python <tt class="docutils literal"><span class="pre">import</span></tt> mechanism to load Python scripts.
So you must give the name of your script whitout <tt class="docutils literal"><span class="pre">.py</span></tt> extention and
it must be reachable through the <tt class="docutils literal"><span class="pre">PYTHONPATH</span></tt>. You may uses the
<span class="cb">cgt</span> uses the Python <code class="docutils literal"><span class="pre">import</span></code> mechanism to load Python scripts.
So you must give the name of your script whitout <code class="docutils literal"><span class="pre">.py</span></code> extention and
it must be reachable through the <code class="docutils literal"><span class="pre">PYTHONPATH</span></code>. You may uses the
dotted module notation.</p>
</div>
<p>A Python/Stratus script must contains a function called <tt class="docutils literal"><span class="pre">ScriptMain()</span></tt>
<p>A Python/Stratus script must contains a function called <code class="docutils literal"><span class="pre">ScriptMain()</span></code>
with one optional argument, the graphical editor into which it may be
running (will be set to <tt class="docutils literal"><span class="pre">None</span></tt> in text mode). The Python interface to
running (will be set to <code class="docutils literal"><span class="pre">None</span></code> in text mode). The Python interface to
the editor (type: <span class="cb">CellViewer</span>) is limited to basic capabilities
only.</p>
<p>Any script given on the command line will be run immediatly <em>after</em> the
initializations and <em>before</em> any other argument is processed.</p>
<p>For more explanation on Python scripts see <a class="reference internal" href="ScriptsPlugins.html#python-interface-to-coriolis"><em>Python Interface for Hurricane / Coriolis</em></a>.</p>
<p>For more explanation on Python scripts see <a class="reference internal" href="ScriptsPlugins.html#python-interface-to-coriolis"><span class="std std-ref">Python Interface for Hurricane / Coriolis</span></a>.</p>
</div>
<div class="section" id="printing-snapshots">
<h3>Printing &amp; Snapshots<a class="headerlink" href="#printing-snapshots" title="Permalink to this headline"></a></h3>
@ -666,8 +671,8 @@ initializations and <em>before</em> any other argument is processed.</p>
menu or the <span class="fboxtt">CTRL+P</span> shortcut to open the dialog box.</p>
<p>The print functionality uses exactly the same rendering mechanism as for the
screen, beeing almost <em>WYSIWYG</em>. Thus, to obtain the best results it is advisable
to select the <tt class="docutils literal"><span class="pre">Coriolis.Printer</span></tt> look (in the <em>Controller</em>), which uses a
white background and much suited for high resolutions <tt class="docutils literal"><span class="pre">32x32</span></tt> pixels patterns</p>
to select the <code class="docutils literal"><span class="pre">Coriolis.Printer</span></code> look (in the <em>Controller</em>), which uses a
white background and much suited for high resolutions <code class="docutils literal"><span class="pre">32x32</span></code> pixels patterns</p>
<p>There is also two mode of printing selectable through the <em>Controller</em>
<strong>Settings -&gt; Misc -&gt; Printer/Snapshot Mode</strong>:</p>
<table border="1" class="docutils">
@ -683,7 +688,7 @@ white background and much suited for high resolutions <tt class="docutils litera
</tr>
<tr class="row-even"><td><strong>Cell Mode</strong></td>
<td>150</td>
<td>For single <tt class="docutils literal"><span class="pre">Cell</span></tt> printing or very small designs.
<td>For single <code class="docutils literal"><span class="pre">Cell</span></code> printing or very small designs.
Patterns will be bigger and more readable.</td>
</tr>
<tr class="row-odd"><td><strong>Design Mode</strong></td>
@ -697,7 +702,7 @@ outlines).</td>
<p class="first admonition-title">Note</p>
<p class="last"><em>The pdf file size</em>
Be aware that the generated <span class="sc">pdf</span> files are indeed only pixmaps.
So they can grew very large if you select paper format above <tt class="docutils literal"><span class="pre">A2</span></tt>
So they can grew very large if you select paper format above <code class="docutils literal"><span class="pre">A2</span></code>
or similar.</p>
</div>
<p> <span class="raw-html"><p class="noindent"></p></span>
@ -842,7 +847,7 @@ in which this model is instanciated).</td>
</div>
<div class="section" id="cgt-command-line-options">
<h3>Cgt Command Line Options<a class="headerlink" href="#cgt-command-line-options" title="Permalink to this headline"></a></h3>
<p>Appart from the obvious <tt class="docutils literal"><span class="pre">--text</span></tt> options, all can be used for text and graphical mode.</p>
<p>Appart from the obvious <code class="docutils literal"><span class="pre">--text</span></code> options, all can be used for text and graphical mode.</p>
<table border="1" class="docutils">
<colgroup>
<col width="38%" />
@ -900,7 +905,7 @@ any design of <cite>100K</cite>. gates. For bigger
designs you may wants to increase this limit.</td>
</tr>
<tr class="row-even"><td><cite>&#8211;stratus-script=&lt;module&gt;</cite></td>
<td>Run the Python/Stratus script <tt class="docutils literal"><span class="pre">module</span></tt>.
<td>Run the Python/Stratus script <code class="docutils literal"><span class="pre">module</span></code>.
See <a class="reference internal" href="#python-scripts-in-cgt">Python Scripts in Cgt</a>.</td>
</tr>
</tbody>
@ -909,16 +914,19 @@ See <a class="reference internal" href="#python-scripts-in-cgt">Python Scripts i
<p>Some Examples :</p>
<ul>
<li><p class="first">Run both global and detailed router, then save the routed design :</p>
<div class="highlight-python"><pre>&gt; cgt -v -t -G -R --cell=design --save-design=design_kite</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&gt;</span> <span class="n">cgt</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span><span class="n">t</span> <span class="o">-</span><span class="n">G</span> <span class="o">-</span><span class="n">R</span> <span class="o">--</span><span class="n">cell</span><span class="o">=</span><span class="n">design</span> <span class="o">--</span><span class="n">save</span><span class="o">-</span><span class="n">design</span><span class="o">=</span><span class="n">design_kite</span>
</pre></div>
</div>
</li>
<li><p class="first">Load a previous global solution, run the detailed router, then save the
routed design :</p>
<div class="highlight-python"><pre>&gt; cgt -v -t --load-global -R --cell=design --save-design=design_kite</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&gt;</span> <span class="n">cgt</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span><span class="n">t</span> <span class="o">--</span><span class="n">load</span><span class="o">-</span><span class="k">global</span> <span class="o">-</span><span class="n">R</span> <span class="o">--</span><span class="n">cell</span><span class="o">=</span><span class="n">design</span> <span class="o">--</span><span class="n">save</span><span class="o">-</span><span class="n">design</span><span class="o">=</span><span class="n">design_kite</span>
</pre></div>
</div>
</li>
<li><p class="first">Run the global router, then save the global routing solution :</p>
<div class="highlight-python"><pre>&gt; cgt -v -t -G --save-global --cell=design</pre>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&gt;</span> <span class="n">cgt</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span><span class="n">t</span> <span class="o">-</span><span class="n">G</span> <span class="o">--</span><span class="n">save</span><span class="o">-</span><span class="k">global</span> <span class="o">--</span><span class="n">cell</span><span class="o">=</span><span class="n">design</span>
</pre></div>
</div>
</li>
</ul>
@ -940,14 +948,14 @@ routed design :</p>
<tbody valign="top">
<tr class="row-even"><td colspan="3"><strong>Verbosity/Log Parameters</strong></td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">misc.info</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.info</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
<tr class="row-even"><td colspan="2">Enable display of <em>info</em> level message
(<span class="cb">cinfo</span> stream)</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">misc.bug</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.bug</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
@ -955,21 +963,21 @@ routed design :</p>
(<span class="cb">cbug</span> stream), messages can be a little
scarry</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">misc.logMode</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.logMode</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
<tr class="row-even"><td colspan="2">If enabled, assume that the output device
is not a <tt class="docutils literal"><span class="pre">tty</span></tt> and suppress any escaped
is not a <code class="docutils literal"><span class="pre">tty</span></code> and suppress any escaped
sequences</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">misc.verboseLevel1</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.verboseLevel1</span></code></td>
<td>TypeBool</td>
<td><span class="cb">True</span></td>
</tr>
<tr class="row-even"><td colspan="2">First level of verbosity, disable level 2</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">misc.verboseLevel2</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.verboseLevel2</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
@ -977,18 +985,18 @@ sequences</td>
</tr>
<tr class="row-odd"><td colspan="3"><strong>Development/Debug Parameters</strong></td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">misc.minTraceLevel</span></tt></td>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">misc.minTraceLevel</span></code></td>
<td>TypeInt</td>
<td><span class="cb">0</span></td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">misc.maxTraceLevel</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.maxTraceLevel</span></code></td>
<td>TypeInt</td>
<td><span class="cb">0</span></td>
</tr>
<tr class="row-even"><td colspan="2">Display trace information <em>between</em> those two
levels (<span class="cb">cdebug</span> stream)</td>
</tr>
<tr class="row-odd"><td rowspan="2"><tt class="docutils literal"><span class="pre">misc.catchCore</span></tt></td>
<tr class="row-odd"><td rowspan="2"><code class="docutils literal"><span class="pre">misc.catchCore</span></code></td>
<td>TypeBool</td>
<td><span class="cb">False</span></td>
</tr>
@ -1018,9 +1026,9 @@ the current selection.</li>
<div class="section" id="the-look-tab">
<span id="id3"></span><h3>The Look Tab<a class="headerlink" href="#the-look-tab" title="Permalink to this headline"></a></h3>
<p>You can select how the layout will be displayed. There is a special one
<tt class="docutils literal"><span class="pre">Printer.Coriolis</span></tt> specifically designed for <a class="reference internal" href="#printing-snapshots">Printing &amp; Snapshots</a>.
<code class="docutils literal"><span class="pre">Printer.Coriolis</span></code> specifically designed for <a class="reference internal" href="#printing-snapshots">Printing &amp; Snapshots</a>.
You should select it prior to calling the print or snapshot dialog boxes.</p>
<p> <img alt="Controller Look, Snapshot 1" class="align-middle" src="../_images/Controller-Look-1.png" style="width: 80%;" /> </p>
<p> <a class="reference internal" href="../_images/Controller-Look-1.png"><img alt="Controller Look, Snapshot 1" class="align-middle" src="../_images/Controller-Look-1.png" style="width: 80%;" /></a> </p>
<p></p>
</div>
<div class="section" id="the-filter-tab">
@ -1044,7 +1052,7 @@ to signal the gap.</p>
<p class="last">For example, after the detailed routing no <em>rubbers</em> should remains.
They have been made <em>very</em> visibles as big violet lines...</p>
</div>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Filter-1.png" style="width: 80%;" /> </p>
<p> <a class="reference internal" href="../_images/Controller-Filter-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Filter-1.png" style="width: 80%;" /></a> </p>
<p></p>
</div>
<div class="section" id="the-layers-go-tab">
@ -1063,7 +1071,7 @@ to easily locate congested areas.</li>
<li>The normal one triggers the display.</li>
<li>The red-outlined allows objects of that layer to be selectable or not.</li>
</ul>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-LayersGos-1.png" style="width: 80%;" /> </p>
<p> <a class="reference internal" href="../_images/Controller-LayersGos-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-LayersGos-1.png" style="width: 80%;" /></a> </p>
</div>
<div class="section" id="the-netlist-tab">
<span id="id6"></span><h3>The Netlist Tab<a class="headerlink" href="#the-netlist-tab" title="Permalink to this headline"></a></h3>
@ -1073,10 +1081,10 @@ to easily locate congested areas.</li>
using the filter pattern (supports regular expressions).</p>
<p>An very useful feature is to enable the <strong>Sync Selection</strong>, which will
automatically select all the components of the selected net(s). You can
select multiple nets. In the figure the net <tt class="docutils literal"><span class="pre">auxsc35</span></tt> is selected and
select multiple nets. In the figure the net <code class="docutils literal"><span class="pre">auxsc35</span></code> is selected and
is highlited in the <em>Viewer</em>.</p>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Netlist-1.png" style="width: 80%;" />
<img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Viewer-Netlist-1.png" style="width: 80%;" /> </p>
<p> <a class="reference internal" href="../_images/Controller-Netlist-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Netlist-1.png" style="width: 80%;" /></a>
<a class="reference internal" href="../_images/Viewer-Netlist-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Viewer-Netlist-1.png" style="width: 80%;" /></a> </p>
</div>
<div class="section" id="the-selection-tab">
<span id="id7"></span><h3>The Selection Tab<a class="headerlink" href="#the-selection-tab" title="Permalink to this headline"></a></h3>
@ -1085,11 +1093,11 @@ can be filtered thanks to the filter pattern.</p>
<p>Used in conjunction with the <em>Netlist</em> <strong>Sync Selection</strong> you will all see
all the components part of <em>net</em>.</p>
<p>In this list, you can toggle individually the selection of component by
pressing the <tt class="docutils literal"><span class="pre">t</span></tt> key. When unselected in this way a component is not
pressing the <code class="docutils literal"><span class="pre">t</span></code> key. When unselected in this way a component is not
removed from the the selection list but instead displayed in red italic.
To see where a component is you may make it blink by repeatedly press
the <tt class="docutils literal"><span class="pre">t</span></tt> key...</p>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Selection-1.png" style="width: 80%;" /> </p>
the <code class="docutils literal"><span class="pre">t</span></code> key...</p>
<p> <a class="reference internal" href="../_images/Controller-Selection-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Selection-1.png" style="width: 80%;" /></a> </p>
</div>
<div class="section" id="the-inspector-tab">
<span id="id8"></span><h3>The Inspector Tab<a class="headerlink" href="#the-inspector-tab" title="Permalink to this headline"></a></h3>
@ -1111,16 +1119,16 @@ is deleted, you will crash the application...</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><em>Implementation Detail:</em> the inspector support is done with
<tt class="docutils literal"><span class="pre">Slot</span></tt>, <tt class="docutils literal"><span class="pre">Record</span></tt> and <tt class="docutils literal"><span class="pre">getString()</span></tt>.</p>
<code class="docutils literal"><span class="pre">Slot</span></code>, <code class="docutils literal"><span class="pre">Record</span></code> and <code class="docutils literal"><span class="pre">getString()</span></code>.</p>
</div>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Inspector-1.png" style="width: 80%;" />
<img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Inspector-2.png" style="width: 80%;" />
<img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Inspector-3.png" style="width: 80%;" /> </p>
<p> <a class="reference internal" href="../_images/Controller-Inspector-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Inspector-1.png" style="width: 80%;" /></a>
<a class="reference internal" href="../_images/Controller-Inspector-2.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Inspector-2.png" style="width: 80%;" /></a>
<a class="reference internal" href="../_images/Controller-Inspector-3.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Inspector-3.png" style="width: 80%;" /></a> </p>
</div>
<div class="section" id="the-settings-tab">
<span id="id9"></span><h3>The Settings Tab<a class="headerlink" href="#the-settings-tab" title="Permalink to this headline"></a></h3>
<p>Here comes the description of the <em>Settings</em> tab.</p>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Settings-1.png" style="width: 80%;" /> </p>
<p> <a class="reference internal" href="../_images/Controller-Settings-1.png"><img alt="Controller Basic Snapshot" class="align-middle" src="../_images/Controller-Settings-1.png" style="width: 80%;" /></a> </p>
</div>
</div>
</div>
@ -1146,7 +1154,7 @@ is deleted, you will crash the application...</p>
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="Credits &amp; License" href="LicenseCredits.html"/>
<link rel="prev" title="Welcome to Corioliss documentation!" href="../index.html"/>
@ -73,7 +75,7 @@
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="">Coriolis User&#8217;s Guide</a><ul>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Coriolis User&#8217;s Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="LicenseCredits.html">Credits &amp; License</a></li>
<li class="toctree-l2"><a class="reference internal" href="Releases.html">Release Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Releases.html#release-1-0-1475">Release 1.0.1475</a></li>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -314,7 +319,7 @@
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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="next" title="CRL Core Reference" href="../CrlCore/CrlCore.html"/>
<link rel="prev" title="Hurricane Reference" href="../Hurricane/Hurricane.html"/>
@ -151,7 +153,7 @@
<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 current"><a class="current reference internal" href="">Viewer Reference</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
@ -204,15 +206,18 @@
</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 <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>
<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></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>
@ -275,7 +280,7 @@ available here: <a class="reference external" href="file:../../viewer/index.html
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -103,23 +103,23 @@ First step is to install the prerequisites. Currently, only RapidJSON_.
As RapidJSON is evolving fast, if you encounter compatibility problems,
the exact version we compiled against is given below. ::
dummy@lepka:~$ mkdir -p ~/coriolis-2.x/src/support
dummy@lepka:~$ cd ~/coriolis-2.x/src/support
dummy@lepka:~$ git clone http://github.com/miloyip/rapidjson
dummy@lepka:~$ git checkout ec322005072076ef53984462fb4a1075c27c7dfd
dummy@lepka:~> mkdir -p ~/coriolis-2.x/src/support
dummy@lepka:~> cd ~/coriolis-2.x/src/support
dummy@lepka:~> git clone http://github.com/miloyip/rapidjson
dummy@lepka:~> git checkout ec322005072076ef53984462fb4a1075c27c7dfd
The second step is to create the source directory and pull the |git| repository: ::
dummy@lepka:~$ mkdir -p ~/coriolis-2.x/src
dummy@lepka:~$ cd ~/coriolis-2.x/src
dummy@lepka:~$ git clone https://www-soc.lip6.fr/git/coriolis.git
dummy@lepka:~> mkdir -p ~/coriolis-2.x/src
dummy@lepka:~> cd ~/coriolis-2.x/src
dummy@lepka:~> git clone https://www-soc.lip6.fr/git/coriolis.git
Third and final step, build & install: ::
dummy@lepka:src$ ./bootstrap/ccb.py --project=support \
dummy@lepka:src> ./bootstrap/ccb.py --project=support \
--project=coriolis \
--make="-j4 install"
dummy@lepka:src$ ./bootstrap/ccb.py --project=support \
dummy@lepka:src> ./bootstrap/ccb.py --project=support \
--project=coriolis \
--doc --make="-j1 install"
@ -129,7 +129,7 @@ stage in ``-j4`` (or whatever) then we generate the documentation in ``-j1``
Under |RHEL6| or clones, you must build using the |devtoolset2|: ::
dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \
dummy@lepka:src> ./bootstrap/ccb.py --project=coriolis \
--devtoolset-2 --make="-j4 install"
If you want to uses Qt 5 instead of Qt 4, you may add the ``--qt5`` argument.
@ -150,8 +150,8 @@ In the |Coriolis| |git| repository, two branches are present:
development team. To use it instead of the :cb:`master` one, do the following
command just after the first step: ::
dummy@lepka:~$ git checkout devel
dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \
dummy@lepka:~> git checkout devel
dummy@lepka:src> ./bootstrap/ccb.py --project=coriolis \
--make="-j4 install" --debug
Be aware that it may requires newer versions of the dependencies and may introduce
@ -160,7 +160,7 @@ In the |Coriolis| |git| repository, two branches are present:
In the (unlikely) event of a crash of |cgt|, as it is a |Python| script, the right
command to run |gdb| on it is: ::
dummy@lepka:work$ gdb python core.XXXX
dummy@lepka:work> gdb python core.XXXX
|newpage|
@ -172,9 +172,9 @@ Additionnal Requirement under |MacOS|
seems unable to work with the |Python| bundled with |MacOS|. So you have to install
both of them from |macports|: ::
dummy@macos:~$ port install boost +python27
dummy@macos:~$ port select python python27
dummy@macos:-$ export DYLD_FRAMEWORK_PATH=/opt/local/Library/Frameworks
dummy@macos:~> port install boost +python27
dummy@macos:~> port select python python27
dummy@macos:-> export DYLD_FRAMEWORK_PATH=/opt/local/Library/Frameworks
The last two lines tell |MacOS| to use the |Python| from |macports| and *not* from
the system.

View File

@ -321,7 +321,7 @@ You can generate the chip using one of the following method:
#. **Command line mode:** directly run the script: ::
dummy@lepka:AM2901$ ./doChip -V --cell=amd2901
dummy@lepka:AM2901> ./doChip -V --cell=amd2901
#. **Graphic mode:** launch |cgt|, load chip netlist ``amd2901`` (the top cell)
then run the |Python| script :cb:`doChip.py`.
@ -329,4 +329,4 @@ You can generate the chip using one of the following method:
.. note::
Between two consecutive run, be sure to erase the netlist/layout generateds: ::
dummy@lepka:AM2901$ rm *_clocked*.vst *.ap
dummy@lepka:AM2901> rm *clocked*.vst *.ap

View File

@ -150,6 +150,7 @@
.. _Knik Thesis: http://www-soc.lip6.fr/en/users/damiendupuis/PhD/
.. _RapidJSON: http://miloyip.github.io/rapidjson/
.. _Python/C API Reference Manual: https://docs.python.org/2/c-api/index.html
.. _Apache License, Version 2.0: http://www.apache.org/licences/LICENSE-2.0
.. Standard CAO/VLSI Concepts.
.. |netlist| replace:: *netlist*

View File

@ -24,6 +24,9 @@ Contents:
Unicorn/Unicorn.rst
PythonCpp/index.rst
RDS/index.rst
lefapi/lefapi.rst
defapi/defapi.rst
lefdef/lefdef.rst

View File

@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@ -52,6 +52,8 @@ div.sphinxsidebar {
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
@ -83,12 +85,9 @@ div.sphinxsidebar #searchbox input[type="text"] {
width: 170px;
}
div.sphinxsidebar #searchbox input[type="submit"] {
width: 30px;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
@ -186,6 +185,13 @@ div.genindex-jumpbox {
/* -- general body styles --------------------------------------------------- */
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
@ -196,7 +202,10 @@ h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink {
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
@ -313,6 +322,13 @@ table.docutils {
border-collapse: collapse;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
@ -343,6 +359,25 @@ table.citation td {
border-bottom: none;
}
/* -- figures --------------------------------------------------------------- */
div.figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption {
padding: 0.3em;
}
div.figure p.caption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text {
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
@ -401,14 +436,14 @@ dl.glossary dt {
margin: 0;
}
.refcount {
color: #060;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.versionmodified {
font-style: italic;
}
@ -459,6 +494,13 @@ pre {
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
}
td.linenos pre {
padding: 5px 0px;
border: 0;
@ -474,22 +516,51 @@ table.highlighttable td {
padding: 0 0.5em 0 0.5em;
}
tt.descname {
div.code-block-caption {
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
div.code-block-caption + div > div.highlight > pre {
margin-top: 0;
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
padding: 1em 1em 0;
}
div.literal-block-wrapper div.highlight {
margin: 0;
}
code.descname {
background-color: transparent;
font-weight: bold;
font-size: 1.2em;
}
tt.descclassname {
code.descclassname {
background-color: transparent;
}
tt.xref, a tt {
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}

View File

@ -4,7 +4,7 @@
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@ -32,7 +32,7 @@ if (!window.console || !console.firebug) {
*/
jQuery.urldecode = function(x) {
return decodeURIComponent(x).replace(/\+/g, ' ');
}
};
/**
* small helper function to urlencode strings
@ -61,18 +61,6 @@ jQuery.getQueryParameters = function(s) {
return result;
};
/**
* small function to check if an array contains
* a given item.
*/
jQuery.contains = function(arr, item) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == item)
return true;
}
return false;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
@ -103,6 +91,30 @@ jQuery.fn.highlightText = function(text, className) {
});
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
@ -112,6 +124,7 @@ var Documentation = {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
},
/**
@ -164,9 +177,10 @@ var Documentation = {
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
if (document.location.hash)
window.setTimeout(function() {
document.location.href += '';
}, 10);
@ -180,6 +194,9 @@ var Documentation = {
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
@ -236,6 +253,29 @@ var Documentation = {
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
$(document).keyup(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box or textarea
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
switch (event.keyCode) {
case 37: // left
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
case 39: // right
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
}
}
});
}
};
@ -244,4 +284,4 @@ _ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 B

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 B

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 358 B

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

After

Width:  |  Height:  |  Size: 173 B

View File

@ -2,41 +2,15 @@
* searchtools.js_t
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilties for the full-text search.
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurance, the
* latter for highlighting it.
*/
jQuery.makeSearchSummary = function(text, keywords, hlwords) {
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
/* Non-minified version JS is _stemmer.js if file is provided */
/**
* Porter Stemmer
*/
@ -220,6 +194,38 @@ var Stemmer = function() {
}
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: function(result) {
return result[4];
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
// query found in terms
term: 5
};
/**
* Search Module
*/
@ -239,8 +245,13 @@ var Search = {
},
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null, success: null,
dataType: "script", cache: true});
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex : function(index) {
@ -268,19 +279,20 @@ var Search = {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = '';
for (var i = 0; i < Search._pulse_status; i++)
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
};
}
pulse();
},
/**
* perform a search for something
* perform a search for something (or wait until index is loaded)
*/
performSearch : function(query) {
// create the required interface elements
@ -300,41 +312,46 @@ var Search = {
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query : function(query) {
var stopwords = ["and","then","into","it","as","are","in","if","for","no","there","their","was","is","be","to","that","but","they","not","such","with","by","a","on","these","of","will","this","near","the","or","at"];
var i;
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
// Stem the searchterms and add them to the correct list
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = query.split(/\s+/);
var tmp = query.split(/\W+/);
var objectterms = [];
for (var i = 0; i < tmp.length; i++) {
if (tmp[i] != "") {
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
tmp[i] == "") {
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
var word = stemmer.stemWord(tmp[i]).toLowerCase();
var word = stemmer.stemWord(tmp[i].toLowerCase());
var toAppend;
// select the correct list
if (word[0] == '-') {
var toAppend = excluded;
toAppend = excluded;
word = word.substr(1);
}
else {
var toAppend = searchterms;
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
// only add if not already in the list
if (!$.contains(toAppend, word))
if (!$u.contains(toAppend, word))
toAppend.push(word);
};
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:');
@ -342,89 +359,50 @@ var Search = {
// console.info('excluded: ', excluded);
// prepare search
var filenames = this._index.filenames;
var titles = this._index.titles;
var terms = this._index.terms;
var fileMap = {};
var files = null;
// different result priorities
var importantResults = [];
var objectResults = [];
var regularResults = [];
var unimportantResults = [];
var titleterms = this._index.titleterms;
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
for (var i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0,i),
objectterms.slice(i+1, objectterms.length))
var results = this.performObjectSearch(objectterms[i], others);
// Assume first word is most likely to be the object,
// other words more likely to be in description.
// Therefore put matches for earlier words first.
// (Results are eventually used in reverse order).
objectResults = results[0].concat(objectResults);
importantResults = results[1].concat(importantResults);
unimportantResults = results[2].concat(unimportantResults);
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// perform the search on the required terms
for (var i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
// no match but word was a required one
if ((files = terms[word]) == null)
break;
if (files.length == undefined) {
files = [files];
}
// create the mapping
for (var j = 0; j < files.length; j++) {
var file = files[j];
if (file in fileMap)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
// lookup as search terms in fulltext
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now check if the files don't contain excluded terms
for (var file in fileMap) {
var valid = true;
// check if all requirements are matched
if (fileMap[file].length != searchterms.length)
continue;
// ensure that none of the excluded terms is in the
// search result.
for (var i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
$.contains(terms[excluded[i]] || [], file)) {
valid = false;
break;
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
// if we have still a valid result we can add it
// to the result list
if (valid)
regularResults.push([filenames[file], titles[file], '', null]);
}
// delete unused variables in order to not waste
// memory until list is retrieved completely
delete filenames, titles, terms;
// now sort the regular results descending by title
regularResults.sort(function(a, b) {
var left = a[1].toLowerCase();
var right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
});
// combine all results
var results = unimportantResults.concat(regularResults)
.concat(objectResults).concat(importantResults);
// for debugging
//Search.lastresults = results.slice(); // a copy
//console.info('search results:', Search.lastresults);
// print the results
var resultCount = results.length;
@ -433,7 +411,7 @@ var Search = {
if (results.length) {
var item = results.pop();
var listItem = $('<li style="display:none"></li>');
if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') {
if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
@ -457,16 +435,18 @@ var Search = {
displayNextItem();
});
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' +
item[0] + '.txt', function(data) {
if (data != '') {
listItem.append($.makeSearchSummary(data, searchterms, hlterms));
Search.output.append(listItem);
}
listItem.slideDown(5, function() {
displayNextItem();
});
}, "text");
$.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
}
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
}});
} else {
// no source available, just display title
Search.output.append(listItem);
@ -489,20 +469,32 @@ var Search = {
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
var importantResults = [];
var objectResults = [];
var unimportantResults = [];
var i;
var results = [];
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
if (fullname.toLowerCase().indexOf(object) > -1) {
var score = 0;
var parts = fullname.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullname == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var match = objects[prefix][name];
var objname = objnames[match[1]][2];
var title = titles[match[0]];
@ -512,7 +504,7 @@ var Search = {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (var i = 0; i < otherterms.length; i++) {
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
@ -523,37 +515,136 @@ var Search = {
}
}
var descr = objname + _(', in ') + title;
anchor = match[3];
if (anchor == '')
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
result = [filenames[match[0]], fullname, '#'+anchor, descr];
switch (match[2]) {
case 1: objectResults.push(result); break;
case 0: importantResults.push(result); break;
case 2: unimportantResults.push(result); break;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
}
}
}
// sort results descending
objectResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
return results;
},
importantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
/**
* search for full-text terms in the index
*/
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var filenames = this._index.filenames;
var titles = this._index.titles;
unimportantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
return [importantResults, objectResults, unimportantResults]
// perform the search on the required terms
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {}
scoreMap[file][word] = o.score;
}
});
// create the mapping
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
for (file in fileMap) {
var valid = true;
// check if all requirements are matched
if (fileMap[file].length != searchterms.length)
continue;
// ensure that none of the excluded terms is in the search result
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([filenames[file], titles[file], '', null, score]);
}
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary : function(text, keywords, hlwords) {
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
}
};
$(document).ready(function() {
Search.init();

View File

@ -1,23 +1,31 @@
// Underscore.js 0.5.5
// (c) 2009 Jeremy Ashkenas, DocumentCloud Inc.
// Underscore is freely distributable under the terms of the MIT license.
// Portions of Underscore are inspired by or borrowed from Prototype.js,
// Underscore.js 1.3.1
// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
// Underscore is freely distributable under the MIT license.
// Portions of Underscore are inspired or borrowed from Prototype,
// Oliver Steele's Functional, and John Resig's Micro-Templating.
// For all details and documentation:
// http://documentcloud.github.com/underscore/
(function(){var j=this,n=j._,i=function(a){this._wrapped=a},m=typeof StopIteration!=="undefined"?StopIteration:"__break__",b=j._=function(a){return new i(a)};if(typeof exports!=="undefined")exports._=b;var k=Array.prototype.slice,o=Array.prototype.unshift,p=Object.prototype.toString,q=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;b.VERSION="0.5.5";b.each=function(a,c,d){try{if(a.forEach)a.forEach(c,d);else if(b.isArray(a)||b.isArguments(a))for(var e=0,f=a.length;e<f;e++)c.call(d,
a[e],e,a);else{var g=b.keys(a);f=g.length;for(e=0;e<f;e++)c.call(d,a[g[e]],g[e],a)}}catch(h){if(h!=m)throw h;}return a};b.map=function(a,c,d){if(a&&b.isFunction(a.map))return a.map(c,d);var e=[];b.each(a,function(f,g,h){e.push(c.call(d,f,g,h))});return e};b.reduce=function(a,c,d,e){if(a&&b.isFunction(a.reduce))return a.reduce(b.bind(d,e),c);b.each(a,function(f,g,h){c=d.call(e,c,f,g,h)});return c};b.reduceRight=function(a,c,d,e){if(a&&b.isFunction(a.reduceRight))return a.reduceRight(b.bind(d,e),c);
var f=b.clone(b.toArray(a)).reverse();b.each(f,function(g,h){c=d.call(e,c,g,h,a)});return c};b.detect=function(a,c,d){var e;b.each(a,function(f,g,h){if(c.call(d,f,g,h)){e=f;b.breakLoop()}});return e};b.select=function(a,c,d){if(a&&b.isFunction(a.filter))return a.filter(c,d);var e=[];b.each(a,function(f,g,h){c.call(d,f,g,h)&&e.push(f)});return e};b.reject=function(a,c,d){var e=[];b.each(a,function(f,g,h){!c.call(d,f,g,h)&&e.push(f)});return e};b.all=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.every))return a.every(c,
d);var e=true;b.each(a,function(f,g,h){(e=e&&c.call(d,f,g,h))||b.breakLoop()});return e};b.any=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.some))return a.some(c,d);var e=false;b.each(a,function(f,g,h){if(e=c.call(d,f,g,h))b.breakLoop()});return e};b.include=function(a,c){if(b.isArray(a))return b.indexOf(a,c)!=-1;var d=false;b.each(a,function(e){if(d=e===c)b.breakLoop()});return d};b.invoke=function(a,c){var d=b.rest(arguments,2);return b.map(a,function(e){return(c?e[c]:e).apply(e,d)})};b.pluck=
function(a,c){return b.map(a,function(d){return d[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);var e={computed:-Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g>=e.computed&&(e={value:f,computed:g})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g<e.computed&&(e={value:f,computed:g})});return e.value};b.sortBy=function(a,c,d){return b.pluck(b.map(a,
function(e,f,g){return{value:e,criteria:c.call(d,e,f,g)}}).sort(function(e,f){e=e.criteria;f=f.criteria;return e<f?-1:e>f?1:0}),"value")};b.sortedIndex=function(a,c,d){d=d||b.identity;for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?(e=g+1):(f=g)}return e};b.toArray=function(a){if(!a)return[];if(a.toArray)return a.toArray();if(b.isArray(a))return a;if(b.isArguments(a))return k.call(a);return b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=function(a,c,d){return c&&!d?k.call(a,
0,c):a[0]};b.rest=function(a,c,d){return k.call(a,b.isUndefined(c)||d?1:c)};b.last=function(a){return a[a.length-1]};b.compact=function(a){return b.select(a,function(c){return!!c})};b.flatten=function(a){return b.reduce(a,[],function(c,d){if(b.isArray(d))return c.concat(b.flatten(d));c.push(d);return c})};b.without=function(a){var c=b.rest(arguments);return b.select(a,function(d){return!b.include(c,d)})};b.uniq=function(a,c){return b.reduce(a,[],function(d,e,f){if(0==f||(c===true?b.last(d)!=e:!b.include(d,
e)))d.push(e);return d})};b.intersect=function(a){var c=b.rest(arguments);return b.select(b.uniq(a),function(d){return b.all(c,function(e){return b.indexOf(e,d)>=0})})};b.zip=function(){for(var a=b.toArray(arguments),c=b.max(b.pluck(a,"length")),d=new Array(c),e=0;e<c;e++)d[e]=b.pluck(a,String(e));return d};b.indexOf=function(a,c){if(a.indexOf)return a.indexOf(c);for(var d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,c){if(a.lastIndexOf)return a.lastIndexOf(c);for(var d=
a.length;d--;)if(a[d]===c)return d;return-1};b.range=function(a,c,d){var e=b.toArray(arguments),f=e.length<=1;a=f?0:e[0];c=f?e[0]:e[1];d=e[2]||1;e=Math.ceil((c-a)/d);if(e<=0)return[];e=new Array(e);f=a;for(var g=0;1;f+=d){if((d>0?f-c:c-f)>=0)return e;e[g++]=f}};b.bind=function(a,c){var d=b.rest(arguments,2);return function(){return a.apply(c||j,d.concat(b.toArray(arguments)))}};b.bindAll=function(a){var c=b.rest(arguments);if(c.length==0)c=b.functions(a);b.each(c,function(d){a[d]=b.bind(a[d],a)});
return a};b.delay=function(a,c){var d=b.rest(arguments,2);return setTimeout(function(){return a.apply(a,d)},c)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(b.rest(arguments)))};b.wrap=function(a,c){return function(){var d=[a].concat(b.toArray(arguments));return c.apply(c,d)}};b.compose=function(){var a=b.toArray(arguments);return function(){for(var c=b.toArray(arguments),d=a.length-1;d>=0;d--)c=[a[d].apply(this,c)];return c[0]}};b.keys=function(a){if(b.isArray(a))return b.range(0,a.length);
var c=[];for(var d in a)q.call(a,d)&&c.push(d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=function(a){return b.select(b.keys(a),function(c){return b.isFunction(a[c])}).sort()};b.extend=function(a,c){for(var d in c)a[d]=c[d];return a};b.clone=function(a){if(b.isArray(a))return a.slice(0);return b.extend({},a)};b.tap=function(a,c){c(a);return a};b.isEqual=function(a,c){if(a===c)return true;var d=typeof a;if(d!=typeof c)return false;if(a==c)return true;if(!a&&c||a&&!c)return false;
if(a.isEqual)return a.isEqual(c);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return true;if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return false;if(a.length&&a.length!==c.length)return false;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return false;for(var f in a)if(!b.isEqual(a[f],c[f]))return false;return true};b.isEmpty=function(a){return b.keys(a).length==
0};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=function(a){return!!(a&&a.concat&&a.unshift)};b.isArguments=function(a){return a&&b.isNumber(a.length)&&!b.isArray(a)&&!r.call(a,"length")};b.isFunction=function(a){return!!(a&&a.constructor&&a.call&&a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return p.call(a)==="[object Number]"};b.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)};b.isRegExp=function(a){return!!(a&&
a.test&&a.exec&&(a.ignoreCase||a.ignoreCase===false))};b.isNaN=function(a){return b.isNumber(a)&&isNaN(a)};b.isNull=function(a){return a===null};b.isUndefined=function(a){return typeof a=="undefined"};b.noConflict=function(){j._=n;return this};b.identity=function(a){return a};b.breakLoop=function(){throw m;};var s=0;b.uniqueId=function(a){var c=s++;return a?a+c:c};b.template=function(a,c){a=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g,
" ").replace(/'(?=[^%]*%>)/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g,"',$1,'").split("<%").join("');").split("%>").join("p.push('")+"');}return p.join('');");return c?a(c):a};b.forEach=b.each;b.foldl=b.inject=b.reduce;b.foldr=b.reduceRight;b.filter=b.select;b.every=b.all;b.some=b.any;b.head=b.first;b.tail=b.rest;b.methods=b.functions;var l=function(a,c){return c?b(a).chain():a};b.each(b.functions(b),function(a){var c=b[a];i.prototype[a]=function(){var d=b.toArray(arguments);
o.call(d,this._wrapped);return l(c.apply(b,d),this._chain)}});b.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){c.apply(this._wrapped,arguments);return l(this._wrapped,this._chain)}});b.each(["concat","join","slice"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){return l(c.apply(this._wrapped,arguments),this._chain)}});i.prototype.chain=function(){this._chain=true;return this};i.prototype.value=function(){return this._wrapped}})();
// http://documentcloud.github.com/underscore
(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,
h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each=
b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==
null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=
function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=
e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});
return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,
c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=
b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);
return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,
d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};
b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,
1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};
b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};
b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),
function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+
u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=
function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=
true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 B

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 B

After

Width:  |  Height:  |  Size: 345 B

View File

@ -2,9 +2,9 @@
* websupport.js
* ~~~~~~~~~~~~~
*
* sphinx.websupport utilties for all documentation.
* sphinx.websupport utilities for all documentation.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@ -50,51 +50,51 @@
}
function initEvents() {
$('a.comment-close').live("click", function(event) {
$(document).on("click", 'a.comment-close', function(event) {
event.preventDefault();
hide($(this).attr('id').substring(2));
});
$('a.vote').live("click", function(event) {
$(document).on("click", 'a.vote', function(event) {
event.preventDefault();
handleVote($(this));
});
$('a.reply').live("click", function(event) {
$(document).on("click", 'a.reply', function(event) {
event.preventDefault();
openReply($(this).attr('id').substring(2));
});
$('a.close-reply').live("click", function(event) {
$(document).on("click", 'a.close-reply', function(event) {
event.preventDefault();
closeReply($(this).attr('id').substring(2));
});
$('a.sort-option').live("click", function(event) {
$(document).on("click", 'a.sort-option', function(event) {
event.preventDefault();
handleReSort($(this));
});
$('a.show-proposal').live("click", function(event) {
$(document).on("click", 'a.show-proposal', function(event) {
event.preventDefault();
showProposal($(this).attr('id').substring(2));
});
$('a.hide-proposal').live("click", function(event) {
$(document).on("click", 'a.hide-proposal', function(event) {
event.preventDefault();
hideProposal($(this).attr('id').substring(2));
});
$('a.show-propose-change').live("click", function(event) {
$(document).on("click", 'a.show-propose-change', function(event) {
event.preventDefault();
showProposeChange($(this).attr('id').substring(2));
});
$('a.hide-propose-change').live("click", function(event) {
$(document).on("click", 'a.hide-propose-change', function(event) {
event.preventDefault();
hideProposeChange($(this).attr('id').substring(2));
});
$('a.accept-comment').live("click", function(event) {
$(document).on("click", 'a.accept-comment', function(event) {
event.preventDefault();
acceptComment($(this).attr('id').substring(2));
});
$('a.delete-comment').live("click", function(event) {
$(document).on("click", 'a.delete-comment', function(event) {
event.preventDefault();
deleteComment($(this).attr('id').substring(2));
});
$('a.comment-markup').live("click", function(event) {
$(document).on("click", 'a.comment-markup', function(event) {
event.preventDefault();
toggleCommentMarkupBox($(this).attr('id').substring(2));
});
@ -700,8 +700,8 @@
(<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
<div class="comment-markup-box" id="mb<%id%>">\
reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
<tt>``code``</tt>, \
code blocks: <tt>::</tt> and an indented block after blank line</div>\
<code>``code``</code>, \
code blocks: <code>::</code> and an indented block after blank line</div>\
<form method="post" id="cf<%id%>" class="comment-form" action="">\
<textarea name="comment" cols="80"></textarea>\
<p class="propose-button">\

View File

@ -1,6 +1,5 @@
<!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]-->
@ -31,6 +30,9 @@
<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"/>
@ -202,15 +204,18 @@
</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 <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>
<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></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>
@ -259,7 +264,7 @@
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>

View File

@ -1,8 +1,6 @@
<!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]-->
@ -33,6 +31,9 @@
<link rel="index" title="Index"
href="#"/>
<link rel="search" title="Search" href="search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="index.html"/>
@ -204,15 +205,18 @@
</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 <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>
<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></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>
@ -267,7 +271,7 @@
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>
@ -297,7 +301,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'',
URL_ROOT:'./',
VERSION:'2',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',

View File

@ -31,6 +31,9 @@
<link rel="index" title="Index"
href="genindex.html"/>
<link rel="search" title="Search" href="search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="#"/>
@ -202,15 +205,18 @@
</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 <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>
<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></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>
@ -249,7 +255,7 @@
<h1>Coriolis 2 documentation</h1>
<p>
Documentation generated on Jul 17, 2017.
Documentation generated on Oct 30, 2017.
</p>
<p><strong>Documentation Topics</strong></p>
@ -311,6 +317,21 @@
<span class="linkdescr">Lists all sections and subsections</span></p>
</td></tr>
</table>
<p><strong>Third Party Documentations</strong></p>
<table class="contentstable" align="center"><tr>
<td width="50%">
<p class="biglink"><a class="biglink" href="lefdef/lefdef.html">LEF/DEF Language Reference</a><br/>
<span class="linkdescr">Cadence LEF/DEF 5.8 language reference</span></p>
</td><td width="50%">
<p class="biglink"><a class="biglink" href="lefapi/lefapi.html">LEF C++ API</a><br/>
<span class="linkdescr">Cadence Documentation of LEF 5.8 C++ API</span></p>
</td></tr>
<tr><td width="50%">
</td><td width="50%">
<p class="biglink"><a class="biglink" href="defapi/defapi.html">DEF C++ API</a><br/>
<span class="linkdescr">Cadence Documentation of DEF 5.8 C++ API</span></p>
</td></tr>
</table>
</div>
@ -324,7 +345,7 @@
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>
@ -354,7 +375,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'',
URL_ROOT:'./',
VERSION:'2',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',

View File

@ -30,6 +30,9 @@
<link rel="index" title="Index"
href="genindex.html"/>
<link rel="search" title="Search" href="#"/>
<link rel="top" title="Coriolis 2 documentation" href="index.html"/>
@ -201,15 +204,18 @@
</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 <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>
<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></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>
@ -268,7 +274,7 @@
<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.
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 30, 2017.
</small></td>
<td class="RFooter"></td>
</tr>
@ -298,7 +304,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'',
URL_ROOT:'./',
VERSION:'2',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',

File diff suppressed because one or more lines are too long

View File

@ -59,4 +59,19 @@
<span class="linkdescr">Lists all sections and subsections</span></p>
</td></tr>
</table>
<p><strong>Third Party Documentations</strong></p>
<table class="contentstable" align="center"><tr>
<td width="50%">
<p class="biglink"><a class="biglink" href="{{ pathto("lefdef/lefdef") }}">LEF/DEF Language Reference</a><br/>
<span class="linkdescr">Cadence LEF/DEF 5.8 language reference</span></p>
</td><td width="50%">
<p class="biglink"><a class="biglink" href="{{ pathto("lefapi/lefapi") }}">LEF C++ API</a><br/>
<span class="linkdescr">Cadence Documentation of LEF 5.8 C++ API</span></p>
</td></tr>
<tr><td width="50%">
</td><td width="50%">
<p class="biglink"><a class="biglink" href="{{ pathto("defapi/defapi") }}">DEF C++ API</a><br/>
<span class="linkdescr">Cadence Documentation of DEF 5.8 C++ API</span></p>
</td></tr>
</table>
{% endblock %}

View File

@ -25,7 +25,7 @@ import sys, os
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.pngmath']
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.imgmath']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

View File

@ -0,0 +1,12 @@
.. -*- Mode: rst -*-
.. include:: ../etc/definitions.rst
===================
DEF API Reference
===================
The DEF API reference is copyrighted by |Cadence| (http://www.cadence.com)
under the `Apache License, Version 2.0`_ and is available here:
`DEF API <file:../../lefdef/defapi/ch1Intro.html>`_

Some files were not shown because too many files have changed in this diff Show More