80 assert( !Aig_IsComplement(pObj) );
81 if ( Aig_ObjIsTravIdCurrent(pAig, pObj) )
83 Aig_ObjSetTravIdCurrent(pAig, pObj);
84 if ( Aig_ObjIsCi(pObj) )
86 Vec_IntPush( vCiObjs, Aig_ObjId(pObj) );
90 if ( Aig_ObjIsCo(pObj) )
93 Vec_IntPush( vNodes, Aig_ObjId(pObj) );
132 int Value0, Value1, Value;
133 Value0 = Pdr_ManSimInfoGet( pAig, Aig_ObjFanin0(pObj) );
134 if ( Aig_ObjFaninC0(pObj) )
135 Value0 = Pdr_ManSimInfoNot( Value0 );
136 if ( Aig_ObjIsCo(pObj) )
138 Pdr_ManSimInfoSet( pAig, pObj, Value0 );
141 assert( Aig_ObjIsNode(pObj) );
142 Value1 = Pdr_ManSimInfoGet( pAig, Aig_ObjFanin1(pObj) );
143 if ( Aig_ObjFaninC1(pObj) )
144 Value1 = Pdr_ManSimInfoNot( Value1 );
145 Value = Pdr_ManSimInfoAnd( Value0, Value1 );
146 Pdr_ManSimInfoSet( pAig, pObj, Value );
168 Pdr_ManSimInfoSet( pAig, Aig_ManConst1(pAig),
PDR_ONE );
170 Pdr_ManSimInfoSet( pAig, pObj, (Vec_IntEntry(vCiVals, i)?
PDR_ONE:
PDR_ZER) );
172 if ( vCi2Rem != NULL )
174 Pdr_ManSimInfoSet( pAig, pObj,
PDR_UND );
183 if ( Pdr_ManSimInfoGet( pAig, pObj ) != (Vec_IntEntry(vCoVals, i)?
PDR_ONE:
PDR_ZER) )
202 int i, k, iFanout = -1, Value, Value2;
203 assert( Saig_ObjIsLo(pAig, pObj) );
204 assert( Aig_ObjIsTravIdCurrent(pAig, pObj) );
206 Value = Pdr_ManSimInfoGet( pAig, pObj );
208 Vec_IntPush( vUndo, Aig_ObjId(pObj) );
209 Vec_IntPush( vUndo, Value );
211 Pdr_ManSimInfoSet( pAig, pObj,
PDR_UND );
213 Vec_IntClear( vVis );
214 Vec_IntPush( vVis, Aig_ObjId(pObj) );
219 if ( !Aig_ObjIsTravIdCurrent(pAig, pFanout) )
221 assert( Aig_ObjId(pObj) < Aig_ObjId(pFanout) );
222 Value = Pdr_ManSimInfoGet( pAig, pFanout );
226 if ( Value2 == Value )
229 Vec_IntPush( vUndo, Aig_ObjId(pFanout) );
230 Vec_IntPush( vUndo, Value );
231 if ( Aig_ObjIsCo(pFanout) )
233 assert( Aig_ObjIsNode(pFanout) );
234 Vec_IntPushOrder( vVis, Aig_ObjId(pFanout) );
282 assert( Saig_ObjIsLo( pAig, pObj ) );
283 Aig_ObjSetTravIdCurrent(pAig, pObj);
286 Vec_IntClear( vRes );
287 Vec_IntClear( vPiLits );
290 if ( Saig_ObjIsPi(pAig, pObj) )
292 Lit = Abc_Var2Lit( Aig_ObjCioId(pObj), (Vec_IntEntry(vCiVals, i) == 0) );
293 Vec_IntPush( vPiLits, Lit );
296 assert( Saig_ObjIsLo(pAig, pObj) );
297 if ( Aig_ObjIsTravIdCurrent(pAig, pObj) )
299 Lit = Abc_Var2Lit( Aig_ObjCioId(pObj) - Saig_ManPiNum(pAig), (Vec_IntEntry(vCiVals, i) == 0) );
300 Vec_IntPush( vRes, Lit );
302 if ( Vec_IntSize(vRes) == 0 )
303 Vec_IntPush(vRes, 0);
321 char * pBuff =
ABC_ALLOC(
char, Aig_ManCiNum(pAig)+1 );
322 for ( i = 0; i < Aig_ManCiNum(pAig); i++ )
326 pBuff[Aig_ObjCioId(pObj)] = (Vec_IntEntry(vCiVals, i)?
'1':
'0');
329 pBuff[Aig_ObjCioId(pObj)] =
'x';
330 Abc_Print( 1,
"%s\n", pBuff );
366 int i, Entry, RetValue;
370 Vec_IntClear( vCoObjs );
374 Vec_IntPush( vCoObjs, Aig_ObjId(Aig_ManCo(
p->pAig,
p->iOutCur)) );
378 for ( i = 0; i < pCube->
nLits; i++ )
380 if ( pCube->
Lits[i] == -1 )
382 pObj = Saig_ManLi(
p->pAig, (pCube->
Lits[i] >> 1));
383 Vec_IntPush( vCoObjs, Aig_ObjId(pObj) );
386if (
p->pPars->fVeryVerbose )
388Abc_Print( 1,
"Trying to justify cube " );
392 Abc_Print( 1,
"<prop=fail>" );
393Abc_Print( 1,
" in frame %d.\n", k );
402if (
p->pPars->fVeryVerbose )
404 RetValue =
Pdr_ManSimDataInit(
p->pAig, vCiObjs, vCiVals, vNodes, vCoObjs, vCoVals, NULL );
408 if (
p->pPars->fFlopPrio )
411 Vec_IntClear( vRes );
414 if ( !Saig_ObjIsLo(
p->pAig, pObj ) )
416 Entry = Aig_ObjCioId(pObj) - Saig_ManPiNum(
p->pAig);
417 Vec_IntPush( vRes, Entry );
419 Vec_IntSelectSortCost( Vec_IntArray(vRes), Vec_IntSize(vRes), vPrio );
422 Vec_IntClear( vCi2Rem );
425 pObj = Aig_ManCi(
p->pAig, Saig_ManPiNum(
p->pAig) + Entry );
426 assert( Saig_ObjIsLo(
p->pAig, pObj ) );
427 Vec_IntClear( vUndo );
429 Vec_IntPush( vCi2Rem, Aig_ObjId(pObj) );
437 Vec_IntClear( vCi2Rem );
440 if ( !Saig_ObjIsLo(
p->pAig, pObj ) )
442 Entry = Aig_ObjCioId(pObj) - Saig_ManPiNum(
p->pAig);
443 if ( Vec_IntEntry(vPrio, Entry) )
445 Vec_IntClear( vUndo );
447 Vec_IntPush( vCi2Rem, Aig_ObjId(pObj) );
454 if ( !Saig_ObjIsLo(
p->pAig, pObj ) )
456 Entry = Aig_ObjCioId(pObj) - Saig_ManPiNum(
p->pAig);
457 if ( !Vec_IntEntry(vPrio, Entry) )
459 Vec_IntClear( vUndo );
461 Vec_IntPush( vCi2Rem, Aig_ObjId(pObj) );
467if (
p->pPars->fVeryVerbose )
469 RetValue =
Pdr_ManSimDataInit(
p->pAig, vCiObjs, vCiVals, vNodes, vCoObjs, vCoVals, vCi2Rem );
474 assert( Vec_IntSize(vRes) > 0 );
478 if (
p->pPars->fUseAbs &&
p->vAbsFlops )
483 if ( Vec_IntEntry(
p->vAbsFlops, Abc_Lit2Var(iLit)) )
484 Vec_IntWriteEntry( vRes, k++, iLit );
486 Vec_IntPush( vPiLits, 2*Saig_ManPiNum(
p->pAig) + iLit );
488 Vec_IntShrink( vRes, k );
int Pdr_ManSimDataInit(Aig_Man_t *pAig, Vec_Int_t *vCiObjs, Vec_Int_t *vCiVals, Vec_Int_t *vNodes, Vec_Int_t *vCoObjs, Vec_Int_t *vCoVals, Vec_Int_t *vCi2Rem)
void Pdr_ManDeriveResult(Aig_Man_t *pAig, Vec_Int_t *vCiObjs, Vec_Int_t *vCiVals, Vec_Int_t *vCi2Rem, Vec_Int_t *vRes, Vec_Int_t *vPiLits)