Hurricane VLSI Database


BasicLayer.h
1 
2 // -*- C++ -*-
3 //
4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
5 //
6 // This file is part of Hurricane.
7 //
8 // Hurricane is free software: you can redistribute it and/or modify
9 // it under the terms of the GNU Lesser General Public License as
10 // published by the Free Software Foundation, either version 3 of the
11 // License, or (at your option) any later version.
12 //
13 // Hurricane is distributed in the hope that it will be useful, but
14 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
15 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
16 // General Public License for more details.
17 //
18 // You should have received a copy of the Lesser GNU General Public
19 // License along with Hurricane. If not, see
20 // <http://www.gnu.org/licenses/>.
21 //
22 // +-----------------------------------------------------------------+
23 // | H U R R I C A N E |
24 // | V L S I B a c k e n d D a t a - B a s e |
25 // | |
26 // | Author : Remy Escassut |
27 // | E-mail : Jean-Paul.Chaput@lip6.fr |
28 // | =============================================================== |
29 // | C++ Header : "./hurricane/BasicLayer.h" |
30 // +-----------------------------------------------------------------+
31 
32 
33 #pragma once
34 #include "hurricane/Layer.h"
35 #include "hurricane/BasicLayers.h"
36 #include "hurricane/Box.h"
37 
38 
39 namespace Hurricane {
40 
41 
42  class BasicLayer : public Layer {
43  public:
44  typedef Layer Super;
45 
46  public:
47  // Subclass: Material.
48  class Material {
49  // Enum: Code.
50  public:
51  enum Code { nWell =0
56  , poly
57  , cut
60  , info
61  , other
62  };
63  // Constructors.
64  Material ( const Code& code = other );
65  Material ( const Material& material );
66  // Methods.
67  Material& operator= ( const Material& material );
68  inline operator const Code& () const;
69  inline const Code& getCode () const;
70  static Material fromString ( const string& );
71  inline string _getTypeName () const;
72  string _getString () const;
73  Record* _getRecord () const;
74 
75  // Internal: Attributes.
76  private:
77  Code _code;
78  };
79 
80  public:
81  // Constructor.
82  static BasicLayer* create ( Technology* technology
83  , const Name& name
84  , const Material& material
85  , uint32_t gds2Layer = 0
86  , uint32_t gds2Datatype = 0
87  , const DbU::Unit& minimalSize = 0
88  , const DbU::Unit& minimalSpacing = 0
89  );
90  // Accessors.
91  inline bool hasGds () const;
92  inline const Material& getMaterial () const;
93  inline uint32_t getGds2Layer () const;
94  inline uint32_t getGds2Datatype () const;
95  virtual BasicLayers getBasicLayers () const;
96  virtual BasicLayer* getBlockageLayer () const;
97  virtual BasicLayer* getRoutingLayer () const;
98  virtual const Layer* getTop () const;
99  virtual const Layer* getBottom () const;
100  inline const Name& getRealName () const;
101  // Updators
102  inline void setBlockageLayer ( BasicLayer* layer);
103  inline void setRoutingLayer ( BasicLayer* layer);
104  inline void setGds2Layer ( uint32_t );
105  inline void setGds2Datatype ( uint32_t );
106  inline void setRealName ( const char* realName);
107  // Hurricane Managment.
108  virtual void _toJson ( JsonWriter* writer ) const;
109  virtual BasicLayer* _getSymbolicBasicLayer ();
110  virtual string _getTypeName () const;
111  virtual string _getString () const;
112  virtual Record* _getRecord () const;
113 
114  private:
115  // Internal: Attributes
116  Material _material;
117  uint32_t _gds2Layer;
118  uint32_t _gds2Datatype;
119  BasicLayer* _blockageLayer;
120  BasicLayer* _routingLayer;
121  Name _realName;
122  bool _hasGds;
123 
124  protected:
125  // Internal: Constructors & Destructors.
126  BasicLayer ( Technology* technology
127  , const Name& name
128  , const Material& material
129  , uint32_t gds2Layer
130  , uint32_t gds2Datatype
131  , const DbU::Unit& minimalSize = 0
132  , const DbU::Unit& minimalSpacing = 0
133  );
134  virtual void _postCreate ();
135  virtual void _preDestroy ();
136  };
137 
138 
139 // Inline Functions.
140  inline BasicLayer::Material::operator const Code& () const { return _code; }
141  inline const BasicLayer::Material::Code&
142  BasicLayer::Material::getCode () const { return _code; }
143  inline string BasicLayer::Material::_getTypeName () const { return _TName("BasicLayer::Material"); }
144  inline bool BasicLayer::hasGds () const { return _hasGds; }
145  inline const BasicLayer::Material&
146  BasicLayer::getMaterial () const { return _material; }
147  inline uint32_t BasicLayer::getGds2Layer () const { return _gds2Layer; }
148  inline uint32_t BasicLayer::getGds2Datatype () const { return _gds2Datatype; }
149  inline const Name& BasicLayer::getRealName () const { return _realName; }
150  inline void BasicLayer::setRoutingLayer ( BasicLayer* layer) { _routingLayer = layer; }
151  inline void BasicLayer::setGds2Layer ( uint32_t number ) { _gds2Layer=number; _hasGds=true; }
152  inline void BasicLayer::setGds2Datatype ( uint32_t number ) { _gds2Datatype=number; }
153  inline void BasicLayer::setRealName ( const char* realName) { _realName = realName; }
154 
156  {
157  _blockageLayer = layer;
158  layer->setBlockage( true );
159  layer->setRoutingLayer( this );
160  }
161 
162 
163 // -------------------------------------------------------------------
164 // Class : "Hurricane::JsonBasicLayer".
165 
166  class JsonBasicLayer : public JsonLayer {
167  public:
168  static void initialize ();
169  JsonBasicLayer ( unsigned long flags );
170  ~JsonBasicLayer ();
171  virtual string getTypeName () const;
172  virtual JsonBasicLayer* clone ( unsigned long ) const;
173  virtual void toData ( JsonStack& );
174  };
175 
176 
177 } // End of Hurricane namespace.
178 
179 
180 // -------------------------------------------------------------------
181 // Inspector Support for : BasicLayer::Material::Code.
182 
183 
184 template<>
185 inline std::string getString<const Hurricane::BasicLayer::Material::Code*>
186  ( const Hurricane::BasicLayer::Material::Code* object )
187 {
188  switch ( *object ) {
189  case Hurricane::BasicLayer::Material::nWell: return "nWell";
190  case Hurricane::BasicLayer::Material::pWell: return "pWell";
191  case Hurricane::BasicLayer::Material::nImplant: return "nImplant";
192  case Hurricane::BasicLayer::Material::pImplant: return "pImplant";
193  case Hurricane::BasicLayer::Material::active: return "active";
194  case Hurricane::BasicLayer::Material::poly: return "poly";
195  case Hurricane::BasicLayer::Material::cut: return "cut";
196  case Hurricane::BasicLayer::Material::metal: return "metal";
197  case Hurricane::BasicLayer::Material::blockage: return "blockage";
198  case Hurricane::BasicLayer::Material::info: return "info";
199  case Hurricane::BasicLayer::Material::other: return "other";
200  }
201  return "undefined";
202 }
203 
204 
205 template<>
206 inline Hurricane::Record* getRecord<const Hurricane::BasicLayer::Material::Code*>
207  ( const Hurricane::BasicLayer::Material::Code* object )
208 {
209  Hurricane::Record* record = new Hurricane::Record(getString(object));
210  record->add(getSlot("Code", (unsigned int*)object));
211  return record;
212 }
213 
214 
215 INSPECTOR_P_SUPPORT(Hurricane::BasicLayer);
216 INSPECTOR_P_SUPPORT(Hurricane::BasicLayer::Material);
217 IOSTREAM_POINTER_SUPPORT(Hurricane::BasicLayer::Material::Code);
Definition: BasicLayer.h:48
Code
Definition: BasicLayer.h:51
@ blockage
Definition: BasicLayer.h:59
@ other
Definition: BasicLayer.h:61
@ poly
Definition: BasicLayer.h:56
@ pImplant
Definition: BasicLayer.h:54
@ metal
Definition: BasicLayer.h:58
@ active
Definition: BasicLayer.h:55
@ pWell
Definition: BasicLayer.h:52
@ nImplant
Definition: BasicLayer.h:53
@ cut
Definition: BasicLayer.h:57
@ nWell
Definition: BasicLayer.h:51
BasicLayer description (API)
Definition: BasicLayer.h:42
void setBlockageLayer(BasicLayer *layer)
Definition: BasicLayer.h:155
void setRealName(const char *realName)
Definition: BasicLayer.h:153
const Name & getRealName() const
Definition: BasicLayer.h:149
static BasicLayer * create(Technology *technology, const Name &name, const Material &material, uint32_t gds2Layer=0, uint32_t gds2Datatype=0, const DbU::Unit &minimalSize=0, const DbU::Unit &minimalSpacing=0)
const Material & getMaterial() const
Definition: BasicLayer.h:146
std::int64_t Unit
Definition: DbU.h:67
JSON Parser Stack.
Definition: JsonObject.h:249
Layer description (API)
Definition: Layer.h:50
Name description (API)
Definition: Name.h:35
Technological rules description (API).
Definition: Technology.h:62
Contains Almost Everything.
Definition: BasicLayer.h:39


Generated by doxygen 1.9.1 on Wed Nov 20 2024 Return to top of page
Hurricane VLSI Database Copyright © 2000-2020 Bull S.A. All rights reserved