summaryrefslogtreecommitdiffstats
path: root/src/base/abci/abcDelay.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2008-03-15 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2008-03-15 08:01:00 -0700
commit9b059e3085eaa55817684926b3c508ba7fe0075f (patch)
tree9683e4b1a56dd022adf07547f43707eb9f4da9db /src/base/abci/abcDelay.c
parentff6f0943362c30176fd1f961bcbd19e188cee520 (diff)
downloadabc-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.c31
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 );