148 int iElem, i, nRegCount, oldPoNum, poSerialNum, iElemHint;
149 int piCopied = 0, liCopied = 0, liCreated = 0, loCopied = 0, loCreated = 0;
150 int poCopied = 0, poCreated = 0;
151 Aig_Obj_t *pObj, *pObjPo, *pObjDriver, *pObjDriverNew, *pObjPendingDriverNew, *pObjPendingAndNextPending;
152 Aig_Obj_t *pPendingFlop, *pHintSignalLo, *pHintMonotoneFlop, *pObjTemp1, *pObjTemp2, *pObjKnownMonotoneAnd;
172 sprintf(pNewAig->pName,
"%s_%s", pAig->pName,
"_monotone");
173 pNewAig->pSpec = NULL;
178 pObj = Aig_ManConst1( pAig );
179 pObj->
pData = Aig_ManConst1( pNewAig );
208 vHintMonotoneLocalFlopOutput = Vec_PtrAlloc(Vec_IntSize(vHintMonotoneLocal));
213 Vec_PtrPush( vHintMonotoneLocalFlopOutput, pHintMonotoneFlop );
216 nRegCount = loCreated + loCopied;
217 printf(
"\nnRegCount = %d\n", nRegCount);
224 pObj->
pData =
Aig_And( pNewAig, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
231 pObjPo = Aig_ManCo( pAig, pendingSignalIndexLocal );
232 pObjDriver = Aig_NotCond((
Aig_Obj_t *)Aig_ObjFanin0(pObjPo), Aig_ObjFaninC0(pObjPo));
233 pObjPendingDriverNew = !Aig_IsComplement(pObjDriver)?
234 (
Aig_Obj_t *)(Aig_Regular(pObjDriver)->pData) :
235 Aig_Not((
Aig_Obj_t *)(Aig_Regular(pObjDriver)->pData));
237 pObjPendingAndNextPending =
Aig_And( pNewAig, pObjPendingDriverNew, pPendingFlop );
239 oldPoNum = Aig_ManCoNum(pAig) - Aig_ManRegNum(pAig);
240 pObjKnownMonotoneAnd = Aig_ManConst1( pNewAig );
242 if( vKnownMonotoneLocal )
248 iElem = (iElemHint - hintSingalBeginningMarkerLocal) + 1 + pendingSignalIndexLocal;
249 printf(
"\nProcessing knownMonotone = %d\n", iElem);
250 pObjPo = Aig_ManCo( pAig, iElem );
251 pObjDriver = Aig_NotCond((
Aig_Obj_t *)Aig_ObjFanin0(pObjPo), Aig_ObjFaninC0(pObjPo));
252 pObjDriverNew = !Aig_IsComplement(pObjDriver)?
253 (
Aig_Obj_t *)(Aig_Regular(pObjDriver)->pData) :
254 Aig_Not((
Aig_Obj_t *)(Aig_Regular(pObjDriver)->pData));
255 pHintSignalLo = (
Aig_Obj_t *)Vec_PtrEntry(vHintMonotoneLocalFlopOutput, iElem - oldPoNum);
256 pObjTemp1 =
Aig_Or( pNewAig,
Aig_And(pNewAig, pObjDriverNew, pHintSignalLo),
257 Aig_And(pNewAig, Aig_Not(pObjDriverNew), Aig_Not(pHintSignalLo)) );
259 pObjKnownMonotoneAnd =
Aig_And( pNewAig, pObjKnownMonotoneAnd, pObjTemp1 );
261 pObjPendingAndNextPending =
Aig_And( pNewAig, pObjPendingAndNextPending, pObjKnownMonotoneAnd );
265 vHintMonotoneLocalDriverNew = Vec_PtrAlloc(Vec_IntSize(vHintMonotoneLocal));
266 vHintMonotoneLocalProp = Vec_PtrAlloc(Vec_IntSize(vHintMonotoneLocal));
269 pObjPo = Aig_ManCo( pAig, iElem );
270 pObjDriver = Aig_NotCond((
Aig_Obj_t *)Aig_ObjFanin0(pObjPo), Aig_ObjFaninC0(pObjPo));
271 pObjDriverNew = !Aig_IsComplement(pObjDriver)?
272 (
Aig_Obj_t *)(Aig_Regular(pObjDriver)->pData) :
273 Aig_Not((
Aig_Obj_t *)(Aig_Regular(pObjDriver)->pData));
275 if( vKnownMonotoneLocal != NULL && Vec_IntFind( vKnownMonotoneLocal, iElem ) != -1 )
277 Vec_PtrPush(vHintMonotoneLocalDriverNew, pObjDriverNew);
281 poSerialNum = Vec_IntFind( vHintMonotoneLocal, iElem );
282 pHintSignalLo = (
Aig_Obj_t *)Vec_PtrEntry(vHintMonotoneLocalFlopOutput, poSerialNum );
283 pObjTemp1 =
Aig_And( pNewAig, pObjPendingAndNextPending, pHintSignalLo);
284 pObjTemp2 =
Aig_Or( pNewAig, Aig_Not(pObjTemp1), pObjDriverNew );
287 Vec_PtrPush(vHintMonotoneLocalDriverNew, pObjDriverNew);
288 Vec_PtrPush(vHintMonotoneLocalProp, pObjTemp2);
301 *startMonotonePropPo = i;
335 printf(
"\npoCopied = %d, poCreated = %d\n", poCopied, poCreated);
336 printf(
"\nliCreated++ = %d\n", liCreated );
341 assert( loCopied + loCreated == liCopied + liCreated );
343 printf(
"\nSaig_ManPoNum = %d\n", Saig_ManPoNum(pNewAig));
352 int poMarker, oldPoNum;
367 oldPoNum = Aig_ManCoNum(pAig) - Aig_ManRegNum(pAig);
369 vMonotoneIndex = Vec_IntAlloc(0);
370 printf(
"\nSaig_ManPoNum(pAigNew) = %d, poMarker = %d\n", Saig_ManPoNum(pAigNew), poMarker);
371 for( i=poMarker; i<Saig_ManPoNum(pAigNew); i++ )
373 pObjTargetPo = Aig_ManCo( pAigNew, i );
374 Aig_ObjChild0Flip( pObjTargetPo );
384 printf(
"\ni = %d, RetValue = %d : %s (Frame %d)\n", i - oldPoNum + hintSingalBeginningMarkerLocal, RetValue,
"Property Proved", pCex? (pCex)->iFrame : -1 );
385 Vec_IntPush( vMonotoneIndex, i - (pendingSignalIndexLocal + 1) + hintSingalBeginningMarkerLocal);
387 Aig_ObjChild0Flip( pObjTargetPo );
390 if( Vec_IntSize( vMonotoneIndex ) > 0 )
391 return vMonotoneIndex;
421 int pendingSignalIndex;
423 int hintSingalBeginningMarker;
424 int hintSingalEndMarker;
432 if( pendingSignalIndex == -1 )
434 printf(
"\nNo Pending Signal Found\n");
438 printf(
"Po[%d] = %s\n", pendingSignalIndex,
Abc_ObjName( Abc_NtkPo(pNtk, pendingSignalIndex) ) );
444 if( vCandidateMonotoneSignals == NULL )
449 printf(
"Po[%d] = %s\n", iElem,
Abc_ObjName( Abc_NtkPo(pNtk, iElem) ) );
450 hintSingalBeginningMarker = Vec_IntEntry( vCandidateMonotoneSignals, 0 );
451 hintSingalEndMarker = Vec_IntEntry( vCandidateMonotoneSignals, Vec_IntSize(vCandidateMonotoneSignals) - 1 );
472 if( !Abc_NtkIsStrash( pNtk ) )
486 vKnownMonotoneSignals =
findNewMonotone( pAig, aigPoIndicesInstance, monotoneVectorsInstance );
493 if( vKnownMonotoneSignals )
495 printf(
"\nsize = %d\n", Vec_IntSize(vKnownMonotoneSignals) );
498 vKnownMonotoneSignalsNew =
findNewMonotone( pAig, aigPoIndicesInstance, monotoneVectorsInstance );