VIS
|
00001 00034 #include "ioInt.h" 00035 00036 static char rcsid[] UNUSED = "$Id: ioCmd.c,v 1.16 2005/05/19 02:34:33 awedh Exp $"; 00037 00038 /*---------------------------------------------------------------------------*/ 00039 /* Constant declarations */ 00040 /*---------------------------------------------------------------------------*/ 00041 #ifndef NAWK 00042 #define NAWK "gawk" 00043 #endif 00044 /*---------------------------------------------------------------------------*/ 00045 /* Stucture declarations */ 00046 /*---------------------------------------------------------------------------*/ 00047 00048 /*---------------------------------------------------------------------------*/ 00049 /* Type declarations */ 00050 /*---------------------------------------------------------------------------*/ 00051 00052 /*---------------------------------------------------------------------------*/ 00053 /* Variable declarations */ 00054 /*---------------------------------------------------------------------------*/ 00055 extern FILE *yyin; 00056 00057 /*---------------------------------------------------------------------------*/ 00058 /* Macro declarations */ 00059 /*---------------------------------------------------------------------------*/ 00060 00061 00064 /*---------------------------------------------------------------------------*/ 00065 /* Static function prototypes */ 00066 /*---------------------------------------------------------------------------*/ 00067 00068 static int CommandReadBlifMv(Hrc_Manager_t **hmgr, int argc, char **argv); 00069 static int CommandWriteBlifMv(Hrc_Manager_t **hmgr, int argc, char **argv); 00070 static int CommandReadVerilog(Hrc_Manager_t **hmgr, int argc, char **argv); 00071 static int CommandReadBlif(Hrc_Manager_t **hmgr, int argc, char **argv); 00072 static int CommandWriteBlif(Hrc_Manager_t **hmgr, int argc, char **argv); 00073 static int CommandWriteSmv(Hrc_Manager_t **hmgr, int argc, char **argv); 00074 00078 /*---------------------------------------------------------------------------*/ 00079 /* Definition of exported functions */ 00080 /*---------------------------------------------------------------------------*/ 00081 00091 void 00092 Io_Init(void) 00093 { 00094 Cmd_CommandAdd("read_blif_mv", CommandReadBlifMv, 0); 00095 Cmd_CommandAdd("write_blif_mv", CommandWriteBlifMv, 0); 00096 Cmd_CommandAdd("write_smv", CommandWriteSmv, 0); 00097 Cmd_CommandAdd("read_verilog", CommandReadVerilog, 0); 00098 Cmd_CommandAdd("read_blif", CommandReadBlif, 0); 00099 Cmd_CommandAdd("write_blif", CommandWriteBlif, 0); 00100 } 00101 00111 void 00112 Io_End(void) 00113 { 00114 } 00115 00116 /*---------------------------------------------------------------------------*/ 00117 /* Definition of static functions */ 00118 /*---------------------------------------------------------------------------*/ 00119 00175 static int 00176 CommandReadBlifMv( 00177 Hrc_Manager_t **hmgr, 00178 int argc, 00179 char **argv) 00180 { 00181 int status, c; 00182 boolean isCanonical, isIncremental, isVerbose; 00183 char *fileName; 00184 FILE *fp; 00185 Hrc_Manager_t *newHmgr; 00186 00187 isCanonical = 0; 00188 isIncremental = 0; 00189 isVerbose = 0; 00190 util_getopt_reset(); 00191 while ((c = util_getopt(argc,argv,"chrv")) != EOF){ 00192 switch(c){ 00193 case 'c': 00194 isCanonical = 1; 00195 break; 00196 case 'h': 00197 goto usage; 00198 case 'r': 00199 isIncremental = 1; 00200 break; 00201 case 'v': 00202 isVerbose = 1; 00203 break; 00204 default: 00205 goto usage; 00206 } 00207 } 00208 00209 /* check to see if there is only one argument left for a file name */ 00210 if (argc-1 != util_optind){ 00211 goto usage; 00212 } 00213 fileName = argv[util_optind]; 00214 00215 fp = Cmd_FileOpen(fileName, "r", NIL(char *), 1); 00216 00217 if (fp == NIL(FILE)){ 00218 (void)fprintf(vis_stderr,"File %s cannot be opened\n", fileName); 00219 return 1; 00220 } 00221 error_init(); 00222 00223 newHmgr = Io_BlifMvRead(fp,*hmgr,isCanonical,isIncremental,isVerbose); 00224 /* success */ 00225 if (newHmgr != NIL(Hrc_Manager_t)){ 00226 status = 0; 00227 if (isIncremental == 0){ 00228 Hrc_ManagerFree(*hmgr); 00229 *hmgr = newHmgr; 00230 } 00231 } 00232 /* failure */ 00233 else { 00234 status = 1; 00235 } 00236 (void)fprintf(vis_stderr,"%s",error_string()); 00237 fflush(vis_stderr); 00238 if (fp != stdin) { 00239 (void) fclose(fp); 00240 } 00241 return (status); 00242 00243 usage: 00244 (void)fprintf(vis_stderr, "usage: read_blif_mv [-c] [-h] [-r] [-v] file\n"); 00245 (void)fprintf(vis_stderr, " -c semi-canonicalize all the tables\n"); 00246 (void)fprintf(vis_stderr, " -h print the command usage\n"); 00247 (void)fprintf(vis_stderr, " -r replace the current subhierarchy\n"); 00248 (void)fprintf(vis_stderr, " -v verbose\n"); 00249 return 1 ; 00250 } 00251 00252 00281 static int 00282 CommandWriteBlifMv( 00283 Hrc_Manager_t **hmgr, 00284 int argc, 00285 char **argv) 00286 { 00287 FILE *fp; 00288 int c; 00289 Hrc_Node_t *currentNode; 00290 00291 util_getopt_reset(); 00292 while ((c = util_getopt(argc,argv,"h")) != EOF){ 00293 switch(c){ 00294 case 'h': 00295 goto usage; 00296 default: 00297 goto usage; 00298 } 00299 } 00300 00301 currentNode = Hrc_ManagerReadCurrentNode(*hmgr); 00302 if (currentNode == NIL(Hrc_Node_t)){ 00303 (void)fprintf(vis_stderr,"No file has been read in.\n"); 00304 return 1; 00305 } 00306 00307 if (argc == 1){ 00308 fp = stdout; 00309 } 00310 else if (argc == 2){ 00311 fp = Cmd_FileOpen(*(++argv), "w", NIL(char *), 1); 00312 if (fp == NIL(FILE)){ 00313 (void)fprintf(vis_stderr,"Cannot write to %s\n", *argv); 00314 return 1; 00315 } 00316 } 00317 else { 00318 goto usage; 00319 } 00320 00321 error_init(); 00322 IoBlifMvWrite(fp,*hmgr); 00323 (void)fprintf(vis_stderr,"%s",error_string()); 00324 fflush(fp); 00325 if (fp != stdout) { 00326 (void) fclose(fp); 00327 } 00328 return 0; 00329 00330 usage: 00331 (void)fprintf(vis_stderr, "usage: write_blif_mv [-h] [file]\n"); 00332 (void)fprintf(vis_stderr, " -h print the command usage\n"); 00333 return 1; 00334 } 00335 00364 static int 00365 CommandWriteSmv( 00366 Hrc_Manager_t **hmgr, 00367 int argc, 00368 char **argv) 00369 { 00370 FILE *fp; 00371 int c; 00372 Hrc_Node_t *currentNode; 00373 00374 util_getopt_reset(); 00375 while ((c = util_getopt(argc,argv,"h")) != EOF){ 00376 switch(c){ 00377 case 'h': 00378 goto usage; 00379 default: 00380 goto usage; 00381 } 00382 } 00383 00384 currentNode = Hrc_ManagerReadCurrentNode(*hmgr); 00385 if (currentNode == NIL(Hrc_Node_t)){ 00386 (void)fprintf(vis_stderr,"No file has been read in.\n"); 00387 return 1; 00388 } 00389 00390 if (argc == 1){ 00391 fp = stdout; 00392 }else if (argc == 2){ 00393 fp = Cmd_FileOpen(*(++argv), "w", NIL(char *), 1); 00394 if (fp == NIL(FILE)){ 00395 (void)fprintf(vis_stderr,"Cannot write to %s\n", *argv); 00396 return 1; 00397 } 00398 }else { 00399 goto usage; 00400 } 00401 00402 error_init(); 00403 IoSmvWrite(fp,*hmgr); 00404 (void)fprintf(vis_stderr,"%s",error_string()); 00405 fflush(fp); 00406 if (fp != stdout) { 00407 (void) fclose(fp); 00408 } 00409 return 0; 00410 00411 usage: 00412 (void)fprintf(vis_stderr, "usage: write_smv [-h] [file]\n"); 00413 (void)fprintf(vis_stderr, " -h print the command usage\n"); 00414 return 1; 00415 } 00416 00417 00455 static int 00456 CommandReadVerilog(Hrc_Manager_t **hmgr, int argc, char **argv) 00457 { 00458 int c; 00459 char *realFileName, *verilogFileName; 00460 #if HAVE_MKSTEMP && HAVE_CLOSE 00461 char outFileName[] = "/tmp/vis.XXXXXX"; 00462 int fd; 00463 #else 00464 char *outFileName; 00465 char buffer[512]; 00466 #endif 00467 FILE *fp; 00468 static char parseBuffer[1024]; 00469 int vl2mvStatus; 00470 int cSet = 0; 00471 int uSet = 0; 00472 int FSet = 0; 00473 00474 util_getopt_reset(); 00475 while ((c = util_getopt(argc,argv,"chuF")) != EOF){ 00476 switch(c){ 00477 case 'c': 00478 cSet = 1; 00479 break; 00480 case 'h': 00481 goto usage; 00482 case 'u': 00483 uSet = 1; 00484 break; 00485 case 'F': 00486 FSet = 1; 00487 break; 00488 default: 00489 goto usage; 00490 } 00491 } 00492 00493 /* check to see if there is only one argument left for a file name */ 00494 if (argc-1 != util_optind){ 00495 goto usage; 00496 } 00497 verilogFileName = argv[util_optind]; 00498 00499 fp = Cmd_FileOpen(verilogFileName, "r", &realFileName, /* silent */ 1); 00500 00501 if (fp == NIL(FILE)){ 00502 FREE(realFileName); 00503 (void)fprintf(vis_stderr,"File %s cannot be opened\n", verilogFileName); 00504 return 1; 00505 } 00506 fclose(fp); 00507 00508 #if HAVE_MKSTEMP && HAVE_CLOSE 00509 fd = mkstemp(outFileName); 00510 if (fd == -1){ 00511 #else 00512 outFileName = util_strsav(tmpnam(buffer)); 00513 if (outFileName == NIL(char)){ 00514 #endif 00515 FREE(realFileName); 00516 (void)fprintf(vis_stderr,"Can not create temporary file. "); 00517 (void)fprintf(vis_stderr,"Clean up /tmp an try again.\n"); 00518 return 1; 00519 } 00520 00521 strcpy(parseBuffer,"vl2mv "); 00522 strcat(parseBuffer,"-o "); 00523 strcat(parseBuffer,outFileName); 00524 strcat(parseBuffer," "); 00525 /* start inserting options for vl2mv */ 00526 if (cSet){ 00527 strcat(parseBuffer,"-c "); 00528 } 00529 if (uSet){ 00530 strcat(parseBuffer,"-u "); 00531 } 00532 if (FSet){ 00533 strcat(parseBuffer,"-F "); 00534 } 00535 strcat(parseBuffer, realFileName); 00536 FREE(realFileName); 00537 #if HAVE_MKSTEMP && HAVE_CLOSE 00538 close(fd); 00539 #endif 00540 vl2mvStatus = system(parseBuffer); 00541 if (vl2mvStatus != 0){ 00542 return 1; 00543 } 00544 sprintf(parseBuffer,"read_blif_mv %s",outFileName); 00545 Cmd_CommandExecute(hmgr, parseBuffer); 00546 #if HAVE_UNLINK 00547 unlink(outFileName); 00548 #endif 00549 return 0; 00550 00551 usage: 00552 (void)fprintf(vis_stderr, "usage: read_verilog [-c] [-h] [-u] [-F] file\n"); 00553 (void)fprintf(vis_stderr, " -c use explicit clocking\n"); 00554 (void)fprintf(vis_stderr, " -h print the command usage\n"); 00555 (void)fprintf(vis_stderr, " -u turn off unroling\n"); 00556 (void)fprintf(vis_stderr, " -F ignore all timing\n"); 00557 return 1; 00558 } 00559 00610 static int 00611 CommandReadBlif( 00612 Hrc_Manager_t **hmgr, 00613 int argc, 00614 char **argv) 00615 { 00616 int c, status; 00617 boolean isCanonical = 0; 00618 boolean isIncremental = 0; 00619 boolean isVerbose = 0; 00620 char *fileName, *realFileName, *visDirectoryName, *blifMvFileName; 00621 char *encodingFileName; 00622 char command[512]; 00623 FILE *fp; 00624 #if HAVE_MKSTEMP && HAVE_CLOSE 00625 int fd; 00626 #else 00627 char buffer[512]; 00628 #endif 00629 Hrc_Manager_t *newHmgr; 00630 00631 util_getopt_reset(); 00632 while ((c = util_getopt(argc,argv,"ce:hv")) != EOF){ 00633 switch(c){ 00634 case 'c': 00635 isCanonical = 1; 00636 break; 00637 case 'e': 00638 isIncremental = 1; 00639 fp = Cmd_FileOpen(util_optarg, "r", &encodingFileName, 1); 00640 if (fp == NIL(FILE)){ 00641 (void)fprintf(vis_stderr,"Encoding file %s is not found\n", util_optarg); 00642 return 1; 00643 } 00644 if (fp != stdin){ 00645 (void)fclose(fp); 00646 } 00647 break; 00648 case 'h': 00649 goto usage; 00650 case 'v': 00651 isVerbose = 1; 00652 break; 00653 default: 00654 goto usage; 00655 } 00656 } 00657 00658 /* check to see if there is only one argument left for a file name */ 00659 if (argc-1 != util_optind){ 00660 goto usage; 00661 } 00662 fileName = argv[util_optind]; 00663 00664 fp = Cmd_FileOpen(fileName, "r", &realFileName, 1); 00665 00666 if (fp == NIL(FILE)){ 00667 /* 00668 FREE(realFileName); 00669 */ 00670 (void)fprintf(vis_stderr,"File %s cannot be opened\n", fileName); 00671 return 1; 00672 } 00673 if (fp != stdin){ 00674 (void)fclose(fp); 00675 } 00676 00677 #if HAVE_MKSTEMP && HAVE_CLOSE 00678 blifMvFileName = util_strsav("/tmp/vis.XXXXXX"); 00679 fd = mkstemp(blifMvFileName); 00680 if (fd == -1){ 00681 #else 00682 blifMvFileName = util_strsav(tmpnam(buffer)); 00683 if (blifMvFileName == NIL(char)){ 00684 #endif 00685 FREE(realFileName); 00686 (void)fprintf(vis_stderr,"Could not create temporary file. "); 00687 (void)fprintf(vis_stderr,"Clean up /tmp an try again.\n"); 00688 return 1; 00689 } 00690 #if HAVE_MKSTEMP && HAVE_CLOSE 00691 close(fd); 00692 #endif 00693 /* Invoking an awk script */ 00694 visDirectoryName = Vm_VisObtainLibrary(); 00695 if (isIncremental == 0){ 00696 (void)sprintf(command,"sed 's/^\\./@/g' %s | sed 's/\\./$/g' | sed 's/^@/\\./g' | sed 's/{/</g' | sed 's/}/>/g'| sed 's/(/<</g' | sed 's/)/>>/g'| %s -f %s/ioBlifToMv.nawk > %s", realFileName, NAWK, visDirectoryName, blifMvFileName); 00697 } 00698 else { 00699 (void)sprintf(command,"sed 's/^\\./@/g' %s | sed 's/\\./$/g' | sed 's/^@/\\./g' | sed 's/{/</g' | sed 's/}/>/g'| %s -f %s/ioBlifToMvForIncremental.nawk > %s", realFileName, NAWK, visDirectoryName, blifMvFileName); 00700 } 00701 (void)system(command); 00702 FREE(visDirectoryName); 00703 FREE(realFileName); 00704 00705 error_init(); 00706 00707 if (isIncremental == 0){ 00708 fp = Cmd_FileOpen(blifMvFileName, "r", NIL(char *), 1); 00709 } 00710 else { 00711 char *finalBlifMvFileName; 00712 00713 #if HAVE_MKSTEMP && HAVE_CLOSE 00714 finalBlifMvFileName = util_strsav("/tmp/vis.XXXXXX"); 00715 fd = mkstemp(finalBlifMvFileName); 00716 if (fd == -1){ 00717 #else 00718 finalBlifMvFileName = util_strsav(tmpnam(buffer)); 00719 if (finalBlifMvFileName == NIL(char)){ 00720 #endif 00721 FREE(blifMvFileName); 00722 (void)fprintf(vis_stderr,"Could not create temporary file. "); 00723 (void)fprintf(vis_stderr,"Clean up /tmp an try again.\n"); 00724 return 1; 00725 } 00726 #if HAVE_MKSTEMP && HAVE_CLOSE 00727 close(fd); 00728 #endif 00729 00730 (void)sprintf(command,"cat %s %s > %s",encodingFileName,blifMvFileName,finalBlifMvFileName); 00731 (void)system(command); 00732 FREE(encodingFileName); 00733 #if HAVE_UNLINK 00734 unlink(blifMvFileName); 00735 #endif 00736 FREE(blifMvFileName); 00737 blifMvFileName = finalBlifMvFileName; 00738 00739 fp = Cmd_FileOpen(blifMvFileName, "r", NIL(char *), 1); 00740 } 00741 assert(fp != NIL(FILE)); 00742 newHmgr = Io_BlifMvRead(fp,*hmgr,isCanonical,isIncremental,isVerbose); 00743 if (newHmgr != NIL(Hrc_Manager_t)){ 00744 status = 0; 00745 if (isIncremental == 0){ 00746 Hrc_ManagerFree(*hmgr); 00747 *hmgr = newHmgr; 00748 } 00749 } 00750 else { 00751 status = 1; 00752 } 00753 00754 (void)fprintf(vis_stderr,"%s",error_string()); 00755 fflush(vis_stderr); 00756 if (fp != stdin) { 00757 (void) fclose(fp); 00758 #if HAVE_UNLINK 00759 unlink(blifMvFileName); 00760 #endif 00761 } 00762 FREE(blifMvFileName); 00763 return (status); 00764 00765 usage: 00766 (void)fprintf(vis_stderr, "usage: read_blif [-c] [-e encoding_file] [-h] [-v] file\n"); 00767 (void)fprintf(vis_stderr, " -c table canonicalization\n"); 00768 (void)fprintf(vis_stderr, " -e read a file into the current node using encoding file\n"); 00769 (void)fprintf(vis_stderr, " -h print the command usage\n"); 00770 (void)fprintf(vis_stderr, " -v verbose\n"); 00771 return 1 ; 00772 } 00773 00774 00973 static int 00974 CommandWriteBlif( 00975 Hrc_Manager_t **hmgr, 00976 int argc, 00977 char **argv) 00978 { 00979 FILE *enc_fp, *fp; 00980 char *modelName, *dupname; 00981 int status, verbosity, combinationalOnly, makeLatchIOsPOs; 00982 Io_Encoding_Type_t encoding_type; 00983 Hrc_Node_t *hnode; 00984 int c; 00985 boolean recursive; 00986 00987 fp = stdout; 00988 enc_fp = NIL(FILE); 00989 verbosity = 0; 00990 combinationalOnly = 0; 00991 makeLatchIOsPOs = 0; 00992 recursive = 0; 00993 00994 util_getopt_reset(); 00995 while ((c = util_getopt(argc, argv, "clRe:hv:")) != EOF) { 00996 switch(c) { 00997 case 'c': 00998 combinationalOnly = 1; 00999 break; 01000 case 'l': 01001 makeLatchIOsPOs = 1; 01002 break; 01003 case 'R': 01004 recursive = 1; 01005 break; 01006 case 'e': 01007 enc_fp = Cmd_FileOpen(util_optarg, "w", NIL(char *), 1); 01008 if (enc_fp == NIL(FILE)){ 01009 (void)fprintf(vis_stderr,"Cannot write to %s\n", util_optarg); 01010 return 1; 01011 } 01012 break; 01013 case 'h': 01014 goto usage; 01015 case 'v': 01016 verbosity = atoi(util_optarg); 01017 break; 01018 default: 01019 goto usage; 01020 } 01021 } 01022 01023 if(makeLatchIOsPOs && combinationalOnly){ 01024 (void)fprintf(vis_stderr,"Cannot use -c and -l options simultaneously.\n"); 01025 goto usage; 01026 } 01027 if(recursive){ 01028 if(makeLatchIOsPOs || combinationalOnly){ 01029 (void)fprintf(vis_stderr,"Cannot use -c or -l options with -R option.\n"); 01030 goto usage; 01031 } 01032 if(enc_fp != NIL(FILE)){ 01033 (void)fprintf(vis_stderr,"Cannot use -e option with -R option.\n"); 01034 goto usage; 01035 } 01036 } 01037 hnode = Hrc_ManagerReadCurrentNode(*hmgr); 01038 if (hnode == NIL(Hrc_Node_t)){ 01039 (void)fprintf(vis_stderr,"No file has been read in.\n"); 01040 return 1; 01041 } 01042 01043 /* check to see if there is only one argument left for a file name */ 01044 if (argc == util_optind){ 01045 fp = stdout; 01046 } 01047 else if (argc-1 == util_optind){ 01048 fp = Cmd_FileOpen(argv[util_optind], "w", NIL(char *), 1); 01049 if (fp == NIL(FILE)){ 01050 (void)fprintf(vis_stderr,"Cannot write to %s\n", argv[util_optind]); 01051 if (enc_fp != NIL(FILE)){ 01052 fclose(enc_fp); 01053 } 01054 return 1; 01055 } 01056 } 01057 else { 01058 if (enc_fp != NIL(FILE)){ 01059 fclose(enc_fp); 01060 } 01061 goto usage; 01062 } 01063 01064 if((enc_fp == NIL(FILE)) && !recursive){ 01065 modelName = Hrc_NodeReadModelName(hnode); 01066 dupname = ALLOC(char, strlen(modelName) + strlen(".enc") + 1); 01067 sprintf(dupname, "%s%s", modelName, ".enc"); 01068 enc_fp = Cmd_FileOpen(dupname, "w", NIL(char *), 1); 01069 if (enc_fp == NIL(FILE)){ 01070 (void)fprintf(vis_stderr,"Cannot write to %s\n", dupname); 01071 return 1; 01072 } 01073 (void)fprintf(stdout, "Writing encoding information to %s\n",dupname); 01074 FREE(dupname); 01075 } 01076 01077 if(!recursive){ 01078 if(!(makeLatchIOsPOs || combinationalOnly)){ 01079 (void)fprintf(vis_stderr,"Warning - The blif and encoding files generated cannot be read back into \n"); 01080 (void)fprintf(vis_stderr, "VIS. If you would like to read the optimized blif file back into VIS, then \n"); 01081 (void)fprintf(vis_stderr, "please use 'write_blif -l' or 'write_blif -c' instead.\n"); 01082 } 01083 } 01084 01085 error_init(); 01086 encoding_type = SIMPLE; 01087 if(recursive){ 01088 status = Io_HnodeWriteBlifTotal(encoding_type, hnode, fp, verbosity); 01089 } 01090 else{ 01091 status = Io_HnodeWriteBlif(encoding_type, hnode, fp, enc_fp, verbosity, combinationalOnly, makeLatchIOsPOs); 01092 } 01093 (void)fprintf(vis_stderr,"%s",error_string()); 01094 fflush(fp); 01095 if (fp != stdout) { 01096 (void) fclose(fp); 01097 } 01098 01099 if(status == 0){ 01100 return 0; 01101 } 01102 else{ 01103 return 1; 01104 } 01105 01106 usage: 01107 (void)fprintf(vis_stderr, "usage: write_blif [-c] [-l] [-e encoding_file] [-R] [-h] [-v verbosity] [blif_file]\n"); 01108 (void)fprintf(vis_stderr, " -c write only combinational part to blif file\n"); 01109 (void)fprintf(vis_stderr, " -l make latch IOs primary outputs in the blif file\n"); 01110 (void)fprintf(vis_stderr, " -e encoding_file, default is <model_name>.enc\n"); 01111 (void)fprintf(vis_stderr, " -R recursively write out the hierarchy rooted at the current hnode.\n"); 01112 (void)fprintf(vis_stderr, " In this sub-hierarchy, all tables must be deterministic and all\n"); 01113 (void)fprintf(vis_stderr, " variables must be boolean. Either of the -c, -l, or -e options \n"); 01114 (void)fprintf(vis_stderr, " cannot be simultaneously with the -R option \n"); 01115 (void)fprintf(vis_stderr, " -h print this usage message\n"); 01116 (void)fprintf(vis_stderr, " -v verbosity, an integer < 3, default is 0\n"); 01117 (void)fprintf(vis_stderr, "Note: * If neither the -c or -l options are chosen, then latches will \n"); 01118 (void)fprintf(vis_stderr, " be written out to the blif file. Latch IOs will not be made\n"); 01119 (void)fprintf(vis_stderr, " into primary outputs in the blif file\n"); 01120 (void)fprintf(vis_stderr, " * After optimizing the blif file in SIS, do not write out the\n"); 01121 (void)fprintf(vis_stderr, " optimized file using 'write_blif -s' if you want to read\n"); 01122 (void)fprintf(vis_stderr, " it back into VIS. Use 'write_blif' instead \n"); 01123 return 1 ; 01124 01125 } 01126