183 lines
6.2 KiB
C++
183 lines
6.2 KiB
C++
|
|
// -*- C++ -*-
|
|
|
|
|
|
namespace Hurricane {
|
|
|
|
/*! \class CompositeLayer
|
|
* \brief CompositeLayer description (\b API)
|
|
*
|
|
* \section secCompositeLayerIntro Introduction
|
|
*
|
|
* Composite layers are an assembly of basic layers.
|
|
*
|
|
* Given a rectangular area filled with a composite layer we can
|
|
* determine, according to different geometrical parameters,
|
|
* which are the characteristics of the different pads filled
|
|
* with each basic layer building the composite layer. Those
|
|
* parameters are the following : ContactSize, SegmentSize,
|
|
* SegmentExtention and PadSize. They differ for each basic
|
|
* layer participating to a composite layer. Refer to the
|
|
* chapter ExpandRules in order to get more information on the
|
|
* meaning of those parameters.
|
|
*/
|
|
|
|
|
|
|
|
/*! \typedef CompositeLayer::Inherit
|
|
* Useful for calling upon methods of the base class without
|
|
* knowing it.
|
|
*/
|
|
|
|
/*! \class CompositeLayer::Type
|
|
* This enumeration defines the composite layer types. table:
|
|
* Composite Layer Types headers: Name Code Signification slots:
|
|
* UNDEFINED 0 Undefined type slots: METAL 4 Routing layer
|
|
* slots: VIA 5 Contact layer
|
|
*/
|
|
|
|
/*! \name Constructors
|
|
*/
|
|
// \{
|
|
|
|
/*! \function CompositeLayer* CompositeLayer::create(Technology* technology,const Name& name,const CompositeLayer::Type& type,const Unit& minimalSize = 0,const Unit& minimalSpacing = 0);
|
|
* creates and returns a new composite layer named \c \<name\>,
|
|
* of type \c \<type\> for the given technology (some
|
|
* geometrical characteristics can also be specified).
|
|
*
|
|
* \caution Throws an exception if the technology is null, if the name is
|
|
* empty or if a layer of same name already exists.
|
|
*/
|
|
|
|
// \}
|
|
|
|
|
|
/*! \name Accessors
|
|
*/
|
|
// \{
|
|
|
|
/*! \function const CompositeLayer::Type& CompositeLayer::getType() const;
|
|
* \Return the composite layer type.
|
|
*/
|
|
|
|
/*! \function Unit CompositeLayer::getContactSize(const BasicLayer* basicLayer) const;
|
|
* \Return the contact size associated to the basic layer
|
|
* \c \<basicLayer\> (0 if this basic layer doesn't pertains to
|
|
* composite one).
|
|
*/
|
|
|
|
/*! \function Unit CompositeLayer::getSegmentSize(const BasicLayer* basicLayer) const;
|
|
* \Return the segment size associated to the basic layer
|
|
* \c \<basicLayer\> (0 if this basic layer doesn't pertains to
|
|
* composite one).
|
|
*/
|
|
|
|
/*! \function Unit CompositeLayer::getSegmentExtention(const BasicLayer* basicLayer) const;
|
|
* \Return the segment extension associated to the basic layer
|
|
* \c \<basicLayer\> (0 if this basic layer doesn't pertains to
|
|
* composite one).
|
|
*/
|
|
|
|
/*! \function Unit CompositeLayer::getPadSize(const BasicLayer* basicLayer) const;
|
|
* \Return the pad size associated to the basic layer \c \<basicLayer\>
|
|
* (0 if this basic layer doesn't pertains to composite one).
|
|
*/
|
|
|
|
/*! \function const Unit& CompositeLayer::getMaximalContactSize() const;
|
|
* \Return the maximum contact size for all the basic layers composing
|
|
* the composite layer.
|
|
*/
|
|
|
|
/*! \function const Unit& CompositeLayer::getMaximalSegmentSize() const;
|
|
* \Return the maximum segment size for all the basic layers composing
|
|
* the composite layer.
|
|
*/
|
|
|
|
/*! \function const Unit& CompositeLayer::getMaximalSegmentExtention() const;
|
|
* \Return the maximum segment extension for all the basic layers
|
|
* composing the composite layer.
|
|
*/
|
|
|
|
/*! \function const Unit& CompositeLayer::getMaximalPadSize() const;
|
|
* \Return the maximum pad size for all the basic layers composing the
|
|
* composite layer.
|
|
*/
|
|
|
|
// \}
|
|
|
|
|
|
/*! \name Modifiers
|
|
*/
|
|
// \{
|
|
|
|
/*! \function void CompositeLayer::add(BasicLayer* basicLayer,const Unit& contactSize,const Unit& segmentSize,const Unit& segmentExtention,const Unit& padSize);
|
|
* adds the basic layer with associated characteristics
|
|
* specified by the other arguments.
|
|
*
|
|
* \caution Throws an exception if the basic layer is null or already
|
|
* present in the composite layer.
|
|
*
|
|
* Usage example :
|
|
\code
|
|
DataBase* dataBase = getDataBase();
|
|
|
|
Technology* technology = dataBaseGetTechnology();
|
|
|
|
CompositeLayer* metal2 = technologyGetCompositeLayer("metal2"):
|
|
|
|
Unit contactSize = getUnit(0.5);
|
|
Unit segmentSize = getUnit(1.0);
|
|
Unit segmentExtention = getUnit(1.3);
|
|
Unit padSize = getUnit(0);
|
|
|
|
BasicLayer* CM2 = technologyGetBasicLayer("CM2");
|
|
|
|
metal2Add(CM2, contactSize, segmentSize, segmentExtention, padSize);
|
|
|
|
assert(metal2GetContactSize(CM2) == contactSize);
|
|
assert(metal2GetSegmentSize(CM2) == segmentSize);
|
|
assert(metal2GetSegmentExtention(CM2) == segmentExtention);
|
|
assert(metal2GetPadSize(CM2) == padSize);
|
|
\endcode
|
|
*
|
|
*
|
|
*/
|
|
|
|
/*! \function void CompositeLayer::remove(BasicLayer* basicLayer);
|
|
* removes the basic layer from the composite layer.
|
|
*
|
|
* \caution Throws an exception if the basic layer is null or it doesn't
|
|
* pertain to the composite layer.
|
|
*/
|
|
|
|
// \}
|
|
|
|
|
|
/*! \name CompositeLayer Collection
|
|
*/
|
|
// \{
|
|
|
|
/*! \typedef CompositeLayers
|
|
* Generic collection representing a set of composite layers.
|
|
*/
|
|
|
|
/*! \typedef CompositeLayerLocator
|
|
* Generic locator for traversing a collection of composite
|
|
* layers.
|
|
*/
|
|
|
|
/*! \typedef CompositeLayerFilter
|
|
* Generic filter allowing to select a subset of composite
|
|
* layers matching some criteria.
|
|
*/
|
|
|
|
/*! \def for_each_composite_layer(compositeLayer, compositeLayers)
|
|
* Macro for visiting all the composite layers of a collection
|
|
* of composite layers.
|
|
*/
|
|
|
|
// \}
|
|
|
|
|
|
}
|