124 int nFrames, RetValue, nIter;
125 abctime clk, clkTotal = Abc_Clock();
128 float TimeLeft = 0.0;
143 printf(
"Original miter: Latches = %5d. Nodes = %6d.\n",
144 Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
156 printf(
"Sequential cleanup: Latches = %5d. Nodes = %6d. ",
157 Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
158ABC_PRT(
"Time", Abc_Clock() - clk );
169 pNew->nTruePis = Aig_ManCiNum(pNew) - Aig_ManRegNum(pNew);
170 pNew->nTruePos = Aig_ManCoNum(pNew) - Aig_ManRegNum(pNew);
175 printf(
"Phase abstraction: Latches = %5d. Nodes = %6d. ",
176 Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
177ABC_PRT(
"Time", Abc_Clock() - clk );
190 printf(
"Forward retiming: Latches = %5d. Nodes = %6d. ",
191 Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
192ABC_PRT(
"Time", Abc_Clock() - clk );
223 nIter = pPars2->nIters;
228 if ( pTemp->pSeqModel )
231 printf(
"Fra_FraigSec(): Counter-example verification has FAILED.\n" );
232 if ( Saig_ManPiNum(
p) != Saig_ManPiNum(pTemp) )
233 printf(
"The counter-example is invalid because of phase abstraction.\n" );
237 p->pSeqModel =
Abc_CexDup( pTemp->pSeqModel, Aig_ManRegNum(
p) );
248 printf(
"Networks are NOT EQUIVALENT after simulation. " );
249ABC_PRT(
"Time", Abc_Clock() - clkTotal );
253 printf(
"SOLUTION: FAIL " );
254ABC_PRT(
"Time", Abc_Clock() - clkTotal );
268 printf(
"Latch-corr (I=%3d): Latches = %5d. Nodes = %6d. ",
269 nIter, Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
270ABC_PRT(
"Time", Abc_Clock() - clk );
297 printf(
"Fraiging: Latches = %5d. Nodes = %6d. ",
298 Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
299ABC_PRT(
"Time", Abc_Clock() - clk );
303 if ( pNew->nRegs == 0 )
329 pNew->nTruePis = Aig_ManCiNum(pNew) - Aig_ManRegNum(pNew);
330 pNew->nTruePos = Aig_ManCoNum(pNew) - Aig_ManRegNum(pNew);
338 printf(
"Min-reg retiming: Latches = %5d. Nodes = %6d. ",
339 Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
340ABC_PRT(
"Time", Abc_Clock() - clk );
347 for ( nFrames = 1; nFrames <= pParSec->
nFramesMax; nFrames *= 2 )
371 pPars2->nFramesK = nFrames;
372 pPars2->nBTLimit = pParSec->
nBTLimit;
376 if ( RetValue == -1 && pPars2->nConflicts > pPars2->nBTLimitGlobal )
379 printf(
"Global conflict limit (%d) exceeded.\n", pPars2->nBTLimitGlobal );
387 if ( Aig_ManRegNum(pNew) > 0 )
406 printf(
"K-step (K=%2d,I=%3d): Latches = %5d. Nodes = %6d. ",
407 nFrames, pPars2->nIters, Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
408ABC_PRT(
"Time", Abc_Clock() - clk );
410 if ( RetValue != -1 )
419 pNew->nTruePis = Aig_ManCiNum(pNew) - Aig_ManRegNum(pNew);
420 pNew->nTruePos = Aig_ManCoNum(pNew) - Aig_ManRegNum(pNew);
428 printf(
"Min-reg retiming: Latches = %5d. Nodes = %6d. ",
429 Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
430ABC_PRT(
"Time", Abc_Clock() - clk );
446 printf(
"Rewriting: Latches = %5d. Nodes = %6d. ",
447 Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
448ABC_PRT(
"Time", Abc_Clock() - clk );
455 pSml =
Fra_SmlSimulateSeq( pNew, 0, 128 * nFrames, 1 + 16/(1+Aig_ManNodeNum(pNew)/1000), 1 );
458 printf(
"Seq simulation : Latches = %5d. Nodes = %6d. ",
459 Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
460ABC_PRT(
"Time", Abc_Clock() - clk );
466 if ( Saig_ManPiNum(
p) != Saig_ManPiNum(pNew) )
467 printf(
"The counter-example is invalid because of phase abstraction.\n" );
471 p->pSeqModel =
Abc_CexDup( pNew->pSeqModel, Aig_ManRegNum(
p) );
480 printf(
"Networks are NOT EQUIVALENT after simulation. " );
481ABC_PRT(
"Time", Abc_Clock() - clkTotal );
485 printf(
"SOLUTION: FAIL " );
486ABC_PRT(
"Time", Abc_Clock() - clkTotal );
500 if ( pParSec->
fInterpolation && RetValue == -1 && Aig_ManRegNum(pNew) > 0 )
509 if ( Saig_ManPoNum(pNew) == 1 )
521 if ( Aig_ObjFanin0(pObjPo) == Aig_ManConst1(pNew) )
523 if ( pPars->fVerbose )
524 printf(
"Solving output %2d (out of %2d):\n", i, Saig_ManPoNum(pNew) );
526 pTemp =
Aig_ManScl( pAux = pTemp, 1, 1, 0, -1, -1, 0, 0 );
528 if ( Saig_ManRegNum(pTemp) > 0 )
531 if ( pTemp->pSeqModel )
533 pCex =
p->pSeqModel =
Abc_CexDup( pTemp->pSeqModel, Aig_ManRegNum(
p) );
554 printf(
"Solving output %3d (out of %3d) using interpolation.\r", i, Saig_ManPoNum(pNew) );
559 printf(
"Interpolation left %d (out of %d) outputs unsolved \n", Counter, Saig_ManPoNum(pNew) );
565 pNew =
Aig_ManScl( pTemp = pNew, 1, 1, 0, -1, -1, 0, 0 );
572 if ( pNewOrpos->pSeqModel )
575 pCex = pNew->pSeqModel = pNewOrpos->pSeqModel; pNewOrpos->pSeqModel = NULL;
584 printf(
"Property proved using interpolation. " );
585 else if ( RetValue == 0 )
586 printf(
"Property DISPROVED in frame %d using interpolation. ", Depth );
587 else if ( RetValue == -1 )
588 printf(
"Property UNDECIDED after interpolation. " );
591ABC_PRT(
"Time", Abc_Clock() - clk );
596 if ( pParSec->
fReachability && RetValue == -1 && Aig_ManRegNum(pNew) > 0 && Aig_ManRegNum(pNew) < pParSec->
nBddVarsMax )
608 pNew->nTruePis = Aig_ManCiNum(pNew) - Aig_ManRegNum(pNew);
609 pNew->nTruePos = Aig_ManCoNum(pNew) - Aig_ManRegNum(pNew);
614 if ( pParSec->
fUsePdr && RetValue == -1 && Aig_ManRegNum(pNew) > 0 )
619 pPars->fVerbose = pParSec->
fVerbose;
621 printf(
"Running property directed reachability...\n" );
623 if ( pNew->pSeqModel )
633 printf(
"Networks are equivalent. " );
634ABC_PRT(
"Time", Abc_Clock() - clkTotal );
638 printf(
"SOLUTION: PASS " );
639ABC_PRT(
"Time", Abc_Clock() - clkTotal );
642 else if ( RetValue == 0 )
644 if ( pNew->pSeqModel == NULL )
648 pNew->pSeqModel =
Abc_CexAlloc( Aig_ManRegNum(pNew), pNew->nTruePis, 1 );
652 for ( i = 0; i < pNew->nTruePis; i++ )
653 Abc_InfoSetBit( pNew->pSeqModel->pData, i );
657 printf(
"Networks are NOT EQUIVALENT. " );
658ABC_PRT(
"Time", Abc_Clock() - clkTotal );
662 printf(
"SOLUTION: FAIL " );
663ABC_PRT(
"Time", Abc_Clock() - clkTotal );
675 printf(
"Networks are UNDECIDED. " );
676ABC_PRT(
"Time", Abc_Clock() - clkTotal );
680 printf(
"SOLUTION: UNDECIDED " );
681ABC_PRT(
"Time", Abc_Clock() - clkTotal );
683 if ( !TimeOut && !pParSec->
fSilent )
685 static int Counter = 1;
686 char pFileName[1000];
688 sprintf( pFileName,
"sm%02d.aig", Counter++ );
690 printf(
"The unsolved reduced miter is written into file \"%s\".\n", pFileName );
693 if ( pNew->pSeqModel )
695 if ( Saig_ManPiNum(
p) != Saig_ManPiNum(pNew) )
696 printf(
"The counter-example is invalid because of phase abstraction.\n" );
700 p->pSeqModel =
Abc_CexDup( pNew->pSeqModel, Aig_ManRegNum(
p) );
704 if ( ppResult != NULL )