/* ** 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; v.m0 = 8; v.m1 = 9; v.ss = 3; targc = argc; targv = argv; while(--targc && (**++targv == '-')) getoptions(&targc, &targv); if (argc == 7) { taps = atoi(argv[3]); q.data = atoi(argv[4]); q.coef = atoi(argv[5]); q.err = atoi(argv[6]); } else if (argc == 8) { taps = atoi(argv[3]); q.data = atoi(argv[4]); q.coef = atoi(argv[5]); q.err = atoi(argv[6]); line = atof(argv[7]); } else if (argc == 10) { taps = atoi(argv[3]); q.data = atoi(argv[4]); q.coef = atoi(argv[5]); q.err = atoi(argv[6]); v.m0 = atoi(argv[7]); v.m1 = atoi(argv[8]); v.ss = atoi(argv[9]); } else if (argc == 11) { taps = atoi(argv[3]); q.data = atoi(argv[4]); q.coef = atoi(argv[5]); q.err = atoi(argv[6]); v.m0 = atoi(argv[7]); v.m1 = atoi(argv[8]); v.ss = atoi(argv[9]); line = atof(argv[10]); } else { printf("usage: %s -p|-s -m|-d taps data_bits coef_bits err_bits [m0 m1 ss_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); if (dedicate == 1) printf("dedicated PE, %d taps\n",taps); else if (multi == 1) printf("multiplexed PE, %d taps\n",taps); printf("data bits = %d\tcoefficient bits = %d\terror bits = %d\n",q.data,q.coef,q.err); printf("area = %g sq mm\tcycle time = %g ns\n\n",area/CONV,time); */ printf("%g\t%g\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; }