diff options
| -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" );  | 
