00001
00021 #include "abc.h"
00022
00023
00024
00025
00026
00027
00028
00029
00033
00034 extern int Abc_CascadeExperiment( char * pFileGeneric, DdManager * dd, DdNode ** pOutputs, int nInputs, int nOutputs, int nLutSize, int fCheck, int fVerbose );
00035
00039
00051 Abc_Ntk_t * Abc_NtkCascade( Abc_Ntk_t * pNtk, int nLutSize, int fCheck, int fVerbose )
00052 {
00053 DdManager * dd;
00054 DdNode ** ppOutputs;
00055 Abc_Ntk_t * pNtkNew;
00056 Abc_Obj_t * pNode;
00057 char * pFileGeneric;
00058 int fBddSizeMax = 500000;
00059 int fReorder = 1;
00060 int i, clk = clock();
00061
00062 assert( Abc_NtkIsStrash(pNtk) );
00063
00064 if ( Abc_NtkBuildGlobalBdds(pNtk, fBddSizeMax, 1, fReorder, fVerbose) == NULL )
00065 return NULL;
00066
00067 if ( fVerbose )
00068 {
00069 DdManager * dd = Abc_NtkGlobalBddMan( pNtk );
00070 printf( "Shared BDD size = %6d nodes. ", Cudd_ReadKeys(dd) - Cudd_ReadDead(dd) );
00071 PRT( "BDD construction time", clock() - clk );
00072 }
00073
00074
00075 dd = Abc_NtkGlobalBddMan( pNtk );
00076 ppOutputs = ALLOC( DdNode *, Abc_NtkCoNum(pNtk) );
00077 Abc_NtkForEachCo( pNtk, pNode, i )
00078 ppOutputs[i] = Abc_ObjGlobalBdd(pNode);
00079
00080
00081 pFileGeneric = Extra_FileNameGeneric( pNtk->pSpec );
00082 if ( !Abc_CascadeExperiment( pFileGeneric, dd, ppOutputs, Abc_NtkCiNum(pNtk), Abc_NtkCoNum(pNtk), nLutSize, fCheck, fVerbose ) )
00083 {
00084
00085 }
00086
00087
00088 pNtkNew = Abc_NtkDup( pNtk );
00089
00090
00091 Abc_NtkFreeGlobalBdds( pNtk, 1 );
00092 free( ppOutputs );
00093 free( pFileGeneric );
00094
00095
00096
00097
00098 if ( !Abc_NtkCheck( pNtkNew ) )
00099 {
00100 printf( "Abc_NtkCollapse: The network check has failed.\n" );
00101 Abc_NtkDelete( pNtkNew );
00102 return NULL;
00103 }
00104 return pNtkNew;
00105 }
00106
00110
00111