coriolis/hurricane/doc/hurricane/Cell.dox

297 lines
12 KiB
Plaintext
Raw Normal View History

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
/*! \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.
*/
/*! \function Library* Cell::getLibrary () const;
2008-02-05 15:26:22 -06:00
* Returns the Library owning the Cell.
*/
/*! \function const Name& Cell::getName () const;
2008-02-05 15:26:22 -06:00
* Returns the Name of the Cell.
*/
/*! \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.
*/
/*! \function Instances Cell::getInstances () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of all instances called by the Cell.
*/
/*! \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.
*/
/*! \function Instances Cell::getSlaveInstances () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of instances whose master is this Cell.
*/
/*! \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.
*/
/*! \function Nets Cell::getNets () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of all nets of the Cell.
*/
/*! \function Nets Cell::getGlobalNets () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of all global nets of the Cell.
*/
/*! \function Nets Cell::getExternalNets () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of all external nets of the Cell.
*/
/*! \function Nets Cell::getInternalNets () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of all internal nets of the Cell.
*/
/*! \function Nets Cell::getClockNets () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of all clock nets of the Cell.
*/
/*! \function Nets Cell::getSupplyNets () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of all supply nets of the Cell.
*/
/*! \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.
*/
/*! \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.
*/
/* \function Views Cell::getViews () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of graphical views of a Cell.
*/
/* \function Views Cell::getMainViews () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of main graphical views of a Cell.
*/
/* \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.
*/
/*! \function Rubbers Cell::getRubbers () const;
2008-02-05 15:26:22 -06:00
* Returns the Collection of all Rubbers of a Cell.
*/
/*! \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.
*/
/*! \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.
*/
/*! \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.
*/
/*! \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) .
*/
/*! \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.
*/
/*! \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).
*/
/* \function Symbol* Cell::getSymbol () const;
2008-02-05 15:26:22 -06:00
* Returns the symbol associated to the cell.
*/
/*! \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
/*! \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.
*/
/*! \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
*/
/* \function void Cell::setSymbol ( Symbol* symbol );
2008-02-05 15:26:22 -06:00
* Associates the symbol \e symbol to the Cell.
*/
/*! \function void Cell::materialize ();
* materializes all components of all the nets of the Cell.
2008-02-05 15:26:22 -06:00
*/
/*! \function void Cell::unmaterialize ();
2008-02-05 15:26:22 -06:00
* De-materializes all components of all the nets of the Cell.
*/
//! \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.
*/
}