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 // Types
68 // *****
69 
70  public: typedef Entity Inherit;
71  public: typedef map<Name,ExtensionSlice*> ExtensionSliceMap;
72 
73  public: class Flags : public BaseFlags {
74  public:
75  enum Flag { NoFlags = 0
76  , BuildRings = (1 << 1)
77  , BuildClockRings = (1 << 2)
78  , BuildSupplyRings = (1 << 3)
79  , NoClockFlatten = (1 << 4)
80  , WarnOnUnplacedInstances = (1 << 5)
81  , StayOnPlugs = (1 << 6)
82  , MaskRings = BuildRings|BuildClockRings|BuildSupplyRings
83  // Flags set for Observers.
84  , CellAboutToChange = (1 << 10)
85  , CellChanged = (1 << 11)
86  , CellDestroyed = (1 << 12)
87  // Cell states
88  , TerminalNetlist = (1 << 20)
89  , Pad = (1 << 21)
90  , Feed = (1 << 22)
91  , Diode = (1 << 23)
92  , PowerFeed = (1 << 24)
93  , FlattenedNets = (1 << 25)
94  , AbstractedSupply = (1 << 26)
95  , Placed = (1 << 27)
96  , Routed = (1 << 28)
97  , SlavedAb = (1 << 29)
98  , Materialized = (1 << 30)
99  , NoExtractConsistent = (1 << 31)
100  };
101 
102  public:
103  Flags ( uint64_t flags = NoFlags );
104  virtual ~Flags ();
105  virtual std::string _getTypeName () const;
106  virtual std::string _getString () const;
107  };
108 
109  class UniquifyRelation : public Relation {
110  public:
111  static UniquifyRelation* create ( Cell* );
112  static UniquifyRelation* get ( const Cell* );
113  virtual Name getName () const;
114  static Name staticGetName ();
115  Name getUniqueName ();
116  static std::string getTrunkName ( Name name );
117  virtual bool hasJson () const;
118  virtual void toJson ( JsonWriter*, const DBo* ) const;
119  inline void _setOwner ( Cell* );
120  inline void _setDuplicates ( unsigned int );
121  virtual string _getTypeName () const;
122  virtual Record* _getRecord () const;
123  private:
124  static const Name _name;
125  unsigned int _duplicates;
126  private:
127  UniquifyRelation ( Cell* );
128  protected:
129  virtual void _preDestroy ();
130 
131  public:
132  class JsonProperty : public JsonObject {
133  public:
134  static void initialize ();
135  JsonProperty ( unsigned long flags );
136  virtual string getTypeName () const;
137  virtual JsonProperty* clone ( unsigned long ) const;
138  virtual void toData ( JsonStack& );
139  };
140  public:
141  class JsonPropertyRef : public JsonObject {
142  public:
143  static void initialize ();
144  JsonPropertyRef ( unsigned long flags );
145  virtual string getTypeName () const;
146  virtual JsonPropertyRef* clone ( unsigned long ) const;
147  virtual void toData ( JsonStack& );
148  };
149  };
150 
151  class ClonedSet : public Collection<Cell*> {
152  public:
153  // Sub-Class: Locator.
154  class Locator : public Hurricane::Locator<Cell*> {
155  public:
156  Locator ( const Cell* );
157  inline Locator ( const Locator& );
158  virtual Cell* getElement () const;
159  virtual Hurricane::Locator<Cell*>* getClone () const;
160  virtual bool isValid () const;
161  virtual void progress ();
162  virtual string _getString () const;
163  protected:
164  Hurricane::Locator<DBo*>* _dboLocator;
165  };
166 
167  public:
168  inline ClonedSet ( const Cell* cell );
169  inline ClonedSet ( const ClonedSet& );
170  virtual Hurricane::Collection<Cell*>* getClone () const;
171  virtual Hurricane::Locator<Cell*>* getLocator () const;
172  virtual string _getString () const;
173  protected:
174  const Cell* _cell;
175  };
176 
177  class SlavedsRelation : public Relation {
178  public:
179  static SlavedsRelation* create ( Cell* );
180  static SlavedsRelation* get ( const Cell* );
181  virtual Name getName () const;
182  static Name staticGetName ();
183  virtual bool hasJson () const;
184  virtual void toJson ( JsonWriter*, const DBo* ) const;
185  inline void _setOwner ( Cell* );
186  virtual string _getTypeName () const;
187  virtual Record* _getRecord () const;
188  private:
189  static const Name _name;
190  private:
191  SlavedsRelation ( Cell* );
192  protected:
193  virtual void _preDestroy ();
194 
195  public:
196  class JsonProperty : public JsonObject {
197  public:
198  static void initialize ();
199  JsonProperty ( unsigned long flags );
200  virtual string getTypeName () const;
201  virtual JsonProperty* clone ( unsigned long ) const;
202  virtual void toData ( JsonStack& );
203  };
204  public:
205  class JsonPropertyRef : public JsonObject {
206  public:
207  static void initialize ();
208  JsonPropertyRef ( unsigned long flags );
209  virtual string getTypeName () const;
210  virtual JsonPropertyRef* clone ( unsigned long ) const;
211  virtual void toData ( JsonStack& );
212  };
213  };
214 
215  class SlavedsSet : public Collection<Cell*> {
216  public:
217  // Sub-Class: Locator.
218  class Locator : public Hurricane::Locator<Cell*> {
219  public:
220  Locator ( const Cell* );
221  inline Locator ( const Locator& );
222  virtual Cell* getElement () const;
223  virtual Hurricane::Locator<Cell*>* getClone () const;
224  virtual bool isValid () const;
225  virtual void progress ();
226  virtual string _getString () const;
227  protected:
228  Hurricane::Locator<DBo*>* _dboLocator;
229  };
230 
231  public:
232  inline SlavedsSet ( const Cell* cell );
233  inline SlavedsSet ( const SlavedsSet& );
234  virtual Hurricane::Collection<Cell*>* getClone () const;
235  virtual Hurricane::Locator<Cell*>* getLocator () const;
236  virtual string _getString () const;
237  protected:
238  const Cell* _cell;
239  };
240 
241  class InstanceMap : public IntrusiveMap<Name, Instance> {
242  // ****************************************************
243 
244  public: typedef IntrusiveMap<Name, Instance> Inherit;
245 
246  public: InstanceMap();
247 
248  public: virtual Name _getKey(Instance* instance) const;
249  public: virtual unsigned _getHashValue(Name name) const;
250  public: virtual Instance* _getNextElement(Instance* instance) const;
251  public: virtual void _setNextElement(Instance* instance, Instance* nextInstance) const;
252 
253  };
254 
255  public: class SlaveInstanceSet : public IntrusiveSet<Instance> {
256  // ***********************************************************
257 
258  public: typedef IntrusiveSet<Instance> Inherit;
259 
260  public: SlaveInstanceSet();
261 
262  public: virtual unsigned _getHashValue(Instance* slaveInstance) const;
263  public: virtual Instance* _getNextElement(Instance* slaveInstance) const;
264  public: virtual void _setNextElement(Instance* slaveInstance, Instance* nextSlaveInstance) const;
265 
266  };
267 
268  public: class NetMap : public IntrusiveMapConst<Name, Net> {
269  // *********************************************************
270 
271  public: typedef IntrusiveMapConst<Name, Net> Inherit;
272 
273  public: NetMap();
274 
275  public: virtual const Name& _getKey(Net* net) const;
276  public: virtual unsigned _getHashValue(const Name& name) const;
277  public: virtual Net* _getNextElement(Net* net) const;
278  public: virtual void _setNextElement(Net* net, Net* nextNet) const;
279 
280  };
281 
282  class PinMap : public IntrusiveMap<Name, Pin> {
283  // *******************************************
284 
285  public: typedef IntrusiveMap<Name, Pin> Inherit;
286 
287  public: PinMap();
288 
289  public: virtual Name _getKey(Pin* pin) const;
290  public: virtual unsigned _getHashValue(Name name) const;
291  public: virtual Pin* _getNextElement(Pin* pin) const;
292  public: virtual void _setNextElement(Pin* pin, Pin* nextPin) const;
293 
294  };
295 
296  public: class SliceMap : public IntrusiveMap<const Layer*, Slice> {
297  // **************************************************************
298 
299  public: typedef IntrusiveMap<const Layer*, Slice> Inherit;
300 
301  public: SliceMap();
302 
303  public: virtual const Layer* _getKey(Slice* slice) const;
304  public: virtual unsigned _getHashValue(const Layer* layer) const;
305  public: virtual Slice* _getNextElement(Slice* slice) const;
306  public: virtual void _setNextElement(Slice* slice, Slice* nextSlice) const;
307 
308  };
309 
310  public: class MarkerSet : public IntrusiveSet<Marker> {
311  // **************************************************
312 
313  public: typedef IntrusiveSet<Marker> Inherit;
314 
315  public: MarkerSet();
316 
317  public: virtual unsigned _getHashValue(Marker* marker) const;
318  public: virtual Marker* _getNextElement(Marker* marker) const;
319  public: virtual void _setNextElement(Marker* marker, Marker* nextMarker) const;
320 
321  };
322 
323 // Attributes
324 // **********
325 
326  private: Library* _library;
327  private: Name _name;
328  private: Path _shuntedPath;
329  private: InstanceMap _instanceMap;
330  private: QuadTree* _quadTree;
331  private: SlaveInstanceSet _slaveInstanceSet;
332  private: NetMap _netMap;
333  private: PinMap _pinMap;
334  private: SliceMap* _sliceMap;
335  private: ExtensionSliceMap _extensionSlices;
336  private: MarkerSet _markerSet;
337  private: Box _abutmentBox;
338  private: Box _boundingBox;
339  private: Cell* _nextOfLibraryCellMap;
340  private: Cell* _nextOfSymbolCellSet;
341  private: SlaveEntityMap _slaveEntityMap;
342  private: AliasNameSet _netAliasSet;
343  private: Observable _observers;
344  private: Flags _flags;
345 
346 // Constructors
347 // ************
348 
349  protected: Cell(Library* library, const Name& name);
350 
351 // Others
352 // ******
353 
354  protected: virtual void _postCreate();
355 
356  protected: virtual void _preDestroy();
357 
358  public: virtual string _getTypeName() const {return _TName("Cell");};
359  public: virtual string _getString() const;
360  public: virtual Record* _getRecord() const;
361  public: static string getFlagString( uint64_t );
362  public: static Record* getFlagRecord( uint64_t );
363  public: static Slot* getFlagSlot( uint64_t );
364 
365  public: InstanceMap& _getInstanceMap() {return _instanceMap;};
366  public: QuadTree* _getQuadTree() {return _quadTree;};
367  public: SlaveInstanceSet& _getSlaveInstanceSet() {return _slaveInstanceSet;};
368  public: NetMap& _getNetMap() {return _netMap;};
369  public: PinMap& _getPinMap() {return _pinMap;};
370  public: SliceMap* _getSliceMap() {return _sliceMap;};
371  public: ExtensionSliceMap& _getExtensionSliceMap() {return _extensionSlices;};
372  public: MarkerSet& _getMarkerSet() {return _markerSet;};
373  public: Cell* _getNextOfLibraryCellMap() const {return _nextOfLibraryCellMap;};
374  public: Cell* _getNextOfSymbolCellSet() const {return _nextOfSymbolCellSet;};
375  public: AliasNameSet& _getNetAliasSet() { return _netAliasSet; }
376 
377  public: void _setNextOfLibraryCellMap(Cell* cell) {_nextOfLibraryCellMap = cell;};
378  public: void _setNextOfSymbolCellSet(Cell* cell) {_nextOfSymbolCellSet = cell;};
379 
380  public: void _addNetAlias(NetAliasName* alias) { _netAliasSet.insert(alias); }
381  public: void _removeNetAlias(NetAliasName* alias) { _netAliasSet.erase(alias); }
382 
383  public: void _fit(const Box& box);
384  public: void _unfit(const Box& box);
385 
386  public: void _addSlaveEntity(Entity* entity, Entity* slaveEntity);
387  public: void _removeSlaveEntity(Entity* entity, Entity* slaveEntity);
388  public: void _getSlaveEntities(SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
389  public: void _getSlaveEntities(Entity* entity, SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
390  public: void _insertSlice(ExtensionSlice*);
391  public: void _removeSlice(ExtensionSlice*);
392  public: void _slaveAbutmentBox(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, bool useAlias=true) 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 = Layer::Mask::FFFF) 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 = Layer::Mask::FFFF ) const; public: Components getComponentsUnder(const Box& area, const Layer::Mask& mask = Layer::Mask::FFFF) const;
460  public: Occurrences getOccurrences(unsigned searchDepth = std::numeric_limits<unsigned int>::max()) const;
461  public: Occurrences getOccurrencesUnder(const Box& area, unsigned searchDepth = std::numeric_limits<unsigned int>::max(), DbU::Unit threshold=0) const;
463  public: Occurrences getTerminalInstanceOccurrencesUnder(const Box& area) const;
464  public: Occurrences getTerminalNetlistInstanceOccurrences( const Instance* topInstance=NULL ) const;
465  public: Occurrences getTerminalNetlistInstanceOccurrencesUnder(const Box& area) const;
466  public: Occurrences getNonTerminalNetlistInstanceOccurrences( const Instance* topInstance=NULL ) const;
467  public: Occurrences getComponentOccurrences(const Layer::Mask& mask = Layer::Mask::FFFF) const;
468  public: Occurrences getComponentOccurrencesUnder(const Box& area, const Layer::Mask& mask = Layer::Mask::FFFF) const;
469  public: Occurrences getHyperNetRootNetOccurrences() const;
470  public: ExtensionSlice::Mask getExtensionSliceMask ( const Name& name ) const;
471  public: Gos getExtensionGos ( const Name& name ) const;
472  public: Gos getExtensionGos ( ExtensionSlice::Mask mask = ~0 ) const;
473  public: Gos getExtensionGosUnder ( const Box& area, const Name& name ) const;
474  public: Gos getExtensionGosUnder ( const Box& area, ExtensionSlice::Mask mask = ~0 ) const;
475  public: Cells getSubCells() const;
476  public: Cells getClonedCells() const;
477  public: Cell* getCloneMaster() const;
478  public: Pathes getRecursiveSlavePathes() const;
479  public: const Box& getAbutmentBox() const {return _abutmentBox;};
480 
481 // Predicates
482 // **********
483 
484  public: bool isCalledBy(Cell* cell) const;
485  public: bool isTerminal() const {return _instanceMap.isEmpty();};
486  public: bool isTerminalNetlist() const {return _flags.isset(Flags::TerminalNetlist);};
487  public: bool isUnique() const;
488  public: bool isUniquified() const;
489  public: bool isUniquifyMaster() const;
490  public: bool isPad() const {return _flags.isset(Flags::Pad);};
491  public: bool isFeed() const {return _flags.isset(Flags::Feed);};
492  public: bool isDiode() const {return _flags.isset(Flags::Diode);};
493  public: bool isPowerFeed() const {return _flags.isset(Flags::PowerFeed);};
494  public: bool isFlattenedNets() const {return _flags.isset(Flags::FlattenedNets);};
495  public: bool isAbstractedSupply() const {return _flags.isset(Flags::AbstractedSupply);};
496  public: bool isPlaced() const {return _flags.isset(Flags::Placed);};
497  public: bool isRouted() const {return _flags.isset(Flags::Routed);};
498  public: bool isExtractConsistent() const {return not _flags.isset(Flags::NoExtractConsistent);};
499  public: bool isNetAlias(const Name& name) const;
500 
501 // Updators
502 // ********
503 
504  public: void setName(const Name& name);
505  public: void setAbutmentBox(const Box& abutmentBox);
506  public: void slaveAbutmentBox(Cell*);
507  public: void unslaveAbutmentBox(Cell*);
508  public: void setTerminalNetlist(bool state) { _flags.set(Flags::TerminalNetlist,state); };
509  public: void setPad(bool state) {_flags.set(Flags::Pad,state);};
510  public: void setFeed(bool state) {_flags.set(Flags::Feed,state);};
511  public: void setDiode(bool state) {_flags.set(Flags::Diode,state);};
512  public: void setPowerFeed(bool state) {_flags.set(Flags::PowerFeed,state);};
513  public: void setRouted(bool state) {_flags.set(Flags::Routed,state);};
514  public: void setAbstractedSupply(bool state) { _flags.set(Flags::AbstractedSupply,state); };
515  public: void setNoExtractConsistent(bool state) { _flags.set(Flags::NoExtractConsistent,state); };
516  public: void flattenNets(uint64_t flags=Flags::BuildRings);
517  public: void flattenNets(const Instance* instance, uint64_t flags=Flags::BuildRings);
518  public: void flattenNets(const Instance* instance, const std::set<std::string>& excludeds, uint64_t flags=Flags::BuildRings);
519  public: void createRoutingPadRings(uint64_t flags=Flags::BuildRings);
520  public: void setFlags(uint64_t flags) { _flags |= flags; }
521  public: void resetFlags(uint64_t flags) { _flags &= ~flags; }
522  public: bool updatePlacedFlag();
523  public: void materialize();
524  public: void unmaterialize();
525  public: Cell* getClone();
526  public: void uniquify(unsigned int depth=std::numeric_limits<unsigned int>::max());
527  public: void addObserver(BaseObserver*);
528  public: void removeObserver(BaseObserver*);
529  public: void notify(unsigned flags);
530  public: void destroyPhysical();
531 };
532 
533 
534 inline Cell::ClonedSet::Locator::Locator ( const Locator& other )
535  : Hurricane::Locator<Cell*>()
536  , _dboLocator(other._dboLocator)
537 { }
538 
539 inline Cell::ClonedSet::ClonedSet ( const Cell* cell )
540  : Hurricane::Collection<Cell*>()
541  , _cell(cell)
542 { }
543 
544 inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other )
545  : Hurricane::Collection<Cell*>()
546  , _cell(other._cell)
547 { }
548 
549 
550 inline void Cell::UniquifyRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
551 inline void Cell::UniquifyRelation::_setDuplicates ( unsigned int duplicates ) { _duplicates=duplicates; }
552 
553 
554 inline Cell::SlavedsSet::Locator::Locator ( const Locator& other )
555  : Hurricane::Locator<Cell*>()
556  , _dboLocator(other._dboLocator)
557 { }
558 
559 inline Cell::SlavedsSet::SlavedsSet ( const Cell* cell )
560  : Hurricane::Collection<Cell*>()
561  , _cell(cell)
562 { }
563 
564 inline Cell::SlavedsSet::SlavedsSet ( const SlavedsSet& other )
565  : Hurricane::Collection<Cell*>()
566  , _cell(other._cell)
567 { }
568 
569 
570 inline void Cell::SlavedsRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
571 
572 
573 class JsonCell : public JsonEntity {
574 // *********************************
575 
576  public: static void initialize();
577  public: JsonCell(unsigned long flags);
578  public: virtual ~JsonCell();
579  public: virtual string getTypeName() const;
580  public: virtual JsonCell* clone(unsigned long) const;
581  public: virtual void toData(JsonStack&);
582  private: Cell* _cell;
583  private: bool _materializationState;
584 };
585 
586 } // End of Hurricane namespace.
587 
588 
589 INSPECTOR_P_SUPPORT(Hurricane::Cell);
590 INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags);
591 INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
592 INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
593 INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
594 INSPECTOR_P_SUPPORT(Hurricane::Cell::PinMap);
595 INSPECTOR_P_SUPPORT(Hurricane::Cell::SliceMap);
596 INSPECTOR_P_SUPPORT(Hurricane::Cell::MarkerSet);
597 INSPECTOR_PR_SUPPORT(Hurricane::Cell::SlavedsRelation);
598 
599 
600 // ****************************************************************************************************
601 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
602 // ****************************************************************************************************
Box description (API)
Definition: Box.h:29
The model (API).
Definition: Cell.h:64
const Name & getName() const
Definition: Cell.h:412
bool isUniquifyMaster() const
Cell * getClone()
Nets getInternalNets() const
const Box & getAbutmentBox() const
Definition: Cell.h:479
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:508
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:486
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:439
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:410
Instances getInstances() const
Definition: Cell.h:418
bool isTerminal() const
Definition: Cell.h:485
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:417
Slice * getSlice(const Layer *layer) const
Definition: Cell.h:449
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:50
Hurricane::Mask< boost::multiprecision::uint128_t > Mask
Definition: Layer.h:53
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 Wed Nov 20 2024 Return to top of page
Hurricane VLSI Database Copyright © 2000-2020 Bull S.A. All rights reserved