* In Hurricane: In Instance::slaveAbutmentBox() and Instance::uniquify()
use isUnique() instead of isUniquified(). This way we do not clone
masterCells that are unique in the design. This was the reason
sometimes "holes" were appearing in the visualiser, as the AB were
not merged. The uniqification policy may need some refinement.
* Bug: In CRL Core, in BlifParser, recognize clocks (Alliance patterns).
* Change: In Cumulus, in RSavePlugin, "kw" manage a new "views" to
specify which views must be saved. Physical by default, but sometimes
we need logical as well. If the design contains uniquified cells,
save the logical view.
In ClockTree, abort the clock tree building if the design has no
top level clock.
* Change: In Katabatic, in GCellTopology, adds 2G_5M1 configuration.
* Bug: Kite, in BuildPowerRails, if we are not in a chip the nets
composing the H-Tree must be protecteds be blockages.
* Change: In Hurricane, in JsonReader::HurricaneHandler, add RawNumber().
Don't know what kind of data it parses, so for now if it's called,
just issue a warning.
* Bug: In documentation, in UsersGuide, add dependencies on doc_HTML and
doc_LaTeX so they are rebuild if the source files changes.
Some modifications to work with our new installation of TeXLive 2014.
* Bug: In Hurricane, in HApplication, ExceptionWidget ans PyHurricane.h,
forgot to catch the Hurricane::Bug exception which was leading to
terminate() without explanations.
* Change: In Katabatic, In GCellTopology, now support one GCell with
five metal1 terminal of the same net. This unlikely configuration
did appear in the SNX for the first time...
* In Katabatic, in AutoSegment::canMoveUp(), adds the ability to reject
the move up if the density of the depth we comes from is below 0.6
in all the GCells, activated with the KbChecklowDensity flag.
* In Katabatic, In LayerAssign, new method moveUpNetTrunk2() which,
unlike the previous one, move up only the part of the Net trunk
which is connex to the seed segment. Use the canMoveUp with
low density checking to avoid unbalancing higher metal layers.
* In Kite, in SegmentFsm, use the canMoveUp() with low density checking.
* Bug: In Hurricane, in Cell_HyperNetRootNetOccurrences::Locator, must
also check that the current Net is not a DeepNet in the constructor.
Take the occasion to prune Net that are automatic.
* Change: In Hurricane, in DeepNet::_createRoutingPads(), check for
already created RoutingPads. That is, the DeepNet must not have
RoutingPad components or Segments components.
* Change: In CRL Core, the Alliance VHDL (vst) driver was renaming the
names of Cells, Instances and Nets into their VHDL conterparts.
But if we still work on the Cell after saving it, the Net renaming
will cause touble, especially when there are DeepNets. The name
of the DeepNet is generated from the Occurrence name with the dot
separator which is *not* a VHDL valid character for name, thus
after that the DeepNet name has changed it cannot be reassociated
with the Occurrence path. This was causing double-flattening issues.
* Bug: In Hurricane, in Cell::flattenNets(), addition to the topHyperNets
vector was done *inside* the components loop, resulting in multiple
additions of the same top net. This was leading to the RoutingPads
created multiple times on the same connectors. Hence the conflict in
KiteEngine::protectRoutingPads().
* Change: In Hurricane, in Cell::flattenNets(), do not create RoutingPads
or build rings on already routed Nets. A Net is considered already
routed if it has at least one Segment. This way we avoid Rubbers to
be drawn over routed Nets.
* Change: In Hurricane, in DeepNet, do not build RoutingPads & rings on
already routed Nets (same condition as in Cell::flattenNets()).
* New: In Hurricane, in HyperNet, new collection of all component
occurrences of an HyperNet. May or may not (default) include
components from the leaf cells.
* Bug: In Hurricane, In Cell, the quad-tree cannot be mergeds because
when a geometrical search is performed, components, and even more
importantly, instances from lower hierarchical levels will be
reported. And there is no simple way to discriminate them.
* Change: In Hurricane, Cell & Instance, change the flag of
MergedQuadTree into SlavedAb.
* Bug: In Hurricane, In Instance::slaveAbutmentBox(), the AB of the
master model must be set before calling setPlacementStatus()
otherwise the Instance do not get inserted into the quad-tree
(empty AB).
* New: in Katabatic, in AutoSegment, recognize segments that are U-turn.
That is, based on two turn Contacts and going both top or bottom.
* New: In Kite, manage one pitch U-turn by making them diseapear from
the tracks. And make them same-metal when saving. Add a pack stage
to try to compact U-turn.
* Bug: In CRL Core, in VhdlEntity, when a scalar signal is also global,
two ScalarSignal where created, but only one can be linked as a
property on a Net. So when the one *not* linked as a property was
deleted, an infinite loop started (under Cygwin at least).
The _globals list now contains pointers to signals that are in
_signals. The _globals elements no longer needs to be deleted.
* Change: In Katabatic, in GCellTopology::doRp_AccessPad(), if the supporting
RoutingPad is big (more than two pitch), do not put the access
contact in the center but on the edge. This is to avoid cut violations
between the VIAs and the matrix of VIAs that may be generated under the
RoutingPad itself.
* Change: In Kite, in TrackSegment destructor, if the legnth of the wire,
without extensions is less than one picth, enlarge it so it encompass
it's source & target VIAs (to avoid notches).
* Bug: In Kite, in Track destructor, the TrackElements where detacheds,
but not deleted, causing a memory link.
* Bug: In Hurricane, in CellWidget, do *not* rescale iteratively the _initialSide
attribute under high DPI (do it once).
* Bug: In Hurricane, in CellPrinter, suppress the divide by 4 scaling of the
printer widget. Don't remember why I did so, and it generate too small
pictures.
* 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).
* Change: In bootstrap, in socInstaler.sh, use the current version of
rapidjson.
* Change: In Hurricane, in FileWriteGzStream, complie to the latest
rapidjson headers organization.
* New: In Hurricane, in Cell, emit a new signal CellDestroyed toward the
observers (i.e. the CellViewer(s)), from _preDestroy().
* Change: In Hurricane, in CellViewer, in CellObserver::notify(), manage
the CellDestroyed case. Do not forget to remove the deleted Cell
from the viewer's history.
* Change: In bootstrap, in socInstaller.py checkout the support git
repositories (currently, only rapidjson). Send the report mail
to <jpc> & <lao>.
* Bug: in VLSISAPD, in the top CMakeLists.txt, do not requires the
Hurricane cmake, it is build after (cycling dependency).
* Test: post-receive hook on server should send mail [1].
* New: In VLSISAPD, in Parameter, callback have now a tag, which the
pointer to the caller. This allow for the callback removal when
the caller is destroyed.
* New: In VLSISAPD, in WidgetDescription, when associated to a parameter,
the destructor must remove the associated callback function on
the Parameter.
* New: In Hurricane, added JSON support for Configuration, separated
from vlsisapd, as the support is not available at this point.
JSON support for Configuration, Parameter & LayoutDescription.
* Change: In Hurricane, in JsonStack, the stack of JsonObjects has been
displaced here from HurricaneHandler. This way, all
JsonObject::toData() can access the JsonOjects in the context
of the parser.
* New: In Hurricane, in DBo::toJson() added support for Entity by
reference (ids).
* New: In Hurricane, added JSON support for all Layer sub-class types.
* New: In Hurricane, in Technology, export the Layers, but must be
sorted by increasing mask value.
* New: In Hurricane, in Entity, added support for Entity by reference (ids).
* New: In Hurricane, in DataBase, added technology full support.
* New: In Hurricane, In JsonNet, move the ring rebuild management from
JsonStack to JsonNet.
* New: In Hurricane, added JSON support for NetAlias, NetExternalcomponents
(not cleanly implemented as a Relation).
* New: In Hurricane, new method Cell::fromJson() to load a cell from
a JSON file.
* New: In Hurricane, In Graphics, make it an observable, for when JSON
fully reload the graphic state, it must be able to notify other
objects (namely the Controller).
* New: In Hurricane, in ControllerWidget, observe the Graphics to regenerate
the palette as needed. New method ControllerTab::graphicsUpdated().
* New: In Hurricane, in RawDrawingStyle added a destructor to release the
Qt pen/brush. Added JSON support for HSVr, DrawingStyle, DrawingGroup,
& DisplayStyle.
* New: In Hurricane, in GraphicsWidget, rewrite correctly the readGraphics()
to erase the previous widgets and re-create the new ones.
* New: In Hurricane, in PaletteWidget, correct re-creation of the layout/widgets
in case of Graphics change.
* New: In CRL Core, in System, register the parameters callbacks with
the address of the object, for later deletion.
* New: In CRL Core, in AllianceFramework, make it observable, to notify
library changes. For the AllianceFramework creation, now allow to
completly bypass the Python initialization system, when we expect
to restore it from a full blob. Added methods to sets the default
RoutingGauge & CellGauge.
* New: In CRL Core, added JSON suppport for CellGauge, RoutingLayerGauge
& RoutingGauge.
* New: In CRL Core, in LibraryManager, oberver AllianceFramework, to update
the list of libraries in case of change (for JSON full reload).
* New: In VLSISAPD, in Parameter, callback have now a tag, which the
pointer to the caller. This allow for the callback removal when
the caller is destroyed.
* New: In VLSISAPD, in WidgetDescription, when associated to a parameter,
the destructor must remove the associated callback function on
the Parameter.
* New: In Hurricane, added JSON support for Configuration, separated
from vlsisapd, as the support is not available at this point.
JSON support for Configuration, Parameter & LayoutDescription.
* Change: In Hurricane, in JsonStack, the stack of JsonObjects has been
displaced here from HurricaneHandler. This way, all
JsonObject::toData() can access the JsonOjects in the context
of the parser.
* New: In Hurricane, in DBo::toJson() added support for Entity by
reference (ids).
* New: In Hurricane, added JSON support for all Layer sub-class types.
* New: In Hurricane, in Technology, export the Layers, but must be
sorted by increasing mask value.
* New: In Hurricane, in Entity, added support for Entity by reference (ids).
* New: In Hurricane, in DataBase, added technology full support.
* New: In Hurricane, In JsonNet, move the ring rebuild management from
JsonStack to JsonNet.
* New: In Hurricane, added JSON support for NetAlias, NetExternalcomponents
(not cleanly implemented as a Relation).
* New: In Hurricane, new method Cell::fromJson() to load a cell from
a JSON file.
* New: In Hurricane, In Graphics, make it an observable, for when JSON
fully reload the graphic state, it must be able to notify other
objects (namely the Controller).
* New: In Hurricane, in ControllerWidget, observe the Graphics to regenerate
the palette as needed. New method ControllerTab::graphicsUpdated().
* New: In Hurricane, in RawDrawingStyle added a destructor to release the
Qt pen/brush. Added JSON support for HSVr, DrawingStyle, DrawingGroup,
& DisplayStyle.
* New: In Hurricane, in GraphicsWidget, rewrite correctly the readGraphics()
to erase the previous widgets and re-create the new ones.
* New: In Hurricane, in PaletteWidget, correct re-creation of the layout/widgets
in case of Graphics change.
* New: In CRL Core, in System, register the parameters callbacks with
the address of the object, for later deletion.
* New: In CRL Core, in AllianceFramework, make it observable, to notify
library changes. For the AllianceFramework creation, now allow to
completly bypass the Python initialization system, when we expect
to restore it from a full blob. Added methods to sets the default
RoutingGauge & CellGauge.
* New: In CRL Core, added JSON suppport for CellGauge, RoutingLayerGauge
& RoutingGauge.
* New: In CRL Core, in LibraryManager, oberver AllianceFramework, to update
the list of libraries in case of change (for JSON full reload).
- Add OpenChams::SlicingNode class to drive/parse XML files.
OpenChams::SlicingNode contains information to create a real slicing tree (SlicingNode from hurricaneAMS)
- Minor modification in Circuit.cpp for case when HBTree are not described in XML file.
* 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.
* New: In Hurricane, added first support for DataBase native import/export
using JSON.
We choose RapidJSON, in SAX mode, to manage the JSON format low level
Read/Write. Thus, it's Git repository http://github.com/miloyip/rapidjson
must be added under ~/coriolis-2.x/src and manually build and installed
in the Coriolis installation tree (to be integrated in ccb later).
Two mode are being supported:
1. Cell mode: one Cell only is saved. In that mode, Entities
referred by Occurrences are "outside" the file. They are coded
through their "signature" (mostly, all the values of their
attributes). The ids saved in the file cannot be restored
identically as we cannot predict when and in which context the
Cell will be reloaded.
2. Design Blob mode: the whole design hierarchy, down and including
the standard cells is saved. This way the design is completly
self contained and Entities ared referred through their ids.
A design blob can only be loaded immediatly after starting cgt
as the DataBase *must* be empty. This way we restore the whole
design hierarchy with *exactly* the same ids.
Now, Hurricane object should provide a "toJson()" method for driving
JSON, and be associated with a JsonObject derived class for parsing.
* New: In Hurricane, ability to force the next id that will be used for a
DBo (used by Design Blob Mode).
* New: In Hurricane, in DataBase, added getCell() and getLibrary() functions
to allow the hierarchical access of a Cell/Library in native mode
(i.e. whithout the requirement of AllianceFramework).
* New: In Hurricane, In CellViewer, added menu entry for Save/Load of
JSON Design Blobs. Added at this level because we consider it as the
"native" format of Hurricane.
* New: In Unicorn, added support of import/export of JSON Cell.
* Bug: In Hurricane, in Instance, when cloning an Instance or uniquifying
it's master Cell, we forgot about the Occurrences (through shared pathes).
When an instance is cloned the Shared pathes still points toward the
original Instance. And when it's the master Cell that is uniquifyed
it's the Entities pointed to that remains in the original Cell.
This is a software design problem. It is difficult to define what
policy to adopt when uniquifying: basically that means that one
Occurence is either moved onto the clone or duplicated. Furthermore,
it is not trivial to known what Occurrence is pointing on the
uniquifyed/cloned item. Have to think about it a little more.
* Bug: In Etesian, in EtesianEngine, build the flattened nets and their
RoutingPads *after* uniquifying (through slaving bounding boxes).
This way we avoid the Occurrences problem described above.
* Bug: In Etesian, in EtesianEngine, invalidate the RoutingPad after
processing the placement so they are put into the right quadtree.
This problem is due to the fact that the RoutingPads do not belong
to the Instance that they refer. And when this instance is moved
around, she doesn't inform the RoutingPad that is has moved.
More software architecture design to review...
* Bug: In CRL Core, in Vst driver, remove VhdlEntity (from Cell) and
BitProperty/Bit (from Net) with the property remove and not the
destroy() method. The BitProperty removal was completly forgotten
leading to the use of removed Signals when doing multiple saves
(hence core-dump).
* Change: In CRL Core, in Vst driver, never save as Signals the DeepNets
as they are created by a virtual flatten and do not connect any
instances at top level. Note that they will exists in the physical
file if routing layout has been created.
* Change: In vlsispad, in Dots, add an enable/disable flag because when printing
into a cmess, it is only the base class ostream which is took into account
as none of it's methods are virtuals (silly me).
* Bug: In Etesian, print into cmess instead of cout and make use of the Dots
enabling feature.
* New: In Katabatic, added AutoContact::migrateConstraintBox() to transfert
constraint from one contact to another.
New flag for AutoContact, CntWeakTerminal for AutoContact which are at
the other of a segment directly connected to a terminal. They may hold
special constraints in case of caged terminals (computed in Kite).
In AutoHorizontal & AutoVertical, in ::_makeDogleg(), transfert flags
and constraints when breaking a segment directly connected to a terminal.
* New: In Kite, in protectCagedTerminals(), uses cross constraint on the
AutoContact opposite to the ContactTerminal (CntWeakTerminal) instead
of moving up one terminal over two consecutives. This is simpler without
degrading the routing quality.
* 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 NetlistWidget & NetlistModel, adds a column for
the RoutingPads count. Special display to mark global nets.
* Change: In Hurricane, in all MVC's models, some improvements on the
way the columns are sized and the titles displayeds.
* Bug: In Knik, in Graph::Dijsktra(), when all the RoutingPads of a net
are aligned, the seaching area is only one vertex wide (in width or
height). That is, it contains only one edge in it's main direction.
So when that sub-graph contains a fully blocked edge, Dijkstra cannot
find a path... Now enlarge the one edge graph to at least three by
inflating the search area. Curiously a code for similar purpose seems
to be present, but commented.
* New: In Hurricane, added hierarchy browser in the controller.
The hierarchy is presented as a tree. New MVC, HierarchyInformations,
HierarchyModel and HierarchyBrowser.
When using a data model which is not directly connect inside the
model, we must use the internalPointer field of the QModelIndex.
But this field is also used by the QSortFilterproxymodel, this
prevent using it with a Tree model.
The filter is directly implemented and is specific to each
Instance entry.
* Change: In CellWidget & CellWidget::State, now store the Cell and
a Path, this way we can keep track of the hierarchy when browsing.
The Path is in the State and so propagated back to the Controller.
* Change: In HierarchyCommand, use the Path with setCell().
* New: In Hurricane, in Cell & Instance, add the ability to merge the
QuadTree when *second level* instances of a Cell are placed in
the same space as the top Cell. This is the case of a deeply
hierarchical design made of only standard cells that are to
be placed in a "flat" manner.
The design is uniquified then the intermediate instances models,
which should be unique at that point have their QuadTree merged
through a call to Instance::slaveAbutmentBox(). That method will
make the model of the instance use the QuadTree of the Cell to
which the instance belong. The instance model no longer posseses
a dedicated QuadTree. As a corollary the abutment box of both
Cell are kept identical and the Instance has it's transformation
set to (0,0,ID).
Remark: when we talk about "QuadTree", we mean in fact the
QuadTree for the instances *and* the SliceMap (Layer+QuadTree).
Consequence in Query: when going through the resulting
"flattened" QuadTree we will find objects with an incomplete
Path du to the fact that we didn't have to explore their
Instance/Cell level to reach them. The shunted part of the
Path is stored in the Go master Cell in the _shuntedPath
attribute. This also affect the displayed depth of hierarchy,
but not too badly.
* New: In Hurricane, in Cell, new methods:
- Cell::updatePlacedFlag() : set the placement flags.
- Cell::isUnique() : one or less instance.
- Cell::isUniquified() : is the result of an uniquification.
- Cell::isUniquifyMaster() : is the reference cell of the
uniquification.
* Change: In Hurricane, in Cell::Uniquify(), uniquify a Cell only
if it is unplaced. We do not need to duplicate placed Cells
(see datapathes).
* Change: In KiteEngine::wipeoutRouting(), remove only the Contacts
that are *not* anchored. Any other will be indirectly destroyed.
* New: In GraphicKiteEngine, add an encapsulation and a menu for
wipeoutRouting().
* New: In Hurricane, in Cell, no longer create rings of RoutingPads when
flattening the nets. Put that functionnality into a separate method
::createRoutingPadRings().
This allow to perform the Net flattening in Etesian *without*
the rings, which slow it down. Then the rings are created by
Knik/Kite. This also solves the double ring creation when doing
P&R of a complete chip (rings where created twice: in the core
block for Etesian and at chip level for Kite).
* Change: In Etesian, slight beautification of the printed informations.
(psychorigid me)
* Bug: In Hurricane, In NetAlias::removeAlias(), perform the isMaster()
check on the *current* hook, not the *this* one... Was preventing the
removal of most aliases.
* New: In CRL Core, in DefExport, perform a virtual flatten before exporting
a design. Replace the hard-wired "sxlib" gauge by the current default
one. More secure management of flattened instance and net names (removal
of all potentially special characters). In net names, correct management
of vectorized names (do not systematically add "_net" at the end).
In DefImport, manage the BUSBITS property and revectorize accordingly
the net names. When loading nets, systematically remove the alias of
the temporary net "__prebuild__" (a bug in NetAlias was preventing it).
In LefExport, the right value of MANUFACTURINGGRID in pseudo symbolic
mode is 0.5 (expressed in lamba). That way all length are even multiples
of it. Note that there is still the order bug of the 5.7 drivers that
puts that entry *before* UNITS in the LEF file (bad bad Cadence).