21#ifndef ABC__map__scl__sclTime_h
22#define ABC__map__scl__sclTime_h
77static inline SC_Cell * Scl_ObjCell(
SC_Time *
p,
int i ) {
return SC_LibCell(
p->pLib, Vec_IntEntry(
p->vGates, i) ); }
78static inline void Scl_ObjSetCell(
SC_Time *
p,
int i,
SC_Cell * pCell ) { Vec_IntWriteEntry(
p->vGates, i, pCell->
Id ); }
80static inline SC_Pair * Scl_ObjLoad(
SC_Time *
p,
int i ) {
return p->pLoads + i; }
81static inline SC_Pair * Scl_ObjLoad2(
SC_Time *
p,
int i ) {
return p->pLoads2 + i; }
82static inline SC_Pair * Scl_ObjDept(
SC_Time *
p,
int i ) {
return p->pDepts + i; }
83static inline SC_Pair * Scl_ObjTime(
SC_Time *
p,
int i ) {
return p->pTimes + i; }
84static inline SC_Pair * Scl_ObjSlew(
SC_Time *
p,
int i ) {
return p->pSlews + i; }
85static inline SC_Pair * Scl_ObjTime2(
SC_Time *
p,
int i ) {
return p->pTimes2 + i; }
86static inline SC_Pair * Scl_ObjSlew2(
SC_Time *
p,
int i ) {
return p->pSlews2 + i; }
88static inline float Scl_ObjTimeMax(
SC_Time *
p,
int i ) {
return Abc_MaxFloat(Scl_ObjTime(
p, i)->rise, Scl_ObjTime(
p, i)->fall); }
89static inline float Scl_ObjDepthMax(
SC_Time *
p,
int i ) {
return Abc_MaxFloat(Scl_ObjDept(
p, i)->rise, Scl_ObjDept(
p, i)->fall); }
90static inline float Scl_ObjGetSlack(
SC_Time *
p,
int i,
float D ) {
return D - Abc_MaxFloat(Scl_ObjTime(
p, i)->rise + Scl_ObjDept(
p, i)->rise, Scl_ObjTime(
p, i)->fall + Scl_ObjDept(
p, i)->fall); }
91static inline float Scl_ObjGetSlackR(
SC_Time *
p,
int i,
float D ) {
return D - (Scl_ObjTime(
p, i)->rise + Scl_ObjDept(
p, i)->rise); }
92static inline float Scl_ObjGetSlackF(
SC_Time *
p,
int i,
float D ) {
return D - (Scl_ObjTime(
p, i)->fall + Scl_ObjDept(
p, i)->fall); }
93static inline float Scl_ObjSlack(
SC_Time *
p,
int i ) {
return p->pSlack[i]; }
95static inline void Scl_ObjDupFanin(
SC_Time *
p,
int i,
int iFanin ) { *Scl_ObjTime(
p, i) = *Scl_ObjTime(
p, iFanin); }
96static inline float Scl_ObjGain(
SC_Time *
p,
int i ) {
return 0.5*((Scl_ObjTime2(
p, i)->rise - Scl_ObjTime(
p, i)->rise) + (Scl_ObjTime2(
p, i)->fall - Scl_ObjTime(
p, i)->fall)); }
97static inline int Scl_ObjLegal(
SC_Time *
p,
int i,
float D ) {
return Scl_ObjTime(
p, i)->rise <= Scl_ObjTime2(
p, i)->rise + Scl_ObjGetSlackR(
p, i, D) && Scl_ObjTime(
p, i)->fall <= Scl_ObjTime2(
p, i)->fall + Scl_ObjGetSlackF(
p, i, D); }
99static inline double Scl_ObjLoadFf(
SC_Time *
p,
int i,
int fRise ) {
return fRise ? Scl_ObjLoad(
p, i)->rise : Scl_ObjLoad(
p, i)->fall; }
100static inline double Scl_ObjTimePs(
SC_Time *
p,
int i,
int fRise ) {
return fRise ? Scl_ObjTime(
p, i)->rise : Scl_ObjTime(
p, i)->fall; }
101static inline double Scl_ObjSlewPs(
SC_Time *
p,
int i,
int fRise ) {
return fRise ? Scl_ObjSlew(
p, i)->rise : Scl_ObjSlew(
p, i)->fall; }
136static inline void Scl_ManFree(
SC_Time *
p )
138 Vec_IntFreeP( &
p->vGates );
149static inline void Scl_ManCleanTime(
SC_Time *
p )
173 *Scl_ObjTime2(
p, iObj) = *Scl_ObjTime(
p, iObj);
174 *Scl_ObjSlew2(
p, iObj) = *Scl_ObjSlew(
p, iObj);
182 *Scl_ObjTime(
p, iObj) = *Scl_ObjTime2(
p, iObj);
183 *Scl_ObjSlew(
p, iObj) = *Scl_ObjSlew2(
p, iObj);
192 *Scl_ObjTime(
p, iObj) = Zero;
193 *Scl_ObjSlew(
p, iObj) = Zero;
208static inline void Scl_PinTimeArrival(
SC_Time *
p,
SC_Timing * pTime,
int iObj,
int iFanin )
210 SC_Pair * pArrIn = Scl_ObjTime(
p, iFanin );
211 SC_Pair * pSlewIn = Scl_ObjSlew(
p, iFanin );
212 SC_Pair * pLoad = Scl_ObjLoad(
p, iObj );
213 SC_Pair * pArrOut = Scl_ObjTime(
p, iObj );
214 SC_Pair * pSlewOut = Scl_ObjSlew(
p, iObj );
215 Scl_LibPinArrival( pTime, pArrIn, pSlewIn, pLoad, pArrOut, pSlewOut );
217static inline void Scl_PinTimeDeparture(
SC_Time *
p,
SC_Timing * pTime,
int iObj,
int iFanin )
219 SC_Pair * pDepIn = Scl_ObjDept(
p, iFanin );
220 SC_Pair * pSlewIn = Scl_ObjSlew(
p, iFanin );
221 SC_Pair * pLoad = Scl_ObjLoad(
p, iObj );
222 SC_Pair * pDepOut = Scl_ObjDept(
p, iObj );
223 Scl_LibPinDeparture( pTime, pDepIn, pSlewIn, pLoad, pDepOut );
#define ABC_FALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct SC_Timing_ SC_Timing
struct SC_WireLoad_ SC_WireLoad
STRUCTURE DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct SC_Time_ SC_Time
INCLUDES ///.
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.