Hurricane VLSI Database


Instance.h
1// ****************************************************************************************************
2// File: ./hurricane/Instance.h
3// Authors: R. Escassut
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 it under the terms of the GNU
9// Lesser General Public License as published by the Free Software Foundation, either version 3 of the
10// License, or (at your option) any later version.
11//
12// Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
13// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
14// General Public License for more details.
15//
16// You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
17// not, see <http://www.gnu.org/licenses/>.
18// ****************************************************************************************************
19
20#pragma once
21#include "hurricane/Go.h"
22#include "hurricane/Plug.h"
23#include "hurricane/SharedPath.h"
24//#include "hurricane/IntrusiveMap.h"
25
26namespace Hurricane {
27
28class Net;
29class BasicLayer;
30
31// ****************************************************************************************************
32// Instance declaration
33// ****************************************************************************************************
34
35class Instance : public Go {
36// ***********************
37 private:
38 static FastRTTI _fastRTTI;
39 public:
40 static inline const FastRTTI& fastRTTI ();
41 virtual const FastRTTI& vfastRTTI () const;
42
43// Types
44// *****
45
46 public: typedef Go Inherit;
47
48 public: class PlacementStatus {
49 // **************************
50
51 public: enum Code {UNPLACED=0, PLACED=1, FIXED=2};
52
53 private: Code _code;
54
55 public: PlacementStatus(const Code& code = UNPLACED);
56 public: PlacementStatus(const PlacementStatus& placementstatus);
57 public: PlacementStatus(string);
58
59 public: PlacementStatus& operator=(const PlacementStatus& placementstatus);
60
61 public: operator const Code&() const {return _code;};
62
63 public: const Code& getCode() const {return _code;};
64
65 public: string _getTypeName() const { return _TName("Instance::PlacementStatus"); };
66 public: string _getString() const;
67 public: Record* _getRecord() const;
68
69 };
70
71 public: class PlugMap : public IntrusiveMap<const Net*, Plug> {
72 // **********************************************************
73
74 public: typedef IntrusiveMap<const Net*, Plug> Inherit;
75
76 public: PlugMap();
77
78 public: virtual const Net* _getKey(Plug* plug) const;
79 public: virtual unsigned _getHashValue(const Net* masterNet) const;
80 public: virtual Plug* _getNextElement(Plug* plug) const;
81 public: virtual void _setNextElement(Plug* plug, Plug* nextPlug) const;
82
83 };
84
85 public: class SharedPathMap : public IntrusiveMap<const SharedPath*, SharedPath> {
86 // *****************************************************************************
87
88 public: typedef IntrusiveMap<const SharedPath*, SharedPath> Inherit;
89
90 public: SharedPathMap();
91
92 public: virtual const SharedPath* _getKey(SharedPath* sharedPath) const;
93 public: virtual unsigned _getHashValue(const SharedPath* tailSharedPath) const;
94 public: virtual SharedPath* _getNextElement(SharedPath* sharedPath) const;
95 public: virtual void _setNextElement(SharedPath* sharedPath, SharedPath* nextSharedPath) const;
96
97 };
98
99// Attributes
100// **********
101
102 private: Cell* _cell;
103 private: Name _name;
104 private: Cell* _masterCell;
105 private: Transformation _transformation;
106 private: PlacementStatus _placementStatus;
107 private: PlugMap _plugMap;
108 private: SharedPathMap _sharedPathMap;
109 private: Instance* _nextOfCellInstanceMap;
110 private: Instance* _nextOfCellSlaveInstanceSet;
111
112// Constructors
113// ************
114
115 protected: Instance(Cell* cell, const Name& name, Cell* masterCell, const Transformation& transformation, const PlacementStatus& placementstatus, bool secureFlag);
116
117 public: static Instance* create(Cell* cell, const Name& name, Cell* masterCell, bool secureFlag = true);
118 public: static Instance* create(Cell* cell, const Name& name, Cell* masterCell, const Transformation& transformation, const PlacementStatus& placementstatus, bool secureFlag = true);
119
120// Accessors
121// *********
122
123 public: virtual Cell* getCell() const {return _cell;};
124 public: virtual Box getBoundingBox() const;
125 public: const Name& getName() const {return _name;};
126 public: Cell* getMasterCell() const {return _masterCell;};
127 public: const Transformation& getTransformation() const {return _transformation;};
128 public: const PlacementStatus& getPlacementStatus() const {return _placementStatus;};
129 public: Plug* getPlug(const Net* masterNet) const {return _plugMap.getElement(masterNet);};
130 public: Plugs getPlugs() const {return _plugMap.getElements();};
131 public: Plugs getConnectedPlugs() const;
132 public: Plugs getUnconnectedPlugs() const;
133 public: Path getPath(const Path& tailPath = Path()) const;
134 public: Box getAbutmentBox() const;
135
136// Predicates
137// **********
138
139 public: bool isUnplaced() const {return _placementStatus == PlacementStatus::UNPLACED;};
140 public: bool isPlaced() const {return _placementStatus == PlacementStatus::PLACED;};
141 public: bool isFixed() const {return _placementStatus == PlacementStatus::FIXED;};
142 public: bool isTerminal() const;
143 public: bool isTerminalNetlist() const;
144 public: bool isUnique() const;
145 public: bool isUniquified() const;
146 public: bool isUniquifyMaster() const;
147
148// Filters
149// *******
150
151 public: static InstanceFilter getIsUnderFilter(const Box& area);
152 public: static InstanceFilter getIsTerminalFilter();
153 public: static InstanceFilter getIsTerminalNetlistFilter();
154 public: static InstanceFilter getIsUnplacedFilter();
155 public: static InstanceFilter getIsPlacedFilter();
156 public: static InstanceFilter getIsFixedFilter();
157 public: static InstanceFilter getIsNotUnplacedFilter();
158 public: static InstanceFilter getPruneMasterFilter( uint64_t );
159
160// Updators
161// ********
162
163 public: virtual void materialize();
164 public: virtual void unmaterialize();
165 public: virtual void invalidate(bool propagateFlag = true);
166 public: virtual void translate(const DbU::Unit& dx, const DbU::Unit& dy);
167
168 public: void setName(const Name& name);
169 public: void setTransformation(const Transformation& transformation);
170 public: void setPlacementStatus(const PlacementStatus& placementstatus);
171 public: void setMasterCell(Cell* masterCell, bool secureFlag = true);
172 public: void uniquify();
173 public: void slaveAbutmentBox();
174 public: Instance* getClone(Cell* cloneCell) const;
175
176// Others
177// ******
178
179 protected: virtual void _postCreate();
180
181 protected: virtual void _preDestroy();
182
183 public: virtual string _getTypeName() const {return _TName("Instance");};
184 public: virtual string _getString() const;
185 public: virtual Record* _getRecord() const;
186 public: virtual void _toJson(JsonWriter*) const;
187 public: virtual void _toJsonCollections(JsonWriter*) const;
188 public: PlugMap& _getPlugMap() {return _plugMap;};
189 public: SharedPath* _getSharedPath(const SharedPath* tailSharedPath) const {return _sharedPathMap.getElement(tailSharedPath);}
190 public: SharedPathes _getSharedPathes() const {return _sharedPathMap.getElements();};
191 public: SharedPathMap& _getSharedPathMap() {return _sharedPathMap;};
192 public: Instance* _getNextOfCellInstanceMap() const {return _nextOfCellInstanceMap;};
193 public: Instance* _getNextOfCellSlaveInstanceSet() const {return _nextOfCellSlaveInstanceSet;};
194
195 public: void _setNextOfCellInstanceMap(Instance* instance) {_nextOfCellInstanceMap = instance;};
196 public: void _setNextOfCellSlaveInstanceSet(Instance* instance) {_nextOfCellSlaveInstanceSet = instance;};
197
198};
199
200
201 inline const FastRTTI& Instance::fastRTTI () { return _fastRTTI; }
202
203
204class JsonInstance : public JsonEntity {
205// *************************************
206
207 public: static void initialize();
208 public: JsonInstance(unsigned long flags);
209 public: virtual string getTypeName() const;
210 public: virtual JsonInstance* clone(unsigned long) const;
211 public: virtual void toData(JsonStack&);
212};
213
214} // End of Hurricane namespace.
215
216
217// -------------------------------------------------------------------
218// Inspector Support for : Instance::PlacementStatus::Code*".
219
220template<>
221inline std::string getString<const Hurricane::Instance::PlacementStatus::Code*>
223 {
224 switch ( *object ) {
228 }
229 return "ABNORMAL";
230 }
231
232template<>
233inline std::string getString<Hurricane::Instance::PlacementStatus::Code>
235 {
236 switch ( object ) {
240 }
241 return "ABNORMAL";
242 }
243
244template<>
245inline Hurricane::Record* getRecord<const Hurricane::Instance::PlacementStatus::Code*>
247 {
248 Hurricane::Record* record = new Hurricane::Record(getString(object));
249 record->add(getSlot("Code", (unsigned int*)object));
250 return record;
251 }
252
253// template<>
254// inline Hurricane::Record* getRecord<const Hurricane::Instance::PlacementStatus::Code>
255// ( const Hurricane::Instance::PlacementStatus::Code object )
256// {
257// Hurricane::Record* record = new Hurricane::Record(getString(object));
258// record->add(getSlot("Code", (unsigned int)object));
259// return record;
260// }
261
262
263INSPECTOR_P_SUPPORT(Hurricane::Instance);
264INSPECTOR_P_SUPPORT(Hurricane::Instance::PlacementStatus);
265INSPECTOR_P_SUPPORT(Hurricane::Instance::PlugMap);
266INSPECTOR_P_SUPPORT(Hurricane::Instance::SharedPathMap);
267
268inline void jsonWrite ( JsonWriter* w, const std::string& key, const Hurricane::Instance::PlacementStatus& status )
269{
270 w->key( key );
271 w->write( getString(status.getCode()) );
272}
273
274
275// ****************************************************************************************************
276// Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
277// ****************************************************************************************************
BasicLayer description (API).
Definition BasicLayer.h:42
Box description (API).
Definition Box.h:30
The model (API).
Definition Cell.h:64
std::int64_t Unit
Definition DbU.h:67
virtual Box getBoundingBox() const =0
virtual Cell * getCell() const =0
virtual void materialize()=0
virtual void unmaterialize()=0
Instance Placement Status (API).
Definition Instance.h:48
PlacementStatus(const PlacementStatus &placementstatus)
PlacementStatus(const Code &code=UNPLACED)
const Code & getCode() const
Definition Instance.h:63
Code
Definition Instance.h:51
@ UNPLACED
Definition Instance.h:51
@ PLACED
Definition Instance.h:51
@ FIXED
Definition Instance.h:51
Instance description (API).
Definition Instance.h:35
Plugs getConnectedPlugs() const
Plug * getPlug(const Net *masterNet) const
Definition Instance.h:129
Box getAbutmentBox() const
Path getPath(const Path &tailPath=Path()) const
const Transformation & getTransformation() const
Definition Instance.h:127
static Instance * create(Cell *cell, const Name &name, Cell *masterCell, const Transformation &transformation, const PlacementStatus &placementstatus, bool secureFlag=true)
Plugs getPlugs() const
Definition Instance.h:130
void setTransformation(const Transformation &transformation)
Plugs getUnconnectedPlugs() const
void setMasterCell(Cell *masterCell, bool secureFlag=true)
const Name & getName() const
Definition Instance.h:125
static InstanceFilter getIsUnderFilter(const Box &area)
Instance * getClone(Cell *cloneCell) const
Cell * getMasterCell() const
Definition Instance.h:126
void setName(const Name &name)
static Instance * create(Cell *cell, const Name &name, Cell *masterCell, bool secureFlag=true)
Go Inherit
Definition Instance.h:46
virtual std::string getTypeName() const =0
Name description (API).
Definition Name.h:35
Net description (API).
Definition Net.h:46
Path description (API).
Definition Path.h:35
Plug description (API).
Definition Plug.h:37
Transformation description (API).
Definition Transformation.h:32
Contains Almost Everything.
Definition BasicLayer.h:39
GenericCollection< Plug * > Plugs
Definition Plugs.h:35
GenericFilter< Instance * > InstanceFilter
Definition Instances.h:51


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