* New: In cumulus/plugins.block.congiguration: New PowersConf config
sub-object to store characteristics of the "powmid_x0" cell.
The name of the Cell with which to build the vertical power
rails is given though the cfg parameter:
"cfg.etesian.cell.power"
* New: In cumulus/plugins.block.spares, add support for creating
vertical power lines along with the buffers pools of the H-Trees.
At most, one vertical power rail will be put exactly at the right
edge of the buffer pool of each leaf QuadTree. We can reduce that
number, using the parameter:
"cfg.block.vRailsPeriod = N"
Which give the ratio to use (one over N QuadTree leaf).
WARNING: This may not work if the QuadTree is "dented" not in a
corner but in the *middle* of the side. Needs to be
improved and/or checked.
WARNING: We are partially duplicating the informations pertaining
to the Alliance catalog (stored in the Catalog property)
directly into the Cell. This is needed for Flexlib which
is not using the Alliance loading mechanim. Ideally the
Catalog information should be moved into the Cell.
* New: In Cell, add new state flags Diode, PowerFeed (in addition to
Pad & Feed).
Export flags setter/getter to Python. For Flexlib usage.
* Change: In AllianceFramework::getInstancesCount(), correctly skip
Diode & Feeds based on Cell flags. Those flags must correctly
be set in the various Flexlib_fix.py scripts.
* Bug: In Track::repair(), when closing a same net gap, the amount the
"right" segment duSource must be shifted left was incorrectly
computed in some instances.
The previous calculation was assuming that the right edge of the
gap was at the exact same position than the source extension.
But when there is a non-preferred direction connected to it, this
is wrong. Now compute the delta accounting for a difference
between the right edge of the gap and the source extension.
NOTE: Due to Python pathes, the NDA.common is *not* seen, even by NDA
protected configuration. They are using the non-NDA one. No harm
in that, just need to be known...
* New: In AllianceFramework::getInstancesCount(), add a flag TerminalNetlist
to stop recursion on "terminal for netlist" instance level. This is to
avoid counting physical only or non-routed instances inside hard macros,
like SRAM blocks. This was leading to an overstimation of the "size"
in number of gates of the routing problem.
* Change: In KatanaEngine CTOR, call for the terminal for netlist number of
gates...
* New: In DeepNet, add an DeepNet::Uplink property on the HyperNet
root net Occurrence so we have a direct two-way link between
the top (flattened net) and the root of the HyperNet.
Down link is ensured by the Occurrence, up link by the Uplink
property.
* Change: In Cell::getDeepNet(), now use the DeepNet Uplink property
instead of looping over *all* top nets. This was the cause of the
terrific slow down in PowerRails, especially on flatteneds designs.
* New: In AnabaticEngine::printMeasures(), re-enable runtime & memory
footprint in measurements.
* Bug: In Anabatic::AutoSegment CTOR, correct computation of the initial
number of global segments. We were relying on the "global" flag,
which is *not* set at this stage. Now compare source and target
GCells.
* New: In KatanaEngine::runGlobalRouter(), store H-ovE & V-ovE in
measurements.
* New: In KatanaEngine CTOR, add the number of gates (flattened) to
the measurments.
* New: In KatanaEngine::runNegociate(), add the number of GCells to
the measurements.
* Change: In KatanaEngine::printCompletion(), compute the wirelengths
in either lambdas (symbolic) or *nanometers* (real).
* New: In cumulus/plugins.block.Block, add a setting to request the
Katana measurements dumping: "cfg.katana.dumpMeasures"
* Bug: In all CMakeLists.txt, it seems I was doing a worng use of
target_link_library(). No longer add dependencies to the C++ base
library but instead either to the Python associated module or
to the final binaries. This was inderectly causing the linking
problem related to Python (which was a misdirection).
* Bug: Typo in FindLibexecinfo.cmake, do not use FindLib[E]xecinfo.
* Change: In CRL/ccore/CMakeLists.txt, activate SKIP_AUTOMOC on
bison/flex generated files.
* Bug: In viewer/PyHApplication, do not delete the C++ object in
the Python destroy method.
* Change: In cumulus/plugins.block.HTree._rrouteHTree(), make the
non-routing of the root net the default policy. Straight routing
can still be activated with the use of Spares.ROUTE_ROOT_NET.
* Change: In Anabatic::NetBuilder::construct(), add support for up to 5 M1
terminals in calling _do_1G_xM1_1PinM2(). When inserting diodes on
long wires, when there is not enough space underneath, they may end
up gouped at an end.
* Bug: In cumulus/plugins.block.HTree._rrouteHTree(), on the top level
H-Tree, draw a wire to the north side of the abutment box *only*
if the root (usually clock) signal is *external*. It may be that
it is *internal*, so must be routed as a normal one to the root of
the tree.
* Bug: In Common.h, makes the INSPECTOR_PV_SUPPORT to generate a getRecord()
by *value* instead of *by reference*. Seems the overload resolution
system has changed and discriminate between them using now the exact
match.
This was causing InspectorWidget::setRootoccurrence() to fail, the
getRecord(Occurrence) not corectly resolved always returning NULL.
* Change: In Occurrence, now use INSPECTOR_PV_SUPPORT (instead of PR).
* Change: In SelectionPopup, added a _cellWidget attribute to be able
to call setShowSelection() in ::mouseReleaseEvent(), same as for
SelectCommand.
* Bug: In SelectionWidget::changeSelectionMode(), reset the _updateState
to ExternalEmit in *all cases* at the end of the function call.
Failing to do that was another cause for the selection check box
to desinchronize.
* Bug: In CellWidget::drawGrid(), the scaling of grid was never recomputed
according to the zoom level. So in low zoom, it was too fine and
hidding everything underneath...
Now always display between 1 and 10 lines. Lines are put on the
grid step.
Makes the grid draw in dotted lines, seems to looks nicer.
* New: In CRL::DefImport, the previous version of the parser was designed
only to read pure netlists, no physical components. Now add features
for:
* VIA generate statements. Generated VIAs are created as Cell and
then instaciated wherever they are needed. Alternative would be
to duplicate it's contents so the original netlist is not changed.
But would create lot more objects.
* PIN, added support for basic physical shapes.
* SPECIALNETS and their associated wiring (path callback).
Note: (to myself) As the Path is created *before* the NET or SPECIALNET
callback is called, we must create a temporary net to store
the path components. This is the "__prebuild__" net which
will be merged later with the actual net.
* Bug: In def/def_keywords.cpp, in defrData::pathIsDone(), the attribute
defrData.PathObj was *forcibly* deleted directly inside the defrData
class (with defrData remaining allocated). Either there is something
I enterily miss or this is a big blunder.
This was causing DefImport parser to crash, when activating the
Path callback.
* Bug: In CellViewer::setShowSelection(bool), this slot is connected
to the hidden 's' menu key. It was toggling state according to
the state of the *menu key* (Qt) which was *not* kept in synch
with the state of the CellWidget. So it was causing desinchronized
selection visibility toggle. Now, ignore the state of the menu
and toggle the CellWidget state directly.
* Bug: In Selector::attachTo(), when adding the new CellWidget to the
map<>, the initial flag must be Selector::Selected instead of 0,
so we see it.
* Change: In CellWidget & ControllerWidget, adjust the default size of
the widgets (to better suit my display...).
* Bug: In Katana::Session::_addMoveEvent(), an error message is issued if
the segment is not *already* in a Track. But, it is not the case for
non-preferred Segment or reduced segment and it is valid. So suppress
the message in those cases.
* Bug: In cumulus/plugins.block.htree._connectLeaf(), when HEAVY_LEAF_LOAD
was used, the additionnal horizontal segment added to connect the
extra buffer may have been:
1. Misaligned, causing the blockage to be wrongly taken into account
and leading to potential short circuits.
2. In some RoutingGauge configurations, the extra length added to
the segment left extention was too short, leading to DRC violations.
So created new GaugeConf methods to manage thoses problems:
* GaugeConf.getStackX() & GaugeConf.getStackY() to get back the
contact coordinates of the *deep* part (typically the METAL2).
So be able to align on them.
* GaugeConf.createHorizontal(), added a parameter to explicitely
state the additional length of the *left* extension. This is lazy,
will soon add both.
* Change: In Hurricane::SharedPath, the hash for the shared pathes, which
serves for Map<> storing, were computed "on the fly" at each
::getHash() call, and were involving recursive calls of all the
hashes along the components of the shared path. This is terribly
slow especially in a design with a deep hierarchy (typical case
LS180).
Now, at the cost of one supplemenental unsigned long in each
SharedPath, it is only computed once in the constructor, and is
no longer recursive (only access the *first* tail, if any).
As a consequence, the re-display computation delay becomes
bearable. But also speed up any transhierarchical walkthough.
* Change: In Etesianengine::toHurricane(), no longer call interTies().
This *should* no longer be needed as almost all standard cells
(SxLib & FlexLib) already contains polarisation contacts.
So do not need to disturb the placement.
Secondly, in presence of a H-Tree, when there is not enough
space to insert a sufficient number of tie cell, the lefmost one
in the sub-row is shifted to left, overlaping the H-Tree buffer
cells. This is a bug (even signaled by a warning). But as this
part is disabled, I won't correct it soon...
* Change: In Cumulus/plugins.block.Block, for standalone block,
the external Pin where created non-square, the "perpandicular"
side made a half wire width. But in case the wire width was an
odd number of physical grid, it was leading to offgrid screaming
in the GDS driver.
Now, just make them square...