Commit 6c2ac766 by Alan Mishchenko

Added another specialized check to the mapper.

parent 86ba294d
...@@ -21,7 +21,7 @@ set gnuplotwin wgnuplot.exe ...@@ -21,7 +21,7 @@ set gnuplotwin wgnuplot.exe
set gnuplotunix gnuplot set gnuplotunix gnuplot
# Niklas Een's commands # Niklas Een's commands
load_plugin C:\_projects\abc\_TEST\bip\bip_2011-04-26.exe "BIP" load_plugin C:\_projects\abc\_TEST\bip\bip_2011-06-27.exe "BIP"
# standard aliases # standard aliases
alias b balance alias b balance
......
...@@ -12884,7 +12884,7 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -12884,7 +12884,7 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv )
fLutMux = 0; fLutMux = 0;
Extra_UtilGetoptReset(); Extra_UtilGetoptReset();
while ( ( c = Extra_UtilGetopt( argc, argv, "KCFADEqaflepmrsdbugojkvh" ) ) != EOF ) while ( ( c = Extra_UtilGetopt( argc, argv, "KCFADEqaflepmrsdbugojikvh" ) ) != EOF )
{ {
switch ( c ) switch ( c )
{ {
...@@ -12999,10 +12999,13 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -12999,10 +12999,13 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv )
pPars->fUseBuffs ^= 1; pPars->fUseBuffs ^= 1;
break; break;
case 'j': case 'j':
pPars->fEnableCheck ^= 1; pPars->fEnableCheck07 ^= 1;
break;
case 'i':
pPars->fEnableCheck08 ^= 1;
break; break;
case 'k': case 'k':
pPars->fEnableCheck2 ^= 1; pPars->fEnableCheck10 ^= 1;
break; break;
case 'v': case 'v':
pPars->fVerbose ^= 1; pPars->fVerbose ^= 1;
...@@ -13083,23 +13086,32 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -13083,23 +13086,32 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv )
pPars->fCutMin = 1; pPars->fCutMin = 1;
} }
if ( pPars->fEnableCheck && pPars->fEnableCheck2 ) if ( pPars->fEnableCheck07 + pPars->fEnableCheck08 + pPars->fEnableCheck10 > 1 )
{ {
Abc_Print( -1, "These two checks cannot be enabled at the same time.\n" ); Abc_Print( -1, "Only one additional check can be performed at the same time.\n" );
return 1; return 1;
} }
if ( pPars->fEnableCheck ) if ( pPars->fEnableCheck07 )
{ {
if ( pPars->nLutSize < 6 || pPars->nLutSize > 7 ) if ( pPars->nLutSize < 6 || pPars->nLutSize > 7 )
{ {
Abc_Print( -1, "This feature only works for {6,7}-LUTs.\n" ); Abc_Print( -1, "This feature only works for {6,7}-LUTs.\n" );
return 1; return 1;
} }
pPars->pFuncCell = If_CutPerformCheck; pPars->pFuncCell = If_CutPerformCheck07;
pPars->fCutMin = 1; pPars->fCutMin = 1;
} }
if ( pPars->fEnableCheck08 )
if ( pPars->fEnableCheck2 ) {
if ( pPars->nLutSize < 6 || pPars->nLutSize > 8 )
{
Abc_Print( -1, "This feature only works for {6,7,8}-LUTs.\n" );
return 1;
}
pPars->pFuncCell = If_CutPerformCheck08;
pPars->fCutMin = 1;
}
if ( pPars->fEnableCheck10 )
{ {
if ( pPars->nLutSize < 6 || pPars->nLutSize > 10 ) if ( pPars->nLutSize < 6 || pPars->nLutSize > 10 )
{ {
...@@ -13187,7 +13199,7 @@ usage: ...@@ -13187,7 +13199,7 @@ usage:
sprintf( LutSize, "library" ); sprintf( LutSize, "library" );
else else
sprintf( LutSize, "%d", pPars->nLutSize ); sprintf( LutSize, "%d", pPars->nLutSize );
Abc_Print( -2, "usage: if [-KCFA num] [-DE float] [-qarlepmsdbugojkvh]\n" ); Abc_Print( -2, "usage: if [-KCFA num] [-DE float] [-qarlepmsdbugojikvh]\n" );
Abc_Print( -2, "\t performs FPGA technology mapping of the network\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-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 ); Abc_Print( -2, "\t-C num : the max number of priority cuts (0 < num < 2^12) [default = %d]\n", pPars->nCutsMax );
...@@ -13209,8 +13221,9 @@ usage: ...@@ -13209,8 +13221,9 @@ usage:
Abc_Print( -2, "\t-u : toggles the use of MUXes along with LUTs [default = %s]\n", fLutMux? "yes": "no" ); Abc_Print( -2, "\t-u : toggles the use of MUXes along with LUTs [default = %s]\n", fLutMux? "yes": "no" );
Abc_Print( -2, "\t-g : toggles global delay optimization [default = %s]\n", pPars->fDelayOpt? "yes": "no" ); Abc_Print( -2, "\t-g : toggles global delay optimization [default = %s]\n", pPars->fDelayOpt? "yes": "no" );
Abc_Print( -2, "\t-o : toggles using buffers to decouple combinational outputs [default = %s]\n", pPars->fUseBuffs? "yes": "no" ); Abc_Print( -2, "\t-o : toggles using buffers to decouple combinational outputs [default = %s]\n", pPars->fUseBuffs? "yes": "no" );
Abc_Print( -2, "\t-j : toggles enabling additional check [default = %s]\n", pPars->fEnableCheck? "yes": "no" ); Abc_Print( -2, "\t-j : toggles enabling additional check [default = %s]\n", pPars->fEnableCheck07? "yes": "no" );
Abc_Print( -2, "\t-k : toggles enabling additional check [default = %s]\n", pPars->fEnableCheck2? "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-v : toggles verbose output [default = %s]\n", pPars->fVerbose? "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"); Abc_Print( -2, "\t-h : prints the command usage\n");
return 1; return 1;
......
...@@ -96,8 +96,9 @@ struct If_Par_t_ ...@@ -96,8 +96,9 @@ struct If_Par_t_
int fBidec; // use bi-decomposition int fBidec; // use bi-decomposition
int fUseBat; // use one specialized feature int fUseBat; // use one specialized feature
int fUseBuffs; // use buffers to decouple outputs int fUseBuffs; // use buffers to decouple outputs
int fEnableCheck; // enable additional checking int fEnableCheck07;// enable additional checking
int fEnableCheck2; // enable additional checking int fEnableCheck08;// enable additional checking
int fEnableCheck10;// enable additional checking
int fVerbose; // the verbosity flag int fVerbose; // the verbosity flag
// internal parameters // internal parameters
int fDelayOpt; // special delay optimization int fDelayOpt; // special delay optimization
...@@ -406,7 +407,8 @@ extern float If_CutPowerRef( If_Man_t * p, If_Cut_t * pCut, If_Obj_t * ...@@ -406,7 +407,8 @@ extern float If_CutPowerRef( If_Man_t * p, If_Cut_t * pCut, If_Obj_t *
extern float If_CutPowerDerefed( If_Man_t * p, If_Cut_t * pCut, If_Obj_t * pRoot ); extern float If_CutPowerDerefed( If_Man_t * p, If_Cut_t * pCut, If_Obj_t * pRoot );
extern float If_CutPowerRefed( If_Man_t * p, If_Cut_t * pCut, If_Obj_t * pRoot ); extern float If_CutPowerRefed( If_Man_t * p, If_Cut_t * pCut, If_Obj_t * pRoot );
/*=== ifDec.c =============================================================*/ /*=== ifDec.c =============================================================*/
extern int If_CutPerformCheck( unsigned * pTruth, int nVars, int nLeaves ); extern int If_CutPerformCheck07( unsigned * pTruth, int nVars, int nLeaves );
extern int If_CutPerformCheck08( unsigned * pTruth, int nVars, int nLeaves );
extern int If_CutPerformCheck10( unsigned * pTruth, int nVars, int nLeaves ); extern int If_CutPerformCheck10( unsigned * pTruth, int nVars, int nLeaves );
/*=== ifLib.c =============================================================*/ /*=== ifLib.c =============================================================*/
extern If_Lib_t * If_LutLibRead( char * FileName ); extern If_Lib_t * If_LutLibRead( char * FileName );
......
...@@ -685,7 +685,7 @@ void If_CutSort( If_Man_t * p, If_Set_t * pCutSet, If_Cut_t * pCut ) ...@@ -685,7 +685,7 @@ void If_CutSort( If_Man_t * p, If_Set_t * pCutSet, If_Cut_t * pCut )
return; return;
} }
if ( (p->pPars->fUseBat || p->pPars->fEnableCheck || p->pPars->fEnableCheck2) && !pCut->fUseless ) if ( (p->pPars->fUseBat || p->pPars->fEnableCheck07 || p->pPars->fEnableCheck08 || p->pPars->fEnableCheck10) && !pCut->fUseless )
{ {
If_Cut_t * pFirst = pCutSet->ppCuts[0]; If_Cut_t * pFirst = pCutSet->ppCuts[0];
if ( pFirst->fUseless || If_ManSortCompare(p, pFirst, pCut) == 1 ) if ( pFirst->fUseless || If_ManSortCompare(p, pFirst, pCut) == 1 )
......
/**CFile**************************************************************** /**CFile****************************************************************
FileName [ifDec.c] FileName [ifDec07.c]
SystemName [ABC: Logic synthesis and verification system.] SystemName [ABC: Logic synthesis and verification system.]
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
Date [Ver. 1.0. Started - November 21, 2006.] Date [Ver. 1.0. Started - November 21, 2006.]
Revision [$Id: ifDec.c,v 1.00 2006/11/21 00:00:00 alanmi Exp $] Revision [$Id: ifDec07.c,v 1.00 2006/11/21 00:00:00 alanmi Exp $]
***********************************************************************/ ***********************************************************************/
...@@ -671,7 +671,7 @@ int If_Dec7PickBestMux( word t[2], word c0r[2], word c1r[2] ) ...@@ -671,7 +671,7 @@ int If_Dec7PickBestMux( word t[2], word c0r[2], word c1r[2] )
SeeAlso [] SeeAlso []
***********************************************************************/ ***********************************************************************/
int If_CutPerformCheck( unsigned * pTruth, int nVars, int nLeaves ) int If_CutPerformCheck07( unsigned * pTruth, int nVars, int nLeaves )
{ {
int fDerive = 1; int fDerive = 1;
if ( nLeaves < 6 ) if ( nLeaves < 6 )
......
SRC += src/map/if/ifCore.c \ SRC += src/map/if/ifCore.c \
src/map/if/ifCut.c \ src/map/if/ifCut.c \
src/map/if/ifDec.c \ src/map/if/ifDec07.c \
src/map/if/ifDec08.c \
src/map/if/ifDec10.c \ src/map/if/ifDec10.c \
src/map/if/ifLib.c \ src/map/if/ifLib.c \
src/map/if/ifMan.c \ src/map/if/ifMan.c \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment