* New: Hurricane::Triange as been renamed into Hurricane::Polygon.
Add support for convex polygons. Polygon are approximateds by
excess by a manhattan rectilinear polygon (with potentially
thousands of vertexes). To reduce the memory footprint,
compaction techniques reducing by at least a factor 4 has been
implemented. We could go further by only storing the non-repetitive
part of the edge (defined by the integral fraction dY/dY).
We will see, if the program slows too much.
The manhattan approximate is always computed but displayed
only if the polygon grid step is greated than 4 pixels.
The level of approximation of the polygons can be controlled
through the "DbU::_polygonStep" parameter.
* Change: In CRL/coriolisInit.py and CRL/helpers/Technology.py, regroup
all DbU related parameters into "technoConfig" (i.e. suppress
"viewerConfig"). Update all the relevant technology.conf configuration
files.
Change the loader behavior so that "technoConfig" is read first
and is now responsible for creating the Technology of the DataBase.
* New: In Hurricane::CellWidget, added support for displaying mahanttanized
polygons.
* Change: In documenation/scripts/expample/polygons.py, perform (I hope)
a comprehensive test of the polygons (check all slopes, clockwise and
conter-clockwise).
* New: In Hurricane::DbU, added template to manage vector<> of DbU.
Support for the "polygonStep" parameter.
* Bug: In Anabatic::Dijkstra, the degree of a vertex (the number of neighbors
belonging to the same net) was miscalculated. This was leading, in the
materialize step to some feed-through vertexes not being broken.
Leading in turn to incomplete transformation of the detailed routing.
Also in _trackback(), the degree of the first vertex we were backtracking
from was not incremented.
* Bug: In Anabatic::Dijkstra::materialize(), systematically use
GCell::breakGoThrough() on both source and target. This is needed when
we are in the ripup phase as both source and target can be go-through.
This was also leading to incomplete detailed routing transformation.
* Change: In Anabatic::Edge::ripup(), ripup one third of the segments instead
of thoses exeeding the global length threshold. This way we are sure to
desaturate an edge. Needs to be further calibrated.
* Change: In Aanabatic::GCell::breakGoThrough(), no longer return NULL.
Return existing gcontact if any. Break if it is a go-through and create
a new gcontact in last resort. Maybe rename this function.
* New: In Anabatic::Configuration, new parameters:
- anabatic.edgeHScaling, to adjust the length of the horizontal edges
relative to the vertical ones (this is a ratio).
- anabatic.globalIterations, set the maximum number of ripup passes
of the global router.
* New: In CRL/etc/*/kite.conf, added new parameters anabatic.edgeHScaling
and anabatic.globalIterations.
* New: In Katana::GlobalRoute::DigitalDistance, take into account the new
edgeHScaling factor. Must be used when the capacity of V-edges differs
greatly for H-edges (case of AMS 350nm c35b4 for instance).
* Bug: In Katana::GlobalRoute::DigitalDistance, the historic cost is
computed for an edge length of "1". Must be multiplicated by the
current edge length to have any measurable effect.
This bug is finally explaining why the ripup was producing the
same solutions over and over, the historical cost was negligible!
* Bug: In Hurricane::Cell::uniquify(), a set<Cell*> sorted on pointers
was remaining. Now sorted on Entity::Id.
* Bug: In CRL::VhdlEntity, in the driver, the components where driven
in pointer order (set<> again). Now use ids.
* Bug: In CRL/etc/scn6m_deep_09/technology.conf, the symbolic extentions
for VIAs and layers were wrong. Have to be multiplied by two.
* Change: In AnabaticEngine, AutoContact and AutoSegment LUTs are now
sorted on Entity::Id. Should not have had any impact, but better
safe than sorry.
* Change: In KatanaEngine, Symmetric contraint map<> is now sorted on
Entity::id. Idem for TrackSegmentLut.
* Bug: In CRL Core, etc/180/scn6m_deep_09/technology.conf the minimal
spacing for the metal layers layout were not set, allowing the
router to place VIAs too close to each others. This was generating
either DRC errors or short-circuits.
* New: In Hurricane::Entity, add an id counter limit and a memory size
limit. The two limits are checked only when a new Entity object is
created. This should help avoiding massive memory links.
* New: In CRL Core, add a "crlcore.groundName" and a "crlcore.powerName"
parameter to specify the name of the ground/power signals to be
created if they are missing in a Cell. For Alliance libraries it
would be "vss" & "vdd" (default values), but for real technologies,
it is often "gnd!" & "vdd!".
The Blif parser is modificated to make use of it.
* Bug: In AnabaticEngine::unify(), set the resulting unified segment in
the center of the GCells common side. Gcells under a segment are
found by using the edge that cover the segment axis. When we have
a "bend" GCell stack and the axis is wrong, they could be ommited.
This was causing deleted segments to be not removed from some
Edges, then core dump.
* Change: In Anabatic::AutoSegment::create(), smarter choosing of the
reference contact, select the fixed or terminal one instead of
always the source one.
* New: In Anabatic::Edge::isEnding(), new function to check if a
segment going through an Edge is starting/ending in either source
or target GCell of the edge (active only when running in channel
mode).
* New: In Anabatic::Edge::add(), a segment takes part in the occupancy
only if it is not ending in either source or target (channel mode
only). The occupancy due to terminal is pre-computed in Katana.
* New: In Anabatic::Edge::ripup(), in channel mode, never ripup a
segment which is ending in either source or target (we *have* to
access this edge to connect to the terminal).
* Bug: In Anabatic::GCell::hcut() and vcut(), force the update of
the Edge which is on the side that will get splitted by the cut.
It's capacity will be reduced to it must be updated.
* Change: In Anabatic::GCell::updateGContacts() add a flag to conditionnally
update horizontals or verticals only. We may require only a partial
update when resizing the GCell in only one direction.
This, again, related to the fact that we compute the GCells under
a segment thanks to it's axis position, so we need to be very careful
when modificating axis.
* Change: In Katana::Block::resizeChannels(), only update GContact vertical
position. Do not disturb X positions of segments.
* Bug: In Katana::GlobalRoute::DigitalDistance, in channel mode, some
Edges can have a zero capacity, but still be reachable if the net has
a terminal in either source or target. Look for this case and return
a distance of zero instead of "unreachable". This was causing the
global routing not to complete in channel mode.
For computing the edge distance, makes the vertical edges much more
long (10 times) than the horizontal ones as the vertical capacity is
very limited. Hard coded for now, should make it a parameter in the
future.
* Change: In KatanaEngine::annotateGlobalGraph(), decrease the capacity
of edges with reserveCapacity for each terminal inside a GCell.
Both north and south edges are decreased as we a terminal will
block both north and south edges.
As a counterpart, the Edge capacity is not decreased when the
global router connect to a terminal.
* Change: In Katana::RoutingEvent::revalidate(), when in repair stage,
do not expand the slack for horizontal segments in channel mode.
So they may not overlap the standard cell row.
* Bug: In Stratus documentation, do not use the french option in babel,
the documentation is in english!
* New: In Documentation, added Hurricane/Python tutorial, part for drawing
layout.
* New: In Anabatic::EdgeCapacity, dedicated object to manage the capacities
of an edge by layer. This needed now because with real technologies
layers capacities differs (unlike with symbolic technologies).
This object is separated to be shared between Edges with identical
characteristics (direction+interval). Deletion is automatic and
done through refcounting. All the already allocateds EdgeCapacity
are kept into a set in the AnabaticEngine (key is (direction,interval)).
* New: In Anabatic::Edge, capacities are stored in a shared EdgeCapacity
object. The total capacity can be annotated (i.e. decreased).
EdgeCapacity attribute is created during the materialize() call.
The capacities are computed at this time.
The incCapacity() function is renamed in reserveCapacity().
* New: In Anabatic::AnabaticEngine, added attribute _edgeCapacitiesLut
to store the shared EdgeCapacity.
Lookup/Creation of an EdgeCapacity is done through _createCapacity().
* Change: In Anabatic::Constants, rename Flags::IllimitedCapacity into
Flags::InfiniteCapacity. Add Flags::NullCapacity (both for Edges).
* Change: In Anabatic::GCell, implement a by depth (for layer) getCapacity().
This modification did expose a bug in the density calculation :
per depth density where divided by the complete density instead of the
density's depth. This was leading to greatly underestimated densities.
Thoses underestimations where preventing Dijkstra and layer assignement
to manage congestion correctly (in fact, it was acting as if there
never was congestion).
Also avoid a divide by zero (thus -NAN showing in densities).
* Change: In Anabatic::GCell, rename setEdgeOccupancy() into the more
accurate forceEdgesCapacities().
Note for Eric: only the first Edge on each side has it's capacity
forced. What if there's more than one Edge ?
* 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.
* Change: In CRL Core, etc/, update the configuration files of real
technologies. Mostly for FreePDK 45. This work is also done for
AMS c35b4 (350nm) but in a private (SoC) git repository.
Added a new parameter 'lefImport.minTerminalwidth' for the
minimum size (width) of a metal1 terminal in standard cells.
Corrected bug of the minimum trace level which must be
initialized to a great value and *not* zero;
* Change: In CRL Core, BlifParser, detect when there is no tie low
or tie high defined, issue an error (connexion left open) but
continue.
* New: In CRL::RoutingLayerGauge, new overlad of getTrackPosition()
with the parameter set of getTrackIndex(). Used to know if a
terminal is on-grid or not.
* New: In CRL::LefImport, smarter management of metal1 pins. Adds a
_pinPostProcess() function to select the external components
among the various shapes. If the gauge is VH, all the pin rectangles
are translateds into vertical segments (even if the metal1 gauge
says the tracks are horizontals).
The _pinPostProcess() function adds as external components of
a net, only the segments of a sufficent width as given in
'lefImport.minTerminalWidth' and that are on-grid.
* Change: In Hurricane::Technology, in all the layer connexity methods
(getLayers(), getMetalAbove(), getCutAbove(), getViaBetween(), ...)
the "useWorking" parameter is replaced by a more accurate "useSymbolic".
BEHAVIOR CHANGE: formerly, if a symbolic layer was requested, and
none was found, NULL was returned. Now, if the symbolic layer is not
found, we try to return the associated real one (same layer mask,
but not flagged as symbolic, and usually with a lowercase name).
All thoses changes have been propagated to Python bindings.
* Change: In Hurricane::BasicLayer and derived classes, rename the
"isWorking" attribute into "isSymbolic" (to match the technology
renaming).
* Change: In Hurricane::Cell::flattenNets(), ignore power, ground and
blockage nets for the flatten.
* Change: In CRL Core, in coriolisInit.py and Technology.py helpers,
rename the tables describing the technology as follow:
- symbolicLayersTable --> compositeLayersTable
- workingLayersTable --> symbolicLayersTable
- symbolicRulesTable --> layersExtensionsTable
This is to give the table names a more clearer semantic after
merging real technologies configurations (testbench AMS c35b4).
In particular, we need to define a composite layer for the
real VIAs, and not only the symbolic ones. And with correct
enclosures expressed in real dimensions (microns).
* New: In Anabatic::NetBuilder, set all the attributes as private and
create accessors and mutators.
Finish virtualising all GCell build methods and transfer them
into the NetBuilderHV class.
Build methods now return a boolean to tell if the GCell was
processed or not, to allow cascading in the "big switch".
Reorganise the "big switch" in separate sections only partially
cascading.
Truly fuse the *big switch* for channel routing and over-the-cells.
Create a new method "_do_globalSegment()" to delagate the
drawing of global segments between two GCell to the derived classes.
* 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, 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.
* Change: In Hurrican::Component::_preDestroy(), the cascaded destruction
of slaves Components and subsequent ring merge and Rubber creation
was using set<> sorted on pointer values. This was making the order
of destruction of the slaves components non-deterministic. Now the
sets are sorted according to their id (see Entity).
* Change: In Hurricane::SharedProperty, the _ownerSet is now a vector<>
instead of a set<>. This will slow the search process, but hopefully
this is needed only during construction/destruction of a Property
so the slow down shouldn't be too much.
This has also an impact on Hurricane::Relation.
* Bug: In Hurricane::CellWidget, when setting up a state of a CellWidget,
the selection was not copied. Now copy the SelectorCriterion (clone).
* New: In Hurricane::SelectorCriterion, add a clone() method.
* Change: In CRL Core, in etc/common/display.conf, for the Printer.Coriolis
style, lower the thresold of display for the substrate layers so they
are shown even in small zoom mode.
* Bug: In Anabatic::singleGCell(), in some analogic design, there may be
not a single METAL1 in the GCell. Issue a clean warning instead of
going ashtray.
* Change: In CRL.etc/technology.cong & CRL.etc/display.conf, add a "metbot_r"
as a real layer when "metbot" symbolic layer is distinct from a normal
metal.
* Change: In bootstrap/FindBootstrap.cmake, new setup_qwt() macro to
link with the Qwt library build with Qt 5 *or* Qt 4 and not the
first found.
* Change: In Hurricane/DbU, uses <int64_t> instead of <long> to always be
sure that we use 64 bits integers for coordinates.
* Change: In Katana/KatanaEngine::_gutKatana() checks that the
RoutingPlanes have been allocateds before trying to delete them.
* Bug: In Anabatic::RawGCellsUnder, *again*, the north and east borders
of the whole area *are* includeds (shut up disgraceful warning).
* New: In Anabatic::GCell, add a display mode to select between boundary
display (for analogic) and density display (for numeric).
* Bug: In KatanaEngine::runGlobalRouter(), do not check if an Edge cannot
be desatured when the vector or overloaded Edges is empty.
(one less disgraceful warning)
* New: In GraphicKatanaEngine::drawGCell(), support for drawing the GCells
in density mode. Use the fire scale and the MaxDensity mode.
Setup the GCell drawing mode in GraphicKatanaEngine::initGCell().
* Change: In GraphicKatanaEngine::drawEdge(), adjust the various thresholds
for showing the Edge and its label.
* New: In CRL Core, adds "anabatic.gcell.displayMode" to the set of Anabatic
parameters.
Adjust the showing threshold for GCells in "display.conf" so when the
zoom level is low, we still can see the density map.
* Bug: In Anabatic::GCell, when width and/or heigh is null, do not try to
compute densities as it will trigger a divide by zero (and do not make
much sense anyway).
* Change: In CRL Core, in cmos/alliance.conf, honor the ALLIANCE_TOP variable
if it is found in the user's environement.
* Bug: In Anabatic:
- In _propagate(), on reaching a target, forgot to remove it from
the queue before pushing it back with the new distance. It also
simplificate the core algorithm as target as treated normal nodes.
* New: In Anabatic:
- Update cdebug to use the fastest macro version.
- More readable drawings of GCells and Edges.
- Added timer support.
- The distance is now computed in DbU::Unit (aka long) and not in
normalized float.
- The distance function is now a callback (std::function<>) that
can be changed (a default is provided at initialization).
- New concept of branch in the agglomerated connex component.
Each trace back part create a "branch" (tagged with a "branchId").
When a node is reached with the same distance, but from two
different branches, choose the the branch that was lastly created.
This create a slightly different tree which grows outward from
the newest branches.
- Makes the horizontal edges *slightly* longer than the vertical ones
to skew the tree to use vertical edges, as it is usually less
congested than the horiontal one (due to metal1 cell terminals).
It is also my understanding that it is useful to reduce the
number of vias, whithout introducing a via cost.
* New: In Bootstrap:
- Script sprof.py to perform sprof & demangle libraries execution
profile.
* ToDo: In Anabatic:
- Corner optimization. Sometimes when two corners are possible, the
wrong one is choosen. That is, one of it's edge cannot be used for
further grow of the tree.
* Change: In Hurricane::Observer, simplification of the template so that
we can use it directly instead of creating a derived class with an
implementation of Observer::notify(). Now the implemenation is the
same for all and just calls a notify() method on the owner object.
Create a StaticObservable for fast access of the observers. This
is mainly a fixed size table (array<>) with oberservers at known
indexes. This way we can go from the obervable to the observer
owner in one indirect access (or so I hope).
* Change: In Hurricane::CellViewer, use the new observers.
* Change: In Hurricane::ControllerWidget, use the new observers.
* Change: In Hurricane::CellWidget, set the winidow initial size to a
more sensible 500px.
* Change: In CRL::LibraryManager, use the new observers.
* Change: In CRL::LibraryManager, use the new observers.
* Change: In CRL, in display.conf & technology.conf, modification for
the ST hcmos9gp capacitors.
* Change: In Hurricane, in CellWidget, enable the drawing of ExtensionGos
according to the the threshold paramaters (as layers do).
* Change: In CRL Core, provide DrawingStyle for Anabatic::GCell &
Anabatic::Edge. Use the exact name of the ExtensionGo.
In kite.conf, add settings for the size of an edge as the optimal
size may change between analog & digital designs.
* New: In Anabatic:
- Support for fast position query using a matrix.
- Computation of the Edge capacity, based on the routing gauge parameters.
- Graphic display of the edges capacity. Added configuration
parameters to size the bounding box of an Edge.
* Bug: In Anabatic:
- GCell::_moveEdges was both too complex (some cases never arise the
way we divide GCells) and bugged.
* Change: In Hurricane, in Flags add operator overload for "int" type
and not only "unsigned int". Otherwise the compiler complaints about
ambiguous overload when using enum values which are considered as
"int".
Simpler code for the BaseFlags::contains() method.
Added implicit conversion from BaseFlags toward bool type.
* Change: In Hurricane, in Commons, complete replacement of the previous
two trace systems (trace & ltrace) by a stream-based one.
As it is a true object it is much less fragile than the one based
on defines (but maybe a little slower).
Define a reservation table for the trace levels for all the
Coriolis & Chams components.
* Change: All tools, use the new trace system.
* Change: In Bootstrap, in coriolisEnv.py no longer sets the environment
variable STRATUS_MAPPING_NAME (guessed by init).
* Change: In CRL Core, in System CTOR sets the default value for
"stratus1.mappingName" to "not_set" so the init can known it is not
set.
In etc/coriolis2/*/stratus1.conf, do not set "stratus1.mappingName".
In coriolisInit.py, now guess the value of "stratus1.mappingName"
if it has not already been set by the user. The complete setting
process is as follow (decreasing priority):
1. Setup by the user in his ".coriolis2/setting.py".
2. A "stratus.xml" file is detected in the current technological
directory (example: etc/coriolis2/65/cmos065/setting.xml).
3. Fallback value to "etc/coriolis2/stratus2sxlib.xml".
* Bug: In CRL Core, in scmos_deep_018/technology.conf, the extension
width in PTRANS/NTRANS active layer was too big. 4.0l instead of
3.0l. This was preventing seeing gaps in the active layer by cgt.
They did show up under Graal though...
* New: In CRL Core, in RoutingLayerGauge, adds a new parameter "obstacleDw".
It represents the distance to add from the *edge* of a blockage segment
to the next *axis* of a routing track. This was previously computed as
the pitch minus the mimimum half wire width. This works if the pitch
is *equal* to the wire width plus the minimal distance (edge to edge).
But if the wire width is less, than it leads to too great a distance
around obstacles, making them bigger than they are. And potentially
blocking everything. To summarize:
before: obstacleDw = pitch - wireWidth/2 (deduced)
after: obstacleDw = explicitly setup, usually:
pitch - max(wireWidth)/2
Modify the Alliance configuration helper and the various kite.conf
file accordingly.
* New: In Kite, in BuildPowerRails, make use of "obstacleDw" to compute
the footprint of a blockage.
* Bug: In Hurricane, in Cell::_preDestroy(), the classic mistake again:
do not iterate over a collection while deleting it's elements.
Now should be safe.
* Change: In CRL Core, set the default display style to "Alliance.Classic [black]"
(my favorite).
* New: In boostrap, in ccb.py, added support for the "support" project
which contains external dependencies. Currently contains only
RapidJSON. Those dependencies must be cloned here manually.
* New: In Hurricane, Initializer class for an ordered static initialization
across different compilation modules.
* Change: In Hurricane, at DataBase level, no longer save the Cells in
the libraries, but create and ordered list of Cell. Deepest cells
(leaf cells) first. To avoid dependency problems.
* New: In Hurricane, JSON support for Property.
* New; In CRL, added JSON support for AllianceFramework, Environement &
Catalog and their associated properties. Adjustment of the
AllianceLibrary creation policy.
* Change: In Knik, in Vertex, add a "blocked" flag to signal disabled
vertexes in the grid (must not be used by the global router).
Modificate the Graph::getVertex() method so that when a vertex
is geometrically queried, if is a blocked one, return a non-blocked
neighbor. This mechanism is introduced to, at last, prevent the
global router to go *under* the pad in case of a commplete chip.
* New: In Katabatic, in AutoSegment, a new state has been added: "reduced".
A reduced segment is in the same layer as it's perpandiculars.
To be reduced, a segments has to be connected on source & target to
AutoContactTurn, both of the perpandiculars must be of the same layer
(below or above) and it's length must not exceed one pitch in the
perpandicular direction.
To reduce an AutoSegment, call ::reduce() and to revert the state,
call ::raise(). Two associated predicates are associated:
::canReduce() and ::mustRaise().
Note: No two adjacent segments can be reduced at the same time.
* Bug: In Katabatic, in GCellTopology, add a new method ::doRp_AccessPad()
to connect to the pads. Create wiring, fixed and non managed by
Katabatic, to connect the pad connector layer to the lowest routing
layers (depth 1 & 2). The former implementation was sometimes leading
to gaps (sheared contact) that *must not* occurs during the building
stage.
Remark: This bug did put under the light the fact that the initial
wiring must be created without gaps. Gaps are closed by making doglegs
on contacts. But this mechanism could only work when the database if
fully initialised (the cache is up to date). Otherwise various problems
arise, in the canonization process for example.
* New: In Katabatic, in AutoContactTerminal::getNativeConstraintBox(),
when anchored on a RoutingPad, now take account the potential rotation
of the Path's transformation. Here again, for the chip's pads.
* New: In Kite, support for reduced AutoSegment. TrackSegment associateds
to reduced AutoSegment are *not* inserted into track to become
effectively invisibles. When a segment becomes reduced, a TrackEvent
is generated to remove it. Conversely when it is raised a RoutingEvent
is created/rescheduled to insert it. All this is mostly managed inside
the Session::revalidate() method.
* New: In Kite, in KiteEngine::createGlobalGraph(), in case of a chip,
mark all global routing vertexes (Knik) that are under a pad, as blockeds.
* Bug: In Cumulus, in PadsCorona.Side.getAxis(), inversion between X and
Y coordinate of the chip size. Did not show until a non-square chip
was routed (i.e. our MIPS R3000).
* Change: In Stratus1, in st_placement.py add the ClockBuffer class for
backward compatibility with the MIPS32 bench. Have to review this
functionnality coming from the deprecated placeAndroute.py.
In st_instance.py, no longer creates the Plug ring of a Net.
In my opinion it just clutter the display until the P&R is called.
Can re-enable later as an option (in Unicorn).
* Change: In Unicorn, in cgt.py, more reliable way of loading then running
user supplied scripts. Borrowed from alliance-checker-toolkit doChip.py .
* New: In Hurricane, In Cell, add Placed and Routed flags to know the
state of the Cell.
* Change: In CRL Core, In ApDriver, do not save the RoutingPads as
external connectors if the design is *not* routed (create
conflics on reload with the newly generated RoutingPads).
* Change: In Etesian, set the Placed flag on the Cell.
* Change: In Kite, set the Routed flag on the Cell.
* Change: In Cumulus, in RSavePluginAll, save the layout only if it
has a bounding box.
* New: In Hurricane, In Net & Cell, support for Net aliases names.
Use a structure based on a simple ring of NetAliasHook. The Net
holds a global map, sorted by names of all the aliases of all Nets.
Elements NetAliasesHook of the map are slaves of ring whose master
is an attribute of the Net (it is *not* in the map, as the primary
name of the Net).
In case of merge, the aliases of both Nets are merged and the
name of the merged one become an alias.
The Cell::getNet() looks in both the Net map and the aliases to
find a Net by name.
* Bug: In CRL Core, in coriolisInit.py, reoder the loading of the
configuration files so the real technology is read as early as
possible to set up the <gridsPerLambda> factor before any lambda
is actually computed...
* Bug: In CRL Core, in AcmSigda, do not try to fed the file when it
has failed to be opened. Throw a clean exception instead.
* New: In CRL Core, in Toolbox, add a NamingScheme object to convert
a design into VHDL compliant names (mainly from Blif/Verilog).
This is extensible in any case.
* New: In CRL Core, in BlifParser, slightly more informative warning
messages. Align the loading progress information on the other
parsers.
Add a capability to select which component of the design will
be returned, if there are more than one. Use the "." as separator.
For exemple you can request "Processor.Alu", which will load
the "Alu" component from the design in "Processor.blif".
To be able to save a Blif loaded design, systematically convert
all the name for VHDL compliance, as it is the format used by
the Coriolis native files (vst).
Export the Blif parser to the Python interface.
* New: In Kite, In NegociateWindow, add a counter of the number of
remaining events. Gives an idea of the ETA...
* New: In Unicorn, in cgt.by, add an option to load a Blif design from
the command line.
* New: In Cumulus, new RSave plugin to save both netlist & layout.
Partly redundant with the previous one. Have to better organize
that later.
* Change: In CRL Core, simplify the loading sequence. The technology,
both symbolic and real is now loaded directly from coriolisInit.py
and not through the Alliance loader. This was a leftover from the
time configuration was in XML. Remove others traces of XML loading.
Remove SYMB_TECHNO_NAME, REAL_TECHNO_NAME & DISPLAY from the Alliance
environement, as they was no longer used.
Note that technology *still* need to be loader *after* Alliance
framework has been initialized.
Gauge information is moved from <alliance.conf> to <kite.conf>.
* Bug: In Coloquinte, in optimization_subproblems.cxx static variables
must not be inlined. Generate a problem when linking in debug mode
(seems the symbol gets optimised out).
* Bug: In Katabatic, in Grid::getGCell(), when the coordinate is *outside*
the area, do not try to find a GCell, directly return NULL.
* New: In Unicorn, create a generic command launcher named "coriolis" which
automatically take cares of all environement setup, then run a command
by default, it's <cgt>, but it can be anything. For example: <zsh>.
* New: In CRL Core, remove obsoleted XML files, no longer needed by
Chams. Add stub for technologies CMOS065 (ST) and C35B4, aka
AMS 035.
* Bug: In Knik, update the path where to find the FLUTE lookup tables.
(from 2.4 to 3.1).
* New: In VLSISAPD, in Configuration, add a new priority level UserFile
to distinguish between the system configuration files and the user's
configuration files (which take precedence).
* New: In Hurricane, in Script (Python), improve the API to be able
to support Chams (and remove the duplicate capability from it).
Add separate functions to perform the initialize/run(s)/finalize
cycle step by step.
* Change: In CRL Core, rename real technology <hcmos9> to <hcmos9gp>,
it's offcial name from CMP/ST. This is the 130nm.
Move the reading of the symbolic & real technologies names from
coriolisInit.py to helpers.__init__.py, to be shared with
chamsInit.py.
To avoid a clash of names inside of helpers, the two variables
of techno.py are renamed "symbolicTechnology" and "realTechnology".
Move python init system from crlcore/src/crlcore to crlcore/python.
* New: In CRL Core, In Utilities, add site-packages/pharos to the
PYTHONPATH.
* Change: In Kite, move python init system from kite/src/init to
kite/python.
* Change: In Bootstrap & ccb, the coloquinte project is renamed into
"importeds", it will be the home of all the externally
devellopped softwares that are needed to build Coriolis.
Add explicit support for Fedora ("Linux.fc") and uses
site-packages, as everybody else.
* New: In CRL Core, in etc/, adds the configuration files for Etesian.
* New: In Etesian, activate the Configuration object. Now uses it's
own configuration variables instead of borrowing those of
Nimbus & Mauka.
* Change: In Documentation, updated User's Guide to present Etesian
as the placer, instead of Mauka.
* Change: In Cumulus, slight change in ClokTreePlugin and ChipPlugin
to match the new Etesian/Python interface.
* New: In Bootstrap, in ccb.py, check if cmake is installed and issue
a warning, if not.
* New: In Hurricane, added Cell::getDeepNet() to search for a deepnet
given a path and a leaf net. This method is slow and must not be
used too often. Introduced for Kite::BuildPowerRails().
* Change: In CRL Core, in cmos/alliance.conf, modify the clock name
pattern to match the sub-clock signals in the datapath operators.
* Bug: In Etesian, do not blindly reset the top cell abutment-box.
Do it only if it's empty, otherwise keep it.
* Bug: In Kite, in buildPowerRails(), in getRootNet() the management
of clock nets was incomplete. The case of unrouted clock nets
that where not connected to the top core clock net, like the
one in the datapath registers was faulty. They were partly
recognized as unrouteds and partly as blockage generating a
routing deadlock: routage impossible due to blockage generated
from itself...
* New: In Stratus1, add a buildModel() utility function to automate
the model generation and allow a call by the model name (string).
* Change: In Unicorn, in cgt.py, display the Alliance environement.