diff options
Diffstat (limited to 'abc70930/src/opt/rwr/rwrExp.c')
-rw-r--r-- | abc70930/src/opt/rwr/rwrExp.c | 333 |
1 files changed, 0 insertions, 333 deletions
diff --git a/abc70930/src/opt/rwr/rwrExp.c b/abc70930/src/opt/rwr/rwrExp.c deleted file mode 100644 index 2d00bb1c..00000000 --- a/abc70930/src/opt/rwr/rwrExp.c +++ /dev/null @@ -1,333 +0,0 @@ -/**CFile**************************************************************** - - FileName [rwrExp.c] - - SystemName [ABC: Logic synthesis and verification system.] - - PackageName [DAG-aware AIG rewriting package.] - - Synopsis [Computation of practically used NN-classes of 4-input cuts.] - - Author [Alan Mishchenko] - - Affiliation [UC Berkeley] - - Date [Ver. 1.0. Started - June 20, 2005.] - - Revision [$Id: rwrExp.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] - -***********************************************************************/ - -#include "rwr.h" - -//////////////////////////////////////////////////////////////////////// -/// DECLARATIONS /// -//////////////////////////////////////////////////////////////////////// - -typedef struct Rwr_Man4_t_ Rwr_Man4_t; -struct Rwr_Man4_t_ -{ - // internal lookups - int nFuncs; // the number of four-var functions - unsigned short * puCanons; // canonical forms - int * pnCounts; // the counters of functions in each class - int nConsidered; // the number of nodes considered - int nClasses; // the number of NN classes -}; - -typedef struct Rwr_Man5_t_ Rwr_Man5_t; -struct Rwr_Man5_t_ -{ - // internal lookups - stmm_table * tTableNN; // the NN canonical forms - stmm_table * tTableNPN; // the NPN canonical forms -}; - -static Rwr_Man4_t * s_pManRwrExp4 = NULL; -static Rwr_Man5_t * s_pManRwrExp5 = NULL; - -//////////////////////////////////////////////////////////////////////// -/// FUNCTION DEFINITIONS /// -//////////////////////////////////////////////////////////////////////// - -/**Function************************************************************* - - Synopsis [Collects stats about 4-var functions appearing in netlists.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Rwt_Man4ExploreStart() -{ - Rwr_Man4_t * p; - p = ALLOC( Rwr_Man4_t, 1 ); - memset( p, 0, sizeof(Rwr_Man4_t) ); - // canonical forms - p->nFuncs = (1<<16); - // canonical forms, phases, perms - Extra_Truth4VarNPN( &p->puCanons, NULL, NULL, NULL ); - // counters - p->pnCounts = ALLOC( int, p->nFuncs ); - memset( p->pnCounts, 0, sizeof(int) * p->nFuncs ); - s_pManRwrExp4 = p; -} - -/**Function************************************************************* - - Synopsis [Collects stats about 4-var functions appearing in netlists.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Rwt_Man4ExploreCount( unsigned uTruth ) -{ - assert( uTruth < (1<<16) ); - s_pManRwrExp4->pnCounts[ s_pManRwrExp4->puCanons[uTruth] ]++; -} - -/**Function************************************************************* - - Synopsis [Collects stats about 4-var functions appearing in netlists.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Rwt_Man4ExplorePrint() -{ - FILE * pFile; - int i, CountMax, CountWrite, nCuts, nClasses; - int * pDistrib; - int * pReprs; - // find the max number of occurences - nCuts = nClasses = 0; - CountMax = 0; - for ( i = 0; i < s_pManRwrExp4->nFuncs; i++ ) - { - if ( CountMax < s_pManRwrExp4->pnCounts[i] ) - CountMax = s_pManRwrExp4->pnCounts[i]; - nCuts += s_pManRwrExp4->pnCounts[i]; - if ( s_pManRwrExp4->pnCounts[i] > 0 ) - nClasses++; - } - printf( "Number of cuts considered = %8d.\n", nCuts ); - printf( "Classes occurring at least once = %8d.\n", nClasses ); - // print the distribution of classes - pDistrib = ALLOC( int, CountMax + 1 ); - pReprs = ALLOC( int, CountMax + 1 ); - memset( pDistrib, 0, sizeof(int)*(CountMax + 1) ); - for ( i = 0; i < s_pManRwrExp4->nFuncs; i++ ) - { - pDistrib[ s_pManRwrExp4->pnCounts[i] ]++; - pReprs[ s_pManRwrExp4->pnCounts[i] ] = i; - } - - printf( "Occurence = %6d. Num classes = %4d. \n", 0, 2288-nClasses ); - for ( i = 1; i <= CountMax; i++ ) - if ( pDistrib[i] ) - { - printf( "Occurence = %6d. Num classes = %4d. Repr = ", i, pDistrib[i] ); - Extra_PrintBinary( stdout, (unsigned*)&(pReprs[i]), 16 ); - printf( "\n" ); - } - free( pDistrib ); - free( pReprs ); - // write into a file all classes above limit (5) - CountWrite = 0; - pFile = fopen( "npnclass_stats4.txt", "w" ); - for ( i = 0; i < s_pManRwrExp4->nFuncs; i++ ) - if ( s_pManRwrExp4->pnCounts[i] > 0 ) - { - Extra_PrintHex( pFile, i, 4 ); - fprintf( pFile, " %10d\n", s_pManRwrExp4->pnCounts[i] ); -// fprintf( pFile, "%d ", i ); - CountWrite++; - } - fclose( pFile ); - printf( "%d classes written into file \"%s\".\n", CountWrite, "npnclass_stats4.txt" ); -} - - - - -/**Function************************************************************* - - Synopsis [Collects stats about 4-var functions appearing in netlists.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Rwt_Man5ExploreStart() -{ - Rwr_Man5_t * p; - p = ALLOC( Rwr_Man5_t, 1 ); - memset( p, 0, sizeof(Rwr_Man5_t) ); - p->tTableNN = stmm_init_table( st_numcmp, st_numhash ); - p->tTableNPN = stmm_init_table( st_numcmp, st_numhash ); - s_pManRwrExp5 = p; - -//Extra_PrintHex( stdout, Extra_TruthCanonNPN( 0x0000FFFF, 5 ), 5 ); -//printf( "\n" ); -} - -/**Function************************************************************* - - Synopsis [Collects stats about 4-var functions appearing in netlists.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Rwt_Man5ExploreCount( unsigned uTruth ) -{ - int * pCounter; - if ( !stmm_find_or_add( s_pManRwrExp5->tTableNN, (char *)uTruth, (char***)&pCounter ) ) - *pCounter = 0; - (*pCounter)++; -} - -/**Function************************************************************* - - Synopsis [Collects stats about 4-var functions appearing in netlists.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Rwt_Man5ExplorePrint() -{ - FILE * pFile; - stmm_generator * gen; - int i, CountMax, nCuts, Counter; - int * pDistrib; - unsigned * pReprs; - unsigned uTruth, uTruthC; - int clk = clock(); - Vec_Int_t * vClassesNN, * vClassesNPN; - - // find the max number of occurences - nCuts = 0; - CountMax = 0; - stmm_foreach_item( s_pManRwrExp5->tTableNN, gen, (char **)&uTruth, (char **)&Counter ) - { - nCuts += Counter; - if ( CountMax < Counter ) - CountMax = Counter; - } - printf( "Number of cuts considered = %8d.\n", nCuts ); - printf( "Classes occurring at least once = %8d.\n", stmm_count(s_pManRwrExp5->tTableNN) ); - printf( "The largest number of occurence = %8d.\n", CountMax ); - - // print the distribution of classes - pDistrib = ALLOC( int, CountMax + 1 ); - pReprs = ALLOC( unsigned, CountMax + 1 ); - memset( pDistrib, 0, sizeof(int)*(CountMax + 1) ); - stmm_foreach_item( s_pManRwrExp5->tTableNN, gen, (char **)&uTruth, (char **)&Counter ) - { - assert( Counter <= CountMax ); - pDistrib[ Counter ]++; - pReprs[ Counter ] = uTruth; - } - - for ( i = 1; i <= CountMax; i++ ) - if ( pDistrib[i] ) - { - printf( "Occurence = %6d. Num classes = %4d. Repr = ", i, pDistrib[i] ); - Extra_PrintBinary( stdout, pReprs + i, 32 ); - printf( "\n" ); - } - free( pDistrib ); - free( pReprs ); - - - // put them into an array - vClassesNN = Vec_IntAlloc( stmm_count(s_pManRwrExp5->tTableNN) ); - stmm_foreach_item( s_pManRwrExp5->tTableNN, gen, (char **)&uTruth, NULL ) - Vec_IntPush( vClassesNN, (int)uTruth ); - Vec_IntSortUnsigned( vClassesNN ); - - // write into a file all classes - pFile = fopen( "nnclass_stats5.txt", "w" ); - Vec_IntForEachEntry( vClassesNN, uTruth, i ) - { - if ( !stmm_lookup( s_pManRwrExp5->tTableNN, (char *)uTruth, (char **)&Counter ) ) - { - assert( 0 ); - } - Extra_PrintHex( pFile, uTruth, 5 ); - fprintf( pFile, " %10d\n", Counter ); - } - fclose( pFile ); - printf( "%d classes written into file \"%s\".\n", vClassesNN->nSize, "nnclass_stats5.txt" ); - - -clk = clock(); - // how many NPN classes exist? - Vec_IntForEachEntry( vClassesNN, uTruth, i ) - { - int * pCounter; - uTruthC = Extra_TruthCanonNPN( uTruth, 5 ); - if ( !stmm_find_or_add( s_pManRwrExp5->tTableNPN, (char *)uTruthC, (char***)&pCounter ) ) - *pCounter = 0; - if ( !stmm_lookup( s_pManRwrExp5->tTableNN, (char *)uTruth, (char **)&Counter ) ) - { - assert( 0 ); - } - (*pCounter) += Counter; - } - printf( "The numbe of NPN classes = %d.\n", stmm_count(s_pManRwrExp5->tTableNPN) ); -PRT( "Computing NPN classes", clock() - clk ); - - // put them into an array - vClassesNPN = Vec_IntAlloc( stmm_count(s_pManRwrExp5->tTableNPN) ); - stmm_foreach_item( s_pManRwrExp5->tTableNPN, gen, (char **)&uTruth, NULL ) - Vec_IntPush( vClassesNPN, (int)uTruth ); - Vec_IntSortUnsigned( vClassesNPN ); - - // write into a file all classes - pFile = fopen( "npnclass_stats5.txt", "w" ); - Vec_IntForEachEntry( vClassesNPN, uTruth, i ) - { - if ( !stmm_lookup( s_pManRwrExp5->tTableNPN, (char *)uTruth, (char **)&Counter ) ) - { - assert( 0 ); - } - Extra_PrintHex( pFile, uTruth, 5 ); - fprintf( pFile, " %10d\n", Counter ); - } - fclose( pFile ); - printf( "%d classes written into file \"%s\".\n", vClassesNPN->nSize, "npnclass_stats5.txt" ); - - - // can they be uniquely characterized? - -} - - - -//////////////////////////////////////////////////////////////////////// -/// END OF FILE /// -//////////////////////////////////////////////////////////////////////// - - |