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// 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
534inline Cell::ClonedSet::Locator::Locator ( const Locator& other )
535 : Hurricane::Locator<Cell*>()
536 , _dboLocator(other._dboLocator)
537{ }
538
539inline Cell::ClonedSet::ClonedSet ( const Cell* cell )
540 : Hurricane::Collection<Cell*>()
541 , _cell(cell)
542{ }
543
544inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other )
545 : Hurricane::Collection<Cell*>()
546 , _cell(other._cell)
547{ }
548
549
550inline void Cell::UniquifyRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
551inline void Cell::UniquifyRelation::_setDuplicates ( unsigned int duplicates ) { _duplicates=duplicates; }
552
553
554inline Cell::SlavedsSet::Locator::Locator ( const Locator& other )
555 : Hurricane::Locator<Cell*>()
556 , _dboLocator(other._dboLocator)
557{ }
558
559inline Cell::SlavedsSet::SlavedsSet ( const Cell* cell )
560 : Hurricane::Collection<Cell*>()
561 , _cell(cell)
562{ }
563
564inline Cell::SlavedsSet::SlavedsSet ( const SlavedsSet& other )
565 : Hurricane::Collection<Cell*>()
566 , _cell(other._cell)
567{ }
568
569
570inline void Cell::SlavedsRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
571
572
573class 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
589INSPECTOR_P_SUPPORT(Hurricane::Cell);
590INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags);
591INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
592INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
593INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
594INSPECTOR_P_SUPPORT(Hurricane::Cell::PinMap);
595INSPECTOR_P_SUPPORT(Hurricane::Cell::SliceMap);
596INSPECTOR_P_SUPPORT(Hurricane::Cell::MarkerSet);
597INSPECTOR_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.7 on Fri Sep 27 2024 Return to top of page
Hurricane VLSI Database Copyright © 2000-2020 Bull S.A. All rights reserved