* 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.
In the LS180, probably due to the implementation of a small RAM
with DFFs, some leaf of the clock tree (H-Tree) got heavily
loaded (around 80 DFFs sinks). Implement an option that allow
the leaf of the QuadTree to use three buffers instead of one.
The sinks are partitionned using their angle from the center
of the leaf (trigonometric direction). CChoose the bigger angle
gaps to perform the split.
* Change: In Cumulus/plugins.block.configuration.GaugeConf, in
getNearestHorizontalTrack() and getNearestVerticalTrack() add an
offset argument to shift the position of the requested track
by a certain amount.
* Change: In Cumulus/plugins.block.configuration.GaugeConf, in
createHorizontal(), add a flag to make the source end of the
segment to "stick out". Useful when connecting to a stacked
VIA top, but using a lower layer that can be shifted.
* New: In Cumulus/plugins.block.spares.Spares, BufferPool & QuadTree,
add support for selection and management of multiple buffers at
the same time. Basically returns a list of selected buffer
instances instead of just one instance.
Added HEAVY_LEAF_LOAD flag to Spares. To be used by all tools
classes that makes use of it.
Added QuadTree.runselect(), be sure to call it between different
H-Tree operations, otherwise results will be strange.
* New: In Cumulus/plugins.block.htree.HTree, in case of heavy leaf
load, in the leaf of the tree, allocate three buffers instead
of one. Select them to form a triangle around the main one.
That is, use (i,j), (i+1,j) and (i,j+1).
Added a HTree._connectLeaf() to share the handling of the child
buffer connexions. Whether they are leaf of not and heavy or not.
* Change: Cumulus/plugins.block.Block, expand HTree support to
manage the HEAVY_LEAF_LOAD flag.
* Bug: In CRL/etc/symbolic/plugins.py, power lines around the core where
badly spaced, allowing the filler to insert a fill wire that was
causing both DRC error and short circuit.
* In Cumulus/plugins/block/macro.py, the METAL3 blokage was too narrow
on the left side, allowing use of METAL3 track too close from
internal components.
The METAL5 blockages around jumpers where also too narrow.
Thoses problems where seen with the density filler which put
wires everywhere.
* Bug: In Track::repair(), consider the blockage net as any other, so
the metal filling works correctly (correct management of transitions
between blockage and non-blockage).
* Change: In Etesian::Slice::fillHole(), instead of cramming the home
with tix_x0 only, put one tie at both ends and fill the rest
with fill_x0. This should help the vendor density filler to
equalze.
* New: In Etesian::Configuration, add the parameter:
"etesian.tieName" (for tix_x0) as it now separate from the simple
filler cells.
* In Etesian::BloatFlexLib::getDx(), expand the "mx2_x2" of one more
pitch (2 instead of 1). The P&R was unable to allocate a critical
diode under a slice that was littered with those cells in LS180.
SPICE simulators don't like to have the same model defined twice.
As we have a "one file per model policy", then we must include the
model file only once. This is particularly critical for standard
cells. So now, the driver include all the models in the top level,
both terminals ans intermediate. And the sub-models include nothing.
We stop at the "TerminalNetlist" level.
Add an option flag througout all the Spice driver hierarchy to
convey that information.
* Bug: In cumulus/plugins.chip.libresocio, the ioPadInfos where inverting
"d" and "s" terminals on IOPadInOut. This was indirectly detected by
the DRC complaining about floating gates on the "d" connected nets!