mirror of https://github.com/YosysHQ/abc.git
Integrating input driving cell constraint into buffering/sizing.
This commit is contained in:
parent
efa6b54b5e
commit
3d8dc1217c
|
|
@ -53,7 +53,8 @@ void Abc_SclFindWindow( Abc_Obj_t * pPivot, Vec_Int_t ** pvNodes, Vec_Int_t ** p
|
|||
// collect fanins, node, and fanouts
|
||||
Vec_IntClear( vNodes );
|
||||
Abc_ObjForEachFanin( pPivot, pNext, i )
|
||||
if ( Abc_ObjIsNode(pNext) && Abc_ObjFaninNum(pNext) > 0 )
|
||||
// if ( Abc_ObjIsNode(pNext) && Abc_ObjFaninNum(pNext) > 0 )
|
||||
if ( Abc_ObjIsCi(pNext) || Abc_ObjFaninNum(pNext) > 0 )
|
||||
Vec_IntPush( vNodes, Abc_ObjId(pNext) );
|
||||
Vec_IntPush( vNodes, Abc_ObjId(pPivot) );
|
||||
Abc_ObjForEachFanout( pPivot, pNext, i )
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -256,6 +256,7 @@ static inline void Abc_SclManCleanTime( SC_Man * p )
|
|||
memset( p->pTimes, 0, sizeof(SC_Pair) * p->nObjs );
|
||||
memset( p->pSlews, 0, sizeof(SC_Pair) * p->nObjs );
|
||||
memset( p->pDepts, 0, sizeof(SC_Pair) * p->nObjs );
|
||||
/*
|
||||
if ( p->pPiDrive != NULL )
|
||||
{
|
||||
SC_Pair * pSlew, * pTime, * pLoad;
|
||||
|
|
@ -269,6 +270,7 @@ static inline void Abc_SclManCleanTime( SC_Man * p )
|
|||
Scl_LibHandleInputDriver( p->pPiDrive, pLoad, pTime, pSlew );
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -222,7 +222,8 @@ void Abc_SclFindNodesToUpdate( Abc_Obj_t * pPivot, Vec_Int_t ** pvNodes, Vec_Int
|
|||
// collect fanins, node, and fanouts
|
||||
Vec_IntClear( vNodes );
|
||||
Abc_ObjForEachFanin( pPivot, pNext, i )
|
||||
if ( Abc_ObjIsNode(pNext) && Abc_ObjFaninNum(pNext) > 0 )
|
||||
// if ( Abc_ObjIsNode(pNext) && Abc_ObjFaninNum(pNext) > 0 )
|
||||
if ( Abc_ObjIsCi(pNext) || Abc_ObjFaninNum(pNext) > 0 )
|
||||
Vec_IntPush( vNodes, Abc_ObjId(pNext) );
|
||||
Vec_IntPush( vNodes, Abc_ObjId(pPivot) );
|
||||
if ( pExtra )
|
||||
|
|
|
|||
Loading…
Reference in New Issue