mirror of https://github.com/YosysHQ/abc.git
100 lines
3.2 KiB
C
100 lines
3.2 KiB
C
/**CFile****************************************************************
|
|
|
|
FileName [dchCore.c]
|
|
|
|
SystemName [ABC: Logic synthesis and verification system.]
|
|
|
|
PackageName [Choice computation for tech-mapping.]
|
|
|
|
Synopsis [The core procedures.]
|
|
|
|
Author [Alan Mishchenko]
|
|
|
|
Affiliation [UC Berkeley]
|
|
|
|
Date [Ver. 1.0. Started - June 29, 2008.]
|
|
|
|
Revision [$Id: dchCore.c,v 1.00 2008/07/29 00:00:00 alanmi Exp $]
|
|
|
|
***********************************************************************/
|
|
|
|
#include "dchInt.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
/// DECLARATIONS ///
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
/// FUNCTION DEFINITIONS ///
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
/**Function*************************************************************
|
|
|
|
Synopsis [This procedure sets default parameters.]
|
|
|
|
Description []
|
|
|
|
SideEffects []
|
|
|
|
SeeAlso []
|
|
|
|
***********************************************************************/
|
|
void Dch_ManSetDefaultParams( Dch_Pars_t * p )
|
|
{
|
|
memset( p, 0, sizeof(Dch_Pars_t) );
|
|
p->nWords = 4; // the number of simulation words
|
|
p->nBTLimit = 100; // conflict limit at a node
|
|
p->nSatVarMax = 10000; // the max number of SAT variables
|
|
p->fSynthesis = 1; // derives three snapshots
|
|
p->fVerbose = 1; // verbose stats
|
|
}
|
|
|
|
/**Function*************************************************************
|
|
|
|
Synopsis [Performs computation of AIGs with choices.]
|
|
|
|
Description [Takes several AIGs and performs choicing.]
|
|
|
|
SideEffects []
|
|
|
|
SeeAlso []
|
|
|
|
***********************************************************************/
|
|
Aig_Man_t * Dch_ComputeChoices( Vec_Ptr_t * vAigs, Dch_Pars_t * pPars )
|
|
{
|
|
Dch_Man_t * p;
|
|
Aig_Man_t * pResult;
|
|
int clk, clkTotal = clock();
|
|
assert( Vec_PtrSize(vAigs) > 0 );
|
|
// start the choicing manager
|
|
p = Dch_ManCreate( vAigs, pPars );
|
|
// compute candidate equivalence classes
|
|
clk = clock();
|
|
p->ppClasses = Dch_CreateCandEquivClasses( p->pAigTotal, pPars->nWords, pPars->fVerbose );
|
|
p->timeSimInit = clock() - clk;
|
|
// Dch_ClassesPrint( p->ppClasses, 0 );
|
|
p->nLits = Dch_ClassesLitNum( p->ppClasses );
|
|
// perform SAT sweeping
|
|
Dch_ManSweep( p );
|
|
// count the number of representatives
|
|
p->nReprs = Dch_DeriveChoiceCountReprs( p->pAigTotal );
|
|
// create choices
|
|
clk = clock();
|
|
pResult = Dch_DeriveChoiceAig( p->pAigTotal );
|
|
p->timeChoice = clock() - clk;
|
|
// Aig_ManCleanup( p->pAigTotal );
|
|
// pResult = Aig_ManDupSimpleDfs( p->pAigTotal );
|
|
// count the number of equivalences and choices
|
|
p->nEquivs = Dch_DeriveChoiceCountEquivs( pResult );
|
|
p->nChoices = Aig_ManCountChoices( pResult );
|
|
p->timeTotal = clock() - clkTotal;
|
|
Dch_ManStop( p );
|
|
return pResult;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
/// END OF FILE ///
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|