summaryrefslogtreecommitdiffstats
path: root/src/base/abci/abcCut.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2010-11-28 22:30:15 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2010-11-28 22:30:15 -0800
commita17a4e5ca4d01220912fd3e85f9db2f6dc119254 (patch)
treed2b746fc725b3f51d7470762e92374cb3498860b /src/base/abci/abcCut.c
parent98257daa82043256cea4da4fd4bcc65d5ff130ca (diff)
downloadabc-a17a4e5ca4d01220912fd3e85f9db2f6dc119254.tar.gz
abc-a17a4e5ca4d01220912fd3e85f9db2f6dc119254.tar.bz2
abc-a17a4e5ca4d01220912fd3e85f9db2f6dc119254.zip
NPN class computation.
Diffstat (limited to 'src/base/abci/abcCut.c')
-rw-r--r--src/base/abci/abcCut.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/base/abci/abcCut.c b/src/base/abci/abcCut.c
index e80ddb92..f8b27c32 100644
--- a/src/base/abci/abcCut.c
+++ b/src/base/abci/abcCut.c
@@ -122,7 +122,8 @@ void Abc_NtkCutsAddFanunt( Abc_Ntk_t * pNtk )
Cut_Man_t * Abc_NtkCuts( Abc_Ntk_t * pNtk, Cut_Params_t * pParams )
{
ProgressBar * pProgress;
- Cut_Man_t * p;
+ Cut_Man_t * p;
+ Cut_Cut_t * pList;
Abc_Obj_t * pObj, * pNode;
Vec_Ptr_t * vNodes;
Vec_Int_t * vChoices;
@@ -172,7 +173,15 @@ Cut_Man_t * Abc_NtkCuts( Abc_Ntk_t * pNtk, Cut_Params_t * pParams )
// continue;
Extra_ProgressBarUpdate( pProgress, i, NULL );
// compute the cuts to the internal node
- Abc_NodeGetCuts( p, pObj, pParams->fDag, pParams->fTree );
+ pList = Abc_NodeGetCuts( p, pObj, pParams->fDag, pParams->fTree );
+ if ( pParams->fNpnSave && pList )
+ {
+ extern void Npn_ManSaveOne( unsigned * puTruth, int nVars );
+ Cut_Cut_t * pCut;
+ for ( pCut = pList; pCut; pCut = pCut->pNext )
+ if ( pCut->nLeaves >= 4 )
+ Npn_ManSaveOne( Cut_CutReadTruth(pCut), pCut->nLeaves );
+ }
// consider dropping the fanins cuts
if ( pParams->fDrop )
{
@@ -193,7 +202,7 @@ Cut_Man_t * Abc_NtkCuts( Abc_Ntk_t * pNtk, Cut_Params_t * pParams )
Vec_IntFree( vChoices );
Cut_ManPrintStats( p );
ABC_PRT( "TOTAL", clock() - clk );
- printf( "Area = %d.\n", Abc_NtkComputeArea( pNtk, p ) );
+// printf( "Area = %d.\n", Abc_NtkComputeArea( pNtk, p ) );
//Abc_NtkPrintCuts( p, pNtk, 0 );
// Cut_ManPrintStatsToFile( p, pNtk->pSpec, clock() - clk );
@@ -428,7 +437,6 @@ void * Abc_NodeGetCuts( void * p, Abc_Obj_t * pObj, int fDag, int fTree )
// assert( Abc_NtkIsStrash(pObj->pNtk) );
assert( Abc_ObjFaninNum(pObj) == 2 );
-
// check if the node is a DAG node
fDagNode = (Abc_ObjFanoutNum(pObj) > 1 && !Abc_NodeIsMuxControlType(pObj));
// increment the counter of DAG nodes
@@ -444,7 +452,6 @@ void * Abc_NodeGetCuts( void * p, Abc_Obj_t * pObj, int fDag, int fTree )
TreeCode |= ((Abc_ObjFanoutNum(pFanin) > 1 && !Abc_NodeIsMuxControlType(pFanin)) << 1);
}
-
// changes due to the global/local cut computation
{
Cut_Params_t * pParams = Cut_ManReadParams((Cut_Man_t *)p);
@@ -568,9 +575,6 @@ void Abc_NtkPrintCuts_( void * p, Abc_Ntk_t * pNtk, int fSeq )
Cut_CutPrintList( pList, fSeq );
}
-
-
-
/**Function*************************************************************
Synopsis [Assigns global attributes randomly.]