2007-04-28 17:01:00 +02:00
|
|
|
/**CFile****************************************************************
|
|
|
|
|
|
|
|
|
|
FileName [darMan.c]
|
|
|
|
|
|
|
|
|
|
SystemName [ABC: Logic synthesis and verification system.]
|
|
|
|
|
|
|
|
|
|
PackageName [DAG-aware AIG rewriting.]
|
|
|
|
|
|
|
|
|
|
Synopsis [AIG manager.]
|
|
|
|
|
|
|
|
|
|
Author [Alan Mishchenko]
|
|
|
|
|
|
|
|
|
|
Affiliation [UC Berkeley]
|
|
|
|
|
|
|
|
|
|
Date [Ver. 1.0. Started - April 28, 2007.]
|
|
|
|
|
|
|
|
|
|
Revision [$Id: darMan.c,v 1.00 2007/04/28 00:00:00 alanmi Exp $]
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
2007-07-12 17:01:00 +02:00
|
|
|
#include "darInt.h"
|
2007-04-28 17:01:00 +02:00
|
|
|
|
2010-11-01 09:35:04 +01:00
|
|
|
ABC_NAMESPACE_IMPL_START
|
|
|
|
|
|
2007-04-28 17:01:00 +02:00
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
/// DECLARATIONS ///
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
/// FUNCTION DEFINITIONS ///
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
/**Function*************************************************************
|
|
|
|
|
|
2007-07-12 17:01:00 +02:00
|
|
|
Synopsis [Starts the rewriting manager.]
|
2007-04-28 17:01:00 +02:00
|
|
|
|
2007-07-12 17:01:00 +02:00
|
|
|
Description []
|
2007-04-28 17:01:00 +02:00
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
2007-07-23 17:01:00 +02:00
|
|
|
Dar_Man_t * Dar_ManStart( Aig_Man_t * pAig, Dar_RwrPar_t * pPars )
|
2007-04-28 17:01:00 +02:00
|
|
|
{
|
|
|
|
|
Dar_Man_t * p;
|
2009-02-15 17:01:00 +01:00
|
|
|
Aig_ManCleanData( pAig );
|
|
|
|
|
p = ABC_ALLOC( Dar_Man_t, 1 );
|
2007-04-28 17:01:00 +02:00
|
|
|
memset( p, 0, sizeof(Dar_Man_t) );
|
2007-07-12 17:01:00 +02:00
|
|
|
p->pPars = pPars;
|
|
|
|
|
p->pAig = pAig;
|
2009-02-15 17:01:00 +01:00
|
|
|
p->vCutNodes = Vec_PtrAlloc( 1000 );
|
2007-07-14 17:01:00 +02:00
|
|
|
p->pMemCuts = Aig_MmFixedStart( p->pPars->nCutsMax * sizeof(Dar_Cut_t), 1024 );
|
2007-04-28 17:01:00 +02:00
|
|
|
p->vLeavesBest = Vec_PtrAlloc( 4 );
|
|
|
|
|
return p;
|
|
|
|
|
}
|
|
|
|
|
|
2007-07-03 17:01:00 +02:00
|
|
|
/**Function*************************************************************
|
|
|
|
|
|
2007-07-12 17:01:00 +02:00
|
|
|
Synopsis [Stops the rewriting manager.]
|
2007-04-28 17:01:00 +02:00
|
|
|
|
|
|
|
|
Description []
|
|
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
void Dar_ManStop( Dar_Man_t * p )
|
|
|
|
|
{
|
2007-07-12 17:01:00 +02:00
|
|
|
if ( p->pPars->fVerbose )
|
|
|
|
|
Dar_ManPrintStats( p );
|
2009-02-15 17:01:00 +01:00
|
|
|
if ( p->vCutNodes )
|
|
|
|
|
Vec_PtrFree( p->vCutNodes );
|
2007-07-12 17:01:00 +02:00
|
|
|
if ( p->pMemCuts )
|
|
|
|
|
Aig_MmFixedStop( p->pMemCuts, 0 );
|
|
|
|
|
if ( p->vLeavesBest )
|
|
|
|
|
Vec_PtrFree( p->vLeavesBest );
|
2009-02-15 17:01:00 +01:00
|
|
|
ABC_FREE( p );
|
2007-04-28 17:01:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**Function*************************************************************
|
|
|
|
|
|
|
|
|
|
Synopsis [Stops the AIG manager.]
|
|
|
|
|
|
|
|
|
|
Description []
|
|
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
void Dar_ManPrintStats( Dar_Man_t * p )
|
2007-06-24 17:01:00 +02:00
|
|
|
{
|
2007-07-14 17:01:00 +02:00
|
|
|
unsigned pCanons[222];
|
|
|
|
|
int Gain, i;
|
|
|
|
|
extern void Kit_DsdPrintFromTruth( unsigned * pTruth, int nVars );
|
|
|
|
|
|
2007-07-12 17:01:00 +02:00
|
|
|
Gain = p->nNodesInit - Aig_ManNodeNum(p->pAig);
|
2007-07-26 17:01:00 +02:00
|
|
|
printf( "Tried = %8d. Beg = %8d. End = %8d. Gain = %6d. (%6.2f %%). Cut mem = %d Mb\n",
|
|
|
|
|
p->nNodesTried, p->nNodesInit, Aig_ManNodeNum(p->pAig), Gain, 100.0*Gain/p->nNodesInit, p->nCutMemUsed );
|
2007-07-12 17:01:00 +02:00
|
|
|
printf( "Cuts = %8d. Tried = %8d. Used = %8d. Bad = %5d. Skipped = %5d. Ave = %.2f.\n",
|
|
|
|
|
p->nCutsAll, p->nCutsTried, p->nCutsUsed, p->nCutsBad, p->nCutsSkipped,
|
|
|
|
|
(float)p->nCutsUsed/Aig_ManNodeNum(p->pAig) );
|
2007-07-14 17:01:00 +02:00
|
|
|
|
2007-07-26 17:01:00 +02:00
|
|
|
printf( "Bufs = %5d. BufMax = %5d. BufReplace = %6d. BufFix = %6d. Levels = %4d.\n",
|
|
|
|
|
Aig_ManBufNum(p->pAig), p->pAig->nBufMax, p->pAig->nBufReplaces, p->pAig->nBufFixes, Aig_ManLevels(p->pAig) );
|
2009-02-15 17:01:00 +01:00
|
|
|
ABC_PRT( "Cuts ", p->timeCuts );
|
|
|
|
|
ABC_PRT( "Eval ", p->timeEval );
|
|
|
|
|
ABC_PRT( "Other ", p->timeOther );
|
|
|
|
|
ABC_PRT( "TOTAL ", p->timeTotal );
|
2007-07-14 17:01:00 +02:00
|
|
|
|
|
|
|
|
if ( !p->pPars->fVeryVerbose )
|
|
|
|
|
return;
|
|
|
|
|
Dar_LibReturnCanonicals( pCanons );
|
2007-06-24 17:01:00 +02:00
|
|
|
for ( i = 0; i < 222; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( p->ClassGains[i] == 0 && p->ClassTimes[i] == 0 )
|
|
|
|
|
continue;
|
|
|
|
|
printf( "%3d : ", i );
|
|
|
|
|
printf( "G = %6d (%5.2f %%) ", p->ClassGains[i], Gain? 100.0*p->ClassGains[i]/Gain : 0.0 );
|
|
|
|
|
printf( "S = %8d (%5.2f %%) ", p->ClassSubgs[i], p->nTotalSubgs? 100.0*p->ClassSubgs[i]/p->nTotalSubgs : 0.0 );
|
2007-07-14 17:01:00 +02:00
|
|
|
printf( "R = %7d ", p->ClassGains[i]? p->ClassSubgs[i]/p->ClassGains[i] : 9999999 );
|
2007-09-30 17:01:00 +02:00
|
|
|
// Kit_DsdPrintFromTruth( pCanons + i, 4 );
|
2009-02-15 17:01:00 +01:00
|
|
|
// ABC_PRTP( "T", p->ClassTimes[i], p->timeEval );
|
2007-09-30 17:01:00 +02:00
|
|
|
printf( "\n" );
|
2007-06-24 17:01:00 +02:00
|
|
|
}
|
2008-04-03 17:01:00 +02:00
|
|
|
fflush( stdout );
|
2007-06-24 17:01:00 +02:00
|
|
|
}
|
|
|
|
|
|
2007-04-28 17:01:00 +02:00
|
|
|
|
2010-11-01 09:35:04 +01:00
|
|
|
/**Function*************************************************************
|
|
|
|
|
|
|
|
|
|
Synopsis []
|
|
|
|
|
|
|
|
|
|
Description []
|
|
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
|
|
ABC_NAMESPACE_IMPL_END
|
|
|
|
|
|
|
|
|
|
#include "kit.h"
|
|
|
|
|
|
|
|
|
|
ABC_NAMESPACE_IMPL_START
|
|
|
|
|
|
|
|
|
|
void Dar_ManPrintScript()
|
|
|
|
|
{
|
|
|
|
|
unsigned pCanons[222];
|
|
|
|
|
int i;
|
|
|
|
|
Dar_LibReturnCanonicals( pCanons );
|
|
|
|
|
for ( i = 1; i < 222; i++ )
|
|
|
|
|
{
|
|
|
|
|
Kit_DsdNtk_t * pNtk;
|
|
|
|
|
pNtk = Kit_DsdDecompose( pCanons + i, 4 );
|
|
|
|
|
printf( " \"" );
|
|
|
|
|
Kit_DsdPrint( stdout, pNtk );
|
|
|
|
|
printf( "\", /* %3d */\n", i );
|
|
|
|
|
Kit_DsdNtkFree( pNtk );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
2007-04-28 17:01:00 +02:00
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
/// END OF FILE ///
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
2010-11-01 09:35:04 +01:00
|
|
|
ABC_NAMESPACE_IMPL_END
|
|
|
|
|
|