| /**CFile**************************************************************** | |
| FileName [demo.c] | |
| SystemName [ABC: Logic synthesis and verification system.] | |
| PackageName [ABC as a static library.] | |
| Synopsis [A demo program illustrating the use of ABC as a static library.] | |
| Author [Alan Mishchenko] | |
| Affiliation [UC Berkeley] | |
| Date [Ver. 1.0. Started - June 20, 2005.] | |
| Revision [$Id: demo.c,v 1.00 2005/11/14 00:00:00 alanmi Exp $] | |
| ***********************************************************************/ | |
| #include <stdio.h> | |
| #include <time.h> | |
| //////////////////////////////////////////////////////////////////////// | |
| /// DECLARATIONS /// | |
| //////////////////////////////////////////////////////////////////////// | |
| // procedures to start and stop the ABC framework | |
| // (should be called before and after the ABC procedures are called) | |
| extern void Abc_Start(); | |
| extern void Abc_Stop(); | |
| // procedures to get the ABC framework and execute commands in it | |
| extern void * Abc_FrameGetGlobalFrame(); | |
| extern int Cmd_CommandExecute( void * pAbc, char * sCommand ); | |
| //////////////////////////////////////////////////////////////////////// | |
| /// FUNCTION DEFINITIONS /// | |
| //////////////////////////////////////////////////////////////////////// | |
| /**Function************************************************************* | |
| Synopsis [The main() procedure.] | |
| Description [This procedure compiles into a stand-alone program for | |
| DAG-aware rewriting of the AIGs. A BLIF or PLA file to be considered | |
| for rewriting should be given as a command-line argument. Implementation | |
| of the rewriting is inspired by the paper: Per Bjesse, Arne Boralv, | |
| "DAG-aware circuit compression for formal verification", Proc. ICCAD 2004.] | |
| SideEffects [] | |
| SeeAlso [] | |
| ***********************************************************************/ | |
| int main( int argc, char * argv[] ) | |
| { | |
| // parameters | |
| int fUseResyn2 = 0; | |
| int fPrintStats = 1; | |
| int fVerify = 1; | |
| // variables | |
| void * pAbc; | |
| char * pFileName; | |
| char Command[1000]; | |
| int clkRead, clkResyn, clkVer, clk; | |
| ////////////////////////////////////////////////////////////////////////// | |
| // get the input file name | |
| if ( argc != 2 ) | |
| { | |
| printf( "Wrong number of command-line arguments.\n" ); | |
| return 1; | |
| } | |
| pFileName = argv[1]; | |
| ////////////////////////////////////////////////////////////////////////// | |
| // start the ABC framework | |
| Abc_Start(); | |
| pAbc = Abc_FrameGetGlobalFrame(); | |
| clk = clock(); | |
| ////////////////////////////////////////////////////////////////////////// | |
| // read the file | |
| sprintf( Command, "read %s", pFileName ); | |
| if ( Cmd_CommandExecute( pAbc, Command ) ) | |
| { | |
| fprintf( stdout, "Cannot execute command \"%s\".\n", Command ); | |
| return 1; | |
| } | |
| ////////////////////////////////////////////////////////////////////////// | |
| // balance | |
| sprintf( Command, "balance" ); | |
| if ( Cmd_CommandExecute( pAbc, Command ) ) | |
| { | |
| fprintf( stdout, "Cannot execute command \"%s\".\n", Command ); | |
| return 1; | |
| } | |
| clkRead = clock() - clk; | |
| ////////////////////////////////////////////////////////////////////////// | |
| // print stats | |
| if ( fPrintStats ) | |
| { | |
| sprintf( Command, "print_stats" ); | |
| if ( Cmd_CommandExecute( pAbc, Command ) ) | |
| { | |
| fprintf( stdout, "Cannot execute command \"%s\".\n", Command ); | |
| return 1; | |
| } | |
| } | |
| clk = clock(); | |
| ////////////////////////////////////////////////////////////////////////// | |
| // synthesize | |
| if ( fUseResyn2 ) | |
| { | |
| sprintf( Command, "balance; rewrite -l; refactor -l; balance; rewrite -l; rewrite -lz; balance; refactor -lz; rewrite -lz; balance" ); | |
| if ( Cmd_CommandExecute( pAbc, Command ) ) | |
| { | |
| fprintf( stdout, "Cannot execute command \"%s\".\n", Command ); | |
| return 1; | |
| } | |
| } | |
| else | |
| { | |
| sprintf( Command, "balance; rewrite -l; rewrite -lz; balance; rewrite -lz; balance" ); | |
| if ( Cmd_CommandExecute( pAbc, Command ) ) | |
| { | |
| fprintf( stdout, "Cannot execute command \"%s\".\n", Command ); | |
| return 1; | |
| } | |
| } | |
| clkResyn = clock() - clk; | |
| ////////////////////////////////////////////////////////////////////////// | |
| // print stats | |
| if ( fPrintStats ) | |
| { | |
| sprintf( Command, "print_stats" ); | |
| if ( Cmd_CommandExecute( pAbc, Command ) ) | |
| { | |
| fprintf( stdout, "Cannot execute command \"%s\".\n", Command ); | |
| return 1; | |
| } | |
| } | |
| ////////////////////////////////////////////////////////////////////////// | |
| // write the result in blif | |
| sprintf( Command, "write_blif result.blif" ); | |
| if ( Cmd_CommandExecute( pAbc, Command ) ) | |
| { | |
| fprintf( stdout, "Cannot execute command \"%s\".\n", Command ); | |
| return 1; | |
| } | |
| ////////////////////////////////////////////////////////////////////////// | |
| // perform verification | |
| clk = clock(); | |
| if ( fVerify ) | |
| { | |
| sprintf( Command, "cec %s result.blif", pFileName ); | |
| if ( Cmd_CommandExecute( pAbc, Command ) ) | |
| { | |
| fprintf( stdout, "Cannot execute command \"%s\".\n", Command ); | |
| return 1; | |
| } | |
| } | |
| clkVer = clock() - clk; | |
| printf( "Reading = %6.2f sec ", (float)(clkRead)/(float)(CLOCKS_PER_SEC) ); | |
| printf( "Rewriting = %6.2f sec ", (float)(clkResyn)/(float)(CLOCKS_PER_SEC) ); | |
| printf( "Verification = %6.2f sec\n", (float)(clkVer)/(float)(CLOCKS_PER_SEC) ); | |
| ////////////////////////////////////////////////////////////////////////// | |
| // stop the ABC framework | |
| Abc_Stop(); | |
| return 0; | |
| } | |