mirror of https://github.com/YosysHQ/abc.git
Adding silent mode to &cec -m.
This commit is contained in:
parent
1451e4551c
commit
3f2b1233ee
|
|
@ -30862,7 +30862,7 @@ int Abc_CommandAbc9Cec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
||||||
int c, nArgcNew, fMiter = 0, fDualOutput = 0, fDumpMiter = 0;
|
int c, nArgcNew, fMiter = 0, fDualOutput = 0, fDumpMiter = 0;
|
||||||
Cec_ManCecSetDefaultParams( pPars );
|
Cec_ManCecSetDefaultParams( pPars );
|
||||||
Extra_UtilGetoptReset();
|
Extra_UtilGetoptReset();
|
||||||
while ( ( c = Extra_UtilGetopt( argc, argv, "CTnmdavh" ) ) != EOF )
|
while ( ( c = Extra_UtilGetopt( argc, argv, "CTnmdasvh" ) ) != EOF )
|
||||||
{
|
{
|
||||||
switch ( c )
|
switch ( c )
|
||||||
{
|
{
|
||||||
|
|
@ -30900,6 +30900,9 @@ int Abc_CommandAbc9Cec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
||||||
case 'a':
|
case 'a':
|
||||||
fDumpMiter ^= 1;
|
fDumpMiter ^= 1;
|
||||||
break;
|
break;
|
||||||
|
case 's':
|
||||||
|
pPars->fSilent ^= 1;
|
||||||
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
pPars->fVerbose ^= 1;
|
pPars->fVerbose ^= 1;
|
||||||
break;
|
break;
|
||||||
|
|
@ -30918,12 +30921,14 @@ int Abc_CommandAbc9Cec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
||||||
Abc_Print( -1, "The dual-output miter should have an even number of outputs.\n" );
|
Abc_Print( -1, "The dual-output miter should have an even number of outputs.\n" );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if ( !pPars->fSilent )
|
||||||
Abc_Print( 1, "Assuming the current network is a double-output miter. (Conflict limit = %d.)\n", pPars->nBTLimit );
|
Abc_Print( 1, "Assuming the current network is a double-output miter. (Conflict limit = %d.)\n", pPars->nBTLimit );
|
||||||
pAbc->Status = Cec_ManVerify( pAbc->pGia, pPars );
|
pAbc->Status = Cec_ManVerify( pAbc->pGia, pPars );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Gia_Man_t * pTemp;
|
Gia_Man_t * pTemp;
|
||||||
|
if ( !pPars->fSilent )
|
||||||
Abc_Print( 1, "Assuming the current network is a single-output miter. (Conflict limit = %d.)\n", pPars->nBTLimit );
|
Abc_Print( 1, "Assuming the current network is a single-output miter. (Conflict limit = %d.)\n", pPars->nBTLimit );
|
||||||
pTemp = Gia_ManTransformToDual( pAbc->pGia );
|
pTemp = Gia_ManTransformToDual( pAbc->pGia );
|
||||||
pAbc->Status = Cec_ManVerify( pTemp, pPars );
|
pAbc->Status = Cec_ManVerify( pTemp, pPars );
|
||||||
|
|
@ -30982,7 +30987,7 @@ int Abc_CommandAbc9Cec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
usage:
|
usage:
|
||||||
Abc_Print( -2, "usage: &cec [-CT num] [-nmdavh]\n" );
|
Abc_Print( -2, "usage: &cec [-CT num] [-nmdasvh]\n" );
|
||||||
Abc_Print( -2, "\t new combinational equivalence checker\n" );
|
Abc_Print( -2, "\t new combinational equivalence checker\n" );
|
||||||
Abc_Print( -2, "\t-C num : the max number of conflicts at a node [default = %d]\n", pPars->nBTLimit );
|
Abc_Print( -2, "\t-C num : the max number of conflicts at a node [default = %d]\n", pPars->nBTLimit );
|
||||||
Abc_Print( -2, "\t-T num : approximate runtime limit in seconds [default = %d]\n", pPars->TimeLimit );
|
Abc_Print( -2, "\t-T num : approximate runtime limit in seconds [default = %d]\n", pPars->TimeLimit );
|
||||||
|
|
@ -30990,6 +30995,7 @@ usage:
|
||||||
Abc_Print( -2, "\t-m : toggle miter vs. two circuits [default = %s]\n", fMiter? "miter":"two circuits");
|
Abc_Print( -2, "\t-m : toggle miter vs. two circuits [default = %s]\n", fMiter? "miter":"two circuits");
|
||||||
Abc_Print( -2, "\t-d : toggle using dual output miter [default = %s]\n", fDualOutput? "yes":"no");
|
Abc_Print( -2, "\t-d : toggle using dual output miter [default = %s]\n", fDualOutput? "yes":"no");
|
||||||
Abc_Print( -2, "\t-a : toggle writing dual-output miter [default = %s]\n", fDumpMiter? "yes":"no");
|
Abc_Print( -2, "\t-a : toggle writing dual-output miter [default = %s]\n", fDumpMiter? "yes":"no");
|
||||||
|
Abc_Print( -2, "\t-s : toggle silent operation [default = %s]\n", pPars->fSilent ? "yes":"no");
|
||||||
Abc_Print( -2, "\t-v : toggle verbose output [default = %s]\n", pPars->fVerbose? "yes":"no");
|
Abc_Print( -2, "\t-v : toggle verbose output [default = %s]\n", pPars->fVerbose? "yes":"no");
|
||||||
Abc_Print( -2, "\t-h : print the command usage\n");
|
Abc_Print( -2, "\t-h : print the command usage\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
||||||
|
|
@ -123,6 +123,7 @@ struct Cec_ParCec_t_
|
||||||
int fUseSmartCnf; // use smart CNF computation
|
int fUseSmartCnf; // use smart CNF computation
|
||||||
int fRewriting; // enables AIG rewriting
|
int fRewriting; // enables AIG rewriting
|
||||||
int fNaive; // performs naive SAT-based checking
|
int fNaive; // performs naive SAT-based checking
|
||||||
|
int fSilent; // print no messages
|
||||||
int fVeryVerbose; // verbose stats
|
int fVeryVerbose; // verbose stats
|
||||||
int fVerbose; // verbose stats
|
int fVerbose; // verbose stats
|
||||||
int iOutFail; // the number of failed output
|
int iOutFail; // the number of failed output
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ void Cec_ManTransformPattern( Gia_Man_t * p, int iOut, int * pValues )
|
||||||
SeeAlso []
|
SeeAlso []
|
||||||
|
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
int Cec_ManVerifyOld( Gia_Man_t * pMiter, int fVerbose, int * piOutFail, abctime clkTotal )
|
int Cec_ManVerifyOld( Gia_Man_t * pMiter, int fVerbose, int * piOutFail, abctime clkTotal, int fSilent )
|
||||||
{
|
{
|
||||||
// extern int Fra_FraigCec( Aig_Man_t ** ppAig, int nConfLimit, int fVerbose );
|
// extern int Fra_FraigCec( Aig_Man_t ** ppAig, int nConfLimit, int fVerbose );
|
||||||
extern int Ssw_SecCexResimulate( Aig_Man_t * p, int * pModel, int * pnOutputs );
|
extern int Ssw_SecCexResimulate( Aig_Man_t * p, int * pModel, int * pnOutputs );
|
||||||
|
|
@ -82,14 +82,20 @@ int Cec_ManVerifyOld( Gia_Man_t * pMiter, int fVerbose, int * piOutFail, abctime
|
||||||
RetValue = Fra_FraigCec( &pMiterCec, 10000000, fVerbose );
|
RetValue = Fra_FraigCec( &pMiterCec, 10000000, fVerbose );
|
||||||
// report the miter
|
// report the miter
|
||||||
if ( RetValue == 1 )
|
if ( RetValue == 1 )
|
||||||
|
{
|
||||||
|
if ( !fSilent )
|
||||||
{
|
{
|
||||||
Abc_Print( 1, "Networks are equivalent. " );
|
Abc_Print( 1, "Networks are equivalent. " );
|
||||||
Abc_PrintTime( 1, "Time", Abc_Clock() - clkTotal );
|
Abc_PrintTime( 1, "Time", Abc_Clock() - clkTotal );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if ( RetValue == 0 )
|
else if ( RetValue == 0 )
|
||||||
|
{
|
||||||
|
if ( !fSilent )
|
||||||
{
|
{
|
||||||
Abc_Print( 1, "Networks are NOT EQUIVALENT. " );
|
Abc_Print( 1, "Networks are NOT EQUIVALENT. " );
|
||||||
Abc_PrintTime( 1, "Time", Abc_Clock() - clkTotal );
|
Abc_PrintTime( 1, "Time", Abc_Clock() - clkTotal );
|
||||||
|
}
|
||||||
if ( pMiterCec->pData == NULL )
|
if ( pMiterCec->pData == NULL )
|
||||||
Abc_Print( 1, "Counter-example is not available.\n" );
|
Abc_Print( 1, "Counter-example is not available.\n" );
|
||||||
else
|
else
|
||||||
|
|
@ -99,19 +105,20 @@ int Cec_ManVerifyOld( Gia_Man_t * pMiter, int fVerbose, int * piOutFail, abctime
|
||||||
Abc_Print( 1, "Counter-example verification has failed.\n" );
|
Abc_Print( 1, "Counter-example verification has failed.\n" );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Aig_Obj_t * pObj = Aig_ManCo(pMiterCec, iOut);
|
if ( !fSilent )
|
||||||
// Aig_Obj_t * pFan = Aig_ObjFanin0(pObj);
|
{
|
||||||
Abc_Print( 1, "Primary output %d has failed", iOut );
|
Abc_Print( 1, "Primary output %d has failed", iOut );
|
||||||
if ( nOuts-1 >= 0 )
|
if ( nOuts-1 >= 0 )
|
||||||
Abc_Print( 1, ", along with other %d incorrect outputs", nOuts-1 );
|
Abc_Print( 1, ", along with other %d incorrect outputs", nOuts-1 );
|
||||||
Abc_Print( 1, ".\n" );
|
Abc_Print( 1, ".\n" );
|
||||||
|
}
|
||||||
if ( piOutFail )
|
if ( piOutFail )
|
||||||
*piOutFail = iOut;
|
*piOutFail = iOut;
|
||||||
}
|
}
|
||||||
Cec_ManTransformPattern( pMiter, iOut, (int *)pMiterCec->pData );
|
Cec_ManTransformPattern( pMiter, iOut, (int *)pMiterCec->pData );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if ( !fSilent )
|
||||||
{
|
{
|
||||||
Abc_Print( 1, "Networks are UNDECIDED. " );
|
Abc_Print( 1, "Networks are UNDECIDED. " );
|
||||||
Abc_PrintTime( 1, "Time", Abc_Clock() - clkTotal );
|
Abc_PrintTime( 1, "Time", Abc_Clock() - clkTotal );
|
||||||
|
|
@ -145,9 +152,12 @@ int Cec_ManHandleSpecialCases( Gia_Man_t * p, Cec_ParCec_t * pPars )
|
||||||
// check if they different on all-0 pattern
|
// check if they different on all-0 pattern
|
||||||
// (for example, when they have the same driver but complemented)
|
// (for example, when they have the same driver but complemented)
|
||||||
if ( Gia_ObjPhase(pObj1) != Gia_ObjPhase(pObj2) )
|
if ( Gia_ObjPhase(pObj1) != Gia_ObjPhase(pObj2) )
|
||||||
|
{
|
||||||
|
if ( !pPars->fSilent )
|
||||||
{
|
{
|
||||||
Abc_Print( 1, "Networks are NOT EQUIVALENT. Output %d trivially differs (different phase). ", i/2 );
|
Abc_Print( 1, "Networks are NOT EQUIVALENT. Output %d trivially differs (different phase). ", i/2 );
|
||||||
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
|
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
|
||||||
|
}
|
||||||
pPars->iOutFail = i/2;
|
pPars->iOutFail = i/2;
|
||||||
Cec_ManTransformPattern( p, i/2, NULL );
|
Cec_ManTransformPattern( p, i/2, NULL );
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -157,9 +167,12 @@ int Cec_ManHandleSpecialCases( Gia_Man_t * p, Cec_ParCec_t * pPars )
|
||||||
pDri2 = Gia_ObjFanin0(pObj2);
|
pDri2 = Gia_ObjFanin0(pObj2);
|
||||||
// drivers are different PIs
|
// drivers are different PIs
|
||||||
if ( Gia_ObjIsPi(p, pDri1) && Gia_ObjIsPi(p, pDri2) && pDri1 != pDri2 )
|
if ( Gia_ObjIsPi(p, pDri1) && Gia_ObjIsPi(p, pDri2) && pDri1 != pDri2 )
|
||||||
|
{
|
||||||
|
if ( !pPars->fSilent )
|
||||||
{
|
{
|
||||||
Abc_Print( 1, "Networks are NOT EQUIVALENT. Output %d trivially differs (different PIs). ", i/2 );
|
Abc_Print( 1, "Networks are NOT EQUIVALENT. Output %d trivially differs (different PIs). ", i/2 );
|
||||||
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
|
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
|
||||||
|
}
|
||||||
pPars->iOutFail = i/2;
|
pPars->iOutFail = i/2;
|
||||||
Cec_ManTransformPattern( p, i/2, NULL );
|
Cec_ManTransformPattern( p, i/2, NULL );
|
||||||
// if their compl attributes are the same - one should be complemented
|
// if their compl attributes are the same - one should be complemented
|
||||||
|
|
@ -170,9 +183,12 @@ int Cec_ManHandleSpecialCases( Gia_Man_t * p, Cec_ParCec_t * pPars )
|
||||||
// one of the drivers is a PI; another is a constant 0
|
// one of the drivers is a PI; another is a constant 0
|
||||||
if ( (Gia_ObjIsPi(p, pDri1) && Gia_ObjIsConst0(pDri2)) ||
|
if ( (Gia_ObjIsPi(p, pDri1) && Gia_ObjIsConst0(pDri2)) ||
|
||||||
(Gia_ObjIsPi(p, pDri2) && Gia_ObjIsConst0(pDri1)) )
|
(Gia_ObjIsPi(p, pDri2) && Gia_ObjIsConst0(pDri1)) )
|
||||||
|
{
|
||||||
|
if ( !pPars->fSilent )
|
||||||
{
|
{
|
||||||
Abc_Print( 1, "Networks are NOT EQUIVALENT. Output %d trivially differs (PI vs. constant). ", i/2 );
|
Abc_Print( 1, "Networks are NOT EQUIVALENT. Output %d trivially differs (PI vs. constant). ", i/2 );
|
||||||
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
|
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
|
||||||
|
}
|
||||||
pPars->iOutFail = i/2;
|
pPars->iOutFail = i/2;
|
||||||
Cec_ManTransformPattern( p, i/2, NULL );
|
Cec_ManTransformPattern( p, i/2, NULL );
|
||||||
// the compl attributes are the same - the PI should be complemented
|
// the compl attributes are the same - the PI should be complemented
|
||||||
|
|
@ -185,9 +201,12 @@ int Cec_ManHandleSpecialCases( Gia_Man_t * p, Cec_ParCec_t * pPars )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( Gia_ManAndNum(p) == 0 )
|
if ( Gia_ManAndNum(p) == 0 )
|
||||||
|
{
|
||||||
|
if ( !pPars->fSilent )
|
||||||
{
|
{
|
||||||
Abc_Print( 1, "Networks are equivalent. " );
|
Abc_Print( 1, "Networks are equivalent. " );
|
||||||
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
|
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -383,7 +402,7 @@ int Cec_ManVerify( Gia_Man_t * pInit, Cec_ParCec_t * pPars )
|
||||||
if ( pPars->fVerbose )
|
if ( pPars->fVerbose )
|
||||||
Abc_Print( 1, "Calling the old CEC engine.\n" );
|
Abc_Print( 1, "Calling the old CEC engine.\n" );
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
RetValue = Cec_ManVerifyOld( pNew, pPars->fVerbose, &pPars->iOutFail, clkTotal );
|
RetValue = Cec_ManVerifyOld( pNew, pPars->fVerbose, &pPars->iOutFail, clkTotal, pPars->fSilent );
|
||||||
p->pCexComb = pNew->pCexComb; pNew->pCexComb = NULL;
|
p->pCexComb = pNew->pCexComb; pNew->pCexComb = NULL;
|
||||||
if ( p->pCexComb && !Gia_ManVerifyCex( p, p->pCexComb, 1 ) )
|
if ( p->pCexComb && !Gia_ManVerifyCex( p, p->pCexComb, 1 ) )
|
||||||
Abc_Print( 1, "Counter-example simulation has failed.\n" );
|
Abc_Print( 1, "Counter-example simulation has failed.\n" );
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue