summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-01-13 20:58:28 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2012-01-13 20:58:28 -0800
commitb7ba9aa8dcdfee0c5fa42aec0385b83d2371da39 (patch)
tree2b5f55f03b0c4f701b824679e54524e4675b4211
parent37b8a190baa91c69dcbd4300f03e209e19fb5b9b (diff)
downloadabc-b7ba9aa8dcdfee0c5fa42aec0385b83d2371da39.tar.gz
abc-b7ba9aa8dcdfee0c5fa42aec0385b83d2371da39.tar.bz2
abc-b7ba9aa8dcdfee0c5fa42aec0385b83d2371da39.zip
New hierarchy manager.
-rw-r--r--src/aig/aig/aigPart.c23
-rw-r--r--src/base/abc/abcHieCec.c37
-rw-r--r--src/base/abc/abcHieNew.c2
-rw-r--r--src/base/abci/abc.c2
4 files changed, 63 insertions, 1 deletions
diff --git a/src/aig/aig/aigPart.c b/src/aig/aig/aigPart.c
index a481f2a9..6ee3930b 100644
--- a/src/aig/aig/aigPart.c
+++ b/src/aig/aig/aigPart.c
@@ -277,7 +277,7 @@ Vec_Ptr_t * Aig_ManSupports( Aig_Man_t * pMan )
Part_Man_t * p;
Part_One_t * pPart0, * pPart1;
Aig_Obj_t * pObj;
- int i;
+ int i, Counter = 0;
// set the number of PIs/POs
Aig_ManForEachPi( pMan, pObj, i )
pObj->pNext = (Aig_Obj_t *)(long)i;
@@ -301,6 +301,8 @@ Vec_Ptr_t * Aig_ManSupports( Aig_Man_t * pMan )
assert( pPart1->nRefs > 0 );
if ( --pPart1->nRefs == 0 )
Part_ManRecycleEntry( p, pPart1 );
+ if ( ((Part_One_t *)pObj->pData)->nOuts <= 16 )
+ Counter++;
continue;
}
if ( Aig_ObjIsPo(pObj) )
@@ -346,11 +348,30 @@ Vec_Ptr_t * Aig_ManSupports( Aig_Man_t * pMan )
printf( "%d ", Vec_IntSize( Vec_VecEntryInt(vSupports, i) ) );
printf( "\n" );
*/
+// printf( "%d \n", Counter );
return vSupports;
}
/**Function*************************************************************
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Aig_ManSupportsTest( Aig_Man_t * pMan )
+{
+ Vec_Ptr_t * vSupps;
+ vSupps = Aig_ManSupports( pMan );
+ Vec_VecFree( (Vec_Vec_t *)vSupps );
+}
+
+/**Function*************************************************************
+
Synopsis [Computes the set of outputs for each input.]
Description [Returns the array of integer arrays containing indices
diff --git a/src/base/abc/abcHieCec.c b/src/base/abc/abcHieCec.c
index dd691a4f..001705e3 100644
--- a/src/base/abc/abcHieCec.c
+++ b/src/base/abc/abcHieCec.c
@@ -552,6 +552,40 @@ void Abc_NtkCountInst( Abc_Ntk_t * pNtk )
printf( "Instances = %10d.\n", Counter );
}
+/**Function*************************************************************
+
+ Synopsis [Checks if there is a recursive definition.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Abc_NtkCheckRecursive( Abc_Ntk_t * pNtk )
+{
+ Vec_Ptr_t * vMods;
+ Abc_Ntk_t * pModel;
+ Abc_Obj_t * pObj;
+ int i, k, RetValue = 0;
+
+ assert( Abc_NtkIsNetlist(pNtk) );
+ assert( !Abc_NtkLatchNum(pNtk) );
+
+ vMods = pNtk->pDesign->vModules;
+ Vec_PtrForEachEntry( Abc_Ntk_t *, vMods, pModel, i )
+ {
+ Abc_NtkForEachObj( pModel, pObj, k )
+ if ( Abc_ObjIsBox(pObj) && pObj->pData == (void *)pModel )
+ {
+ printf( "WARNING: Model \"%s\" contains a recursive defition.\n", Abc_NtkName(pModel) );
+ RetValue = 1;
+ break;
+ }
+ }
+ return RetValue;
+}
/**Function*************************************************************
@@ -592,6 +626,9 @@ Gia_Man_t * Abc_NtkHieCecTest( char * pFileName, int fVerbose )
assert( Abc_NtkIsNetlist(pNtk) );
assert( !Abc_NtkLatchNum(pNtk) );
+ if ( Abc_NtkCheckRecursive(pNtk) )
+ return NULL;
+
// test the new data-structure
if ( fUseTest )
{
diff --git a/src/base/abc/abcHieNew.c b/src/base/abc/abcHieNew.c
index 0712c574..cddc4968 100644
--- a/src/base/abc/abcHieNew.c
+++ b/src/base/abc/abcHieNew.c
@@ -638,6 +638,8 @@ Au_Ntk_t * Au_NtkDerive( Au_Man_t * pMan, Abc_Ntk_t * pNtk, Vec_Ptr_t * vOrder )
// copy POs
Abc_NtkForEachPo( pNtk, pTerm, i )
Au_NtkCreatePo( p, Abc_ObjFanin0(pTerm)->iTemp );
+
+ Au_NtkPrintStats( p );
return p;
}
diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c
index 8b1c8441..070ffbd9 100644
--- a/src/base/abci/abc.c
+++ b/src/base/abci/abc.c
@@ -8927,11 +8927,13 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
// extern void Abs_VfaManTest( Aig_Man_t * pAig, int nFrames, int nConfLimit, int fVerbose );
extern void Aig_ManInterRepar( Aig_Man_t * pMan, int fVerbose );
extern Aig_Man_t * Abc_NtkToDar( Abc_Ntk_t * pNtk, int fExors, int fRegisters );
+ extern void Aig_ManSupportsTest( Aig_Man_t * pMan );
if ( pNtk )
{
Aig_Man_t * pAig = Abc_NtkToDar( pNtk, 0, 1 );
// Aig_ManInterRepar( pAig, 1 );
// Aig_ManInterTest( pAig, 1 );
+ Aig_ManSupportsTest( pAig );
Aig_ManStop( pAig );
}
}