summaryrefslogtreecommitdiffstats
path: root/src/aig/fra/fraClass.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2007-08-19 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2007-08-19 08:01:00 -0700
commitc8a25de8e411409b60f3677f70eab0860070b462 (patch)
tree1f5f57c35a3aab5563879ca31119316ac3bcf207 /src/aig/fra/fraClass.c
parent3244fa2f327af3342194cbe74ec07fe198191837 (diff)
downloadabc-c8a25de8e411409b60f3677f70eab0860070b462.tar.gz
abc-c8a25de8e411409b60f3677f70eab0860070b462.tar.bz2
abc-c8a25de8e411409b60f3677f70eab0860070b462.zip
Version abc70819
Diffstat (limited to 'src/aig/fra/fraClass.c')
-rw-r--r--src/aig/fra/fraClass.c106
1 files changed, 56 insertions, 50 deletions
diff --git a/src/aig/fra/fraClass.c b/src/aig/fra/fraClass.c
index 9c10ae3b..a9d727da 100644
--- a/src/aig/fra/fraClass.c
+++ b/src/aig/fra/fraClass.c
@@ -67,6 +67,9 @@ Fra_Cla_t * Fra_ClassesStart( Aig_Man_t * pAig )
p->vClassesTemp = Vec_PtrAlloc( 100 );
p->vClassOld = Vec_PtrAlloc( 100 );
p->vClassNew = Vec_PtrAlloc( 100 );
+ p->pFuncNodeHash = Fra_SmlNodeHash;
+ p->pFuncNodeIsConst = Fra_SmlNodeIsConst;
+ p->pFuncNodesAreEqual = Fra_SmlNodesAreEqual;
return p;
}
@@ -127,27 +130,6 @@ void Fra_ClassesCopyReprs( Fra_Cla_t * p, Vec_Ptr_t * vFailed )
SeeAlso []
***********************************************************************/
-void Fra_PrintClass( Aig_Obj_t ** pClass )
-{
- Aig_Obj_t * pTemp;
- int i;
- printf( "{ " );
- for ( i = 0; pTemp = pClass[i]; i++ )
- printf( "%d ", pTemp->Id );
- printf( "}\n" );
-}
-
-/**Function*************************************************************
-
- Synopsis [Prints simulation classes.]
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
int Fra_ClassCount( Aig_Obj_t ** pClass )
{
Aig_Obj_t * pTemp;
@@ -216,17 +198,42 @@ int Fra_ClassesCountPairs( Fra_Cla_t * p )
SeeAlso []
***********************************************************************/
+void Fra_PrintClass( Aig_Obj_t ** pClass )
+{
+ Aig_Obj_t * pTemp;
+ int i;
+ for ( i = 1; pTemp = pClass[i]; i++ )
+ assert( Fra_ClassObjRepr(pTemp) == pClass[0] );
+ printf( "{ " );
+ for ( i = 0; pTemp = pClass[i]; i++ )
+ printf( "%d ", pTemp->Id, Fra_ClassObjRepr(pTemp)? Fra_ClassObjRepr(pTemp)->Id : -1 );
+ printf( "}\n" );
+}
+
+/**Function*************************************************************
+
+ Synopsis [Prints simulation classes.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
void Fra_ClassesPrint( Fra_Cla_t * p, int fVeryVerbose )
{
Aig_Obj_t ** pClass;
Aig_Obj_t * pObj;
int i;
- printf( "Consts = %6d. Classes = %6d. Literals = %6d.\n",
+ printf( "Const = %5d. Class = %5d. Lit = %5d.\n",
Vec_PtrSize(p->vClasses1), Vec_PtrSize(p->vClasses), Fra_ClassesCountLits(p) );
if ( fVeryVerbose )
{
+ Vec_PtrForEachEntry( p->vClasses1, pObj, i )
+ assert( Fra_ClassObjRepr(pObj) == Aig_ManConst1(p->pAig) );
printf( "Constants { " );
Vec_PtrForEachEntry( p->vClasses1, pObj, i )
printf( "%d ", pObj->Id );
@@ -281,9 +288,9 @@ void Fra_ClassesPrepare( Fra_Cla_t * p, int fLatchCorr )
//Extra_PrintBinary( stdout, Fra_ObjSim(pObj), 32 );
//printf( "\n" );
// hash the node by its simulation info
- iEntry = Fra_NodeHashSims( pObj ) % nTableSize;
+ iEntry = p->pFuncNodeHash( pObj, nTableSize );
// check if the node belongs to the class of constant 1
- if ( iEntry == 0 && Fra_NodeHasZeroSim( pObj ) )
+ if ( p->pFuncNodeIsConst( pObj ) )
{
Vec_PtrPush( p->vClasses1, pObj );
Fra_ClassObjSetRepr( pObj, Aig_ManConst1(p->pAig) );
@@ -351,7 +358,6 @@ void Fra_ClassesPrepare( Fra_Cla_t * p, int fLatchCorr )
Fra_ClassObjSetRepr( pTemp, pObj );
}
// add as many empty entries
-// memset( p->pMemClasses + 2*nEntries + nNodes, 0, sizeof(Aig_Obj_t *) * nNodes );
p->pMemClasses[2*nEntries + nNodes] = NULL;
// increment the number of entries
nEntries += k;
@@ -381,7 +387,7 @@ Aig_Obj_t ** Fra_RefineClassOne( Fra_Cla_t * p, Aig_Obj_t ** ppClass )
// check if the class is going to be refined
for ( ppThis = ppClass + 1; pObj = *ppThis; ppThis++ )
- if ( !Fra_NodeCompareSims(ppClass[0], pObj) )
+ if ( !p->pFuncNodesAreEqual(ppClass[0], pObj) )
break;
if ( pObj == NULL )
return NULL;
@@ -390,7 +396,7 @@ Aig_Obj_t ** Fra_RefineClassOne( Fra_Cla_t * p, Aig_Obj_t ** ppClass )
Vec_PtrClear( p->vClassNew );
Vec_PtrPush( p->vClassOld, ppClass[0] );
for ( ppThis = ppClass + 1; pObj = *ppThis; ppThis++ )
- if ( Fra_NodeCompareSims(ppClass[0], pObj) )
+ if ( p->pFuncNodesAreEqual(ppClass[0], pObj) )
Vec_PtrPush( p->vClassOld, pObj );
else
Vec_PtrPush( p->vClassNew, pObj );
@@ -517,7 +523,7 @@ int Fra_ClassesRefine1( Fra_Cla_t * p )
Vec_PtrClear( p->vClassNew );
Vec_PtrForEachEntry( p->vClasses1, pObj, i )
{
- if ( Fra_NodeHasZeroSim( pObj ) )
+ if ( p->pFuncNodeIsConst( pObj ) )
Vec_PtrWriteEntry( p->vClasses1, k++, pObj );
else
Vec_PtrPush( p->vClassNew, pObj );
@@ -526,6 +532,12 @@ int Fra_ClassesRefine1( Fra_Cla_t * p )
if ( Vec_PtrSize(p->vClassNew) == 0 )
return 0;
p->fRefinement = 1;
+/*
+ printf( "Refined const-1 class: {" );
+ Vec_PtrForEachEntry( p->vClassNew, pObj, i )
+ printf( " %d", pObj->Id );
+ printf( " }\n" );
+*/
if ( Vec_PtrSize(p->vClassNew) == 1 )
{
Fra_ClassObjSetRepr( Vec_PtrEntry(p->vClassNew,0), NULL );
@@ -600,28 +612,6 @@ void Fra_ClassesLatchCorr( Fra_Man_t * p )
/**Function*************************************************************
- Synopsis [Counts the number of 1s in the XOR of simulation data.]
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-static inline int Fra_SmlNodeNotEquWeight( Fra_Sml_t * p, int Left, int Right )
-{
- unsigned * pSimL, * pSimR;
- int k, Counter = 0;
- pSimL = Fra_ObjSim( p, Left );
- pSimR = Fra_ObjSim( p, Right );
- for ( k = 0; k < p->nWordsTotal; k++ )
- Counter += Aig_WordCountOnes( pSimL[k] ^ pSimR[k] );
- return Counter;
-}
-
-/**Function*************************************************************
-
Synopsis [Postprocesses the classes by removing half of the less useful.]
Description []
@@ -685,6 +675,22 @@ void Fra_ClassesPostprocess( Fra_Cla_t * p )
free( pWeights );
}
+/**Function*************************************************************
+
+ Synopsis [Derives AIG for the partitioned problem.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Aig_Man_t * Fra_ClassesDeriveAig( Fra_Cla_t * p, int nFramesK )
+{
+
+}
+
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////