* Change: In AutoHorizontal::setDuSource() & ::setDuTarget() (& AutoVertical), check that the requested "du" is less than a pitch (this is not an upper bound). Issue a warning if not true. * Change: In AutoSegment::revalidate(), when passing the previous span interval to expandToMinLength(), if we are in creation stage, make it empty because it has no sense yet and can lead to a lock in a too narrow span. Change the coupled behavior of expandToMinLength() vs. unexpandToMinLength(), the call to "unexpand" will be done on AutoSegments that are flagged with SegAtMinArea, instead of using the return value of "expand". This way we control across multiple revalidate() if a segment can be "unexpanded". * Bug: In AutoSegment::expandToMinLength(), not only try to shift left if we are beyoond the max bound but also to the right if we are below the min bound. the span on the target and source were miscalculated, we must add the half-minimal distance to get the span inside the Track. * Change: In AutoSegment::isMiddleStack(), rename into isNearMinArea() as we check for any *small length* set of AutoSegments and not only the one part of a middle stack. In some rare instances, two aligned segments can nevertheless be too short. * Bug: In AutoSegment::reduceDoglegLayer(), when finding a reduced segment also reset it's duSource & duTarget because it will no longer be an isolated strip of metal. * Change: In AutoHorizontal::updateOrient(), when there is a source/target swap, no need to exchange the dxSource and dxTarget extentions. * Change: In AutoHorizontal::setDuSource() & ::setDuTarget(), check for du bigger than the pitch, which should never occur and display a warning. Same modification in AutoVertical. * Change: In Track::repair(), now invalidate the shifted segments to ensure cache coherency with the TrackElement. Do not take AutoSegment in non-preferred direction into account, and especially do not try to resize them. Now, invalidate the corrected segments (see below). * Change: In KatanaEngine::finalizeLayout(), move the track repair stage from here into NegociateWidow::run(). This way we avoid the false warning about segment overlap in the data-base final check. The false warning was because the AutoSegment where shifted but not invalidated/revalidated leading to a cache incoherency in the TrackElement. Now they *are* invalidated and updated. * Bug: In Track::checkMinArea(), do not check for minimal area when a segment is overlapping a same net neighbor. To avoid false minimum area violation warnings. |
||
---|---|---|
anabatic | ||
bootstrap | ||
bora | ||
coloquinte | ||
crlcore | ||
cumulus | ||
documentation | ||
equinox | ||
etesian | ||
flute | ||
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