00001
00021 #include "cnf.h"
00022
00026
00027 static Cnf_Man_t * s_pManCnf = NULL;
00028
00032
00044 Cnf_Dat_t * Cnf_Derive( Aig_Man_t * pAig, int nOutputs )
00045 {
00046 Cnf_Man_t * p;
00047 Cnf_Dat_t * pCnf;
00048 Vec_Ptr_t * vMapped;
00049 Aig_MmFixed_t * pMemCuts;
00050 int clk;
00051
00052 if ( s_pManCnf == NULL )
00053 s_pManCnf = Cnf_ManStart();
00054
00055 p = s_pManCnf;
00056 p->pManAig = pAig;
00057
00058
00059 clk = clock();
00060 pMemCuts = Dar_ManComputeCuts( pAig, 10 );
00061 p->timeCuts = clock() - clk;
00062
00063
00064 clk = clock();
00065 Cnf_DeriveMapping( p );
00066 p->timeMap = clock() - clk;
00067
00068
00069
00070 clk = clock();
00071 Cnf_ManTransferCuts( p );
00072 vMapped = Cnf_ManScanMapping( p, 1, 1 );
00073 pCnf = Cnf_ManWriteCnf( p, vMapped, nOutputs );
00074 Vec_PtrFree( vMapped );
00075 Aig_MmFixedStop( pMemCuts, 0 );
00076 p->timeSave = clock() - clk;
00077
00078
00079 Aig_ManResetRefs( pAig );
00080
00081
00082
00083 return pCnf;
00084 }
00085
00097 Cnf_Man_t * Cnf_ManRead()
00098 {
00099 return s_pManCnf;
00100 }
00101
00113 void Cnf_ClearMemory()
00114 {
00115 if ( s_pManCnf == NULL )
00116 return;
00117 Cnf_ManStop( s_pManCnf );
00118 s_pManCnf = NULL;
00119 }
00120
00121
00122 #if 0
00123
00135 Cnf_Dat_t * Cnf_Derive_old( Aig_Man_t * pAig )
00136 {
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 vMapped = Aig_ManScanMapping( p, 1 );
00149 Vec_PtrFree( vMapped );
00150
00151 clk = clock();
00152 Cnf_ManTransferCuts( p );
00153
00154 Cnf_ManPostprocess( p );
00155 Cnf_ManScanMapping( p, 0 );
00156
00157
00158
00159
00160
00161
00162 PRT( "Ext ", clock() - clk );
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 Aig_MmFixedStop( pMemCuts, 0 );
00175 return NULL;
00176 }
00177
00178 #endif
00179
00180
00184
00185