# Hurricane Documentation

# Hurricane VLSI Database

Cell.h
1 // ****************************************************************************************************
2 // File: ./hurricane/Cell.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 #ifndef HURRICANE_CELL_H
21 #define HURRICANE_CELL_H
22
23 #include <limits>
24 #include "hurricane/Flags.h"
25 #include "hurricane/Observer.h"
26 #include "hurricane/Signature.h"
27 #include "hurricane/Relation.h"
28 #include "hurricane/Pathes.h"
29 #include "hurricane/Entity.h"
30 #include "hurricane/Cells.h"
31 #include "hurricane/DeepNet.h"
32 #include "hurricane/Instance.h"
33 #include "hurricane/Pin.h"
34 #include "hurricane/Pins.h"
35 #include "hurricane/Slices.h"
36 #include "hurricane/ExtensionSlice.h"
37 #include "hurricane/Rubbers.h"
38 #include "hurricane/Markers.h"
39 #include "hurricane/Marker.h"
40 #include "hurricane/Reference.h"
41 #include "hurricane/Components.h"
42 #include "hurricane/Occurrences.h"
43 #include "hurricane/Transformation.h"
44 #include "hurricane/Layer.h"
45 #include "hurricane/QuadTree.h"
46 //#include "hurricane/IntrusiveMap.h"
47 #include "hurricane/IntrusiveSet.h"
48 #include "hurricane/MapCollection.h"
49 #include "hurricane/NetAlias.h"
50
51
52
53 namespace Hurricane {
54
55 class Library;
56 class BasicLayer;
57
58 typedef multimap<Entity*,Entity*> SlaveEntityMap;
59
60
61
62 // ****************************************************************************************************
63 // Cell declaration
64 // ****************************************************************************************************
65
66 class Cell : public Entity {
67 // *************************
68
69 // Types
70 // *****
71
72 public: typedef Entity Inherit;
73 public: typedef map<Name,ExtensionSlice*> ExtensionSliceMap;
74
75 public: class Flags : public BaseFlags {
76 public:
77 enum Flag { NoFlags = (1 << 0)
78 , BuildRings = (1 << 1)
79 , BuildClockRings = (1 << 2)
80 , BuildSupplyRings = (1 << 3)
81 , NoClockFlatten = (1 << 4)
82 , WarnOnUnplacedInstances = (1 << 5)
83 , StayOnPlugs = (1 << 6)
84 , MaskRings = BuildRings|BuildClockRings|BuildSupplyRings
85 // Flags set for Observers.
86 , CellAboutToChange = (1 << 10)
87 , CellChanged = (1 << 11)
88 , CellDestroyed = (1 << 12)
89 // Cell states
90 , TerminalNetlist = (1 << 20)
91 , Pad = (1 << 21)
92 , Feed = (1 << 22)
93 , FlattenedNets = (1 << 23)
94 , Placed = (1 << 24)
95 , Routed = (1 << 25)
96 , MergedQuadTree = (1 << 26)
97 , SlavedAb = (1 << 27)
98 , Materialized = (1 << 28)
99 };
100
101 public:
102 Flags ( uint64_t flags = NoFlags );
103 virtual ~Flags ();
104 virtual std::string _getTypeName () const;
105 virtual std::string _getString () const;
106 };
107
108 class UniquifyRelation : public Relation {
109 public:
110 static UniquifyRelation* create ( Cell* );
111 static UniquifyRelation* get ( const Cell* );
112 virtual Name getName () const;
113 static Name staticGetName ();
114 Name getUniqueName ();
115 static std::string getTrunkName ( Name name );
116 virtual bool hasJson () const;
117 virtual void toJson ( JsonWriter*, const DBo* ) const;
118 inline void _setOwner ( Cell* );
119 inline void _setDuplicates ( unsigned int );
120 virtual string _getTypeName () const;
121 virtual Record* _getRecord () const;
122 private:
123 static const Name _name;
124 unsigned int _duplicates;
125 private:
126 UniquifyRelation ( Cell* );
127 protected:
128 virtual void _preDestroy ();
129
130 public:
131 class JsonProperty : public JsonObject {
132 public:
133 static void initialize ();
134 JsonProperty ( unsigned long flags );
135 virtual string getTypeName () const;
136 virtual JsonProperty* clone ( unsigned long ) const;
137 virtual void toData ( JsonStack& );
138 };
139 public:
140 class JsonPropertyRef : public JsonObject {
141 public:
142 static void initialize ();
143 JsonPropertyRef ( unsigned long flags );
144 virtual string getTypeName () const;
145 virtual JsonPropertyRef* clone ( unsigned long ) const;
146 virtual void toData ( JsonStack& );
147 };
148 };
149
150 class ClonedSet : public Collection<Cell*> {
151 public:
152 // Sub-Class: Locator.
153 class Locator : public Hurricane::Locator<Cell*> {
154 public:
155 Locator ( const Cell* );
156 inline Locator ( const Locator& );
157 virtual Cell* getElement () const;
158 virtual Hurricane::Locator<Cell*>* getClone () const;
159 virtual bool isValid () const;
160 virtual void progress ();
161 virtual string _getString () const;
162 protected:
163 Hurricane::Locator<DBo*>* _dboLocator;
164 };
165
166 public:
167 inline ClonedSet ( const Cell* cell );
168 inline ClonedSet ( const ClonedSet& );
169 virtual Hurricane::Collection<Cell*>* getClone () const;
170 virtual Hurricane::Locator<Cell*>* getLocator () const;
171 virtual string _getString () const;
172 protected:
173 const Cell* _cell;
174 };
175
176 class SlavedsRelation : public Relation {
177 public:
178 static SlavedsRelation* create ( Cell* );
179 static SlavedsRelation* get ( const Cell* );
180 virtual Name getName () const;
181 static Name staticGetName ();
182 virtual bool hasJson () const;
183 virtual void toJson ( JsonWriter*, const DBo* ) const;
184 inline void _setOwner ( Cell* );
185 virtual string _getTypeName () const;
186 virtual Record* _getRecord () const;
187 private:
188 static const Name _name;
189 private:
190 SlavedsRelation ( Cell* );
191 protected:
192 virtual void _preDestroy ();
193
194 public:
195 class JsonProperty : public JsonObject {
196 public:
197 static void initialize ();
198 JsonProperty ( unsigned long flags );
199 virtual string getTypeName () const;
200 virtual JsonProperty* clone ( unsigned long ) const;
201 virtual void toData ( JsonStack& );
202 };
203 public:
204 class JsonPropertyRef : public JsonObject {
205 public:
206 static void initialize ();
207 JsonPropertyRef ( unsigned long flags );
208 virtual string getTypeName () const;
209 virtual JsonPropertyRef* clone ( unsigned long ) const;
210 virtual void toData ( JsonStack& );
211 };
212 };
213
214 class SlavedsSet : public Collection<Cell*> {
215 public:
216 // Sub-Class: Locator.
217 class Locator : public Hurricane::Locator<Cell*> {
218 public:
219 Locator ( const Cell* );
220 inline Locator ( const Locator& );
221 virtual Cell* getElement () const;
222 virtual Hurricane::Locator<Cell*>* getClone () const;
223 virtual bool isValid () const;
224 virtual void progress ();
225 virtual string _getString () const;
226 protected:
227 Hurricane::Locator<DBo*>* _dboLocator;
228 };
229
230 public:
231 inline SlavedsSet ( const Cell* cell );
232 inline SlavedsSet ( const SlavedsSet& );
233 virtual Hurricane::Collection<Cell*>* getClone () const;
234 virtual Hurricane::Locator<Cell*>* getLocator () const;
235 virtual string _getString () const;
236 protected:
237 const Cell* _cell;
238 };
239
240 class InstanceMap : public IntrusiveMap<Name, Instance> {
241 // ****************************************************
242
243 public: typedef IntrusiveMap<Name, Instance> Inherit;
244
245 public: InstanceMap();
246
247 public: virtual Name _getKey(Instance* instance) const;
248 public: virtual unsigned _getHashValue(Name name) const;
249 public: virtual Instance* _getNextElement(Instance* instance) const;
250 public: virtual void _setNextElement(Instance* instance, Instance* nextInstance) const;
251
252 };
253
254 public: class SlaveInstanceSet : public IntrusiveSet<Instance> {
255 // ***********************************************************
256
257 public: typedef IntrusiveSet<Instance> Inherit;
258
259 public: SlaveInstanceSet();
260
261 public: virtual unsigned _getHashValue(Instance* slaveInstance) const;
262 public: virtual Instance* _getNextElement(Instance* slaveInstance) const;
263 public: virtual void _setNextElement(Instance* slaveInstance, Instance* nextSlaveInstance) const;
264
265 };
266
267 public: class NetMap : public IntrusiveMapConst<Name, Net> {
268 // *********************************************************
269
270 public: typedef IntrusiveMapConst<Name, Net> Inherit;
271
272 public: NetMap();
273
274 public: virtual const Name& _getKey(Net* net) const;
275 public: virtual unsigned _getHashValue(const Name& name) const;
276 public: virtual Net* _getNextElement(Net* net) const;
277 public: virtual void _setNextElement(Net* net, Net* nextNet) const;
278
279 };
280
281 class PinMap : public IntrusiveMap<Name, Pin> {
282 // *******************************************
283
284 public: typedef IntrusiveMap<Name, Pin> Inherit;
285
286 public: PinMap();
287
288 public: virtual Name _getKey(Pin* pin) const;
289 public: virtual unsigned _getHashValue(Name name) const;
290 public: virtual Pin* _getNextElement(Pin* pin) const;
291 public: virtual void _setNextElement(Pin* pin, Pin* nextPin) const;
292
293 };
294
295 public: class SliceMap : public IntrusiveMap<const Layer*, Slice> {
296 // **************************************************************
297
298 public: typedef IntrusiveMap<const Layer*, Slice> Inherit;
299
300 public: SliceMap();
301
302 public: virtual const Layer* _getKey(Slice* slice) const;
303 public: virtual unsigned _getHashValue(const Layer* layer) const;
304 public: virtual Slice* _getNextElement(Slice* slice) const;
305 public: virtual void _setNextElement(Slice* slice, Slice* nextSlice) const;
306
307 };
308
309 public: class MarkerSet : public IntrusiveSet<Marker> {
310 // **************************************************
311
312 public: typedef IntrusiveSet<Marker> Inherit;
313
314 public: MarkerSet();
315
316 public: virtual unsigned _getHashValue(Marker* marker) const;
317 public: virtual Marker* _getNextElement(Marker* marker) const;
318 public: virtual void _setNextElement(Marker* marker, Marker* nextMarker) const;
319
320 };
321
322 // Attributes
323 // **********
324
325 private: Library* _library;
326 private: Name _name;
327 private: Path _shuntedPath;
328 private: InstanceMap _instanceMap;
329 private: QuadTree* _quadTree;
330 private: SlaveInstanceSet _slaveInstanceSet;
331 private: NetMap _netMap;
332 private: PinMap _pinMap;
333 private: SliceMap* _sliceMap;
334 private: ExtensionSliceMap _extensionSlices;
335 private: MarkerSet _markerSet;
336 private: Box _abutmentBox;
337 private: Box _boundingBox;
338 private: Cell* _nextOfLibraryCellMap;
339 private: Cell* _nextOfSymbolCellSet;
340 private: SlaveEntityMap _slaveEntityMap;
341 private: AliasNameSet _netAliasSet;
342 private: Observable _observers;
343 private: Flags _flags;
344
345 // Constructors
346 // ************
347
348 protected: Cell(Library* library, const Name& name);
349
350 // Others
351 // ******
352
353 protected: virtual void _postCreate();
354
355 protected: virtual void _preDestroy();
356
357 public: virtual string _getTypeName() const {return _TName("Cell");};
358 public: virtual string _getString() const;
359 public: virtual Record* _getRecord() const;
360 public: static string getFlagString( uint64_t );
361 public: static Record* getFlagRecord( uint64_t );
362 public: static Slot* getFlagSlot( uint64_t );
363
364 public: InstanceMap& _getInstanceMap() {return _instanceMap;};
365 public: QuadTree* _getQuadTree() {return _quadTree;};
366 public: SlaveInstanceSet& _getSlaveInstanceSet() {return _slaveInstanceSet;};
367 public: NetMap& _getNetMap() {return _netMap;};
368 public: PinMap& _getPinMap() {return _pinMap;};
369 public: SliceMap* _getSliceMap() {return _sliceMap;};
370 public: ExtensionSliceMap& _getExtensionSliceMap() {return _extensionSlices;};
371 public: MarkerSet& _getMarkerSet() {return _markerSet;};
372 public: Cell* _getNextOfLibraryCellMap() const {return _nextOfLibraryCellMap;};
373 public: Cell* _getNextOfSymbolCellSet() const {return _nextOfSymbolCellSet;};
374 public: AliasNameSet& _getNetAliasSet() { return _netAliasSet; }
375
376 public: void _setNextOfLibraryCellMap(Cell* cell) {_nextOfLibraryCellMap = cell;};
377 public: void _setNextOfSymbolCellSet(Cell* cell) {_nextOfSymbolCellSet = cell;};
378
379 public: void _addNetAlias(NetAliasName* alias) { _netAliasSet.insert(alias); }
380 public: void _removeNetAlias(NetAliasName* alias) { _netAliasSet.erase(alias); }
381
382 public: void _fit(const Box& box);
383 public: void _unfit(const Box& box);
384
385 public: void _addSlaveEntity(Entity* entity, Entity* slaveEntity);
386 public: void _removeSlaveEntity(Entity* entity, Entity* slaveEntity);
387 public: void _getSlaveEntities(SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
388 public: void _getSlaveEntities(Entity* entity, SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
389 public: void _insertSlice(ExtensionSlice*);
390 public: void _removeSlice(ExtensionSlice*);
391 public: void _slaveAbutmentBox(Cell*);
392 public: void _changeQuadTree(Cell*);
393 public: void _setShuntedPath(Path path) { _shuntedPath=path; }
394 protected: void _setAbutmentBox(const Box& abutmentBox);
395
396 public: virtual void _toJson(JsonWriter*) const;
397 public: virtual void _toJsonCollections(JsonWriter*) const;
398
399 // Constructors
400 // ************
401
402 public: static Cell* create(Library* library, const Name& name);
403 public: static Cell* fromJson(const string& filename);
404
405 // Accessors
406 // *********
407
408 public: virtual Cell* getCell() const {return (Cell*)this;};
409 public: virtual Box getBoundingBox() const;
410 public: Library* getLibrary() const {return _library;};
411 public: string getHierarchicalName() const;
412 public: const Name& getName() const {return _name;};
413 public: const Flags& getFlags() const { return _flags; }
414 public: Flags& getFlags() { return _flags; }
415 public: Path getShuntedPath() const { return _shuntedPath; }
416 public: Entity* getEntity(const Signature&) const;
417 public: Instance* getInstance(const Name& name) const {return _instanceMap.getElement(name);};
418 public: Instances getInstances() const {return _instanceMap.getElements();};
419 public: Instances getPlacedInstances() const;
420 public: Instances getFixedInstances() const;
421 public: Instances getUnplacedInstances() const;
422 public: Instances getNotUnplacedInstances() const;
423 public: Instances getInstancesUnder(const Box& area, DbU::Unit threshold=0) const;
424 public: Instances getPlacedInstancesUnder(const Box& area) const;
425 public: Instances getFixedInstancesUnder(const Box& area) const;
426 public: Instances getUnplacedInstancesUnder(const Box& area) const;
427 public: Instances getNotUnplacedInstancesUnder(const Box& area) const;
428 public: Instances getSlaveInstances() const; // {return _slaveInstanceSet.getElements();}; NOON!!
429 public: Instances getTerminalInstances() const;
430 public: Instances getTerminalInstancesUnder(const Box& area) const;
431 public: Instances getNonTerminalInstances() const;
432 public: Instances getNonTerminalInstancesUnder(const Box& area) const;
433 public: Instances getTerminalNetlistInstances() const;
434 public: Instances getTerminalNetlistInstancesUnder(const Box& area) const;
435 public: Instances getNonTerminalNetlistInstances() const;
436 public: Instances getNonTerminalNetlistInstancesUnder(const Box& area) const;
437 public: Net* getNet(const Name& name) const;
438 public: DeepNet* getDeepNet( Path, const Net* ) const;
439 public: Nets getNets() const {return _netMap.getElements();};
440 public: Nets getGlobalNets() const;
441 public: Nets getExternalNets() const;
442 public: Nets getInternalNets() const;
443 public: Nets getClockNets() const;
444 public: Nets getSupplyNets() const;
445 public: Nets getPowerNets() const;
446 public: Nets getGroundNets() const;
447 public: Pin* getPin(const Name& name) const {return _pinMap.getElement(name);};
448 public: Pins getPins() const {return _pinMap.getElements();};
449 public: Slice* getSlice(const Layer* layer) const {return _sliceMap->getElement(layer);};
450 public: Slices getSlices(const Layer::Mask& mask = ~0) const;
451 public: const ExtensionSliceMap& getExtensionSliceMap() const { return _extensionSlices; };
452 public: ExtensionSlice* getExtensionSlice(const Name& name) const;
453 public: ExtensionSlices getExtensionSlices(ExtensionSlice::Mask mask=~0) const;
454 public: Rubbers getRubbers() const;
455 public: Rubbers getRubbersUnder(const Box& area) const;
456 public: Markers getMarkers() const {return _markerSet.getElements();};
457 public: Markers getMarkersUnder(const Box& area) const;
458 public: References getReferences() const;
459 public: Components getComponents(const Layer::Mask& mask = ~0) const;
460 public: Components getComponentsUnder(const Box& area, const Layer::Mask& mask = ~0) const;
461 public: Occurrences getOccurrences(unsigned searchDepth = std::numeric_limits<unsigned int>::max()) const;
462 public: Occurrences getOccurrencesUnder(const Box& area, unsigned searchDepth = std::numeric_limits<unsigned int>::max()) const;
463 public: Occurrences getTerminalInstanceOccurrences() const;
464 public: Occurrences getTerminalInstanceOccurrencesUnder(const Box& area) const;
465 public: Occurrences getTerminalNetlistInstanceOccurrences( const Instance* topInstance=NULL ) const;
466 public: Occurrences getTerminalNetlistInstanceOccurrencesUnder(const Box& area) const;
467 public: Occurrences getNonTerminalNetlistInstanceOccurrences( const Instance* topInstance=NULL ) const;
468 public: Occurrences getComponentOccurrences(const Layer::Mask& mask = ~0) const;
469 public: Occurrences getComponentOccurrencesUnder(const Box& area, const Layer::Mask& mask = ~0) const;
470 public: Occurrences getHyperNetRootNetOccurrences() const;
471 public: ExtensionSlice::Mask getExtensionSliceMask ( const Name& name ) const;
472 public: Gos getExtensionGos ( const Name& name ) const;
473 public: Gos getExtensionGos ( ExtensionSlice::Mask mask = ~0 ) const;
474 public: Gos getExtensionGosUnder ( const Box& area, const Name& name ) const;
475 public: Gos getExtensionGosUnder ( const Box& area, ExtensionSlice::Mask mask = ~0 ) const;
476 public: Cells getSubCells() const;
477 public: Cells getClonedCells() const;
478 public: Cell* getCloneMaster() const;
479 public: Pathes getRecursiveSlavePathes() const;
480 public: const Box& getAbutmentBox() const {return _abutmentBox;};
481
482 // Predicates
483 // **********
484
485 public: bool isCalledBy(Cell* cell) const;
486 public: bool isTerminal() const {return _instanceMap.isEmpty();};
487 public: bool isTerminalNetlist() const {return _flags.isset(Flags::TerminalNetlist);};
488 public: bool isUnique() const;
489 public: bool isUniquified() const;
490 public: bool isUniquifyMaster() const;
491 public: bool isPad() const {return _flags.isset(Flags::Pad);};
492 public: bool isFeed() const {return _flags.isset(Flags::Feed);};
493 public: bool isFlattenedNets() const {return _flags.isset(Flags::FlattenedNets);};
494 public: bool isPlaced() const {return _flags.isset(Flags::Placed);};
495 public: bool isRouted() const {return _flags.isset(Flags::Routed);};
496 public: bool isNetAlias(const Name& name) const;
497
498 // Updators
499 // ********
500
501 public: void setName(const Name& name);
502 public: void setAbutmentBox(const Box& abutmentBox);
503 public: void slaveAbutmentBox(Cell*);
504 public: void unslaveAbutmentBox(Cell*);
505 public: void setTerminalNetlist(bool isTerminalNetlist) {_flags.set(Flags::TerminalNetlist,isTerminalNetlist);};
506 public: void setPad(bool isPad) {_flags.set(Flags::Pad,isPad);};
507 public: void setFeed(bool isFeed) {_flags.set(Flags::Feed,isFeed);};
508 public: void setRouted(bool isRouted) {_flags.set(Flags::Routed,isRouted);};
509 public: void flattenNets(uint64_t flags=Flags::BuildRings);
510 public: void flattenNets(const Instance* instance, uint64_t flags=Flags::BuildRings);
511 public: void createRoutingPadRings(uint64_t flags=Flags::BuildRings);
512 public: void setFlags(uint64_t flags) { _flags |= flags; }
513 public: void resetFlags(uint64_t flags) { _flags &= ~flags; }
514 public: bool updatePlacedFlag();
515 public: void materialize();
516 public: void unmaterialize();
517 public: Cell* getClone();
518 public: void uniquify(unsigned int depth=std::numeric_limits<unsigned int>::max());
519 public: void addObserver(BaseObserver*);
520 public: void removeObserver(BaseObserver*);
521 public: void notify(unsigned flags);
522 public: void destroyPhysical();
523 };
524
525
526 inline Cell::ClonedSet::Locator::Locator ( const Locator& other )
527 : Hurricane::Locator<Cell*>()
528 , _dboLocator(other._dboLocator)
529 { }
530
531 inline Cell::ClonedSet::ClonedSet ( const Cell* cell )
532 : Hurricane::Collection<Cell*>()
533 , _cell(cell)
534 { }
535
536 inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other )
537 : Hurricane::Collection<Cell*>()
538 , _cell(other._cell)
539 { }
540
541
542 inline void Cell::UniquifyRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
543 inline void Cell::UniquifyRelation::_setDuplicates ( unsigned int duplicates ) { _duplicates=duplicates; }
544
545
546 inline Cell::SlavedsSet::Locator::Locator ( const Locator& other )
547 : Hurricane::Locator<Cell*>()
548 , _dboLocator(other._dboLocator)
549 { }
550
551 inline Cell::SlavedsSet::SlavedsSet ( const Cell* cell )
552 : Hurricane::Collection<Cell*>()
553 , _cell(cell)
554 { }
555
556 inline Cell::SlavedsSet::SlavedsSet ( const SlavedsSet& other )
557 : Hurricane::Collection<Cell*>()
558 , _cell(other._cell)
559 { }
560
561
562 inline void Cell::SlavedsRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
563
564
565 class JsonCell : public JsonEntity {
566 // *********************************
567
568 public: static void initialize();
569 public: JsonCell(unsigned long flags);
570 public: virtual ~JsonCell();
571 public: virtual string getTypeName() const;
572 public: virtual JsonCell* clone(unsigned long) const;
573 public: virtual void toData(JsonStack&);
574 private: Cell* _cell;
575 private: bool _materializationState;
576 };
577
578 } // End of Hurricane namespace.
579
580
581 INSPECTOR_P_SUPPORT(Hurricane::Cell);
582 INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags);
583 INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
584 INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
585 INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
586 INSPECTOR_P_SUPPORT(Hurricane::Cell::PinMap);
587 INSPECTOR_P_SUPPORT(Hurricane::Cell::SliceMap);
588 INSPECTOR_P_SUPPORT(Hurricane::Cell::MarkerSet);
589 INSPECTOR_PR_SUPPORT(Hurricane::Cell::SlavedsRelation);
590
591
592 #endif // HURRICANE_CELL_H
593
594
595 // ****************************************************************************************************
596 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
597 // ****************************************************************************************************
Hurricane::Cell::isTerminalNetlist
bool isTerminalNetlist() const
Definition: Cell.h:487
Hurricane::Path
Path description (API)
Definition: Path.h:37
Hurricane::Collection
Collection description (API)
Definition: Collection.h:39
Hurricane::Pad
Pad description (API)
Definition: Pad.h:36
Hurricane::Library
Library description (API)
Definition: Library.h:38
Hurricane::Cell::getClockNets
Nets getClockNets() const
Hurricane::Gos
GenericCollection< Go * > Gos
Definition: Gos.h:27
Hurricane::Cell::unmaterialize
void unmaterialize()
Hurricane::Cell::getAbutmentBox
const Box & getAbutmentBox() const
Definition: Cell.h:480
Hurricane::Cell::getNet
Net * getNet(const Name &name) const
Hurricane::Pin
Pin description (API)
Definition: Pin.h:34
Hurricane::Cell::getSlaveInstances
Instances getSlaveInstances() const
Hurricane::Cell::setTerminalNetlist
void setTerminalNetlist(bool isTerminalNetlist)
Definition: Cell.h:505
Hurricane::Relation
Relation description (API)
Definition: Relation.h:33
Hurricane::Cell::getComponentsUnder
Components getComponentsUnder(const Box &area, const Layer::Mask &mask=~0) const
Hurricane::Cell::materialize
void materialize()
Hurricane::JsonObject
Support for JSON export.
Definition: JsonObject.h:83
Hurricane::Name
Name description (API)
Definition: Name.h:35
Hurricane::Cell::getSlices
Slices getSlices(const Layer::Mask &mask=~0) const
Hurricane::DbU::Unit
std::int64_t Unit
Definition: DbU.h:70
Hurricane::Cell::uniquify
void uniquify(unsigned int depth=std::numeric_limits< unsigned int >::max())
Hurricane::Cell
The model (API).
Definition: Cell.h:66
Hurricane::Cell::getOccurrences
Occurrences getOccurrences(unsigned searchDepth=std::numeric_limits< unsigned int >::max()) const
Hurricane::Cell::getSupplyNets
Nets getSupplyNets() const
Hurricane::Cell::getComponents
Components getComponents(const Layer::Mask &mask=~0) const
Hurricane::DBo
DataBase object root class (API).
Definition: DBo.h:47
Hurricane::Layer::Mask
Hurricane::Mask< unsigned long long > Mask
Definition: Layer.h:65
Hurricane::Cell::getExternalNets
Nets getExternalNets() const
Hurricane::Cell::getNets
Nets getNets() const
Definition: Cell.h:439
Hurricane::Cell::getLibrary
Library * getLibrary() const
Definition: Cell.h:410
Hurricane::Cell::getClone
Cell * getClone()
Hurricane::GenericCollection
Generic Collection auto-pointer.
Definition: Collection.h:28
Hurricane::Cell::getName
const Name & getName() const
Definition: Cell.h:412
Hurricane::JsonStack
JSON Parser Stack.
Definition: JsonObject.h:249
Hurricane::Cell::getOccurrencesUnder
Occurrences getOccurrencesUnder(const Box &area, unsigned searchDepth=std::numeric_limits< unsigned int >::max()) const
Hurricane::Cell::getInternalNets
Nets getInternalNets() const
Hurricane::Cell::create
static Cell * create(Library *library, const Name &name)
Hurricane::Cell::setAbutmentBox
void setAbutmentBox(const Box &abutmentBox)
Hurricane::Locator
Locator description (API)
Definition: Locator.h:33
Hurricane::Cells
GenericCollection< Cell * > Cells
Definition: Cells.h:27
Hurricane::Box
Box description (API)
Definition: Box.h:31
Hurricane::Cell::isUnique
bool isUnique() const
Hurricane::Instance
Instance description (API)
Definition: Instance.h:37
Hurricane::Cell::getRubbers
Rubbers getRubbers() const
Hurricane::Rubbers
GenericCollection< Rubber * > Rubbers
Definition: Rubbers.h:27
Hurricane::Layer
Layer description (API)
Definition: Layer.h:52
Hurricane::Cell::isCalledBy
bool isCalledBy(Cell *cell) const
Hurricane::Cell::getRubbersUnder
Rubbers getRubbersUnder(const Box &area) const
Hurricane::Cell::getSlice
Slice * getSlice(const Layer *layer) const
Definition: Cell.h:449
Entity
Hurricane::Slice
Slice description (API)
Definition: Slice.h:38
Hurricane::Pathes
GenericCollection< Path > Pathes
Definition: Pathes.h:34
Hurricane::Cell::setName
void setName(const Name &name)
Hurricane::Cell::getInstance
Instance * getInstance(const Name &name) const
Definition: Cell.h:417
Hurricane::Cell::getTerminalInstanceOccurrences
Occurrences getTerminalInstanceOccurrences() const
Hurricane
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
Hurricane::Cell::getNonTerminalNetlistInstanceOccurrences
Occurrences getNonTerminalNetlistInstanceOccurrences(const Instance *topInstance=NULL) const
Hurricane::QuadTree
QuadTree description (API)
Definition: QuadTree.h:33
Hurricane::Cell::getInstancesUnder
Instances getInstancesUnder(const Box &area, DbU::Unit threshold=0) const
Hurricane::Components
GenericCollection< Component * > Components
Definition: Components.h:27
Hurricane::Net
Net description (API)
Definition: Net.h:48
Hurricane::Occurrences
GenericCollection< Occurrence > Occurrences
Definition: Occurrences.h:40
Hurricane::Cell::getInstances
Instances getInstances() const
Definition: Cell.h:418
Hurricane::Cell::getGlobalNets
Nets getGlobalNets() const
Hurricane::Cell::isUniquifyMaster
bool isUniquifyMaster() const
Hurricane::Cell::isTerminal
bool isTerminal() const
Definition: Cell.h:486
Hurricane::Cell::getTerminalNetlistInstanceOccurrences
Occurrences getTerminalNetlistInstanceOccurrences(const Instance *topInstance=NULL) const
Hurricane::Cell::isUniquified
bool isUniquified() const