Merge branch 'devel_anabatic' of ssh://bop-t/users/largo2/git/coriolis into devel_anabatic
This commit is contained in:
commit
e4575cf8c2
|
@ -41,6 +41,8 @@ namespace Anabatic {
|
|||
const BaseFlags Flags::Saturated = (1L << 11);
|
||||
const BaseFlags Flags::StdCellRow = (1L << 12);
|
||||
const BaseFlags Flags::ChannelRow = (1L << 13);
|
||||
const BaseFlags Flags::HRailGCell = (1L << 14);
|
||||
const BaseFlags Flags::VRailGCell = (1L << 15);
|
||||
const BaseFlags Flags::IllimitedCapacity = (1L << 5);
|
||||
// Flags for Anabatic objects states only.
|
||||
const BaseFlags Flags::DemoMode = (1L << 5);
|
||||
|
@ -66,12 +68,16 @@ namespace Anabatic {
|
|||
| MatrixGCell
|
||||
| IoPadGCell
|
||||
| StdCellRow
|
||||
| ChannelRow;
|
||||
| ChannelRow
|
||||
| HRailGCell
|
||||
| VRailGCell;
|
||||
const BaseFlags Flags::RowGCellMask = StdCellRow|ChannelRow;
|
||||
const BaseFlags Flags::AnalogGCellMask = DeviceGCell
|
||||
| HChannelGCell
|
||||
| VChannelGCell
|
||||
| StrutGCell;
|
||||
| StrutGCell
|
||||
| HRailGCell
|
||||
| VRailGCell;
|
||||
// Flags for functions arguments only.
|
||||
const BaseFlags Flags::Create = (1L << 5);
|
||||
const BaseFlags Flags::WithPerpands = (1L << 6);
|
||||
|
@ -168,6 +174,8 @@ namespace Anabatic {
|
|||
s += (_flags & (uint64_t)DeviceGCell ) ? 'd' : '-';
|
||||
s += (_flags & (uint64_t)HChannelGCell) ? 'c' : '-';
|
||||
s += (_flags & (uint64_t)VChannelGCell) ? 'c' : '-';
|
||||
s += (_flags & (uint64_t)HRailGCell ) ? 'r' : '-';
|
||||
s += (_flags & (uint64_t)VRailGCell ) ? 'r' : '-';
|
||||
s += (_flags & (uint64_t)StrutGCell ) ? 's' : '-';
|
||||
s += (_flags & (uint64_t)MatrixGCell ) ? 'm' : '-';
|
||||
s += (_flags & (uint64_t)StdCellRow ) ? 'S' : '-';
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -74,7 +74,7 @@ namespace Anabatic {
|
|||
if (_stateFlags.contains(Flags::EastSide)) {
|
||||
if ( (_iedge < _gcell->getEastEdges().size())
|
||||
and _filterFlags.contains(Flags::EastSide)) break;
|
||||
// cdebug_log(110,0) << "Switching to North side." << endl;
|
||||
//cdebug_log(110,0) << "Switching to North side." << endl;
|
||||
_stateFlags = Flags::NorthSide;
|
||||
_iedge = 0;
|
||||
// cdebug_log(110,0) << this << endl;
|
||||
|
@ -83,7 +83,7 @@ namespace Anabatic {
|
|||
if (_stateFlags.contains(Flags::NorthSide)) {
|
||||
if ( (_iedge < _gcell->getNorthEdges().size())
|
||||
and _filterFlags.contains(Flags::NorthSide)) break;
|
||||
// cdebug_log(110,0) << "Switching to West side." << endl;
|
||||
//cdebug_log(110,0) << "Switching to West side." << endl;
|
||||
_stateFlags = Flags::WestSide;
|
||||
_iedge = 0;
|
||||
// cdebug_log(110,0) << this << endl;
|
||||
|
@ -92,7 +92,7 @@ namespace Anabatic {
|
|||
if (_stateFlags.contains(Flags::WestSide)) {
|
||||
if ( (_iedge < _gcell->getWestEdges().size())
|
||||
and _filterFlags.contains(Flags::WestSide)) break;
|
||||
// cdebug_log(110,0) << "Switching to South side." << endl;
|
||||
//cdebug_log(110,0) << "Switching to South side." << endl;
|
||||
_stateFlags = Flags::SouthSide;
|
||||
_iedge = 0;
|
||||
continue;
|
||||
|
@ -100,7 +100,7 @@ namespace Anabatic {
|
|||
if (_stateFlags.contains(Flags::SouthSide)) {
|
||||
if ( (_iedge < _gcell->getSouthEdges().size())
|
||||
and _filterFlags.contains(Flags::SouthSide)) break;
|
||||
// cdebug_log(110,0) << "All edges done." << endl;
|
||||
//cdebug_log(110,0) << "All edges done." << endl;
|
||||
_stateFlags = 0;
|
||||
_iedge = 0;
|
||||
break;;
|
||||
|
|
|
@ -505,6 +505,34 @@ namespace Anabatic {
|
|||
}
|
||||
|
||||
|
||||
GCell* GCell::getEastNMatrix() const
|
||||
{
|
||||
if (!this->getEast()->isMatrix()) return this->getEast();
|
||||
else {
|
||||
GCell* gcell = this->getEast();
|
||||
while(gcell->getEast()){
|
||||
if (!gcell->getEast()->isMatrix()) break;
|
||||
else gcell = gcell->getEast();
|
||||
}
|
||||
return gcell->getEast();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GCell* GCell::getNorthNMatrix() const
|
||||
{
|
||||
if (!this->getNorth()->isMatrix()) return this->getNorth();
|
||||
else {
|
||||
GCell* gcell = this->getNorth();
|
||||
while(gcell->getNorth()){
|
||||
if (!gcell->getNorth()->isMatrix()) break;
|
||||
else gcell = gcell->getNorth();
|
||||
}
|
||||
return gcell->getNorth();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GCell* GCell::getWest ( DbU::Unit y ) const
|
||||
{
|
||||
for ( Edge* edge : _westEdges ) {
|
||||
|
@ -718,7 +746,8 @@ namespace Anabatic {
|
|||
|
||||
bool GCell::doGrid ()
|
||||
{
|
||||
getAnabatic()->openSession();
|
||||
bool openSession = Session::isOpen();
|
||||
if (not openSession) getAnabatic()->openSession();
|
||||
|
||||
DbU::Unit side = Session::getSliceHeight();
|
||||
Interval hspan = getSide( Flags::Horizontal );
|
||||
|
@ -776,7 +805,7 @@ namespace Anabatic {
|
|||
// }
|
||||
//}
|
||||
|
||||
Session::close();
|
||||
if (not openSession) Session::close();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -921,7 +950,7 @@ namespace Anabatic {
|
|||
vertical->setX( position.getX() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (not contact->getAnchor()) contact->setPosition( position );
|
||||
}
|
||||
|
||||
|
@ -1702,6 +1731,12 @@ namespace Anabatic {
|
|||
string s = Super::_getString();
|
||||
s.insert( s.size()-1, " "+getString(getBoundingBox()) );
|
||||
s.insert( s.size()-1, " "+getString(_flags) );
|
||||
/* string s = "<GCell at(" + DbU::getValueString(getXMin())
|
||||
+ "-" + DbU::getValueString(getYMin())
|
||||
+ "-" + DbU::getValueString(getXMax())
|
||||
+ "-" + DbU::getValueString(getYMax())
|
||||
+ "-" + DbU::getValueString(getHeight())
|
||||
+ "-" + DbU::getValueString(getWidth()) + ")";*/
|
||||
return s;
|
||||
}
|
||||
|
||||
|
|
|
@ -758,6 +758,8 @@ namespace {
|
|||
AutoContact* _doVChannel ();
|
||||
AutoContact* _doStrut ();
|
||||
AutoContact* _doDevice ();
|
||||
AutoContact* _doHRail ();
|
||||
AutoContact* _doVRail ();
|
||||
void _doIoPad ();
|
||||
|
||||
unsigned int getNumberGlobals ();
|
||||
|
@ -1232,6 +1234,8 @@ namespace {
|
|||
if (_gcell->isDevice ()) targetContact = _doDevice ();
|
||||
else if (_gcell->isHChannel()) targetContact = _doHChannel();
|
||||
else if (_gcell->isVChannel()) targetContact = _doVChannel();
|
||||
else if (_gcell->isHRail ()) targetContact = _doHRail();
|
||||
else if (_gcell->isVRail ()) targetContact = _doVRail();
|
||||
else if (_gcell->isStrut ()) targetContact = _doStrut ();
|
||||
else if (_gcell->isIoPad ()) _doIoPad();
|
||||
else
|
||||
|
@ -2971,6 +2975,100 @@ namespace {
|
|||
return targetContact;
|
||||
}
|
||||
|
||||
|
||||
AutoContact* GCellTopology::_doHRail ()
|
||||
{
|
||||
cdebug_log(145,1) << "void GCellTopology::_doHRail ()" << _gcell << endl;
|
||||
cdebug_log(145,0) << "FromHook: " << _fromHook << endl;
|
||||
cdebug_log(145,0) << "North : " << north() << endl;
|
||||
cdebug_log(145,0) << "East : " << east() << endl;
|
||||
cdebug_log(145,0) << "South : " << south() << endl;
|
||||
cdebug_log(145,0) << "West : " << west() << endl;
|
||||
cdebug_log(145,0) << "_routingPads.size(): " << _routingPads.size() << endl;
|
||||
|
||||
RoutingPad* rpNE = NULL;
|
||||
RoutingPad* rpSW = NULL;
|
||||
_southWestContact = NULL;
|
||||
if (_routingPads.size() == 1){
|
||||
rpNE = rpSW = _routingPads[0];
|
||||
} else {
|
||||
cdebug_log(145,0) << "Case _routingPads.size() != 1 "<< endl;
|
||||
throw Error( "GCellTopology::_doHRail() Unexpected case.\n"
|
||||
" On: %s."
|
||||
, getString(_gcell).c_str() );
|
||||
}
|
||||
cdebug_log(145,0) << "rp: " << _routingPads[0] << endl;
|
||||
AutoContact* ac = doRp_AccessAnalog( _gcell, rpNE, NoFlags );
|
||||
if (east()) {
|
||||
cdebug_log(145,0) << "East" << endl;
|
||||
push( east(), ac, SouthWest );
|
||||
}
|
||||
if (west()) {
|
||||
cdebug_log(145,0) << "West" << endl;
|
||||
push( west(), ac, SouthWest );
|
||||
}
|
||||
if (south()) {
|
||||
cdebug_log(145,0) << "South" << endl;
|
||||
push( south(), ac, SouthWest );
|
||||
}
|
||||
if (north()){
|
||||
cdebug_log(145,0) << "North" << endl;
|
||||
push( north(), ac, SouthWest );
|
||||
}
|
||||
|
||||
cdebug_log(145,0) << "doHRail done" << endl;
|
||||
cdebug_tabw(145,-1);
|
||||
|
||||
return _southWestContact;
|
||||
}
|
||||
|
||||
|
||||
AutoContact* GCellTopology::_doVRail ()
|
||||
{
|
||||
cdebug_log(145,1) << "void GCellTopology::_doVRail ()" << _gcell << endl;
|
||||
cdebug_log(145,0) << "FromHook: " << _fromHook << endl;
|
||||
cdebug_log(145,0) << "North : " << north() << endl;
|
||||
cdebug_log(145,0) << "East : " << east() << endl;
|
||||
cdebug_log(145,0) << "South : " << south() << endl;
|
||||
cdebug_log(145,0) << "West : " << west() << endl;
|
||||
cdebug_log(145,0) << "_routingPads.size(): " << _routingPads.size() << endl;
|
||||
|
||||
RoutingPad* rpNE = NULL;
|
||||
RoutingPad* rpSW = NULL;
|
||||
_southWestContact = NULL;
|
||||
if (_routingPads.size() == 1){
|
||||
rpNE = rpSW = _routingPads[0];
|
||||
} else {
|
||||
cdebug_log(145,0) << "Case _routingPads.size() != 1 "<< endl;
|
||||
throw Error( "GCellTopology::_doVRail() Unexpected case.\n"
|
||||
" On: %s."
|
||||
, getString(_gcell).c_str() );
|
||||
}
|
||||
cdebug_log(145,0) << "rp: " << _routingPads[0] << endl;
|
||||
AutoContact* ac = doRp_AccessAnalog( _gcell, rpNE, NoFlags );
|
||||
if (east()) {
|
||||
cdebug_log(145,0) << "East" << endl;
|
||||
push( east(), ac, SouthWest );
|
||||
}
|
||||
if (west()) {
|
||||
cdebug_log(145,0) << "West" << endl;
|
||||
push( west(), ac, SouthWest );
|
||||
}
|
||||
if (south()) {
|
||||
cdebug_log(145,0) << "South" << endl;
|
||||
push( south(), ac, SouthWest );
|
||||
}
|
||||
if (north()){
|
||||
cdebug_log(145,0) << "North" << endl;
|
||||
push( north(), ac, SouthWest );
|
||||
}
|
||||
|
||||
cdebug_log(145,0) << "doVRail done" << endl;
|
||||
cdebug_tabw(145,-1);
|
||||
|
||||
return _southWestContact;
|
||||
}
|
||||
|
||||
|
||||
unsigned int GCellTopology::getNumberGlobals ()
|
||||
{
|
||||
|
@ -3438,7 +3536,7 @@ namespace Anabatic {
|
|||
_loadNetGlobalRouting( net );
|
||||
Session::revalidate();
|
||||
DebugSession::close();
|
||||
}
|
||||
}
|
||||
}
|
||||
AutoSegment::setAnalogMode( false );
|
||||
|
||||
|
@ -3500,7 +3598,8 @@ namespace Anabatic {
|
|||
forEach ( RoutingPad*, startRp, routingPads ) {
|
||||
bool segmentFound = false;
|
||||
|
||||
cdebug_log(145,0) << "startRp: " << startRp << endl;
|
||||
cdebug_log(145,0) << "startRp : " << startRp << endl;
|
||||
cdebug_log(145,0) << "startHook: " << startHook << endl;
|
||||
forEach ( Hook*, ihook, startRp->getBodyHook()->getHooks() ) {
|
||||
cdebug_log(145,0) << "Component " << ihook->getComponent() << endl;
|
||||
Segment* segment = dynamic_cast<Segment*>( ihook->getComponent() );
|
||||
|
|
|
@ -41,6 +41,8 @@ namespace Anabatic {
|
|||
static const BaseFlags Saturated ; // = (1 << 11);
|
||||
static const BaseFlags StdCellRow ; // = (1 << 12);
|
||||
static const BaseFlags ChannelRow ; // = (1 << 13);
|
||||
static const BaseFlags HRailGCell ; // = (1 << 14);
|
||||
static const BaseFlags VRailGCell ; // = (1 << 15);
|
||||
// Flags for Edge objects states only.
|
||||
static const BaseFlags IllimitedCapacity ; // = (1 << 5);
|
||||
// Flags for Anabatic objects states only.
|
||||
|
@ -60,9 +62,9 @@ namespace Anabatic {
|
|||
static const BaseFlags EndsMask ; // = Source|Target;
|
||||
static const BaseFlags DirectionMask ; // = Horizontal|Vertical;
|
||||
static const BaseFlags DestroyMask ; // = DestroyGCell|DestroyBaseContact|DestroyBaseSegment;
|
||||
static const BaseFlags GCellTypeMask ; // = DeviceGCell|HChannelGCell|VChannelGCell|StrutGCell|MatrixGCell|IoPadGCell;
|
||||
static const BaseFlags GCellTypeMask ; // = DeviceGCell|HChannelGCell|VChannelGCell|StrutGCell|MatrixGCell|IoPadGCell|HRailGCell|VRailGCell;
|
||||
static const BaseFlags RowGCellMask ; // = StdCellRow|ChannelRow;
|
||||
static const BaseFlags AnalogGCellMask ; // = DeviceGCell|HChannelGCell|VChannelGCell|StrutGCell;
|
||||
static const BaseFlags AnalogGCellMask ; // = DeviceGCell|HChannelGCell|VChannelGCell|StrutGCell|HRailGCell|VRailGCell;
|
||||
// Flags for functions arguments only.
|
||||
static const BaseFlags Create ; // = (1 << 5);
|
||||
static const BaseFlags WithPerpands ;
|
||||
|
|
|
@ -44,16 +44,17 @@ namespace Anabatic {
|
|||
class IntervalC
|
||||
{
|
||||
public:
|
||||
enum iFlag { None = 0
|
||||
, iHorizontal = (1<<0)
|
||||
, iVertical = (1<<1)
|
||||
, iSet = (1<<2)
|
||||
enum iFlag { None = 0
|
||||
, iFHorizontal = (1<<0)
|
||||
, iFVertical = (1<<1)
|
||||
, iSet = (1<<2)
|
||||
};
|
||||
|
||||
public:
|
||||
IntervalC();
|
||||
IntervalC(const IntervalC&);
|
||||
IntervalC(IntervalC&);
|
||||
IntervalC( DbU::Unit, DbU::Unit, DbU::Unit );
|
||||
~IntervalC();
|
||||
void set ( DbU::Unit, DbU::Unit, DbU::Unit );
|
||||
void setRange ( DbU::Unit, DbU::Unit );
|
||||
|
@ -83,8 +84,8 @@ namespace Anabatic {
|
|||
DbU::Unit _axis;
|
||||
};
|
||||
|
||||
inline void IntervalC::setAsH () { _flags = ((_flags & ~(0x3)) | iHorizontal); }
|
||||
inline void IntervalC::setAsV () { _flags = ((_flags & ~(0x3)) | iVertical ); }
|
||||
inline void IntervalC::setAsH () { _flags = ((_flags & ~(0x3)) | iFHorizontal); }
|
||||
inline void IntervalC::setAsV () { _flags = ((_flags & ~(0x3)) | iFVertical ); }
|
||||
inline void IntervalC::setAxis ( DbU::Unit axis ) { _axis = axis; }
|
||||
inline DbU::Unit IntervalC::getAxis () const { return _axis; }
|
||||
inline DbU::Unit IntervalC::getCenter() const { return getMin()+getMax(); }
|
||||
|
@ -92,8 +93,8 @@ namespace Anabatic {
|
|||
inline DbU::Unit IntervalC::getMax () const { return _max; }
|
||||
inline void IntervalC::setiSet () { _flags |= iSet; }
|
||||
inline bool IntervalC::isiSet () const { return _flags & iSet; }
|
||||
inline bool IntervalC::isH () const { return _flags & iHorizontal; }
|
||||
inline bool IntervalC::isV () const { return _flags & iVertical ; }
|
||||
inline bool IntervalC::isH () const { return _flags & iFHorizontal; }
|
||||
inline bool IntervalC::isV () const { return _flags & iFVertical ; }
|
||||
inline void IntervalC::setFlags ( Flags flags ) { _flags = flags; }
|
||||
inline Flags IntervalC::getFlags () const { return _flags; }
|
||||
|
||||
|
@ -213,7 +214,7 @@ namespace Anabatic {
|
|||
inline int getConnexId () const;
|
||||
inline int getDegree () const;
|
||||
inline int getRpCount () const;
|
||||
inline Edge* getFrom () const;
|
||||
Edge* getFrom () const;
|
||||
inline Vertex* getPredecessor () const;
|
||||
inline void setDistance ( DbU::Unit );
|
||||
inline void setStamp ( int );
|
||||
|
@ -239,8 +240,8 @@ namespace Anabatic {
|
|||
inline bool isWRestricted () const;
|
||||
inline bool hasRestrictions() const;
|
||||
|
||||
inline void setRestricted ();
|
||||
inline void clearRestriction ();
|
||||
void setRestricted ();
|
||||
void clearRestriction ();
|
||||
inline void setNRestricted ();
|
||||
inline void setSRestricted ();
|
||||
inline void setERestricted ();
|
||||
|
@ -266,7 +267,7 @@ namespace Anabatic {
|
|||
Point getNextPathPoint ( Point, const Vertex* ) const;
|
||||
//////////////////////////////////////// GRDATA
|
||||
void setIntervals ( Vertex* );
|
||||
|
||||
inline bool hasAData () const;
|
||||
bool isiSet () const;
|
||||
DbU::Unit getIAxis () const;
|
||||
DbU::Unit getIMax () const;
|
||||
|
@ -281,7 +282,6 @@ namespace Anabatic {
|
|||
void clearFrom2 ();
|
||||
Edge* getFrom2 () const;
|
||||
void setFrom2 ( Edge* );
|
||||
void createIntervFrom2 ();
|
||||
DbU::Unit getPIMax2 () const;
|
||||
DbU::Unit getPIMin2 () const;
|
||||
DbU::Unit getPIAxis2 () const;
|
||||
|
@ -346,7 +346,7 @@ namespace Anabatic {
|
|||
inline int Vertex::getBranchId () const { return hasValidStamp() ? _branchId : 0; }
|
||||
inline int Vertex::getDegree () const { return hasValidStamp() ? _degree : 0; }
|
||||
inline int Vertex::getRpCount () const { return hasValidStamp() ? _rpCount : 0; }
|
||||
inline Edge* Vertex::getFrom () const { return _from; }
|
||||
//inline Edge* Vertex::getFrom () const { return _from; }
|
||||
inline void Vertex::setDistance ( DbU::Unit distance ) { _distance=distance; }
|
||||
inline void Vertex::setFrom ( Edge* from ) { _from=from; }
|
||||
inline void Vertex::setStamp ( int stamp ) { _stamp=stamp; }
|
||||
|
@ -377,8 +377,9 @@ namespace Anabatic {
|
|||
inline bool Vertex::isWRestricted () const { return (_flags & WRestricted); }
|
||||
inline bool Vertex::hasRestrictions () const { return ( isNRestricted()||isSRestricted()||isERestricted()||isWRestricted()) ; }
|
||||
|
||||
inline void Vertex::setRestricted () { _flags |= 0xF; }
|
||||
inline void Vertex::clearRestriction () { _flags &= ~(0xF); }
|
||||
inline bool Vertex::hasAData () const { return (_adata !=NULL)? true : false; }
|
||||
//inline void Vertex::setRestricted () { _flags |= 0xF; }
|
||||
//inline void Vertex::clearRestriction () { _flags &= ~(0xF); }
|
||||
inline void Vertex::setNRestricted () { _flags |= NRestricted; }
|
||||
inline void Vertex::setSRestricted () { _flags |= SRestricted; }
|
||||
inline void Vertex::setERestricted () { _flags |= ERestricted; }
|
||||
|
@ -522,7 +523,7 @@ namespace Anabatic {
|
|||
void setAxisTargets ();
|
||||
void unsetAxisTargets ();
|
||||
|
||||
bool _attachSymContactsHook ( RoutingPad* );
|
||||
bool _attachSymContactsHook ( RoutingPad* );
|
||||
void _limitSymSearchArea ( RoutingPad* rp );
|
||||
void _setSourcesGRAData ( Vertex*, RoutingPad*);
|
||||
bool _checkFrom2 ( Edge*, Vertex* );
|
||||
|
|
|
@ -143,6 +143,8 @@ namespace Anabatic {
|
|||
inline bool isMatrix () const;
|
||||
inline bool isRow () const;
|
||||
inline bool isIoPad () const;
|
||||
inline bool isHRail () const;
|
||||
inline bool isVRail () const;
|
||||
inline bool isStdCellRow () const;
|
||||
inline bool isChannelRow () const;
|
||||
bool isWest ( GCell* ) const;
|
||||
|
@ -176,6 +178,9 @@ namespace Anabatic {
|
|||
inline GCell* getSouth () const;
|
||||
inline GCell* getNorth () const;
|
||||
|
||||
GCell* getEastNMatrix () const;
|
||||
GCell* getNorthNMatrix () const;
|
||||
|
||||
inline Edge* getWestEdge () const;
|
||||
inline Edge* getEastEdge () const;
|
||||
inline Edge* getSouthEdge () const;
|
||||
|
@ -323,6 +328,8 @@ namespace Anabatic {
|
|||
inline bool GCell::isMatrix () const { return _flags & Flags::MatrixGCell; }
|
||||
inline bool GCell::isRow () const { return _flags & Flags::RowGCellMask; }
|
||||
inline bool GCell::isIoPad () const { return _flags & Flags::IoPadGCell; }
|
||||
inline bool GCell::isHRail () const { return _flags & Flags::HRailGCell; }
|
||||
inline bool GCell::isVRail () const { return _flags & Flags::VRailGCell; }
|
||||
inline bool GCell::isStdCellRow () const { return _flags & Flags::StdCellRow; }
|
||||
inline bool GCell::isChannelRow () const { return _flags & Flags::ChannelRow; }
|
||||
inline bool GCell::isSaturated () const { return _flags & Flags::Saturated; }
|
||||
|
|
|
@ -85,7 +85,7 @@ stylesTable = \
|
|||
, (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8', 'border':1 })
|
||||
, (Drawing, 'gcut' , { 'color':'255,255,190', 'border':1 })
|
||||
, (Drawing, 'Anabatic::Edge' , { 'color':'255,255,190', 'pattern':'0000000000000000', 'threshold':0.02*scale, 'border':4 })
|
||||
, (Drawing, 'Anabatic::GCell', { 'color':'255,0,0' , 'pattern':'0000000000000000', 'threshold':0.10*scale, 'border':4 })
|
||||
, (Drawing, 'Anabatic::GCell', { 'color':'255,0,0' , 'pattern':'0000000000000000', 'threshold':0.02*scale, 'border':4 })
|
||||
)
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
|
|
|
@ -833,7 +833,7 @@ void Cell::flattenNets ( const Instance* instance, uint64_t flags )
|
|||
vector<HyperNet> hyperNets;
|
||||
vector<HyperNet> topHyperNets;
|
||||
|
||||
for ( Occurrence occurrence : getHyperNetRootNetOccurrences().getSubSet(NotFilter<Occurrence>(Occurrence_Contains(instance))) ) {
|
||||
for ( Occurrence occurrence : getHyperNetRootNetOccurrences().getSubSet(Occurrence_Contains(instance)) ) {
|
||||
Net* net = static_cast<Net*>(occurrence.getEntity());
|
||||
|
||||
if (net->isClock() and (flags & Flags::NoClockFlatten)) continue;
|
||||
|
|
|
@ -394,6 +394,20 @@ extern "C" {
|
|||
}
|
||||
|
||||
|
||||
extern Layer* PYDERIVEDLAYER_O ( PyObject* pyObject )
|
||||
{
|
||||
Layer* layer = NULL;
|
||||
if (IsPyLayer(pyObject)) layer = PYLAYER_O(pyObject);
|
||||
if (not layer and IsPyBasicLayer(pyObject) ) layer = PYBASICLAYER_O(pyObject);
|
||||
if (not layer and IsPyContactLayer(pyObject) ) layer = PYCONTACTLAYER_O(pyObject);
|
||||
if (not layer and IsPyViaLayer(pyObject) ) layer = PYVIALAYER_O(pyObject);
|
||||
if (not layer and IsPyDiffusionLayer(pyObject) ) layer = PYDIFFUSIONLAYER_O(pyObject);
|
||||
if (not layer and IsPyRegularLayer(pyObject) ) layer = PYREGULARLAYER_O(pyObject);
|
||||
if (not layer and IsPyTransistorLayer(pyObject)) layer = PYTRANSISTORLAYER_O(pyObject);
|
||||
return layer;
|
||||
}
|
||||
|
||||
|
||||
#endif // End of Shared Library Code Part.
|
||||
|
||||
} // extern "C".
|
||||
|
|
|
@ -46,6 +46,7 @@ extern "C" {
|
|||
extern PyObject* PyLayer_LinkDerived ( Hurricane::Layer* object );
|
||||
extern void PyLayer_LinkPyType ();
|
||||
extern void PyLayer_postModuleInit ();
|
||||
extern Layer* PYDERIVEDLAYER_O ( PyObject* );
|
||||
|
||||
# define IsPyLayer(v) ( (v)->ob_type == &PyTypeLayer )
|
||||
# define PYLAYER(v) ( (PyLayer*)(v) )
|
||||
|
|
|
@ -140,7 +140,8 @@ namespace {
|
|||
DebugSession::open( _data->getNet(), 144, 146 );
|
||||
|
||||
// Temporary.
|
||||
_data->setSymAxis( _katana->getCell()->getAbutmentBox().getCenter().getX() );
|
||||
//_data->setSymAxis( _katana->getCell()->getAbutmentBox().getCenter().getX() );
|
||||
_data->setSymAxis( NetRoutingExtension::getSymAxis(_data->getNet()) );
|
||||
|
||||
cmess2 << " - Net: \"" << _data->getNet()->getName() << "\" ";
|
||||
cmess2 << "@" << DbU::getValueString(_data->getSymAxis()) << " ";
|
||||
|
|
Loading…
Reference in New Issue