diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2008-03-15 08:01:00 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2008-03-15 08:01:00 -0700 |
commit | 9b059e3085eaa55817684926b3c508ba7fe0075f (patch) | |
tree | 9683e4b1a56dd022adf07547f43707eb9f4da9db /src/base/abci/abcDelay.c | |
parent | ff6f0943362c30176fd1f961bcbd19e188cee520 (diff) | |
download | abc-9b059e3085eaa55817684926b3c508ba7fe0075f.tar.gz abc-9b059e3085eaa55817684926b3c508ba7fe0075f.tar.bz2 abc-9b059e3085eaa55817684926b3c508ba7fe0075f.zip |
Version abc80315
Diffstat (limited to 'src/base/abci/abcDelay.c')
-rw-r--r-- | src/base/abci/abcDelay.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/base/abci/abcDelay.c b/src/base/abci/abcDelay.c index 553bb2fc..847f1c75 100644 --- a/src/base/abci/abcDelay.c +++ b/src/base/abci/abcDelay.c @@ -566,7 +566,7 @@ Abc_Ntk_t * Abc_NtkSpeedup( Abc_Ntk_t * pNtk, int fUseLutLib, int Percentage, in if ( !fVeryVerbose && nTimeCris == 0 ) continue; Counter++; - // count the total number of timingn critical second-generation nodes + // count the total number of timing critical second-generation nodes Vec_PtrClear( vTimeCries ); if ( nTimeCris ) { @@ -602,6 +602,35 @@ Abc_Ntk_t * Abc_NtkSpeedup( Abc_Ntk_t * pNtk, int fUseLutLib, int Percentage, in // add the node to choices if ( Vec_PtrSize(vTimeCries) == 0 || Vec_PtrSize(vTimeCries) > Degree ) continue; + // order the fanins in the increasing order of criticalily + if ( Vec_PtrSize(vTimeCries) > 1 ) + { + pFanin = Vec_PtrEntry( vTimeCries, 0 ); + pFanin2 = Vec_PtrEntry( vTimeCries, 1 ); + if ( Abc_ObjSlack(pFanin) < Abc_ObjSlack(pFanin2) ) + { + Vec_PtrWriteEntry( vTimeCries, 0, pFanin2 ); + Vec_PtrWriteEntry( vTimeCries, 1, pFanin ); + } + } + if ( Vec_PtrSize(vTimeCries) > 2 ) + { + pFanin = Vec_PtrEntry( vTimeCries, 1 ); + pFanin2 = Vec_PtrEntry( vTimeCries, 2 ); + if ( Abc_ObjSlack(pFanin) < Abc_ObjSlack(pFanin2) ) + { + Vec_PtrWriteEntry( vTimeCries, 1, pFanin2 ); + Vec_PtrWriteEntry( vTimeCries, 2, pFanin ); + } + pFanin = Vec_PtrEntry( vTimeCries, 0 ); + pFanin2 = Vec_PtrEntry( vTimeCries, 1 ); + if ( Abc_ObjSlack(pFanin) < Abc_ObjSlack(pFanin2) ) + { + Vec_PtrWriteEntry( vTimeCries, 0, pFanin2 ); + Vec_PtrWriteEntry( vTimeCries, 1, pFanin ); + } + } + // add choice Abc_NtkSpeedupNode( pNtk, pNtkNew, pNode, vTimeFanins, vTimeCries ); } Vec_PtrFree( vTimeCries ); |