From d825a76252661e48f7c3d6da3a5e1f54b23d4a8c Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Fri, 6 Mar 2015 08:58:10 +0100 Subject: [PATCH] Updated documentation, introduce Etesian & plugins. --- documentation/UsersGuide/HTML_defs.rst | 23 +- documentation/UsersGuide/LaTeX_defs.rst | 23 +- documentation/UsersGuide/SoC.css | 46 +- documentation/UsersGuide/UsersGuide.rst | 462 +++++++++++++-- .../images/Coriolis-Soft-Schema.eps | 280 ++++----- .../images/Coriolis-Soft-Schema.fig | 12 +- .../images/Coriolis-Soft-Schema.pdf | Bin 7798 -> 7797 bytes .../images/Coriolis-Soft-Schema.png | Bin 11593 -> 12016 bytes .../UsersGuide/images/chip-structure-1.eps | 544 ++++++++++++++++++ .../UsersGuide/images/chip-structure-1.fig | 280 +++++++++ .../UsersGuide/images/chip-structure-1.png | Bin 0 -> 9949 bytes documentation/UsersGuide/images/etesian-1.eps | 437 ++++++++++++++ documentation/UsersGuide/images/etesian-1.fig | 148 +++++ documentation/UsersGuide/images/etesian-1.png | Bin 0 -> 7960 bytes documentation/UsersGuide/socstyle.tex | 2 +- .../examples/AM2901/.coriolis2/kite.py | 4 + .../examples/AM2901/.coriolis2/settings.py | 31 + .../examples/AM2901/.coriolis2/techno.py | 2 + documentation/examples/AM2901/CMakeLists.txt | 8 +- documentation/examples/AM2901/amd2901_chip.py | 12 + documentation/examples/AM2901/design.py | 246 -------- documentation/examples/AM2901/doChip.py | 136 +++++ 22 files changed, 2196 insertions(+), 500 deletions(-) create mode 100644 documentation/UsersGuide/images/chip-structure-1.eps create mode 100644 documentation/UsersGuide/images/chip-structure-1.fig create mode 100644 documentation/UsersGuide/images/chip-structure-1.png create mode 100644 documentation/UsersGuide/images/etesian-1.eps create mode 100644 documentation/UsersGuide/images/etesian-1.fig create mode 100644 documentation/UsersGuide/images/etesian-1.png create mode 100644 documentation/examples/AM2901/.coriolis2/kite.py create mode 100644 documentation/examples/AM2901/.coriolis2/settings.py create mode 100644 documentation/examples/AM2901/.coriolis2/techno.py create mode 100644 documentation/examples/AM2901/amd2901_chip.py delete mode 100755 documentation/examples/AM2901/design.py create mode 100755 documentation/examples/AM2901/doChip.py diff --git a/documentation/UsersGuide/HTML_defs.rst b/documentation/UsersGuide/HTML_defs.rst index 68620e15..2d04ed45 100644 --- a/documentation/UsersGuide/HTML_defs.rst +++ b/documentation/UsersGuide/HTML_defs.rst @@ -10,26 +10,6 @@ .. _Here: file:///usr/share/doc/coriolis2/en/latex/users-guide/UsersGuide.pdf .. For HTML backend -.. |Key_ESC| image:: ./images/key_ESC.png -.. |Key_CTRL| image:: ./images/key_CTRL.png -.. |Key_Up| image:: ./images/key_UP.png -.. |Key_Down| image:: ./images/key_DOWN.png -.. |Key_Left| image:: ./images/key_LEFT.png -.. |Key_Right| image:: ./images/key_RIGHT.png -.. |Key_f| image:: ./images/key_F.png -.. |Key_G| image:: ./images/key_Gcap.png -.. |Key_i| image:: ./images/key_Icap.png -.. |Key_l| image:: ./images/key_Lcap.png -.. |Key_m| image:: ./images/key_M.png -.. |Key_k| image:: ./images/key_K.png -.. |Key_K| image:: ./images/key_Kcap.png -.. |Key_o| image:: ./images/key_Ocap.png -.. |Key_p| image:: ./images/key_Pcap.png -.. |Key_q| image:: ./images/key_Qcap.png -.. |Key_w| image:: ./images/key_Wcap.png -.. |Key_S| image:: ./images/key_Scap.png -.. |Key_z| image:: ./images/key_Z.png -.. |Plus| replace:: :raw-html:`+` .. |rightarrow| replace:: :raw-html:`

` .. |menu_P&R| replace:: :raw-html:`

` .. |menu_StepByStep| replace:: :raw-html:`

` @@ -54,6 +34,8 @@ .. |ControllerInspector_3| replace:: :raw-html:`
Controller Basic Snapshot
` .. |ControllerSettings_1| replace:: :raw-html:`
Controller Basic Snapshot
` .. |CoriolisSoftSchema| replace:: :raw-html:`
Coriolis Software Schematic
` +.. |ChipStructure-1| replace:: :raw-html:`
Chip Top Structure
` +.. |Etesian-1| replace:: :raw-html:`
Etesian Abutment Box
` .. |BigMouse| image:: ./images/ComputerMouse.png :scale: 25% @@ -63,4 +45,5 @@ .. |noindent| replace:: :raw-html:`

` .. |medskip| replace:: :raw-html:`
` .. |newpage| replace:: :raw-html:`
` +.. |br| replace:: :raw-html:`
` diff --git a/documentation/UsersGuide/LaTeX_defs.rst b/documentation/UsersGuide/LaTeX_defs.rst index c424b96c..8d48f8e1 100644 --- a/documentation/UsersGuide/LaTeX_defs.rst +++ b/documentation/UsersGuide/LaTeX_defs.rst @@ -11,26 +11,6 @@ .. |DONE| replace:: :raw-latex:`\marginpar{\fbox{\small\ding{56}}}` .. For LaTeX/PDF backend. -.. |Key_ESC| replace:: :raw-latex:`\key{ESC}\xspace` -.. |Key_CTRL| replace:: :raw-latex:`\key{CTRL}\xspace` -.. |Key_Up| replace:: :raw-latex:`\key{Up}\xspace` -.. |Key_Down| replace:: :raw-latex:`\key{Down}\xspace` -.. |Key_Left| replace:: :raw-latex:`\key{Left}\xspace` -.. |Key_Right| replace:: :raw-latex:`\key{Right}\xspace` -.. |Key_f| replace:: :raw-latex:`\key{f}\xspace` -.. |Key_G| replace:: :raw-latex:`\key{G}\xspace` -.. |Key_i| replace:: :raw-latex:`\key{i}\xspace` -.. |Key_l| replace:: :raw-latex:`\key{l}\xspace` -.. |Key_m| replace:: :raw-latex:`\key{m}\xspace` -.. |Key_k| replace:: :raw-latex:`\key{k}\xspace` -.. |Key_K| replace:: :raw-latex:`\key{K}\xspace` -.. |Key_o| replace:: :raw-latex:`\key{o}\xspace` -.. |Key_p| replace:: :raw-latex:`\key{p}\xspace` -.. |Key_q| replace:: :raw-latex:`\key{q}\xspace` -.. |Key_w| replace:: :raw-latex:`\key{w}\xspace` -.. |Key_S| replace:: :raw-latex:`\key{S}\xspace` -.. |Key_z| replace:: :raw-latex:`\key{z}\xspace` -.. |Plus| replace:: :raw-latex:`$+$\xspace` .. |rightarrow| replace:: :raw-latex:`$\rightarrow$` .. |menu_P&R| replace:: :raw-latex:`\fbox{\textsf{\textbf{{P\&R}}}}` .. |menu_StepByStep| replace:: :raw-latex:`\fbox{\textsf{\textbf{{\underline{S}tep by Step}}}}` @@ -55,6 +35,8 @@ .. |ControllerInspector_3| replace:: :raw-latex:`\begin{center}\includegraphics[width=.7\textwidth]{./images/Controller-Inspector-3.eps}\end{center}` .. |ControllerSettings_1| replace:: :raw-latex:`\begin{center}\includegraphics[width=.7\textwidth]{./images/Controller-Settings-1.eps}\end{center}` .. |CoriolisSoftSchema| replace:: :raw-latex:`\begin{center}\includegraphics[width=.7\textwidth]{./images/Coriolis-Soft-Schema.eps}\end{center}` +.. |ChipStructure-1| replace:: :raw-latex:`\begin{center}\includegraphics[width=.95\textwidth]{./images/chip-structure-1.eps}\end{center}` +.. |Etesian-1| replace:: :raw-latex:`\begin{center}\includegraphics[width=.95\textwidth]{./images/etesian-1.eps}\end{center}` .. |BigMouse| image:: ./images/ComputerMouse.eps :scale: 25% @@ -64,4 +46,5 @@ .. |noindent| replace:: :raw-latex:`\noindent` .. |medskip| replace:: :raw-latex:`\medskip` .. |newpage| replace:: :raw-latex:`\newpage` +.. |br| replace:: :raw-latex:`\\` diff --git a/documentation/UsersGuide/SoC.css b/documentation/UsersGuide/SoC.css index 8bc16800..4bca9453 100644 --- a/documentation/UsersGuide/SoC.css +++ b/documentation/UsersGuide/SoC.css @@ -1,10 +1,7 @@ html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { font-size: 96%; - /* - font-family: verdana, sans-serif; - */ - font-family: "Open Sans", sans-serif; + font-family: "Open Sans", verdana, sans-serif; } body { @@ -18,9 +15,13 @@ body { background-attachment: fixed; background-repeat: no-repeat; margin: 0 0 0 0; - padding: 0 0 0 0; + padding: 20pt; + width: 550pt; margin-right: 10%; margin-left: 30%; + -moz-box-shadow: 4px 4px 5px 3px #ccc; + -webkit-box-shadow: 4px 4px 5px 3px #ccc; + box-shadow: 4px 4px 5px 3px #ccc; } body.gsummary { @@ -28,22 +29,27 @@ body.gsummary { margin-left: 10%; } -h1, h2, h3, h4, h5, h6 { - font-family: "Open Sans", sans-serif; -} +h1, h2, h3, h4, h5, h6 { font-family: "Open Sans", verdana, sans-serif; } +h1 { text-align: center; + border-top: 2px solid #09550b; + border-bottom: 2px solid #09550b; + padding-top: 7pt; + padding-bottom: 7pt; + } +h2, h3, h4, h5, h6 { text-align: left; } +h1, h2, h3 { font-family: "Open Sans"; + } +h1 { font-weight: normal; font-size: 170%; padding-top: 7pt; margin-top: 25pt; } +h2 { font-weight: normal; font-size: 140%; padding-top: 7pt; margin-top: 25pt; } +h3 { font-weight: bold; font-size: 118%; padding-top: 7pt; margin-top: 25pt; } +h4 { font-weight: bold; font-size: 100%; } +h5 { font-style: italic; font-size: 100%; } +h6 { font-variant: small-caps; font-size: 100%; } + +body.gsummary h1 { text-align: center; font-size: 220%; } + +h1 a:link { border-bottom: 0px; } -h1 { text-align: left; } -h2, h3, h4, h5, h6 { text-align: left; } -h1, h2, h3 { font-family: "Serif"; - } -h1 { font-weight: normal; font-size: 170%; padding-top: 7pt; margin-top: 25pt; } -h2 { font-weight: normal; font-size: 140%; padding-top: 7pt; margin-top: 25pt; } -h3 { font-weight: bold; font-size: 118%; padding-top: 7pt; margin-top: 25pt; } -h4 { font-weight: bold; font-size: 100%; } -h5 { font-style: italic; font-size: 100%; } -h6 { font-variant: small-caps; font-size: 100%; } - -body.gsummary h1 { text-align: center; font-size: 220%; } hr { color: #09550b; diff --git a/documentation/UsersGuide/UsersGuide.rst b/documentation/UsersGuide/UsersGuide.rst index 73c33e2b..47336834 100644 --- a/documentation/UsersGuide/UsersGuide.rst +++ b/documentation/UsersGuide/UsersGuide.rst @@ -27,6 +27,8 @@ .. |FC13| replace:: :sc:`fc13` .. |Debian| replace:: :sc:`Debian` .. |Ubuntu| replace:: :sc:`Ubuntu` +.. |LEMON| replace:: :sc:`lemon` +.. |Coin-Or| replace:: :sc:`coin-or` .. |Alexandre| replace:: :sc:`Alexandre` .. |Belloeil| replace:: :sc:`Belloeil` @@ -89,13 +91,43 @@ .. |rpm| replace:: :cb:`rpm` .. |gdb| replace:: :cb:`gdb` +.. |KeyUp| replace:: :fboxtt:`Up` +.. |KeyDown| replace:: :fboxtt:`Down` +.. |KeyLeft| replace:: :fboxtt:`Left` +.. |KeyRight| replace:: :fboxtt:`Right` +.. |KeyF| replace:: :fboxtt:`f` +.. |KeyL| replace:: :fboxtt:`l` +.. |KeyG| replace:: :fboxtt:`g` +.. |KeyZ| replace:: :fboxtt:`z` +.. |KeyM| replace:: :fboxtt:`m` +.. |KeyI| replace:: :fboxtt:`i` +.. |KeyK| replace:: :fboxtt:`k` +.. |KeyP| replace:: :fboxtt:`p` +.. |KeyO| replace:: :fboxtt:`o` +.. |KeyW| replace:: :fboxtt:`w` +.. |KeyQ| replace:: :fboxtt:`q` +.. |KeyCapK| replace:: :fboxtt:`K` +.. |KeyCapS| replace:: :fboxtt:`S` +.. |Plus| replace:: :fboxtt:`+` +.. |KeyESC| replace:: :fboxtt:`ESC` +.. |CTRL| replace:: :fboxtt:`CTRL` .. |CTRL_L| replace:: :fboxtt:`CTRL+L` +.. |CTRL_I| replace:: :fboxtt:`CTRL+I` +.. |CTRL_P| replace:: :fboxtt:`CTRL+P` +.. |CTRL_O| replace:: :fboxtt:`CTRL+O` +.. |CTRL_W| replace:: :fboxtt:`CTRL+W` +.. |CTRL_Q| replace:: :fboxtt:`CTRL+Q` +.. |CTRL_Down| replace:: :fboxtt:`CTRL+Down` +.. |CTRL_Up| replace:: :fboxtt:`CTRL+Up` +.. |CTRL_Left| replace:: :fboxtt:`CTRL+Left` +.. |CTRL_Right| replace:: :fboxtt:`CTRL+Right` .. URLs -.. _FGR: http://vlsicad.eecs.umich.edu/BK/FGR/ -.. _Box Router: http://www.cerc.utexas.edu/~thyeros/boxrouter/boxrouter.htm -.. _hMETIS: http://glaros.dtc.umn.edu/gkhome/views/metis -.. _Knik Thesis: http://www-soc.lip6.fr/en/users/damiendupuis/PhD/ +.. _FGR: http://vlsicad.eecs.umich.edu/BK/FGR/ +.. _Box Router: http://www.cerc.utexas.edu/~thyeros/boxrouter/boxrouter.htm +.. _hMETIS: http://glaros.dtc.umn.edu/gkhome/views/metis +.. _Knik Thesis: http://www-soc.lip6.fr/en/users/damiendupuis/PhD/ +.. _Coin Or Home: http://www.coin-or.org/index.html .. _coriolis2-1.0.2049-1.slsoc6.i686.rpm: http://asim.lip6.fr/pub/coriolis/2.0/coriolis2-1.0.2049-1.slsoc6.i686.rpm .. _coriolis2-1.0.2049-1.slsoc6.x86_64.rpm: http://asim.lip6.fr/pub/coriolis/2.0/coriolis2-1.0.2049-1.slsoc6.x86_64.rpm @@ -274,8 +306,8 @@ Release `2049` is Alpha. #. The |cgt| main has been rewritten in Python. -Release **v2.0.1** -~~~~~~~~~~~~~~~~~~ +Release v2.0.1 +~~~~~~~~~~~~~~ #. Migrated the repository from |svn| to |git|, and release complete sources. As a consequence, we drop the distribution packaging support and give @@ -284,7 +316,7 @@ Release **v2.0.1** achieve a speedup factor greater than 20... -Release **v3.0** +**Release v2.1** ~~~~~~~~~~~~~~~~ #. Replace the old simulated annealing placer |Mauka| by an analytic placer @@ -325,6 +357,17 @@ Main building prerequisites: * latex * latex2html. * python-docutils (for reStructuredText). +* |Coloquinte| (https://github.com/Coloquinte/Coloquinte.git). + +|Coloquinte| requires the |LEMON| component from |Coin-Or| (`Coin Or Home`_). +A repository of |Coin-Or| packages backported from |Fedora| 21 is available here: + +* |SL6|: `ftp://pub/linux/distributions/slsoc/slsoc/soc/addons/i386/RPMS `_ +* |SL7|: `ftp://pub/linux/distributions/slsoc/soc/7/addons/x86_64/RPMS `_ + +For other distributions, refer to their own packaging system. + +|newpage| Fixed Directory Tree @@ -378,6 +421,8 @@ automatically created either by |ccb| or the build system. ``Static`` do not work because I don't know yet to mix statically linked binaries and Python modules (which must be dynamic). +|newpage| + Building Coriolis ~~~~~~~~~~~~~~~~~ @@ -394,9 +439,11 @@ The first step is to create the source directory and pull the |git| repository: Second and final step, build & install: :: - dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds --project=coriolis \ + dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds \ + --project=coriolis \ --make="-j4 install" - dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis --doc --make="-j1 install" + dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \ + --doc --make="-j1 install" We need two steps because the documentation do not support to be generated with a parallel build. So we compile & install in a first step in ``-j4`` (or whatever) @@ -404,7 +451,8 @@ then we generate the documentation in ``-j1`` Under |RHEL6| or clones, you must build using the |devtoolset2|: :: - dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds --project=coriolis \ + dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds \ + --project=coriolis \ --devtoolset-2 --make="-j4 install" If you want to uses Qt 5 instead of Qt 4, you may add the ``--qt5`` argument. @@ -426,7 +474,8 @@ In the |Coriolis| |git| repository, two branches are present: command just after the first step: :: dummy@lepka:~$ git checkout devel - dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds --project=coriolis \ + dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds \ + --project=coriolis \ --make="-j4 install" --debug Be aware that it may requires newer versions of the dependencies and may introduce @@ -437,6 +486,8 @@ In the |Coriolis| |git| repository, two branches are present: dummy@lepka:work$ gdb python core.XXXX +|newpage| + Additionnal Requirement under |MacOS| ------------------------------------- @@ -615,6 +666,8 @@ simple assembly of tuples. The helpers are installed under the directory: :: Where :cb:`/` is the root of the installation. +|newpage| + .. _Alliance Helper: @@ -909,14 +962,40 @@ Etesian -- Placer ~~~~~~~~~~~~~~~~~ The |Etesian| placer is a state of the art (as of 2015) analytical placer. This |Coriolis| -tool is really an encapsulation of |Coloquinte| which *is* the placer. |Coloquinte| -is provided a separate library, see the building instructions. +tool is actually an encapsulation of |Coloquinte| which *is* the placer. |Coloquinte| +is provided as a separate library, see the building instructions. -.. note:: *Instance Duplication Problem:* a same logical instance cannot have +.. note:: *Instance Uniquification Unsupported:* a same logical instance cannot have two different placements. So, either you manually make a clone of it or you - supply a placement for it. This is currently a drawback of our *folded hierarchy* - approach. + supply a placement for it. We need to implement uniquification in the + |Hurricane| database. + +|noindent| +**Hierarchical Placement** + +The placement area is defined by the top cell abutment box. + +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 ``(0,0,ID)``. That is, all the abutments boxes, whatever the +hierarchical level, defines the same area (they are exactly superposed). + +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. + +|Etesian-1| + + +|noindent| +**Computing the Placement Area** + +The placement area is computed using the ``etesian.aspectRatio`` and ``etesian.spaceMargin`` +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. + + +|noindent| **Reseting the Placement** Once a placement has been done, the placer cannot reset it (will be implemented @@ -924,6 +1003,48 @@ later). To perform a new placement, you must restart |cgt|. In addition, if you have saved the placement on disk, you must erase any :cb:`.ap` file, which are automatically reloaded along with the netlist (:cb:`.vst`). +|newpage| + + +Etesian Configuration Parameters +-------------------------------- + ++-----------------------------------+------------------+----------------------------+ +| Parameter Identifier | Type | Default | ++===================================+==================+============================+ +| **Etesian Parameters** | ++-----------------------------------+------------------+----------------------------+ +|``etesian.aspectRatio`` | TypePercentage | :cb:`100` | +| +------------------+----------------------------+ +| | Define the height on width ``H/W`` aspect | +| | ratio, can be comprised between 10 and 1000 | ++-----------------------------------+------------------+----------------------------+ +|``etesian.spaceMargin`` | TypePercentage | :cb:`5` | +| +------------------+----------------------------+ +| | The extra white space added to the total area | +| | of the standard cells | ++-----------------------------------+------------------+----------------------------+ +|``etesian.uniformDensity`` | TypeBool | :cb:`False` | +| +------------------+----------------------------+ +| | Whether the cells will be spread envenly | +| | across the area or allowed to form denser | +| | clusters | ++-----------------------------------+------------------+----------------------------+ +|``etesian.effort`` | TypeInt | :cb:`2` | +| +------------------+----------------------------+ +| | Sets the balance between the speed of the | +| | placer and the solution quality | ++-----------------------------------+------------------+----------------------------+ +|``etesian.graphics`` | TypeInt | :cb:`2` | +| +------------------+----------------------------+ +| | How often the display will be refreshed, more | +| | refreshing slows the placer. | +| | | +| | * ``1`` show both upper and lower bounds | +| | * ``2`` show only lower bound | +| | * ``3`` Don't show anything | ++-----------------------------------+-----------------------------------------------+ + Knik -- Global Router ~~~~~~~~~~~~~~~~~~~~~ @@ -976,8 +1097,6 @@ saturated area and increased wirelength. This is the saturation of the which represent one track. The maximum capacity of the |SxLib| gauge is 10 tracks in two layers, that makes 20 tracks by |Knik| edge. -|newpage| - Routing a design is done in four ordered steps: #. Detailed pre-route |menu_P&R| |rightarrow| |menu_StepByStep| |rightarrow| |menu_KiteDetailedPreRoute|. @@ -1125,7 +1244,7 @@ Printing & Snapshots ~~~~~~~~~~~~~~~~~~~~ Printing or saving into a |pdf| is fairly simple, just uses the **File -> Print** -menu or the |Key_CTRL| |Plus| |Key_p| shortcut to open the dialog box. +menu or the |CTRL_P| shortcut to open the dialog box. The print functionality uses exactly the same rendering mechanism as for the screen, beeing almost *WYSIWYG*. Thus, to obtain the best results it is advisable @@ -1162,22 +1281,21 @@ The main application binary is |cgt|. +---------------+-------------------+-----------------------------------------------------------+ | Category | Keys | Action | +===============+===================+===========================================================+ -| **Moves** | | |Key_Up|, | Shift the view in the according direction | -| | |Key_Down| | | -| | | |Key_Left|, | | -| | |Key_Right| | | +| **Moves** | | |KeyUp|, | Shift the view in the according direction | +| | |KeyDown| | | +| | | |KeyLeft|, | | +| | |KeyRight| | | +---------------+-------------------+-----------------------------------------------------------+ -| **Fit** | |Key_f| | Fit to the Cell abutment box | +| **Fit** | |KeyF| | Fit to the Cell abutment box | +---------------+-------------------+-----------------------------------------------------------+ -| **Refresh** | |Key_CTRL| | Triggers a complete display redraw | -| | |Plus| |Key_l| | | +| **Refresh** | |CTRL_L| | Triggers a complete display redraw | +---------------+-------------------+-----------------------------------------------------------+ -| **Goto** | |Key_g| | *apperture* is the minimum side of the area | +| **Goto** | |KeyG| | *apperture* is the minimum side of the area | | | | displayed around the point to go to. It's an | | | | alternative way of setting the zoom level | +---------------+-------------------+-----------------------------------------------------------+ -| **Zoom** | |Key_z|, | Respectively zoom by a 2 factor and *unzoom* | -| | |Key_m| | by a 2 factor | +| **Zoom** | |KeyZ|, | Respectively zoom by a 2 factor and *unzoom* | +| | |KeyM| | by a 2 factor | | +-------------------+-----------------------------------------------------------+ | | | |BigMouse| | You can perform a zoom to an area. | | | | Area Zoom | Define the zoom area by *holding down the left | @@ -1188,52 +1306,51 @@ The main application binary is |cgt|. | | | right mouse button* while moving the mouse. | | +-------------------+-----------------------------------------------------------+ | | | |BigMouse| | You can toggle the selection of one object under | -| | | Toggle Selection| the mouse position by pressing |key_CTRL| and | +| | | Toggle Selection| the mouse position by pressing |CTRL| and | | | | pressing down *the right mouse button*. A popup | | | | list of what's under the position shows up into | | | | which you can toggle the selection state of one | | | | item. | | +-------------------+-----------------------------------------------------------+ -| | |Key_S| | Toggle the selection visibility | +| | |KeyCapS| | Toggle the selection visibility | +---------------+-------------------+-----------------------------------------------------------+ -| **Controller**| |Key_CTRL| | Show/hide the controller window. | -| | |Plus| |Key_i| | | +| **Controller**| |CTRL_I| | Show/hide the controller window. | | | | | | | | It's the Swiss Army Knife of the viewer. | | | | From it, you can fine-control the display and | | | | inspect almost everything in your design. | +---------------+-------------------+-----------------------------------------------------------+ -| **Rulers** | |Key_k|, | One stroke on |Key_k| enters the ruler mode, in | -| | |Key_ESC| | which you can draw one ruler. You can exit the | -| | | ruler mode by pressing |Key_ESC|. Once in ruler | +| **Rulers** | |KeyK|, | One stroke on |KeyK| enters the ruler mode, in | +| | |KeyESC| | which you can draw one ruler. You can exit the | +| | | ruler mode by pressing |KeyESC|. Once in ruler | | | | mode, the first click on the *left mouse button* | | | | sets the ruler's starting point and the second | | | | click the ruler's end point. The second click | | | | exits automatically the ruler mode. | | +-------------------+-----------------------------------------------------------+ -| | |Key_K| | Clears all the drawn rulers | +| | |KeyCapK| | Clears all the drawn rulers | +---------------+-------------------+-----------------------------------------------------------+ -| **Print** | |Key_CTRL| | Currently rather crude. It's a direct copy of | -| | |Plus| |Key_p| | what's displayed in pixels. So the resulting | +| **Print** | |CTRL_P| | Currently rather crude. It's a direct copy of | +| | | what's displayed in pixels. So the resulting | | | | picture will be a little blurred due to | | | | anti-aliasing mechanism. | +---------------+-------------------+-----------------------------------------------------------+ -| **Open/Close**| |Key_CTRL| | Opens a new design. The design name must be | -| | |Plus| |Key_o| | given without path or extention. | +| **Open/Close**| |CTRL_O| | Opens a new design. The design name must be | +| | | given without path or extention. | | +-------------------+-----------------------------------------------------------+ -| | |Key_CTRL| | Close the current viewer window, but do not quit | -| | |Plus| |Key_w| | the application. | +| | |CTRL_W| | Close the current viewer window, but do not quit | +| | | the application. | | +-------------------+-----------------------------------------------------------+ -| | |Key_CTRL| | `CTRL+Q` quit the application | -| | |Plus| |Key_q| | (closing all windows). | +| | |CTRL_Q| | `CTRL+Q` quit the application | +| | | (closing all windows). | +---------------+-------------------+-----------------------------------------------------------+ -| **Hierarchy** | |Key_CTRL| |Plus| | Go one hierarchy level down. That is, if there | -| | |Key_Down| | is an *instance* under the cursor position, load | +| **Hierarchy** | |CTRL_Down| | Go one hierarchy level down. That is, if there | +| | | is an *instance* under the cursor position, load | | | | it's *model* Cell in place of the current one. | | +-------------------+-----------------------------------------------------------+ -| | |Key_CTRL| |Plus| | Go one hierarchy level up. if we have entered | -| | |Key_Up| | the current model through |Key_CTRL| |Plus| | -| | | |Key_Down|, reload the previous model (the one | +| | |CTRL_Up| | Go one hierarchy level up. if we have entered | +| | | the current model through |CTRL_Down| | +| | | reload the previous model (the one | | | | in which this model is instanciated). | +---------------+-------------------+-----------------------------------------------------------+ @@ -1348,6 +1465,9 @@ Miscellaneous Settings | | To generate one set this flag to :cb:`True` | +---------------------------------------+------------------+----------------------------+ +|newpage| + + .. _The Controller: The Controller @@ -1579,11 +1699,249 @@ This typical script can be executed in two ways: +----------------------+-----------------------------------------------+ +Plugins +======= + +Plugins are |Python| scripts specially crafted to integrate with |cgt|. +Their entry point is a :cb:`ScriptMain()` method as described in +`Python Interface to Coriolis`_. They can be called by user scripts +through this method. + + + +Chip Placement +~~~~~~~~~~~~~~ + +Automatically perform the placement of a complete chip. This plugin, as well +as the other P&R tools expect a specific top-level hierarchy for the design. +The top-level hierarchy must contains the instances of all the I/O pads and +**exactly one** instance of the chip's core model. + +|ChipStructure-1| + +The designer must provide a configuration file that define the rules for the +placement of the top-level hierarchy (that is, the pads and the core). +This file must be named after the chip's name, by appending ``_chip.py`` +(obviously, it is a |Python| file). For instance if the chip netlist file +is called ``amd2901_crl.vst``, then the configuration file must be named +``amd2901_crl_chip.vst``. + +Example of chip placement configuration file (for ``AM2901``): :: + + chip = \ + { 'pads.south' : [ 'p_a3' , 'p_a2' , 'p_a1' , 'p_r0' + , 'p_vddick0', 'p_vssick0', 'p_a0' , 'p_i6' + , 'p_i8' , 'p_i7' , 'p_r3' ] + , 'pads.east' : [ 'p_zero' , 'p_i0' , 'p_i1' , 'p_i2' + , 'p_vddeck0', 'p_vsseck0', 'p_q3' , 'p_b0' + , 'p_b1' , 'p_b2' , 'p_b3' ] + , 'pads.north' : [ 'p_noe' , 'p_y3' , 'p_y2' , 'p_y1' + , 'p_y0' , 'p_vddeck1', 'p_vsseck1', 'p_np' + , 'p_ovr' , 'p_cout' , 'p_ng' ] + , 'pads.west' : [ 'p_cin' , 'p_i4' , 'p_i5' , 'p_i3' + , 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2' + , 'p_d3' , 'p_q0' , 'p_f3' ] + , 'core.size' : ( 1500, 1500 ) + , 'chip.size' : ( 3000, 3000 ) + , 'chip.clockTree' : True + } + +The file must contain *one dictionnary* named ``chip``. + ++----------------------+-------------------------------------------------------+ +| Chip Dictionnary | ++----------------------+-------------------------------------------------------+ +| Parameter Key/Name | Value/Contents type | ++======================+=======================================================+ +| ``'pad.south'`` | Ordered list (left to right) of pad instances names | +| | to put on the south side of the chip | ++----------------------+-------------------------------------------------------+ +| ``'pad.east'`` | Ordered list (down to up) of pad instances names | +| | to put on the east side of the chip | ++----------------------+-------------------------------------------------------+ +| ``'pad.north'`` | Ordered list (left to right) of pad instances names | +| | to put on the north side of the chip | ++----------------------+-------------------------------------------------------+ +| ``'pad.west'`` | Ordered list (down to up) of pad instances names | +| | to put on the west side of the chip | ++----------------------+-------------------------------------------------------+ +| ``'core.size'`` | The size of the core (to be used by the placer) | ++----------------------+-------------------------------------------------------+ +| ``'chip.size'`` | The size of the whole chip. The sides must be great | +| | enough to accomodate all the pads | ++----------------------+-------------------------------------------------------+ +| ``'chip.clockTree'`` | Whether to generate a clock tree or not. This calls | +| | the ClockTree plugin | ++----------------------+-------------------------------------------------------+ + +Configuration parameters, defaults are defined in ``etc/coriolis2//plugins.conf``. + ++-----------------------------------+------------------+----------------------------+ +| Parameter Identifier | Type | Default | ++===================================+==================+============================+ +| **Chip Plugin Parameters** | ++-----------------------------------+------------------+----------------------------+ +|``chip.block.rails.count`` | TypeInt | :cb:`5` | +| +------------------+----------------------------+ +| | The minimum number of rails around the core | +| | block. Must be odd and suppĂ©rior to 5. | +| | One rail for the clock and at least two pairs | +| | of power/grounds | ++-----------------------------------+------------------+----------------------------+ +|``chip.block.rails.hWidth`` | TypeInt | :cb:`12` | +| +------------------+----------------------------+ +| | The horizontal with of the rails | ++-----------------------------------+------------------+----------------------------+ +|``chip.block.rails.vWidth`` | TypeInt | :cb:`12` | +| +------------------+----------------------------+ +| | The vertical with of the rails | ++-----------------------------------+------------------+----------------------------+ +|``chip.block.rails.hSpacing`` | TypeInt | :cb:`6` | +| +------------------+----------------------------+ +| | The spacing, *edge to edge* of two adjacent | +| | horizontal rails | ++-----------------------------------+------------------+----------------------------+ +|``chip.block.rails.vSpacing`` | TypeInt | :cb:`6` | +| +------------------+----------------------------+ +| | The spacing, *edge to edge* of two adjacent | +| | vertical rails | ++-----------------------------------+------------------+----------------------------+ +|``chip.pad.pck`` | TypeString | :cb:`pck_px` | +| +------------------+----------------------------+ +| | The model name of the pad connected to the | +| | chip external clock | ++-----------------------------------+------------------+----------------------------+ +|``chip.pad.pvddeck`` | TypeString | :cb:`pvddeck_px` | +| +------------------+----------------------------+ +| | The model name of the pad connected to the | +| | ``vdde`` (external power) and suppling it to | +| | the core | ++-----------------------------------+------------------+----------------------------+ +|``chip.pad.pvsseck`` | TypeString | :cb:`pvsseck_px` | +| +------------------+----------------------------+ +| | The model name of the pad connected to the | +| | ``vsse`` (external ground) and suppling it to | +| | the core | ++-----------------------------------+------------------+----------------------------+ +|``chip.pad.pvddick`` | TypeString | :cb:`pvddick_px` | +| +------------------+----------------------------+ +| | The model name of the pad connected to the | +| | ``vddi`` (internal power) and suppling it to | +| | the core | ++-----------------------------------+------------------+----------------------------+ +|``chip.pad.pvssick`` | TypeString | :cb:`pvssick_px` | +| +------------------+----------------------------+ +| | The model name of the pad connected to the | +| | ``vssi`` (internal ground) and suppling it to | +| | the core | ++-----------------------------------+------------------+----------------------------+ + +.. note:: + If no clock tree is generated, then the clock rail is *not* created. + So even if the requested number of rails ``chip.block.rails.count`` is, say 5, + only four rails (2* ``power``, 2* ``ground``) will be generateds. + + +Clock Tree +~~~~~~~~~~ + +Insert a clock tree into a block. The clock tree uses the H strategy. +The clock net is splitted into sub-nets, one for each branch of the +tree. + +* On **chips** design, the sub-nets are createds in the model of the + core block (then trans-hierarchically flattened to be shown at + chip level). +* On **blocks**, the sub nets are created directly in the top block. +* The sub-nets are named according to a simple geometrical scheme. + A common prefix ``ck_htree``, then one postfix by level telling + on which quarter of plane the sub-clock is located: + + #. ``_bl``: bottom left plane quarter. + #. ``_br``: bottom right plane quarter. + #. ``_tl``: top left plane quarter. + #. ``_tr``: top right plane quarter. + + We can have ``ck_htree_bl``, ``ck_htree_bl_bl``, ``ch_htree_bl_tl`` and so on. + +The clock tree plugin works in four steps: + +#. Build the clock tree: creates the top-block abutment box, compute the + levels of H tree neededs and place the clock buffers. +#. Once the clock buffers are placed, calls the placer (|etesian|) to place + the ordinary standart cells, whithout disturbing clock H-tree buffers. +#. At this point we know the exact positions of all the DFFs, so we can + connect them to the nearest H-tree leaf clock signal. +#. Leaf clock signals that are not connecteds to any DFFs are removed. + +Netlist reorganisation: + +* Obviously the top block or chip core model netlist is modificated to + contains all the clock sub-nets. The interface is *not* changed. +* If the top block contains instances of other models *and* those models + contains DFFs that get re-connecteds to the clock sub-nets (from the + top level). Change both the model netlist and interface to propagate + the relevant clock sub-nets to the instanciated model. The new model + with the added clock signal is renamed with a ``_clocked`` suffix. + For example, the sub-block model ``ram.vst`` will become ``ram_clocked.vst``. + +.. note:: + If you are to re-run the clock tree plugin on a netlist, be careful + to erase any previously generated ``_clocked`` file (both netlist and + layout: ``rm *.clocked.{ap,vst}``). And restart |cgt| to clear it's + memory cache. + +Configuration parameters, defaults are defined in ``etc/coriolis2//plugins.conf``. + ++-----------------------------------+------------------+----------------------------+ +| Parameter Identifier | Type | Default | ++===================================+==================+============================+ +| **ClockTree Plugin Parameters** | ++-----------------------------------+------------------+----------------------------+ +|``clockTree.minimumSide`` | TypeInt | :cb:`300` | +| +------------------+----------------------------+ +| | The minimum size below which the clock tree | +| | will stop to perform quadri-partitions | ++-----------------------------------+------------------+----------------------------+ +|``clockTree.buffer`` | TypeString | :cb:`buf_x2` | +| +------------------+----------------------------+ +| | The buffer model to use to drive sub-nets | ++-----------------------------------+------------------+----------------------------+ +|``clockTree.placerEngine`` | TypeString | :cb:`Etesian` | +| +------------------+----------------------------+ +| | The placer to use. Other value is ``Mauka`` | +| | the simulated annealing placer which will go | +| | into retirement very soon | ++-----------------------------------+------------------+----------------------------+ + + +Recursive-Save (RSave) +~~~~~~~~~~~~~~~~~~~~~~ + +Perform a recursive top down save of all the models from the top cell +loaded in |cgt|. Force a write of any non-terminal model. This plugin is used +by the clock tree plugin after the netlist clock sub-nets creation. + + A Simple Example: AM2901 ======================== To illustrate the capabilities of |Coriolis| tools and |Python| scripting, a small example, derived from the |Alliance| :cb:`AM2901` is supplied. -This example contains only the synthetized netlists and the :cb:`design.py` script -which perform the whole P&R of the design. Just lanch |cgt| then execute :cb:`design.py`. +This example contains only the synthetized netlists and the :cb:`doChip.py` script +which perform the whole P&R of the design. + +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 + +#. **Graphic mode:** launch |cgt|, load chip netlist ``amd2901`` (the top cell) + then run the |Python| script :cb:`doChip.py`. + +.. note:: + Between two consecutive run, be sure to erase the netlist/layout generateds: :: + + dummy@lepka:AM2901$ rm *_clocked*.vst *.ap diff --git a/documentation/UsersGuide/images/Coriolis-Soft-Schema.eps b/documentation/UsersGuide/images/Coriolis-Soft-Schema.eps index ffa352cf..08c18320 100644 --- a/documentation/UsersGuide/images/Coriolis-Soft-Schema.eps +++ b/documentation/UsersGuide/images/Coriolis-Soft-Schema.eps @@ -1,11 +1,12 @@ -%!PS-Adobe-2.0 EPSF-2.0 +%!PS-Adobe-3.0 EPSF-3.0 %%Title: Coriolis-Soft-Schema.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5 -%%CreationDate: Sun Jun 29 14:12:01 2014 +%%Creator: fig2dev Version 3.2 Patchlevel 5d +%%CreationDate: Sat Feb 28 17:31:06 2015 %%For: jpc@lepka (Jean-Paul Chaput) -%%BoundingBox: 0 0 492 478 -%Magnification: 0.8000 +%%BoundingBox: 0 0 433 420 +%Magnification: 0.7000 %%EndComments +%%BeginProlog /MyAppDict 100 dict dup begin def /$F2psDict 200 dict def $F2psDict begin @@ -45,10 +46,6 @@ $F2psDict /mtrx matrix put /col31 {1.000 0.840 0.000 srgb} bind def end -save -newpath 0 478 moveto 0 0 lineto 492 0 lineto 492 478 lineto closepath clip newpath --200.5 418.7 translate -1 -1 scale % left30 << @@ -108,10 +105,22 @@ makepattern /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def +/pageheader { +save +newpath 0 420 moveto 0 0 lineto 433 0 lineto 433 420 lineto closepath clip newpath +-174.6 367.2 translate +1 -1 scale $F2psBegin 10 setmiterlimit 0 slj 0 slc - 0.04800 0.04800 sc + 0.04200 0.04200 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader % % Fig objects follow % @@ -140,24 +149,6 @@ n 5100 600 m n 5160 -27 m 5100 -267 l 5040 -27 l 5160 -27 l cp gs col21 1.00 shd ef gr col21 s % Polyline gs clippath -5010 3572 m 5010 3285 l 4890 3285 l 4890 3572 l 4890 3572 l 4950 3332 l 5010 3572 l cp -eoclip -n 4950 7800 m - 4950 3300 l gs col0 s gr gr - -% arrowhead -n 5010 3572 m 4950 3332 l 4890 3572 l 5010 3572 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -5160 1772 m 5160 1485 l 5040 1485 l 5040 1772 l 5040 1772 l 5100 1532 l 5160 1772 l cp -eoclip -n 5100 7800 m - 5100 1500 l gs col0 s gr gr - -% arrowhead -n 5160 1772 m 5100 1532 l 5040 1772 l 5160 1772 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath 5460 5372 m 5460 5085 l 5340 5085 l 5340 5372 l 5340 5372 l 5400 5132 l 5460 5372 l cp eoclip n 5400 6000 m @@ -176,24 +167,6 @@ n 5550 6000 m n 5610 3572 m 5550 3332 l 5490 3572 l 5610 3572 l cp gs col8 1.00 shd ef gr col8 s % Polyline gs clippath -5760 1772 m 5760 1485 l 5640 1485 l 5640 1772 l 5640 1772 l 5700 1532 l 5760 1772 l cp -eoclip -n 5700 6000 m - 5700 1500 l gs col8 s gr gr - -% arrowhead -n 5760 1772 m 5700 1532 l 5640 1772 l 5760 1772 l cp gs col8 1.00 shd ef gr col8 s -% Polyline -gs clippath -5910 -27 m 5910 -315 l 5790 -315 l 5790 -27 l 5790 -27 l 5850 -267 l 5910 -27 l cp -eoclip -n 5850 6000 m - 5850 -300 l gs col8 s gr gr - -% arrowhead -n 5910 -27 m 5850 -267 l 5790 -27 l 5910 -27 l cp gs col8 1.00 shd ef gr col8 s -% Polyline -gs clippath 4860 5372 m 4860 5085 l 4740 5085 l 4740 5372 l 4740 5372 l 4800 5132 l 4860 5372 l cp eoclip n 4800 7800 m @@ -300,23 +273,94 @@ n 14100 4800 m % arrowhead n 14160 872 m 14100 632 l 14040 872 l 14160 872 l cp gs col18 1.00 shd ef gr col18 s +% Polyline +45.000 slw +n 13800 4800 m 14400 4800 l 14400 6600 l 13800 6600 l + cp gs col18 0.50 tnt ef gr gs col18 s gr +% Polyline +15.000 slw +gs clippath +5910 -27 m 5910 -315 l 5790 -315 l 5790 -27 l 5790 -27 l 5850 -267 l 5910 -27 l cp +eoclip +n 5850 6000 m + 5850 -300 l gs col8 s gr gr + +% arrowhead +n 5910 -27 m 5850 -267 l 5790 -27 l 5910 -27 l cp gs col8 1.00 shd ef gr col8 s +% Polyline +45.000 slw +n 13200 1800 m 13800 1800 l 13800 3600 l 13200 3600 l + cp gs col18 0.50 tnt ef gr gs col18 s gr +% Polyline +15.000 slw +gs clippath +5760 1772 m 5760 1485 l 5640 1485 l 5640 1772 l 5640 1772 l 5700 1532 l 5760 1772 l cp +eoclip +n 5700 6000 m + 5700 1500 l gs col8 s gr gr + +% arrowhead +n 5760 1772 m 5700 1532 l 5640 1772 l 5760 1772 l cp gs col8 1.00 shd ef gr col8 s +% Polyline +gs clippath +5010 3572 m 5010 3285 l 4890 3285 l 4890 3572 l 4890 3572 l 4950 3332 l 5010 3572 l cp +eoclip +n 4950 7800 m + 4950 3300 l gs col0 s gr gr + +% arrowhead +n 5010 3572 m 4950 3332 l 4890 3572 l 5010 3572 l cp gs 0.00 setgray ef gr col0 s +% Polyline +45.000 slw +n 12600 -1200 m 14400 -1200 l 14400 600 l 12600 600 l + cp gs col18 0.50 tnt ef gr gs col18 s gr +% Polyline +15.000 slw +gs clippath +5160 1772 m 5160 1485 l 5040 1485 l 5040 1772 l 5040 1772 l 5100 1532 l 5160 1772 l cp +eoclip +n 5100 7800 m + 5100 1500 l gs col0 s gr gr + +% arrowhead +n 5160 1772 m 5100 1532 l 5040 1772 l 5160 1772 l cp gs 0.00 setgray ef gr col0 s % here ends figure; % % here starts figure with depth 60 % Polyline 0 slj 0 slc -15.000 slw -n 4200 7800 m 9000 7800 l 9000 8700 l 4200 8700 l - cp gs col7 1.00 shd ef gr gs col0 s gr +45.000 slw +n 9000 6000 m 10800 6000 l 10800 6900 l 9000 6900 l + cp +% Fill with pattern background color +gs /DeviceRGB setcolorspace 0.00 0.00 0.56 setcolor fill gr + +% Fill with pattern pen color +gs /DeviceRGB setcolorspace 0.00 0.00 0.56 P1 setpattern fill gr + +gs col8 s gr % Polyline -n 9000 7800 m 10800 7800 l 10800 8700 l 9000 8700 l - cp gs col7 0.00 shd ef gr gs col0 s gr +n 4200 6000 m 9000 6000 l 9000 6900 l 4200 6900 l + cp gs col7 1.00 shd ef gr gs col8 s gr % Polyline -n 4200 4200 m 6000 4200 l 6000 5100 l 4200 5100 l +n 9000 -1200 m 10800 -1200 l 10800 -300 l 9000 -300 l + cp +% Fill with pattern background color +gs /DeviceRGB setcolorspace 0.56 0.00 0.56 setcolor fill gr + +% Fill with pattern pen color +gs /DeviceRGB setcolorspace 0.56 0.00 0.56 P1 setpattern fill gr + +gs col21 s gr +% Polyline +n 4200 -1200 m 9000 -1200 l 9000 -300 l 4200 -300 l cp gs col7 1.00 shd ef gr gs col21 s gr % Polyline -n 6000 4200 m 7800 4200 l 7800 5100 l 6000 5100 l +n 4800 600 m 6600 600 l 6600 1500 l 4800 1500 l + cp gs col7 1.00 shd ef gr gs col21 s gr +% Polyline +n 6600 600 m 8400 600 l 8400 1500 l 6600 1500 l cp % Fill with pattern background color gs /DeviceRGB setcolorspace 0.56 0.00 0.56 setcolor fill gr @@ -339,10 +383,10 @@ gs /DeviceRGB setcolorspace 0.56 0.00 0.56 P1 setpattern fill gr gs col21 s gr % Polyline -n 4800 600 m 6600 600 l 6600 1500 l 4800 1500 l +n 4200 4200 m 6000 4200 l 6000 5100 l 4200 5100 l cp gs col7 1.00 shd ef gr gs col21 s gr % Polyline -n 6600 600 m 8400 600 l 8400 1500 l 6600 1500 l +n 6000 4200 m 7800 4200 l 7800 5100 l 6000 5100 l cp % Fill with pattern background color gs /DeviceRGB setcolorspace 0.56 0.00 0.56 setcolor fill gr @@ -352,98 +396,68 @@ gs /DeviceRGB setcolorspace 0.56 0.00 0.56 P1 setpattern fill gr gs col21 s gr % Polyline -n 9000 -1200 m 10800 -1200 l 10800 -300 l 9000 -300 l - cp -% Fill with pattern background color -gs /DeviceRGB setcolorspace 0.56 0.00 0.56 setcolor fill gr - -% Fill with pattern pen color -gs /DeviceRGB setcolorspace 0.56 0.00 0.56 P1 setpattern fill gr - -gs col21 s gr +n 4200 7800 m 9000 7800 l 9000 8700 l 4200 8700 l + cp gs col7 1.00 shd ef gr gs col0 s gr % Polyline -n 4200 -1200 m 9000 -1200 l 9000 -300 l 4200 -300 l - cp gs col7 1.00 shd ef gr gs col21 s gr -% Polyline -n 13200 1800 m 13800 1800 l 13800 3600 l 13200 3600 l - cp gs col7 1.00 shd ef gr gs col18 s gr -% Polyline -n 13800 4800 m 14400 4800 l 14400 6600 l 13800 6600 l - cp gs col7 1.00 shd ef gr gs col18 s gr -% Polyline -n 9000 6000 m 10800 6000 l 10800 6900 l 9000 6900 l - cp -% Fill with pattern background color -gs /DeviceRGB setcolorspace 0.00 0.00 0.56 setcolor fill gr - -% Fill with pattern pen color -gs /DeviceRGB setcolorspace 0.00 0.00 0.56 P1 setpattern fill gr - -gs col8 s gr -% Polyline -n 4200 6000 m 9000 6000 l 9000 6900 l 4200 6900 l - cp gs col7 1.00 shd ef gr gs col8 s gr +n 9000 7800 m 10800 7800 l 10800 8700 l 9000 8700 l + cp gs col7 0.00 shd ef gr gs col0 s gr % Polyline n 11700 -1200 m 12600 -1200 l 12600 8700 l 11700 8700 l - cp gs col7 1.00 shd ef gr gs col18 s gr -% Polyline -n 12600 -1200 m 14400 -1200 l 14400 600 l 12600 600 l cp gs col18 1.00 shd ef gr gs col18 s gr % here ends figure; % % here starts figure with depth 50 -/Times-Bold ff 400.00 scf sf -6600 8400 m -gs 1 -1 sc (Hurricane) dup sw pop 2 div neg 0 rm col0 sh gr -/Times-Bold ff 300.00 scf sf -9900 8400 m -gs 1 -1 sc (Isobar) dup sw pop 2 div neg 0 rm col7 sh gr -/Times-Bold ff 300.00 scf sf -6900 4800 m -gs 1 -1 sc (PyMauka) dup sw pop 2 div neg 0 rm col7 sh gr -/Times-Bold ff 400.00 scf sf -5100 4800 m -gs 1 -1 sc (Mauka) dup sw pop 2 div neg 0 rm col21 sh gr -/Times-Bold ff 400.00 scf sf -5700 3000 m -gs 1 -1 sc (Knik) dup sw pop 2 div neg 0 rm col21 sh gr -/Times-Bold ff 300.00 scf sf -7500 3000 m -gs 1 -1 sc (PyKnik) dup sw pop 2 div neg 0 rm col7 sh gr -/Times-Bold ff 400.00 scf sf -5700 1200 m -gs 1 -1 sc (Kite) dup sw pop 2 div neg 0 rm col21 sh gr -/Times-Bold ff 300.00 scf sf -7500 1200 m -gs 1 -1 sc (PyKite) dup sw pop 2 div neg 0 rm col7 sh gr -/Times-Bold ff 300.00 scf sf -9900 -600 m -gs 1 -1 sc (PyUnicorn) dup sw pop 2 div neg 0 rm col7 sh gr -/Times-Bold ff 400.00 scf sf -6600 -600 m -gs 1 -1 sc (Unicorn) dup sw pop 2 div neg 0 rm col21 sh gr -/Times-Bold ff 400.00 scf sf -13650 2700 m -gs 1 -1 sc 90.0 rot (Stratus) dup sw pop 2 div neg 0 rm col18 sh gr -/Times-Bold ff 400.00 scf sf -14250 5700 m -gs 1 -1 sc 90.0 rot (Plugin) dup sw pop 2 div neg 0 rm col18 sh gr -/Times-Bold ff 400.00 scf sf +/Helvetica-Bold ff 400.00 scf sf 6600 6600 m gs 1 -1 sc (CRL Core) dup sw pop 2 div neg 0 rm col8 sh gr -/Times-Bold ff 300.00 scf sf +/Helvetica-Bold ff 300.00 scf sf 9975 6600 m gs 1 -1 sc (PyCRL) dup sw pop 2 div neg 0 rm col7 sh gr -/Times-Bold ff 533.33 scf sf -12375 3150 m -gs 1 -1 sc 90.0 rot (Python) dup sw pop 2 div neg 0 rm col18 sh gr -/Times-Bold ff 533.33 scf sf +/Helvetica-Bold ff 533.33 scf sf 13650 -300 m gs 1 -1 sc 90.0 rot (cgt) dup sw pop 2 div neg 0 rm col7 sh gr +/Helvetica-Bold ff 300.00 scf sf +9900 -600 m +gs 1 -1 sc (PyUnicorn) dup sw pop 2 div neg 0 rm col7 sh gr +/Helvetica-Bold ff 400.00 scf sf +6600 -600 m +gs 1 -1 sc (Unicorn) dup sw pop 2 div neg 0 rm col21 sh gr +/Helvetica-Bold ff 400.00 scf sf +5700 1200 m +gs 1 -1 sc (Kite) dup sw pop 2 div neg 0 rm col21 sh gr +/Helvetica-Bold ff 300.00 scf sf +7500 1200 m +gs 1 -1 sc (PyKite) dup sw pop 2 div neg 0 rm col7 sh gr +/Helvetica-Bold ff 400.00 scf sf +5700 3000 m +gs 1 -1 sc (Knik) dup sw pop 2 div neg 0 rm col21 sh gr +/Helvetica-Bold ff 300.00 scf sf +7500 3000 m +gs 1 -1 sc (PyKnik) dup sw pop 2 div neg 0 rm col7 sh gr +/Helvetica-Bold ff 300.00 scf sf +6900 4800 m +gs 1 -1 sc (PyEtesian) dup sw pop 2 div neg 0 rm col7 sh gr +/Helvetica-Bold ff 400.00 scf sf +5100 4800 m +gs 1 -1 sc (Etesian) dup sw pop 2 div neg 0 rm col21 sh gr +/Helvetica-Bold ff 533.33 scf sf +12375 3600 m +gs 1 -1 sc 90.0 rot (Python) dup sw pop 2 div neg 0 rm col7 sh gr +/Helvetica-Bold ff 400.00 scf sf +13650 2700 m +gs 1 -1 sc 90.0 rot (Stratus) dup sw pop 2 div neg 0 rm col7 sh gr +/Helvetica-Bold ff 400.00 scf sf +14250 5700 m +gs 1 -1 sc 90.0 rot (Plugin) dup sw pop 2 div neg 0 rm col7 sh gr +/Helvetica-Bold ff 400.00 scf sf +6600 8400 m +gs 1 -1 sc (Hurricane) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica-Bold ff 300.00 scf sf +9900 8400 m +gs 1 -1 sc (Isobar) dup sw pop 2 div neg 0 rm col7 sh gr % here ends figure; -$F2psEnd -rs -end +pagefooter showpage %%Trailer +end %EOF diff --git a/documentation/UsersGuide/images/Coriolis-Soft-Schema.fig b/documentation/UsersGuide/images/Coriolis-Soft-Schema.fig index b7753022..7b95cc4b 100644 --- a/documentation/UsersGuide/images/Coriolis-Soft-Schema.fig +++ b/documentation/UsersGuide/images/Coriolis-Soft-Schema.fig @@ -1,4 +1,4 @@ -#FIG 3.2 Produced by xfig version 3.2.5a +#FIG 3.2 Produced by xfig version 3.2.5c Landscape Center Inches @@ -83,9 +83,6 @@ Single 11700 -1200 12600 -1200 12600 8700 11700 8700 11700 -1200 2 2 0 4 18 18 70 -1 30 0.000 0 0 -1 0 0 5 13800 4800 14400 4800 14400 6600 13800 6600 13800 4800 -2 1 0 2 0 7 70 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 240.00 - 5100 7800 5100 1500 2 1 0 2 8 7 70 -1 -1 0.000 0 0 -1 1 0 2 1 1 2.00 120.00 240.00 5850 6000 5850 -300 @@ -99,6 +96,9 @@ Single 4950 7800 4950 3300 2 2 0 4 18 18 70 -1 30 0.000 0 0 -1 0 0 5 12600 -1200 14400 -1200 14400 600 12600 600 12600 -1200 +2 1 0 2 0 7 70 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 5100 7800 5100 1500 4 1 8 50 -1 18 24 0.0000 4 300 1920 6600 6600 CRL Core\001 4 1 7 50 -1 18 18 0.0000 4 285 990 9975 6600 PyCRL\001 4 1 7 50 -1 18 32 1.5708 4 480 810 13650 -300 cgt\001 @@ -108,8 +108,8 @@ Single 4 1 7 50 -1 18 18 0.0000 4 285 945 7500 1200 PyKite\001 4 1 21 50 -1 18 24 0.0000 4 300 900 5700 3000 Knik\001 4 1 7 50 -1 18 18 0.0000 4 285 1020 7500 3000 PyKnik\001 -4 1 7 50 -1 18 18 0.0000 4 285 1290 6900 4800 PyMauka\001 -4 1 21 50 -1 18 24 0.0000 4 300 1275 5100 4800 Mauka\001 +4 1 7 50 -1 18 18 0.0000 4 285 1425 6900 4800 PyEtesian\001 +4 1 21 50 -1 18 24 0.0000 4 300 1455 5100 4800 Etesian\001 4 1 7 50 -1 18 32 1.5708 4 510 1830 12375 3600 Python\001 4 1 7 50 -1 18 24 1.5708 4 300 1410 13650 2700 Stratus\001 4 1 7 50 -1 18 24 1.5708 4 390 1275 14250 5700 Plugin\001 diff --git a/documentation/UsersGuide/images/Coriolis-Soft-Schema.pdf b/documentation/UsersGuide/images/Coriolis-Soft-Schema.pdf index 27fb14d29267be3f07a7ea4ddfac3d5c0bbc7ae5..60cd16500b89ee6a73c9a24a98fbf565e4a29a91 100644 GIT binary patch delta 4800 zcmb7GXH*kxla*cqf`AmMp@yCWLK3QkUR9(c(vc!XigZFXR0&P06akfvbP?$!6andk zqI3k5UPW|$_uX@L_w_qx_nYU>ocr9FJ9mD~iTtrVRvlewHs?OCP7^Y1@&y934%o?< zCRes7ri=adVq{0gcfQKa{u@u<=Zs=Ub??-b_Z^xK@9>XgsSH>2TtaJOlW5RgyF-_r zkDT#yua*Wo)CE}CcPU!maHgdZxP4sZg1MUa8BasgaQ#{$p0}9s6a1aA-f$#N?g{;P z0|=(QJ%R4oEJG=;DvjVUoj1EYNOJ0J%+1WT&JGV)209hIHRHwtD3VRO@$MZvjZK*; z>N<76lMw=)=JP8nQew*uWCjr?{{0NwKygt(8V%JOyL~}B%c5f9WOgjkJd$^^K*0Fr zL!bpc{RNZr$tdH1=IFgg3T7lb{Vz&@=V@?K0{R9@cjQHM*cJBzqrEbeR$y(}b5Me7 zxI8G*{tdo-eTQC>M=tFKLxG>lBB}G~=x0y$(FhC06@mD@h}EfCMtfIEh-LgZy>;)0 z7Im%fMHUk|yt!0?O+5o?;`V?D44!K2YtgH{mNKi_o|Eg^>6f`Qr4gL*4rVM9AO|Ho zZgip2∈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 Ay8r+H delta 4785 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 HOnLtcAULjB literal 11593 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 diff --git a/documentation/UsersGuide/images/chip-structure-1.eps b/documentation/UsersGuide/images/chip-structure-1.eps new file mode 100644 index 00000000..71b1f531 --- /dev/null +++ b/documentation/UsersGuide/images/chip-structure-1.eps @@ -0,0 +1,544 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: chip-structure-1.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5d +%%CreationDate: Thu Mar 5 23:52:42 2015 +%%For: jpc@lepka (Jean-Paul Chaput) +%%BoundingBox: 0 0 1018 438 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 438 moveto 0 0 lineto 1018 0 lineto 1018 438 lineto closepath clip newpath +403.1 488.6 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06000 0.06000 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 70 +% Polyline +0 slj +0 slc +0.000 slw +n 3075 2925 m 3075 2475 l 3525 2475 l 3525 2925 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 4575 975 m 5025 975 l 5025 1425 l 4575 1425 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 5175 975 m 5625 975 l 5625 1425 l 5175 1425 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 5775 975 m 6225 975 l 6225 1425 l 5775 1425 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 6375 975 m 6825 975 l 6825 1425 l 6375 1425 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 6975 975 m 7425 975 l 7425 1425 l 6975 1425 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 7575 975 m 8025 975 l 8025 1425 l 7575 1425 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 8175 975 m 8625 975 l 8625 1425 l 8175 1425 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 3075 3525 m 3075 3075 l 3525 3075 l 3525 3525 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 3075 4125 m 3075 3675 l 3525 3675 l 3525 4125 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 3075 4725 m 3075 4275 l 3525 4275 l 3525 4725 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 3075 5325 m 3075 4875 l 3525 4875 l 3525 5325 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 3075 5925 m 3075 5475 l 3525 5475 l 3525 5925 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 10125 3075 m 10125 3525 l 9675 3525 l 9675 3075 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 10125 3675 m 10125 4125 l 9675 4125 l 9675 3675 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 10125 4275 m 10125 4725 l 9675 4725 l 9675 4275 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 10125 4875 m 10125 5325 l 9675 5325 l 9675 4875 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 10125 5475 m 10125 5925 l 9675 5925 l 9675 5475 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 10125 6075 m 10125 6525 l 9675 6525 l 9675 6075 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 6225 8025 m 5775 8025 l 5775 7575 l 6225 7575 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 6825 8025 m 6375 8025 l 6375 7575 l 6825 7575 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 7425 8025 m 6975 8025 l 6975 7575 l 7425 7575 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 8025 8025 m 7575 8025 l 7575 7575 l 8025 7575 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 5625 8025 m 5175 8025 l 5175 7575 l 5625 7575 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 8625 8025 m 8175 8025 l 8175 7575 l 8625 7575 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 5025 8025 m 4575 8025 l 4575 7575 l 5025 7575 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 10125 2475 m 10125 2925 l 9675 2925 l 9675 2475 l + cp gs col1 0.50 tnt ef gr +% Polyline +n 3075 6525 m 3075 6075 l 3525 6075 l 3525 6525 l + cp gs col1 0.50 tnt ef gr +% here ends figure; +% +% here starts figure with depth 60 +% Polyline +0 slj +0 slc +7.500 slw +n 5100 3000 m 8100 3000 l 8100 6000 l 5100 6000 l + cp gs 0.50 setgray ef gr gs col0 s gr +% here ends figure; +% +% here starts figure with depth 50 +% Polyline +0 slj +0 slc +45.000 slw +n 3000 3000 m 3000 2400 l 4500 2400 l 4500 3000 l + cp gs col0 s gr +% Polyline +n 4500 900 m 5100 900 l 5100 2400 l 4500 2400 l + cp gs col0 s gr +% Polyline +n 5100 900 m 5700 900 l 5700 2400 l 5100 2400 l + cp gs col0 s gr +% Polyline +n 5700 900 m 6300 900 l 6300 2400 l 5700 2400 l + cp gs col0 s gr +% Polyline +n 6300 900 m 6900 900 l 6900 2400 l 6300 2400 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +6600 1650 m +gs 1 -1 sc 90.0 rot (pvddeck_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 6900 900 m 7500 900 l 7500 2400 l 6900 2400 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +7200 1650 m +gs 1 -1 sc 90.0 rot (pvsseck_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 7500 900 m 8100 900 l 8100 2400 l 7500 2400 l + cp gs col0 s gr +% Polyline +n 8100 900 m 8700 900 l 8700 2400 l 8100 2400 l + cp gs col0 s gr +% Polyline +n 3000 3600 m 3000 3000 l 4500 3000 l 4500 3600 l + cp gs col0 s gr +% Polyline +n 3000 4200 m 3000 3600 l 4500 3600 l 4500 4200 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +3750 3900 m +gs 1 -1 sc 180.0 rot (pvssick_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 3000 4800 m 3000 4200 l 4500 4200 l 4500 4800 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +3750 4500 m +gs 1 -1 sc 180.0 rot (pvddick_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 3000 5400 m 3000 4800 l 4500 4800 l 4500 5400 l + cp gs col0 s gr +% Polyline +n 3000 6000 m 3000 5400 l 4500 5400 l 4500 6000 l + cp gs col0 s gr +% Polyline +n 10200 3000 m 10200 3600 l 8700 3600 l 8700 3000 l + cp gs col0 s gr +% Polyline +n 10200 3600 m 10200 4200 l 8700 4200 l 8700 3600 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +9450 3900 m +gs 1 -1 sc (pvddeck_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 10200 4200 m 10200 4800 l 8700 4800 l 8700 4200 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +9450 4500 m +gs 1 -1 sc (pvsseck_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 10200 4800 m 10200 5400 l 8700 5400 l 8700 4800 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +9450 5100 m +gs 1 -1 sc (pck_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 10200 5400 m 10200 6000 l 8700 6000 l 8700 5400 l + cp gs col0 s gr +% Polyline +n 10200 6000 m 10200 6600 l 8700 6600 l 8700 6000 l + cp gs col0 s gr +% Polyline +n 6300 8100 m 5700 8100 l 5700 6600 l 6300 6600 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +6000 7350 m +gs 1 -1 sc 270.0 rot (pvddick_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 6900 8100 m 6300 8100 l 6300 6600 l 6900 6600 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +6600 7350 m +gs 1 -1 sc 270.0 rot (pvssick_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 7500 8100 m 6900 8100 l 6900 6600 l 7500 6600 l + cp gs col0 s gr +% Polyline +n 8100 8100 m 7500 8100 l 7500 6600 l 8100 6600 l + cp gs col0 s gr +% Polyline +n 5700 8100 m 5100 8100 l 5100 6600 l 5700 6600 l + cp gs col0 s gr +% Polyline +n 8700 8100 m 8100 8100 l 8100 6600 l 8700 6600 l + cp gs col0 s gr +% Polyline +n 5100 8100 m 4500 8100 l 4500 6600 l 5100 6600 l + cp gs col0 s gr +% Polyline +n 10200 2400 m 10200 3000 l 8700 3000 l 8700 2400 l + cp gs col0 s gr +% Polyline +n 3000 6600 m 3000 6000 l 4500 6000 l 4500 6600 l + cp gs col0 s gr +% Polyline +n -1800 4500 m -2400 4500 l -2400 4125 l -2175 3900 l -1200 3900 l -1200 4500 l + + -1800 4500 l cp gs col0 s gr +/Helvetica-Bold ff 233.33 scf sf +-1800 4275 m +gs 1 -1 sc (pck_px) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +15.000 slw +n -6600 2400 m -5400 2400 l -5400 3000 l -6600 3000 l + cp gs col0 s gr +% Polyline +n -4800 2400 m -3600 2400 l -3600 3000 l -4800 3000 l + cp gs col0 s gr +% Polyline +n -3000 2400 m -1800 2400 l -1800 3000 l -3000 3000 l + cp gs col0 s gr +% Polyline +n -1200 2400 m 0 2400 l 0 3000 l -1200 3000 l + cp gs col0 s gr +% Polyline +n 600 2400 m 1800 2400 l 1800 3000 l 600 3000 l + cp gs col0 s gr +% Polyline +45.000 slw +n -6000 4500 m -6600 4500 l -6600 4125 l -6375 3900 l -5400 3900 l -5400 4500 l + + -6000 4500 l cp gs col0 s gr +% Polyline +n -4200 4500 m -4800 4500 l -4800 4125 l -4575 3900 l -3600 3900 l -3600 4500 l + + -4200 4500 l cp gs col0 s gr +% Polyline +15.000 slw +gs clippath +-6059 3628 m -6060 3915 l -5940 3915 l -5939 3628 l -5939 3628 l -5999 3868 l -6059 3628 l cp +eoclip +n -6000 3000 m + -6000 3900 l gs col0 s gr gr + +% arrowhead +n -6059 3628 m -5999 3868 l -5939 3628 l -6059 3628 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +-4259 3628 m -4260 3915 l -4140 3915 l -4139 3628 l -4139 3628 l -4199 3868 l -4259 3628 l cp +eoclip +n -4200 3000 m + -4200 3900 l gs col0 s gr gr + +% arrowhead +n -4259 3628 m -4199 3868 l -4139 3628 l -4259 3628 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +-3696 3708 m -3943 3856 l -3881 3959 l -3634 3810 l -3634 3810 l -3871 3883 l -3696 3708 l cp +eoclip +n -2400 3000 m + -3900 3900 l gs col0 s gr gr + +% arrowhead +n -3696 3708 m -3871 3883 l -3634 3810 l -3696 3708 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +-1617 3689 m -1848 3861 l -1776 3957 l -1545 3785 l -1545 3785 l -1773 3881 l -1617 3689 l cp +eoclip +n -600 3000 m + -1800 3900 l gs col0 s gr gr + +% arrowhead +n -1617 3689 m -1773 3881 l -1545 3785 l -1617 3689 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +1140 3628 m 1140 3915 l 1260 3915 l 1260 3628 l 1260 3628 l 1200 3868 l 1140 3628 l cp +eoclip +n 1200 3000 m + 1200 3900 l gs col0 s gr gr + +% arrowhead +n 1140 3628 m 1200 3868 l 1260 3628 l 1140 3628 l cp gs 0.00 setgray ef gr col0 s +% Polyline +45.000 slw +n -6000 7200 m -6600 7200 l -6600 6825 l -6375 6600 l -5400 6600 l -5400 7200 l + + -6000 7200 l cp gs col0 s gr +% Polyline +15.000 slw +n -6600 7500 m -5400 7500 l -5400 8100 l -6600 8100 l + cp gs col0 s gr +% Polyline +7.500 slw +n 3000 900 m 10200 900 l 10200 8100 l 3000 8100 l + cp gs col0 s gr +% Polyline +45.000 slw +n -2400 3150 m -6675 3150 l -6675 1875 l -6225 1425 l 1875 1425 l 1875 3150 l + + -2400 3150 l cp gs col0 s gr +% Polyline +n -3300 1425 m -3300 1875 l -1500 1875 l + -1500 1425 l gs col0 s gr +% Polyline +15.000 slw +gs clippath +-5740 2293 m -6025 2343 l -6004 2461 l -5720 2411 l -5720 2411 l -5967 2394 l -5740 2293 l cp +eoclip +n -3000 1875 m + -6000 2400 l gs col0 s gr gr + +% arrowhead +n -5740 2293 m -5967 2394 l -5720 2411 l -5740 2293 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +gs clippath +-3967 2245 m -4235 2349 l -4192 2461 l -3923 2356 l -3923 2356 l -4169 2388 l -3967 2245 l cp +eoclip +n -2850 1875 m + -4200 2400 l gs col0 s gr gr + +% arrowhead +n -3967 2245 m -4169 2388 l -3923 2356 l -3967 2245 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +gs clippath +-2459 2128 m -2460 2415 l -2340 2415 l -2339 2128 l -2339 2128 l -2399 2368 l -2459 2128 l cp +eoclip +n -2400 1875 m + -2400 2400 l gs col0 s gr gr + +% arrowhead +n -2459 2128 m -2399 2368 l -2339 2128 l -2459 2128 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +gs clippath +-876 2366 m -605 2461 l -566 2348 l -836 2253 l -836 2253 l -630 2389 l -876 2366 l cp +eoclip +n -2100 1875 m + -600 2400 l gs col0 s gr gr + +% arrowhead +n -876 2366 m -630 2389 l -836 2253 l -876 2366 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +gs clippath +921 2409 m 1203 2461 l 1225 2343 l 942 2291 l 942 2291 l 1168 2394 l 921 2409 l cp +eoclip +n -1650 1875 m + 1200 2400 l gs col0 s gr gr + +% arrowhead +n 921 2409 m 1168 2394 l 942 2291 l 921 2409 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +45.000 slw +n 1200 5100 m 0 5100 l 0 4275 l 375 3900 l 2400 3900 l 2400 5100 l + + 1200 5100 l cp gs col0 s gr +% Polyline +n 600 3900 m 600 4275 l 1800 4275 l + 1800 3900 l gs col0 s gr +% Polyline +15.000 slw +gs clippath +682 4533 m 540 4783 l 644 4842 l 787 4593 l 787 4593 l 616 4772 l 682 4533 l cp +eoclip +n 900 4275 m + 600 4800 l gs col0 s gr gr + +% arrowhead +n 682 4533 m 616 4772 l 787 4593 l 682 4533 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +gs clippath +1140 4528 m 1140 4815 l 1260 4815 l 1260 4528 l 1260 4528 l 1200 4768 l 1140 4528 l cp +eoclip +n 1200 4275 m + 1200 4800 l gs col0 s gr gr + +% arrowhead +n 1140 4528 m 1200 4768 l 1260 4528 l 1140 4528 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +gs clippath +1612 4593 m 1755 4842 l 1859 4783 l 1717 4533 l 1717 4533 l 1784 4772 l 1612 4593 l cp +eoclip +n 1500 4275 m + 1800 4800 l gs col0 s gr gr + +% arrowhead +n 1612 4593 m 1784 4772 l 1717 4533 l 1612 4593 l cp gs col7 1.00 shd ef gr col0 s +/Courier-Bold ff 266.67 scf sf +-5100 6975 m +gs 1 -1 sc (Cell \(Model\)) col0 sh gr +/Courier ff 266.67 scf sf +-5100 7875 m +gs 1 -1 sc (Instance) col0 sh gr +/Helvetica-Bold ff 233.33 scf sf +-6000 4275 m +gs 1 -1 sc (pi_px) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica-Bold ff 233.33 scf sf +-4200 4275 m +gs 1 -1 sc (po_px) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica ff 233.33 scf sf +-6000 2775 m +gs 1 -1 sc (p_a0) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica ff 233.33 scf sf +-4200 2775 m +gs 1 -1 sc (p_ovr) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica ff 233.33 scf sf +-2400 2775 m +gs 1 -1 sc (p_ng) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica ff 233.33 scf sf +-600 2775 m +gs 1 -1 sc (p_ck) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica ff 233.33 scf sf +1200 2775 m +gs 1 -1 sc (core) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica ff 233.33 scf sf +-6000 7875 m +gs 1 -1 sc (i_name) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica-Bold ff 233.33 scf sf +-6000 6975 m +gs 1 -1 sc (m_name) dup sw pop 2 div neg 0 rm col0 sh gr +/Courier-Bold ff 300.00 scf sf +6525 4575 m +gs 1 -1 sc (coeur) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica-Bold ff 233.33 scf sf +-2400 1725 m +gs 1 -1 sc (amd2901) dup sw pop 2 div neg 0 rm col0 sh gr +/Helvetica-Bold ff 233.33 scf sf +1200 4125 m +gs 1 -1 sc (coeur) dup sw pop 2 div neg 0 rm col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +%EOF diff --git a/documentation/UsersGuide/images/chip-structure-1.fig b/documentation/UsersGuide/images/chip-structure-1.fig new file mode 100644 index 00000000..a3658fca --- /dev/null +++ b/documentation/UsersGuide/images/chip-structure-1.fig @@ -0,0 +1,280 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 2925 2325 4575 3075 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3000 3000 3000 2400 4500 2400 4500 3000 3000 3000 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 3075 2925 3075 2475 3525 2475 3525 2925 3075 2925 +-6 +6 4425 825 5175 2475 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4500 900 5100 900 5100 2400 4500 2400 4500 900 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 4575 975 5025 975 5025 1425 4575 1425 4575 975 +-6 +6 5025 825 5775 2475 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5100 900 5700 900 5700 2400 5100 2400 5100 900 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 5175 975 5625 975 5625 1425 5175 1425 5175 975 +-6 +6 5625 825 6375 2475 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5700 900 6300 900 6300 2400 5700 2400 5700 900 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 5775 975 6225 975 6225 1425 5775 1425 5775 975 +-6 +6 6225 825 6975 2475 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 6300 900 6900 900 6900 2400 6300 2400 6300 900 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 6375 975 6825 975 6825 1425 6375 1425 6375 975 +4 1 0 50 -1 14 12 1.5708 4 165 1200 6600 1650 pvddeck_px\001 +-6 +6 6825 825 7575 2475 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 6900 900 7500 900 7500 2400 6900 2400 6900 900 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 6975 975 7425 975 7425 1425 6975 1425 6975 975 +4 1 0 50 -1 14 12 1.5708 4 165 1200 7200 1650 pvsseck_px\001 +-6 +6 7425 825 8175 2475 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 7500 900 8100 900 8100 2400 7500 2400 7500 900 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 7575 975 8025 975 8025 1425 7575 1425 7575 975 +-6 +6 8025 825 8775 2475 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 8100 900 8700 900 8700 2400 8100 2400 8100 900 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 8175 975 8625 975 8625 1425 8175 1425 8175 975 +-6 +6 2925 2925 4575 3675 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3000 3600 3000 3000 4500 3000 4500 3600 3000 3600 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 3075 3525 3075 3075 3525 3075 3525 3525 3075 3525 +-6 +6 2925 3525 4575 4275 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3000 4200 3000 3600 4500 3600 4500 4200 3000 4200 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 3075 4125 3075 3675 3525 3675 3525 4125 3075 4125 +4 1 0 50 -1 14 12 3.1416 4 165 1200 3750 3900 pvssick_px\001 +-6 +6 2925 4125 4575 4875 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3000 4800 3000 4200 4500 4200 4500 4800 3000 4800 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 3075 4725 3075 4275 3525 4275 3525 4725 3075 4725 +4 1 0 50 -1 14 12 3.1416 4 165 1200 3750 4500 pvddick_px\001 +-6 +6 2925 4725 4575 5475 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3000 5400 3000 4800 4500 4800 4500 5400 3000 5400 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 3075 5325 3075 4875 3525 4875 3525 5325 3075 5325 +-6 +6 2925 5325 4575 6075 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3000 6000 3000 5400 4500 5400 4500 6000 3000 6000 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 3075 5925 3075 5475 3525 5475 3525 5925 3075 5925 +-6 +6 8625 2925 10275 3675 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 10200 3000 10200 3600 8700 3600 8700 3000 10200 3000 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 10125 3075 10125 3525 9675 3525 9675 3075 10125 3075 +-6 +6 8625 3525 10275 4275 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 10200 3600 10200 4200 8700 4200 8700 3600 10200 3600 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 10125 3675 10125 4125 9675 4125 9675 3675 10125 3675 +4 1 0 50 -1 14 12 0.0000 4 165 1200 9450 3900 pvddeck_px\001 +-6 +6 8625 4125 10275 4875 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 10200 4200 10200 4800 8700 4800 8700 4200 10200 4200 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 10125 4275 10125 4725 9675 4725 9675 4275 10125 4275 +4 1 0 50 -1 14 12 0.0000 4 165 1200 9450 4500 pvsseck_px\001 +-6 +6 8625 4725 10275 5475 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 10200 4800 10200 5400 8700 5400 8700 4800 10200 4800 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 10125 4875 10125 5325 9675 5325 9675 4875 10125 4875 +4 1 0 50 -1 14 12 0.0000 4 165 720 9450 5100 pck_px\001 +-6 +6 8625 5325 10275 6075 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 10200 5400 10200 6000 8700 6000 8700 5400 10200 5400 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 10125 5475 10125 5925 9675 5925 9675 5475 10125 5475 +-6 +6 8625 5925 10275 6675 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 10200 6000 10200 6600 8700 6600 8700 6000 10200 6000 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 10125 6075 10125 6525 9675 6525 9675 6075 10125 6075 +-6 +6 5625 6525 6375 8175 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 6300 8100 5700 8100 5700 6600 6300 6600 6300 8100 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 6225 8025 5775 8025 5775 7575 6225 7575 6225 8025 +4 1 0 50 -1 14 12 4.7124 4 165 1200 6000 7350 pvddick_px\001 +-6 +6 6225 6525 6975 8175 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 6900 8100 6300 8100 6300 6600 6900 6600 6900 8100 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 6825 8025 6375 8025 6375 7575 6825 7575 6825 8025 +4 1 0 50 -1 14 12 4.7124 4 165 1200 6600 7350 pvssick_px\001 +-6 +6 6825 6525 7575 8175 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 7500 8100 6900 8100 6900 6600 7500 6600 7500 8100 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 7425 8025 6975 8025 6975 7575 7425 7575 7425 8025 +-6 +6 7425 6525 8175 8175 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 8100 8100 7500 8100 7500 6600 8100 6600 8100 8100 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 8025 8025 7575 8025 7575 7575 8025 7575 8025 8025 +-6 +6 5025 6525 5775 8175 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5700 8100 5100 8100 5100 6600 5700 6600 5700 8100 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 5625 8025 5175 8025 5175 7575 5625 7575 5625 8025 +-6 +6 8025 6525 8775 8175 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 8700 8100 8100 8100 8100 6600 8700 6600 8700 8100 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 8625 8025 8175 8025 8175 7575 8625 7575 8625 8025 +-6 +6 4425 6525 5175 8175 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5100 8100 4500 8100 4500 6600 5100 6600 5100 8100 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 5025 8025 4575 8025 4575 7575 5025 7575 5025 8025 +-6 +6 8625 2325 10275 3075 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 10200 2400 10200 3000 8700 3000 8700 2400 10200 2400 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 10125 2475 10125 2925 9675 2925 9675 2475 10125 2475 +-6 +6 2925 5925 4575 6675 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3000 6600 3000 6000 4500 6000 4500 6600 3000 6600 +2 2 0 0 1 1 70 -1 30 0.000 0 0 -1 0 0 5 + 3075 6525 3075 6075 3525 6075 3525 6525 3075 6525 +-6 +6 -2475 3825 -1125 4575 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 7 + -1800 4500 -2400 4500 -2400 4125 -2175 3900 -1200 3900 -1200 4500 + -1800 4500 +4 1 0 50 -1 18 14 0.0000 4 225 840 -1800 4275 pck_px\001 +-6 +2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + -6600 2400 -5400 2400 -5400 3000 -6600 3000 -6600 2400 +2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + -4800 2400 -3600 2400 -3600 3000 -4800 3000 -4800 2400 +2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + -3000 2400 -1800 2400 -1800 3000 -3000 3000 -3000 2400 +2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + -1200 2400 0 2400 0 3000 -1200 3000 -1200 2400 +2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 600 2400 1800 2400 1800 3000 600 3000 600 2400 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 7 + -6000 4500 -6600 4500 -6600 4125 -6375 3900 -5400 3900 -5400 4500 + -6000 4500 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 7 + -4200 4500 -4800 4500 -4800 4125 -4575 3900 -3600 3900 -3600 4500 + -4200 4500 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + -6000 3000 -6000 3900 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + -4200 3000 -4200 3900 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + -2400 3000 -3900 3900 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + -600 3000 -1800 3900 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1200 3000 1200 3900 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 7 + -6000 7200 -6600 7200 -6600 6825 -6375 6600 -5400 6600 -5400 7200 + -6000 7200 +2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + -6600 7500 -5400 7500 -5400 8100 -6600 8100 -6600 7500 +2 2 0 1 0 0 60 -1 10 0.000 0 0 -1 0 0 5 + 5100 3000 8100 3000 8100 6000 5100 6000 5100 3000 +2 2 0 1 0 1 50 -1 -1 0.000 0 0 -1 0 0 5 + 3000 900 10200 900 10200 8100 3000 8100 3000 900 +2 1 0 4 0 7 50 -1 -1 40.000 0 0 -1 0 0 7 + -2400 3150 -6675 3150 -6675 1875 -6225 1425 1875 1425 1875 3150 + -2400 3150 +2 1 0 4 0 7 50 -1 -1 40.000 0 0 -1 0 0 4 + -3300 1425 -3300 1875 -1500 1875 -1500 1425 +2 1 0 2 0 7 50 -1 -1 24.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + -3000 1875 -6000 2400 +2 1 0 2 0 7 50 -1 -1 24.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + -2850 1875 -4200 2400 +2 1 0 2 0 7 50 -1 -1 24.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + -2400 1875 -2400 2400 +2 1 0 2 0 7 50 -1 -1 24.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + -2100 1875 -600 2400 +2 1 0 2 0 7 50 -1 -1 24.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + -1650 1875 1200 2400 +2 1 0 4 0 7 50 -1 -1 40.000 0 0 -1 0 0 7 + 1200 5100 0 5100 0 4275 375 3900 2400 3900 2400 5100 + 1200 5100 +2 1 0 4 0 7 50 -1 -1 40.000 0 0 -1 0 0 4 + 600 3900 600 4275 1800 4275 1800 3900 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + 900 4275 600 4800 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + 1200 4275 1200 4800 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + 1500 4275 1800 4800 +4 0 0 50 -1 14 16 0.0000 4 210 1980 -5100 6975 Cell (Model)\001 +4 0 0 50 -1 12 16 0.0000 4 150 1320 -5100 7875 Instance\001 +4 1 0 50 -1 18 14 0.0000 4 225 630 -6000 4275 pi_px\001 +4 1 0 50 -1 18 14 0.0000 4 180 720 -4200 4275 po_px\001 +4 1 0 50 -1 16 14 0.0000 4 210 540 -6000 2775 p_a0\001 +4 1 0 50 -1 16 14 0.0000 4 165 600 -4200 2775 p_ovr\001 +4 1 0 50 -1 16 14 0.0000 4 165 540 -2400 2775 p_ng\001 +4 1 0 50 -1 16 14 0.0000 4 225 510 -600 2775 p_ck\001 +4 1 0 50 -1 16 14 0.0000 4 120 465 1200 2775 core\001 +4 1 0 50 -1 16 14 0.0000 4 225 795 -6000 7875 i_name\001 +4 1 0 50 -1 18 14 0.0000 4 180 975 -6000 6975 m_name\001 +4 1 0 50 -1 14 18 0.0000 4 135 900 6525 4575 coeur\001 +4 1 0 50 -1 18 14 0.0000 4 180 1035 -2400 1725 amd2901\001 +4 1 0 50 -1 18 14 0.0000 4 135 660 1200 4125 coeur\001 diff --git a/documentation/UsersGuide/images/chip-structure-1.png b/documentation/UsersGuide/images/chip-structure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8af23393fa661928139f644e3357d496fbb7856e GIT binary patch literal 9949 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 Ra|B$`6ny#k>3{ch{{?nPbe8}C literal 0 HcmV?d00001 diff --git a/documentation/UsersGuide/socstyle.tex b/documentation/UsersGuide/socstyle.tex index 21f564fa..c2577ee7 100644 --- a/documentation/UsersGuide/socstyle.tex +++ b/documentation/UsersGuide/socstyle.tex @@ -78,7 +78,7 @@ \renewcommand{\sectionmark}[1]{\markboth{\thesection\ #1}{\thesection\ #1}} \renewcommand{\subsectionmark}[1]{} \lhead[]{Documentation \SoC} - \rhead[]{March 2014} + \rhead[]{March 2015} \lfoot[]{\UPMC/\LIP/\SoC} \rfoot[]{\thepage} \cfoot[]{} diff --git a/documentation/examples/AM2901/.coriolis2/kite.py b/documentation/examples/AM2901/.coriolis2/kite.py new file mode 100644 index 00000000..6332c785 --- /dev/null +++ b/documentation/examples/AM2901/.coriolis2/kite.py @@ -0,0 +1,4 @@ + +from Hurricane import DebugSession + +#DebugSession.addToTrace( kite.getCell().getNet( 'f_i(3)' ) ) diff --git a/documentation/examples/AM2901/.coriolis2/settings.py b/documentation/examples/AM2901/.coriolis2/settings.py new file mode 100644 index 00000000..4a1aed48 --- /dev/null +++ b/documentation/examples/AM2901/.coriolis2/settings.py @@ -0,0 +1,31 @@ + +# -*- Mode:Python -*- + + +defaultStyle = 'Alliance.Classic [black]' + +parametersTable = \ + ( ('misc.catchCore' , TypeBool , False ) + , ('misc.info' , TypeBool , False ) + , ('misc.paranoid' , TypeBool , False ) + , ('misc.bug' , TypeBool , False ) + , ('misc.logMode' , TypeBool , False ) + , ('misc.verboseLevel1' , TypeBool , False ) + , ('misc.verboseLevel2' , TypeBool , True ) + , ('misc.traceLevel' , TypeInt , 1000 ) + , ('etesian.spaceMargin' , TypePercentage, 5.0 ) + , ('etesian.aspectRatio' , TypePercentage, 100.0 ) + # Kite parameters. + , ("kite.eventsLimit" , TypeInt , 1000000 ) + , ('katabatic.topRoutingLayer', TypeString , 'METAL5') + , ("kite.hTracksReservedLocal", TypeInt , 4 ) + , ("kite.vTracksReservedLocal", TypeInt , 3 ) + ) + +#import os +# +#print ' o Cleaning up ClockTree previous run.' +#for fileName in os.listdir('.'): +# if fileName.endswith('.ap') or (fileName.find('_clocked.') >= 0): +# print ' - <%s>' % fileName +# os.unlink(fileName) diff --git a/documentation/examples/AM2901/.coriolis2/techno.py b/documentation/examples/AM2901/.coriolis2/techno.py new file mode 100644 index 00000000..3444c29b --- /dev/null +++ b/documentation/examples/AM2901/.coriolis2/techno.py @@ -0,0 +1,2 @@ +symbolicTechno = 'cmos' +realTechno = 'hcmos9' diff --git a/documentation/examples/AM2901/CMakeLists.txt b/documentation/examples/AM2901/CMakeLists.txt index f53d027f..905beb98 100644 --- a/documentation/examples/AM2901/CMakeLists.txt +++ b/documentation/examples/AM2901/CMakeLists.txt @@ -8,6 +8,10 @@ muxe.vst muxs.vst ram.vst - design.py - DESTINATION ${examplesInstallDir}/AM2901 ) + amd2901_chip.py DESTINATION ${examplesInstallDir}/AM2901 ) + install ( FILES doChip.py PERMISSIONS OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE + OWNER_READ GROUP_READ WORLD_READ + OWNER_WRITE + DESTINATION ${examplesInstallDir}/AM2901 ) + install ( DIRECTORY .coriolis2 DESTINATION ${examplesInstallDir}/AM2901 ) diff --git a/documentation/examples/AM2901/amd2901_chip.py b/documentation/examples/AM2901/amd2901_chip.py new file mode 100644 index 00000000..ba638662 --- /dev/null +++ b/documentation/examples/AM2901/amd2901_chip.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + + +chip = { 'pads.south' : [ 'p_a3' , 'p_a2', 'p_a1', 'p_r0', 'p_vddick0', 'p_vssick0', 'p_a0' , 'p_i6', 'p_i8' , 'p_i7' , 'p_r3' ] + , 'pads.east' : [ 'p_zero', 'p_i0', 'p_i1', 'p_i2', 'p_vddeck0', 'p_vsseck0', 'p_q3' , 'p_b0', 'p_b1' , 'p_b2' , 'p_b3' ] + , 'pads.north' : [ 'p_noe' , 'p_y3', 'p_y2', 'p_y1', 'p_y0' , 'p_vddeck1', 'p_vsseck1', 'p_np', 'p_ovr', 'p_cout', 'p_ng' ] + #, 'pads.west' : [ 'p_i5', 'p_i3', 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2', 'p_d3' , 'p_q0' , 'p_f3' ] + , 'pads.west' : [ 'p_cin' , 'p_i4', 'p_i5', 'p_i3', 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2', 'p_d3' , 'p_q0' , 'p_f3' ] + , 'core.size' : ( 1500, 1500 ) + , 'chip.size' : ( 3000, 3000 ) + , 'chip.clockTree' : True + } diff --git a/documentation/examples/AM2901/design.py b/documentation/examples/AM2901/design.py deleted file mode 100755 index faa5ff8e..00000000 --- a/documentation/examples/AM2901/design.py +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/env python - -try: - import sys - import traceback - import os.path - import optparse - import Cfg - import Hurricane - from Hurricane import DbU - from Hurricane import UpdateSession - from Hurricane import Breakpoint - from Hurricane import Transformation - from Hurricane import Instance - import Viewer - import CRL - from helpers import ErrorMessage - import Nimbus - import Metis - import Mauka - import Katabatic - import Kite - import Unicorn - import placeandroute -except ImportError, e: - serror = str(e) - if serror.startswith('No module named'): - module = serror.split()[-1] - print '[ERROR] The <%s> python module or symbol cannot be loaded.' % module - print ' Please check the integrity of the package.' - if str(e).find('cannot open shared object file'): - library = serror.split(':')[0] - print '[ERROR] The <%s> shared library cannot be loaded.' % library - print ' Under RHEL 6, you must be under devtoolset-2.' - print ' (scl enable devtoolset-2 bash)' - sys.exit(1) -except Exception, e: - print '[ERROR] A strange exception occurred while loading the basic Coriolis/Python' - print ' modules. Something may be wrong at Python/C API level.\n' - print ' %s' % e - sys.exit(2) - - -# Check that all the instances have been placed by Mauka. -def checkForUnplaceds ( cell ): - unplaceds = [] - for instance in cell.getInstances(): - if instance.getPlacementStatus() == Instance.PlacementStatus.UNPLACED: - unplaceds += [ instance ] - if unplaceds: - message = [ 'Some instances are still unplaceds:' ] - for instance in unplaceds: - message += [ '<%s> of model <%s>'%(str(instance.getName()) - ,str(instance.getMasterCell().getName())) ] - raise ErrorMessage( 3, message ) - return - - -# Small wrapper to display breakpoints, when in graphic mode only. -def breakpoint ( editor, level, message ): - if editor: - editor.fit() - editor.refresh() - Breakpoint.stop( level, message ) - return - - -def ScriptMain ( cell=None ): - # Force removal of any previouly generated placement (.ap files) - # as they would prevent the the placer to run again. - # This is a little bit inconvenient, but will change in the future. - print ' o Cleaning up any previous run.' - for fileName in os.listdir('.'): - if fileName.endswith('.ap'): - print ' - <%s>' % fileName - os.unlink(fileName) - - editor = None - if globals().has_key('__editor'): - print ' o Editor detected, running in graphic mode.' - editor = __editor - - Cfg.Configuration.pushDefaultPriority(Cfg.Parameter.Priority.CommandLine) - Cfg.getParamBool('misc.verboseLevel1').setBool(True) - Cfg.getParamBool('misc.verboseLevel2').setBool(True) - Cfg.Configuration.popDefaultPriority() - - errorCode = 0 - framework = CRL.AllianceFramework.get() - - padHeight = DbU.fromLambda( 400.0) - padWidth = DbU.fromLambda( 200.0) - coreSide = DbU.fromLambda(1400.0) - - # Cell must be loaded *before* opening the UpdateSession. - print ' o Placing .' - modelCoeur = framework.getCell('coeur',CRL.Catalog.State.Logical) - - UpdateSession.open() - try: - modelCoeur.setAbutmentBox( Hurricane.Box( DbU.fromLambda(0) - , DbU.fromLambda(0) - , coreSide - , coreSide - ) ) - # Cannot place a rail if at least one instance is placed. - # (to compute the orientation of the cells rows) - #placeandroute.pyAlimVerticalRail( modelCoeur, coreSide/DbU.fromLambda(5.0*2) ) - - except Exception, e: - print e; errorCode = 1 - - # For the geometrical modifications to be taken into account, we must - # close this UpdateSession now. So the chip will see the core correctly. - UpdateSession.close() - if errorCode: sys.exit(errorCode) - - print ' o Placing .' - amd2901 = framework.getCell('amd2901',CRL.Catalog.State.Logical) - if editor: editor.setCell(amd2901) - - UpdateSession.open() - try: - - chipSide = 11*padWidth + 2*padHeight # Le chip est carre, avec 11 plots par face. - abutmentBoxChip = Hurricane.Box( DbU.fromLambda(0.0) - , DbU.fromLambda(0.0) - , chipSide - , chipSide - ) - amd2901.setAbutmentBox( abutmentBoxChip ) - - instanceCoeur = amd2901.getInstance( 'core' ) - instanceCoeur.setTransformation(Hurricane.Transformation( (chipSide-coreSide)/2 - , (chipSide-coreSide)/2 - , Transformation.Orientation.ID ) ) - instanceCoeur.setPlacementStatus( Instance.PlacementStatus.PLACED ) - - # Placing Pads - southPads = [ 'p_a3' , 'p_a2', 'p_a1', 'p_r0', 'p_vddick0', 'p_vssick0', 'p_a0' , 'p_i6', 'p_i8' , 'p_i7' , 'p_r3' ] - eastPads = [ 'p_zero', 'p_i0', 'p_i1', 'p_i2', 'p_vddeck0', 'p_vsseck0', 'p_q3' , 'p_b0', 'p_b1' , 'p_b2' , 'p_b3' ] - northPads = [ 'p_noe' , 'p_y3', 'p_y2', 'p_y1', 'p_y0' , 'p_vddeck1', 'p_vsseck1', 'p_np', 'p_ovr', 'p_cout', 'p_ng' ] - westPads = [ 'p_cin' , 'p_i4', 'p_i5', 'p_i3', 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2', 'p_d3' , 'p_q0' , 'p_f3' ] - - for (key,listPads) in {'south':southPads, 'east':eastPads, 'north':northPads, 'west':westPads}.iteritems(): - print ' o Pads on %s side:' %key - for ipad in range(len(listPads)): - pad = amd2901.getInstance( listPads[ipad] ) - print ' - Placing pad: <%s> (model:<%s>).' % (listPads[ipad],str(pad.getMasterCell().getName())) - - # south - if key == 'south' : - xpad = abutmentBoxChip.getXMin() + padHeight + ipad*(padWidth) - ypad = abutmentBoxChip.getYMin() + padHeight - pad.setTransformation( Hurricane.Transformation( xpad, ypad, Transformation.Orientation.MY) ) - - # east - if key == 'east' : - xpad = abutmentBoxChip.getXMax() - padHeight - ypad = padHeight + padWidth + ipad*(padWidth) - pad.setTransformation( Hurricane.Transformation( xpad, ypad, Transformation.Orientation.R3) ) - - # north - if key == 'north' : - xpad = padHeight + ipad*(padWidth) - ypad = abutmentBoxChip.getYMax() - padHeight - pad.setTransformation( Hurricane.Transformation( xpad, ypad, Transformation.Orientation.ID) ) - - # west - if key == 'west' : - xpad = padHeight - ypad = padHeight + ipad*(padWidth) - pad.setTransformation( Hurricane.Transformation( xpad, ypad, Transformation.Orientation.R1) ) - - pad.setPlacementStatus( Instance.PlacementStatus.PLACED ) - - except ErrorMessage, e: - print e; errorCode = e.code - except Exception, e: - print '\n\n', e; errorCode = 1 - traceback.print_tb(sys.exc_info()[2]) - - UpdateSession.close() - if errorCode: sys.exit(errorCode) - - breakpoint( editor, 1, 'Chip After Pad Placement' ) - - try: - # Now run the tools. - coeur = framework.getCell('coeur',CRL.Catalog.State.Logical) - - mauka = Mauka.MaukaEngine.create(coeur) - mauka.run() - mauka.destroy() - - breakpoint( editor, 1, 'Core After Standard Cell Placement' ) - - placeandroute.pyAlimConnectors(coeur) - - # This is gross. It's the ghost of Wu Yifei and his demonic code... - # Will not be needed in the future (dynamic detection based on the - # transformations). - for pad in southPads: placeandroute.pad_south += [ amd2901.getInstance(pad) ] - for pad in northPads: placeandroute.pad_north += [ amd2901.getInstance(pad) ] - for pad in eastPads: placeandroute.pad_east += [ amd2901.getInstance(pad) ] - for pad in westPads: placeandroute.pad_west += [ amd2901.getInstance(pad) ] - - placeandroute.pyPowerRing( amd2901, amd2901.getInstance('core'), 3 ) - placeandroute.pyRouteCk ( amd2901, amd2901.getNet('ckc') ) - breakpoint( editor, 1, 'Core After Clock & Power Routing' ) - - kite = Kite.KiteEngine.create( amd2901 ) - kite.runGlobalRouter( Kite.KtBuildGlobalRouting ) - kite.loadGlobalRouting( Katabatic.EngineLoadGrByNet, [] ) - kite.layerAssign( Katabatic.EngineNoNetLayerAssign ) - kite.runNegociate() - breakpoint( editor, 1, 'Routing done, but router still active for inspection.' ) - kite.finalizeLayout() - kite.destroy() - - # Write back layout to disk if everything has gone fine. - # Must write all the sub-blocks of the core but *not* the - # standard cell (mainly the feed-through). - for instance in modelCoeur.getInstances(): - masterCell = instance.getMasterCell() - if not masterCell.isTerminal(): - framework.saveCell( masterCell, CRL.Catalog.State.Physical ) - - framework.saveCell( modelCoeur, CRL.Catalog.State.Physical ) - framework.saveCell( amd2901 , CRL.Catalog.State.Physical ) - - except ErrorMessage, e: - print e; errorCode = e.code - except Exception, e: - print '\n\n', e; errorCode = 1 - traceback.print_tb(sys.exc_info()[2]) - - if editor: editor.setCell(amd2901) - - return 0 - - -if __name__ == '__main__': - ScriptMain() - - sys.exit(0) diff --git a/documentation/examples/AM2901/doChip.py b/documentation/examples/AM2901/doChip.py new file mode 100755 index 00000000..4a0eed7b --- /dev/null +++ b/documentation/examples/AM2901/doChip.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python + +try: + import sys + import traceback + import os.path + import optparse + import Cfg + import Hurricane + from Hurricane import DbU + from Hurricane import UpdateSession + from Hurricane import Breakpoint + from Hurricane import Transformation + from Hurricane import Instance + import Viewer + import CRL + from helpers import ErrorMessage + import Nimbus + import Metis + import Mauka + import Katabatic + import Kite + import Unicorn + import plugins.ChipPlugin + import plugins.RSavePlugin +except ImportError, e: + serror = str(e) + if serror.startswith('No module named'): + module = serror.split()[-1] + print '[ERROR] The <%s> python module or symbol cannot be loaded.' % module + print ' Please check the integrity of the package.' + sys.exit(1) + if str(e).find('cannot open shared object file'): + library = serror.split(':')[0] + print '[ERROR] The <%s> shared library cannot be loaded.' % library + print ' Under RHEL 6, you must be under devtoolset-2.' + print ' (scl enable devtoolset-2 bash)' + sys.exit(1) +except Exception, e: + print '[ERROR] A strange exception occurred while loading the basic Coriolis/Python' + print ' modules. Something may be wrong at Python/C API level.\n' + print ' %s' % e + sys.exit(2) + + +DoPlacement = 0x0001 +DoRouting = 0x0002 +AllStages = DoPlacement|DoRouting + +framework = CRL.AllianceFramework.get() + + +def ScriptMain ( **kw ): + success = False + doStages = AllStages + if kw.has_key('doStages'): + doStages = kw['doStages'] + try: + cell, editor = plugins.kwParseMain( **kw ) + + if doStages & DoPlacement: + success = plugins.ChipPlugin.ScriptMain( **kw ) + if not success: return False + + if doStages & DoRouting: + routingNets = [] + kite = Kite.KiteEngine.create( cell ) + #kite.printConfiguration() + + kite.runGlobalRouter ( Kite.KtBuildGlobalRouting ) + kite.loadGlobalRouting( Katabatic.EngineLoadGrByNet, routingNets ) + kite.layerAssign ( Katabatic.EngineNoNetLayerAssign ) + kite.runNegociate () + success = kite.getToolSuccess() + kite.finalizeLayout() + kite.destroy() + cell.setName( cell.getName()+'_kite' ) + framework.saveCell( cell, CRL.Catalog.State.Logical ) + + plugins.RSavePlugin.ScriptMain( **kw ) + + except Exception, e: + print e + + return success + + +if __name__ == '__main__': + parser = optparse.OptionParser() + parser.add_option( '-c', '--cell' , type='string', dest='cell' , help='The name of the chip to build, whithout extension.') + parser.add_option( '-s', '--script', type='string', dest='script' , help='The name of a Python script, without extension.') + parser.add_option( '-v', '--verbose' , action='store_true', dest='verbose' , help='First level of verbosity.') + parser.add_option( '-V', '--very-verbose' , action='store_true', dest='veryVerbose', help='Second level of verbosity.') + parser.add_option( '-p', '--place' , action='store_true', dest='doPlacement', help='Perform chip placement step only.') + parser.add_option( '-r', '--route' , action='store_true', dest='doRouting' , help='Perform routing step only.') + (options, args) = parser.parse_args() + + + doStages = 0 + if options.verbose: Cfg.getParamBool('misc.verboseLevel1').setBool(True) + if options.veryVerbose: Cfg.getParamBool('misc.verboseLevel2').setBool(True) + if options.doPlacement: doStages |= DoPlacement + if options.doRouting: doStages |= DoRouting + if not doStages: doStages = AllStages + + kw = { 'doStages':doStages } + if options.script: + try: + module = __import__( options.script, globals(), locals() ) + if not module.__dict__.has_key('ScriptMain'): + print '[ERROR] Script module <%s> do not contains a ScripMain() function.' % options.script + sys.exit(1) + + cell = module.__dict__['ScriptMain']( **kw ) + kw['cell'] = cell + + except ImportError, e: + module = str(e).split()[-1] + + print '[ERROR] The <%s> script cannot be loaded.' % module + print ' Please check your design hierarchy.' + sys.exit(1) + except Exception, e: + print '[ERROR] A strange exception occurred while loading the Python' + print ' script <%s>. Please check that module for error:\n' % options.script + traceback.print_tb(sys.exc_info()[2]) + print ' %s' % e + sys.exit(2) + elif options.cell: + kw['cell'] = framework.getCell( options.cell, CRL.Catalog.State.Views ) + + success = ScriptMain( **kw ) + shellSuccess = 0 + if not success: shellSuccess = 1 + + sys.exit( shellSuccess )