Go to file
Jean-Paul Chaput 5649a3b984 Second version of the antenna effect protection.
* Change: In EtesianEngine::globalPlace(), disable the call to
    antennaProtect(). First reason is that, after all, Coloquinte
    do not handle so well the resizing of the cells "on the fly",
    it overspill the boundaries sometimes. Second reason is that
    as we cannot know the routing tree at this stage, we will not
    be able to choose the correct points for diode insertions.
    We only have a Steiner tree wich may not be the same as a
    density driven Dijkstra.
* Change: In Etesian::Area, the Occurrence to the Instances where
    not stored in a uniform way. Some where starting from the
    placed sub-block, some where starting from the top level
    (corona), making their processing (and remembering it) tricky.
    Now, they are all expressed from the top cell (corona).
    The coordinate system is now systematically the one of the
    top block (*not* the block).
      Create various overloaded functions EtesianEngine::toCell()
    and EtesianEngine::toBlock() to ease Occurrence & coordinate
    translations.
* New: In Etesian::Slice::createDiodeUnder(), add a X position hint.
    Search is done by going through the whole slice range and
    minimizing the distance to the hint. If it starts to be too
    slow, we may optimize.
* Bug: In EtesianEngine::toColoquinte(), the placement of the top
    level external pins was not taken into account (this at last
    explain their weird positioning).
* New: AnabaticEngine::antennaProtect(), new algorithm to avoid
    antenna effect. This step must be done *after* global routing
    and *before* detailed routing. This way we have access to the
    real routing and can mend it (along with the netlist) to
    insert diodes at the rigth points.
      From the global routing we build clusters (DiodeCluster) of
    RoutingPads connected through a set of wire whose total length
    is below the antenna effect threshold. Long wires connecting the
    clusters are also tagged because we need to put a diode between
    them and the first RoutingPad of the cluster. This is to avoid
    a long METAL2 wire connecting to the RoutingPad before the diode is
    connected through METAL3 (in case of misalignment).
      This protection is not even enough. For *very long* wires, we
    needs to put *more* than one diode (this is to be implemented).
2021-01-27 11:38:00 +01:00
anabatic Second version of the antenna effect protection. 2021-01-27 11:38:00 +01:00
bootstrap Added utlity script bootstrap/resetDoc.sh to revert the generated doc. 2020-11-14 18:54:23 +01:00
bora Bug fix, reset Cell flags after unrouting an analog design. 2020-04-30 00:38:32 +02:00
coloquinte Add updators to modify cell sizes on the fly in Coloquinte. 2021-01-13 19:10:31 +01:00
crlcore Again, bug fix in the Inspector support, on getSlot<> template. 2021-01-08 12:43:47 +01:00
cumulus Add support for Antenna/Diode insertion in Etesian. 2021-01-13 19:36:20 +01:00
documentation Updated PDFs, November 13, 2020 (15:02). 2020-11-13 15:02:56 +01:00
equinox Compliance with Debian 10 Buster. 2020-03-19 18:18:35 +01:00
etesian Second version of the antenna effect protection. 2021-01-27 11:38:00 +01:00
flute Added support for loading user defined global routing in Anabatic. 2020-09-30 11:55:39 +02:00
hurricane Added HasAntenna flag to NetRoutingProperty. 2021-01-27 10:58:03 +01:00
ispd Various typos correction (courtesy of G. Gouvine). 2019-07-30 13:13:57 +02:00
karakaze Correct Cell object detection while reading Oceane parameters. 2020-05-27 16:11:53 +02:00
katabatic Documentation cleanup & rebuild. 2020-11-12 14:22:31 +01:00
katana Second version of the antenna effect protection. 2021-01-27 11:38:00 +01:00
kite Documentation cleanup & rebuild. 2020-11-12 14:22:31 +01:00
knik Documentation cleanup & rebuild. 2020-11-12 14:22:31 +01:00
lefdef Migrating doc from Sphinx towards Pelican. 2020-02-03 17:44:15 +01:00
mauka Compliance with Debian 10 Buster. 2020-03-19 18:18:35 +01:00
metis Compliance with Debian 10 Buster. 2020-03-19 18:18:35 +01:00
nimbus Compliance with Debian 10 Buster. 2020-03-19 18:18:35 +01:00
oroshi Documentation cleanup & rebuild. 2020-11-12 14:22:31 +01:00
solstice Compliance with Debian 10 Buster. 2020-03-19 18:18:35 +01:00
stratus1 Documentation cleanup & rebuild. 2020-11-12 14:22:31 +01:00
tutorial More PEP8 compliant Python code. Start rewrite Python/C++ wrappers. 2020-04-08 11:24:42 +02:00
unicorn Documentation cleanup & rebuild. 2020-11-12 14:22:31 +01:00
unittests Enhanced techno rule support. Inspector support bug fix. 2020-07-21 11:22:04 +02:00
vlsisapd Documentation cleanup & rebuild. 2020-11-12 14:22:31 +01:00
.gitignore Various bug corrections to pass the alliance-check-toolkit reference benchs. 2019-05-24 23:57:22 +02:00
Makefile Enabling the user to choose the devtoolset it needs. 2019-03-04 14:20:13 +01:00
README.rst Update doc link for the new Pelican generated one. 2020-02-10 13:38:06 +01:00

README.rst

.. -*- Mode: rst -*-


===============
Coriolis README
===============

Coriolis is a free database, placement tool and routing tool for VLSI design.


Purpose
=======

Coriolis provides several tools to perform the layout of VLSI circuits.  Its
main components are the Hurricane database, the Etesian placer and the Katana
router, but other tools can use the Hurricane database and the parsers
provided.

The user interface <cgt> is the prefered way to use Coriolis, but all
Coriolis tools are Python modules and thus scriptable.


Documentation
=============

The complete documentation is available here, both in pdf & html:

   ./documentation/output/html
   ./documentation/UsersGuide/UsersGuide.pdf

The documentation of the latest *stable* version is also
available online. It may be quite outdated from the *devel*
version.

    https://www-soc.lip6.fr/sesi-docs/coriolis2-docs/coriolis2/en/latex/users-guide/UsersGuide.pdf


Building Coriolis
=================

To build Coriolis, ensure the following prerequisites are met:

* Python 2.7.
* cmake.
* boost.
* bison & flex.
* Qt 4 or 5.
* libxml2.
* RapidJSON
* A C++11 compliant compiler.

The build system relies on a fixed directory tree from the root
of the user currently building it. Thus first step is to get a clone of
the repository in the right place. Proceed as follow: ::

   ego@home:~$ mkdir -p ~/coriolis-2.x/src/support
   ego@home:~$ cd ~/coriolis-2.x/src/support
   ego@home:~$ git clone http://github.com/miloyip/rapidjson
   ego@home:~$ git checkout ec322005072076ef53984462fb4a1075c27c7dfd
   ego@home:~$ cd ~/coriolis-2.x/src
   ego@home:src$ git clone https://www-soc.lip6.fr/git/coriolis.git
   ego@home:src$ cd coriolis

If you want to use the *devel* branch: ::

    ego@home:coriolis$ git checkout devel

Then, build the tool: ::

    ego@home:coriolis$ make install

Coriolis gets installed at the root of the following tree: ::

    ~/coriolis-2.x/<OS>.<DISTRIB>/Release.Shared/install/

Where ``<OS>`` is the name of your operating system and ``<DISTRIB>`` your
distribution.


Using Coriolis
==============

The Coriolis main interface can be launched with the command: ::

    ego@home:~: ~/coriolis-2.x/<OS>.<DISTRIB>/Release.Shared/install/bin/coriolis

The ``coriolis`` script detects its location and setups the UNIX
environment appropriately, then lauches ``cgt`` (or *any* command, with the
``--run=<COMMAND>`` option).

Conversely, you can setup the current shell environement for Coriolis by 
using the helper ``coriolisEnv.py``, then run any Coriolis tool: ::

    ego@home:~$ eval `~/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py`
    ego@home:~$ cgt -V