mirror of https://github.com/YosysHQ/abc.git
Bug fix in PBA.
This commit is contained in:
parent
825b0b5ee3
commit
fbb12a06f2
|
|
@ -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
|
||||||
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 );
|
||||||
|
pGia->vFlopClasses = Saig_ManFlops2Classes( Gia_ManRegNum(pGia), vSelected );
|
||||||
|
Vec_IntFree( vSelected );
|
||||||
|
|
||||||
Vec_IntFree( vFlopsNew );
|
Vec_IntFree( vFlopsNew );
|
||||||
Vec_IntFree( vFlops );
|
Vec_IntFree( vFlops );
|
||||||
return -1;
|
}
|
||||||
|
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
|
||||||
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
|
||||||
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
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
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 );
|
||||||
{
|
{
|
||||||
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 );
|
||||||
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
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue