diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2011-07-10 13:56:05 +0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2011-07-10 13:56:05 +0700 |
commit | 204fac4dca548c75d42c27bd939a565bcf7c3642 (patch) | |
tree | b06cb74ef51206d5287fef4163e45f81e690f611 /src/base | |
parent | ebfd70cdf41c5ba10b4cae66a5bcaf289f162732 (diff) | |
download | abc-204fac4dca548c75d42c27bd939a565bcf7c3642.tar.gz abc-204fac4dca548c75d42c27bd939a565bcf7c3642.tar.bz2 abc-204fac4dca548c75d42c27bd939a565bcf7c3642.zip |
Other changes to enable new features in the mapper.
Diffstat (limited to 'src/base')
-rw-r--r-- | src/base/abci/abc.c | 8 | ||||
-rw-r--r-- | src/base/abci/abcIf.c | 33 |
2 files changed, 31 insertions, 10 deletions
diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c index 926fb999..7490751a 100644 --- a/src/base/abci/abc.c +++ b/src/base/abci/abc.c @@ -12911,7 +12911,7 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv ) fLutMux = 0; Extra_UtilGetoptReset(); - while ( ( c = Extra_UtilGetopt( argc, argv, "KCFADEqaflepmrsdbugojikvh" ) ) != EOF ) + while ( ( c = Extra_UtilGetopt( argc, argv, "KCFADEqaflepmrsdbugojikcvh" ) ) != EOF ) { switch ( c ) { @@ -13034,6 +13034,9 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv ) case 'k': pPars->fEnableCheck10 ^= 1; break; + case 'c': + pPars->fEnableRealPos ^= 1; + break; case 'v': pPars->fVerbose ^= 1; break; @@ -13226,7 +13229,7 @@ usage: sprintf( LutSize, "library" ); else sprintf( LutSize, "%d", pPars->nLutSize ); - Abc_Print( -2, "usage: if [-KCFA num] [-DE float] [-qarlepmsdbugojikvh]\n" ); + Abc_Print( -2, "usage: if [-KCFA num] [-DE float] [-qarlepmsdbugojikcvh]\n" ); Abc_Print( -2, "\t performs FPGA technology mapping of the network\n" ); Abc_Print( -2, "\t-K num : the number of LUT inputs (2 < num < %d) [default = %s]\n", IF_MAX_LUTSIZE+1, LutSize ); Abc_Print( -2, "\t-C num : the max number of priority cuts (0 < num < 2^12) [default = %d]\n", pPars->nCutsMax ); @@ -13251,6 +13254,7 @@ usage: Abc_Print( -2, "\t-j : toggles enabling additional check [default = %s]\n", pPars->fEnableCheck07? "yes": "no" ); Abc_Print( -2, "\t-i : toggles enabling additional check [default = %s]\n", pPars->fEnableCheck08? "yes": "no" ); Abc_Print( -2, "\t-k : toggles enabling additional check [default = %s]\n", pPars->fEnableCheck10? "yes": "no" ); + Abc_Print( -2, "\t-c : toggles enabling additional feature [default = %s]\n", pPars->fEnableRealPos? "yes": "no" ); Abc_Print( -2, "\t-v : toggles verbose output [default = %s]\n", pPars->fVerbose? "yes": "no" ); Abc_Print( -2, "\t-h : prints the command usage\n"); return 1; diff --git a/src/base/abci/abcIf.c b/src/base/abci/abcIf.c index 400e1193..8e057019 100644 --- a/src/base/abci/abcIf.c +++ b/src/base/abci/abcIf.c @@ -40,7 +40,7 @@ extern void Abc_NtkBddReorder( Abc_Ntk_t * pNtk, int fVerbose ); extern void Abc_NtkBidecResyn( Abc_Ntk_t * pNtk, int fVerbose ); extern void Abc_NtkCollectPoDrivers( If_Man_t * p, Abc_Ntk_t * pNtk ); -extern void Abc_NtkFreePoDrivers( If_Man_t * p ); +extern void Abc_NtkFreePoDrivers( If_Man_t * p, Abc_Ntk_t * pNtk ); //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// @@ -137,14 +137,15 @@ Abc_Ntk_t * Abc_NtkIf( Abc_Ntk_t * pNtk, If_Par_t * pPars ) Abc_NtkIfComputeSwitching( pNtk, pIfMan ); // perform FPGA mapping -// Abc_NtkCollectPoDrivers( pIfMan, pNtk ); + if ( pPars->fEnableRealPos ) + Abc_NtkCollectPoDrivers( pIfMan, pNtk ); if ( !If_ManPerformMapping( pIfMan ) ) { - Abc_NtkFreePoDrivers( pIfMan ); + Abc_NtkFreePoDrivers( pIfMan, pNtk ); If_ManStop( pIfMan ); return NULL; } - Abc_NtkFreePoDrivers( pIfMan ); + Abc_NtkFreePoDrivers( pIfMan, pNtk ); // transform the result of mapping into the new network pNtkNew = Abc_NtkFromIf( pIfMan, pNtk ); @@ -712,7 +713,6 @@ Vec_Ptr_t * Abc_NtkFindGoodOrder( Abc_Ntk_t * pNtk ) ***********************************************************************/ void Abc_NtkCollectPoDrivers( If_Man_t * p, Abc_Ntk_t * pNtk ) { - // 1 a 2 b 3 c 4 a+b+c 5 ab+ac+bc Vec_Int_t * vTemp; Abc_Obj_t * pObj; If_Obj_t * pIfObj; @@ -729,7 +729,7 @@ void Abc_NtkCollectPoDrivers( If_Man_t * p, Abc_Ntk_t * pNtk ) } nGroups = (Abc_NtkPoNum(pNtk) - pNtk->nRealPos) / 5; printf( "Processing %d groups of PO drivers.\n", nGroups ); - // mark the drivers + // mark the drivers (0 a 1 b 2 c 3 s 4 c) assert( p->pDriverCuts == NULL ); p->pDriverCuts = ABC_CALLOC( Vec_Int_t *, If_ManObjNum(p) ); for ( g = 0; g < nGroups; g++ ) @@ -742,7 +742,7 @@ void Abc_NtkCollectPoDrivers( If_Man_t * p, Abc_Ntk_t * pNtk ) pIfObj = If_Regular( ((If_Obj_t *)pObj->pCopy)->pFanin0 ); Vec_IntPush( vTemp, pIfObj->Id ); } - Vec_IntSort( vTemp, 0 ); +// Vec_IntSort( vTemp, 0 ); // find output node pObj = Abc_NtkPo( pNtk, pNtk->nRealPos + g * 5 + 3 ); pIfObj = If_Regular( ((If_Obj_t *)pObj->pCopy)->pFanin0 ); @@ -755,9 +755,11 @@ void Abc_NtkCollectPoDrivers( If_Man_t * p, Abc_Ntk_t * pNtk ) { p->pDriverCuts[pIfObj->Id] = Vec_IntDup( vTemp ); pIfObj->fDriver = 1; +// printf( "%d ", pIfObj->Id ); } Vec_IntFree( vTemp ); } +// printf( "\n" ); } /**Function************************************************************* @@ -771,11 +773,26 @@ void Abc_NtkCollectPoDrivers( If_Man_t * p, Abc_Ntk_t * pNtk ) SeeAlso [] ***********************************************************************/ -void Abc_NtkFreePoDrivers( If_Man_t * p ) +void Abc_NtkFreePoDrivers( If_Man_t * p, Abc_Ntk_t * pNtk ) { + If_Obj_t * pObj; + If_Cut_t * pCut; int i; if ( p->pDriverCuts == NULL ) return; + printf( "Actual delay after mapping = %.2f\n", p->RequiredGlo ); + assert( Abc_NtkPoNum(pNtk) == If_ManCoNum(p) - Abc_NtkLatchNum(pNtk) ); + // print the cut sizes of the drivers + for ( i = pNtk->nRealPos; i < Abc_NtkPoNum(pNtk); i += 5 ) + { + pObj = If_ManCo( p, i + 4 ); + pObj = If_Regular(pObj->pFanin0); + if ( !pObj->fDriver ) + continue; + pCut = If_ObjCutBest(pObj); +// printf( "%d(%d) ", pObj->Id, pCut->nLeaves ); + } +// printf( "\n" ); for ( i = 0; i < If_ManObjNum(p); i++ ) Vec_IntFreeP( &p->pDriverCuts[i] ); ABC_FREE( p->pDriverCuts ); |