summaryrefslogtreecommitdiffstats
path: root/src/base/acb/acbAbc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/acb/acbAbc.c')
-rw-r--r--src/base/acb/acbAbc.c90
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 ///
////////////////////////////////////////////////////////////////////////