From 59077dab9f099a08ed958cdcda6ddf8f22b7ed3e Mon Sep 17 00:00:00 2001 From: Mathias Soeken Date: Sat, 30 Jul 2016 15:01:59 +0200 Subject: Implementation of Abc_ExactDelayCost. --- src/base/abci/abcExact.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'src/base/abci') diff --git a/src/base/abci/abcExact.c b/src/base/abci/abcExact.c index ee3a67f4..a8ad858f 100644 --- a/src/base/abci/abcExact.c +++ b/src/base/abci/abcExact.c @@ -1109,8 +1109,40 @@ int Abc_ExactInputNum() // the area cost should not exceed 2048, if the cut is implementable; otherwise, it should be ABC_INFINITY int Abc_ExactDelayCost( word * pTruth, int nVars, int * pArrTimeProfile, char * pPerm, int * Cost ) { - *Cost = ABC_INFINITY; - return ABC_INFINITY; + int l; + Ses_Man_t * pSes; + char * pSol, * p; + int Delay; + abctime timeStart; + + /* some checks */ + assert( nVars >= 2 && nVars <= 8 ); + + timeStart = Abc_Clock(); + + pSes = Ses_ManAlloc( pTruth, nVars, 1, nVars - 1, pArrTimeProfile, 1, 0 ); + + if ( Ses_ManFindMinimumSize( pSes ) ) + { + pSol = Ses_ManExtractSolution( pSes ); + + *Cost = pSol[ABC_EXACT_SOL_NGATES]; + p = pSol + 3 + 4 * ABC_EXACT_SOL_NGATES + 1; + Delay = *p++; + for ( l = 0; l < nVars; ++l ) + pPerm[l] = *p++; + + ABC_FREE( pSol ); + } + else + *Cost = Delay = ABC_INFINITY; + + pSes->timeTotal = Abc_Clock() - timeStart; + + /* cleanup */ + Ses_ManClean( pSes ); + + return Delay; } // this procedure returns a new node whose output in terms of the given fanins // has the smallest possible arrival time (in agreement with the above Abc_ExactDelayCost) -- cgit v1.2.3