5649a3b984
* 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). |
||
---|---|---|
anabatic | ||
bootstrap | ||
bora | ||
coloquinte | ||
crlcore | ||
cumulus | ||
documentation | ||
equinox | ||
etesian | ||
flute | ||
hurricane | ||
ispd | ||
karakaze | ||
katabatic | ||
katana | ||
kite | ||
knik | ||
lefdef | ||
mauka | ||
metis | ||
nimbus | ||
oroshi | ||
solstice | ||
stratus1 | ||
tutorial | ||
unicorn | ||
unittests | ||
vlsisapd | ||
.gitignore | ||
Makefile | ||
README.rst |
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