2008-02-05 15:26:22 -06:00
|
|
|
|
|
|
|
// -*- C++ -*-
|
|
|
|
|
|
|
|
|
|
|
|
namespace Hurricane {
|
|
|
|
|
Clarify semantic of flatten Collections (walkthrough).
In the Cell/Instance hierarchy, the "terminal" and "leaf cell" concepts
where not clearly defined and partially overlapping. Now, "Terminal" is
the refer to the physical hierarchy (layout) and "TerminalNetlist" to
the logical hierarchy (netlist). The logical hierarchy can be less deep
than the physical one thanks to a Cell dedicated cell flags. Collections
related to the physical hierarchy keep their old names, the one related
to the logical hierarchy are renamed from "Leaf" to "TerminalNetlist".
The name "Leaf" was too ambiguous (leaf for *what* hierarchy).
* Change: In Hurricane::Device, set the "TerminalNetlist" flag once and
for all. No need set it in all the derived classes again.
* New: In Hurricane::MultiCapacitor, added new parameter "dummy" to
create dummies around the capacity matrix.
* Change: In Hurricane::Cell, remove "Leaf" related methods, replace
them by "TerminalNetlist" one, especially Collections. Now we have
two clear sets of Collections to walkthough the layout or the
netlist.
Change the "Terminal" flag into "TerminalNetlist".
* Change: In Hurricane::CellCollections, rename "Leaf" into
"TerminalNetlist" collections and apply the new semantic to the
locators.
* Change: In Hurricane::DataBase, Leaf to TerminalInstance renaming.
* Change: In Hurricane::DeepNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::HyperNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Instance, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Viewer::HierarchyInformations, Leaf to
TerminalInstance renaming.
* Change: In CRL::AllianceFramework, Leaf to TerminalInstance renaming.
* Change: In CRL::Catalog, Leaf to TerminalInstance renaming.
* Change: In CRL::ApParser, Leaf to TerminalInstance renaming.
* Change: In EtesianEngine::AddFeeds, Leaf to TerminalInstance renaming.
* Bug: In EtesianEngine::resetPlacement, move there the loop over
non terminal netlist instances to flag fully placed sub-blocks
as terminal for the netlist. Only then remove the feed cells
from unplaced instances. Previously, the feed cells where stripped
even from already placed instances.
* Change: In Katana, Leaf to TerminalInstance renaming.
* Bug: In Bora::PyDSlicingNode, allow the range parameter to be the
Python None object when we do not want to pass one but need to
have it as positional parameter.
* Change: In Cumulus/clocktree/ClockTree.py, Leaf to TerminalInstance
renaming.
2020-03-10 06:10:53 -05:00
|
|
|
//! \class Cell
|
|
|
|
//! \brief The model (\b API).
|
|
|
|
//!
|
|
|
|
//! \section secCellHierarchy Layout vs. Netlist Cell Hierarchy
|
|
|
|
//!
|
|
|
|
//! The Cell / Instance hierarchy can be walkthrough in two different
|
|
|
|
//! modes:
|
|
|
|
//! <ul>
|
|
|
|
//! <li> <b>The Layout Mode</b>, in this mode the walktrough will be done
|
|
|
|
//! over all the instances levels. This mode is used for the following
|
|
|
|
//! collections:
|
|
|
|
//! <ul>
|
|
|
|
//! <li> Cell::getTerminalInstanceOccurrences().
|
|
|
|
//! </ul>
|
|
|
|
//!
|
|
|
|
//! <li> <b>The Netlist Mode</b>, in this mode the walktrough will stop
|
|
|
|
//! at instances flagged as Cell::Flags::TerminalInstance.
|
|
|
|
//! The netlist hierarchy will be a subset of the layout one.
|
|
|
|
//! Or, conversely, some level of layout hirearchy can have no
|
|
|
|
//! netlist equivalent. This mode is used for the following
|
|
|
|
//! collections:
|
|
|
|
//!
|
|
|
|
//! <ul>
|
|
|
|
//! <li> Cell::getTerminalNetlistInstanceOccurrences().
|
|
|
|
//! <li> Cell::getNonTerminalNetlistInstanceOccurrences().
|
|
|
|
//! </ul>
|
|
|
|
//! </ul>
|
2008-02-05 15:26:22 -06:00
|
|
|
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Cell* Cell::create ( Library* library, const Name& name );
|
|
|
|
* creates and returns a new Cell named \e name for the Library
|
2008-02-05 15:26:22 -06:00
|
|
|
* \e library.
|
|
|
|
*
|
|
|
|
* \caution Throws an exception if the Library is null, if the Name is
|
|
|
|
* empty or if a cell with same name already exists in the
|
|
|
|
* Library.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Library* Cell::getLibrary () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Library owning the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function const Name& Cell::getName () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Name of the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Instance* Cell::getInstance ( const Name& name ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Instance of name \e name if it exists, else \NULL.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Instances Cell::getInstances () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all instances called by the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Instances Cell::getInstancesUnder ( const Box& area ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the collection of all instances of the Cell intersecting the
|
|
|
|
* given rectangular \e area.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Instances Cell::getSlaveInstances () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of instances whose master is this Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Net* Cell::getNet ( const Name& name ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Net of name \e name if it exists, else \NULL.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Nets Cell::getNets () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all nets of the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Nets Cell::getGlobalNets () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all global nets of the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Nets Cell::getExternalNets () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all external nets of the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Nets Cell::getInternalNets () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all internal nets of the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Nets Cell::getClockNets () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all clock nets of the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Nets Cell::getSupplyNets () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all supply nets of the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Slice* Cell::getSlice ( const Layer* layer ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Slice associated with the Layer \e layer if it exists, else \NULL.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Slices Cell::getSlices ( const Layer::Mask& mask = ~0 ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of slices of a Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/* \function Views Cell::getViews () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of graphical views of a Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/* \function Views Cell::getMainViews () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of main graphical views of a Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/* \function Views Cell::getImpactedMainViews () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of main graphical views we should update after
|
|
|
|
* a Cell has been modified.
|
|
|
|
*
|
|
|
|
* When applying modifications upon a Cell, we need to update
|
|
|
|
* main graphical views of a cell but also main graphical views
|
|
|
|
* of cells which call directly or indirectly the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Rubbers Cell::getRubbers () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all Rubbers of a Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Rubbers Cell::getRubbersUnder ( const Box& area ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the collection of all Rubbers of the Cell intersecting the
|
|
|
|
* given rectangular \e area.
|
|
|
|
*
|
|
|
|
* \caution Only currently materialized rubbers are taken into account
|
|
|
|
* in this collection.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Components Cell::getComponents ( const Layer::Mask& mask = ~0 ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all Components of the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Components Cell::getComponentsUnder ( const Box& area, const Layer::Mask& mask = ~0 ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the collection of all Components of the Cell intersecting the
|
|
|
|
* given rectangular \e area.
|
|
|
|
*
|
|
|
|
* \caution Only currently materialized Components are taken into account
|
|
|
|
* in this collection.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Occurrences Cell::getOccurrences ( unsigned searchDepth=(unsigned)-1 ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all Occurrences belonging to this Cell.
|
|
|
|
*
|
|
|
|
* \remark The search depth is decremented each time a hirearchical
|
|
|
|
* level is crossed. The search ends when depth becomes null
|
|
|
|
* (the value \c INFINITE is equal to \c (unsigned)-1) .
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Occurrences Cell::getOccurrencesUnder ( const Box& area, unsigned searchDepth=(unsigned)-1 ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the Collection of all Occurrences belonging to this Cell and
|
|
|
|
* intersecting the given rectangular area.
|
|
|
|
*
|
|
|
|
* \remark The search depth is decremented each time a hirearchical
|
|
|
|
* level is crossed. The search ends when depth becomes null
|
|
|
|
* (the value \c INFINITE is equal to \c (unsigned)-1) .
|
|
|
|
*
|
|
|
|
* \caution Only occurences corresponding to currently materialized
|
|
|
|
* entities are taken into account in this Collection.
|
|
|
|
*/
|
|
|
|
|
Clarify semantic of flatten Collections (walkthrough).
In the Cell/Instance hierarchy, the "terminal" and "leaf cell" concepts
where not clearly defined and partially overlapping. Now, "Terminal" is
the refer to the physical hierarchy (layout) and "TerminalNetlist" to
the logical hierarchy (netlist). The logical hierarchy can be less deep
than the physical one thanks to a Cell dedicated cell flags. Collections
related to the physical hierarchy keep their old names, the one related
to the logical hierarchy are renamed from "Leaf" to "TerminalNetlist".
The name "Leaf" was too ambiguous (leaf for *what* hierarchy).
* Change: In Hurricane::Device, set the "TerminalNetlist" flag once and
for all. No need set it in all the derived classes again.
* New: In Hurricane::MultiCapacitor, added new parameter "dummy" to
create dummies around the capacity matrix.
* Change: In Hurricane::Cell, remove "Leaf" related methods, replace
them by "TerminalNetlist" one, especially Collections. Now we have
two clear sets of Collections to walkthough the layout or the
netlist.
Change the "Terminal" flag into "TerminalNetlist".
* Change: In Hurricane::CellCollections, rename "Leaf" into
"TerminalNetlist" collections and apply the new semantic to the
locators.
* Change: In Hurricane::DataBase, Leaf to TerminalInstance renaming.
* Change: In Hurricane::DeepNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::HyperNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Instance, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Viewer::HierarchyInformations, Leaf to
TerminalInstance renaming.
* Change: In CRL::AllianceFramework, Leaf to TerminalInstance renaming.
* Change: In CRL::Catalog, Leaf to TerminalInstance renaming.
* Change: In CRL::ApParser, Leaf to TerminalInstance renaming.
* Change: In EtesianEngine::AddFeeds, Leaf to TerminalInstance renaming.
* Bug: In EtesianEngine::resetPlacement, move there the loop over
non terminal netlist instances to flag fully placed sub-blocks
as terminal for the netlist. Only then remove the feed cells
from unplaced instances. Previously, the feed cells where stripped
even from already placed instances.
* Change: In Katana, Leaf to TerminalInstance renaming.
* Bug: In Bora::PyDSlicingNode, allow the range parameter to be the
Python None object when we do not want to pass one but need to
have it as positional parameter.
* Change: In Cumulus/clocktree/ClockTree.py, Leaf to TerminalInstance
renaming.
2020-03-10 06:10:53 -05:00
|
|
|
//! \function Occurrences Cell::getTerminalInstanceOccurrences () const;
|
|
|
|
//! Returns the trans-hierarchical Collection of all instance Occurrences that are
|
|
|
|
//! layout terminal cells (leaves).
|
|
|
|
|
|
|
|
/*! \function Occurrences Cell::getTerminalNetlistInstanceOccurrences ( const Instance* topInstance=NULL ) const;
|
Migrating the initialisation system to be completely Python-like.
* New: In bootstrap/coriolisEnv.py, add the "etc" directory to the
PYTHONPATH as initialization are now Python modules.
* New: In Hurricane/analogic, first groundwork for the integration of
PIP/MIM/MOM multi-capacitors. Add C++ and Python interface for the
allocation matrix and the list of capacities values.
* Change: In Hurricane::RegularLayer, add a layer parameter to the
constructor so the association between the RegularLayer and it's
BasicLayer can readily be done.
* Change: In Hurricane::Layer, add a new getCut() accessor to get the
cut layer in ViaLayer.
* Change: In Hurricane::DataBase::get(), the Python wrapper should no
longer consider an error if the data-base has not been created yet.
Just return None.
* Bug: In Isobar::PyLayer::getEnclosure() wrapper, if the overall
enclosure is requested, pass the right parameter to the C++ function.
* Change: In AllianceFramework, make public _bindLibraries() and export
it to the Python interface.
* Change: In AllianceFramework::create(), do not longer call bindLibraries().
This now must be done explicitely and afterwards.
* Change: In AllianceFramework::createLibrary() and
Environement::addSYSTEM_LIBRARY(), minor bug corrections that I don't
recall.
* Change: In SearchPath::prepend(), set the selected index to zero and
return it.
* Change: In CRL::System CTOR, add "etc" to the PYTHONPATH as the
configuration files are now organized as Python modules.
* New: In PyCRL, export the CRL::System singleton, it's creation is no
longer triggered by the one of AllianceFramework.
* New: In CRL/etc/, convert most of the configuration files into the
Python module format. For now, keep the old ".conf", but that are no
longer used.
For the real technologies, we cannot keep the directory name as
"180" or "45" as it not allowed by Python syntax, so we create "node180"
or "node45" instead.
Most of the helpers and coriolisInit.py are no longer used now.
To be removed in future commits after being sure that everything
works...
* Bug: In AutoSegment::makeDogleg(AutoContact*), the layer of the contacts
where badly computed when one end of the original segment was attached
to a non-preferred direction segment (mostly on terminal contacts).
Now use the new AutoContact::updateLayer() method.
* Bug: In Dijkstra::load(), limit symetric search area only if the net
is a symmetric one !
* Change: In Katana/python/katanaInit.py, comply with the new initialisation
scheme.
* Change: In Unicorn/cgt.py, comply to the new inititalization scheme.
* Change: In cumulus various Python scripts remove the call to
helpers.staticInitialization() as they are not needed now (we run in
only *one* interpreter, so we correctly share all init).
In plugins/__init__.py, read the new NDA directory variable.
* Bug: In cumulus/plugins/Chip.doCoronafloorplan(), self.railsNb was not
correctly managed when there was no clock.
* Change: In cumulus/plugins/Configuration.coronaContactArray(), compute
the viaPitch from the technology instead of the hard-coded 4.0 lambdas.
In Configuration.loadConfiguration(), read the "ioring.py" from
the new user's settings module.
* Bug: In stratus.dpgen_ADSB2F, gives coordinates translated into DbU to
the XY functions.
In st_model.Save(), use the VstUseConcat flag to get correct VST files.
In st_net.hur_net(), when a net is POWER/GROUND or CLOCK also make it
global.
* Change: In Oroshi/python/WIP_Transistor.py, encapsulate the generator
inside a try/except block to get prettier error (and stop at the first).
2019-10-28 12:09:14 -05:00
|
|
|
* Returns the trans-hierarchical Collection of all instance Occurrences that are
|
|
|
|
* leaf cells. With the \c topInstance argument we can restrict the collection
|
|
|
|
* to leafs of that instance (of the current Cell) only.
|
|
|
|
*/
|
|
|
|
|
Clarify semantic of flatten Collections (walkthrough).
In the Cell/Instance hierarchy, the "terminal" and "leaf cell" concepts
where not clearly defined and partially overlapping. Now, "Terminal" is
the refer to the physical hierarchy (layout) and "TerminalNetlist" to
the logical hierarchy (netlist). The logical hierarchy can be less deep
than the physical one thanks to a Cell dedicated cell flags. Collections
related to the physical hierarchy keep their old names, the one related
to the logical hierarchy are renamed from "Leaf" to "TerminalNetlist".
The name "Leaf" was too ambiguous (leaf for *what* hierarchy).
* Change: In Hurricane::Device, set the "TerminalNetlist" flag once and
for all. No need set it in all the derived classes again.
* New: In Hurricane::MultiCapacitor, added new parameter "dummy" to
create dummies around the capacity matrix.
* Change: In Hurricane::Cell, remove "Leaf" related methods, replace
them by "TerminalNetlist" one, especially Collections. Now we have
two clear sets of Collections to walkthough the layout or the
netlist.
Change the "Terminal" flag into "TerminalNetlist".
* Change: In Hurricane::CellCollections, rename "Leaf" into
"TerminalNetlist" collections and apply the new semantic to the
locators.
* Change: In Hurricane::DataBase, Leaf to TerminalInstance renaming.
* Change: In Hurricane::DeepNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::HyperNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Instance, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Viewer::HierarchyInformations, Leaf to
TerminalInstance renaming.
* Change: In CRL::AllianceFramework, Leaf to TerminalInstance renaming.
* Change: In CRL::Catalog, Leaf to TerminalInstance renaming.
* Change: In CRL::ApParser, Leaf to TerminalInstance renaming.
* Change: In EtesianEngine::AddFeeds, Leaf to TerminalInstance renaming.
* Bug: In EtesianEngine::resetPlacement, move there the loop over
non terminal netlist instances to flag fully placed sub-blocks
as terminal for the netlist. Only then remove the feed cells
from unplaced instances. Previously, the feed cells where stripped
even from already placed instances.
* Change: In Katana, Leaf to TerminalInstance renaming.
* Bug: In Bora::PyDSlicingNode, allow the range parameter to be the
Python None object when we do not want to pass one but need to
have it as positional parameter.
* Change: In Cumulus/clocktree/ClockTree.py, Leaf to TerminalInstance
renaming.
2020-03-10 06:10:53 -05:00
|
|
|
/*! \function Occurrences Cell::getNonTerminalNetlistInstanceOccurrences ( const Instance* topInstance=NULL ) const;
|
Migrating the initialisation system to be completely Python-like.
* New: In bootstrap/coriolisEnv.py, add the "etc" directory to the
PYTHONPATH as initialization are now Python modules.
* New: In Hurricane/analogic, first groundwork for the integration of
PIP/MIM/MOM multi-capacitors. Add C++ and Python interface for the
allocation matrix and the list of capacities values.
* Change: In Hurricane::RegularLayer, add a layer parameter to the
constructor so the association between the RegularLayer and it's
BasicLayer can readily be done.
* Change: In Hurricane::Layer, add a new getCut() accessor to get the
cut layer in ViaLayer.
* Change: In Hurricane::DataBase::get(), the Python wrapper should no
longer consider an error if the data-base has not been created yet.
Just return None.
* Bug: In Isobar::PyLayer::getEnclosure() wrapper, if the overall
enclosure is requested, pass the right parameter to the C++ function.
* Change: In AllianceFramework, make public _bindLibraries() and export
it to the Python interface.
* Change: In AllianceFramework::create(), do not longer call bindLibraries().
This now must be done explicitely and afterwards.
* Change: In AllianceFramework::createLibrary() and
Environement::addSYSTEM_LIBRARY(), minor bug corrections that I don't
recall.
* Change: In SearchPath::prepend(), set the selected index to zero and
return it.
* Change: In CRL::System CTOR, add "etc" to the PYTHONPATH as the
configuration files are now organized as Python modules.
* New: In PyCRL, export the CRL::System singleton, it's creation is no
longer triggered by the one of AllianceFramework.
* New: In CRL/etc/, convert most of the configuration files into the
Python module format. For now, keep the old ".conf", but that are no
longer used.
For the real technologies, we cannot keep the directory name as
"180" or "45" as it not allowed by Python syntax, so we create "node180"
or "node45" instead.
Most of the helpers and coriolisInit.py are no longer used now.
To be removed in future commits after being sure that everything
works...
* Bug: In AutoSegment::makeDogleg(AutoContact*), the layer of the contacts
where badly computed when one end of the original segment was attached
to a non-preferred direction segment (mostly on terminal contacts).
Now use the new AutoContact::updateLayer() method.
* Bug: In Dijkstra::load(), limit symetric search area only if the net
is a symmetric one !
* Change: In Katana/python/katanaInit.py, comply with the new initialisation
scheme.
* Change: In Unicorn/cgt.py, comply to the new inititalization scheme.
* Change: In cumulus various Python scripts remove the call to
helpers.staticInitialization() as they are not needed now (we run in
only *one* interpreter, so we correctly share all init).
In plugins/__init__.py, read the new NDA directory variable.
* Bug: In cumulus/plugins/Chip.doCoronafloorplan(), self.railsNb was not
correctly managed when there was no clock.
* Change: In cumulus/plugins/Configuration.coronaContactArray(), compute
the viaPitch from the technology instead of the hard-coded 4.0 lambdas.
In Configuration.loadConfiguration(), read the "ioring.py" from
the new user's settings module.
* Bug: In stratus.dpgen_ADSB2F, gives coordinates translated into DbU to
the XY functions.
In st_model.Save(), use the VstUseConcat flag to get correct VST files.
In st_net.hur_net(), when a net is POWER/GROUND or CLOCK also make it
global.
* Change: In Oroshi/python/WIP_Transistor.py, encapsulate the generator
inside a try/except block to get prettier error (and stop at the first).
2019-10-28 12:09:14 -05:00
|
|
|
* Returns the trans-hierarchical Collection of all instance Occurrences that are
|
|
|
|
* \b not leaf cells. With the \c topInstance argument we can restrict the collection
|
|
|
|
* to non-leafs of that instance (of the current Cell) only.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function Box Cell::getAbutmentBox () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns Returns the abutment box of the cell (which is defined by the
|
|
|
|
* designer unlike the bounding box which is managed dynamically).
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/* \function Symbol* Cell::getSymbol () const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns the symbol associated to the cell.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function bool Cell::isCalledBy ( Cell* cell ) const;
|
2008-02-05 15:26:22 -06:00
|
|
|
* Returns \true if the cell \this is directly or indirectly called by
|
|
|
|
* the Cell \e cell. This functions allows to check that there is
|
|
|
|
* no cyclic instance calls of cells (it is by default,
|
|
|
|
* automatically called when creating an instance).
|
|
|
|
*/
|
|
|
|
|
Clarify semantic of flatten Collections (walkthrough).
In the Cell/Instance hierarchy, the "terminal" and "leaf cell" concepts
where not clearly defined and partially overlapping. Now, "Terminal" is
the refer to the physical hierarchy (layout) and "TerminalNetlist" to
the logical hierarchy (netlist). The logical hierarchy can be less deep
than the physical one thanks to a Cell dedicated cell flags. Collections
related to the physical hierarchy keep their old names, the one related
to the logical hierarchy are renamed from "Leaf" to "TerminalNetlist".
The name "Leaf" was too ambiguous (leaf for *what* hierarchy).
* Change: In Hurricane::Device, set the "TerminalNetlist" flag once and
for all. No need set it in all the derived classes again.
* New: In Hurricane::MultiCapacitor, added new parameter "dummy" to
create dummies around the capacity matrix.
* Change: In Hurricane::Cell, remove "Leaf" related methods, replace
them by "TerminalNetlist" one, especially Collections. Now we have
two clear sets of Collections to walkthough the layout or the
netlist.
Change the "Terminal" flag into "TerminalNetlist".
* Change: In Hurricane::CellCollections, rename "Leaf" into
"TerminalNetlist" collections and apply the new semantic to the
locators.
* Change: In Hurricane::DataBase, Leaf to TerminalInstance renaming.
* Change: In Hurricane::DeepNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::HyperNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Instance, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Viewer::HierarchyInformations, Leaf to
TerminalInstance renaming.
* Change: In CRL::AllianceFramework, Leaf to TerminalInstance renaming.
* Change: In CRL::Catalog, Leaf to TerminalInstance renaming.
* Change: In CRL::ApParser, Leaf to TerminalInstance renaming.
* Change: In EtesianEngine::AddFeeds, Leaf to TerminalInstance renaming.
* Bug: In EtesianEngine::resetPlacement, move there the loop over
non terminal netlist instances to flag fully placed sub-blocks
as terminal for the netlist. Only then remove the feed cells
from unplaced instances. Previously, the feed cells where stripped
even from already placed instances.
* Change: In Katana, Leaf to TerminalInstance renaming.
* Bug: In Bora::PyDSlicingNode, allow the range parameter to be the
Python None object when we do not want to pass one but need to
have it as positional parameter.
* Change: In Cumulus/clocktree/ClockTree.py, Leaf to TerminalInstance
renaming.
2020-03-10 06:10:53 -05:00
|
|
|
//! \function bool Cell::isTerminal () const;
|
|
|
|
//! Returns \true if the cell contains no instances. This is a layout
|
|
|
|
//! leaf cell.
|
|
|
|
|
|
|
|
//! \function bool Cell::isTerminalNetlist () const;
|
|
|
|
//! Returns \true if the Cell is marked as terminal for the \e netlist
|
|
|
|
//! hierarchy. A terminal \e netlist cell may, however contains
|
|
|
|
//! further level of physical (layout) instances. This is a state
|
|
|
|
//! that can be set or unset.
|
2008-02-05 15:26:22 -06:00
|
|
|
|
Merged QuadTrees in overlayed Cells (placed together).
* New: In Hurricane, in Cell & Instance, add the ability to merge the
QuadTree when *second level* instances of a Cell are placed in
the same space as the top Cell. This is the case of a deeply
hierarchical design made of only standard cells that are to
be placed in a "flat" manner.
The design is uniquified then the intermediate instances models,
which should be unique at that point have their QuadTree merged
through a call to Instance::slaveAbutmentBox(). That method will
make the model of the instance use the QuadTree of the Cell to
which the instance belong. The instance model no longer posseses
a dedicated QuadTree. As a corollary the abutment box of both
Cell are kept identical and the Instance has it's transformation
set to (0,0,ID).
Remark: when we talk about "QuadTree", we mean in fact the
QuadTree for the instances *and* the SliceMap (Layer+QuadTree).
Consequence in Query: when going through the resulting
"flattened" QuadTree we will find objects with an incomplete
Path du to the fact that we didn't have to explore their
Instance/Cell level to reach them. The shunted part of the
Path is stored in the Go master Cell in the _shuntedPath
attribute. This also affect the displayed depth of hierarchy,
but not too badly.
* New: In Hurricane, in Cell, new methods:
- Cell::updatePlacedFlag() : set the placement flags.
- Cell::isUnique() : one or less instance.
- Cell::isUniquified() : is the result of an uniquification.
- Cell::isUniquifyMaster() : is the reference cell of the
uniquification.
* Change: In Hurricane, in Cell::Uniquify(), uniquify a Cell only
if it is unplaced. We do not need to duplicate placed Cells
(see datapathes).
2015-06-26 11:35:11 -05:00
|
|
|
//! \function bool Cell::isUnique () const;
|
|
|
|
//! Returns \true if the Cell has one or less instances, regardless of
|
|
|
|
//! it's uniquification state.
|
|
|
|
|
|
|
|
//! \function bool Cell::isUniquified () const;
|
|
|
|
//! Returns \true if this Cell is the result of an uniquification \b and
|
|
|
|
//! is not the reference (the original) Cell.
|
|
|
|
|
|
|
|
//! \function bool Cell::isUniquifyMaster () const;
|
|
|
|
//! Returns \true if the Cell has been uniquified and this is the original
|
|
|
|
//! Cell. The original Cell can have both normal instances and uniquified
|
|
|
|
//! instances.
|
2008-02-05 15:26:22 -06:00
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function void Cell::setName ( const Name& name );
|
2008-02-05 15:26:22 -06:00
|
|
|
* Allows to change the Cell Name.
|
|
|
|
*
|
|
|
|
* \remark Throws an exception if the new \e name is empty or if the
|
|
|
|
* Library owning the Cell has already a Cell with the same
|
|
|
|
* name.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function void Cell::setAbutmentBox ( const Box& abutmentBox );
|
|
|
|
* sets Cell abutment box.
|
2008-02-05 15:26:22 -06:00
|
|
|
*
|
|
|
|
* \remark At the Cell creation the abutment box is empty. This one must
|
|
|
|
* be set through this function. It is possible also, once
|
|
|
|
* fixed, to reset it to empty (undefined) by passing an empty
|
|
|
|
* Box as argument.
|
|
|
|
*/
|
|
|
|
|
Clarify semantic of flatten Collections (walkthrough).
In the Cell/Instance hierarchy, the "terminal" and "leaf cell" concepts
where not clearly defined and partially overlapping. Now, "Terminal" is
the refer to the physical hierarchy (layout) and "TerminalNetlist" to
the logical hierarchy (netlist). The logical hierarchy can be less deep
than the physical one thanks to a Cell dedicated cell flags. Collections
related to the physical hierarchy keep their old names, the one related
to the logical hierarchy are renamed from "Leaf" to "TerminalNetlist".
The name "Leaf" was too ambiguous (leaf for *what* hierarchy).
* Change: In Hurricane::Device, set the "TerminalNetlist" flag once and
for all. No need set it in all the derived classes again.
* New: In Hurricane::MultiCapacitor, added new parameter "dummy" to
create dummies around the capacity matrix.
* Change: In Hurricane::Cell, remove "Leaf" related methods, replace
them by "TerminalNetlist" one, especially Collections. Now we have
two clear sets of Collections to walkthough the layout or the
netlist.
Change the "Terminal" flag into "TerminalNetlist".
* Change: In Hurricane::CellCollections, rename "Leaf" into
"TerminalNetlist" collections and apply the new semantic to the
locators.
* Change: In Hurricane::DataBase, Leaf to TerminalInstance renaming.
* Change: In Hurricane::DeepNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::HyperNet, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Instance, Leaf to TerminalInstance renaming.
* Change: In Hurricane::Viewer::HierarchyInformations, Leaf to
TerminalInstance renaming.
* Change: In CRL::AllianceFramework, Leaf to TerminalInstance renaming.
* Change: In CRL::Catalog, Leaf to TerminalInstance renaming.
* Change: In CRL::ApParser, Leaf to TerminalInstance renaming.
* Change: In EtesianEngine::AddFeeds, Leaf to TerminalInstance renaming.
* Bug: In EtesianEngine::resetPlacement, move there the loop over
non terminal netlist instances to flag fully placed sub-blocks
as terminal for the netlist. Only then remove the feed cells
from unplaced instances. Previously, the feed cells where stripped
even from already placed instances.
* Change: In Katana, Leaf to TerminalInstance renaming.
* Bug: In Bora::PyDSlicingNode, allow the range parameter to be the
Python None object when we do not want to pass one but need to
have it as positional parameter.
* Change: In Cumulus/clocktree/ClockTree.py, Leaf to TerminalInstance
renaming.
2020-03-10 06:10:53 -05:00
|
|
|
/*! \function void Cell::setTerminalNetlist ( bool state );
|
|
|
|
* sets Cell \e netlist terminal status to \e state.
|
2008-02-05 15:26:22 -06:00
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/* \function void Cell::setSymbol ( Symbol* symbol );
|
2008-02-05 15:26:22 -06:00
|
|
|
* Associates the symbol \e symbol to the Cell.
|
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function void Cell::materialize ();
|
|
|
|
* materializes all components of all the nets of the Cell.
|
2008-02-05 15:26:22 -06:00
|
|
|
*/
|
|
|
|
|
2008-05-26 10:15:59 -05:00
|
|
|
/*! \function void Cell::unmaterialize ();
|
2008-02-05 15:26:22 -06:00
|
|
|
* De-materializes all components of all the nets of the Cell.
|
|
|
|
*/
|
|
|
|
|
Support for Uniquification. Rewrite of the Blif parser.
* New: In Hurricane, In NetAlias & Net, add an AliasList collection to
iterate over all the aliases names (this *not* include the main
net name).
* New: In Hurricane, In Cell, Instance & Net add support for cloning and
uniquification (update documentation).
All Cells that are uniquified from a given model are kept in an
Uniquify relation. This relation allows to get all the clones and
generate unique clone names by adding a "_uXX" suffix.
* Bug: In Hurricane, the Cell::_isFlattenLeaf attribute was not initialized
in the constructor.
* Change: In CRL Core, in AllianceFramework::getCell(), no longer destroy
a partially loaded Cell in case of parser failure, let the incomplete
Cell be.
* New: In CRL Core, in ApParser, if all the instances are placed, sets the
Cell::Placed flag.
* Change: In CRL Core, in BlifParser, complete rewrite of the parser.
Not so good an idea afterwards...
* New: In Etesian, uniquify the design before placing.
* Change: In Kite, display the list of unrouted wired after all other
statistics.
2015-04-25 09:52:18 -05:00
|
|
|
//! \function void Cell::uniquify ( unsigned int depth=(unsigned int)-1 );
|
|
|
|
//! \param depth Recursively perform the uniquification until that
|
|
|
|
//! hierarchical depth.
|
|
|
|
//!
|
|
|
|
//! Multiple instances of a same model are modificated so that
|
|
|
|
//! each instance has it's own \e unique copy of the model.
|
|
|
|
//!
|
|
|
|
//! This is equivalent to a flatten operation, but without
|
|
|
|
//! destroying the intermediate level of hierarchy. Only the
|
|
|
|
//! \b netlist and instance's placements gets duplicated.
|
|
|
|
//! <em>No physical components will be duplicated.</em>
|
|
|
|
//!
|
|
|
|
//! \see Cell::getClone(), Instance::uniquify().
|
|
|
|
|
|
|
|
//! \function Cell* Cell::getClone ();
|
|
|
|
//! Build a duplicate of the Cell. The database keep track of all
|
|
|
|
//! the duplicate of one original Cell. The name of a duplicate
|
|
|
|
//! is generated by appending \c '_uXX' where \c 'XX' is the number
|
|
|
|
//! of the duplicate.
|
|
|
|
//!
|
|
|
|
//! Only logical information (netlist) and instance's placements
|
|
|
|
//! gets duplicated. <em>No physical components will be duplicated.</em>
|
2008-02-05 15:26:22 -06:00
|
|
|
|
|
|
|
/*! \typedef typedef GenericCollection<Cell*> Cells;
|
|
|
|
* Generic collection representing a set of cell objects.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*! \typedef typedef GenericLocator<Cell*> CellLocator;
|
|
|
|
* Generic locator for visiting a cell objects Collection.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*! \typedef typedef GenericFilter<Cell*> CellFilter;
|
|
|
|
* Filter to selecting a subset of cell objects matching some criteria.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*! \def for_each_entity(entity,entities)
|
|
|
|
* Macro for visiting all objects of a cell objects collection.
|
|
|
|
*/
|
|
|
|
|
|
|
|
}
|