00001
00021 #include "abc.h"
00022
00026
00027 static void Abc_NtkPrintUnateBdd( Abc_Ntk_t * pNtk, int fUseNaive, int fVerbose );
00028 static void Abc_NtkPrintUnateSat( Abc_Ntk_t * pNtk, int fVerbose );
00029
00033
00045 void Abc_NtkPrintUnate( Abc_Ntk_t * pNtk, int fUseBdds, int fUseNaive, int fVerbose )
00046 {
00047 if ( fUseBdds || fUseNaive )
00048 Abc_NtkPrintUnateBdd( pNtk, fUseNaive, fVerbose );
00049 else
00050 Abc_NtkPrintUnateSat( pNtk, fVerbose );
00051 }
00052
00064 void Abc_NtkPrintUnateBdd( Abc_Ntk_t * pNtk, int fUseNaive, int fVerbose )
00065 {
00066 Abc_Obj_t * pNode;
00067 Extra_UnateInfo_t * p;
00068 DdManager * dd;
00069
00070 int TotalSupps = 0;
00071 int TotalUnate = 0;
00072 int i, clk = clock();
00073 int clkBdd, clkUnate;
00074
00075
00076 dd = Abc_NtkBuildGlobalBdds(pNtk, 10000000, 1, 1, fVerbose);
00077 if ( dd == NULL )
00078 return;
00079 clkBdd = clock() - clk;
00080
00081
00082
00083
00084
00085
00086
00087 printf( "Shared BDD size = %6d nodes.\n", Cudd_ReadKeys(dd) - Cudd_ReadDead(dd) );
00088
00089
00090 if ( fUseNaive )
00091 {
00092 Abc_NtkForEachCo( pNtk, pNode, i )
00093 {
00094
00095 p = Extra_UnateComputeSlow( dd, Abc_ObjGlobalBdd(pNode) );
00096 if ( fVerbose )
00097 Extra_UnateInfoPrint( p );
00098 TotalSupps += p->nVars;
00099 TotalUnate += p->nUnate;
00100 Extra_UnateInfoDissolve( p );
00101 }
00102 }
00103
00104 else
00105 {
00106
00107 Cudd_zddVarsFromBddVars( dd, 2 );
00108 Abc_NtkForEachCo( pNtk, pNode, i )
00109 {
00110
00111 p = Extra_UnateComputeFast( dd, Abc_ObjGlobalBdd(pNode) );
00112 if ( fVerbose )
00113 Extra_UnateInfoPrint( p );
00114 TotalSupps += p->nVars;
00115 TotalUnate += p->nUnate;
00116 Extra_UnateInfoDissolve( p );
00117 }
00118 }
00119 clkUnate = clock() - clk - clkBdd;
00120
00121
00122 printf( "Ins/Outs = %4d/%4d. Total supp = %5d. Total unate = %5d.\n",
00123 Abc_NtkCiNum(pNtk), Abc_NtkCoNum(pNtk), TotalSupps, TotalUnate );
00124 PRT( "Glob BDDs", clkBdd );
00125 PRT( "Unateness", clkUnate );
00126 PRT( "Total ", clock() - clk );
00127
00128
00129
00130
00131
00132
00133 Abc_NtkFreeGlobalBdds( pNtk, 1 );
00134 }
00135
00147 void Abc_NtkPrintUnateSat( Abc_Ntk_t * pNtk, int fVerbose )
00148 {
00149 }
00150
00154
00155