FreeCalypso > hg > ueda-linux
view ueda/sverp/main.c @ 0:cd92449fdb51
initial import of ueda and ifctf-part-lib from ifctfvax CVS
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 20 Jul 2015 00:24:37 +0000 |
parents | |
children | 7b4f78fcca08 |
line wrap: on
line source
/* * main() function for ueda-sverp */ #include <stdio.h> #include "struct.h" struct module_def *glob_module_list, *top_module_def; char *primitives_filename = "primitives", *top_module_expl; int verbose, top_module_candidates; char *output_filename = "sverp.out"; static void usage() { fprintf(stderr, "usage: ueda-sverp [-p primfile] [-t top-module] [-v] verilog-sources\n"); exit(1); } static void process_options(argc, argv) char **argv; { register int c; extern char *optarg; while ((c = getopt(argc, argv, "I:o:p:t:v")) != EOF) { switch (c) { case 'I': add_symfile_dir(optarg); continue; case 'o': output_filename = optarg; continue; case 'p': primitives_filename = optarg; continue; case 't': top_module_expl = optarg; continue; case 'v': verbose++; continue; default: usage(); } } } main(argc, argv) char **argv; { extern int optind; process_options(argc, argv); if (optind >= argc) usage(); for (; optind < argc; optind++) { if (verbose) printf("Reading Verilog source %s\n", argv[optind]); read_verilog_file(argv[optind]); } if (top_module_expl) process_explicit_topmod(); if (verbose) printf("Reading primitive definitions from %s\n", primitives_filename); set_default_sympath(); /* for xGA definition files */ read_primitives_file(primitives_filename); if (verbose) printf("Linking instantiations to lower modules\n"); link_pass(); if (!top_module_def) { fprintf(stderr, "error: no top module found\n"); exit(1); } if (!top_module_expl && top_module_candidates > 1) { fprintf(stderr, "error: more than one top module candidate, use -t option\n"); exit(1); } if (verbose) printf("Elaborating hierarchy from top module %s\n", top_module_def->name); elaborate_module(top_module_def, top_module_def->name, "", 0); tally_output_nets(); generate_output(); exit(0); }