65 int i, CountConst0 = 0, CountNonConst0 = 0, CountUndecided = 0;
70 pChild = Aig_ObjChild0(pObj);
72 if ( pChild == Aig_ManConst0(
p) )
78 if ( pChild == Aig_ManConst1(
p) )
84 if ( Aig_ObjIsCi(Aig_Regular(pChild)) && Aig_ObjCioId(Aig_Regular(pChild)) <
p->nTruePis )
90 if ( Aig_Regular(pChild)->fPhase != (
unsigned)Aig_IsComplement(pChild) )
107 if ( CountNonConst0 )
109 if ( CountUndecided )
131 pChild = Aig_ObjChild0(pObj);
133 if ( pChild == Aig_ManConst0(
p) )
136 if ( pChild == Aig_ManConst1(
p) )
139 if ( Aig_Regular(pChild)->fPhase != (
unsigned)Aig_IsComplement(pChild) )
158 static int Counter = 0;
166 sprintf( FileName,
"aig\\%03d.blif", ++Counter );
168 printf(
"Speculation cone with %d nodes was written into file \"%s\".\n", Aig_ManNodeNum(pTemp), FileName );
190 assert( Aig_ManCiNum(
p->pManAig) == Vec_IntSize(vCex) );
195 Aig_ManConst1(
p->pManAig)->fMarkB = 1;
197 pObj->
fMarkB = Vec_IntEntry(vCex, i);
199 pObj->
fMarkB = (Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj)) &
200 (Aig_ObjFanin1(pObj)->fMarkB ^ Aig_ObjFaninC1(pObj));
202 pObj->
fMarkB = Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj);
207 printf(
"The node %d is not constant under cex!\n", pObj->
Id );
211 for ( c = 1; ppClass[c]; c++ )
212 if ( (ppClass[0]->fPhase ^ ppClass[c]->fPhase) != (ppClass[0]->fMarkB ^ ppClass[c]->fMarkB) )
213 printf(
"The nodes %d and %d are not equal under cex!\n", ppClass[0]->Id, ppClass[c]->Id );
236 Aig_Obj_t * pObjRepr, * pObjFraig, * pObjFraig2, * pObjReprFraig;
238 assert( !Aig_IsComplement(pObj) );
240 pObjRepr = Fra_ClassObjRepr( pObj );
241 if ( pObjRepr == NULL ||
242 (!
p->pPars->fDoSparse && pObjRepr == Aig_ManConst1(
p->pManAig)) )
245 pObjFraig = Fra_ObjFraig( pObj,
p->pPars->nFramesK );
247 pObjReprFraig = Fra_ObjFraig( pObjRepr,
p->pPars->nFramesK );
249 if ( Aig_Regular(pObjFraig) == Aig_Regular(pObjReprFraig) )
251 p->nSatCallsSkipped++;
254 assert(
p->pPars->nFramesK || Aig_Regular(pObjFraig) != Aig_ManConst1(
p->pManFraig) );
256 RetValue =
Fra_NodesAreEquiv(
p, Aig_Regular(pObjReprFraig), Aig_Regular(pObjFraig) );
262 pObjFraig2 = Aig_NotCond( pObjReprFraig, pObj->
fPhase ^ pObjRepr->
fPhase );
263 Fra_ObjSetFraig( pObj,
p->pPars->nFramesK, pObjFraig2 );
266 if ( RetValue == -1 )
268 if (
p->vTimeouts == NULL )
269 p->vTimeouts = Vec_PtrAlloc( 100 );
270 Vec_PtrPush(
p->vTimeouts, pObj );
271 if ( !
p->pPars->fSpeculate )
276 pObjFraig2 = Aig_NotCond( pObjReprFraig, pObj->
fPhase ^ pObjRepr->
fPhase );
277 Fra_ObjSetFraig( pObj,
p->pPars->nFramesK, pObjFraig2 );
278 Fra_FraigNodeSpeculate(
p, pObj, Aig_Regular(pObjFraig), Aig_Regular(pObjReprFraig) );
282 p->pCla->fRefinement = 1;
286 Vec_PtrPush(
p->vTimeouts, pObj );
292 if (
p->pManFraig->pData )
294 if ( !
p->pPars->nFramesK && Fra_ClassObjRepr(pObj) == pObjRepr )
295 printf(
"Fra_FraigNode(): Error in class refinement!\n" );
296 assert(
p->pPars->nFramesK || Fra_ClassObjRepr(pObj) != pObjRepr );
319 Fra_FraigNode(
p, pObj );
320 if (
p->pPars->fUseImps )
323 if (
p->pPars->fLatchCorr )
328 nBTracksOld =
p->pPars->nBTLimitNode;
334 pObjNew =
Aig_And(
p->pManFraig, Fra_ObjChild0Fra(pObj,
p->pPars->nFramesK), Fra_ObjChild1Fra(pObj,
p->pPars->nFramesK) );
335 Fra_ObjSetFraig( pObj,
p->pPars->nFramesK, pObjNew );
336 Aig_Regular(pObjNew)->pData =
p;
338 if (
p->pManFraig->pData )
343 if (
p->pPars->nLevelMax && (
int)pObj->
Level >
p->pPars->nLevelMax )
344 p->pPars->nBTLimitNode = 5;
345 Fra_FraigNode(
p, pObj );
346 if (
p->pPars->nLevelMax && (
int)pObj->
Level >
p->pPars->nLevelMax )
347 p->pPars->nBTLimitNode = nBTracksOld;
349 if (
p->pPars->fUseImps )
355 p->nNodesMiter = Aig_ManNodeNum(
p->pManFraig);
360 if (
p->pPars->fUseImps )
380 if ( Aig_ManNodeNum(pManAig) == 0 )
391 p->nNodesBeg = Aig_ManNodeNum(pManAig);
392 p->nRegsBeg = Aig_ManRegNum(pManAig);
394if (
p->pPars->fVerbose )
398 if ( pManAig->pImpFunc )
399 pManAig->pImpFunc(
p, pManAig->pImpData );
403 if (
p->pPars->fChoicing )
413p->timeTrav += Abc_Clock() - clk2;
419 pManAigNew =
p->pManFraig;
422p->timeTotal = Abc_Clock() - clk;
425 p->nNodesEnd = Aig_ManNodeNum(pManAigNew);
426 p->nRegsEnd = Aig_ManRegNum(pManAigNew);
446 pPars->nBTLimitNode = nConfMax;
447 pPars->fChoicing = 1;
448 pPars->fDoSparse = 1;
449 pPars->fSpeculate = 0;
452 pPars->fDontShowBar = 1;
453 pPars->nLevelMax = nLevelMax;
473 pPars->nBTLimitNode = nConfMax;
474 pPars->fChoicing = 0;
475 pPars->fDoSparse = 1;
476 pPars->fSpeculate = 0;
477 pPars->fProve = fProve;
479 pPars->fDontShowBar = 1;
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Aig_Man_t * Aig_ManDupRepr(Aig_Man_t *p, int fOrdered)
Aig_Man_t * Aig_ManDupOrdered(Aig_Man_t *p)
void Aig_ManReprStart(Aig_Man_t *p, int nIdMax)
DECLARATIONS ///.
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(Aig_Man_t *p)
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
struct Aig_Obj_t_ Aig_Obj_t
void Aig_ManMarkValidChoices(Aig_Man_t *p)
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
int Aig_ManCleanup(Aig_Man_t *p)
#define Aig_ManForEachCo(p, pObj, i)
#define Aig_ManForEachPoSeq(p, pObj, i)
Aig_Man_t * Aig_ManExtractMiter(Aig_Man_t *p, Aig_Obj_t *pNode1, Aig_Obj_t *pNode2)
#define Aig_ManForEachLoSeq(p, pObj, i)
void Aig_ManTransferRepr(Aig_Man_t *pNew, Aig_Man_t *p)
void Aig_ManDumpBlif(Aig_Man_t *p, char *pFileName, Vec_Ptr_t *vPiNames, Vec_Ptr_t *vPoNames)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Aig_Man_t * Fra_FraigEquivence(Aig_Man_t *pManAig, int nConfMax, int fProve)
Aig_Man_t * Fra_FraigPerform(Aig_Man_t *pManAig, Fra_Par_t *pPars)
ABC_NAMESPACE_IMPL_START int Fra_FraigMiterStatus(Aig_Man_t *p)
DECLARATIONS ///.
Aig_Man_t * Fra_FraigChoice(Aig_Man_t *pManAig, int nConfMax, int nLevelMax)
void Fra_FraigVerifyCounterEx(Fra_Man_t *p, Vec_Int_t *vCex)
int Fra_FraigMiterAssertedOutput(Aig_Man_t *p)
void Fra_FraigSweep(Fra_Man_t *p)
void Fra_ClassesCopyReprs(Fra_Cla_t *p, Vec_Ptr_t *vFailed)
int Fra_ImpCheckForNode(Fra_Man_t *p, Vec_Int_t *vImps, Aig_Obj_t *pNode, int Pos)
typedefABC_NAMESPACE_HEADER_START struct Fra_Par_t_ Fra_Par_t
INCLUDES ///.
void Fra_SmlSimulate(Fra_Man_t *p, int fInit)
void Fra_ImpCompactArray(Vec_Int_t *vImps)
struct Fra_Man_t_ Fra_Man_t
Fra_Sml_t * Fra_SmlStart(Aig_Man_t *pAig, int nPref, int nFrames, int nWordsFrame)
Aig_Man_t * Fra_ManPrepareComb(Fra_Man_t *p)
void Fra_ManStop(Fra_Man_t *p)
int Fra_ClassesCountLits(Fra_Cla_t *p)
Fra_Man_t * Fra_ManStart(Aig_Man_t *pManAig, Fra_Par_t *pParams)
void Fra_SmlResimulate(Fra_Man_t *p)
void Fra_ManFinalizeComb(Fra_Man_t *p)
void Fra_ClassesPrint(Fra_Cla_t *p, int fVeryVerbose)
void Fra_ParamsDefault(Fra_Par_t *pParams)
DECLARATIONS ///.
int Fra_NodesAreEquiv(Fra_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew)
FUNCTION DEFINITIONS ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.