* New: In Hurricane::IntrusiveMap, introduce IntrusiveMapConst which allow
to search with a "const Key&" instead of a "Key", sparing the copy
construction of the Key.
* Change: In Hurricane::Cell::NetMap, use the new kind of map with
"const Name&" key access. This speeds up the Cell::getNet() method
by suppressing one copy construction of a Name, which are costly
after all...
Should review the whole code to use "const Name&" everywhere it
is possible.
* Change: In Hurricane::Entity & Hurricane::DBo, displace the unique
identifier from Entity to DBo (move up to the base class).This
to allow us to build deterministic map of DBo requireds in
UpdateSession (which is built upon a SharedProperty).
WARNING: This break the JSON database exportation support, do not
use it until fixed/rewritten.
* Change: In Hurricane::Layer, add an attribute to know if a layer is
associated to a blockage. Modificate accordingly PyLayer and
BasicLayer.
* Change: In Hurricane::SharedProperty, the set of owners (DBo*) is now
stored in a std::set sorted on the objects Ids, instead of a simple
vector. The linera search time through the std::vector was starting
to show (ISPD05 bigblue1).
* Bug: In Isobar::PyInstance, make full contructor signature (5 arguments)
conform to the C++ one. It was only accepting the four first and
forcing the placement status to be FIXED.
* Bug: In CRL/etc/symbolic/ispd05/kite.conf, update for the new configuration
requirements where all distance must be converted into DbU in the
file itself (use "helpers.l()", "helpers.m()"). Apply to the cell &
routing gauges.
* Bug: In CRL/etc/symbolic/ispd05/technology.conf, update for the new
configuration. "helpers.initTechno()" *must* by called first thing
in this file in order for the Technology to be created.
* New: In CRL::AllianceFramework, add matchCellGauge() &
matchCellgaugeByHeight()
* New: In CRL::CellGauge, add a flag to distinguish gauges meant for
IO Pads and an "isPad()" predicate.
* Change: In CRL::Ispd05Bookshelf, flush the UpdateSession stack every
1000 elements additions. Maybe not necessary now the the UpdateSession
property relies on a std::set instead of a std::vector.
* New: In CRL::LefImport, support for SITE and match/create the appropriate
CellGauge on the fly. Specific support for MACROS that are flagged PAD.
Add a dedicated post-treatment for PAD connectors, extend them toward
the boundary of the nearest abutment box side. Tested only on AMS 350nm
c35b4 for now.
This part is most likely to be tweaked for every kind of real foundry
pad that we may encounter...
* Change: In EtesianEngine::findYSpin(), use the C++ "for" construct to loop
over Collections.
* Change: In Unicorn/cgt.py, register the Python/C++ tutorial support by
default.
* Change: In CRL::DefImport, added callback to read the DEF UNITS statement
and perform a correct length conversion. Previously set to read pseudo
lambdas in hundredth of microns.
Added DefParser::getLefCell() to lookup master cells in the LEF
libraries before looking in the Alliance ones (rooted under "LEF"
library).
* Change: In CRL::LefParser::_pinPostProcess(), when no segment suitable
for terminal connexion is found, add all of them. This is a quick hack
and an a correct policy that match all techno must be implemeneted.
* New: In CRL::pyCRL, add a Python wrapper for DefImport.
* New: In CRL/etc/45/ispd18/ added configuration files for the "real"
technology used by the ISPD18 45nm design benchmarks.
* Bug: In Hurricane::Collection::iterator, the iterator use a locator from
a getLocator() not wrapped inside an auto_pointer like GenericLocator.
So the destructor of the iterator must take care of the deletion.
This was showing more and more as we converted forEach() into the
C++ 11 for syntax.
Seems to decrease the memory use by almost a factor 2...
* Bug: In Dijkstra::_cleanup(), as a double security, cleanup the queue.
* New: In Hurricane::Isobar::PySegment, added wrapper for getOppositeAnchor().
* Bug: CRL::PyRoutingLayerGauge, Python wrapper of getTrackPosition() was
in fact returning getTrackNumer().
* Bug: In Katana::PowerRailsPlanes::Rail::doLayout(), add the half minimum
distance to the blockage segments extensions. Was causing too near
VIAs is cmos45.
* Change: In cumulus/plugins/ClockTree, correctly manage routing gauge when
the lower pitches (M2/M3) is different from the upper one (M4/M5).
But we still can only do sxlib compliant gauges because we do not
handle a switch in preferred routing directions.
* Bug: In CRL::cyclop, on former versions of Qt 5 there was a double
link of the moc generated modules. This appears to be solved under
Ubuntu 10.04 LTS, so now we have to add them again explicitly.
* Bug: In Katana::Track::expandFreeInterval(), the OutsideElement case was
not handled correctly, the end index must be increased in that case.
As a result, this function was returning too short an interval.
This was affecting the computation of perpandicular free interval
in DataNegociate::update() for perpandicular fixed but not in a track.
* New: In Anabatic::NetBuilder and NetBuilderVH, now manage GCells with
one Pin, and up to three globals. Used to put terminals at the
edge of a block.
* New: In EtesianEngine, now manage placed Pins.
(done through extractInstanceName())
* Change: In CRL::RoutingGauge::getHorizontalGauge() no longer skip PinOnly
gauges to find the reference one (same goes for vertical).
* Bug: In Hurricane::DrawingQuery::drawGo(), forgot to apply translation
on Polygon and Rectilinear.
* Bug: In Hurricane::Rectilinear, forgot implementation of getContour().
Add a new accessor getPoints().
* Bug: In CRL::Blif::load(), do not always enforce translation towards
VHDL names. When loading LEF+gds it may change the Cell names between
the two stages so the gds layout do not get added to the LEF Cell
phantom.
Now add a boolean enforceVhdl argument (may be a flag in the future).
* Bug: In ::GdsStream::operator<<(Cell*), forgot to drive the Rectilinear.
* In Katana::RoutingEvent::_processRepair(), do no reschedule perpandiculars
that are already in repair mode, they may loop with repackperpandiculars().
* Change: In boostrap/ccb.py, change the devtoolset argument from a fixed
behavior "--devtoolset-2" to a selecting one "--devtoolset=X" where X
is the requested version of the devtoolset.
Modify coriolisEnv.py to dynamically detect with which devtoolset
we have been compiled. Idem for Makefile.package and
FindBootstrap.cmake.
* Bug: In hurricane/Technology.h we define a set of UnitRule with a
custom sorting function. STL starting with gcc 8, introduce a type
checking of the compare function. And as everithon is template, we
must use the exact key type and no longer a base type... So we create
an overload for each derived type :-(
* New: In Unicorn/cgt.py, add "-K" option to use Katana for global and
detailed routed (in place of Knik/Kite).
Comment the preroute stage to ensure determinism (I often forgot
to run this stage while in graphic mode).
* Bug: In Anabatic::Edge::getDistance(), remove the additionnal 0.1
added to horizontal edges. This was for testing before the hScaling
parameter was added (to the distance computation in GlobalRoute).
* New: Anabatic::Path_Edges, collectio to walkthrough all the edges
between two node. More complex than in Knik as we are no longer
using a regular grid. We may request the north bound path or south
bound path.
Collection returned by AnabaticEngine::getEdgesUnderPath().
* New: In Anabatic::NetData, add a new flag GlobalEstimated to tell if
the net RMST has been computed (using FLUTE).
* New: In Anabatic::PriorityQueue, used to sort Vertexes by increasing
distances, add a new criterion to be used in case of distance
equality. The attractor which should be the center of the search
area. In case of equality, we choose the Vertex which is closest
to the attractor. Give a small improvement, and more "dendritic"
trees.
For a more simple implementation of the comparison function it is
made as a static member (so no two Dijkstra objects at the same
time...).
* Change: In Anabatic::Edge, make the estimate occupance a floating
point number instead of an integer.
* New: In Katana::GlobalRoute, finally implement the estimated congestion
driven router. Net RMST estimated using FLUTE.
Use the historic cost from Knik implementation and not the one
given in Damien's thesis, which seems not be the same and a bit
strange.
* New: In KatanaEngine, add the ability to exclude nets from routing,
and export it to Python.
* Change: In CRL/etc/cmos/kite.conf, setup correct H/K parameters for
the Katana global router. Value copied from Knik. They give a
faster solution.
* New: In CRL/etc/cmos45/, new symbolic settings adapted to FreePDK 45nm.
Courtesy of N. Shimizu. To be used with NSXLIB.
* New In CRL::System, add "coriolis_top" to the set of pathes available
to the user.
* Change: In Hurricane::Cell::NetMap, the hash function is now based on
the string itself and not on the id of the SharedName. We now may
remove the id attribute of the SharedName.
This to ensure a more robust deterministic behavior. The sort
order do not depend on whether we did use names before or not.
* Change: In Hurricane::CellWidget, new "isPrinter" attribute to know if
the CellWidget is used as a device for printing.
New function copyExtensionsGos() to duplicate the ExtensionGo drawing
callbacks. This is a temporary hack until the ExtensionGo are made static
to be shared by all CellWidgets.
In _redraw(), the DrawingQuery flags were not correctly reset between
different stage of the drawing. This was resulting of uneeded walkthough
of the slicing tree, along with incorrect display of some of the layers
(i.e. rubbers where diplayeds when ExtensionGos where active).
* Change: In GraphicKatanaEngine, fine tune the display of GCells for printing
CellWidget.
* Change: In Hurricane::CellPrinter, copy all the settings from the palette
of the reference (graphic) CellWidget into the printer CellWidget.
Also copy the ExtensionGos callbacks so we can print them. Use the
new CellWidget attribute "isPrinter" for the callbacks to be able
to adapt to Printer settings.
* Change: In Hurricane::Time::getStringTime(), only print two decimals
for time durations.
* Change: To allow multiple tools, and not only Knik, to link and use
FLUTE, remove it from Knik and put it at top level.
Bootsrap must compile this new tool and the library must be
included in all CMakeLists.txt depending on Knik (and soon
Anabatic).
* New: Anabatic::AutoContact::setLayerAndWidth() to set both layer and
VIA width/side according to the RoutingGauge. If the delta in zero,
use the metal gauge, and the VIA gauge otherwise.
* Bug: In Anabatic::AutoContactTerminal, Anabatic::AutoContactTurn,
Anabatic::AutoContactHTee & Anabatic::AutoContactVTee, in the
updateTopology() method, set both the layer and the VIA with when
there is a change of layer. Note that this default size may be
overriden later by updateSeize() in the case of non-default width
segments.
* New: In Anabatic::AutoSegment, new overload setLayer(size_t) to set
both layer and segment with according to the routing gauge.
* Bug: In Anabatic::AutoHorizontal and Anabatic::AutoVertical, in method
_makeDogleg(), make use of the new setLayer() to correctly set up
the wire width.
Idem for Anabatic::AutoSegment::changeDepth() and ::makeDogleg(),
and in Anabatic::LayerAssign.
* New: In Hurricane::RbTree, template for red-black tree. Standard
implementation but well integrated in the Hurricane database and
ready to be derived (both iterator and Collection support).
* New: In Hurricane::IntervalTree, template for interval tree, derived
from RbTree.
* New: unittests tool to perform unit tests.
* Change: In Bora::ChannelRouting, now implemented with IntervalTree.
There is something suspicious here : the "thick" version of
addWireoccupation() seems never to be called. Have to check the
wide wire support implementation.
* Change: In Hurricane::CellWidget, set the minimal size to 350 pixels
to fit my normal DPI secondary screen...
* Change: In Hurricane::Error(), reactivate the backtrace generation by
default. Seriously slow down the program each time an Error is to
be constructed.
* Bug: In Analog::Device::preCreate(), check for NULL Technology before
attempting to use it.
* Change: In Hurricane/Analog, remove all '*Arguments*' classes and their
Python interface. It was an obsoleted way of passing devices parameters
to the Python layout generators (located in Oroshi). Now we just get
them straight from the Device with the getParamter() method.
* Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze.
* Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove
all uses of the "Arguments". Directly access the parameters through
the device itself. Make the checkCoherency() with identical arguments
as of layout().
* New: Bora tool that performs analog place & route. Based on a slicing
tree representation. It is the thesis work of Eric Lao.
Code beautyfication and some programming cleanup.
* New: Karakaze tool, provide the Python base class AnalogDesign used
to build an analog design. Create/configure devices and assemble
them in a slicing tree.
* Change: In Unicorn/cgt.py, display the stack trace in case of an
ImportError exception as well as for other exceptions.
Add Bora to the set for included tool engines.
* Change: In boostrap, remove support for Chams.
* New: In Hurricane::Technology, added support for DTR rules, UnitRule,
PhysicalRule and TwoLayersPhysicalrule. Added devices descriptors and
models descriptors (for Spice). Spice description is not used yet
but kept anyway in case of future use.
* New: Hurricane::Analog whole library and it's Python interface. This
provides support for transistors, capacitors and resistors. Only
transistor support is fully implemented as of now.
* New: In CRL/python/coriolisInit.py, read configuration files for the
Analog extension (analog.conf & devices.conf). Thoses are optionals
and a simple warning is issued if not found.
Added helpers/AnalogTechno.py DTR loading helper.
Add analog configuration files for 180/scn6m_deep_09.
* New: Oroshi tool that provides actual layout drawing for transistors.
* Problem: In LEF/DEF, the parsers makes use of the libc "strtod()" which
is now localized. So, if your environment is set up for French, the
decimal separator is not '.' (dot) but ',' (comma). So floating
numbers in LEF/DEF file are not longer recognized as such, causing
the parsers to fail with a LEFPARS-1 error.
To avoid that, we force the LC_ALL environment variable to POSIX
in Hurricane::DataBase::create(). So first things that happens when
Hurricane starts, is the environment to be reset.
Strangely, when I try to setup only LC_NUMERIC with setlocale()
it doesn't work. There is something I'm missing there...
* Change: In CRL::GdsStream, no longer export empty Cells as structures,
to avoid empty cells in Cadence. To prevent meta-transistors to be
exported as real physical objects.
Also put a hard-coded test to prevent exporting "control_r" model
which is made of AMS standard cells for "amsOTA".
* Change: In CRL/PyRoutingGauge, export the isHV() and isVH() methods so
the Stack can access it.
* Change: In Hurricane/PyCellViewer, export the removeHistory() method.
When a Cell is deleted, it must be also removed from the editor
history. This should be take care of automatically, but for now
we make it manually through scripts.
* Bug: In Anabatic::NetBuilder::doRp_accessAnalog(), the gauge offset
was not taken into account when creating initial Contact on
RoutingPad. The program self corrected afterwards, but with the
display of a disgraceful message.
* Change: In Anabatic::Configuration and Session, export the gauge offsets.
* Bug: In stratus1, all coordinates given to the functions are now
assumed to be in DbU instead of lambda. Designer must convert
himself his coordinates from the unit of his choice into DbU.
See helpers.l(), or helpers.m().
* Bug: In CRL::GdsDriver::GdsStream two bugs :
1. The tm fields are int but must be casted into uint16_t in BGNLIB
and BGNSTR.
2. The mandatory LIBNAME record was missing.
3. We also force, for now the dbu to be 1000 and the UU to be 1um.
* Bug: In CRL/etc/NODE/VENDOR/Technology.conf, the database must be configured
as early has possible so the functions ensuring length conversions can
work correctly (l(v), u(v)). So we can no longer rely on a table to be
read after the execution of the file. We perform a direct call to the
helpers.Technology.initTechno() function. And it must be made first
thing.
In all tables taking dimensions, we must use one of the converter
function helpers.l(v), helpers.u(v) or helpers.n(v) so the the value v
get converted in lambda, microns or nanometer (resp.). Make the
modifications in all technology.conf and kite.conf files.
* Change: In CRL/coriolisInit.py, remove the technoConfig variable that has
been replaced by a direct call to helpers.Technology.initTechno().
* Change: In CRL/helpers.Alliance.loadRoutingGaugesTable(), no longer try to
convert coordinates, they must already be in DbU.
* Change: In CRL/helpers.__init__.py, remove lambdaMode() and micronsMode()
they could not be made to work as expected. Create l(), u(), n() as
replacement.
The short net mode degrade the routing in some cases. This will be
fixed in a next batch of commits.
* New: In Hurricane::NetRoutingProperty, added "ShortNet" flag for Nets
that are completly inside *one* GCell.
* Bug: In CRL::BlifParser::Model::staticInit(), when looking for the
output of zero and one cell, also skip the blockage net (as well as
automatic and supplies).
* New: In Anabatic::AutoSegment, added "ShortNet" flag to know if the
segment is part of a short net (fully included in *one* GCell).
Also add accessor/mutators for the _analogMode flag (was it ever
used before?).
* New: In Anabatic::NetBuilder::singleGCell(), if a RoutingPad is
vertically small, add a vertical segment to give it some slack.
* New: In Anabatic::Dijkstra::_materialize(), detect "short net" as
they have only one GCell in their source list...
* Bug: In AnabaticEngine::_loadGrbyNet(), reset the AutoSegment
"short net" and "analog mode" creation flags between two different
nets.
* New: In Katana::Configuration, added dedicated ripup for short net
segmnts.
* New: In Katana: partially implemented support for "short dogleg", that
is dogleg that are always kept in same metal because they connect
neighboring perpandicular tracks. Not finished neither activated
yet.
* New: In Katana::TreckElement and derived, export the the *short net*
support from AutoSegment.
* Bug: In Katana::RoutingEvent::_processRepair(), when a segment is
successfully inserted, re-process any perpandicular that is in
repair state, as it may have a new chance to be placed.
* New: In Katana::SegmentFsm::slackenTopology(), always reject short nets.
* Bug: In Katana::Track::check(), correctly handle wide segments instead
of issuing false check messages.
* Change: In CRL::ParserMap, no longer recognize the file extensions
".vhdl" and ".vhd" which are true VHDL and cannot be parsed by the
"vst" (Alliance structural subset VHDL) parser.
This should solve annoying problems for the Makefiles when there
is both the full VHDL file ".vhdl" and the synthesized one ".vst"
(note that this problem do not arise when using Yosys/Blif).
* New: In Anabatic::LayerAssign, a new mode "LayerAssignNoGlobalM2V" has
been added to manage the 3 routing metal technologies like AMS 350nm.
The standard cells have all their connectors punctual and aligned on
an horizontal line in the middle of the Cell. This is a design
inherited from the channel routing times that makes global routing
in metal2 *through* a standard cell almost impossible (except for
directly neighboring cells). Thus, the layer assignment must move
up all the metal2 that span more than two GCells.
* Change: In Katana::Manipulator::ripupPerpandiculars(), when a perpandicular
has a fixed axis and it's (sole) underlying track is taken, ripup
the other segment to ensure the perpandicular interval will be free.
We need to do that, because in DataNegociate::update(), if the
perpandicular is taken, the perpandicular interval will always been
empty preventing the segment to have a valid track span (so directly
failing).
* Change: In Katana::SegmentFsm::conflictSolveByPlaceds() the fixed axis
segments must also been taken into account as conflicts.
Also correct a small bug, the first conflicting segment in the
interval was not taken into account correctly.
* Bug: In Anabatic::AutoSegment::_changeDepth(), GCells under the segment
must be invalidated in order for the density to be recomputed.
But we were using GCell::invalidate() which is meant for the quad-tree
and graphic system, so the density almost never updated in case of
a layer change, leading to over-congested GCells in the top layers
(110% !).
Now we directly set the Invalidated flag.
* Change: In CRL::Blif, we now can add a list of Hurricane library for
the parser to look for standart cells. If the library list is *empty*
we look use the Alliance mechanism, if not, we look *only* in this
library list. This behavior is implemented in Subckt::createModel(). I
To add a library, use CRL::Blif::add(Library*).
This allow to manage symbolic or real mode loading, it may need
some rework to clarify the interface.
* Change: In all tools supplying documentation, as we use some specific
software to create the doc, they may not be available, or worse, be
and incompatible version. So, by default, we install the files shipped
with the git repository. To force a full doc rebuild, use the "--doc"
flag of ccb.py.