* New: Equipotential elements includes now:
1. Components at the top level (the cell owning the Equi).
2. Nets at the top level. If an equi include all the components
of a Net, own the Net, not all it's individual components.
3. Other equipotentials from the Instances immediatey below.
Thoses equis should be equivalents to the Plug of the Net.
They are stored in the form of Occurrences <Instance,Equi>,
the relation is stored on that Occurrence.
* New: Equipotential::getFlatComponents(), a collection to recursively
get all the *component* occurrences of the equi. Transhierarchically.
Go through components, nets components, and recursively through
the child equis.
* New: EquipotentialRelation, the master of this relation is the
Equipotential and the slaves, all its elements.
* Change: In Tile, in case the tile is build on a deep component,
we trace up the Equipotential it belongs to in the Instance
level immediately belonging to the Cell under extraction.
They must exists as we extract from bottom to top all the
master cells. So we have, for that tile an Occurrence
<Instance,Equi> that we can store in the current Equi level.
* Change/Bug: In Tile, add an Id to be reliably sort the tiles
in the IntervalTree. As we replaced the tile component occurrence
by a <Instance,Equi> we were having multiple tiles with the same
equi. This was causing havoc again in the IntervalTree.
Should add a check in the RbTree for elements with the
exact same key, but that would imply passing a new template
parameter for the "equal" function.
* Bug: In Interval::intersect(), bad condition check in strict mode.
* Change: In Occurrence::operator<(), change the sorting criterions
so that the ones with no paths are "lower", then the one with
no entities, then compare entities Id then Path hashes.
* Change: In Occurrence::getCompactString(), to be more readable,
suppress leading and ending "<>".
* Change: In IntervalTree, now use an IntervalDataCompare to control
the ordering of the nodes inside the tree. This may be needed
when IntervalData is build upon a pointer, we don't want to
sort on pointer values (non deterministic) .
* Bug: In IntervalTree::postRemove(), there was an incorrect computation
of the updated childsVMax.
* Bug: In IntervalTree::beginOverlaps(), miscalculated leftmost
interval overlapping.
* Bug: In RbTree::remove(), when exchanging the removed node for a
leaf, fully swap the nodes contents, was incompletly copied before.
* New: In CellWidget, add new slots selectSet(OccurrenceSet&) and
unselectSet(OccurrenceSet&), to be able to select/unselected sets
of Occurrence (for use by TabEquipotentials).
* Change: In EtesianEngine, no more need to remove leading/ending "<>".
* New: In Tramontana, use a Query to find all the Occurrence under
an area. Previously we were using Cell::getOccurrencesUnder()
which *do not* return the components in instances, so we would
have been unable to find trans-hierarchical shorts circuits.
* New: In tramontana, now use a Relation to tag all the components
belonging to an Equipotential.
* Change: In Equipotential, store everything under the form of
Occurrence, instead of Components. Due to the way the Occurrences
are sorted, the one holding Components should be firts.
* New: In Tramontana,
* Multi-layer support for the swap line. Split VIAs into their
various metal plates and link the two relevant tiles, ensuring
connexity between layers.
* Improved Equipotential information rebuild. Try to rebuild more
closely the Net characteristics. Improved tab widgets.
* New: Interval::CompareByMinMax, lexicographical comparison of
Intervals, first compare the lower bound (VMin) then the
upper bound (VMax). Needed for IntervalTree.
* Change: In IntervalTree, the key comparison was only based on
the lower bound (VMin). That means that the tree would accept
only one interval for a given VMin. You couldn't store both
[1:4] and [1:5]. Now use CompareByMinMax that allows it.
* New: In Component, typedef ComponentSet (set sorted on Ids).
* New: CellWidget::selectSet() & CellWidget::unselectSet() select/unselect
a whole set of component.
* New: Tramontana::Equipotential, implemented.
* Change: Tramontana::Tile, add UnionFind capabilities and Equipotential
attribute.
* New: Tramontana::SweepLine, build upon Hurricane::IntervalTree,
can now perform a "one layer only" extraction (checked with "metal1").
* Change: In bootstrap, FindBootstrap.cmake, ccb (builder) & socInstaller,
suppress the "--qt5" argument as it the default now. Create a "--qt4"
to force building against the old one.
* Change: In bootstrap/cmake_modules/FindBootstrap.cmake, add a
"-Wl,--no-undefined" to the C++/ld flags to force checking of
undefined symbol at link time.
* In bootstrap/coriolisEnv.py, under WSL it seems that setting up the
LD_LIBRARY_PATH makes the linker to ignore /etc/ld.so.conf.
To avoid that, use ldconfig to import all the known paths into
LD_LIBRARY_PATH.
* New: In cumulus.designflow: add yosysnp to manage Yosys without
Python support enabled.
Add klayout support for running scripts in batch mode.
Add generic system command support.
* Change: In cumulus.designflow.task.TaskFlow, systematically
convert pathes (str) into pathlib.Path in targets and depends.
* New: In cumulus.designflow.clean.Clean, add cleaning by glob.
* Change: In cumulus/plugins/__init__.py, new behavior for loading
plugins supplied as third party. In order to avoid messing up
with the "site-packages/coriolis/" main package tree (with
modules named "coriolis.<MODULE>", they have to be under
"site-packages/addons/coriolis/" (so modules will be named
"addons.coriolis.<MODULE>"). This should prevent *overwritting*
standard modules by third party ones.
Now uses pathlib for module loading.
Had a conflict between Hurricane.Path and pathlib.Path, now do
not import the Hurricane one into the module globals...
* Move all Python stuff under a common Python namespace "coriolis".
* Instead of having a series subtrees for each tool, integrate
everything in one common tree. So now, all components can be
located either with an absolute path from "coriolis" or, inside
cross-reference themselves through relatives imports.
* As a consequence, we only need to add ".../site-packages/coriolis/"
to the PYTHONPATH, and not a whole bunch of subdirectories.
And nothing, if installed in-system.
* The tree of free technologies configuration files is also moved
below "coriolis/technos" instead of "/etc".
* Supressed "cumulus" level for the plugins.
* All python modules are rewritten using relative imports except
for the configuration files that uses absolute import as they
can be cloned outside of the tree to serve as templates.
* Change: In boostrap/FindPythonSitePackages, include "/coriolis" in
Python_CORIOLISARCH and Python_CORIOLISLIB.
Provide a Python_SITELIB *without* "/coriolis" appended.
* Change: In cumulus/plugins/__init__.loadPlugins(), must prefix modules
read in the plugins directory by "coriolis.plugins.". No longer need
to add their path to sys.path.
* Change: In crlcore/python/technos/nodeX/*/devices.py, the scripts of
the layouts generators must be prefixed by "coriolis.oroshi.".
* Change: In CRL::System CTOR, no longer add the pathes of the various
plugins to sys.path. Only "site-packages/coriolis/".
* New: In Utilities::Path::toPyModePath(), new method to convert a
filesystem path into a python module path.
Examples:
"coriolis/plugins/block" --> "coriolis.plugins.block".
"coriolis/plugins/rsave.py" --> "coriolis.plugins.rsave".
* Change: In katanaEngine::_runKatanaEngine(), rename the hook script
initHook.py. No longer need to modify sys.path.
* Change: In BoraEngine::_runBoraEngine(), rename the hook script
initHook.py. No longer need to modify sys.path.
* Change: In UnicornGui::_runUnicornInit(), rename the hook script
initHook.py. No longer need to modify sys.path.
* Change: In cumulus.plugins.chip.constants, put the constants
outside __init__.py to avoid a loop at initialization.