mirror of https://github.com/YosysHQ/abc.git
Version abc80515
This commit is contained in:
parent
37b6c727f1
commit
74ff01bfb5
1
abc.rc
1
abc.rc
|
|
@ -56,6 +56,7 @@ alias r3f retime -M 3 -f
|
|||
alias r3b retime -M 3 -b
|
||||
alias ren renode
|
||||
alias rh read_hie
|
||||
alias ri read_init
|
||||
alias rl read_blif
|
||||
alias rb read_bench
|
||||
alias ret retime
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ extern "C" {
|
|||
|
||||
typedef struct Fra_Par_t_ Fra_Par_t;
|
||||
typedef struct Fra_Ssw_t_ Fra_Ssw_t;
|
||||
typedef struct Fra_Sec_t_ Fra_Sec_t;
|
||||
typedef struct Fra_Man_t_ Fra_Man_t;
|
||||
typedef struct Fra_Cla_t_ Fra_Cla_t;
|
||||
typedef struct Fra_Sml_t_ Fra_Sml_t;
|
||||
|
|
@ -87,7 +88,7 @@ struct Fra_Par_t_
|
|||
int fDontShowBar; // does not show progressbar during fraiging
|
||||
};
|
||||
|
||||
// seq SAT sweeping parametesr
|
||||
// seq SAT sweeping parameters
|
||||
struct Fra_Ssw_t_
|
||||
{
|
||||
int nPartSize; // size of the partition
|
||||
|
|
@ -107,6 +108,27 @@ struct Fra_Ssw_t_
|
|||
float TimeLimit; // the runtime budget for this call
|
||||
};
|
||||
|
||||
// SEC parametesr
|
||||
struct Fra_Sec_t_
|
||||
{
|
||||
int fTryComb; // try CEC call as a preprocessing step
|
||||
int fTryBmc; // try BMC call as a preprocessing step
|
||||
int nFramesMax; // the max number of frames used for induction
|
||||
int fPhaseAbstract; // enables phase abstraction
|
||||
int fRetimeFirst; // enables most-forward retiming at the beginning
|
||||
int fRetimeRegs; // enables min-register retiming at the beginning
|
||||
int fFraiging; // enables fraiging at the beginning
|
||||
int fInterpolation; // enables interpolation
|
||||
int fReachability; // enables BDD based reachability
|
||||
int fStopOnFirstFail; // enables stopping after first output of a miter has failed to prove
|
||||
int fVerbose; // enables verbose reporting of statistics
|
||||
int fVeryVerbose; // enables very verbose reporting
|
||||
int TimeLimit; // enables the timeout
|
||||
// internal parameters
|
||||
int fRecursive; // set to 1 when SEC is called recursively
|
||||
int fReportSolution; // enables report solution in a special form
|
||||
};
|
||||
|
||||
// FRAIG equivalence classes
|
||||
struct Fra_Cla_t_
|
||||
{
|
||||
|
|
@ -329,7 +351,8 @@ extern int Fra_NodesAreImp( Fra_Man_t * p, Aig_Obj_t * pOld, Aig
|
|||
extern int Fra_NodesAreClause( Fra_Man_t * p, Aig_Obj_t * pOld, Aig_Obj_t * pNew, int fComplL, int fComplR );
|
||||
extern int Fra_NodeIsConst( Fra_Man_t * p, Aig_Obj_t * pNew );
|
||||
/*=== fraSec.c ========================================================*/
|
||||
extern int Fra_FraigSec( Aig_Man_t * p, int nFrames, int fPhaseAbstract, int fRetimeFirst, int fRetimeRegs, int fFraiging, int fVerbose, int fVeryVerbose, int TimeLimit );
|
||||
extern void Fra_SecSetDefaultParams( Fra_Sec_t * p );
|
||||
extern int Fra_FraigSec( Aig_Man_t * p, Fra_Sec_t * pParSec );
|
||||
/*=== fraSim.c ========================================================*/
|
||||
extern int Fra_SmlNodeHash( Aig_Obj_t * pObj, int nTableSize );
|
||||
extern int Fra_SmlNodeIsConst( Aig_Obj_t * pObj );
|
||||
|
|
|
|||
|
|
@ -40,12 +40,44 @@
|
|||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
int Fra_FraigSec( Aig_Man_t * p, int nFramesMax, int fPhaseAbstract, int fRetimeFirst, int fRetimeRegs, int fFraiging, int fVerbose, int fVeryVerbose, int TimeLimit )
|
||||
void Fra_SecSetDefaultParams( Fra_Sec_t * p )
|
||||
{
|
||||
memset( p, 0, sizeof(Fra_Sec_t) );
|
||||
p->fTryComb = 1; // try CEC call as a preprocessing step
|
||||
p->fTryBmc = 1; // try BMC call as a preprocessing step
|
||||
p->nFramesMax = 2; // the max number of frames used for induction
|
||||
p->fPhaseAbstract = 1; // enables phase abstraction
|
||||
p->fRetimeFirst = 1; // enables most-forward retiming at the beginning
|
||||
p->fRetimeRegs = 1; // enables min-register retiming at the beginning
|
||||
p->fFraiging = 1; // enables fraiging at the beginning
|
||||
p->fInterpolation = 1; // enables interpolation
|
||||
p->fReachability = 1; // enables BDD based reachability
|
||||
p->fStopOnFirstFail = 1; // enables stopping after first output of a miter has failed to prove
|
||||
p->fVerbose = 0; // enables verbose reporting of statistics
|
||||
p->fVeryVerbose = 0; // enables very verbose reporting
|
||||
p->TimeLimit = 0; // enables the timeout
|
||||
// internal parameters
|
||||
p->fReportSolution = 1; // enables specialized format for reporting solution
|
||||
}
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis []
|
||||
|
||||
Description []
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
int Fra_FraigSec( Aig_Man_t * p, Fra_Sec_t * pParSec )
|
||||
{
|
||||
Fra_Ssw_t Pars, * pPars = &Pars;
|
||||
Fra_Sml_t * pSml;
|
||||
Aig_Man_t * pNew, * pTemp;
|
||||
int nFrames, RetValue, nIter, clk, clkTotal = clock();
|
||||
int TimeOut = 0;
|
||||
int fLatchCorr = 0;
|
||||
float TimeLeft = 0.0;
|
||||
|
||||
|
|
@ -58,8 +90,8 @@ int Fra_FraigSec( Aig_Man_t * p, int nFramesMax, int fPhaseAbstract, int fRetime
|
|||
// prepare parameters
|
||||
memset( pPars, 0, sizeof(Fra_Ssw_t) );
|
||||
pPars->fLatchCorr = fLatchCorr;
|
||||
pPars->fVerbose = fVeryVerbose;
|
||||
if ( fVerbose )
|
||||
pPars->fVerbose = pParSec->fVeryVerbose;
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Original miter: Latches = %5d. Nodes = %6d.\n",
|
||||
Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -72,7 +104,7 @@ clk = clock();
|
|||
pNew = Aig_ManReduceLaches( pNew, 0 );
|
||||
if ( pNew->nRegs )
|
||||
pNew = Aig_ManConstReduce( pNew, 0 );
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Sequential cleanup: Latches = %5d. Nodes = %6d. ",
|
||||
Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -84,14 +116,14 @@ PRT( "Time", clock() - clk );
|
|||
|
||||
// perform phase abstraction
|
||||
clk = clock();
|
||||
if ( fPhaseAbstract )
|
||||
if ( pParSec->fPhaseAbstract )
|
||||
{
|
||||
extern Aig_Man_t * Saig_ManPhaseAbstractAuto( Aig_Man_t * p, int fVerbose );
|
||||
pNew->nTruePis = Aig_ManPiNum(pNew) - Aig_ManRegNum(pNew);
|
||||
pNew->nTruePos = Aig_ManPoNum(pNew) - Aig_ManRegNum(pNew);
|
||||
pNew = Saig_ManPhaseAbstractAuto( pTemp = pNew, 0 );
|
||||
Aig_ManStop( pTemp );
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Phase abstraction: Latches = %5d. Nodes = %6d. ",
|
||||
Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -100,12 +132,12 @@ PRT( "Time", clock() - clk );
|
|||
}
|
||||
|
||||
// perform forward retiming
|
||||
if ( fRetimeFirst && pNew->nRegs )
|
||||
if ( pParSec->fRetimeFirst && pNew->nRegs )
|
||||
{
|
||||
clk = clock();
|
||||
pNew = Rtm_ManRetime( pTemp = pNew, 1, 1000, 0 );
|
||||
Aig_ManStop( pTemp );
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Forward retiming: Latches = %5d. Nodes = %6d. ",
|
||||
Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -120,22 +152,24 @@ clk = clock();
|
|||
pNew = Aig_ManDupOrdered( pTemp = pNew );
|
||||
// pNew = Aig_ManDupDfs( pTemp = pNew );
|
||||
Aig_ManStop( pTemp );
|
||||
if ( RetValue == -1 && TimeLimit )
|
||||
if ( RetValue == -1 && pParSec->TimeLimit )
|
||||
{
|
||||
TimeLeft = (float)TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = (float)pParSec->TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = AIG_MAX( TimeLeft, 0.0 );
|
||||
if ( TimeLeft == 0.0 )
|
||||
{
|
||||
printf( "Runtime limit exceeded.\n" );
|
||||
RetValue = -1;
|
||||
TimeOut = 1;
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
pNew = Fra_FraigLatchCorrespondence( pTemp = pNew, 0, 1000, 1, fVeryVerbose, &nIter, TimeLeft );
|
||||
pNew = Fra_FraigLatchCorrespondence( pTemp = pNew, 0, 1000, 1, pParSec->fVeryVerbose, &nIter, TimeLeft );
|
||||
if ( pNew == NULL )
|
||||
{
|
||||
pNew = pTemp;
|
||||
RetValue = -1;
|
||||
TimeOut = 1;
|
||||
goto finish;
|
||||
}
|
||||
p->pSeqModel = pTemp->pSeqModel; pTemp->pSeqModel = NULL;
|
||||
|
|
@ -148,7 +182,7 @@ PRT( "Time", clock() - clkTotal );
|
|||
return RetValue;
|
||||
}
|
||||
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Latch-corr (I=%3d): Latches = %5d. Nodes = %6d. ",
|
||||
nIter, Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -156,25 +190,26 @@ PRT( "Time", clock() - clk );
|
|||
}
|
||||
}
|
||||
|
||||
if ( RetValue == -1 && TimeLimit )
|
||||
if ( RetValue == -1 && pParSec->TimeLimit )
|
||||
{
|
||||
TimeLeft = (float)TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = (float)pParSec->TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = AIG_MAX( TimeLeft, 0.0 );
|
||||
if ( TimeLeft == 0.0 )
|
||||
{
|
||||
printf( "Runtime limit exceeded.\n" );
|
||||
RetValue = -1;
|
||||
TimeOut = 1;
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
||||
// perform fraiging
|
||||
if ( fFraiging )
|
||||
if ( pParSec->fFraiging )
|
||||
{
|
||||
clk = clock();
|
||||
pNew = Fra_FraigEquivence( pTemp = pNew, 100, 0 );
|
||||
Aig_ManStop( pTemp );
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Fraiging: Latches = %5d. Nodes = %6d. ",
|
||||
Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -189,20 +224,21 @@ PRT( "Time", clock() - clk );
|
|||
if ( RetValue >= 0 )
|
||||
goto finish;
|
||||
|
||||
if ( RetValue == -1 && TimeLimit )
|
||||
if ( RetValue == -1 && pParSec->TimeLimit )
|
||||
{
|
||||
TimeLeft = (float)TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = (float)pParSec->TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = AIG_MAX( TimeLeft, 0.0 );
|
||||
if ( TimeLeft == 0.0 )
|
||||
{
|
||||
printf( "Runtime limit exceeded.\n" );
|
||||
RetValue = -1;
|
||||
TimeOut = 1;
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
||||
// perform min-area retiming
|
||||
if ( fRetimeRegs && pNew->nRegs )
|
||||
if ( pParSec->fRetimeRegs && pNew->nRegs )
|
||||
{
|
||||
extern Aig_Man_t * Saig_ManRetimeMinArea( Aig_Man_t * p, int nMaxIters, int fForwardOnly, int fBackwardOnly, int fInitial, int fVerbose );
|
||||
clk = clock();
|
||||
|
|
@ -213,7 +249,7 @@ clk = clock();
|
|||
Aig_ManStop( pTemp );
|
||||
pNew = Aig_ManDupOrdered( pTemp = pNew );
|
||||
Aig_ManStop( pTemp );
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Min-reg retiming: Latches = %5d. Nodes = %6d. ",
|
||||
Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -224,16 +260,17 @@ PRT( "Time", clock() - clk );
|
|||
// perform seq sweeping while increasing the number of frames
|
||||
RetValue = Fra_FraigMiterStatus( pNew );
|
||||
if ( RetValue == -1 )
|
||||
for ( nFrames = 1; nFrames <= nFramesMax; nFrames *= 2 )
|
||||
for ( nFrames = 1; nFrames <= pParSec->nFramesMax; nFrames *= 2 )
|
||||
{
|
||||
if ( RetValue == -1 && TimeLimit )
|
||||
if ( RetValue == -1 && pParSec->TimeLimit )
|
||||
{
|
||||
TimeLeft = (float)TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = (float)pParSec->TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = AIG_MAX( TimeLeft, 0.0 );
|
||||
if ( TimeLeft == 0.0 )
|
||||
{
|
||||
printf( "Runtime limit exceeded.\n" );
|
||||
RetValue = -1;
|
||||
TimeOut = 1;
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
|
@ -246,11 +283,12 @@ clk = clock();
|
|||
{
|
||||
pNew = pTemp;
|
||||
RetValue = -1;
|
||||
TimeOut = 1;
|
||||
goto finish;
|
||||
}
|
||||
Aig_ManStop( pTemp );
|
||||
RetValue = Fra_FraigMiterStatus( pNew );
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "K-step (K=%2d,I=%3d): Latches = %5d. Nodes = %6d. ",
|
||||
nFrames, pPars->nIters, Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -260,7 +298,7 @@ PRT( "Time", clock() - clk );
|
|||
break;
|
||||
|
||||
// perform retiming
|
||||
// if ( fRetimeFirst && pNew->nRegs )
|
||||
// if ( pParSec->fRetimeFirst && pNew->nRegs )
|
||||
if ( pNew->nRegs )
|
||||
{
|
||||
extern Aig_Man_t * Saig_ManRetimeMinArea( Aig_Man_t * p, int nMaxIters, int fForwardOnly, int fBackwardOnly, int fInitial, int fVerbose );
|
||||
|
|
@ -272,7 +310,7 @@ clk = clock();
|
|||
Aig_ManStop( pTemp );
|
||||
pNew = Aig_ManDupOrdered( pTemp = pNew );
|
||||
Aig_ManStop( pTemp );
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Min-reg retiming: Latches = %5d. Nodes = %6d. ",
|
||||
Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -290,7 +328,7 @@ clk = clock();
|
|||
// pNew = Dar_ManRewriteDefault( pTemp = pNew );
|
||||
pNew = Dar_ManCompress2( pTemp = pNew, 1, 0, 1, 0 );
|
||||
Aig_ManStop( pTemp );
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Rewriting: Latches = %5d. Nodes = %6d. ",
|
||||
Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -302,7 +340,7 @@ PRT( "Time", clock() - clk );
|
|||
{
|
||||
clk = clock();
|
||||
pSml = Fra_SmlSimulateSeq( pNew, 0, 128 * nFrames, 1 + 16/(1+Aig_ManNodeNum(pNew)/1000) );
|
||||
if ( fVerbose )
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
printf( "Seq simulation : Latches = %5d. Nodes = %6d. ",
|
||||
Aig_ManRegNum(pNew), Aig_ManNodeNum(pNew) );
|
||||
|
|
@ -327,14 +365,14 @@ PRT( "Time", clock() - clkTotal );
|
|||
|
||||
// try interplation
|
||||
clk = clock();
|
||||
if ( RetValue == -1 && Aig_ManRegNum(pNew) > 0 && Aig_ManPoNum(pNew)-Aig_ManRegNum(pNew) == 1 )
|
||||
if ( pParSec->fInterpolation && RetValue == -1 && Aig_ManRegNum(pNew) > 0 && Aig_ManPoNum(pNew)-Aig_ManRegNum(pNew) == 1 )
|
||||
{
|
||||
extern int Saig_Interpolate( Aig_Man_t * pAig, int nConfLimit, int fRewrite, int fTransLoop, int fVerbose, int * pDepth );
|
||||
int Depth;
|
||||
pNew->nTruePis = Aig_ManPiNum(pNew) - Aig_ManRegNum(pNew);
|
||||
pNew->nTruePos = Aig_ManPoNum(pNew) - Aig_ManRegNum(pNew);
|
||||
RetValue = Saig_Interpolate( pNew, 5000, 0, 1, fVeryVerbose, &Depth );
|
||||
if ( fVerbose )
|
||||
RetValue = Saig_Interpolate( pNew, 5000, 0, 1, pParSec->fVeryVerbose, &Depth );
|
||||
if ( pParSec->fVerbose )
|
||||
{
|
||||
if ( RetValue == 1 )
|
||||
printf( "Property proved using interpolation. " );
|
||||
|
|
@ -349,7 +387,7 @@ PRT( "Time", clock() - clk );
|
|||
}
|
||||
|
||||
// try reachability analysis
|
||||
if ( RetValue == -1 && Aig_ManRegNum(pNew) < 200 && Aig_ManRegNum(pNew) > 0 )
|
||||
if ( pParSec->fReachability && RetValue == -1 && Aig_ManRegNum(pNew) > 0 && Aig_ManRegNum(pNew) < 150 )
|
||||
{
|
||||
extern int Aig_ManVerifyUsingBdds( Aig_Man_t * p, int nBddMax, int nIterMax, int fPartition, int fReorder, int fVerbose );
|
||||
pNew->nTruePis = Aig_ManPiNum(pNew) - Aig_ManRegNum(pNew);
|
||||
|
|
@ -371,14 +409,16 @@ PRT( "Time", clock() - clk );
|
|||
iCount = 0;
|
||||
for ( i = 0; i < Aig_ManPoNum(pNew)-Aig_ManRegNum(pNew); i++ )
|
||||
{
|
||||
int TimeLimitCopy = 0;
|
||||
// get the remaining time for this output
|
||||
if ( TimeLimit )
|
||||
if ( pParSec->TimeLimit )
|
||||
{
|
||||
TimeLeft = (float)TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = (float)pParSec->TimeLimit - ((float)(clock()-clkTotal)/(float)(CLOCKS_PER_SEC));
|
||||
TimeLeft = AIG_MAX( TimeLeft, 0.0 );
|
||||
if ( TimeLeft == 0.0 )
|
||||
{
|
||||
printf( "Runtime limit exceeded.\n" );
|
||||
TimeOut = 1;
|
||||
goto finish;
|
||||
}
|
||||
TimeLimit2 = 1 + (int)TimeLeft;
|
||||
|
|
@ -390,12 +430,23 @@ PRT( "Time", clock() - clk );
|
|||
iCount++;
|
||||
printf( "*** Running output %d of the miter (number %d out of %d unsolved).\n", i, iCount, Counter );
|
||||
pNew2 = Aig_ManDupOneOutput( pNew, i );
|
||||
RetValue2 = Fra_FraigSec( pNew2, nFramesMax, fPhaseAbstract, fRetimeFirst, fRetimeRegs, fFraiging, fVerbose, fVeryVerbose, TimeLimit2 );
|
||||
|
||||
TimeLimitCopy = pParSec->TimeLimit;
|
||||
pParSec->TimeLimit = TimeLimit2;
|
||||
pParSec->fRecursive = 1;
|
||||
RetValue2 = Fra_FraigSec( pNew2, pParSec );
|
||||
pParSec->fRecursive = 0;
|
||||
pParSec->TimeLimit = TimeLimitCopy;
|
||||
|
||||
Aig_ManStop( pNew2 );
|
||||
if ( RetValue2 == 0 )
|
||||
goto finish;
|
||||
if ( RetValue2 == -1 )
|
||||
{
|
||||
fOneUnsolved = 1;
|
||||
if ( pParSec->fStopOnFirstFail )
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( fOneUnsolved )
|
||||
RetValue = -1;
|
||||
|
|
@ -410,23 +461,42 @@ finish:
|
|||
{
|
||||
printf( "Networks are equivalent. " );
|
||||
PRT( "Time", clock() - clkTotal );
|
||||
if ( pParSec->fReportSolution && !pParSec->fRecursive )
|
||||
{
|
||||
printf( "SOLUTION: PASS " );
|
||||
PRT( "Time", clock() - clkTotal );
|
||||
}
|
||||
}
|
||||
else if ( RetValue == 0 )
|
||||
{
|
||||
printf( "Networks are NOT EQUIVALENT. " );
|
||||
PRT( "Time", clock() - clkTotal );
|
||||
if ( pParSec->fReportSolution && !pParSec->fRecursive )
|
||||
{
|
||||
printf( "SOLUTION: FAIL " );
|
||||
PRT( "Time", clock() - clkTotal );
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
static int Counter = 1;
|
||||
char pFileName[1000];
|
||||
printf( "Networks are UNDECIDED. " );
|
||||
PRT( "Time", clock() - clkTotal );
|
||||
sprintf( pFileName, "sm%03d.aig", Counter++ );
|
||||
Ioa_WriteAiger( pNew, pFileName, 0, 0 );
|
||||
printf( "The unsolved reduced miter is written into file \"%s\".\n", pFileName );
|
||||
if ( pParSec->fReportSolution && !pParSec->fRecursive )
|
||||
{
|
||||
printf( "SOLUTION: UNDECIDED " );
|
||||
PRT( "Time", clock() - clkTotal );
|
||||
}
|
||||
if ( !TimeOut )
|
||||
{
|
||||
static int Counter = 1;
|
||||
char pFileName[1000];
|
||||
sprintf( pFileName, "sm%03d.aig", Counter++ );
|
||||
Ioa_WriteAiger( pNew, pFileName, 0, 0 );
|
||||
printf( "The unsolved reduced miter is written into file \"%s\".\n", pFileName );
|
||||
}
|
||||
}
|
||||
Aig_ManStop( pNew );
|
||||
if ( pNew )
|
||||
Aig_ManStop( pNew );
|
||||
return RetValue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -69,20 +69,10 @@ int Ioa_FileSize( char * pFileName )
|
|||
***********************************************************************/
|
||||
char * Ioa_FileNameGeneric( char * FileName )
|
||||
{
|
||||
char * pDot;
|
||||
char * pUnd;
|
||||
char * pRes;
|
||||
|
||||
// find the generic name of the file
|
||||
char * pDot, * pRes;
|
||||
pRes = Aig_UtilStrsav( FileName );
|
||||
// find the pointer to the "." symbol in the file name
|
||||
// pUnd = strstr( FileName, "_" );
|
||||
pUnd = NULL;
|
||||
pDot = strstr( FileName, "." );
|
||||
if ( pUnd )
|
||||
pRes[pUnd - FileName] = 0;
|
||||
else if ( pDot )
|
||||
pRes[pDot - FileName] = 0;
|
||||
if ( (pDot = strrchr( pRes, '.' )) )
|
||||
*pDot = 0;
|
||||
return pRes;
|
||||
}
|
||||
|
||||
|
|
@ -107,8 +97,7 @@ char * Ioa_FileNameGenericAppend( char * pBase, char * pSuffix )
|
|||
return Buffer;
|
||||
}
|
||||
strcpy( Buffer, pBase );
|
||||
pDot = strstr( Buffer, "." );
|
||||
if ( pDot )
|
||||
if ( (pDot = strrchr( Buffer, '.' )) )
|
||||
*pDot = 0;
|
||||
strcat( Buffer, pSuffix );
|
||||
// find the last occurrance of slash
|
||||
|
|
|
|||
|
|
@ -174,19 +174,10 @@ int Nwk_ManCompareAndSaveBest( Nwk_Man_t * pNtk, void * pNtl )
|
|||
***********************************************************************/
|
||||
char * Nwk_FileNameGeneric( char * FileName )
|
||||
{
|
||||
char * pDot;
|
||||
char * pUnd;
|
||||
char * pRes;
|
||||
// find the generic name of the file
|
||||
char * pDot, * pRes;
|
||||
pRes = Aig_UtilStrsav( FileName );
|
||||
// find the pointer to the "." symbol in the file name
|
||||
// pUnd = strstr( FileName, "_" );
|
||||
pUnd = NULL;
|
||||
pDot = strstr( FileName, "." );
|
||||
if ( pUnd )
|
||||
pRes[pUnd - FileName] = 0;
|
||||
else if ( pDot )
|
||||
pRes[pDot - FileName] = 0;
|
||||
if ( (pDot = strrchr( pRes, '.' )) )
|
||||
*pDot = 0;
|
||||
return pRes;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -182,7 +182,6 @@ int Saig_ManBmcSimple( Aig_Man_t * pAig, int nFrames, int nSizeMax, int nConfLim
|
|||
Aig_Man_t * pFrames, * pAigTemp;
|
||||
Aig_Obj_t * pObj;
|
||||
int status, clk, Lit, i, RetValue = 1;
|
||||
*piFrame = -1;
|
||||
// derive the timeframes
|
||||
clk = clock();
|
||||
if ( nSizeMax > 0 )
|
||||
|
|
@ -192,6 +191,7 @@ int Saig_ManBmcSimple( Aig_Man_t * pAig, int nFrames, int nSizeMax, int nConfLim
|
|||
}
|
||||
else
|
||||
pFrames = Saig_ManFramesBmc( pAig, nFrames );
|
||||
*piFrame = nFrames;
|
||||
if ( fVerbose )
|
||||
{
|
||||
printf( "AIG: PI/PO/Reg = %d/%d/%d. Node = %6d. Lev = %5d.\n",
|
||||
|
|
|
|||
|
|
@ -178,6 +178,7 @@ Aig_Man_t * Saig_ManTransformed( Aig_Man_t * p )
|
|||
Saig_ManForEachLiLo( p, pObjLi, pObjLo, i )
|
||||
{
|
||||
pObj = Aig_Mux( pNew, pCtrl, pObjLo->pData, Aig_ObjChild0Copy(pObjLi) );
|
||||
// pObj = Aig_Mux( pNew, pCtrl, Aig_ManConst0(pNew), Aig_ObjChild0Copy(pObjLi) );
|
||||
Aig_ObjCreatePo( pNew, pObj );
|
||||
}
|
||||
Aig_ManCleanup( pNew );
|
||||
|
|
@ -566,10 +567,10 @@ p->timeCnf += clock() - clk;
|
|||
// iterate the interpolation procedure
|
||||
for ( i = 0; ; i++ )
|
||||
{
|
||||
if ( p->nFrames + i >= 100 )
|
||||
if ( p->nFrames + i >= 75 )
|
||||
{
|
||||
if ( fVerbose )
|
||||
printf( "Reached limit (%d) on the number of timeframes.\n", 100 );
|
||||
printf( "Reached limit (%d) on the number of timeframes.\n", 75 );
|
||||
p->timeTotal = clock() - clkTotal;
|
||||
Saig_ManagerFree( p );
|
||||
return -1;
|
||||
|
|
|
|||
|
|
@ -1,21 +0,0 @@
|
|||
Comparing files abcDfs.c and C:\_PROJECTS\AARON\FRETIME\SRC\BASE\ABC\ABCDFS.C
|
||||
***** abcDfs.c
|
||||
return pNode->Level;
|
||||
assert( Abc_ObjIsNode( pNode ) );
|
||||
// if this node is already visited, return
|
||||
***** C:\_PROJECTS\AARON\FRETIME\SRC\BASE\ABC\ABCDFS.C
|
||||
return pNode->Level;
|
||||
assert( Abc_ObjIsNode( pNode ) || pNode->Type == ABC_OBJ_CONST1);
|
||||
// if this node is already visited, return
|
||||
*****
|
||||
|
||||
***** abcDfs.c
|
||||
return pNode->Level;
|
||||
assert( Abc_ObjIsNode( pNode ) );
|
||||
// if this node is already visited, return
|
||||
***** C:\_PROJECTS\AARON\FRETIME\SRC\BASE\ABC\ABCDFS.C
|
||||
return pNode->Level;
|
||||
assert( Abc_ObjIsNode( pNode ) || pNode->Type == ABC_OBJ_CONST1);
|
||||
// if this node is already visited, return
|
||||
*****
|
||||
|
||||
|
|
@ -135,6 +135,7 @@ static inline int Abc_StringGetNumber( char ** ppStr )
|
|||
***********************************************************************/
|
||||
int Abc_NodeStrashBlifMv( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj )
|
||||
{
|
||||
int fAddFreeVars = 1;
|
||||
char * pSop;
|
||||
Abc_Obj_t ** pValues, ** pValuesF, ** pValuesF2;
|
||||
Abc_Obj_t * pTemp, * pTemp2, * pFanin, * pFanin2, * pNet;
|
||||
|
|
@ -168,7 +169,17 @@ int Abc_NodeStrashBlifMv( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj )
|
|||
else
|
||||
Index = Abc_StringGetNumber( &pSop );
|
||||
assert( Index < nValues );
|
||||
pValues[Index] = Abc_AigConst1(pNtkNew);
|
||||
////////////////////////////////////////////
|
||||
// adding free variables for binary ND-constants
|
||||
if ( fAddFreeVars && nValues == 2 && *pSop == '-' )
|
||||
{
|
||||
pValues[1] = Abc_NtkCreatePi(pNtkNew);
|
||||
pValues[0] = Abc_ObjNot( pValues[1] );
|
||||
Abc_ObjAssignName( pValues[1], "free_var_", Abc_ObjName(pValues[1]) );
|
||||
}
|
||||
else
|
||||
pValues[Index] = Abc_AigConst1(pNtkNew);
|
||||
////////////////////////////////////////////
|
||||
// save the values in the fanout net
|
||||
pNet->pCopy = (Abc_Obj_t *)pValues;
|
||||
return 1;
|
||||
|
|
@ -414,7 +425,10 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
for ( v = 0; v < nValues; v++ )
|
||||
{
|
||||
pValues[v] = Abc_NtkCreatePi( pNtkNew );
|
||||
Abc_NtkConvertAssignName( pValues[v], pNet, v );
|
||||
if ( nValuesMax == 2 )
|
||||
Abc_ObjAssignName( pValues[v], Abc_ObjName(pNet), NULL );
|
||||
else
|
||||
Abc_NtkConvertAssignName( pValues[v], pNet, v );
|
||||
}
|
||||
// save the values in the fanout net
|
||||
pNet->pCopy = (Abc_Obj_t *)pValues;
|
||||
|
|
@ -432,7 +446,10 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
for ( v = 0; v < nValues; v++ )
|
||||
{
|
||||
pValues[v] = Abc_NtkCreateBo( pNtkNew );
|
||||
Abc_NtkConvertAssignName( pValues[v], pNet, v );
|
||||
if ( nValuesMax == 2 )
|
||||
Abc_ObjAssignName( pValues[v], Abc_ObjName(pNet), NULL );
|
||||
else
|
||||
Abc_NtkConvertAssignName( pValues[v], pNet, v );
|
||||
nCount1++;
|
||||
}
|
||||
// save the values in the fanout net
|
||||
|
|
@ -455,7 +472,10 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
for ( k = 0; k < nBits; k++ )
|
||||
{
|
||||
pBits[k] = Abc_NtkCreatePi( pNtkNew );
|
||||
Abc_NtkConvertAssignName( pBits[k], pNet, k );
|
||||
if ( nValuesMax == 2 )
|
||||
Abc_ObjAssignName( pBits[k], Abc_ObjName(pNet), NULL );
|
||||
else
|
||||
Abc_NtkConvertAssignName( pBits[k], pNet, k );
|
||||
}
|
||||
// encode the values
|
||||
for ( v = 0; v < nValues; v++ )
|
||||
|
|
@ -484,7 +504,10 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
for ( k = 0; k < nBits; k++ )
|
||||
{
|
||||
pBits[k] = Abc_NtkCreateBo( pNtkNew );
|
||||
Abc_NtkConvertAssignName( pBits[k], pNet, k );
|
||||
if ( nValuesMax == 2 )
|
||||
Abc_ObjAssignName( pBits[k], Abc_ObjName(pNet), NULL );
|
||||
else
|
||||
Abc_NtkConvertAssignName( pBits[k], pNet, k );
|
||||
nCount1++;
|
||||
}
|
||||
// encode the values
|
||||
|
|
@ -522,16 +545,19 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
continue;
|
||||
pNet = Abc_ObjFanin0(pObj);
|
||||
// skip marked nets
|
||||
if ( Abc_NodeIsTravIdCurrent(pNet) )
|
||||
continue;
|
||||
Abc_NodeSetTravIdCurrent( pNet );
|
||||
// if ( Abc_NodeIsTravIdCurrent(pNet) )
|
||||
// continue;
|
||||
// Abc_NodeSetTravIdCurrent( pNet );
|
||||
nValues = Abc_ObjMvVarNum(pNet);
|
||||
pValues = (Abc_Obj_t **)pNet->pCopy;
|
||||
for ( v = 0; v < nValues; v++ )
|
||||
{
|
||||
pTemp = Abc_NtkCreatePo( pNtkNew );
|
||||
Abc_ObjAddFanin( pTemp, pValues[v] );
|
||||
Abc_NtkConvertAssignName( pTemp, pNet, v );
|
||||
if ( nValuesMax == 2 )
|
||||
Abc_ObjAssignName( pTemp, Abc_ObjName(pNet), NULL );
|
||||
else
|
||||
Abc_NtkConvertAssignName( pTemp, pNet, v );
|
||||
}
|
||||
}
|
||||
Abc_NtkForEachCo( pNtk, pObj, i )
|
||||
|
|
@ -540,21 +566,24 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
continue;
|
||||
pNet = Abc_ObjFanin0(pObj);
|
||||
// skip marked nets
|
||||
if ( Abc_NodeIsTravIdCurrent(pNet) )
|
||||
continue;
|
||||
Abc_NodeSetTravIdCurrent( pNet );
|
||||
// if ( Abc_NodeIsTravIdCurrent(pNet) )
|
||||
// continue;
|
||||
// Abc_NodeSetTravIdCurrent( pNet );
|
||||
nValues = Abc_ObjMvVarNum(pNet);
|
||||
pValues = (Abc_Obj_t **)pNet->pCopy;
|
||||
for ( v = 0; v < nValues; v++ )
|
||||
{
|
||||
pTemp = Abc_NtkCreateBi( pNtkNew );
|
||||
Abc_ObjAddFanin( pTemp, pValues[v] );
|
||||
Abc_NtkConvertAssignName( pTemp, pNet, v );
|
||||
if ( nValuesMax == 2 )
|
||||
Abc_ObjAssignName( pTemp, Abc_ObjName(pNet), NULL );
|
||||
else
|
||||
Abc_NtkConvertAssignName( pTemp, pNet, v );
|
||||
nCount2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
else // if ( fPositional == 0 )
|
||||
{
|
||||
Abc_NtkForEachCo( pNtk, pObj, i )
|
||||
{
|
||||
|
|
@ -562,9 +591,9 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
continue;
|
||||
pNet = Abc_ObjFanin0(pObj);
|
||||
// skip marked nets
|
||||
if ( Abc_NodeIsTravIdCurrent(pNet) )
|
||||
continue;
|
||||
Abc_NodeSetTravIdCurrent( pNet );
|
||||
// if ( Abc_NodeIsTravIdCurrent(pNet) )
|
||||
// continue;
|
||||
// Abc_NodeSetTravIdCurrent( pNet );
|
||||
nValues = Abc_ObjMvVarNum(pNet);
|
||||
pValues = (Abc_Obj_t **)pNet->pCopy;
|
||||
nBits = Extra_Base2Log( nValues );
|
||||
|
|
@ -576,7 +605,10 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
pBit = Abc_AigOr( pNtkNew->pManFunc, pBit, pValues[v] );
|
||||
pTemp = Abc_NtkCreatePo( pNtkNew );
|
||||
Abc_ObjAddFanin( pTemp, pBit );
|
||||
Abc_NtkConvertAssignName( pTemp, pNet, k );
|
||||
if ( nValuesMax == 2 )
|
||||
Abc_ObjAssignName( pTemp, Abc_ObjName(pNet), NULL );
|
||||
else
|
||||
Abc_NtkConvertAssignName( pTemp, pNet, k );
|
||||
}
|
||||
}
|
||||
Abc_NtkForEachCo( pNtk, pObj, i )
|
||||
|
|
@ -585,9 +617,9 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
continue;
|
||||
pNet = Abc_ObjFanin0(pObj);
|
||||
// skip marked nets
|
||||
if ( Abc_NodeIsTravIdCurrent(pNet) )
|
||||
continue;
|
||||
Abc_NodeSetTravIdCurrent( pNet );
|
||||
// if ( Abc_NodeIsTravIdCurrent(pNet) )
|
||||
// continue;
|
||||
// Abc_NodeSetTravIdCurrent( pNet );
|
||||
nValues = Abc_ObjMvVarNum(pNet);
|
||||
pValues = (Abc_Obj_t **)pNet->pCopy;
|
||||
nBits = Extra_Base2Log( nValues );
|
||||
|
|
@ -599,7 +631,10 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
pBit = Abc_AigOr( pNtkNew->pManFunc, pBit, pValues[v] );
|
||||
pTemp = Abc_NtkCreateBi( pNtkNew );
|
||||
Abc_ObjAddFanin( pTemp, pBit );
|
||||
Abc_NtkConvertAssignName( pTemp, pNet, k );
|
||||
if ( nValuesMax == 2 )
|
||||
Abc_ObjAssignName( pTemp, Abc_ObjName(pNet), NULL );
|
||||
else
|
||||
Abc_NtkConvertAssignName( pTemp, pNet, k );
|
||||
nCount2++;
|
||||
}
|
||||
}
|
||||
|
|
@ -607,8 +642,32 @@ Abc_Ntk_t * Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk )
|
|||
|
||||
if ( Abc_NtkLatchNum(pNtk) )
|
||||
{
|
||||
Vec_Ptr_t * vTemp;
|
||||
Abc_Obj_t * pLatch, * pObjLi, * pObjLo;
|
||||
int i;
|
||||
// move free vars to the front among the PIs
|
||||
vTemp = Vec_PtrAlloc( Vec_PtrSize(pNtkNew->vPis) );
|
||||
Abc_NtkForEachPi( pNtkNew, pObj, i )
|
||||
if ( strncmp( Abc_ObjName(pObj), "free_var_", 9 ) == 0 )
|
||||
Vec_PtrPush( vTemp, pObj );
|
||||
Abc_NtkForEachPi( pNtkNew, pObj, i )
|
||||
if ( strncmp( Abc_ObjName(pObj), "free_var_", 9 ) != 0 )
|
||||
Vec_PtrPush( vTemp, pObj );
|
||||
assert( Vec_PtrSize(vTemp) == Vec_PtrSize(pNtkNew->vPis) );
|
||||
Vec_PtrFree( pNtkNew->vPis );
|
||||
pNtkNew->vPis = vTemp;
|
||||
// move free vars to the front among the CIs
|
||||
vTemp = Vec_PtrAlloc( Vec_PtrSize(pNtkNew->vCis) );
|
||||
Abc_NtkForEachCi( pNtkNew, pObj, i )
|
||||
if ( strncmp( Abc_ObjName(pObj), "free_var_", 9 ) == 0 )
|
||||
Vec_PtrPush( vTemp, pObj );
|
||||
Abc_NtkForEachCi( pNtkNew, pObj, i )
|
||||
if ( strncmp( Abc_ObjName(pObj), "free_var_", 9 ) != 0 )
|
||||
Vec_PtrPush( vTemp, pObj );
|
||||
assert( Vec_PtrSize(vTemp) == Vec_PtrSize(pNtkNew->vCis) );
|
||||
Vec_PtrFree( pNtkNew->vCis );
|
||||
pNtkNew->vCis = vTemp;
|
||||
// create registers
|
||||
assert( nCount1 == nCount2 );
|
||||
for ( i = 0; i < nCount1; i++ )
|
||||
{
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -92,6 +92,10 @@ void Abc_ObjAddFanin( Abc_Obj_t * pObj, Abc_Obj_t * pFanin )
|
|||
{
|
||||
int x = 0;
|
||||
}
|
||||
if ( pObj->Id == 1960 )
|
||||
{
|
||||
int x = 0;
|
||||
}
|
||||
// printf( "Adding fanin of %s ", Abc_ObjName(pObj) );
|
||||
// printf( "to be %s\n", Abc_ObjName(pFanin) );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13915,34 +13915,24 @@ usage:
|
|||
***********************************************************************/
|
||||
int Abc_CommandDSec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
||||
{
|
||||
Fra_Sec_t SecPar, * pSecPar = &SecPar;
|
||||
FILE * pOut, * pErr;
|
||||
Abc_Ntk_t * pNtk, * pNtk1, * pNtk2;
|
||||
int fDelete1, fDelete2;
|
||||
char ** pArgvNew;
|
||||
int nArgcNew;
|
||||
int nFrames;
|
||||
int fPhaseAbstract;
|
||||
int fRetimeFirst;
|
||||
int fRetimeRegs;
|
||||
int fFraiging;
|
||||
int fVerbose;
|
||||
int fVeryVerbose;
|
||||
int c;
|
||||
|
||||
extern int Abc_NtkDarSec( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int nFrames, int fPhaseAbstract, int fRetimeFirst, int fRetimeRegs, int fFraiging, int fVerbose, int fVeryVerbose );
|
||||
extern void Fra_SecSetDefaultParams( Fra_Sec_t * p );
|
||||
extern int Abc_NtkDarSec( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, Fra_Sec_t * p );
|
||||
|
||||
pNtk = Abc_FrameReadNtk(pAbc);
|
||||
pOut = Abc_FrameReadOut(pAbc);
|
||||
pErr = Abc_FrameReadErr(pAbc);
|
||||
|
||||
// set defaults
|
||||
nFrames = 2;
|
||||
fPhaseAbstract = 1;
|
||||
fRetimeFirst = 1;
|
||||
fRetimeRegs = 1;
|
||||
fFraiging = 1;
|
||||
fVerbose = 0;
|
||||
fVeryVerbose = 0;
|
||||
Fra_SecSetDefaultParams( pSecPar );
|
||||
pSecPar->TimeLimit = 300;
|
||||
Extra_UtilGetoptReset();
|
||||
while ( ( c = Extra_UtilGetopt( argc, argv, "Farmfwvh" ) ) != EOF )
|
||||
{
|
||||
|
|
@ -13954,28 +13944,28 @@ int Abc_CommandDSec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
fprintf( pErr, "Command line switch \"-F\" should be followed by an integer.\n" );
|
||||
goto usage;
|
||||
}
|
||||
nFrames = atoi(argv[globalUtilOptind]);
|
||||
pSecPar->nFramesMax = atoi(argv[globalUtilOptind]);
|
||||
globalUtilOptind++;
|
||||
if ( nFrames < 0 )
|
||||
if ( pSecPar->nFramesMax < 0 )
|
||||
goto usage;
|
||||
break;
|
||||
case 'a':
|
||||
fPhaseAbstract ^= 1;
|
||||
pSecPar->fPhaseAbstract ^= 1;
|
||||
break;
|
||||
case 'r':
|
||||
fRetimeFirst ^= 1;
|
||||
pSecPar->fRetimeFirst ^= 1;
|
||||
break;
|
||||
case 'm':
|
||||
fRetimeRegs ^= 1;
|
||||
pSecPar->fRetimeRegs ^= 1;
|
||||
break;
|
||||
case 'f':
|
||||
fFraiging ^= 1;
|
||||
pSecPar->fFraiging ^= 1;
|
||||
break;
|
||||
case 'w':
|
||||
fVeryVerbose ^= 1;
|
||||
pSecPar->fVeryVerbose ^= 1;
|
||||
break;
|
||||
case 'v':
|
||||
fVerbose ^= 1;
|
||||
pSecPar->fVerbose ^= 1;
|
||||
break;
|
||||
default:
|
||||
goto usage;
|
||||
|
|
@ -13994,7 +13984,7 @@ int Abc_CommandDSec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
}
|
||||
|
||||
// perform verification
|
||||
Abc_NtkDarSec( pNtk1, pNtk2, nFrames, fPhaseAbstract, fRetimeFirst, fRetimeRegs, fFraiging, fVerbose, fVeryVerbose );
|
||||
Abc_NtkDarSec( pNtk1, pNtk2, pSecPar );
|
||||
|
||||
if ( fDelete1 ) Abc_NtkDelete( pNtk1 );
|
||||
if ( fDelete2 ) Abc_NtkDelete( pNtk2 );
|
||||
|
|
@ -14003,13 +13993,13 @@ int Abc_CommandDSec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
usage:
|
||||
fprintf( pErr, "usage: dsec [-F num] [-armfwvh] <file1> <file2>\n" );
|
||||
fprintf( pErr, "\t performs inductive sequential equivalence checking\n" );
|
||||
fprintf( pErr, "\t-F num : the limit on the depth of induction [default = %d]\n", nFrames );
|
||||
fprintf( pErr, "\t-a : toggles the use of phase abstraction [default = %s]\n", fPhaseAbstract? "yes": "no" );
|
||||
fprintf( pErr, "\t-r : toggles forward retiming at the beginning [default = %s]\n", fRetimeFirst? "yes": "no" );
|
||||
fprintf( pErr, "\t-m : toggles min-register retiming [default = %s]\n", fRetimeRegs? "yes": "no" );
|
||||
fprintf( pErr, "\t-f : toggles the internal use of fraiging [default = %s]\n", fFraiging? "yes": "no" );
|
||||
fprintf( pErr, "\t-v : toggles verbose output [default = %s]\n", fVerbose? "yes": "no" );
|
||||
fprintf( pErr, "\t-w : toggles additional verbose output [default = %s]\n", fVeryVerbose? "yes": "no" );
|
||||
fprintf( pErr, "\t-F num : the limit on the depth of induction [default = %d]\n", pSecPar->nFramesMax );
|
||||
fprintf( pErr, "\t-a : toggles the use of phase abstraction [default = %s]\n", pSecPar->fPhaseAbstract? "yes": "no" );
|
||||
fprintf( pErr, "\t-r : toggles forward retiming at the beginning [default = %s]\n", pSecPar->fRetimeFirst? "yes": "no" );
|
||||
fprintf( pErr, "\t-m : toggles min-register retiming [default = %s]\n", pSecPar->fRetimeRegs? "yes": "no" );
|
||||
fprintf( pErr, "\t-f : toggles the internal use of fraiging [default = %s]\n", pSecPar->fFraiging? "yes": "no" );
|
||||
fprintf( pErr, "\t-v : toggles verbose output [default = %s]\n", pSecPar->fVerbose? "yes": "no" );
|
||||
fprintf( pErr, "\t-w : toggles additional verbose output [default = %s]\n", pSecPar->fVeryVerbose? "yes": "no" );
|
||||
fprintf( pErr, "\t-h : print the command usage\n");
|
||||
fprintf( pErr, "\tfile1 : (optional) the file with the first network\n");
|
||||
fprintf( pErr, "\tfile2 : (optional) the file with the second network\n");
|
||||
|
|
@ -14031,50 +14021,31 @@ usage:
|
|||
***********************************************************************/
|
||||
int Abc_CommandDProve( Abc_Frame_t * pAbc, int argc, char ** argv )
|
||||
{
|
||||
Fra_Sec_t SecPar, * pSecPar = &SecPar;
|
||||
FILE * pOut, * pErr;
|
||||
Abc_Ntk_t * pNtk;
|
||||
int fTryComb;
|
||||
int fTryBmc;
|
||||
int nFrames;
|
||||
int fPhaseAbstract;
|
||||
int fRetimeFirst;
|
||||
int fRetimeRegs;
|
||||
int fFraiging;
|
||||
int fVerbose;
|
||||
int fVeryVerbose;
|
||||
int TimeLimit;
|
||||
int c;
|
||||
|
||||
extern int Abc_NtkDarProve( Abc_Ntk_t * pNtk, int fTryComb, int fTryBmc,
|
||||
int nFrames, int fPhaseAbstract, int fRetimeFirst,
|
||||
int fRetimeRegs, int fFraiging, int fVerbose,
|
||||
int fVeryVerbose, int TimeLimit );
|
||||
extern void Fra_SecSetDefaultParams( Fra_Sec_t * p );
|
||||
extern int Abc_NtkDarProve( Abc_Ntk_t * pNtk, Fra_Sec_t * pSecPar );
|
||||
|
||||
pNtk = Abc_FrameReadNtk(pAbc);
|
||||
pOut = Abc_FrameReadOut(pAbc);
|
||||
pErr = Abc_FrameReadErr(pAbc);
|
||||
|
||||
// set defaults
|
||||
fTryComb = 1;
|
||||
fTryBmc = 1;
|
||||
nFrames = 2;
|
||||
fPhaseAbstract = 1;
|
||||
fRetimeFirst = 1;
|
||||
fRetimeRegs = 1;
|
||||
fFraiging = 1;
|
||||
fVerbose = 0;
|
||||
fVeryVerbose = 0;
|
||||
TimeLimit = 300;
|
||||
Fra_SecSetDefaultParams( pSecPar );
|
||||
pSecPar->TimeLimit = 300;
|
||||
Extra_UtilGetoptReset();
|
||||
while ( ( c = Extra_UtilGetopt( argc, argv, "cbTFarmfwvh" ) ) != EOF )
|
||||
{
|
||||
switch ( c )
|
||||
{
|
||||
case 'c':
|
||||
fTryComb ^= 1;
|
||||
pSecPar->fTryComb ^= 1;
|
||||
break;
|
||||
case 'b':
|
||||
fTryBmc ^= 1;
|
||||
pSecPar->fTryBmc ^= 1;
|
||||
break;
|
||||
case 'T':
|
||||
if ( globalUtilOptind >= argc )
|
||||
|
|
@ -14082,9 +14053,9 @@ int Abc_CommandDProve( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
fprintf( pErr, "Command line switch \"-T\" should be followed by an integer.\n" );
|
||||
goto usage;
|
||||
}
|
||||
TimeLimit = atoi(argv[globalUtilOptind]);
|
||||
pSecPar->TimeLimit = atoi(argv[globalUtilOptind]);
|
||||
globalUtilOptind++;
|
||||
if ( TimeLimit < 0 )
|
||||
if ( pSecPar->TimeLimit < 0 )
|
||||
goto usage;
|
||||
break;
|
||||
case 'F':
|
||||
|
|
@ -14093,40 +14064,34 @@ int Abc_CommandDProve( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
fprintf( pErr, "Command line switch \"-F\" should be followed by an integer.\n" );
|
||||
goto usage;
|
||||
}
|
||||
nFrames = atoi(argv[globalUtilOptind]);
|
||||
pSecPar->nFramesMax = atoi(argv[globalUtilOptind]);
|
||||
globalUtilOptind++;
|
||||
if ( nFrames < 0 )
|
||||
if ( pSecPar->nFramesMax < 0 )
|
||||
goto usage;
|
||||
break;
|
||||
case 'a':
|
||||
fPhaseAbstract ^= 1;
|
||||
pSecPar->fPhaseAbstract ^= 1;
|
||||
break;
|
||||
case 'r':
|
||||
fRetimeFirst ^= 1;
|
||||
pSecPar->fRetimeFirst ^= 1;
|
||||
break;
|
||||
case 'm':
|
||||
fRetimeRegs ^= 1;
|
||||
pSecPar->fRetimeRegs ^= 1;
|
||||
break;
|
||||
case 'f':
|
||||
fFraiging ^= 1;
|
||||
pSecPar->fFraiging ^= 1;
|
||||
break;
|
||||
case 'w':
|
||||
fVeryVerbose ^= 1;
|
||||
pSecPar->fVeryVerbose ^= 1;
|
||||
break;
|
||||
case 'v':
|
||||
fVerbose ^= 1;
|
||||
pSecPar->fVerbose ^= 1;
|
||||
break;
|
||||
default:
|
||||
goto usage;
|
||||
}
|
||||
}
|
||||
|
||||
if ( Abc_NtkLatchNum(pNtk) == 0 )
|
||||
{
|
||||
printf( "The network has no latches. Running combinational command \"iprove\".\n" );
|
||||
Cmd_CommandExecute( pAbc, "orpos; st; iprove" );
|
||||
return 0;
|
||||
}
|
||||
if ( !Abc_NtkIsStrash(pNtk) )
|
||||
{
|
||||
printf( "This command works only for structrally hashed networks. Run \"st\".\n" );
|
||||
|
|
@ -14134,22 +14099,22 @@ int Abc_CommandDProve( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
}
|
||||
|
||||
// perform verification
|
||||
Abc_NtkDarProve( pNtk, fTryComb, fTryBmc, nFrames, fPhaseAbstract, fRetimeFirst, fRetimeRegs, fFraiging, fVerbose, fVeryVerbose, TimeLimit );
|
||||
Abc_NtkDarProve( pNtk, pSecPar );
|
||||
return 0;
|
||||
|
||||
usage:
|
||||
fprintf( pErr, "usage: dprove [-F num] [-T num] [-cbarmfwvh]\n" );
|
||||
fprintf( pErr, "\t performs SEC on the sequential miter\n" );
|
||||
fprintf( pErr, "\t-F num : the limit on the depth of induction [default = %d]\n", nFrames );
|
||||
fprintf( pErr, "\t-T num : the approximate runtime limit (in seconds) [default = %d]\n", TimeLimit );
|
||||
fprintf( pErr, "\t-c : toggles using CEC before attempting SEC [default = %s]\n", fTryComb? "yes": "no" );
|
||||
fprintf( pErr, "\t-b : toggles using BMC before attempting SEC [default = %s]\n", fTryBmc? "yes": "no" );
|
||||
fprintf( pErr, "\t-a : toggles the use of phase abstraction [default = %s]\n", fPhaseAbstract? "yes": "no" );
|
||||
fprintf( pErr, "\t-r : toggles forward retiming at the beginning [default = %s]\n", fRetimeFirst? "yes": "no" );
|
||||
fprintf( pErr, "\t-m : toggles min-register retiming [default = %s]\n", fRetimeRegs? "yes": "no" );
|
||||
fprintf( pErr, "\t-f : toggles the internal use of fraiging [default = %s]\n", fFraiging? "yes": "no" );
|
||||
fprintf( pErr, "\t-v : toggles verbose output [default = %s]\n", fVerbose? "yes": "no" );
|
||||
fprintf( pErr, "\t-w : toggles additional verbose output [default = %s]\n", fVeryVerbose? "yes": "no" );
|
||||
fprintf( pErr, "\t-F num : the limit on the depth of induction [default = %d]\n", pSecPar->nFramesMax );
|
||||
fprintf( pErr, "\t-T num : the approximate runtime limit (in seconds) [default = %d]\n", pSecPar->TimeLimit );
|
||||
fprintf( pErr, "\t-c : toggles using CEC before attempting SEC [default = %s]\n", pSecPar->fTryComb? "yes": "no" );
|
||||
fprintf( pErr, "\t-b : toggles using BMC before attempting SEC [default = %s]\n", pSecPar->fTryBmc? "yes": "no" );
|
||||
fprintf( pErr, "\t-a : toggles the use of phase abstraction [default = %s]\n", pSecPar->fPhaseAbstract? "yes": "no" );
|
||||
fprintf( pErr, "\t-r : toggles forward retiming at the beginning [default = %s]\n", pSecPar->fRetimeFirst? "yes": "no" );
|
||||
fprintf( pErr, "\t-m : toggles min-register retiming [default = %s]\n", pSecPar->fRetimeRegs? "yes": "no" );
|
||||
fprintf( pErr, "\t-f : toggles the internal use of fraiging [default = %s]\n", pSecPar->fFraiging? "yes": "no" );
|
||||
fprintf( pErr, "\t-v : toggles verbose output [default = %s]\n", pSecPar->fVerbose? "yes": "no" );
|
||||
fprintf( pErr, "\t-w : toggles additional verbose output [default = %s]\n", pSecPar->fVeryVerbose? "yes": "no" );
|
||||
fprintf( pErr, "\t-h : print the command usage\n");
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -17575,29 +17540,22 @@ usage:
|
|||
***********************************************************************/
|
||||
int Abc_CommandAbc8DSec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
||||
{
|
||||
Fra_Sec_t SecPar, * pSecPar = &SecPar;
|
||||
Aig_Man_t * pAig;
|
||||
char ** pArgvNew;
|
||||
int nArgcNew;
|
||||
int nFrames;
|
||||
int fPhaseAbstract;
|
||||
int fRetimeFirst;
|
||||
int fRetimeRegs;
|
||||
int fFraiging;
|
||||
int fVerbose;
|
||||
int fVeryVerbose;
|
||||
int c;
|
||||
|
||||
extern int Fra_FraigSec( Aig_Man_t * p, int nFramesMax, int fPhaseAbstract, int fRetimeFirst, int fRetimeRegs, int fFraiging, int fVerbose, int fVeryVerbose, int TimeLimit );
|
||||
extern void Fra_SecSetDefaultParams( Fra_Sec_t * pSecPar );
|
||||
extern int Fra_FraigSec( Aig_Man_t * p, Fra_Sec_t * pSecPar );
|
||||
extern Aig_Man_t * Ntl_ManPrepareSec( char * pFileName1, char * pFileName2 );
|
||||
|
||||
// set defaults
|
||||
nFrames = 2;
|
||||
fPhaseAbstract = 0;
|
||||
fRetimeFirst = 0;
|
||||
fRetimeRegs = 0;
|
||||
fFraiging = 1;
|
||||
fVerbose = 0;
|
||||
fVeryVerbose = 0;
|
||||
Fra_SecSetDefaultParams( pSecPar );
|
||||
pSecPar->nFramesMax = 2;
|
||||
pSecPar->fPhaseAbstract = 0;
|
||||
pSecPar->fRetimeFirst = 0;
|
||||
pSecPar->fRetimeRegs = 0;
|
||||
Extra_UtilGetoptReset();
|
||||
while ( ( c = Extra_UtilGetopt( argc, argv, "Farmfwvh" ) ) != EOF )
|
||||
{
|
||||
|
|
@ -17609,28 +17567,28 @@ int Abc_CommandAbc8DSec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
fprintf( stdout, "Command line switch \"-F\" should be followed by an integer.\n" );
|
||||
goto usage;
|
||||
}
|
||||
nFrames = atoi(argv[globalUtilOptind]);
|
||||
pSecPar->nFramesMax = atoi(argv[globalUtilOptind]);
|
||||
globalUtilOptind++;
|
||||
if ( nFrames < 0 )
|
||||
if ( pSecPar->nFramesMax < 0 )
|
||||
goto usage;
|
||||
break;
|
||||
case 'a':
|
||||
fPhaseAbstract ^= 1;
|
||||
pSecPar->fPhaseAbstract ^= 1;
|
||||
break;
|
||||
case 'r':
|
||||
fRetimeFirst ^= 1;
|
||||
pSecPar->fRetimeFirst ^= 1;
|
||||
break;
|
||||
case 'm':
|
||||
fRetimeRegs ^= 1;
|
||||
pSecPar->fRetimeRegs ^= 1;
|
||||
break;
|
||||
case 'f':
|
||||
fFraiging ^= 1;
|
||||
pSecPar->fFraiging ^= 1;
|
||||
break;
|
||||
case 'w':
|
||||
fVeryVerbose ^= 1;
|
||||
pSecPar->fVeryVerbose ^= 1;
|
||||
break;
|
||||
case 'v':
|
||||
fVerbose ^= 1;
|
||||
pSecPar->fVerbose ^= 1;
|
||||
break;
|
||||
default:
|
||||
goto usage;
|
||||
|
|
@ -17648,20 +17606,20 @@ int Abc_CommandAbc8DSec( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
pAig = Ntl_ManPrepareSec( pArgvNew[0], pArgvNew[1] );
|
||||
if ( pAig == NULL )
|
||||
return 0;
|
||||
Fra_FraigSec( pAig, nFrames, fPhaseAbstract, fRetimeFirst, fRetimeRegs, fFraiging, fVerbose, fVeryVerbose, 0 );
|
||||
Fra_FraigSec( pAig, pSecPar );
|
||||
Aig_ManStop( pAig );
|
||||
return 0;
|
||||
|
||||
usage:
|
||||
fprintf( stdout, "usage: *dsec [-F num] [-armfwvh] <file1> <file2>\n" );
|
||||
fprintf( stdout, "\t performs sequential equivalence checking for two designs\n" );
|
||||
fprintf( stdout, "\t-F num : the limit on the depth of induction [default = %d]\n", nFrames );
|
||||
fprintf( stdout, "\t-a : toggles the use of phase abstraction [default = %s]\n", fPhaseAbstract? "yes": "no" );
|
||||
fprintf( stdout, "\t-r : toggles forward retiming at the beginning [default = %s]\n", fRetimeFirst? "yes": "no" );
|
||||
fprintf( stdout, "\t-m : toggles min-register retiming [default = %s]\n", fRetimeRegs? "yes": "no" );
|
||||
fprintf( stdout, "\t-f : toggles the internal use of fraiging [default = %s]\n", fFraiging? "yes": "no" );
|
||||
fprintf( stdout, "\t-v : toggles verbose output [default = %s]\n", fVerbose? "yes": "no" );
|
||||
fprintf( stdout, "\t-w : toggles additional verbose output [default = %s]\n", fVeryVerbose? "yes": "no" );
|
||||
fprintf( stdout, "\t-F num : the limit on the depth of induction [default = %d]\n", pSecPar->nFramesMax );
|
||||
fprintf( stdout, "\t-a : toggles the use of phase abstraction [default = %s]\n", pSecPar->fPhaseAbstract? "yes": "no" );
|
||||
fprintf( stdout, "\t-r : toggles forward retiming at the beginning [default = %s]\n", pSecPar->fRetimeFirst? "yes": "no" );
|
||||
fprintf( stdout, "\t-m : toggles min-register retiming [default = %s]\n", pSecPar->fRetimeRegs? "yes": "no" );
|
||||
fprintf( stdout, "\t-f : toggles the internal use of fraiging [default = %s]\n", pSecPar->fFraiging? "yes": "no" );
|
||||
fprintf( stdout, "\t-v : toggles verbose output [default = %s]\n", pSecPar->fVerbose? "yes": "no" );
|
||||
fprintf( stdout, "\t-w : toggles additional verbose output [default = %s]\n", pSecPar->fVeryVerbose? "yes": "no" );
|
||||
fprintf( stdout, "\t-h : print the command usage\n");
|
||||
fprintf( stdout, "\tfile1 : the file with the first design\n");
|
||||
fprintf( stdout, "\tfile2 : the file with the second design\n");
|
||||
|
|
|
|||
|
|
@ -1229,7 +1229,7 @@ int Abc_NtkDarBmc( Abc_Ntk_t * pNtk, int nFrames, int nSizeMax, int nBTLimit, in
|
|||
RetValue = Saig_ManBmcSimple( pMan, nFrames, nSizeMax, nBTLimit, fRewrite, fVerbose, &iFrame );
|
||||
pNtk->pSeqModel = pMan->pSeqModel; pMan->pSeqModel = NULL;
|
||||
if ( RetValue == 1 )
|
||||
printf( "No output was asserted in %d frames. ", nFrames );
|
||||
printf( "No output was asserted in %d frames. ", iFrame );
|
||||
else if ( RetValue == -1 )
|
||||
printf( "No output was asserted in %d frames. Reached conflict limit (%d). ", iFrame, nBTLimit );
|
||||
else // if ( RetValue == 0 )
|
||||
|
|
@ -1309,15 +1309,17 @@ PRT( "Time", clock() - clk );
|
|||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
int Abc_NtkDarProve( Abc_Ntk_t * pNtk, int fTryComb, int fTryBmc, int nFrames, int fPhaseAbstract, int fRetimeFirst, int fRetimeRegs, int fFraiging, int fVerbose, int fVeryVerbose, int TimeLimit )
|
||||
int Abc_NtkDarProve( Abc_Ntk_t * pNtk, Fra_Sec_t * pSecPar )
|
||||
{
|
||||
Aig_Man_t * pMan;
|
||||
int RetValue;
|
||||
if ( fTryComb )
|
||||
int RetValue, clkTotal = clock();
|
||||
if ( pSecPar->fTryComb || Abc_NtkLatchNum(pNtk) == 0 )
|
||||
{
|
||||
Prove_Params_t Params, * pParams = &Params;
|
||||
Abc_Ntk_t * pNtkComb;
|
||||
int RetValue, clk = clock();
|
||||
if ( Abc_NtkLatchNum(pNtk) == 0 )
|
||||
printf( "The network has no latches. Running CEC.\n" );
|
||||
// create combinational network
|
||||
pNtkComb = Abc_NtkDup( pNtk );
|
||||
Abc_NtkMakeComb( pNtkComb, 1 );
|
||||
|
|
@ -1332,14 +1334,27 @@ int Abc_NtkDarProve( Abc_Ntk_t * pNtk, int fTryComb, int fTryBmc, int nFrames, i
|
|||
{
|
||||
printf( "Networks are equivalent after CEC. " );
|
||||
PRT( "Time", clock() - clk );
|
||||
if ( pSecPar->fReportSolution )
|
||||
{
|
||||
printf( "SOLUTION: PASS " );
|
||||
PRT( "Time", clock() - clkTotal );
|
||||
}
|
||||
return RetValue;
|
||||
}
|
||||
}
|
||||
if ( fTryBmc )
|
||||
if ( pSecPar->fTryBmc )
|
||||
{
|
||||
RetValue = Abc_NtkDarBmc( pNtk, 20, 100000, 1000, 0, 1, 0 );
|
||||
RetValue = Abc_NtkDarBmc( pNtk, 20, 100000, 2000, 0, 1, 0 );
|
||||
if ( RetValue == 0 )
|
||||
{
|
||||
printf( "Networks are not equivalent.\n" );
|
||||
if ( pSecPar->fReportSolution )
|
||||
{
|
||||
printf( "SOLUTION: FAIL " );
|
||||
PRT( "Time", clock() - clkTotal );
|
||||
}
|
||||
return RetValue;
|
||||
}
|
||||
}
|
||||
// derive the AIG manager
|
||||
pMan = Abc_NtkToDar( pNtk, 0, 1 );
|
||||
|
|
@ -1350,7 +1365,7 @@ int Abc_NtkDarProve( Abc_Ntk_t * pNtk, int fTryComb, int fTryBmc, int nFrames, i
|
|||
}
|
||||
assert( pMan->nRegs > 0 );
|
||||
// perform verification
|
||||
RetValue = Fra_FraigSec( pMan, nFrames, fPhaseAbstract, fRetimeFirst, fRetimeRegs, fFraiging, fVerbose, fVeryVerbose, TimeLimit );
|
||||
RetValue = Fra_FraigSec( pMan, pSecPar );
|
||||
pNtk->pSeqModel = pMan->pSeqModel; pMan->pSeqModel = NULL;
|
||||
if ( pNtk->pSeqModel )
|
||||
{
|
||||
|
|
@ -1372,7 +1387,7 @@ int Abc_NtkDarProve( Abc_Ntk_t * pNtk, int fTryComb, int fTryBmc, int nFrames, i
|
|||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
int Abc_NtkDarSec( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int nFrames, int fPhaseAbstract, int fRetimeFirst, int fRetimeRegs, int fFraiging, int fVerbose, int fVeryVerbose )
|
||||
int Abc_NtkDarSec( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, Fra_Sec_t * pSecPar )
|
||||
{
|
||||
// Fraig_Params_t Params;
|
||||
Aig_Man_t * pMan;
|
||||
|
|
@ -1392,8 +1407,8 @@ int Abc_NtkDarSec( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int nFrames, int fPhase
|
|||
extern void Abc_NtkVerifyReportErrorSeq( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int * pModel, int nFrames );
|
||||
printf( "Networks are NOT EQUIVALENT after structural hashing.\n" );
|
||||
// report the error
|
||||
pMiter->pModel = Abc_NtkVerifyGetCleanModel( pMiter, nFrames );
|
||||
Abc_NtkVerifyReportErrorSeq( pNtk1, pNtk2, pMiter->pModel, nFrames );
|
||||
pMiter->pModel = Abc_NtkVerifyGetCleanModel( pMiter, pSecPar->nFramesMax );
|
||||
Abc_NtkVerifyReportErrorSeq( pNtk1, pNtk2, pMiter->pModel, pSecPar->nFramesMax );
|
||||
FREE( pMiter->pModel );
|
||||
Abc_NtkDelete( pMiter );
|
||||
return 0;
|
||||
|
|
@ -1444,7 +1459,7 @@ int Abc_NtkDarSec( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int nFrames, int fPhase
|
|||
assert( pMan->nRegs > 0 );
|
||||
|
||||
// perform verification
|
||||
RetValue = Fra_FraigSec( pMan, nFrames, fPhaseAbstract, fRetimeFirst, fRetimeRegs, fFraiging, fVerbose, fVeryVerbose, 0 );
|
||||
RetValue = Fra_FraigSec( pMan, pSecPar );
|
||||
Aig_ManStop( pMan );
|
||||
return RetValue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -683,7 +683,7 @@ int IoCommandReadInit( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
goto usage;
|
||||
}
|
||||
}
|
||||
if ( argc != globalUtilOptind + 1 )
|
||||
if ( argc != globalUtilOptind && argc != globalUtilOptind + 1 )
|
||||
goto usage;
|
||||
|
||||
if ( pNtk == NULL )
|
||||
|
|
@ -692,7 +692,16 @@ int IoCommandReadInit( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
return 1;
|
||||
}
|
||||
// get the input file name
|
||||
pFileName = argv[globalUtilOptind];
|
||||
if ( argc == globalUtilOptind + 1 )
|
||||
pFileName = argv[globalUtilOptind];
|
||||
else if ( pNtk->pSpec )
|
||||
pFileName = Extra_FileNameGenericAppend( pNtk->pSpec, ".init" );
|
||||
else
|
||||
{
|
||||
printf( "File name should be given on the command line.\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
// read the file using the corresponding file reader
|
||||
pNtk = Abc_NtkDup( pNtk );
|
||||
Io_ReadBenchInit( pNtk, pFileName );
|
||||
|
|
|
|||
|
|
@ -160,20 +160,10 @@ char * Extra_FileNameAppend( char * pBase, char * pSuffix )
|
|||
***********************************************************************/
|
||||
char * Extra_FileNameGeneric( char * FileName )
|
||||
{
|
||||
char * pDot;
|
||||
char * pUnd;
|
||||
char * pRes;
|
||||
|
||||
// find the generic name of the file
|
||||
char * pDot, * pRes;
|
||||
pRes = Extra_UtilStrsav( FileName );
|
||||
// find the pointer to the "." symbol in the file name
|
||||
// pUnd = strstr( FileName, "_" );
|
||||
pUnd = NULL;
|
||||
pDot = strstr( FileName, "." );
|
||||
if ( pUnd )
|
||||
pRes[pUnd - FileName] = 0;
|
||||
else if ( pDot )
|
||||
pRes[pDot - FileName] = 0;
|
||||
if ( (pDot = strrchr( pRes, '.' )) )
|
||||
*pDot = 0;
|
||||
return pRes;
|
||||
}
|
||||
|
||||
|
|
@ -193,8 +183,7 @@ char * Extra_FileNameGenericAppend( char * pBase, char * pSuffix )
|
|||
static char Buffer[1000];
|
||||
char * pDot;
|
||||
strcpy( Buffer, pBase );
|
||||
pDot = strstr( Buffer, "." );
|
||||
if ( pDot )
|
||||
if ( (pDot = strrchr( Buffer, '.' )) )
|
||||
*pDot = 0;
|
||||
strcat( Buffer, pSuffix );
|
||||
return Buffer;
|
||||
|
|
|
|||
|
|
@ -789,7 +789,7 @@ clause* sat_solver_propagate(sat_solver* s)
|
|||
return confl;
|
||||
}
|
||||
|
||||
static inline int clause_cmp (const void* x, const void* y) {
|
||||
static int clause_cmp (const void* x, const void* y) {
|
||||
return clause_size((clause*)x) > 2 && (clause_size((clause*)y) == 2 || clause_activity((clause*)x) < clause_activity((clause*)y)) ? -1 : 1; }
|
||||
|
||||
void sat_solver_reducedb(sat_solver* s)
|
||||
|
|
|
|||
Loading…
Reference in New Issue