diff options
Diffstat (limited to 'src/base/abci/abcSymm.c')
-rw-r--r-- | src/base/abci/abcSymm.c | 229 |
1 files changed, 0 insertions, 229 deletions
diff --git a/src/base/abci/abcSymm.c b/src/base/abci/abcSymm.c deleted file mode 100644 index 0f76065c..00000000 --- a/src/base/abci/abcSymm.c +++ /dev/null @@ -1,229 +0,0 @@ -/**CFile**************************************************************** - - FileName [abcSymm.c] - - SystemName [ABC: Logic synthesis and verification system.] - - PackageName [Network and node package.] - - Synopsis [Computation of two-variable symmetries.] - - Author [Alan Mishchenko] - - Affiliation [UC Berkeley] - - Date [Ver. 1.0. Started - June 20, 2005.] - - Revision [$Id: abcSymm.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] - -***********************************************************************/ - -#include "abc.h" - -//////////////////////////////////////////////////////////////////////// -/// DECLARATIONS /// -//////////////////////////////////////////////////////////////////////// - -static void Abc_NtkSymmetriesUsingBdds( Abc_Ntk_t * pNtk, int fNaive, int fReorder, int fVerbose ); -static void Abc_NtkSymmetriesUsingSandS( Abc_Ntk_t * pNtk, int fVerbose ); -static void Ntk_NetworkSymmsBdd( DdManager * dd, Abc_Ntk_t * pNtk, int fNaive, int fVerbose ); -static void Ntk_NetworkSymmsPrint( Abc_Ntk_t * pNtk, Extra_SymmInfo_t * pSymms ); - -//////////////////////////////////////////////////////////////////////// -/// FUNCTION DEFINITIONS /// -//////////////////////////////////////////////////////////////////////// - -/**Function************************************************************* - - Synopsis [The top level procedure to compute symmetries.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Abc_NtkSymmetries( Abc_Ntk_t * pNtk, int fUseBdds, int fNaive, int fReorder, int fVerbose ) -{ - if ( fUseBdds || fNaive ) - Abc_NtkSymmetriesUsingBdds( pNtk, fNaive, fReorder, fVerbose ); - else - Abc_NtkSymmetriesUsingSandS( pNtk, fVerbose ); -} - -/**Function************************************************************* - - Synopsis [Symmetry computation using simulation and SAT.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Abc_NtkSymmetriesUsingSandS( Abc_Ntk_t * pNtk, int fVerbose ) -{ - extern int Sim_ComputeTwoVarSymms( Abc_Ntk_t * pNtk, int fVerbose ); - int nSymms = Sim_ComputeTwoVarSymms( pNtk, fVerbose ); - printf( "The total number of symmetries is %d.\n", nSymms ); -} - -/**Function************************************************************* - - Synopsis [Symmetry computation using BDDs (both naive and smart).] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Abc_NtkSymmetriesUsingBdds( Abc_Ntk_t * pNtk, int fNaive, int fReorder, int fVerbose ) -{ - DdManager * dd; - int clk, clkBdd, clkSym; - int fGarbCollect = 1; - - // compute the global functions -clk = clock(); - dd = Abc_NtkBuildGlobalBdds( pNtk, 10000000, 1, fReorder, fVerbose ); - printf( "Shared BDD size = %d nodes.\n", Abc_NtkSizeOfGlobalBdds(pNtk) ); - Cudd_AutodynDisable( dd ); - if ( !fGarbCollect ) - Cudd_DisableGarbageCollection( dd ); - Cudd_zddVarsFromBddVars( dd, 2 ); -clkBdd = clock() - clk; - // create the collapsed network -clk = clock(); - Ntk_NetworkSymmsBdd( dd, pNtk, fNaive, fVerbose ); -clkSym = clock() - clk; - // undo the global functions - Abc_NtkFreeGlobalBdds( pNtk, 1 ); -printf( "Statistics of BDD-based symmetry detection:\n" ); -printf( "Algorithm = %s. Reordering = %s. Garbage collection = %s.\n", - fNaive? "naive" : "fast", fReorder? "yes" : "no", fGarbCollect? "yes" : "no" ); -PRT( "Constructing BDDs", clkBdd ); -PRT( "Computing symms ", clkSym ); -PRT( "TOTAL ", clkBdd + clkSym ); -} - -/**Function************************************************************* - - Synopsis [Symmetry computation using BDDs (both naive and smart).] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Ntk_NetworkSymmsBdd( DdManager * dd, Abc_Ntk_t * pNtk, int fNaive, int fVerbose ) -{ - Extra_SymmInfo_t * pSymms; - Abc_Obj_t * pNode; - DdNode * bFunc; - int nSymms = 0; - int nSupps = 0; - int i; - - // compute symmetry info for each PO - Abc_NtkForEachCo( pNtk, pNode, i ) - { -// bFunc = pNtk->vFuncsGlob->pArray[i]; - bFunc = Abc_ObjGlobalBdd( pNode ); - nSupps += Cudd_SupportSize( dd, bFunc ); - if ( Cudd_IsConstant(bFunc) ) - continue; - if ( fNaive ) - pSymms = Extra_SymmPairsComputeNaive( dd, bFunc ); - else - pSymms = Extra_SymmPairsCompute( dd, bFunc ); - nSymms += pSymms->nSymms; - if ( fVerbose ) - { - printf( "Output %6s (%d): ", Abc_ObjName(pNode), pSymms->nSymms ); - Ntk_NetworkSymmsPrint( pNtk, pSymms ); - } -//Extra_SymmPairsPrint( pSymms ); - Extra_SymmPairsDissolve( pSymms ); - } - printf( "Total number of vars in functional supports = %8d.\n", nSupps ); - printf( "Total number of two-variable symmetries = %8d.\n", nSymms ); -} - -/**Function************************************************************* - - Synopsis [Printing symmetry groups from the symmetry data structure.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Ntk_NetworkSymmsPrint( Abc_Ntk_t * pNtk, Extra_SymmInfo_t * pSymms ) -{ - char ** pInputNames; - int * pVarTaken; - int i, k, nVars, nSize, fStart; - - // get variable names - nVars = Abc_NtkCiNum(pNtk); - pInputNames = Abc_NtkCollectCioNames( pNtk, 0 ); - - // alloc the array of marks - pVarTaken = ALLOC( int, nVars ); - memset( pVarTaken, 0, sizeof(int) * nVars ); - - // print the groups - fStart = 1; - nSize = pSymms->nVars; - for ( i = 0; i < nSize; i++ ) - { - // skip the variable already considered - if ( pVarTaken[i] ) - continue; - // find all the vars symmetric with this one - for ( k = 0; k < nSize; k++ ) - { - if ( k == i ) - continue; - if ( pSymms->pSymms[i][k] == 0 ) - continue; - // vars i and k are symmetric - assert( pVarTaken[k] == 0 ); - // there is a new symmetry pair - if ( fStart == 1 ) - { // start a new symmetry class - fStart = 0; - printf( " { %s", pInputNames[ pSymms->pVars[i] ] ); - // mark the var as taken - pVarTaken[i] = 1; - } - printf( " %s", pInputNames[ pSymms->pVars[k] ] ); - // mark the var as taken - pVarTaken[k] = 1; - } - if ( fStart == 0 ) - { - printf( " }" ); - fStart = 1; - } - } - printf( "\n" ); - - free( pInputNames ); - free( pVarTaken ); -} - - -//////////////////////////////////////////////////////////////////////// -/// END OF FILE /// -//////////////////////////////////////////////////////////////////////// - - |