66 Abc_Ntk_t * pNtkVer, * pNtkSyn, * pNtkSyn2, * pNtkTemp;
68 abctime clkTotal = Abc_Clock(), clkS, clkV;
69 int nIters, nInputs, RetValue, fFound = 0;
71 assert( Abc_NtkIsStrash(pNtk) );
72 assert( Abc_NtkIsComb(pNtk) );
73 assert( Abc_NtkPoNum(pNtk) == 1 );
74 assert( nPars > 0 && nPars < Abc_NtkPiNum(pNtk) );
76 nInputs = Abc_NtkPiNum(pNtk) - nPars;
85 Vec_Int_t * vVarMap, * vForAlls, * vExists;
90 vVarMap = Vec_IntStart( pCnf->
nVars );
93 Vec_IntWriteEntry( vVarMap, pCnf->
pVarNums[Aig_ObjId(pObj)], 1 );
95 vForAlls = Vec_IntAlloc( nPars );
96 vExists = Vec_IntAlloc( Abc_NtkPiNum(pNtk) - nPars );
99 Vec_IntPush( vForAlls, i );
101 Vec_IntPush( vExists, i );
107 Vec_IntFree( vForAlls );
108 Vec_IntFree( vExists );
109 Vec_IntFree( vVarMap );
110 printf(
"The 2QBF formula was written into file \"%s\".\n", pFileName );
115 vPiValues = Vec_IntStart( Abc_NtkPiNum(pNtk) );
121 for ( i = nPars; i < Abc_NtkPiNum(pNtk); i++ )
122 Vec_IntWriteEntry( vPiValues, i, rand() & 1 );
125 Abc_NtkVectorClearPars( vPiValues, nPars );
129 printf(
"Iter %2d : ", 0 );
130 printf(
"AIG = %6d ", Abc_NtkNodeNum(pNtkSyn) );
131 Abc_NtkVectorPrintVars( pNtk, vPiValues, nPars );
136 for ( nIters = 0; nIters < nItersMax; nIters++ )
141 RetValue =
Abc_NtkDSat( pNtkSyn, (ABC_INT64_T)0, (ABC_INT64_T)0, 0, 0, 0, 1, 0, 0, 0 );
142clkS = Abc_Clock() - clkS;
144 Abc_NtkModelToVector( pNtkSyn, vPiValues );
149 if ( RetValue == -1 )
151 printf(
"Synthesis timed out.\n" );
157 Abc_NtkVectorClearVars( pNtk, vPiValues, nPars );
160 Abc_ObjXorFaninC( Abc_NtkPo(pNtkVer,0), 0 );
165clkV = Abc_Clock() - clkV;
167 Abc_NtkModelToVector( pNtkVer, vPiValues );
174 if ( RetValue == -1 )
176 printf(
"Verification timed out.\n" );
182 Abc_NtkVectorClearPars( vPiValues, nPars );
191 printf(
"Iter %2d : ", nIters+1 );
192 printf(
"AIG = %6d ", Abc_NtkNodeNum(pNtkSyn) );
193 Abc_NtkVectorPrintVars( pNtk, vPiValues, nPars );
203 int nZeros = Vec_IntCountZero( vPiValues );
204 printf(
"Parameters: " );
205 Abc_NtkVectorPrintPars( vPiValues, nPars );
206 printf(
" Statistics: 0=%d 1=%d\n", nZeros, nPars - nZeros );
207 printf(
"Solved after %d iterations. ", nIters );
209 else if ( nIters == nItersMax )
210 printf(
"Quit after %d iterations. ", nItersMax );
212 printf(
"Implementation does not exist. " );
213 ABC_PRT(
"Total runtime", Abc_Clock() - clkTotal );
214 Vec_IntFree( vPiValues );
int Abc_NtkDSat(Abc_Ntk_t *pNtk, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, int nLearnedStart, int nLearnedDelta, int nLearnedPerce, int fAlignPol, int fAndOuts, int fNewSolver, int fVerbose)