48static inline int Gia_ManTerSimInfoGet(
unsigned * pInfo,
int i )
50 return 3 & (pInfo[i >> 4] >> ((i & 15) << 1));
52static inline void Gia_ManTerSimInfoSet(
unsigned * pInfo,
int i,
int Value )
55 Value ^= Gia_ManTerSimInfoGet( pInfo, i );
56 pInfo[i >> 4] ^= (Value << ((i & 15) << 1));
78 int nStateWords = Abc_BitWordNum( 2*Gia_ManCoNum(
p) );
88 vStates = Vec_PtrAlloc( 100 );
92 if ( nFrames && f == nFrames )
95 if ( !nFrames && *iFirst >= 0 && f == *iFirst + nFramesAdd )
101 pObj->
Value = Gia_XsimAndCond( Gia_ObjFanin0(pObj)->Value, Gia_ObjFaninC0(pObj), Gia_ObjFanin1(pObj)->Value, Gia_ObjFaninC1(pObj) );
103 pState =
ABC_ALLOC(
unsigned, nStateWords );
106 pObj->
Value = Gia_XsimNotCond( Gia_ObjFanin0(pObj)->Value, Gia_ObjFaninC0(pObj) );
107 Gia_ManTerSimInfoSet( pState, i, pObj->
Value );
108 if ( *iFirst == -1 && i < Gia_ManPoNum(
p) && pObj->
Value ==
GIA_UND )
111 Vec_PtrPush( vStates, pState );
115 Count[0] = Count[1] = Count[2] = Count[3] = 0;
117 Count[pObj->
Value]++;
118 printf(
"%5d : 0 =%7d 1 =%7d x =%7d all =%7d out = %s\n",
120 Gia_ManPo(
p, 0)->Value ==
GIA_UND ?
"x" :
"0" );
124 printf(
"Finished %d frames. First x-valued PO is in frame %d. ", nFrames, *iFirst );
126 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
147 if ( Gia_ObjIsAnd(pObj) )
151 pObj->
Value = Gia_XsimAndCond( Gia_ObjFanin0(pObj)->Value, Gia_ObjFaninC0(pObj), Gia_ObjFanin1(pObj)->Value, Gia_ObjFaninC1(pObj) );
153 else if ( Gia_ObjIsRo(
p, pObj) )
154 pObj->
Value = pState ? Gia_ManTerSimInfoGet( pState, Gia_ObjCioId(Gia_ObjRoToRi(
p, pObj)) ) :
GIA_ZER;
155 else if ( Gia_ObjIsPi(
p, pObj) )
158 Vec_IntPush( vNodes, Gia_ObjId(
p, pObj) );
164 Vec_IntClear( vNodes );
165 Gia_ManConst0(
p)->fPhase = 1;
169 assert( Gia_ObjIsCo(pObj) );
171 pObj->
Value = Gia_XsimNotCond( Gia_ObjFanin0(pObj)->Value, Gia_ObjFaninC0(pObj) );
193 if ( Gia_ObjIsAnd(pObj) )
195 if ( Gia_ObjFanin0(pObj)->Value ==
GIA_UND )
197 else assert( Gia_ObjFanin0(pObj)->Value + Gia_ObjFaninC0(pObj) ==
GIA_ONE );
198 if ( Gia_ObjFanin1(pObj)->Value ==
GIA_UND )
200 else assert( Gia_ObjFanin1(pObj)->Value + Gia_ObjFaninC1(pObj) ==
GIA_ONE );
202 else if ( Gia_ObjIsRo(
p, pObj) )
203 Vec_IntPush( vLeaves, Gia_ObjId(
p, Gia_ObjRoToRi(
p, pObj)) );
209 Vec_IntClear( vLeaves );
212 Gia_ManConst0(
p)->fPhase = 0;
234 if ( Gia_ObjIsAnd(pObj) )
236 int iLit0 = 1, iLit1 = 1;
237 if ( Gia_ObjFanin0(pObj)->Value ==
GIA_UND )
239 if ( Gia_ObjFanin1(pObj)->Value ==
GIA_UND )
241 if ( Gia_ObjFanin0(pObj)->Value ==
GIA_UND )
242 iLit0 = Abc_LitNotCond( Vec_IntEntry(vMap, Gia_ObjFaninId0p(
p, pObj)), Gia_ObjFaninC0(pObj) );
243 if ( Gia_ObjFanin1(pObj)->Value ==
GIA_UND )
244 iLit1 = Abc_LitNotCond( Vec_IntEntry(vMap, Gia_ObjFaninId1p(
p, pObj)), Gia_ObjFaninC1(pObj) );
245 Vec_IntWriteEntry( vMap, Gia_ObjId(
p, pObj),
Gia_ManHashAnd(pNew, iLit0, iLit1) );
247 else if ( Gia_ObjIsRo(
p, pObj) )
248 assert( Vec_IntEntry(vMap, Gia_ObjId(
p, pObj)) != -1 );
249 else if ( Gia_ObjIsPi(
p, pObj) )
251 Vec_IntPush( vPiMap, Gia_ObjCioId(pObj) );
252 Vec_IntWriteEntry( vMap, Gia_ObjId(
p, pObj), Gia_ManAppendCi(pNew) );
262 assert( Gia_ObjIsCo(pObj) );
264 iLit = Abc_LitNotCond( Vec_IntEntry(vMap, Gia_ObjFaninId0p(
p, pObj)), Gia_ObjFaninC0(pObj) );
265 Vec_IntWriteEntry( vMap, Gia_ObjId(
p, pObj), iLit );
267 Gia_ManConst0(
p)->fPhase = 0;
289 Vec_Int_t * vRoots, * vCone, * vLeaves, * vMap;
290 unsigned * pStateF, * pStateP;
293 vCone = Vec_IntAlloc( 1000 );
294 vLeaves = Vec_IntAlloc( 1000 );
296 vStates =
Bmc_MnaTernary( pGia, nFramesMax, nFramesAdd, fVerbose, &iFirst );
298 *pvPiMap = Vec_IntAlloc( 1000 );
299 vBegins = Vec_PtrStart( Vec_PtrSize(vStates) );
300 for ( f = Vec_PtrSize(vStates) - 1; f >= 0; f-- )
303 pStateF = (
unsigned *)Vec_PtrEntry(vStates, f);
304 pStateP = f ? (
unsigned *)Vec_PtrEntry(vStates, f-1) : 0;
306 vRoots = Vec_IntAlloc( 100 );
308 if ( Gia_ManTerSimInfoGet( pStateF, Gia_ObjCioId(pObj) ) ==
GIA_UND )
309 Vec_IntPush( vRoots, Gia_ObjId(pGia, pObj) );
311 Vec_IntAppend( vRoots, vLeaves );
312 Vec_PtrWriteEntry( vBegins, f, vRoots );
317 printf(
"Frame %4d : Roots = %6d Leaves = %6d Cone = %6d\n",
318 f, Vec_IntSize(vRoots), Vec_IntSize(vLeaves), Vec_IntSize(vCone) );
319 if ( Vec_IntSize(vLeaves) == 0 )
325 vMap = Vec_IntStartFull( Gia_ManObjNum(pGia) );
329 for ( f = 0; f < Vec_PtrSize(vStates); f++ )
331 vRoots = (
Vec_Int_t *)Vec_PtrEntry( vBegins, f );
332 if ( vRoots == NULL )
335 Gia_ManAppendCo( pNew, 0 );
339 pStateF = (
unsigned *)Vec_PtrEntry(vStates, f);
340 pStateP = f ? (
unsigned *)Vec_PtrEntry(vStates, f-1) : 0;
343 Vec_IntWriteEntry( vMap, Gia_ObjId(pGia, pObj), 0 );
345 Vec_IntPush( *pvPiMap, -f-1 );
347 Bmc_MnaBuild( pGia, vRoots, vCone, pNew, vMap, *pvPiMap );
349 printf(
"Frame %4d : Roots = %6d Leaves = %6d Cone = %6d\n",
350 f, Vec_IntSize(vRoots), Vec_IntSize(vLeaves), Vec_IntSize(vCone) );
353 Gia_ManAppendCo( pNew, Vec_IntEntry(vMap, Gia_ObjId(pGia, pObj)) );
356 if ( Gia_ObjIsRi(pGia, pObj) )
357 Vec_IntWriteEntry( vMap, Gia_ObjId(pGia, Gia_ObjRiToRo(pGia, pObj)), Vec_IntEntry(vMap, Gia_ObjId(pGia, pObj)) );
364 Vec_PtrFreeFree( vStates );
365 Vec_IntFree( vLeaves );
366 Vec_IntFree( vCone );
393 p->vId2Var = Vec_IntAlloc( 0 );
394 p->vInputs = Vec_IntAlloc( 1000 );
395 p->vOutputs = Vec_IntAlloc( 1000 );
396 p->vNodes = Vec_IntAlloc( 10000 );
399 p->clkStart = Abc_Clock();
406 Vec_IntFreeP( &
p->vPiMap );
407 Vec_IntFreeP( &
p->vId2Var );
408 Vec_IntFreeP( &
p->vInputs );
409 Vec_IntFreeP( &
p->vOutputs );
410 Vec_IntFreeP( &
p->vNodes );
433 vTempIn = Vec_IntAlloc( Vec_IntSize(vIns) );
435 Vec_IntPush( vTempIn, pObj->
Value );
437 vTempNode = Vec_IntAlloc( Vec_IntSize(vNodes) );
439 Vec_IntPush( vTempNode, pObj->
Value );
444 pObj->
Value = Vec_IntEntry( vTempIn, i );
447 pObj->
Value = Vec_IntEntry( vTempNode, i );
451 Vec_IntFree( vTempIn );
452 Vec_IntFree( vTempNode );
469 int i, iObj = 0, VarC0 =
p->nSatVars++;
471 if ( Vec_IntEntry(
p->vId2Var, iObj ) == 0 )
472 Vec_IntWriteEntry(
p->vId2Var, iObj,
p->nSatVars++ );
475 assert( Vec_IntEntry(
p->vId2Var, iObj ) == 0 );
476 Vec_IntWriteEntry(
p->vId2Var, iObj,
p->nSatVars++ );
480 assert( Vec_IntEntry(
p->vId2Var, iObj ) == 0 );
481 Vec_IntWriteEntry(
p->vId2Var, iObj,
p->nSatVars++ );
507 int i, iObj = 0, VarC0;
509 vUsed = Vec_IntAlloc( pCnf->
nVars - Vec_IntSize(vIns) - Vec_IntSize(vOuts) );
512 Vec_IntPush( vUsed, Vec_IntEntry(vNodes, i - Vec_IntSize(vIns) - 1) );
515 Vec_IntFree( vUsed );
517 vMap = Vec_IntStartFull( pCnf->
nVars );
519 Vec_IntWriteEntry( vMap, pCnf->
pVarNums[0], VarC0 );
525 if ( Gia_ObjIsCi(pObj) )
526 iObj = Vec_IntEntry( vIns, i - 1 );
527 else if ( Gia_ObjIsAnd(pObj) )
528 iObj = Vec_IntEntry( vNodes, i - Vec_IntSize(vIns) - 1 );
529 else if ( Gia_ObjIsCo(pObj) )
530 iObj = Vec_IntEntry( vOuts, i - Vec_IntSize(vIns) - Vec_IntSize(vNodes) - 1 );
532 assert( Vec_IntEntry(
p->vId2Var, iObj) > 0 );
533 Vec_IntWriteEntry( vMap, pCnf->
pVarNums[i], Vec_IntEntry(
p->vId2Var, iObj) );
540 pCnf->
pClauses[0][i] = Abc_Lit2LitV( Vec_IntArray(vMap), pCnf->
pClauses[0][i] );
544 for ( i = 0; i < pCnf->
nClauses; i++ )
555 if ( i < pCnf->nClauses )
556 printf(
"SAT solver became UNSAT after adding clauses.\n" );
579 iObj = Gia_ObjId(
p->pFrames, pObj );
580 if ( Gia_ObjIsAnd(pObj) && Vec_IntEntry(
p->vId2Var, iObj) == 0 )
584 Vec_IntPush(
p->vNodes, iObj );
587 Vec_IntPush(
p->vInputs, iObj );
593 Vec_IntClear(
p->vNodes );
594 Vec_IntClear(
p->vInputs );
595 Vec_IntClear(
p->vOutputs );
596 Vec_IntFillExtra(
p->vId2Var, Gia_ManObjNum(
p->pFrames), 0 );
597 for ( i = iStart; i < iStop; i++ )
599 pObj = Gia_ManPo(
p->pFrames, i);
600 if ( Gia_ObjChild0(pObj) == Gia_ManConst0(
p->pFrames) )
603 Vec_IntPush(
p->vOutputs, Gia_ObjId(
p->pFrames, pObj) );
626 for ( i = iStart; i < iStop; i++ )
627 if ( Gia_ObjChild0(Gia_ManPo(pFrames, i)) != Gia_ManConst0(pFrames) )
636 if ( Gia_ObjChild0(pObj) != Gia_ManConst0(pFrames) )
657 int f, i=0, Lit, status, RetValue = -2;
660 for ( f = 0; f < nFramesMax; f++ )
670 for ( i = f * Gia_ManPoNum(pGia); i < (f+1) * Gia_ManPoNum(pGia); i++ )
673 if ( Gia_ObjChild0(pObj) == Gia_ManConst0(
p->pFrames) )
675 Lit = Abc_Var2Lit( Vec_IntEntry(
p->vId2Var, Gia_ObjId(
p->pFrames, pObj)), 0 );
676 status =
sat_solver_solve(
p->pSat, &Lit, &Lit + 1, (ABC_INT64_T)pPars->
nConfLimit, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0 );
689 printf(
"%4d : PI =%9d. AIG =%9d. Var =%8d. In =%6d. And =%9d. Cla =%9d. Conf =%9d. Mem =%7.1f MB ",
690 f, Gia_ManPiNum(
p->pFrames), Gia_ManAndNum(
p->pFrames),
691 p->nSatVars-1, Vec_IntSize(
p->vInputs), Vec_IntSize(
p->vNodes),
693 Abc_PrintTime( 1,
"Time", Abc_Clock() -
p->clkStart );
695 if ( RetValue != -2 )
697 if ( RetValue == -1 )
698 printf(
"SAT solver reached conflict/runtime limit in frame %d.\n", f );
701 printf(
"Output %d of miter \"%s\" was asserted in frame %d. ",
702 i - f * Gia_ManPoNum(pGia), Gia_ManName(pGia), f );
703 Abc_PrintTime( 1,
"Time", Abc_Clock() -
p->clkStart );
708 if ( RetValue == -2 )
715 printf(
"Dumped unfolded frames into file \"frames.aig\".\n" );
738 int i, iObjId, iSatVar, iOrigPi;
739 int iFramePi = 0, iFrame = -1;
740 pCex =
Abc_CexAlloc( Gia_ManRegNum(
p), Gia_ManPiNum(
p), iOut / Gia_ManPoNum(
p) + 1 );
741 pCex->iFrame = iOut / Gia_ManPoNum(
p);
742 pCex->iPo = iOut % Gia_ManPoNum(
p);
752 iObjId = Gia_ObjId( pMan->pFrames, Gia_ManPi(pMan->pFrames, iFramePi) );
753 iSatVar = Vec_IntEntry( pMan->vId2Var, iObjId );
754 if ( sat_solver_var_value(pMan->pSat, iSatVar) )
755 Abc_InfoSetBit( pCex->pData, Gia_ManRegNum(
p) + Gia_ManPiNum(
p) * iFrame + iOrigPi );
758 assert( iFramePi == Gia_ManPiNum(pMan->pFrames) );
776 int nFramesMax, f, i=0, Lit, status, RetValue = -2;
780 nFramesMax = Gia_ManPoNum(
p->pFrames) / Gia_ManPoNum(pGia);
783 printf(
"Unfolding for %d frames with first non-trivial PO %d. ", nFramesMax,
Gia_ManBmcFindFirst(
p->pFrames) );
784 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
797 printf(
"Dumped unfolded frames into file \"frames.aig\".\n" );
799 for ( f = 0; f < nFramesMax; f++ )
808 for ( i = f * Gia_ManPoNum(pGia); i < (f+1) * Gia_ManPoNum(pGia); i++ )
811 if ( Gia_ObjChild0(pObj) == Gia_ManConst0(
p->pFrames) )
813 Lit = Abc_Var2Lit( Vec_IntEntry(
p->vId2Var, Gia_ObjId(
p->pFrames, pObj)), 0 );
814 status =
sat_solver_solve(
p->pSat, &Lit, &Lit + 1, (ABC_INT64_T)pPars->
nConfLimit, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0 );
826 printf(
"%4d : PI =%9d. AIG =%9d. Var =%8d. In =%6d. And =%9d. Cla =%9d. Conf =%9d. Mem =%7.1f MB ",
827 f, Gia_ManPiNum(
p->pFrames), Gia_ManAndNum(
p->pFrames),
828 p->nSatVars-1, Vec_IntSize(
p->vInputs), Vec_IntSize(
p->vNodes),
830 Abc_PrintTime( 1,
"Time", Abc_Clock() -
p->clkStart );
833 if ( RetValue != -2 )
835 if ( RetValue == -1 )
836 printf(
"SAT solver reached conflict/runtime limit in frame %d.\n", f );
841 printf(
"Output %d of miter \"%s\" was asserted in frame %d. ",
842 i - f * Gia_ManPoNum(pGia), Gia_ManName(pGia), f );
843 Abc_PrintTime( 1,
"Time", Abc_Clock() -
p->clkStart );
849 if ( RetValue == -2 )
870 int iObj = Gia_ObjId(
p->pFrames, pObj );
871 if ( Vec_IntEntry(
p->vId2Var, iObj) > 0 )
873 Vec_IntWriteEntry(
p->vId2Var, iObj, 1);
874 if ( Gia_ObjIsAnd(pObj) &&
p->pCnf->pObj2Count[iObj] == -1 )
880 Vec_IntWriteEntry(
p->vId2Var, iObj,
p->nSatVars++);
881 if ( Gia_ObjIsAnd(pObj) || Gia_ObjIsPo(
p->pFrames, pObj) )
885 if ( Gia_ObjIsAnd(pObj) )
891 nClas =
p->pCnf->pObj2Count[iObj];
892 iCla =
p->pCnf->pObj2Clause[iObj];
893 for ( i = 0; i < nClas; i++ )
895 int nLits, pLits[10];
896 int * pClauseThis =
p->pCnf->pClauses[iCla+i];
897 int * pClauseNext =
p->pCnf->pClauses[iCla+i+1];
898 for ( nLits = 0; pClauseThis + nLits < pClauseNext; nLits++ )
900 if ( pClauseThis[nLits] < 2 )
901 printf(
"\n\n\nError in CNF generation: Constant literal!\n\n\n" );
902 assert( pClauseThis[nLits] > 1 && pClauseThis[nLits] < 2*Gia_ManObjNum(
p->pFrames) );
903 pLits[nLits] = Abc_Lit2LitV( Vec_IntArray(
p->vId2Var), pClauseThis[nLits] );
910 printf(
"SAT solver became UNSAT after adding clauses.\n" );
912 else assert( Gia_ObjIsCi(pObj) );
918 for ( i = iStart; i < iStop; i++ )
920 pObj = Gia_ManPo(
p->pFrames, i);
921 if ( Gia_ObjFanin0(pObj) == Gia_ManConst0(
p->pFrames) )
961 int nFramesMax, f, i=0, Lit = 1, status, RetValue = -2;
964 sat_solver_set_runtime_limit(
p->pSat, pPars->
nTimeOut ? pPars->
nTimeOut * CLOCKS_PER_SEC + Abc_Clock(): 0 );
966 nFramesMax = Gia_ManPoNum(
p->pFrames) / Gia_ManPoNum(pGia);
969 printf(
"Unfolding for %d frames with first non-trivial PO %d. ", nFramesMax,
Gia_ManBmcFindFirst(
p->pFrames) );
970 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
981 printf(
"Dumped unfolded frames into file \"frames.aig\".\n" );
984 p->pCnf = Cnf_DeriveGia(
p->pFrames );
991 Vec_IntFillExtra(
p->vId2Var, Gia_ManObjNum(
p->pFrames), 0 );
994 for ( f = 0; f < nFramesMax; f++ )
1001 for ( i = f * Gia_ManPoNum(pGia); i < (f+1) * Gia_ManPoNum(pGia); i++ )
1004 if ( Gia_ObjChild0(pObj) == Gia_ManConst0(
p->pFrames) )
1006 if ( Gia_ObjChild0(pObj) == Gia_ManConst1(
p->pFrames) )
1008 printf(
"Output %d is trivially SAT.\n", i );
1011 Lit = Abc_Var2Lit( Vec_IntEntry(
p->vId2Var, Gia_ObjId(
p->pFrames, pObj)), 0 );
1012 status =
sat_solver_solve(
p->pSat, &Lit, &Lit + 1, (ABC_INT64_T)pPars->
nConfLimit, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0 );
1024 printf(
"%4d : PI =%9d. AIG =%9d. Var =%8d. In =%6d. And =%9d. Cla =%9d. Conf =%9d. Mem =%7.1f MB ",
1025 f, Gia_ManPiNum(
p->pFrames), Gia_ManAndNum(
p->pFrames),
1026 p->nSatVars-1, Vec_IntSize(
p->vInputs), Vec_IntSize(
p->vNodes),
1028 Abc_PrintTime( 1,
"Time", Abc_Clock() -
p->clkStart );
1031 if ( RetValue != -2 )
1033 if ( RetValue == -1 )
1034 printf(
"SAT solver reached conflict/runtime limit in frame %d.\n", f );
1039 printf(
"Output %d of miter \"%s\" was asserted in frame %d. ",
1040 i - f * Gia_ManPoNum(pGia), Gia_ManName(pGia), f );
1041 Abc_PrintTime( 1,
"Time", Abc_Clock() -
p->clkStart );
1047 if ( RetValue == -2 )
1075 if ( TimeToStop && TimeToStop < Abc_Clock() )
1082 pPars->
nTimeOut = Abc_MinInt( pPars->
nTimeOut-1, (
int)((TimeToStop - Abc_Clock()) / CLOCKS_PER_SEC) );
#define ABC_ALLOC(type, num)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManStop(Aig_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Gia_Man_t * Gia_ManBmcDupCone(Gia_Man_t *p, Vec_Int_t *vIns, Vec_Int_t *vNodes, Vec_Int_t *vOuts)
void Bmc_MnaBuild(Gia_Man_t *p, Vec_Int_t *vCos, Vec_Int_t *vNodes, Gia_Man_t *pNew, Vec_Int_t *vMap, Vec_Int_t *vPiMap)
void Gia_ManBmcAddCone_rec(Bmc_Mna_t *p, Gia_Obj_t *pObj)
void Bmc_MnaCollect(Gia_Man_t *p, Vec_Int_t *vCos, Vec_Int_t *vNodes, unsigned *pState)
void Gia_ManBmcAddCone(Bmc_Mna_t *p, int iStart, int iStop)
void Gia_ManBmcAddCnfNew(Bmc_Mna_t *p, int iStart, int iStop)
Vec_Ptr_t * Bmc_MnaTernary(Gia_Man_t *p, int nFrames, int nFramesAdd, int fVerbose, int *iFirst)
FUNCTION DEFINITIONS ///.
int Gia_ManBmcFindFirst(Gia_Man_t *pFrames)
Gia_Man_t * Gia_ManBmcUnroll(Gia_Man_t *pGia, int nFramesMax, int nFramesAdd, int fVerbose, Vec_Int_t **pvPiMap)
void Bmc_MnaCollect_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vNodes, unsigned *pState)
Abc_Cex_t * Gia_ManBmcCexGen(Bmc_Mna_t *pMan, Gia_Man_t *p, int iOut)
Bmc_Mna_t * Bmc_MnaAlloc()
void Gia_ManBmcAddCnf(Bmc_Mna_t *p, Gia_Man_t *pGia, Vec_Int_t *vIns, Vec_Int_t *vNodes, Vec_Int_t *vOuts)
int Gia_ManBmcCheckOutputs(Gia_Man_t *pFrames, int iStart, int iStop)
void Gia_ManBmcAddCnfNew_rec(Bmc_Mna_t *p, Gia_Obj_t *pObj)
void Bmc_MnaBuild_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Gia_Man_t *pNew, Vec_Int_t *vMap, Vec_Int_t *vPiMap)
void Bmc_MnaSelect(Gia_Man_t *p, Vec_Int_t *vCos, Vec_Int_t *vNodes, Vec_Int_t *vLeaves)
void Bmc_MnaSelect_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vLeaves)
typedefABC_NAMESPACE_IMPL_START struct Bmc_Mna_t_ Bmc_Mna_t
DECLARATIONS ///.
void Bmc_MnaFree(Bmc_Mna_t *p)
int Gia_ManBmcPerformInt(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
int Gia_ManBmcPerform_Unr(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
int Gia_ManBmcAssignVarIds(Bmc_Mna_t *p, Vec_Int_t *vIns, Vec_Int_t *vUsed, Vec_Int_t *vOuts)
int Gia_ManBmcPerform(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
int Gia_ManBmcPerform_old_cnf(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
Gia_Man_t * Unr_ManUnrollFrame(Unr_Man_t *p, int f)
Unr_Man_t * Unr_ManUnrollStart(Gia_Man_t *pGia, int fVerbose)
void Unr_ManFree(Unr_Man_t *p)
struct Bmc_AndPar_t_ Bmc_AndPar_t
struct Unr_Man_t_ Unr_Man_t
#define sat_solver_addclause
Cnf_Dat_t * Cnf_Derive(Aig_Man_t *pAig, int nOutputs)
Cnf_Dat_t * Cnf_DeriveOther(Aig_Man_t *pAig, int fSkipTtMin)
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
Aig_Man_t * Gia_ManToAigSimple(Gia_Man_t *p)
void Gia_ManStop(Gia_Man_t *p)
void Gia_ManHashStart(Gia_Man_t *p)
double Gia_ManMemory(Gia_Man_t *p)
#define Gia_ManForEachPo(p, pObj, i)
#define Gia_ManForEachAnd(p, pObj, i)
#define Gia_ManForEachPi(p, pObj, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObj1(p, pObj, i)
Gia_Man_t * Gia_ManDupFromVecs(Gia_Man_t *p, Vec_Int_t *vCis, Vec_Int_t *vAnds, Vec_Int_t *vCos, int nRegs)
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
void Gia_ManCleanPhase(Gia_Man_t *p)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
Gia_Man_t * Gia_ManAigSyn2(Gia_Man_t *p, int fOldAlgo, int fCoarsen, int fCutMin, int nRelaxRatio, int fDelayMin, int fVerbose, int fVeryVerbose)
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachRiRo(p, pObjRi, pObjRo, i)
void Gia_ManHashStop(Gia_Man_t *p)
void Gia_ManPrintStats(Gia_Man_t *p, Gps_Par_t *pPars)
#define Gia_ManForEachRi(p, pObj, i)
void * Mf_ManGenerateCnf(Gia_Man_t *pGia, int nLutSize, int fCnfObjIds, int fAddOrCla, int fMapping, int fVerbose)
void Gia_AigerWrite(Gia_Man_t *p, char *pFileName, int fWriteSymbols, int fCompact, int fWriteNewLine)
sat_solver * sat_solver_new(void)
int sat_solver_nconflicts(sat_solver *s)
int sat_solver_nclauses(sat_solver *s)
void sat_solver_setnvars(sat_solver *s, int n)
int sat_solver_nvars(sat_solver *s)
void sat_solver_delete(sat_solver *s)
ABC_NAMESPACE_IMPL_START Abc_Cex_t * Abc_CexAlloc(int nRegs, int nRealPis, int nFrames)
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryReverse(vVec, pEntry, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.