summaryrefslogtreecommitdiffstats
path: root/src/base
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-04-14 15:06:41 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2012-04-14 15:06:41 -0700
commit5c683fc1640bfba8fa796bc98b32e83a03366fee (patch)
tree8103bdbb4ed335ed22e39b5b2b90c32ed718bdc5 /src/base
parent92ad58ffa2cba0aea4566e5097caf633cee4f750 (diff)
downloadabc-5c683fc1640bfba8fa796bc98b32e83a03366fee.tar.gz
abc-5c683fc1640bfba8fa796bc98b32e83a03366fee.tar.bz2
abc-5c683fc1640bfba8fa796bc98b32e83a03366fee.zip
Adding iterative refinement to 'addbuffs'.
Diffstat (limited to 'src/base')
-rw-r--r--src/base/abc/abcUtil.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/base/abc/abcUtil.c b/src/base/abc/abcUtil.c
index 540fd78c..9d27158d 100644
--- a/src/base/abc/abcUtil.c
+++ b/src/base/abc/abcUtil.c
@@ -2203,6 +2203,49 @@ Abc_Ntk_t * Abc_NtkAddBuffs( Abc_Ntk_t * pNtkInit, int fDirect, int fReverse, in
}
}
+/**Function*************************************************************
+
+ Synopsis [Computes max delay using log(n) delay model.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+float Abc_NtkComputeDelay( Abc_Ntk_t * pNtk )
+{
+ static double GateDelays[20] = { 1.00, 1.00, 2.00, 2.58, 3.00, 3.32, 3.58, 3.81, 4.00, 4.17, 4.32, 4.46, 4.58, 4.70, 4.81, 4.91, 5.00, 5.09, 5.17, 5.25 };
+ Vec_Ptr_t * vNodes;
+ Abc_Obj_t * pObj, * pFanin;
+ float DelayMax, Delays[15] = {0};
+ int nFaninMax, i, k;
+ // calculate relative gate delays
+ nFaninMax = Abc_NtkGetFaninMax( pNtk );
+ assert( nFaninMax > 1 && nFaninMax < 15 );
+ for ( i = 0; i <= nFaninMax; i++ )
+ Delays[i] = GateDelays[i]/GateDelays[nFaninMax];
+ // set max CI delay
+ Abc_NtkForEachCi( pNtk, pObj, i )
+ pObj->dTemp = 0.0;
+ // compute delays for each node
+ vNodes = Abc_NtkDfs( pNtk, 1 );
+ Vec_PtrForEachEntry( Abc_Obj_t *, vNodes, pObj, i )
+ {
+ pObj->dTemp = 0.0;
+ Abc_ObjForEachFanin( pObj, pFanin, k )
+ pObj->dTemp = Abc_MaxFloat( pObj->dTemp, pFanin->dTemp );
+ pObj->dTemp += Delays[Abc_ObjFaninNum(pObj)];
+ }
+ Vec_PtrFree( vNodes );
+ DelayMax = 0.0;
+ // find max CO delay
+ Abc_NtkForEachCo( pNtk, pObj, i )
+ DelayMax = Abc_MaxFloat( DelayMax, Abc_ObjFanin0(pObj)->dTemp );
+ return DelayMax;
+}
+
/**Function*************************************************************