Skip to content

Commit

Permalink
Added another specialized check to the mapper.
Browse files Browse the repository at this point in the history
  • Loading branch information
alanminko committed Jun 28, 2011
1 parent 86ba294 commit 6c2ac76
Show file tree
Hide file tree
Showing 7 changed files with 542 additions and 21 deletions.
2 changes: 1 addition & 1 deletion abc.rc
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ set gnuplotwin wgnuplot.exe
set gnuplotunix gnuplot

# 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
alias b balance
Expand Down
37 changes: 25 additions & 12 deletions src/base/abci/abc.c
Original file line number Diff line number Diff line change
Expand Up @@ -12884,7 +12884,7 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv )

fLutMux = 0;
Extra_UtilGetoptReset();
while ( ( c = Extra_UtilGetopt( argc, argv, "KCFADEqaflepmrsdbugojkvh" ) ) != EOF )
while ( ( c = Extra_UtilGetopt( argc, argv, "KCFADEqaflepmrsdbugojikvh" ) ) != EOF )
{
switch ( c )
{
Expand Down Expand Up @@ -12999,10 +12999,13 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv )
pPars->fUseBuffs ^= 1;
break;
case 'j':
pPars->fEnableCheck ^= 1;
pPars->fEnableCheck07 ^= 1;
break;
case 'i':
pPars->fEnableCheck08 ^= 1;
break;
case 'k':
pPars->fEnableCheck2 ^= 1;
pPars->fEnableCheck10 ^= 1;
break;
case 'v':
pPars->fVerbose ^= 1;
Expand Down Expand Up @@ -13083,23 +13086,32 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv )
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;
}
if ( pPars->fEnableCheck )
if ( pPars->fEnableCheck07 )
{
if ( pPars->nLutSize < 6 || pPars->nLutSize > 7 )
{
Abc_Print( -1, "This feature only works for {6,7}-LUTs.\n" );
return 1;
}
pPars->pFuncCell = If_CutPerformCheck;
pPars->pFuncCell = If_CutPerformCheck07;
pPars->fCutMin = 1;
}

if ( pPars->fEnableCheck2 )
if ( pPars->fEnableCheck08 )
{
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 )
{
Expand Down Expand Up @@ -13187,7 +13199,7 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv )
sprintf( LutSize, "library" );
else
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-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 );
Expand All @@ -13209,8 +13221,9 @@ int Abc_CommandIf( Abc_Frame_t * pAbc, int argc, char ** argv )
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-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-k : toggles enabling additional check [default = %s]\n", pPars->fEnableCheck2? "yes": "no" );
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-v : toggles verbose output [default = %s]\n", pPars->fVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : prints the command usage\n");
return 1;
Expand Down
8 changes: 5 additions & 3 deletions src/map/if/if.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,9 @@ struct If_Par_t_
int fBidec; // use bi-decomposition
int fUseBat; // use one specialized feature
int fUseBuffs; // use buffers to decouple outputs
int fEnableCheck; // enable additional checking
int fEnableCheck2; // enable additional checking
int fEnableCheck07;// enable additional checking
int fEnableCheck08;// enable additional checking
int fEnableCheck10;// enable additional checking
int fVerbose; // the verbosity flag
// internal parameters
int fDelayOpt; // special delay optimization
Expand Down Expand Up @@ -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_CutPowerRefed( If_Man_t * p, If_Cut_t * pCut, If_Obj_t * pRoot );
/*=== 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 );
/*=== ifLib.c =============================================================*/
extern If_Lib_t * If_LutLibRead( char * FileName );
Expand Down
2 changes: 1 addition & 1 deletion src/map/if/ifCut.c
Original file line number Diff line number Diff line change
Expand Up @@ -685,7 +685,7 @@ void If_CutSort( If_Man_t * p, If_Set_t * pCutSet, If_Cut_t * pCut )
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 ( pFirst->fUseless || If_ManSortCompare(p, pFirst, pCut) == 1 )
Expand Down
6 changes: 3 additions & 3 deletions src/map/if/ifDec.c → src/map/if/ifDec07.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**CFile****************************************************************
FileName [ifDec.c]
FileName [ifDec07.c]
SystemName [ABC: Logic synthesis and verification system.]
Expand All @@ -14,7 +14,7 @@
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 $]
***********************************************************************/

Expand Down Expand Up @@ -671,7 +671,7 @@ int If_Dec7PickBestMux( word t[2], word c0r[2], word c1r[2] )
SeeAlso []
***********************************************************************/
int If_CutPerformCheck( unsigned * pTruth, int nVars, int nLeaves )
int If_CutPerformCheck07( unsigned * pTruth, int nVars, int nLeaves )
{
int fDerive = 1;
if ( nLeaves < 6 )
Expand Down
Loading

0 comments on commit 6c2ac76

Please sign in to comment.