* Update: In CRL/node600/phenitec/kite.py, update the routing gauge to the new format. So now we can use again SxLib-2M (channel routing SxLib for two metal technologies). * Change: In CRL::BlifParser, if a master cell is not found in the AllianceFramework, then try in the Blif supplied libraries. This is used to load the zero, one and tie cells. Add a Blif::getCell() static function to look into the Blif supplied libraries. * Change: In CRL::LefImport, sometimes there can be discrepencies between the LEF ROUTING layers and the Coriolis routing gauge. Now ignore routing layers that are *not* presents in the Coriolis gauge. * Change: In AnabaticEngine, moved routingMode attribute from KatanaEngine, as some setup operations needs it. * Change: In AutoSegment::canReduce(), allow fixed segments to be reduced if they are "jumpers" (turn+turn and top+top or bot+bot). This case arise on the edge of routing channels for fixed wires to connect terminals. * Change: In AutoSegment::getTopologicalinfos(), compute differently the (leftBound,rightBound) interval when in channel mode. In over-the-cell mode, this interval is the one of the whole GCells under the wire. In channel mode, for fixed wires (that is, verticals connecteds to cells) this interval is reduced to half the GCell height, on the connected side of said channel. This allows Manipulator::_insertToTrack() to issue disantangling requests (push left/push right) for fixed segments that are face to face in the channel. * Change: In Anabatic::Configuration CTOR, allow the cellGauge to have a different name from the routingGauge. Now if the cell gauge that should match the routing gauge is not found, fallback to the name set in "anabatic.cellGauge" parameter. Case occur when we try to match with CORE sites from LEF files. * Change: In Etesian::Configuration CTOR, same change as in the Anabatic configuration. * Change: In Anabatic::GCell::updateDensity(), never set the GoStraight flag in channel mode. This flag makes sense when there is at least 4 routing layers (so we have 2 contiguous free of blockages). * Bug: In Anabatic::Session::_getNearestGridpoint(), sometimes the nearest on grid point is outside the constraint box. Now force the point to remains inside constraints even if offgrid. * Change: In Katana::DataNegociate::update(), perpandiculars that are either reduced or in non-preferred routing direction should not trigger a bug message. * Change: In KatanaEngine::_check(), do not check for fixed, horizontal non-prefs AutoSegments in channel mode (avoid false bug display). * Bug: In Manipulator::_forceToTrack(), slighty shrink (-1) the interval to free. The intersection function of intervals returns true when the two intervals *exactly* touches (1.vMax == 2.vMin). But in this specific case, they are not *overlapping* and no action should be taken... * Bug: In Manipulator::_insertInTrack(), do not reject the track when we are overlapping a fixed vertical segment in channel mode. (Hmm, maybe already corrected by the previous one). * Change: In Katana::NegociateOverlapCost(), in channel mode, do not put two overlaping vertical fixed segments into infinite cost. This happens when two cell connected verticals are face to face in a channel. We want them negociated the track (by shrinking their length) instead of excluding it right away. * Change: In NegociateWindow::createTrackSegment(), in channel mode, do not attempt to create a track segment over a fixed and reduced AutoSegment. Do not attempt to put a non-preferred AutoSegment on a Track either. * Bug: In RoutingEvent::revalidate(), the number of availables tracks was badly computed when in the pure constraint case, when there was only one it was reporting zero. * Change: In TrackElements::TrackElements_Perpandicular::Locator, do not issue a bug when an non-pref or reduced AutoSegment do not have an associated TrackElement. * Change: In TrackSegmentCost::update(), do not issue a bug when a perpandicular is reduded or non-pref and do not have a TrackElement. |
||
---|---|---|
Seabreeze | ||
anabatic | ||
bootstrap | ||
bora | ||
coloquinte | ||
crlcore | ||
cumulus | ||
documentation | ||
equinox | ||
etesian | ||
flute | ||
foehn | ||
hurricane | ||
ispd | ||
karakaze | ||
katabatic | ||
katana | ||
kite | ||
knik | ||
lefdef | ||
mauka | ||
metis | ||
nimbus | ||
nix | ||
oroshi | ||
solstice | ||
stratus1 | ||
tutorial | ||
unicorn | ||
unittests | ||
vlsisapd | ||
.gitignore | ||
COPYRIGHT.rst | ||
LICENSE.rst | ||
Makefile | ||
README.rst | ||
SUPPORT.rst | ||
compat.nix | ||
default.nix | ||
flake.lock | ||
flake.nix | ||
shell.nix |
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 3. * 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://gitlab.lip6.fr/vlsi-eda/coriolis.git ego@home:src$ cd coriolis Then, build the tool: :: ego@home:coriolis$ make install If you encounter issues, please consult SUPPORT.rst for tips. 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