* New: In CRL Core, AllianceFramework::getCell(), adds a new Catalog::State
flags to request the loading of a "foreign" cell. That is, a Cell which
is *not* in the Alliance libraries, but in *any* library starting from
the root library. This is a temporary hack to allow the Blif parser to
run.
* New: In CRL Core, RoutingGauge::getHorizontalGauge() and
RoutingGauge::getVerticalGauge() to avoid relying on either metal names
or depth to know the vertical and horizontal default routing
informations. They return the metal layers gauges *closests* to the
substrate which are likely to have the lesser pitch.
* New: In CRL Core, BlifParser, new configuration parameters:
"etesian.cell.zero" & "etesian.cell.one" to figure out what are the
tielow and tiehigh cells (instead of having the ones from sxlib
hardwired).
* New: In Etesian, add support for non-square routing pitchs, that is,
the lowest vertical and horizontal pitches are not equal. Needs to
work with two pitches (H & V) instead of one.
The Configuration associated class now also provides the
RoutingGauge (not only the CellGauge).
Use a new Configuration setting "etesian.feedNames" to set up
the names of the filler cells. This a string of comma separated
cell names.
* New: In Anabatic, Session::_getNearestGridPoint(), use the new
non-square grid scheme.
* New: In CRL Core, added LEF importer for real technologies. This is
still a work in progress. Exported in Python interface.
* Bug: In CRL Core, CellGauge::getRecord() correctly display DbU
attributes.
* Change: In Unicorn, mofificate ImportCell and ImportCellDialog to
support the LEF importer. Add a template layer so we can work with
loaders returning Cell* or Library*.
* Change: In Unicorn::UnicornGui::getCellFromDb(), in addition to the
Alliance loader, uses the DataBase::getCell() too (for Cells that
are *not* in Alliance).
* Bug: In Kite::NegociateWidow and Katana::NegociateWindow, when creating
the TrackSegment from the AutoSegment, we put it on the nearest track
from its current position. But it may happens that the nearest track
is outside the terminal constraint interval (in the case of "nsxlib").
Add the terminal constraint interval check.
This was not affecting the routing result because the segment was
put inside the right interval afterwards. It was only generating
disgraceful transient error messages...
* Change: In CRL Core, in coriolis2/etc the file an directory structure
describing the technonolies is modified.
Before, one technology was split in two: the symbolic part that
may be shared across multiple real technology and the real technology
itself. To configure this we needed in ".coriolis2/techno.py" two
variables:
* symbolicTechnology.
* realTechnology.
After, we duplicate the symbolic technology in each real ones, so
to configure we only have to refer to one technology with the
variable:
* technology.
Pure sympolic technologies are still availables, associated with
a dummy real one.
We provides:
* 180/scn6m_deep_09 for MOSIS 180nm
* 45/freepdk_45 for FreePDK 45nm (work in progress).
* symbolic/cmos for classical Alliance symbolic.
* Change: In CRL Core python/helpers, SymbolicTechnology.py and
RealTechnology.py are now grouped under Technology.py.
* New: Hurricane::DataBase::getCell() method to search a cell through
all the libraries of *all* the frameworks, not just Alliance.
Also exported in Python interface.
* Bug: In Technology::getNthMetal() the function was not returning the
right metal, there was an offset of one. And when the offset was
0, no metal was even returned. Same fix goes for getNthCut().
The fault was in Mask<>::nthbit().
* Change: In Hurricane::CellWidget, the initial window size is too tiny.
Increase the size from 250 to 500 pixels.
* New: In CRL Core Python helpers, add a "showPythonTrace()" function to
custom display the Python stack trace in case of exception. It ha
been made to look like a gdb trace.
* In Unicorn, cgt.py, use showPythonTrace().
* Bug: In Hurricane::Occurrence_Contains(), when the Instance to match
is set to NULL, that means we have to accept *all* instances instead
of rejecting them all. This bug was making the Cell::flattenedNets()
to do nothing in digital mode.
* New: As, starting from version 5.8, LEF/DEF parser/drivers are
availables under Apache 2.0 license, integrate them inside the
project. Rewrite the Makefiles into CMakeLists.txt, build only
the C++ version. Create an entry for the LEF/DEF doc in the
documentation.
* Change: In documentation/CMakeLists.txt, for add_custom_targets(),
add_dependencies() no longer allow to give files (only others
*target* in the sense of cmake). We must use the DEPENDS option
of add_custom_target().
* Change: In documentation/UsersGuide, it seems that docutils no longer
handle correctly '$' and/or '_' in verbatim in the LaTeX backend.
(i.e. they are *not* escaped, resulting in math mode errors).
Remove those characters as we can use others...
* Commit a snaphot of the current documentation.
* New: In AnabaticEngine::invalidateRoutingPads() this method is a temporary
workaround for a Hurricane problems. When an instance is moved, the
RoutingPads that use it must be moved accordingly, but they are not
invalidated so they stay in the wrong QuadTree.
New method ::_resizeMatrix() to be called when the associated Cell
is resized.
* Bug: In AutoHorizontal::getConstraints() and AutoVertical::getConstraints(),
the *target* constraints where never merged.
* Change: In AutoHorizontal::getCells() and AutoVertical::getGCells(),
now return a boolean to tell if it was ok (must not encounter a NULL
GCell while progessing from source to target).
* New: In Anabatic::Configuration and Anabatic:Session, create new methods:
- getDHorizontalLayer()
- getDhorizontalDepth()
- getDHorizontalWidth()
- getDHorizontalPitch()
And so on for Vertical and Contact.
They supply depth-independant informations about the H/V layers to
build the initial detailed routing.
The AutoSegment::create() methods have been modificated accordingly.
* New: In Anabatic::GCell, add two new types "StdCellRow" and "ChannelRow"
for implementing 2-Metal blocks.
Rename the GCell::setXY() method in GCell::setSouthWestCorner(),
move the contents of GCell::updateContactsPosition() into it and
suppress it.
WARNING: In case of a GCell shrink this may cause problems. But for
now we only expand...
New method GCell::getNetCount() to count the number of Net going
though the GCell.
* Change: In Anabatic::Edge, add specific support for capacity of 2-Metal
routing channels.
* Change: In Anabatic::Dijsktra various methods, replace the "gcell->isMatrix()"
calls by "not gcell->isAnalog()". Add more check so that the methods
pertaining to the analog routing (GRData) are not called in digital
mode.
* New: In Anabatic::Dijkstra::materialize(), add support for 2-Metal specific
cases. That is, always break in case of vertical pass-through or
U-turn. The global routing must always be broken in H-Channel.
* New: In Anabatic::GCell & Anabatic::Edge, make use of the Session mechanism
to ensure the revalidation. The "::revalidate()" method is then moved
as "::materialize()" (overload of Go) and "::_invalidate()" becomes
"::invalidate()"
* Change: In LoadGlobalRouting, cosmetic rename of SortHkByX in SortHookByX.
* New: In GCellTopology, added support for building 2-Metal topologies.
* ForkStack is now an object attribute as many methods do need it.
* To push segments/hook on the stack, a new method "push()" is
available. Perform NULL and fromHook checking. Can also setup
_southWestContact or _northEastContact if it is the "from" edge.
* N/S/E/W edges are now vector as in digital channel mode there
can be more than one.
* Added build topological build methods:
- doRp_2m_Access() RoutingPad stem access.
- _do_2m_1G_1M1() North or south access.
- _do_2m_2G_1M1() North AND south access.
- _do_2m_xG() H-Channel routing.
* New: In Anabatic::Matrix, new ::resize() function, as Cell can be resizeds.
* New: In Anabatic::Vertex, new static method ::getValueString() for a
friendly text rendering.
* New: In Katana::DigitalDistance, support for channel routing.
* Change: In KatanaEngine::digitalSetup() and KatanaEngine::runGlobalrouter(),
for channel routing, calls to setupPowerRails() and
protectRoutingPads() must be called after the core block has
been fully dimensionned.
::runGlobalrouter() contains the code tasked with the grid creation
and channel sizing.
* New: In KatanaEngine: Added support for core block, for 2-Metal routing.
May be expanded for over-the-cell routing in the future.
Added methods :
- isDigitalMode()
- isAnalogMode()
- isMixedMode()
- isChannelMode()
- getBlock() / addBlock()
- setupChannelMode()
- createChannel()
* New: In Katana, new class Block to manage core blocks and perform
channel routing.
* New: In Katana::Session, new convenience method "isOpen()".
* New: In CRL Core, etc/cmos/kite.conf new routing gauge "sxlib-2M" for
two metals only technologies.
* New: In CRL Core, python/helpers/kite.py, new parameter to set the
routing gauge to be used: "kite.routingGauge" (default: "sxlib").
* Change: In CRL/AllianceFramework.cpp, forgot to put the Cell gauges
and RoutingGauges in the object Records (Inspector).
* New: In pyCRL/PyAllianceFramework.cpp, export the setRoutingGauge()
function.
* New: In Anabatic::AutoContact and the derived classes, manages wide
wires. The contact self dimension itself according to the segments
it is connected to. Special case for the AutoContactTerminal which
also read the size of the component it is anchored upon.
New refresh method "updateSize()" and flag CntInvalidatedWidth.
to compute the size.
In AutoContactTerminal, compute the constraint box according to
the width of the segment.
* New: In Anabatic::AutoSegment, flags are now implemented as "static const"
attributes of the class. The flags are stored into a uint64_t as
they are more than 32.
Added new flag "SegWide" and associated predicates.
* Change: In GCellTopology::_doHChannel() and GCellTopology::_doVChannel(),
uses the simpler overload of AutoSegment::create() in order to detect
the wire width automatically.
* New: In Katana::Manipulator, split insertToTrack() and forceToTrack()
into a one-track method and a segment level method that iterate over
the track span of the segment.
* New: In Katana::SegmentFsm, for each cost in the table, now allow access
to a specific track. So the base functions have now two parameters:
"icost" and "itrack" (has a cost can have multiple tracks in the case
of wide segments).
* Change: In Katana::TrackElement, remove the index of the element inside
it's track, as for a wide segment it will not be meaningful for the
non-base track. This means that we have to use the Track::find()
method each time instead.
Remove the wide flag, as it is a duplicate of the one in AutoSegment.
Added a getTrackCount() method to tell the number of track the
segment is inserted into. Needed in the Track destroy step to delete
a segment only when the last track that refers it is destroyed.
Added getSymmetricAxis() to correct the computation of the symmetric
base track in case of wide segment as the base track is not centered
but the the leftmost one.
* Change: In Track::insert() insert wide segments in their whole track span.
* Change: In TrackCost, create an array of costs according to the segment
track span.
* Change: In TrackSegment::create(), now activate the factory and create
wide segments.
* Bug: In Katana::AutoSegments_Perpandicular, correct the debug indentation
problem (ever shifting to the right).
* New: In documentation, reorganise all the various documents into one
Sphinx coherent one. The index also provide a link toward the
Doxygen generated doc (C++ APIs) and the venerable LaTeX2HTML ones
(for Stratus).
This will make easier all future extensions to the doc corpus.
The generated documentation is commited into Git so a new user
can use it directly after cloning the repository.
The HTML doc is truly generated by Sphinx, but the pdf one is
created rst2latex. The Sphinx pdf writer is buggy when a "tabular"
contain a multicol and a multirow in the same area of the table.
rst2latex handles it correctly.
We use a theme borrowed for Read The Doc (half of it).
It seems that some Javascripts are not working correctly,
namely the folding of the navigation sub-menus and the index
generation and search mode.
* New: Occurrence_Contains filter that tells if an instance is part of
an Occurrence. Checks for two cases:
- The Instance is part of the *path* of the Occurrence.
- The Instance is the associated entity itself.
* New: In Cell::flattenNets() adds a new parameter Instance* to
allow partial flatten of one instance only.
* Bug: In Anabatic::Disjstra::_materialize() check that the
NetRoutingState exists before trying to access it...