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 
51 namespace Hurricane {
52 
53 class Library;
54 class BasicLayer;
55 
56 typedef multimap<Entity*,Entity*> SlaveEntityMap;
57 
58 
59 
60 // ****************************************************************************************************
61 // Cell declaration
62 // ****************************************************************************************************
63 
64 class 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 
541 inline const FastRTTI& Cell::fastRTTI () { return _fastRTTI; }
542 
543 
544 inline Cell::ClonedSet::Locator::Locator ( const Locator& other )
545  : Hurricane::Locator<Cell*>()
546  , _dboLocator(other._dboLocator)
547 { }
548 
549 inline Cell::ClonedSet::ClonedSet ( const Cell* cell )
550  : Hurricane::Collection<Cell*>()
551  , _cell(cell)
552 { }
553 
554 inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other )
555  : Hurricane::Collection<Cell*>()
556  , _cell(other._cell)
557 { }
558 
559 
560 inline void Cell::UniquifyRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
561 inline void Cell::UniquifyRelation::_setDuplicates ( unsigned int duplicates ) { _duplicates=duplicates; }
562 
563 
564 inline Cell::SlavedsSet::Locator::Locator ( const Locator& other )
565  : Hurricane::Locator<Cell*>()
566  , _dboLocator(other._dboLocator)
567 { }
568 
569 inline Cell::SlavedsSet::SlavedsSet ( const Cell* cell )
570  : Hurricane::Collection<Cell*>()
571  , _cell(cell)
572 { }
573 
574 inline Cell::SlavedsSet::SlavedsSet ( const SlavedsSet& other )
575  : Hurricane::Collection<Cell*>()
576  , _cell(other._cell)
577 { }
578 
579 
580 inline void Cell::SlavedsRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
581 
582 
583 class 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 
599 INSPECTOR_P_SUPPORT(Hurricane::Cell);
600 INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags);
601 INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
602 INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
603 INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
604 INSPECTOR_P_SUPPORT(Hurricane::Cell::PinMap);
605 INSPECTOR_P_SUPPORT(Hurricane::Cell::SliceMap);
606 INSPECTOR_P_SUPPORT(Hurricane::Cell::MarkerSet);
607 INSPECTOR_PR_SUPPORT(Hurricane::Cell::SlavedsRelation);
608 
609 
610 // ****************************************************************************************************
611 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
612 // ****************************************************************************************************
Box description (API)
Definition: Box.h:30
The model (API).
Definition: Cell.h:64
const Name & getName() const
Definition: Cell.h:418
bool isUniquifyMaster() const
Cell * getClone()
Nets getInternalNets() const
const Box & getAbutmentBox() const
Definition: Cell.h:485
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)
static Cell * create(Library *library, 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
Occurrenceable objects root class (API).
Definition: Entity.h:37
Generic Collection auto-pointer.
Definition: Collection.h:235
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


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