* Change: In CellWidget::_redraw(), the boundaries, that is, instances
abutment boxes where drawn *after* everything else, so they where
hiding more interesting informations (especially at low zoom level)
like routing wires.
Now draw them *first* so they are *below*.
* Change: In CellImage::setScreenCellWidget, fully copy the display
settings from the reference widget (not just part of them).
* Bug: In CellImage::toImage(), if the abutment box of the displayed
cell is not *fully* includer in the viewer area, do *not* try to
reframe it. The reframe() method seems to be buggy, works OK
just without calling it.
* Bug: In Viewer::SelectionPopup(), the window attribute
Qt::WA_DeleteOnClose was *not* cleared. So the window was deleted
after first use while it was though staying allocated.
Again, generating weird crashes.
Took the occasion to slightly redesign the behavior to select
and highlight individual components.
* Bug: In Isobar3::PyTypeManager, the accessors _getCppTypeName() and
_getPyTypeName() where returning string *by value*, hence, short
lived copies.
But, in _setupPyType() and _addToModule(), as we interface with
the Python/C API, we extract the c_str(). Which where removed as
we used temporary objects. Leading to memory corruption and weird
crashes.
Now returns "const string&" so the c_str() stays allocated.
* Bug: In CellWidget::DrawingQuery::drawGo(), the display condition was
wrong, it was requiring *both* width & height to be above the display
threshold. Either one is sufficient to activate the display.
Was causing the selective diseapearance of gates at low zoom level
and printed version.
* Change: In CellPrinter, force the display threshold to one pixel in it's
internal CellWidget used for printing.
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.
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 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.
* 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.
* 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.
* 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...).
* 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.
This field has been deprecated in Python 3 and no longer exists at all
in Python 3.9, causing a build error.
Signed-off-by: Myrtle Shah <gatecat@chipflow.io>
Note: We don't suppress warnings due to unused variables or functions,
as we may need them later or in debug mode...
* Change: In Hurricane::DBo::~DBo, add a noexcept(false) because
constructed by default destructor of derived classes seems to
loosen it. The right solution whould be to explicitely define
all virtual destructors (too lazy for now).
* Change: In Viewer::Script, replace the deprecated
PyModule_GetFilename() by PyModule_GetFilenameObject(), Unicode
support again...
* Bug: In Hurricane::Backtrace(), the std::regex supplied by gcc 4.8.5
seems to be buggy. So, for now, to compile on my reference system,
revert to C POSIX.
* Change: In Isobar3::PyWrapper, C++ exceptions where not catcheds,
forgot to call exceptionWrapper().
* Change: In Isobar3, remove unused pyToC<>() flavor where T is a
simple pointer and the argument is also a simple pointer, does
not make sense.
* New: In hurricane/configuration, the Python/C template wrapper has
now all the needed features to mass-migrate Hurricane and the
ToolEngines.
The new Hurricane module is named Hurricane3 so it does not
collides with the old one which is still used. Will do the
same for all ToolEngines Python wrappers until migration is
complete.
* New: In unittests/python/, create very basic unit tests for the
Configuration & Hurricane new template wrapper.
Note: It is almost impossible to use valgrind on them because
it doesn't recognize correctly Python allocation mechanism.
To make it work, both valgrind & Python needs to be
recompiled with special options...
* New: Python/C++ API level:
* Write a new C++/template wrapper to get rid of boost::python
* The int & long Python type are now merged. So a C/C++ level,
it became "PyLong_X" (remove "PyInt_X") and at Python code
level, it became "int" (remove "long").
* Change: VLSISAPD finally defunct.
* Configuration is now integrated as a Hurricane component,
makes use of the new C++/template wrapper.
* vlsisapd is now defunct. Keep it in the source for now as
some remaining non essential code may have to be ported in
the future.
* Note: Python code (copy of the migration howto):
* New print function syntax print().
* Changed "dict.has_key(k)" for "k" in dict.
* Changed "except Exception, e" for "except Exception as e".
* The division "/" is now the floating point division, even if
both operand are integers. So 3/2 now gives 1.5 and no longer 1.
The integer division is now "//" : 1 = 3//2. So have to carefully
review the code to update. Most of the time we want to use "//".
We must never change to float for long that, in fact, represents
DbU (exposed as Python int type).
* execfile() must be replaced by exec(open("file").read()).
* iter().__next__() becomes iter(x).__next__().
* __getslice__() has been removed, integrated to __getitem__().
* The formating used for str(type(o)) has changed, so In Stratus,
have to update them ("<class 'MyClass'>" instead of "MyClass").
* the "types" module no longer supply values for default types
like str (types.StringType) or list (types.StringType).
Must use "isinstance()" where they were occuring.
* Remove the 'L' to indicate "long integer" (like "12L"), now
all Python integer are long.
* Change in bootstrap:
* Ported Coriolis builder (ccb) to Python3.
* Ported Coriolis socInstaller.py to Python3.
* Note: In PyQt4+Python3, QVariant no longer exists. Use None or
directly convert using the python syntax: bool(x), int(x), ...
By default, it is a string (str).
* Note: PyQt4 bindings & Python3 under SL7.
* In order to compile user's must upgrade to my own rebuild of
PyQt 4 & 5 bindings 4.19.21-1.el7.soc.
* Bug: In cumulus/plugins.block.htree.HTree.splitNet(), set the root
buffer of the H-Tree to the original signal (mainly: top clock).
Strangely, it was only done when working in full chip mode.
* Change: In <tool>/CMakeLists.txt, add an USE_LIBBFD option to
enable the link against the BFD library. Latest versions seems
to have changed their API.
* Change: In bootstrap/ccp.by & builder/Builder.py, add an option
"--bfd" (and self._bfd) to enable BFD support.
The H-Tree support is now allowed for any net, not only the clocks and
not only top-level nets. This allow to better management of the LS180
internal clock signal.
* New: In Cell::flattenNets(Instance*,set<string>,uint64_t) new overload
of the function to allow the user to select nets that will *not*
be flattened. This makes the NoClockFlatten flag effectively obsolete,
we keep it for backward compatibility.
The net names can be of non top level ones. In that case, they must
use the name an HyperNet will get (the Occurrence name). For example:
"instance1.instance2.deep_net_name".
* New: In PyCell, update the wrapper for the new parameter of flattenNets(),
new utility function pyListToStringSet() to translate a Python list into
a C++ set of names.
* New: In EtesianEngine, add support for a list of nets to be excluded
from the flattening procedure. Those excluded nets will also be
excludeds from the Coloquinte nets *and* HFNS synthesis, as they
are likely to be manageds by a H-Tree.
* Change: In AnabaticEngine::_loadGrByNet(), now also skip nets that are
flagged as manually detailed route.
* New: In AnabaticEngine::antennaProtect(), do not try to insert diodes
on nets that are already fixed or detaled route. This replace the
clock exclusion.
* New: In cumulus/plugins.{block,htree,chip}, replace the concept
of clock-tree by the more generic H-Tree. That is, we can ask the P&R
to create H-Tree on any net of the design, not only the ones matcheds
as clock. The net does not even need to be top-level.
This is to manage the PLL internal clock generated by the PLL in
the LS180 chip.
Start to change all reference to "clock" into "H-Tree".
* Bug: In cumulus/plugins.chip.powerplanes.Builder._connectHTree(),
there was an inversion of the H & V routing gauges to compute the
track into which put the H-Tree center to corona edge wiring.
This was causing tracks to be used twice, seen in the ao68000 test
bench.
* Change: In Hurricane::NetAlias, store additional data in NetAliasName,
the external status of the former Net. When a Net::merge() is
performed, we must keep track of whether the merged (destroyed)
one was external and keep that information.
Add NetAliasHook::isExternal() & NetAliasHook::setExternal()
virtual methods.
* Change: In Net::getNet() add a new optional argument to allow the
search of the net name in *internal* aliases. Otherwise only the
aliases tagged as *external* will be searched.
It was a bug that, when looking for a Plug master net by name
we got an homonymous internal net. In that case we must only
look for net that are (or where) part of the interface.
* New: In Vhdl::VectorSignal, when a vector contains only one bit,
unvectorize it, like when it is non-contiguous (we use the
isCountiguous() method to carry that information).
* New: In Vhdl::VhdlEntity, Catalog::State and NamingScheme, added
a flag UniquifyUpperCase to uniquify the names in uppercases.
In case of a clash with the same name in lowercase.
Prepend 'u' before all previously uppercased letter. For
example 'VexRiscV' becomes 'uvexuriscuv' (urgh!).
The Catalog flags is exported to Python for use by the blif2vst
script.
* Change: In BlifParser, Model::newOne() and Model::newZero(), return
a new gate each time it is called instead of making just one for
each Model. This way, if two outside nets are connected to one
or zero they do not get merged (should work, but will be less
clear).
* Bug: In BlifParser, Model::connectSubckts(), when looking for the
master net in the instances models (by name), limit the search
to the *external* aliases names.
* Change: In NamingScheme::vlogTovhdl(), reactivate the removal of
two consecutive '_'.
* Change: In cumulus/bin/blif2vst.py, prefix the master cells
(i.e. components) with 'cmpt_' to avoid clash names with signals
in VHDL.
* Bug: In HyperNet_ComponentOccurrences::Locator::progress(), (Collection
locator), the _netOccurrenceLocator (which progess along the various
Net occurrences of the HyperNet) was not in synch with the
_componentOccurrence locator of the current net. It was pointing
to the *next* net occurrence.
The result was the generation of a path for the net commponents
that was incorrect (it was the path of the *next* net occurrence),
and making Occurrence constructor throw an exception.
* Change: In Cell::flattenNets(), DeepNet::_createRoutingPads(),
Occurrence::Occurrence() and UpdateSession, added even more trace
informations.
* Bug: In RoutingPad::setExternalComponent(), we where always forcing
the materialization of the RoutingPad (QuadTree insertion). Now
respect the Go::enableAutoMaterialization() state.
Forcing the materialization is equivalent to having an
UpdateSession. So when creating large amount of RoutingPads it did
result in huge slow down, like in HFNS algorithms.
With this modification we go down from 6h+ to 4m for the ls180.
* New: In Query & QueryStack, add a new stop criterion "stopCellFlags"
based on the flags of the instances master cell. The instance will
still be processed, but not it's childs. Typically used to stop
exploring on "AbstractedSupply" cells.
Exported in the Python interface.
* New: In Cell::Flags, new value "AbstractedSupply" to mark Cells from
which an abstract has been built for supplies & blockages. But *not*
for common nets. Helps reduce the recursion through the hierarchy
when building supply line in FlattenPower.
Export setter/getter in the Python interface.
* New: In Instance, add a "PruneMaster" filter to stop hierarchical
exploration on instances which master cells have at least one of
the given flags set.
* Change: In NetExternalcomponents::isInternal(), use "const Component*"
instead of "Component*".
* Bug: In Cell::Flags, the NoFlags must be *zero*, not *one*! And we
can reclaim that bit for future use.
* Cleanup: In Hurricane::Cell, remove changeQuadTree() related methods.
Fusing various Cell's QuadTree is not a viable idea.
* Cleanup: In Hurricane::Instance, remove no longer used "_flags"
attributes.
The policy about how to create slots was not completly clear.
Now, only add *pointers* or *references* to class attributes,
never do a "copy by value". Reflect that change in SlotTemplate<>
various partial specializations.
Hammer in your head that in C++ functions templates do not allow
for partial specialization. So write only *one* template for
::getSlot<>() (refdefinition simply got ignoreds, at least with gcc).
* Bug: In Slot, only one template for getSlot<> (see above).
Adjust SlotTemplates<> to provides partial specialization only for:
* "const Data&".
* "Data*".
* "const Data*".
* "Data* const"
* "Record*".
* Bug: In Instance::_getRecord(), suppress slot based on transient
values "XCenter" & "YCenter".
* Bug: In CRL::ToolEngine::_getRecord(), suppress slot "Name" based
on a transient value.
* Change: In ::getRecord(std::list<Elementt>*) (and variant), pass
all elements to ::getSlot() as (const Element*).