diff options
Diffstat (limited to 'src/base/acb/acbAbc.c')
-rw-r--r-- | src/base/acb/acbAbc.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/base/acb/acbAbc.c b/src/base/acb/acbAbc.c index c726ba73..b6604a54 100644 --- a/src/base/acb/acbAbc.c +++ b/src/base/acb/acbAbc.c @@ -21,6 +21,7 @@ #include "acb.h" #include "base/abc/abc.h" #include "aig/miniaig/ndr.h" +#include "acbPar.h" ABC_NAMESPACE_IMPL_START @@ -80,6 +81,43 @@ Acb_Ntk_t * Acb_NtkFromAbc( Abc_Ntk_t * p ) SeeAlso [] ***********************************************************************/ +Abc_Ntk_t * Acb_NtkToAbc( Abc_Ntk_t * pNtk, Acb_Ntk_t * p ) +{ + int i, k, iObj, iFanin; + Abc_Ntk_t * pNtkNew = Abc_NtkStartFrom( pNtk, ABC_NTK_LOGIC, ABC_FUNC_SOP ); + Mem_Flex_t * pMan = (Mem_Flex_t *)pNtkNew->pManFunc; + Acb_NtkCleanObjCopies( p ); + Acb_NtkForEachCi( p, iObj, i ) + Acb_ObjSetCopy( p, iObj, Abc_ObjId(Abc_NtkCi(pNtkNew, i)) ); + Acb_NtkForEachNode( p, iObj ) + { + Abc_Obj_t * pObjNew = Abc_NtkCreateNode( pNtkNew ); + Acb_ObjForEachFanin( p, iObj, iFanin, k ) + Abc_ObjAddFanin( pObjNew, Abc_NtkObj(pNtkNew, Acb_ObjCopy(p, iFanin)) ); + pObjNew->pData = Abc_SopCreateFromTruth( pMan, Acb_ObjFaninNum(p, iObj), (unsigned *)Acb_ObjTruthP(p, iObj) ); + } + Acb_NtkForEachCoDriver( p, iFanin, i ) + Abc_ObjAddFanin( Abc_NtkCo(pNtkNew, i), Abc_NtkObj(pNtkNew, Acb_ObjCopy(p, iFanin)) ); + if ( !Abc_NtkCheck( pNtkNew ) ) + { + printf( "Acb_NtkToAbc: The network check has failed.\n" ); + Abc_NtkDelete( pNtkNew ); + return NULL; + } + return pNtkNew; +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ Acb_Ntk_t * Acb_NtkFromNdr( char * pFileName, void * pModule, Abc_Nam_t * pNames, Vec_Int_t * vWeights, int nNameIdMax ) { Ndr_Data_t * p = (Ndr_Data_t *)pModule; @@ -138,6 +176,58 @@ Acb_Ntk_t * Acb_NtkFromNdr( char * pFileName, void * pModule, Abc_Nam_t * pNames return pNtk; } +/**Function************************************************************* + + Synopsis [Setup parameter structure.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +void Acb_ParSetDefault( Acb_Par_t * pPars ) +{ + memset( pPars, 0, sizeof(Acb_Par_t) ); + pPars->nLutSize = 4; // LUT size + pPars->nTfoLevMax = 3; // the maximum fanout levels + pPars->nTfiLevMax = 3; // the maximum fanin levels + pPars->nFanoutMax = 10; // the maximum number of fanouts + pPars->nDivMax = 16; // the maximum divisor count + pPars->nTabooMax = 4; // the minimum MFFC size + pPars->nGrowthLevel = 0; // the maximum allowed growth in level + pPars->nBTLimit = 0; // the maximum number of conflicts in one SAT run + pPars->nNodesMax = 0; // the maximum number of nodes to try + pPars->iNodeOne = 0; // one particular node to try + pPars->fArea = 0; // performs optimization for area + pPars->fMoreEffort = 0; // enables using more effort + pPars->fVerbose = 0; // enable basic stats + pPars->fVeryVerbose = 0; // enable detailed stats +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +Abc_Ntk_t * Abc_NtkOptMfse( Abc_Ntk_t * pNtk, Acb_Par_t * pPars ) +{ + extern void Acb_NtkOpt( Acb_Ntk_t * p, Acb_Par_t * pPars ); + Abc_Ntk_t * pNtkNew; + Acb_Ntk_t * p = Acb_NtkFromAbc( pNtk ); + Acb_NtkOpt( p, pPars ); + pNtkNew = Acb_NtkToAbc( pNtk, p ); + Acb_ManFree( p->pDesign ); + return pNtkNew; +} + //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// |