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


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