/* ** main.c -- area/speed estimation, extrapolates data from actual layouts ** - performs initializtation and overall control of estimation ** Joseph B. Evans, 10/88 */ #include #include #include "estimate.h" #define CONV 1000000. /* convert from sq microns to sq mm */ main(argc,argv) char **argv; int argc; { double area,time; double line = DEF_PR; int minbits = MINBITS; int maxbits = MAXBITS; FILE *fp_a,*fp_t; char **targv; int targc; targc = argc; targv = argv; while(--targc && (**++targv == '-')) getoptions(&targc, &targv); if (argc == 4) { taps = atoi(argv[1]); q.data = atoi(argv[2]); q.coef = atoi(argv[3]); } else if (argc == 5) { taps = atoi(argv[1]); q.data = atoi(argv[2]); q.coef = atoi(argv[3]); line = atof(argv[4]); } else { printf("usage: %s taps data_bits partial_product_bits [line_width]\n",argv[0]); exit(1); } initialize(line); estimate(&area,&time); printf("\nArea/Speed Estimates\n"); printf("process: single level metal, poly, %g microns\n",line); printf("special PE, %d taps\n",taps); printf("data bits = %d\tpartial product bits = %d\n",q.data,q.coef); printf("area = %g sq mm\tcycle time = %g ns\n\n",area/CONV,time); } getoptions(pargc, pargv) int *pargc; char **pargv[]; { register int argc; register char **argv; register char *c; argc = *pargc; argv = *pargv; c = *argv; while(*++c) { switch(*c) { case 'm': multi = 1; break; case 'd': dedicate = 1; break; case 'p': parallel = 1; break; case 's': serial = 1; break; default: fprintf(stderr, ".... Bad option \"%c\"\n", *c); exit(); } } *pargv = argv; *pargc = argc; }