diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/aig/gia/gia.h | 1 | ||||
-rw-r--r-- | src/aig/gia/giaBalance.c | 6 | ||||
-rw-r--r-- | src/aig/gia/giaMuxes.c | 1 | ||||
-rw-r--r-- | src/base/abci/abc.c | 16 |
4 files changed, 21 insertions, 3 deletions
diff --git a/src/aig/gia/gia.h b/src/aig/gia/gia.h index 463f11e6..bc6fae06 100644 --- a/src/aig/gia/gia.h +++ b/src/aig/gia/gia.h @@ -252,6 +252,7 @@ struct Jf_Par_t_ int nRounds; int nRoundsEla; int nRelaxRatio; + int nCoarseLimit; int nVerbLimit; int DelayTarget; int fAreaOnly; diff --git a/src/aig/gia/giaBalance.c b/src/aig/gia/giaBalance.c index 749a7c1e..abb6dd19 100644 --- a/src/aig/gia/giaBalance.c +++ b/src/aig/gia/giaBalance.c @@ -1046,7 +1046,11 @@ Gia_Man_t * Gia_ManAigSyn2( Gia_Man_t * p, int fOldAlgo, int fCoarsen, int fCutM else pNew = Lf_ManPerformMapping( pTemp = pNew, pPars ); if ( fVerbose ) Gia_ManPrintStats( pNew, NULL ); -// Gia_ManStop( pTemp ); + if ( pTemp != pNew ) + { + Gia_ManAigTransferPiLevels( pNew, pTemp ); + Gia_ManStop( pTemp ); + } // perform balancing pNew = Gia_ManAreaBalance( pTemp = pNew, 0, ABC_INFINITY, fVeryVerbose, 0 ); if ( fVerbose ) Gia_ManPrintStats( pNew, NULL ); diff --git a/src/aig/gia/giaMuxes.c b/src/aig/gia/giaMuxes.c index db44e219..85db6e76 100644 --- a/src/aig/gia/giaMuxes.c +++ b/src/aig/gia/giaMuxes.c @@ -97,6 +97,7 @@ Gia_Man_t * Gia_ManDupMuxes( Gia_Man_t * p, int Limit ) Gia_Obj_t * pObj, * pFan0, * pFan1, * pFanC; int i; assert( p->pMuxes == NULL ); + assert( Limit >= 2 ); ABC_FREE( p->pRefs ); Gia_ManCreateRefs( p ); // start the new manager diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c index 068a355d..5bb79eef 100644 --- a/src/base/abci/abc.c +++ b/src/base/abci/abc.c @@ -30889,7 +30889,7 @@ int Abc_CommandAbc9Lf( Abc_Frame_t * pAbc, int argc, char ** argv ) Gia_Man_t * pNew; int c; Lf_ManSetDefaultPars( pPars ); Extra_UtilGetoptReset(); - while ( ( c = Extra_UtilGetopt( argc, argv, "KCFARDWaekmgpvwh" ) ) != EOF ) + while ( ( c = Extra_UtilGetopt( argc, argv, "KCFARLDWaekmgpvwh" ) ) != EOF ) { switch ( c ) { @@ -30954,6 +30954,17 @@ int Abc_CommandAbc9Lf( Abc_Frame_t * pAbc, int argc, char ** argv ) if ( pPars->nRelaxRatio < 0 ) goto usage; break; + case 'L': + if ( globalUtilOptind >= argc ) + { + Abc_Print( 1, "Command line switch \"-R\" should be followed by a floating point number.\n" ); + return 0; + } + pPars->nCoarseLimit = atoi(argv[globalUtilOptind]); + globalUtilOptind++; + if ( pPars->nCoarseLimit < 0 ) + goto usage; + break; case 'D': if ( globalUtilOptind >= argc ) { @@ -31026,13 +31037,14 @@ usage: sprintf(Buffer, "best possible" ); else sprintf(Buffer, "%d", pPars->DelayTarget ); - Abc_Print( -2, "usage: &lf [-KCFARD num] [-akmgpvwh]\n" ); + Abc_Print( -2, "usage: &lf [-KCFARLD num] [-akmgpvwh]\n" ); Abc_Print( -2, "\t performs technology mapping of the network\n" ); Abc_Print( -2, "\t-K num : LUT size for the mapping (2 <= K <= %d) [default = %d]\n", pPars->nLutSizeMax, pPars->nLutSize ); Abc_Print( -2, "\t-C num : the max number of priority cuts (1 <= C <= %d) [default = %d]\n", pPars->nCutNumMax, pPars->nCutNum ); Abc_Print( -2, "\t-F num : the number of area flow rounds [default = %d]\n", pPars->nRounds ); Abc_Print( -2, "\t-A num : the number of exact area rounds [default = %d]\n", pPars->nRoundsEla ); Abc_Print( -2, "\t-R num : the delay relaxation ratio (num >= 0) [default = %d]\n", pPars->nRelaxRatio ); + Abc_Print( -2, "\t-L num : the fanout limit for coarsening XOR/MUX (num >= 2) [default = %d]\n", pPars->nCoarseLimit ); Abc_Print( -2, "\t-D num : sets the delay constraint for the mapping [default = %s]\n", Buffer ); Abc_Print( -2, "\t-a : toggles area-oriented mapping [default = %s]\n", pPars->fAreaOnly? "yes": "no" ); Abc_Print( -2, "\t-e : toggles edge vs node minimization [default = %s]\n", pPars->fOptEdge? "yes": "no" ); |