/**CFile**************************************************************** FileName [ifCom.c] SystemName [ABC: Logic synthesis and verification system.] PackageName [FPGA mapping based on priority cuts.] Synopsis [Command handlers.] Author [Alan Mishchenko] Affiliation [UC Berkeley] Date [Ver. 1.0. Started - November 21, 2006.] Revision [$Id: ifCom.c,v 1.00 2006/11/21 00:00:00 alanmi Exp $] ***********************************************************************/ #include "if.h" #include "base/main/main.h" ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// static int If_CommandReadLut ( Abc_Frame_t * pAbc, int argc, char **argv ); static int If_CommandPrintLut( Abc_Frame_t * pAbc, int argc, char **argv ); static int If_CommandReadBox ( Abc_Frame_t * pAbc, int argc, char **argv ); static int If_CommandPrintBox( Abc_Frame_t * pAbc, int argc, char **argv ); //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [Package initialization procedure.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void If_Init( Abc_Frame_t * pAbc ) { // set the default library If_LibLut_t s_LutLib = { "lutlib", 4, 0, {0,1,1,1,1}, {{0},{1},{1},{1},{1}} }; Abc_FrameSetLibLut( If_LibLutDup(&s_LutLib) ); Cmd_CommandAdd( pAbc, "FPGA mapping", "read_lut", If_CommandReadLut, 0 ); Cmd_CommandAdd( pAbc, "FPGA mapping", "print_lut", If_CommandPrintLut, 0 ); Cmd_CommandAdd( pAbc, "FPGA mapping", "read_box", If_CommandReadBox, 0 ); Cmd_CommandAdd( pAbc, "FPGA mapping", "print_box", If_CommandPrintBox, 0 ); } /**Function************************************************************* Synopsis [Package ending procedure.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void If_End( Abc_Frame_t * pAbc ) { If_LibLutFree( (If_LibLut_t *) Abc_FrameReadLibLut() ); If_LibBoxFree( (If_LibBox_t *)Abc_FrameReadLibBox() ); } /**Function************************************************************* Synopsis [Command procedure to read LUT libraries.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int If_CommandReadLut( Abc_Frame_t * pAbc, int argc, char **argv ) { FILE * pFile; FILE * pOut, * pErr; If_LibLut_t * pLib; Abc_Ntk_t * pNet; char * FileName; int fVerbose; int c; pNet = Abc_FrameReadNtk(pAbc); pOut = Abc_FrameReadOut(pAbc); pErr = Abc_FrameReadErr(pAbc); // set the defaults fVerbose = 1; Extra_UtilGetoptReset(); while ( (c = Extra_UtilGetopt(argc, argv, "vh")) != EOF ) { switch (c) { case 'v': fVerbose ^= 1; break; case 'h': goto usage; break; default: goto usage; } } if ( argc != globalUtilOptind + 1 ) goto usage; // get the input file name FileName = argv[globalUtilOptind]; if ( (pFile = fopen( FileName, "r" )) == NULL ) { fprintf( pErr, "Cannot open input file \"%s\". ", FileName ); if ( (FileName = Extra_FileGetSimilarName( FileName, ".genlib", ".lib", ".gen", ".g", NULL )) ) fprintf( pErr, "Did you mean \"%s\"?", FileName ); fprintf( pErr, "\n" ); return 1; } fclose( pFile ); // set the new network pLib = If_LibLutRead( FileName ); if ( pLib == NULL ) { fprintf( pErr, "Reading LUT library has failed.\n" ); goto usage; } // replace the current library If_LibLutFree( (If_LibLut_t *)Abc_FrameReadLibLut() ); Abc_FrameSetLibLut( pLib ); return 0; usage: fprintf( pErr, "\nusage: read_lut [-vh]\n"); fprintf( pErr, "\t read the LUT library from the file\n" ); fprintf( pErr, "\t-v : toggles enabling of verbose output [default = %s]\n", (fVerbose? "yes" : "no") ); fprintf( pErr, "\t-h : print the command usage\n"); fprintf( pErr, "\t \n"); fprintf( pErr, "\t File format for a LUT library:\n"); fprintf( pErr, "\t (the default library is shown)\n"); fprintf( pErr, "\t \n"); fprintf( pErr, "\t # The area/delay of k-variable LUTs:\n"); fprintf( pErr, "\t # k area delay\n"); fprintf( pErr, "\t 1 1 1\n"); fprintf( pErr, "\t 2 2 2\n"); fprintf( pErr, "\t 3 4 3\n"); fprintf( pErr, "\t 4 8 4\n"); fprintf( pErr, "\t 5 16 5\n"); fprintf( pErr, "\t 6 32 6\n"); return 1; /* error exit */ } /**Function************************************************************* Synopsis [Command procedure to read LUT libraries.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int If_CommandPrintLut( Abc_Frame_t * pAbc, int argc, char **argv ) { FILE * pOut, * pErr; Abc_Ntk_t * pNet; int fVerbose; int c; pNet = Abc_FrameReadNtk(pAbc); pOut = Abc_FrameReadOut(pAbc); pErr = Abc_FrameReadErr(pAbc); // set the defaults fVerbose = 1; Extra_UtilGetoptReset(); while ( (c = Extra_UtilGetopt(argc, argv, "vh")) != EOF ) { switch (c) { case 'v': fVerbose ^= 1; break; case 'h': goto usage; break; default: goto usage; } } if ( argc != globalUtilOptind ) goto usage; // set the new network If_LibLutPrint( (If_LibLut_t *)Abc_FrameReadLibLut() ); return 0; usage: fprintf( pErr, "\nusage: print_lut [-vh]\n"); fprintf( pErr, "\t print the current LUT library\n" ); fprintf( pErr, "\t-v : toggles enabling of verbose output [default = %s]\n", (fVerbose? "yes" : "no") ); fprintf( pErr, "\t-h : print the command usage\n"); return 1; /* error exit */ } /**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int If_CommandReadBox( Abc_Frame_t * pAbc, int argc, char **argv ) { FILE * pFile; FILE * pOut, * pErr; If_LibBox_t * pLib; Abc_Ntk_t * pNet; char * FileName; int fExtended; int fVerbose; int c; pNet = Abc_FrameReadNtk(pAbc); pOut = Abc_FrameReadOut(pAbc); pErr = Abc_FrameReadErr(pAbc); // set the defaults fExtended = 0; fVerbose = 1; Extra_UtilGetoptReset(); while ( (c = Extra_UtilGetopt(argc, argv, "evh")) != EOF ) { switch (c) { case 'e': fExtended ^= 1; break; case 'v': fVerbose ^= 1; break; case 'h': goto usage; break; default: goto usage; } } if ( argc != globalUtilOptind + 1 ) goto usage; // get the input file name FileName = argv[globalUtilOptind]; if ( (pFile = fopen( FileName, "r" )) == NULL ) { fprintf( pErr, "Cannot open input file \"%s\". ", FileName ); if ( (FileName = Extra_FileGetSimilarName( FileName, ".genlib", ".lib", ".gen", ".g", NULL )) ) fprintf( pErr, "Did you mean \"%s\"?", FileName ); fprintf( pErr, "\n" ); return 1; } fclose( pFile ); // set the new network pLib = fExtended ? If_LibBoxRead2( FileName ) : If_LibBoxRead( FileName ); if ( pLib == NULL ) { fprintf( pErr, "Reading box library has failed.\n" ); goto usage; } // replace the current library If_LibBoxFree( (If_LibBox_t *)Abc_FrameReadLibBox() ); Abc_FrameSetLibBox( pLib ); return 0; usage: fprintf( pErr, "\nusage: read_box [-evh]\n"); fprintf( pErr, "\t read the box library from the file\n" ); fprintf( pErr, "\t-e : toggles reading extended format [default = %s]\n", (fExtended? "yes" : "no") ); fprintf( pErr, "\t-v : toggles enabling of verbose output [default = %s]\n", (fVerbose? "yes" : "no") ); fprintf( pErr, "\t-h : print the command usage\n"); return 1; /* error exit */ } /**Function************************************************************* Synopsis [Command procedure to read LUT libraries.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int If_CommandPrintBox( Abc_Frame_t * pAbc, int argc, char **argv ) { FILE * pOut, * pErr; Abc_Ntk_t * pNet; int fVerbose; int c; pNet = Abc_FrameReadNtk(pAbc); pOut = Abc_FrameReadOut(pAbc); pErr = Abc_FrameReadErr(pAbc); // set the defaults fVerbose = 1; Extra_UtilGetoptReset(); while ( (c = Extra_UtilGetopt(argc, argv, "vh")) != EOF ) { switch (c) { case 'v': fVerbose ^= 1; break; case 'h': goto usage; break; default: goto usage; } } if ( argc != globalUtilOptind ) goto usage; // set the new network If_LibBoxPrint( stdout, (If_LibBox_t *)Abc_FrameReadLibBox() ); return 0; usage: fprintf( pErr, "\nusage: print_box [-vh]\n"); fprintf( pErr, "\t print the current box library\n" ); fprintf( pErr, "\t-v : toggles enabling of verbose output [default = %s]\n", (fVerbose? "yes" : "no") ); fprintf( pErr, "\t-h : print the command usage\n"); return 1; /* error exit */ } //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// ABC_NAMESPACE_IMPL_END