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
39namespace 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:
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
155 inline void BasicLayer::setBlockageLayer ( BasicLayer* layer)
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
184template<>
185inline std::string getString<const Hurricane::BasicLayer::Material::Code*>
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
205template<>
206inline Hurricane::Record* getRecord<const Hurricane::BasicLayer::Material::Code*>
208{
209 Hurricane::Record* record = new Hurricane::Record(getString(object));
210 record->add(getSlot("Code", (unsigned int*)object));
211 return record;
212}
213
214
215INSPECTOR_P_SUPPORT(Hurricane::BasicLayer);
216INSPECTOR_P_SUPPORT(Hurricane::BasicLayer::Material);
217IOSTREAM_POINTER_SUPPORT(Hurricane::BasicLayer::Material::Code);
Definition BasicLayer.h:48
Code
Definition BasicLayer.h:51
@ metal
Definition BasicLayer.h:58
@ pImplant
Definition BasicLayer.h:54
@ nImplant
Definition BasicLayer.h:53
@ nWell
Definition BasicLayer.h:51
@ poly
Definition BasicLayer.h:56
@ pWell
Definition BasicLayer.h:52
@ other
Definition BasicLayer.h:61
@ cut
Definition BasicLayer.h:57
@ active
Definition BasicLayer.h:55
@ blockage
Definition BasicLayer.h:59
BasicLayer description (API)
Definition BasicLayer.h:42
void setBlockageLayer(BasicLayer *layer)
Definition BasicLayer.h:155
const Material & getMaterial() const
Definition BasicLayer.h:146
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)
void setRealName(const char *realName)
Definition BasicLayer.h:153
const Name & getRealName() const
Definition BasicLayer.h:149
std::int64_t Unit
Definition DbU.h:67
JSON Parser Stack.
Definition JsonObject.h:249
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.13.2 on Fri Sep 27 2024 Return to top of page
Hurricane VLSI Database Copyright © 2000-2020 Bull S.A. All rights reserved