diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2013-09-17 23:00:59 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2013-09-17 23:00:59 -0700 |
commit | 3d8dc1217c3634963e36f793d475cb73622d8719 (patch) | |
tree | e3daf46c273ebc5a4005716f805213ab4b8245a1 /src/map/scl/sclSize.c | |
parent | efa6b54b5ed1549a39495a89db57c1189f4e5a93 (diff) | |
download | abc-3d8dc1217c3634963e36f793d475cb73622d8719.tar.gz abc-3d8dc1217c3634963e36f793d475cb73622d8719.tar.bz2 abc-3d8dc1217c3634963e36f793d475cb73622d8719.zip |
Integrating input driving cell constraint into buffering/sizing.
Diffstat (limited to 'src/map/scl/sclSize.c')
-rw-r--r-- | src/map/scl/sclSize.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/map/scl/sclSize.c b/src/map/scl/sclSize.c index 0cc282a9..33b7474a 100644 --- a/src/map/scl/sclSize.c +++ b/src/map/scl/sclSize.c @@ -225,6 +225,16 @@ static inline float Abc_SclObjLoadValue( SC_Man * p, Abc_Obj_t * pObj ) // float Value = Abc_MaxFloat(pLoad->fall, pLoad->rise) / (p->EstLoadAve * p->EstLoadMax); return (0.5 * Abc_SclObjLoad(p, pObj)->fall + 0.5 * Abc_SclObjLoad(p, pObj)->rise) / (p->EstLoadAve * p->EstLoadMax); } +static inline void Abc_SclTimeCi( SC_Man * p, Abc_Obj_t * pObj ) +{ + if ( p->pPiDrive != NULL ) + { + SC_Pair * pLoad = Abc_SclObjLoad( p, pObj ); + SC_Pair * pTime = Abc_SclObjTime( p, pObj ); + SC_Pair * pSlew = Abc_SclObjSlew( p, pObj ); + Scl_LibHandleInputDriver( p->pPiDrive, pLoad, pTime, pSlew ); + } +} void Abc_SclTimeNode( SC_Man * p, Abc_Obj_t * pObj, int fDept ) { SC_Timing * pTime; @@ -237,6 +247,12 @@ void Abc_SclTimeNode( SC_Man * p, Abc_Obj_t * pObj, int fDept ) float DeptFall = 0; float Value = p->EstLoadMax ? Abc_SclObjLoadValue( p, pObj ) : 0; Abc_Obj_t * pFanin; + if ( Abc_ObjIsCi(pObj) ) + { + assert( !fDept ); + Abc_SclTimeCi( p, pObj ); + return; + } if ( Abc_ObjIsCo(pObj) ) { if ( !fDept ) @@ -319,6 +335,8 @@ void Abc_SclTimeNtkRecompute( SC_Man * p, float * pArea, float * pDelay, int fRe Abc_SclComputeLoad( p ); Abc_SclManCleanTime( p ); p->nEstNodes = 0; + Abc_NtkForEachCi( p->pNtk, pObj, i ) + Abc_SclTimeNode( p, pObj, 0 ); Abc_NtkForEachNode1( p->pNtk, pObj, i ) Abc_SclTimeNode( p, pObj, 0 ); Abc_NtkForEachCo( p->pNtk, pObj, i ) @@ -376,7 +394,8 @@ static inline void Abc_SclTimeIncAddFanins( SC_Man * p, Abc_Obj_t * pObj ) Abc_Obj_t * pFanin; int i; Abc_ObjForEachFanin( pObj, pFanin, i ) - if ( !pFanin->fMarkC && Abc_ObjIsNode(pFanin) ) +// if ( !pFanin->fMarkC && Abc_ObjIsNode(pFanin) ) + if ( !pFanin->fMarkC ) Abc_SclTimeIncAddNode( p, pFanin ); } static inline void Abc_SclTimeIncAddFanouts( SC_Man * p, Abc_Obj_t * pObj ) |