54static inline Aig_Obj_t * Bmc_ObjChild0Frames(
Aig_Obj_t * pObj,
int i ) {
assert( !Aig_IsComplement(pObj) );
return Aig_ObjFanin0(pObj)? Aig_NotCond(Bmc_ObjFrames(Aig_ObjFanin0(pObj),i), Aig_ObjFaninC0(pObj)) : NULL; }
55static inline Aig_Obj_t * Bmc_ObjChild1Frames(
Aig_Obj_t * pObj,
int i ) {
assert( !Aig_IsComplement(pObj) );
return Aig_ObjFanin1(pObj)? Aig_NotCond(Bmc_ObjFrames(Aig_ObjFanin1(pObj),i), Aig_ObjFaninC1(pObj)) : NULL; }
78 for ( i =
p->pBmc->nPref; i < p->pBmc->nFramesAll; i++ )
80 pObjFrames0 = Aig_Regular( Bmc_ObjFrames(pObj0, i) );
81 pObjFrames1 = Aig_Regular( Bmc_ObjFrames(pObj1, i) );
82 if ( pObjFrames0 == pObjFrames1 )
84 pObjFraig0 = Aig_Regular( Bmc_ObjFraig(pObjFrames0) );
85 pObjFraig1 = Aig_Regular( Bmc_ObjFraig(pObjFrames1) );
86 if ( pObjFraig0 != pObjFraig1 )
126 int i, f, Imp, Left, Right;
127 int fComplL, fComplR;
134 Left = Fra_ImpLeft(Imp);
135 Right = Fra_ImpRight(Imp);
137 pLeft = Aig_ManObj( pBmc->
pAig, Left );
138 pRight = Aig_ManObj( pBmc->
pAig, Right );
140 for ( f = pBmc->
nPref; f < pBmc->nFramesAll; f++ )
143 pLeftT = Bmc_ObjFrames( pLeft, f );
144 pRightT = Bmc_ObjFrames( pRight, f );
146 pLeftF = Fra_ObjFraig( Aig_Regular(pLeftT), 0 );
147 pRightF = Fra_ObjFraig( Aig_Regular(pRightT), 0 );
149 fComplL = pLeft->
fPhase ^ Aig_IsComplement(pLeftF) ^ Aig_IsComplement(pLeftT);
150 fComplR = pRight->
fPhase ^ Aig_IsComplement(pRightF) ^ Aig_IsComplement(pRightT);
152 if ( Aig_Regular(pLeftF) == Aig_Regular(pRightF) )
154 if ( fComplL == fComplR )
156 assert( fComplL != fComplR );
162 if ( Aig_ObjIsConst1(Aig_Regular(pLeftF)) && fComplL )
165 Vec_IntWriteEntry( pBmc->
vImps, i, 0 );
169 if (
Fra_NodesAreImp(
p, Aig_Regular(pLeftF), Aig_Regular(pRightF), fComplL, fComplR ) != 1 )
171 Vec_IntWriteEntry( pBmc->
vImps, i, 0 );
199 p->nFramesAll = nPref + nDepth;
201 memset(
p->pObjToFrames, 0,
sizeof(
Aig_Obj_t *) *
p->nFramesAll * Aig_ManObjNumMax(pAig) );
245 pAigFrames =
Aig_ManStart( Aig_ManObjNumMax(
p->pAig) *
p->nFramesAll );
246 pAigFrames->pName = Abc_UtilStrsav(
p->pAig->pName );
247 pAigFrames->pSpec = Abc_UtilStrsav(
p->pAig->pSpec );
249 for ( f = 0; f <
p->nFramesAll; f++ )
250 Bmc_ObjSetFrames( Aig_ManConst1(
p->pAig), f, Aig_ManConst1(pAigFrames) );
251 for ( f = 0; f <
p->nFramesAll; f++ )
256 Bmc_ObjSetFrames( pObj, 0, Aig_ManConst0(pAigFrames) );
260 for ( f = 0; f <
p->nFramesAll; f++ )
265 pObjNew =
Aig_And( pAigFrames, Bmc_ObjChild0Frames(pObj,f), Bmc_ObjChild1Frames(pObj,f) );
266 Bmc_ObjSetFrames( pObj, f, pObjNew );
268 if ( f ==
p->nFramesAll - 1 )
273 pLatches[k++] = Bmc_ObjChild0Frames(pObj,f);
274 assert( k == Aig_ManRegNum(
p->pAig) );
278 Bmc_ObjSetFrames( pObj, f+1, pLatches[k++] );
279 assert( k == Aig_ManRegNum(
p->pAig) );
284 for ( f = 0; f <
p->nFramesAll; f++ )
293 if ( Aig_ObjIsNode(pObjNew) && pObjNew->
nRefs == 0 )
321 if (
p->pCla->vImps )
324 p->pBmc->pAigFrames->pImpData =
p->pBmc;
325 p->pBmc->vImps =
p->pCla->vImps;
326 nImpsOld = Vec_IntSize(
p->pCla->vImps);
329 p->pBmc->pObjToFraig =
p->pBmc->pAigFrames->pObjCopies;
330 p->pBmc->pAigFrames->pObjCopies = NULL;
335 if (
p->pPars->fVerbose )
337 printf(
"Original AIG = %d. Init %d frames = %d. Fraig = %d. ",
338 Aig_ManNodeNum(
p->pBmc->pAig),
p->pBmc->nFramesAll,
339 Aig_ManNodeNum(
p->pBmc->pAigFrames), Aig_ManNodeNum(
p->pBmc->pAigFraig) );
340 ABC_PRT(
"Time", Abc_Clock() - clk );
341 printf(
"Before BMC: " );
343 printf(
"Const = %5d. Class = %5d. Lit = %5d. ",
345 if (
p->pCla->vImps )
346 printf(
"Imp = %5d. ", nImpsOld );
357 if (
p->pPars->fVerbose )
359 printf(
"After BMC: " );
361 printf(
"Const = %5d. Class = %5d. Lit = %5d. ",
363 if (
p->pCla->vImps )
364 printf(
"Imp = %5d. ", Vec_IntSize(
p->pCla->vImps) );
399 printf(
"AIG: PI/PO/Reg = %d/%d/%d. Node = %6d. Lev = %5d.\n",
400 Aig_ManCiNum(pAig)-Aig_ManRegNum(pAig), Aig_ManCoNum(pAig)-Aig_ManRegNum(pAig), Aig_ManRegNum(pAig),
402 printf(
"Time-frames (%d): PI/PO = %d/%d. Node = %6d. Lev = %5d. ",
405 ABC_PRT(
"Time", Abc_Clock() - clk );
414 printf(
"Time-frames after rewriting: Node = %6d. Lev = %5d. ",
416 ABC_PRT(
"Time", Abc_Clock() - clk );
422 pAig->pSeqModel =
Abc_CexMakeTriv( Aig_ManRegNum(pAig), Aig_ManCiNum(pAig)-Aig_ManRegNum(pAig), Aig_ManCoNum(pAig)-Aig_ManRegNum(pAig), iOutput );
432 else if ( iOutput >= 0 )
433 pAig->pSeqModel =
Abc_CexMakeTriv( Aig_ManRegNum(pAig), Aig_ManCiNum(pAig)-Aig_ManRegNum(pAig), Aig_ManCoNum(pAig)-Aig_ManRegNum(pAig), iOutput );
437 printf(
"Fraiged init frames: Node = %6d. Lev = %5d. ",
440 ABC_PRT(
"Time", Abc_Clock() - clk );
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_NAMESPACE_IMPL_START Aig_Man_t * Dar_ManRwsat(Aig_Man_t *pAig, int fBalance, int fVerbose)
DECLARATIONS ///.
int Aig_ManLevelNum(Aig_Man_t *p)
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(Aig_Man_t *p)
#define Aig_ManForEachLiSeq(p, pObj, i)
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
struct Aig_Obj_t_ Aig_Obj_t
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
#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_ManForEachPiSeq(p, pObj, i)
SEQUENTIAL ITERATORS ///.
#define Aig_ManForEachPoSeq(p, pObj, i)
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
#define Aig_ManForEachLoSeq(p, pObj, i)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Fra_Bmc_t * Fra_BmcStart(Aig_Man_t *pAig, int nPref, int nDepth)
void Fra_BmcStop(Fra_Bmc_t *p)
int Fra_BmcNodeIsConst(Aig_Obj_t *pObj)
int Fra_BmcNodesAreEqual(Aig_Obj_t *pObj0, Aig_Obj_t *pObj1)
FUNCTION DEFINITIONS ///.
Aig_Man_t * Fra_BmcFrames(Fra_Bmc_t *p, int fKeepPos)
void Fra_BmcFilterImplications(Fra_Man_t *p, Fra_Bmc_t *pBmc)
void Fra_BmcPerformSimple(Aig_Man_t *pAig, int nFrames, int nBTLimit, int fRewrite, int fVerbose)
void Fra_BmcPerform(Fra_Man_t *p, int nPref, int nDepth)
Fra_Man_t * Fra_LcrAigPrepare(Aig_Man_t *pAig)
int Fra_ClassesRefine1(Fra_Cla_t *p, int fRefineNewClass, int *pSkipped)
struct Fra_Bmc_t_ Fra_Bmc_t
int Fra_SmlNodeIsConst(Aig_Obj_t *pObj)
Aig_Man_t * Fra_FraigEquivence(Aig_Man_t *pManAig, int nConfMax, int fProve)
void Fra_ImpCompactArray(Vec_Int_t *vImps)
struct Fra_Man_t_ Fra_Man_t
int Fra_ClassesRefine(Fra_Cla_t *p)
int Fra_ClassesCountLits(Fra_Cla_t *p)
Abc_Cex_t * Fra_SmlCopyCounterExample(Aig_Man_t *pAig, Aig_Man_t *pFrames, int *pModel)
int Fra_NodesAreImp(Fra_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew, int fComplL, int fComplR)
int Fra_BmcNodeIsConst(Aig_Obj_t *pObj)
int Fra_SmlNodesAreEqual(Aig_Obj_t *pObj0, Aig_Obj_t *pObj1)
int Fra_BmcNodesAreEqual(Aig_Obj_t *pObj0, Aig_Obj_t *pObj1)
FUNCTION DEFINITIONS ///.
int Fra_FraigMiterAssertedOutput(Aig_Man_t *p)
Aig_Obj_t ** pObjToFrames
Abc_Cex_t * Abc_CexMakeTriv(int nRegs, int nTruePis, int nTruePos, int iFrameOut)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.