oaPhysicalLayer.h

Go to the documentation of this file.
00001 // *****************************************************************************
00002 // *****************************************************************************
00003 // oaPhysicalLayer.h
00004 //
00005 // This file contains the definition for the oaPhysicalLayer class and its
00006 // public supporting classes. The oaPhysicalLayer class defines a physical
00007 // layer which is referenced when creating physical design data. The supporting
00008 // classes include:
00009 //
00010 //  oaPrefRoutingDir
00011 //      This class implements an enumerated type that describes the preferred
00012 //      routing direction for a layer.
00013 //
00014 //  oaMaterial
00015 //      This class implements an enumerated type that describes the material
00016 //      type used by a layer.
00017 //
00018 //
00019 // *****************************************************************************
00020 // Except as specified in the OpenAccess terms of use of Cadence or Silicon
00021 // Integration Initiative, this material may not be copied, modified,
00022 // re-published, uploaded, executed, or distributed in any way, in any medium,
00023 // in whole or in part, without prior written permission from Cadence.
00024 //
00025 //                Copyright 2002-2005 Cadence Design Systems, Inc.
00026 //                           All Rights Reserved.
00027 //
00028 //  $Author: icftcm $
00029 //  $Revision: #1 $
00030 //  $Date: 2010/08/09 $
00031 //  $State: Exp $
00032 // *****************************************************************************
00033 // *****************************************************************************
00034 
00035 
00036 
00037 #if !defined(oaPhysicalLayer_P)
00038 #define oaPhysicalLayer_P
00039 
00040 
00041 
00042 // *****************************************************************************
00043 // Nested includes
00044 // *****************************************************************************
00045 #include "oaLayer.h"
00046 
00047 
00048 
00049 // *****************************************************************************
00050 // Declare and define types in the OpenAccess namespace.
00051 // *****************************************************************************
00052 BEGIN_OA_NAMESPACE
00053 
00054 
00055 
00056 // *****************************************************************************
00057 // oaPrefRoutingDirEnum
00058 // *****************************************************************************
00059 #define oavNumPrefRoutingDirTypes   6
00060 
00061 enum oaPrefRoutingDirEnum {
00062     oacNotApplicablePrefRoutingDir  = 0,
00063     oacNonePrefRoutingDir           = 1,
00064     oacHorzPrefRoutingDir           = 2,
00065     oacVertPrefRoutingDir           = 3,
00066     oacLeftDiagPrefRoutingDir       = 4,
00067     oacRightDiagPrefRoutingDir      = 5
00068 };
00069 
00070 
00071 
00072 // *****************************************************************************
00073 // oaPrefRoutingDir
00074 // *****************************************************************************
00075 class OA_TECH_DLL_API oaPrefRoutingDir {
00076 public:
00077                             oaPrefRoutingDir(oaPrefRoutingDirEnum valueIn);
00078                             oaPrefRoutingDir(const oaString &name);
00079                             ~oaPrefRoutingDir();
00080 
00081     const oaString          &getName() const;
00082 
00083                             operator                oaPrefRoutingDirEnum() const;
00084 
00085 private:
00086     oaPrefRoutingDirEnum    value;
00087 
00088     static const oaString   names[];
00089 };
00090 
00091 
00092 
00093 // *****************************************************************************
00094 // oaMaterialEnum
00095 // *****************************************************************************
00096 #define oavNumMaterialTypes         14
00097 
00098 enum oaMaterialEnum {
00099     oacOtherMaterial            = 0,
00100     oacNWellMaterial            = 1,
00101     oacPWellMaterial            = 2,
00102     oacNDiffMaterial            = 3,
00103     oacPDiffMaterial            = 4,
00104     oacNImplantMaterial         = 5,
00105     oacPImplantMaterial         = 6,
00106     oacPolyMaterial             = 7,
00107     oacCutMaterial              = 8,
00108     oacMetalMaterial            = 9,
00109     oacContactlessMetalMaterial = 10,
00110     oacDiffMaterial             = 11,
00111     oacRecognitionMaterial      = 12,
00112     oacPassivationCutMaterial   = 13
00113 };
00114 
00115 
00116 
00117 // *****************************************************************************
00118 // oaMaterial
00119 // *****************************************************************************
00120 class OA_TECH_DLL_API oaMaterial {
00121 public:
00122                             oaMaterial(oaMaterialEnum valueIn);
00123                             oaMaterial(const oaString &name);
00124                             ~oaMaterial();
00125 
00126     const oaString          &getName() const;
00127 
00128                             operator                oaMaterialEnum() const;
00129 
00130 private:
00131     static const oaString   *initNames();
00132 
00133     oaMaterialEnum          value;
00134 
00135     static const oaString   names[];
00136 };
00137 
00138 
00139 
00140 // *****************************************************************************
00141 // oaPhysicalLayer
00142 // *****************************************************************************
00143 #define oacUnsetMaskNumber 0xffffffffu
00144 
00145 class OA_TECH_DLL_API oaPhysicalLayer : public oaLayer {
00146 public:
00147     static oaPhysicalLayer          *create(oaTech          *tech,
00148                                             const oaString  &name,
00149                                             oaLayerNum      number,
00150                                             oaMaterial      material = oacOtherMaterial,
00151                                             oaUInt4         maskNumber = oacUnsetMaskNumber);
00152 
00153     static oaPhysicalLayer          *find(const oaTech      *tech,
00154                                           const oaString    &name);
00155     static oaPhysicalLayer          *find(const oaTech  *tech,
00156                                           oaLayerNum    number);
00157     static oaPhysicalLayer          *find(const oaTech      *tech,
00158                                           const oaString    &name,
00159                                           oaBoolean         local);
00160     static oaPhysicalLayer          *find(const oaTech  *tech,
00161                                           oaLayerNum    number,
00162                                           oaBoolean     local);
00163 
00164     oaMaterial                      getMaterial() const;
00165     oaPrefRoutingDir                getPrefRoutingDir() const;
00166     oaUInt4                         getMaskNumber() const;
00167     oaDist                          getManufacturingGrid() const;
00168 
00169 #if !defined(OA_DEPRECATED)
00170     oaPhysicalLayer                 *getLayerAbove(oaMaterial material) const;
00171     oaPhysicalLayer                 *getLayerBelow(oaMaterial material) const;
00172 #endif
00173 
00174     oaCollection<oaLayer, oaTech>   getLayerAbove(const oaTech  *tech,
00175                                                   oaMaterial    material,
00176                                                   oaBoolean     local = false) const;
00177     oaCollection<oaLayer, oaTech>   getLayerBelow(const oaTech  *tech,
00178                                                   oaMaterial    material,
00179                                                   oaBoolean     local = false) const;
00180 
00181     void                            getExcludedLayers(oaLayerNameArray &excludedLayerNames) const;
00182     oaBoolean                       hasExcludedLayers() const;
00183 
00184     void                            setMaterial(oaMaterial material);
00185     void                            setPrefRoutingDir(oaPrefRoutingDir dir);
00186     void                            setMaskNumber(oaUInt4 number);
00187     void                            setManufacturingGrid(oaDist grid);
00188     void                            resetManufacturingGrid();
00189     void                            setExcludedLayers(const oaLayerNameArray &excludedLayerNames);
00190     void                            unsetExcludedLayers();
00191 };
00192 
00193 
00194 
00195 // *****************************************************************************
00196 // oaTech traits
00197 // *****************************************************************************
00198 template<>
00199 class oaTraits<oaPhysicalLayer> {
00200 public:
00201     typedef oaLayerModTypeEnum  modTypeType;
00202     typedef oaLayer             parentType;
00203     enum {dtIndex = oacLayerDataType};
00204     enum {dataTypeEnumVal = oacLayerDataType};
00205     enum {dbType = oacTechDBType};
00206     enum {domain = oacNoDomain};
00207     enum {isMultiDomain = false};
00208     enum {isConcrete = true};
00209     enum {objectTypeEnumVal = oacPhysicalLayerType};
00210 };
00211 
00212 
00213 
00214 END_OA_NAMESPACE
00215 
00216 #endif

Return to top of page