592c098ab2
* New: In Commons, inspector support for std::pair<T,U>. * New: In Hurricane::Layer, ContactLayer & ViaLayer, support for non square VIAs. The hole (cut) remains square, but the various metal extensions can now be different in X and Y. The ::getEnclosure() method now takes a flag EnclosureH / EnclosureV. * New: In Hurricane::DbU, inspector support for: std::pair<DbU::Unit,DbU::Unit> std::array<DbU::Unit,3> Must be defined here as DbU do not exists yet in Commons.h * Bug: In Hurricane::Interval::getSize(), when the interval is "full span", do not return the difference between min and max, but directly DbU::Max. (the previous result was -1 !) * New: In CRL Core Python/Technology.py, support for non square VIAs in the configuration files. Applied to FreePDK 45. * New: In CRL::RoutingGauge, added a "symbolic" flag to tell if a gauge is for symbolic layout or not. Exported to Python. * New: In Anabatic::AutoHorizontal::updatePosition(), differentiated computation for soure or target taking account of the VIA extension in the right segment metal (due to non-square VIAs). * Change: In Anabatic::AutoHorizontal::_makeDogleg(), the dogleg is UP for HV gauges and DOWN for VH. * New: In Anabatic::AutoSegment::_initialize(), create a cache of the various extension length for each layer (viaToTop, viaToBottom, viaToSame). New implementation of getExtensionCap() using the previous cached extension table. See updatePositions(). New static functions to access the extension cache in the header: getViaTotopCap() ... * Change: In Anabatic::AutoSegment, in various update methods, updateOrient() must always be called *before* updatePositions() as extensions are dependant on source/target. * New: In Anabatic::AutoSegment::getEndAxes() compute the position of the first source and last target position (center/axes) on an *aligned* set of segments. * New: In Anabatic::AutoSegment, add a new state flag SegAxisFixed to signal segments that can be put on only one track. Specific case to VH gauge for a M1 vertical terminal with a M2 vertical segment. The M2 is effectively bound to the M1 axis position. * Bug: In Anabatic::NetBuilderVH::_do_xG_xM1_xM3(), in case of E/W global and only one RoutingPad the connexion to the RoutingPad was duplicated. It was valid, but totally stupid. * Bug: In Anabatic::Session::_canonize(), for an aligned segment set, intersect the user constraints from all segments instead of only considering the canonical one. Issue a warning about too tight constraints only for symbolic gauges. It may be correct for the real ones. * New: In Katata::DataNegociate::update(), more accurate computation of the perpandicular free interval. Use segment extension cap calculation. Create a special case for fixed axis segments allowing them to find alternative free interval, try under source and under target as they are likely to be draggable segments. * Change: In Katana::Manipulator::relax(), use the extension cap value to compute the axis of the perpandicular segemnts. * Change: In Katana::Manipulator::moveUp(), now move up the whole set of aligned segments instead of just the canonical one. * Change: In Katana::NegociateWindow::loadRoutingPads(), more accurate TrackMarkers insertions for fixed terminals. * New: In Katana::RoutingEvent::Key::Compare::operator(), segments with fixed axis are processed prior to any others. * New: In Katana::RoutingEventLoop, store segment pointers instead of ids to generate more accurate error messages. * Change: In Katana::RoutingPlane::create(), perform local track assignment only for HV gauges. * Change: In Katana::SegmentFsm::_slackenLocal(), add a "dragMinimize" step in the automaton. Mutliple states transitions can occurs in a row if an action fails. * New: In Katana::Session::_toIntervalAxis(), normalize interval bounds so they are on track positions (by shrinking the interval). * Bug: In Katana::TrackMarker CTOR, the weigh computation was wrong. |
||
---|---|---|
anabatic | ||
bootstrap | ||
coloquinte | ||
crlcore | ||
cumulus | ||
documentation | ||
equinox | ||
etesian | ||
hurricane | ||
ispd | ||
katabatic | ||
katana | ||
kite | ||
knik | ||
lefdef | ||
mauka | ||
metis | ||
nimbus | ||
solstice | ||
stratus1 | ||
tutorial | ||
unicorn | ||
vlsisapd | ||
.gitignore | ||
Makefile | ||
README.rst |
README.rst
.. -*- Mode: rst -*- =============== Coriolis README =============== Coriolis is a free database, placement tool and routing tool for VLSI designs. Purpose ======= Coriolis provides several tools to perform the layout of VLSI circuits. Its main components are the Hurricane database, the Etesian placer and the Kite 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 scriptables. Documentation ============= The complete documentation is available here, both in pdf & html: ./documentation/_build/html/index.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://soc-extras.lip6.fr/en/coriolis/coriolis2-users-guide/ 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 is tasked to guess it's location and setup appropriatly the UNIX environment, then lauch ``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