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
Copyright © 2002 - 2010 Cadence Design Systems, Inc.
All Rights Reserved.