📄 ntki.c
字号:
/**CFile**************************************************************** FileName [ntki.c] PackageName [MVSIS 2.0: Multi-valued logic synthesis system.] Synopsis [Command file of the network package.] Author [MVSIS Group] Affiliation [UC Berkeley] Date [Ver. 1.0. Started - February 1, 2003.] Revision [$Id: ntki.c,v 1.5 2003/05/27 23:14:29 alanmi Exp $]***********************************************************************/#include "ntkInt.h"#include "ntkiInt.h"#include "sh.h"#include "wn.h"/////////////////////////////////////////////////////////////////////////// DECLARATIONS /////////////////////////////////////////////////////////////////////////// static int Ntk_CommandPrint ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintIo ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintStats ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintRange ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintValue ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintFactor ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintLevel ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintNd ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintSpec ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintClauses ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandPrintSat ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandResetName ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandRename ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandChangeNameMode ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkPower ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkNDize ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkDize ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkReorder ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkCopy ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkFree ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkDefault ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkWindow ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkSweep ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkEliminate ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkCollapse ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkMerge ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkFxu ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkDecomp ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkStrash ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkResetDef ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkFfResetDef( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkResub ( Mv_Frame_t * pMvsis, int argc, char ** argv );static int Ntk_CommandNetworkVerify ( Mv_Frame_t * pMvsis, int argc, char ** argv );/////////////////////////////////////////////////////////////////////////// FUNCTION DEFITIONS ////////////////////////////////////////////////////////////////////////////**Function******************************************************************** Synopsis [Initializes the I/O package.] SideEffects [] SeeAlso [Io_End]******************************************************************************/void Ntki_Init( Mv_Frame_t * pMvsis ){ Cmd_CommandAdd( pMvsis, "Printing", "print_stats", Ntk_CommandPrintStats, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "print", Ntk_CommandPrint, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "print_io", Ntk_CommandPrintIo, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "print_range", Ntk_CommandPrintRange, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "print_value", Ntk_CommandPrintValue, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "print_factor", Ntk_CommandPrintFactor, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "print_level", Ntk_CommandPrintLevel, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "print_nd", Ntk_CommandPrintNd, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "print_spec", Ntk_CommandPrintSpec, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "_print_clauses", Ntk_CommandPrintClauses, 0 ); Cmd_CommandAdd( pMvsis, "Printing", "_print_sat", Ntk_CommandPrintSat, 0 ); Cmd_CommandAdd( pMvsis, "Naming", "reset_name", Ntk_CommandResetName, 0 ); Cmd_CommandAdd( pMvsis, "Naming", "rename", Ntk_CommandRename, 0 ); Cmd_CommandAdd( pMvsis, "Naming", "chng_name", Ntk_CommandChangeNameMode, 0 ); Cmd_CommandAdd( pMvsis, "Various", "_power", Ntk_CommandNetworkPower, 1 ); Cmd_CommandAdd( pMvsis, "Various", "_ndize", Ntk_CommandNetworkNDize, 1 ); Cmd_CommandAdd( pMvsis, "Various", "dize", Ntk_CommandNetworkDize, 1 ); Cmd_CommandAdd( pMvsis, "Various", "reorder", Ntk_CommandNetworkReorder, 1 ); Cmd_CommandAdd( pMvsis, "Various", "_copy", Ntk_CommandNetworkCopy, 1 ); Cmd_CommandAdd( pMvsis, "Various", "free", Ntk_CommandNetworkFree, 1 ); Cmd_CommandAdd( pMvsis, "Various", "default", Ntk_CommandNetworkDefault, 1 ); Cmd_CommandAdd( pMvsis, "Various", "window", Ntk_CommandNetworkWindow, 0 ); Cmd_CommandAdd( pMvsis, "Synthesis", "sweep", Ntk_CommandNetworkSweep, 1 ); Cmd_CommandAdd( pMvsis, "Synthesis", "eliminate", Ntk_CommandNetworkEliminate, 1 ); Cmd_CommandAdd( pMvsis, "Synthesis", "collapse", Ntk_CommandNetworkCollapse, 1 ); Cmd_CommandAdd( pMvsis, "Synthesis", "merge", Ntk_CommandNetworkMerge, 1 ); Cmd_CommandAdd( pMvsis, "Synthesis", "fxu", Ntk_CommandNetworkFxu, 1 ); Cmd_CommandAdd( pMvsis, "Synthesis", "decomp", Ntk_CommandNetworkDecomp, 1 ); Cmd_CommandAdd( pMvsis, "Synthesis", "strash", Ntk_CommandNetworkStrash, 1 ); Cmd_CommandAdd( pMvsis, "Synthesis", "reset_default", Ntk_CommandNetworkResetDef, 1 ); Cmd_CommandAdd( pMvsis, "Synthesis", "_ffrsd", Ntk_CommandNetworkFfResetDef,1 ); Cmd_CommandAdd( pMvsis, "Synthesis", "resub", Ntk_CommandNetworkResub, 1 ); Cmd_CommandAdd( pMvsis, "Verification", "verify", Ntk_CommandNetworkVerify, 0 ); }/**Function******************************************************************** Synopsis [Ends the I/O package.] SideEffects [] SeeAlso [Io_Init]******************************************************************************/void Ntki_End( Mv_Frame_t * pMvsis ){}/**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso []***********************************************************************/int Ntk_CommandPrintStats( Mv_Frame_t * pMvsis, int argc, char ** argv ){ FILE * pOut, * pErr; Ntk_Network_t * pNet; Ntk_Node_t * pNode; bool fComputeCvr; bool fComputeMvr; bool fShort; int nNodes, c; pNet = Mv_FrameReadNet(pMvsis); pOut = Mv_FrameReadOut(pMvsis); pErr = Mv_FrameReadErr(pMvsis); // set the defaults fComputeCvr = 0; fComputeMvr = 0; fShort = 1; nNodes = 0; util_getopt_reset(); while ( ( c = util_getopt( argc, argv, "scmh" ) ) != EOF ) { switch ( c ) { case 's': fShort ^= 1; break; case 'c': fComputeCvr ^= 1; break; case 'm': fComputeMvr ^= 1; break; case 'h': goto usage; default: goto usage; } } if ( pNet == NULL ) { fprintf( Mv_FrameReadErr(pMvsis), "Empty network\n" ); return 1; } // collect the nodes (if any) if ( argc - util_optind > 0 ) nNodes = Cmd_CommandGetNodes( pMvsis, argc-util_optind+1, argv+util_optind-1, 0 ); if ( nNodes == 0 ) { Ntk_NetworkPrintStats( pOut, pNet, fComputeCvr, fComputeMvr, fShort ); return 0; } // print the nodes Ntk_NetworkForEachNodeSpecial( pNet, pNode ) Ntk_NodePrintStats( pOut, pNode, fComputeCvr, fComputeMvr ); return 0;usage: fprintf( pErr, "usage: print_stats [-c] [-m] [-h]\n" ); fprintf( pErr, "\t prints the network statistics and\n" ); fprintf( pErr, "\t reports the percentage of nodes having each representation\n" ); fprintf( pErr, "\t-s : output statistics in a shortened form [default = %s]\n", fShort? "yes": "no" ); fprintf( pErr, "\t-c : derives covers (MV SOPs) if not present [default = %s]\n", fComputeCvr? "yes": "no" ); fprintf( pErr, "\t-m : derives local MV relations if not present [default = %s]\n", fComputeMvr? "yes": "no" ); fprintf( pErr, "\t-h : print the command usage\n"); return 1;}/**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso []***********************************************************************/int Ntk_CommandPrint( Mv_Frame_t * pMvsis, int argc, char ** argv ){ FILE * pOut, * pErr; Ntk_Network_t * pNet; Ntk_Node_t * pNode; int nNodes; int fPrintDefault; int fPrintPositional; int fPrintKmap; int c; pNet = Mv_FrameReadNet(pMvsis); pOut = Mv_FrameReadOut(pMvsis); pErr = Mv_FrameReadErr(pMvsis); fPrintDefault = 0; fPrintPositional = 0; fPrintKmap = 0; util_getopt_reset(); while ( ( c = util_getopt( argc, argv, "dpmh" ) ) != EOF ) { switch ( c ) { case 'd': fPrintDefault ^= 1; break; case 'p': fPrintPositional ^= 1; break; case 'm': fPrintKmap ^= 1; break; case 'h': goto usage; break; default: goto usage; } } if ( pNet == NULL ) { fprintf( pErr, "Empty network.\n" ); return 1; } // collect the nodes nNodes = Cmd_CommandGetNodes( pMvsis, argc-util_optind+1, argv+util_optind-1, 0 ); if ( nNodes == 0 ) { fprintf( Mv_FrameReadErr(pMvsis), "The list of nodes to print is empty.\n" ); return 1; } // print the nodes Ntk_NetworkForEachNodeSpecial( pNet, pNode ) if ( fPrintKmap ) Ntk_NodePrintMvr( pOut, pNode ); else Ntk_NodePrintCvr( pOut, pNode, fPrintDefault, fPrintPositional ); return 0;usage: fprintf( pErr, "usage: print [-d] [-p] [-m] <node_list>\n" ); fprintf( pErr, "\t print MV SOP representation of the nodes.\n" ); fprintf( pErr, "\t-d : print default i-set [default = %s]\n", fPrintDefault? "yes": "no" ); fprintf( pErr, "\t-p : print cubes in positional notation [default = %s]\n", fPrintPositional? "yes": "no" ); fprintf( pErr, "\t-m : print Karnaugh maps for the relation [default = %s]\n", fPrintKmap? "yes": "no" ); fprintf( pErr, "\t<node_list> : if empty, print all nodes in the network\n" ); fprintf( pErr, "\t-h : print the command usage\n"); return 1;}/**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso []***********************************************************************/int Ntk_CommandPrintIo( Mv_Frame_t * pMvsis, int argc, char ** argv ){ FILE * pOut, * pErr; Ntk_Network_t * pNet; int nNodes, c; pNet = Mv_FrameReadNet(pMvsis); pOut = Mv_FrameReadOut(pMvsis); pErr = Mv_FrameReadErr(pMvsis); // set defaults util_getopt_reset(); while ( ( c = util_getopt( argc, argv, "h" ) ) != EOF ) { switch ( c ) { case 'h': goto usage; default: goto usage; } } if ( pNet == NULL ) { fprintf( pErr, "Empty network.\n" ); return 1; } // collect the nodes if ( argc == util_optind ) nNodes = 0; else nNodes = Cmd_CommandGetNodes( pMvsis, argc-util_optind+1, argv+util_optind-1, 1 ); // print the nodes Ntk_NetworkPrintIo( pOut, pNet, nNodes ); return 0;usage: fprintf( pErr, "usage: print_io [-h] <node_list>\n" ); fprintf( pErr, "\t prints the fanins/fanouts of nodes in the list\n" ); fprintf( pErr, "\t<node_list> : if empty, print CIs/COs of the network\n" ); fprintf( pErr, "\t-h : print the command usage\n"); return 1;}/**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso []***********************************************************************/int Ntk_CommandPrintRange( Mv_Frame_t * pMvsis, int argc, char **argv ){ FILE * pOut, * pErr; Ntk_Network_t * pNet; int nNodes, c; pNet = Mv_FrameReadNet(pMvsis); pOut = Mv_FrameReadOut(pMvsis); pErr = Mv_FrameReadErr(pMvsis); // set defaults util_getopt_reset(); while ( ( c = util_getopt( argc, argv, "h" ) ) != EOF ) { switch ( c ) { case 'h': goto usage; default: goto usage; } } if ( pNet == NULL ) { fprintf( pErr, "Empty network.\n" ); return 1; } // collect the nodes nNodes = Cmd_CommandGetNodes( pMvsis, argc-util_optind+1, argv+util_optind-1, 1 ); if ( nNodes == 0 ) { fprintf( pErr, "The list of nodes to print is empty.\n" ); return 1; } // print the nodes Ntk_NetworkPrintRange( pOut, pNet, nNodes ); return 0;usage: fprintf( pErr, "usage: print_range [-h] <node_list>\n" ); fprintf( pErr, "\t prints the number of values of nodes in the list\n" ); fprintf( pErr, "\t <node_list> : if empty, prints values for all nodes in the network\n" ); fprintf( pErr, "\t-h : print the command usage\n"); return 1;}/**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso []***********************************************************************/int Ntk_CommandPrintValue( Mv_Frame_t * pMvsis, int argc, char **argv ){ FILE * pOut, * pErr; Ntk_Network_t * pNet; int nNodes, c; pNet = Mv_FrameReadNet(pMvsis); pOut = Mv_FrameReadOut(pMvsis); pErr = Mv_FrameReadErr(pMvsis); // set defaults util_getopt_reset(); while ( ( c = util_getopt( argc, argv, "h" ) ) != EOF ) { switch ( c ) { case 'h': goto usage; default: goto usage; } } if ( pNet == NULL ) { fprintf( pErr, "Empty network.\n" ); return 1; } // collect the nodes nNodes = Cmd_CommandGetNodes( pMvsis, argc-util_optind+1, argv+util_optind-1, 0 ); if ( nNodes == 0 ) { fprintf( pErr, "The list of nodes to print is empty.\n" ); return 1; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -