Commit fbb12a06 by Alan Mishchenko

Bug fix in PBA.

parent 825b0b5e
...@@ -320,6 +320,7 @@ int Gia_ManPbaPerform( Gia_Man_t * pGia, int nFrames, int nConfLimit, int fVerbo ...@@ -320,6 +320,7 @@ int Gia_ManPbaPerform( Gia_Man_t * pGia, int nFrames, int nConfLimit, int fVerbo
Gia_Man_t * pAbs; Gia_Man_t * pAbs;
Aig_Man_t * pAig, * pOrig; Aig_Man_t * pAig, * pOrig;
Vec_Int_t * vFlops, * vFlopsNew, * vSelected; Vec_Int_t * vFlops, * vFlopsNew, * vSelected;
int RetValue;
if ( pGia->vFlopClasses == NULL ) if ( pGia->vFlopClasses == NULL )
{ {
printf( "Gia_ManPbaPerform(): Abstraction flop map is missing.\n" ); printf( "Gia_ManPbaPerform(): Abstraction flop map is missing.\n" );
...@@ -331,20 +332,23 @@ int Gia_ManPbaPerform( Gia_Man_t * pGia, int nFrames, int nConfLimit, int fVerbo ...@@ -331,20 +332,23 @@ int Gia_ManPbaPerform( Gia_Man_t * pGia, int nFrames, int nConfLimit, int fVerbo
pAig = Gia_ManToAigSimple( pAbs ); pAig = Gia_ManToAigSimple( pAbs );
Gia_ManStop( pAbs ); Gia_ManStop( pAbs );
vFlopsNew = Saig_ManPbaDerive( pAig, Gia_ManPiNum(pGia), nFrames, nConfLimit, fVerbose ); vFlopsNew = Saig_ManPbaDerive( pAig, Gia_ManPiNum(pGia), nFrames, nConfLimit, fVerbose );
Aig_ManStop( pAig );
// derive new classes // derive new classes
if ( pAig->pSeqModel == NULL ) if ( pAig->pSeqModel == NULL )
{ {
// the problem is UNSAT // check if there is no timeout
vFlops = Gia_ManClasses2Flops( pGia->vFlopClasses ); if ( vFlopsNew != NULL )
vSelected = Gia_ManFlopsSelect( vFlops, vFlopsNew ); {
Vec_IntFree( pGia->vFlopClasses ); // the problem is UNSAT
pGia->vFlopClasses = Saig_ManFlops2Classes( Gia_ManRegNum(pGia), vSelected ); vFlops = Gia_ManClasses2Flops( pGia->vFlopClasses );
Vec_IntFree( vSelected ); vSelected = Gia_ManFlopsSelect( vFlops, vFlopsNew );
Vec_IntFree( pGia->vFlopClasses );
Vec_IntFree( vFlopsNew ); pGia->vFlopClasses = Saig_ManFlops2Classes( Gia_ManRegNum(pGia), vSelected );
Vec_IntFree( vFlops ); Vec_IntFree( vSelected );
return -1;
Vec_IntFree( vFlopsNew );
Vec_IntFree( vFlops );
}
RetValue = -1;
} }
else if ( vFlopsNew == NULL ) else if ( vFlopsNew == NULL )
{ {
...@@ -356,8 +360,7 @@ int Gia_ManPbaPerform( Gia_Man_t * pGia, int nFrames, int nConfLimit, int fVerbo ...@@ -356,8 +360,7 @@ int Gia_ManPbaPerform( Gia_Man_t * pGia, int nFrames, int nConfLimit, int fVerbo
pOrig = Gia_ManToAigSimple( pGia ); pOrig = Gia_ManToAigSimple( pGia );
pGia->pCexSeq = Saig_ManCexRemap( pOrig, pAig, pAig->pSeqModel ); pGia->pCexSeq = Saig_ManCexRemap( pOrig, pAig, pAig->pSeqModel );
Aig_ManStop( pOrig ); Aig_ManStop( pOrig );
Aig_ManStop( pAig ); RetValue = 0;
return 0;
} }
else else
{ {
...@@ -366,8 +369,10 @@ int Gia_ManPbaPerform( Gia_Man_t * pGia, int nFrames, int nConfLimit, int fVerbo ...@@ -366,8 +369,10 @@ int Gia_ManPbaPerform( Gia_Man_t * pGia, int nFrames, int nConfLimit, int fVerbo
Vec_Int_t * vAbsFfsToAdd = vFlopsNew; Vec_Int_t * vAbsFfsToAdd = vFlopsNew;
Gia_ManFlopsAddToClasses( pGia->vFlopClasses, vAbsFfsToAdd ); Gia_ManFlopsAddToClasses( pGia->vFlopClasses, vAbsFfsToAdd );
Vec_IntFree( vAbsFfsToAdd ); Vec_IntFree( vAbsFfsToAdd );
return -1; RetValue = -1;
} }
Aig_ManStop( pAig );
return RetValue;
} }
......
...@@ -201,7 +201,7 @@ Abc_Cex_t * Saig_ManPbaDeriveCex( Aig_Man_t * pAig, sat_solver * pSat, Cnf_Dat_t ...@@ -201,7 +201,7 @@ Abc_Cex_t * Saig_ManPbaDeriveCex( Aig_Man_t * pAig, sat_solver * pSat, Cnf_Dat_t
***********************************************************************/ ***********************************************************************/
Vec_Int_t * Saig_ManPbaDerive( Aig_Man_t * pAig, int nInputs, int nFrames, int nConfLimit, int fVerbose ) Vec_Int_t * Saig_ManPbaDerive( Aig_Man_t * pAig, int nInputs, int nFrames, int nConfLimit, int fVerbose )
{ {
Vec_Int_t * vFlops, * vMapVar2FF, * vAssumps, * vPiVarMap; Vec_Int_t * vFlops = NULL, * vMapVar2FF, * vAssumps, * vPiVarMap;
Aig_Man_t * pFrames; Aig_Man_t * pFrames;
sat_solver * pSat; sat_solver * pSat;
Cnf_Dat_t * pCnf; Cnf_Dat_t * pCnf;
...@@ -248,6 +248,8 @@ Abc_PrintTime( 1, "Solving", clock() - clk ); ...@@ -248,6 +248,8 @@ Abc_PrintTime( 1, "Solving", clock() - clk );
{ {
if ( RetValue == l_True ) if ( RetValue == l_True )
{ {
printf( "Saig_ManPerformPba(): The eproblem is SAT. Abstraction refinement is still not enabled.\n" );
/*
Vec_Int_t * vAbsFfsToAdd; Vec_Int_t * vAbsFfsToAdd;
ABC_FREE( pAig->pSeqModel ); ABC_FREE( pAig->pSeqModel );
pAig->pSeqModel = Saig_ManPbaDeriveCex( pAig, pSat, pCnf, nFrames, vPiVarMap ); pAig->pSeqModel = Saig_ManPbaDeriveCex( pAig, pSat, pCnf, nFrames, vPiVarMap );
...@@ -263,7 +265,8 @@ Abc_PrintTime( 1, "Solving", clock() - clk ); ...@@ -263,7 +265,8 @@ Abc_PrintTime( 1, "Solving", clock() - clk );
printf( "Adding %d registers to the abstraction. ", Vec_IntSize(vAbsFfsToAdd) ); printf( "Adding %d registers to the abstraction. ", Vec_IntSize(vAbsFfsToAdd) );
Abc_PrintTime( 0, "Time", clock() - clk ); Abc_PrintTime( 0, "Time", clock() - clk );
} }
return vAbsFfsToAdd; vFlops = vAbsFfsToAdd;
*/
} }
else else
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment