summaryrefslogtreecommitdiffstats
path: root/src/base/acb/acbAbc.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2017-04-04 15:37:10 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2017-04-04 15:37:10 -0700
commit304c63e8603b34909f89ae84e6939bd77147c29c (patch)
tree90a557fcb31a8948d26c2a62b4a4601b3108c1d7 /src/base/acb/acbAbc.c
parent44605f5af647cc6963603116091fcbe98080d660 (diff)
downloadabc-304c63e8603b34909f89ae84e6939bd77147c29c.tar.gz
abc-304c63e8603b34909f89ae84e6939bd77147c29c.tar.bz2
abc-304c63e8603b34909f89ae84e6939bd77147c29c.zip
Experiments with don't-cares.
Diffstat (limited to 'src/base/acb/acbAbc.c')
-rw-r--r--src/base/acb/acbAbc.c46
1 files changed, 36 insertions, 10 deletions
diff --git a/src/base/acb/acbAbc.c b/src/base/acb/acbAbc.c
index d3c511ff..2b07a202 100644
--- a/src/base/acb/acbAbc.c
+++ b/src/base/acb/acbAbc.c
@@ -44,27 +44,18 @@ ABC_NAMESPACE_IMPL_START
SeeAlso []
***********************************************************************/
-Acb_Ntk_t * Acb_NtkFromAbc( Abc_Ntk_t * p )
+Acb_Ntk_t * Acb_NtkFromAbc2( Abc_Ntk_t * p )
{
- int fTrack = 1;
Acb_Man_t * pMan = Acb_ManAlloc( Abc_NtkSpec(p), 1, NULL, NULL, NULL, NULL );
int i, k, NameId = Abc_NamStrFindOrAdd( pMan->pStrs, Abc_NtkName(p), NULL );
Acb_Ntk_t * pNtk = Acb_NtkAlloc( pMan, NameId, Abc_NtkCiNum(p), Abc_NtkCoNum(p), Abc_NtkObjNum(p) );
Abc_Obj_t * pObj, * pFanin;
assert( Abc_NtkIsSopLogic(p) );
pNtk->nFaninMax = 6;
- if ( fTrack ) Vec_IntFill( &pNtk->vArray2, Abc_NtkObjNumMax(p), -1 );
Abc_NtkForEachCi( p, pObj, i )
- {
pObj->iTemp = Acb_ObjAlloc( pNtk, ABC_OPER_CI, 0, 0 );
- if ( fTrack ) Vec_IntWriteEntry( &pNtk->vArray2, pObj->iTemp, Abc_ObjId(pObj) );
- }
Abc_NtkForEachNode( p, pObj, i )
- {
pObj->iTemp = Acb_ObjAlloc( pNtk, ABC_OPER_LUT, Abc_ObjFaninNum(pObj), 0 );
- if ( fTrack ) Vec_IntWriteEntry( &pNtk->vArray2, pObj->iTemp, Abc_ObjId(pObj) );
-// printf( "%d -> %d\n%s", i, pObj->iTemp, (char *)pObj->pData );
- }
Abc_NtkForEachCo( p, pObj, i )
pObj->iTemp = Acb_ObjAlloc( pNtk, ABC_OPER_CO, 1, 0 );
Abc_NtkForEachNode( p, pObj, i )
@@ -79,6 +70,40 @@ Acb_Ntk_t * Acb_NtkFromAbc( Abc_Ntk_t * p )
Acb_NtkAdd( pMan, pNtk );
return pNtk;
}
+Acb_Ntk_t * Acb_NtkFromAbc( Abc_Ntk_t * p )
+{
+ Acb_Man_t * pMan = Acb_ManAlloc( Abc_NtkSpec(p), 1, NULL, NULL, NULL, NULL );
+ int i, k, NameId = Abc_NamStrFindOrAdd( pMan->pStrs, Abc_NtkName(p), NULL );
+ Acb_Ntk_t * pNtk = Acb_NtkAlloc( pMan, NameId, Abc_NtkCiNum(p), Abc_NtkCoNum(p), Abc_NtkObjNumMax(p)-1 );
+ Abc_Obj_t * pObj, * pFanin;
+ assert( Abc_NtkIsSopLogic(p) );
+ pNtk->nFaninMax = 6;
+ for ( i = 1; i < Abc_NtkObjNumMax(p); i++ )
+ {
+ pObj = Abc_NtkObj( p, i );
+ if ( pObj == NULL )
+ Acb_ObjAlloc( pNtk, ABC_OPER_NONE, 0, 0 );
+ else if ( Abc_ObjIsCi(pObj) )
+ pObj->iTemp = Acb_ObjAlloc( pNtk, ABC_OPER_CI, 0, 0 );
+ else if ( Abc_ObjIsCo(pObj) )
+ pObj->iTemp = Acb_ObjAlloc( pNtk, ABC_OPER_CO, 1, 0 );
+ else if ( Abc_ObjIsNode(pObj) )
+ pObj->iTemp = Acb_ObjAlloc( pNtk, ABC_OPER_LUT, Abc_ObjFaninNum(pObj), 0 );
+ else assert( 0 );
+ assert( pObj == NULL || pObj->iTemp == (int)Abc_ObjId(pObj) );
+ }
+ Abc_NtkForEachNode( p, pObj, i )
+ Abc_ObjForEachFanin( pObj, pFanin, k )
+ Acb_ObjAddFanin( pNtk, pObj->iTemp, pFanin->iTemp );
+ Abc_NtkForEachCo( p, pObj, i )
+ Acb_ObjAddFanin( pNtk, pObj->iTemp, Abc_ObjFanin(pObj, 0)->iTemp );
+ Acb_NtkCleanObjTruths( pNtk );
+ Abc_NtkForEachNode( p, pObj, i )
+ Acb_ObjSetTruth( pNtk, pObj->iTemp, Abc_SopToTruth((char *)pObj->pData, Abc_ObjFaninNum(pObj)) );
+ Acb_NtkSetRegNum( pNtk, Abc_NtkLatchNum(p) );
+ Acb_NtkAdd( pMan, pNtk );
+ return pNtk;
+}
/**Function*************************************************************
@@ -218,6 +243,7 @@ void Acb_ParSetDefault( Acb_Par_t * pPars )
pPars->nNodesMax = 0; // the maximum number of nodes to try
pPars->iNodeOne = 0; // one particular node to try
pPars->fArea = 1; // performs optimization for area
+ pPars->fUseAshen = 0; // use Ashenhurst decomposition
pPars->fMoreEffort = 0; // enables using more effort
pPars->fVerbose = 0; // enable basic stats
pPars->fVeryVerbose = 0; // enable detailed stats