* New: In cumulus/plugins/sram_256x32.py, build the output mux using a
NAND2/NOR2 binary tree instead of mux2/mux3. Use more, but much
smaller cells. The reduction of wirelength (from Yosys) goes
from 4% to 15% for the non-folded variant.
Uses a specially placed tree to minimize wire length.
* New: In cumulus/plugins/sram.py, extend StdCellConf to convert names
accross library flavors (FlexLib_TSMC_C180, FlexLib_Sky130 and
generic SxLib).
The generator as been build in two parts:
1. A genereric sram.BaseSRAM class to provides support for all kind of
SRAM (grouping column tree, headers, folding).
2. The specific SRAM_256x32 (256 words of 32 bits) suited for the
ethmac.
The sram has been simulated with genpat+asimut and gives identical
results to the Yosys one (at gate level). No timing though.
* Bug: In Katana::GlobalNetTable::getRootNet(), when tracking up the
net through the plug (to look if it's connected to a top level
clock), we may encounter an *unconnected* plug.
We where not checking that case, and went crashing. Now issue
a warning and return NULL.
This indicates that, up until now, we didn't encounter any
unconnected Plug in our netlists. This did show up due to a
building error in the SRAM Standard Cell generator.
Build DAG then create an ordered list of gates from it. DAG starting
points could be Net or Instances (we take the output of the Instance).
Multiple DAG can be created, but once an Instance is part of a DAG,
it connot be part of another and is conidered as "reached" by all
subsequent DAG run. The ordered list build from a DAG contains both
Net and Instances.
A new property has DagProperty, accessible through DagExtension
has been created to store relevant information of the DAG on each
Instance or Net (work in progress).
* New: Isobar::PyAttributesHolder, a PyObject with only a dictionary
to hold the attributes associated to a DBo.
* New: Isobar::PyHolderProperty, the Property that encapsulate
PyAttributesholder.
* New: Isobar::PythonAttributes, the extension to simplify the
management of the PyAttributesholder.
* Change: In PyEntity, now use a dedicated tp_getattro and tp_setattro
to delegate the Python attribute access towars the PyAttributesholder.
* New: In hurricane/doc & documentation, update docs regarding Python
attributes managment.
Main list of ports:
* Replace deprecated operator '<>' by '!='.
* To check if a list is empty, do not compare to [], but check it's
length instead.
* Do not make a class inherit indirectly twice from the same base class.
* Hurricane physical object constructors uses DbU::Unit as arguments,
seen as int in Python, so they will not match float. Unfortunately
the calculation often gives float. So explicitely cast them into
int. This is due to a change of behavior in Python. Now, 3/2
gives 1.5 (float). To get the previous one use: 3/2 -> 1 (int).
* dict.keys()[0] no longer work, instead use list(dict.keys())[0].
In SelectorCriterion & SelectorCriterions, when selecting a Net occurrence,
we where storing the Net only. This was fine if the Net was belonging to
the Cell's top level. But when it was an occurrence of a non-top level
net, this was creating the elusive incoherent Occurrence problem.
Now we truly store the occurrence of the Net, to be accurate, the root
of the HyperNet.
* Change: In SelectorCriterions::add(), the Net* argument is replaced
by a Occurrence of Net. Must be an HyperNet root occurrence.
Same goes for SelectorCriterions::remove().
* Change: In CellWidget::select(), when called with a Net occurrence,
select the whole HyperNet components.
* Change: In NetSelectorCriterion, now use a Net occurrence instead
of directly a Net. Must be an HyperNet root net occurrence.