diff options
Diffstat (limited to 'src/base')
-rw-r--r-- | src/base/abci/abc.c | 435 | ||||
-rw-r--r-- | src/base/abci/abcDar.c | 6 | ||||
-rw-r--r-- | src/base/abci/abcTiming.c | 5 | ||||
-rw-r--r-- | src/base/main/mainInt.h | 5 |
4 files changed, 440 insertions, 11 deletions
diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c index 7178cc0a..d9c68bc4 100644 --- a/src/base/abci/abc.c +++ b/src/base/abci/abc.c @@ -200,6 +200,18 @@ static int Abc_CommandEnlarge ( Abc_Frame_t * pAbc, int argc, char ** arg static int Abc_CommandTraceStart ( Abc_Frame_t * pAbc, int argc, char ** argv ); static int Abc_CommandTraceCheck ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8Read ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8Write ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8Ps ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8If ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8DChoice ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8Scl ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8Lcorr ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8Ssw ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8Cec ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandAbc8DSec ( Abc_Frame_t * pAbc, int argc, char ** argv ); + + //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// @@ -215,6 +227,42 @@ static int Abc_CommandTraceCheck ( Abc_Frame_t * pAbc, int argc, char ** arg SeeAlso [] ***********************************************************************/ +void Abc_FrameClearDesign() +{ + extern Abc_Frame_t * Abc_FrameGetGlobalFrame(); + extern void Ntl_ManFree( void * ); + extern void Ntk_ManFree( void * ); + Abc_Frame_t * pAbc; + + pAbc = Abc_FrameGetGlobalFrame(); + if ( pAbc->pAbc8Ntl ) + { + Ntl_ManFree( pAbc->pAbc8Ntl ); + pAbc->pAbc8Ntl = NULL; + } + if ( pAbc->pAbc8Aig ) + { + Aig_ManStop( pAbc->pAbc8Aig ); + pAbc->pAbc8Aig = NULL; + } + if ( pAbc->pAbc8Ntk ) + { + Ntk_ManFree( pAbc->pAbc8Ntk ); + pAbc->pAbc8Ntk = NULL; + } +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ void Abc_Init( Abc_Frame_t * pAbc ) { // Abc_NtkBddImplicationTest(); @@ -378,6 +426,18 @@ void Abc_Init( Abc_Frame_t * pAbc ) Cmd_CommandAdd( pAbc, "Verification", "indcut", Abc_CommandIndcut, 0 ); Cmd_CommandAdd( pAbc, "Verification", "enlarge", Abc_CommandEnlarge, 1 ); + Cmd_CommandAdd( pAbc, "ABC8", "*read", Abc_CommandAbc8Read, 0 ); + Cmd_CommandAdd( pAbc, "ABC8", "*write", Abc_CommandAbc8Write, 0 ); + Cmd_CommandAdd( pAbc, "ABC8", "*ps", Abc_CommandAbc8Ps, 0 ); + Cmd_CommandAdd( pAbc, "ABC8", "*if", Abc_CommandAbc8If, 0 ); + Cmd_CommandAdd( pAbc, "ABC8", "*dchoice", Abc_CommandAbc8DChoice, 0 ); + Cmd_CommandAdd( pAbc, "ABC8", "*scl", Abc_CommandAbc8Scl, 0 ); + Cmd_CommandAdd( pAbc, "ABC8", "*lcorr", Abc_CommandAbc8Lcorr, 0 ); + Cmd_CommandAdd( pAbc, "ABC8", "*ssw", Abc_CommandAbc8Ssw, 0 ); + Cmd_CommandAdd( pAbc, "ABC8", "*cec", Abc_CommandAbc8Cec, 0 ); + Cmd_CommandAdd( pAbc, "ABC8", "*dsec", Abc_CommandAbc8DSec, 0 ); + + // Cmd_CommandAdd( pAbc, "Verification", "trace_start", Abc_CommandTraceStart, 0 ); // Cmd_CommandAdd( pAbc, "Verification", "trace_check", Abc_CommandTraceCheck, 0 ); @@ -412,6 +472,8 @@ void Abc_Init( Abc_Frame_t * pAbc ) ***********************************************************************/ void Abc_End() { + Abc_FrameClearDesign(); + // Dar_LibDumpPriorities(); { extern int Abc_NtkCompareAndSaveBest( Abc_Ntk_t * pNtk ); @@ -7813,12 +7875,12 @@ int Abc_CommandDRewrite( Abc_Frame_t * pAbc, int argc, char ** argv ) return 0; usage: - fprintf( pErr, "usage: drw [-C num] [-N num] [-flzvwh]\n" ); + fprintf( pErr, "usage: drw [-C num] [-N num] [-lfzvwh]\n" ); fprintf( pErr, "\t performs combinational AIG rewriting\n" ); fprintf( pErr, "\t-C num : the max number of cuts at a node [default = %d]\n", pPars->nCutsMax ); fprintf( pErr, "\t-N num : the max number of subgraphs tried [default = %d]\n", pPars->nSubgMax ); - fprintf( pErr, "\t-f : toggle representing fanouts [default = %s]\n", pPars->fFanout? "yes": "no" ); fprintf( pErr, "\t-l : toggle preserving the number of levels [default = %s]\n", pPars->fUpdateLevel? "yes": "no" ); + fprintf( pErr, "\t-f : toggle representing fanouts [default = %s]\n", pPars->fFanout? "yes": "no" ); fprintf( pErr, "\t-z : toggle using zero-cost replacements [default = %s]\n", pPars->fUseZeros? "yes": "no" ); fprintf( pErr, "\t-v : toggle verbose printout [default = %s]\n", pPars->fVerbose? "yes": "no" ); fprintf( pErr, "\t-w : toggle very verbose printout [default = %s]\n", pPars->fVeryVerbose? "yes": "no" ); @@ -7966,20 +8028,21 @@ int Abc_CommandDCompress2( Abc_Frame_t * pAbc, int argc, char ** argv ) { FILE * pOut, * pErr; Abc_Ntk_t * pNtk, * pNtkRes; - int fBalance, fVerbose, fUpdateLevel, c; + int fBalance, fVerbose, fUpdateLevel, fFanout, c; - extern Abc_Ntk_t * Abc_NtkDCompress2( Abc_Ntk_t * pNtk, int fBalance, int fUpdateLevel, int fVerbose ); + extern Abc_Ntk_t * Abc_NtkDCompress2( Abc_Ntk_t * pNtk, int fBalance, int fUpdateLevel, int fFanout, int fVerbose ); pNtk = Abc_FrameReadNtk(pAbc); pOut = Abc_FrameReadOut(pAbc); pErr = Abc_FrameReadErr(pAbc); // set defaults - fBalance = 0; - fVerbose = 0; + fBalance = 0; + fVerbose = 0; fUpdateLevel = 0; + fFanout = 1; Extra_UtilGetoptReset(); - while ( ( c = Extra_UtilGetopt( argc, argv, "blvh" ) ) != EOF ) + while ( ( c = Extra_UtilGetopt( argc, argv, "blfvh" ) ) != EOF ) { switch ( c ) { @@ -7989,6 +8052,9 @@ int Abc_CommandDCompress2( Abc_Frame_t * pAbc, int argc, char ** argv ) case 'l': fUpdateLevel ^= 1; break; + case 'f': + fFanout ^= 1; + break; case 'v': fVerbose ^= 1; break; @@ -8008,7 +8074,7 @@ int Abc_CommandDCompress2( Abc_Frame_t * pAbc, int argc, char ** argv ) fprintf( pErr, "This command works only for strashed networks.\n" ); return 1; } - pNtkRes = Abc_NtkDCompress2( pNtk, fBalance, fUpdateLevel, fVerbose ); + pNtkRes = Abc_NtkDCompress2( pNtk, fBalance, fUpdateLevel, fFanout, fVerbose ); if ( pNtkRes == NULL ) { fprintf( pErr, "Command has failed.\n" ); @@ -8019,10 +8085,11 @@ int Abc_CommandDCompress2( Abc_Frame_t * pAbc, int argc, char ** argv ) return 0; usage: - fprintf( pErr, "usage: dcompress2 [-blvh]\n" ); + fprintf( pErr, "usage: dcompress2 [-blfvh]\n" ); fprintf( pErr, "\t performs combinational AIG optimization\n" ); fprintf( pErr, "\t-b : toggle internal balancing [default = %s]\n", fBalance? "yes": "no" ); fprintf( pErr, "\t-l : toggle updating level [default = %s]\n", fUpdateLevel? "yes": "no" ); + fprintf( pErr, "\t-f : toggle representing fanouts [default = %s]\n", fFanout? "yes": "no" ); fprintf( pErr, "\t-v : toggle verbose printout [default = %s]\n", fVerbose? "yes": "no" ); fprintf( pErr, "\t-h : print the command usage\n"); return 1; @@ -14599,6 +14666,356 @@ usage: return 1; } + + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8Read( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + FILE * pFile; + char * pFileName; + int c; + extern void * Ioa_ReadBlif( char * pFileName, int fCheck ); + extern Aig_Man_t * Ntl_ManExtract( void * p ); + + + // set defaults + Extra_UtilGetoptReset(); + while ( ( c = Extra_UtilGetopt( argc, argv, "h" ) ) != EOF ) + { + switch ( c ) + { + case 'h': + goto usage; + default: + goto usage; + } + } + + // get the input file name + pFileName = argv[globalUtilOptind]; + if ( (pFile = fopen( pFileName, "r" )) == NULL ) + { + fprintf( stdout, "Cannot open input file \"%s\". ", pFileName ); + if ( pFileName = Extra_FileGetSimilarName( pFileName, ".blif", NULL, NULL, NULL, NULL ) ) + fprintf( stdout, "Did you mean \"%s\"?", pFileName ); + fprintf( stdout, "\n" ); + return 1; + } + fclose( pFile ); + + Abc_FrameClearDesign(); + pAbc->pAbc8Ntl = Ioa_ReadBlif( pFileName, 1 ); + if ( pAbc->pAbc8Ntl == NULL ) + { + printf( "Abc_CommandAbc8Read(): Reading BLIF has failed.\n" ); + return 1; + } + pAbc->pAbc8Aig = Ntl_ManExtract( pAbc->pAbc8Ntl ); + if ( pAbc->pAbc8Aig == NULL ) + { + printf( "Abc_CommandAbc8Read(): AIG extraction has failed.\n" ); + return 1; + } + return 0; + +usage: + fprintf( stdout, "usage: *read [-h]\n" ); + fprintf( stdout, "\t reads the design with whiteboxes\n" ); + fprintf( stdout, "\t-h : print the command usage\n"); + return 1; +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8Write( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + char * pFileName; + int c; + extern void Ioa_WriteBlif( void * p, char * pFileName ); + + // set defaults + Extra_UtilGetoptReset(); + while ( ( c = Extra_UtilGetopt( argc, argv, "h" ) ) != EOF ) + { + switch ( c ) + { + case 'h': + goto usage; + default: + goto usage; + } + } + if ( pAbc->pAbc8Ntl == NULL ) + { + printf( "Abc_CommandAbc8Write(): There is no design to write.\n" ); + return 1; + } + + // get the input file name + pFileName = argv[globalUtilOptind]; + Ioa_WriteBlif( pAbc->pAbc8Ntl, pFileName ); + return 0; + +usage: + fprintf( stdout, "usage: *write [-h]\n" ); + fprintf( stdout, "\t write the design with whiteboxes\n" ); + fprintf( stdout, "\t-h : print the command usage\n"); + return 1; +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8Ps( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + int c; + extern void Ntl_ManPrintStats( void * p ); + + // set defaults + Extra_UtilGetoptReset(); + while ( ( c = Extra_UtilGetopt( argc, argv, "h" ) ) != EOF ) + { + switch ( c ) + { + case 'h': + goto usage; + default: + goto usage; + } + } + if ( pAbc->pAbc8Ntl == NULL ) + { + printf( "Abc_CommandAbc8Write(): There is no design to show.\n" ); + return 1; + } + + // get the input file name + if ( pAbc->pAbc8Ntl ) + Ntl_ManPrintStats( pAbc->pAbc8Ntl ); + if ( pAbc->pAbc8Aig ) + Aig_ManPrintStats( pAbc->pAbc8Aig ); + return 0; + +usage: + fprintf( stdout, "usage: *ps [-h]\n" ); + fprintf( stdout, "\t prints design statistics\n" ); + fprintf( stdout, "\t-h : print the command usage\n"); + return 1; +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8If( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + int c; + extern int Ntl_ManInsertTest( void * p, Aig_Man_t * pAig ); + extern int Ntl_ManInsertTestIf( void * p, Aig_Man_t * pAig ); + + // set defaults + Extra_UtilGetoptReset(); + while ( ( c = Extra_UtilGetopt( argc, argv, "h" ) ) != EOF ) + { + switch ( c ) + { + case 'h': + goto usage; + default: + goto usage; + } + } + if ( pAbc->pAbc8Aig == NULL ) + { + printf( "Abc_CommandAbc8Write(): There is no AIG to map.\n" ); + return 1; + } + + // get the input file name + if ( !Ntl_ManInsertTestIf( pAbc->pAbc8Ntl, pAbc->pAbc8Aig ) ) +// if ( !Ntl_ManInsertTest( pAbc->pAbc8Ntl, pAbc->pAbc8Aig ) ) + { + printf( "Abc_CommandAbc8Write(): Tranformation of the netlist has failed.\n" ); + return 1; + } + return 0; + +usage: + fprintf( stdout, "usage: *if [-h]\n" ); + fprintf( stdout, "\t performs mapping for logic extraced from the design\n" ); + fprintf( stdout, "\t-h : print the command usage\n"); + return 1; +} + + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8DChoice( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + Aig_Man_t * pAigNew; + int c; + extern Aig_Man_t * Ntl_ManPerformSynthesis( Aig_Man_t * pAig ); + + // set defaults + Extra_UtilGetoptReset(); + while ( ( c = Extra_UtilGetopt( argc, argv, "h" ) ) != EOF ) + { + switch ( c ) + { + case 'h': + goto usage; + default: + goto usage; + } + } + if ( pAbc->pAbc8Aig == NULL ) + { + printf( "Abc_CommandAbc8DChoice(): There is no AIG to synthesize.\n" ); + return 1; + } + + // get the input file name + pAigNew = Ntl_ManPerformSynthesis( pAbc->pAbc8Aig ); + if ( pAigNew == NULL ) + { + printf( "Abc_CommandAbc8DChoice(): Tranformation of the AIG has failed.\n" ); + return 1; + } + Aig_ManStop( pAbc->pAbc8Aig ); + pAbc->pAbc8Aig = pAigNew; + return 0; + +usage: + fprintf( stdout, "usage: *dchoice [-h]\n" ); + fprintf( stdout, "\t performs AIG-based synthesis\n" ); + fprintf( stdout, "\t-h : print the command usage\n"); + return 1; +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8Scl( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + return 0; +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8Lcorr( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + return 0; +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8Ssw( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + return 0; +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8Cec( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + return 0; +} + +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Abc_CommandAbc8DSec( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ + return 0; +} + + //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// diff --git a/src/base/abci/abcDar.c b/src/base/abci/abcDar.c index e1b3828e..94b6c52b 100644 --- a/src/base/abci/abcDar.c +++ b/src/base/abci/abcDar.c @@ -736,7 +736,7 @@ clk = clock(); SeeAlso [] ***********************************************************************/ -Abc_Ntk_t * Abc_NtkDCompress2( Abc_Ntk_t * pNtk, int fBalance, int fUpdateLevel, int fVerbose ) +Abc_Ntk_t * Abc_NtkDCompress2( Abc_Ntk_t * pNtk, int fBalance, int fUpdateLevel, int fFanout, int fVerbose ) { Aig_Man_t * pMan, * pTemp; Abc_Ntk_t * pNtkAig; @@ -748,7 +748,7 @@ Abc_Ntk_t * Abc_NtkDCompress2( Abc_Ntk_t * pNtk, int fBalance, int fUpdateLevel, // Aig_ManPrintStats( pMan ); clk = clock(); - pMan = Dar_ManCompress2( pTemp = pMan, fBalance, fUpdateLevel, fVerbose ); + pMan = Dar_ManCompress2( pTemp = pMan, fBalance, fUpdateLevel, fFanout, fVerbose ); Aig_ManStop( pTemp ); //PRT( "time", clock() - clk ); @@ -1744,6 +1744,7 @@ void Abc_NtkPrintSccs( Abc_Ntk_t * pNtk, int fVerbose ) ***********************************************************************/ void Abc_NtkDarTestBlif( char * pFileName ) { +/* char Buffer[1000]; Ntl_Man_t * p; p = Ioa_ReadBlif( pFileName, 1 ); @@ -1763,6 +1764,7 @@ void Abc_NtkDarTestBlif( char * pFileName ) sprintf( Buffer, "test_.blif", p->pName ); Ioa_WriteBlif( p, Buffer ); Ntl_ManFree( p ); +*/ } //////////////////////////////////////////////////////////////////////// diff --git a/src/base/abci/abcTiming.c b/src/base/abci/abcTiming.c index 967e4617..be16da95 100644 --- a/src/base/abci/abcTiming.c +++ b/src/base/abci/abcTiming.c @@ -795,6 +795,7 @@ void Abc_NtkUpdateLevel( Abc_Obj_t * pObjNew, Vec_Vec_t * vLevels ) { Abc_Obj_t * pFanout, * pTemp; int LevelOld, Lev, k, m; +// int Counter = 0, CounterMax = 0; // check if level has changed LevelOld = Abc_ObjLevel(pObjNew); if ( LevelOld == Abc_ObjLevelNew(pObjNew) ) @@ -808,6 +809,7 @@ void Abc_NtkUpdateLevel( Abc_Obj_t * pObjNew, Vec_Vec_t * vLevels ) // recursively update level Vec_VecForEachEntryStart( vLevels, pTemp, Lev, k, LevelOld ) { +// Counter--; pTemp->fMarkA = 0; assert( Abc_ObjLevel(pTemp) == Lev ); Abc_ObjSetLevel( pTemp, Abc_ObjLevelNew(pTemp) ); @@ -821,10 +823,13 @@ void Abc_NtkUpdateLevel( Abc_Obj_t * pObjNew, Vec_Vec_t * vLevels ) { assert( Abc_ObjLevel(pFanout) >= Lev ); Vec_VecPush( vLevels, Abc_ObjLevel(pFanout), pFanout ); +// Counter++; +// CounterMax = ABC_MAX( CounterMax, Counter ); pFanout->fMarkA = 1; } } } +// printf( "%d ", CounterMax ); } /**Function************************************************************* diff --git a/src/base/main/mainInt.h b/src/base/main/mainInt.h index f82e12d6..0261d7da 100644 --- a/src/base/main/mainInt.h +++ b/src/base/main/mainInt.h @@ -73,6 +73,11 @@ struct Abc_Frame_t_ void * pLibGen; // the current genlib void * pLibSuper; // the current supergate library void * pLibVer; // the current Verilog library + + // new code + void * pAbc8Ntl; // the current design + void * pAbc8Ntk; // the current mapped network + void * pAbc8Aig; // the current AIG }; //////////////////////////////////////////////////////////////////////// |