14 printf(
" TAN - Timing Analyzer, v1.0\n");
15 printf(
"Kris & Quentin - April 1, 1995\n\n");
32 strcpy(help,
"more ");
33 strcat(help, filename);
139 not_found = strcmp(item_type, item_list[i++]);
141 while(not_found && (i < item_num));
146 return(item_num + 1);
152 int i=0, n=strlen(line);
156 if(!isspace(line[i++]))
165 printf(
"Unrecognized value of parameter in %s:\n%s\n\n",
172 printf(
"Parameter out of range in %s:\n%s\n\n",
199 if((fp = fopen(filename,
"r"))==NULL)
201 printf(
"Warning !!!\nCannot open configuration file %s.\n\n", filename);
207 if(in_buffer[0]==
'*')
220 char *s = config_item;
223 while (*b && !isspace(*b) && *b !=
'=')
226 while (isspace(*b) || *b ==
'=')
228 if (!*b || !*config_item) {
229 printf(
"Unrecognized line in %s:\n%s\n\n", filename, in_buffer);
235 s = item + strlen(item) - 1;
236 while (s >= item && isspace(*s))
258 if(strcmp(item,
"PT")==0)
261 if(strcmp(item,
"VP")==0)
271 if(sscanf(item,
"%f", &fvalue)!=1)
277 if((fvalue<0.0) || (fvalue>2.0))
287 if(sscanf(item,
"%f", &fvalue)!=1)
293 if((fvalue<0.0) || (fvalue>2.0))
303 if(sscanf(item,
"%f", &fvalue)!=1)
309 if((fvalue<0.0) || (fvalue>2.0))
319 if(strcmp(item,
"YES")==0)
322 if(strcmp(item,
"NO")==0)
332 if(sscanf(item,
"%f", &fvalue)!=1)
342 if(sscanf(item,
"%d", &ivalue)!=1)
352 if(sscanf(item,
"%d", &ivalue)!=1)
362 if(sscanf(item,
"%d", &ivalue)!=1)
372 if(sscanf(item,
"%f", &fvalue)!=1)
378 if((fvalue<0.0) || (fvalue>2.0))
388 if(sscanf(item,
"%f", &fvalue)!=1)
398 if(sscanf(item,
"%f", &fvalue)!=1)
408 if(sscanf(item,
"%f", &fvalue)!=1)
418 if(sscanf(item,
"%f", &fvalue)!=1)
428 if(sscanf(item,
"%f", &fvalue)!=1)
434 if((fvalue<0.0) || (fvalue>1.0))
444 if(sscanf(item,
"%f", &fvalue)!=1)
450 if((fvalue<0.0) || (fvalue>2*M_PI))
460 if(strcmp(item,
"YES")==0)
463 if(strcmp(item,
"NO")==0)
474 if(item[strlen(item)-1]!=
'/')
480 if(item[strlen(item)-1]!=
'/')
486 if(item[strlen(item)-1]!=
'/')
587 if(sscanf(item,
"%f", &fvalue)!=1)
597 if(sscanf(item,
"%f", &fvalue)!=1)
607 if(sscanf(item,
"%f", &fvalue)!=1)
616 if(sscanf(item,
"%f", &fvalue)!=1)
625 if(sscanf(item,
"%f", &fvalue)!=1)
634 if(sscanf(item,
"%f", &fvalue)!=1)
643 if(sscanf(item,
"%f", &fvalue)!=1)
652 if(sscanf(item,
"%f", &fvalue)!=1)
661 if(sscanf(item,
"%f", &fvalue)!=1)
671 printf(
"Unknown option in %s:\n%s\n\n", filename, in_buffer);
705 strcat(jxfile, circuit_name);
708 if((fp = fopen(jxfile,
"r"))==NULL)
710 printf(
"Warning !!!\nCannot open configuration file %s.\n\n", jxfile);
716 if(in_buffer[0]==
'*')
722 if(sscanf(in_buffer,
"%s%s%s", config_item, eq, item)!=3)
724 printf(
"Unrecognized line in %s:\n%s\n\n", jxfile, in_buffer);
729 if(strcmp(eq,
"=") != 0)
731 printf(
"Unrecognized line in %s:\n%s\n\n", jxfile, in_buffer);
740 if(sscanf(item,
"%f", &fvalue)!=1)
746 xy_param->
xmin = fvalue;
750 if(sscanf(item,
"%f", &fvalue)!=1)
756 xy_param->
xmax = fvalue;
760 if(sscanf(item,
"%f", &fvalue)!=1)
766 xy_param->
step = fvalue;
770 if(sscanf(item,
"%d", &ivalue)!=1)
786 if(sscanf(item,
"%d", &ivalue)!=1)
796 if(sscanf(item,
"%d", &ivalue)!=1)
806 printf(
"Unknown option in %s:\n%s\n\n", jxfile, in_buffer);
827 printf(
"Unrecognized option: %s\n", option);
910 printf(
"Unrecognized option: %s\n", option);
920 printf(
"Unrecognized option: %s\n", option);
937 for(i=1; i<argc-1; i++)
944 strcpy(param.
opt_num, argv[argc-1]);
970 int is_ws = (strstr(param.
spice_name,
"wrspice") != NULL);
975 printf(
"Cannot create %s configuration file %s.\n\n",
981 fprintf(fp,
"set subc_catchar=\":\"\n");
982 fprintf(fp,
"set subc_catmode=\"spice3\"\n\n");
985 fprintf(fp,
"set circuit = '%s'\n\n", param.
circuit_name);
989 fprintf(fp,
"set circext = '%s'\n", param.
circuit_ext);
990 fprintf(fp,
"set paramext = '%s'\n", param.
param_ext);
991 fprintf(fp,
"set printext = '%s'\n", param.
print_ext);
992 fprintf(fp,
"set passfailext = '%s'\n\n", param.
passfail_ext);
993 fprintf(fp,
"set checkext = '%s'\n", param.
check_ext);
996 fprintf(fp,
"set stepext = '%s'\n", param.
step_ext);
999 fprintf(fp,
"set phasext = '%s'\n", param.
phase_ext);
1000 fprintf(fp,
"set avrext = '%s'\n", param.
avr_ext);
1001 fprintf(fp,
"set holdext = '%s'\n", param.
hold_ext);
1002 fprintf(fp,
"set setupext = '%s'\n", param.
setup_ext);
1004 fprintf(fp,
"set goodext = '%s'\n", param.
good_ext);
1005 fprintf(fp,
"set badext = '%s'\n", param.
bad_ext);
1006 fprintf(fp,
"set tparext = '%s'\n\n",
TPARAM_EXT);
1007 fprintf(fp,
"set nomext = '%s'\n\n", param.
nom_ext);
1009 fprintf(fp,
"set reportext = '%s'\n\n", param.
report_ext);
1011 fprintf(fp,
"set input_dir = '%s'\n", param.
input_dir);
1012 fprintf(fp,
"set tmp_dir = '%s'\n", param.
tmp_dir);
1013 fprintf(fp,
"set output_dir = '%s'\n\n", param.
output_dir);
1016 fprintf(fp,
"accuracy = %.5f\n", param.
accuracy/100.0);
1018 fprintf(fp,
"delay_variation = %.2f\n", param.
max_delay_var);
1028 int prepare_timegen_files(
char *circuit_name)
1035 fp=fopen(TIMEGEN_CONST_FILE,
"r");
1039 strcpy(command_line,
"mv -f ");
1040 strcat(command_line, TIMEGEN_CONST_FILE);
1041 strcat(command_line,
" ");
1042 strcat(command_line,
".");
1043 strcat(command_line, TIMEGEN_CONST_FILE);
1044 system(command_line);
1047 fp=fopen(TIMEGEN_FILE,
"r");
1051 strcpy(command_line,
"mv -f ");
1052 strcat(command_line, TIMEGEN_FILE);
1053 strcat(command_line,
" ");
1054 strcat(command_line,
".");
1055 strcat(command_line, TIMEGEN_FILE);
1056 system(command_line);
1060 strcat(filename, circuit_name);
1061 strcat(filename,
".");
1062 strcat(filename, TIMEGEN_FILE);
1063 fp=fopen(filename,
"r");
1066 printf(
"Cannot find file %s.\n", filename);
1070 strcpy(command_line,
"cp ");
1071 strcat(command_line, filename);
1072 strcat(command_line,
" ");
1073 strcat(command_line, TIMEGEN_FILE);
1074 system(command_line);
1080 strcat(filename, circuit_name);
1081 strcat(filename,
".");
1082 strcat(filename, TIMEGEN_CONST_FILE);
1083 fp=fopen(filename,
"r");
1086 printf(
"Cannot find file %s.\n", filename);
1090 strcpy(command_line,
"cp ");
1091 strcat(command_line, filename);
1092 strcat(command_line,
" ");
1093 strcat(command_line, TIMEGEN_CONST_FILE);
1094 system(command_line);
1107 strcat(infilename, TIMEGEN_FILE);
1109 strcat(outfilename, TIMEGEN_FILE);
1115 strcat(infilename, TIMEGEN_CONST_FILE);
1117 strcat(outfilename, TIMEGEN_CONST_FILE);
1141 infp=fopen(infilename,
"r");
1144 outfp=fopen(outfilename,
"w");
char logic_ext[NAME_LENGTH]
#define XY_CONFIG_ITEM_NUM
char good_ext[NAME_LENGTH]
void prepare_included_files()
char hose_ext[NAME_LENGTH]
#define PASS_FAIL_THRESHOLD
char circuit_name[NAME_LENGTH]
int read_options(int argc, char *argv[])
#define VOLTAGE_THRESHOLD
#define PLS_EXTR_MTHD_CONFIG
char setup_ext[NAME_LENGTH]
#define OUT_CLK_CYCLE_XY_CONFIG
int file_copy(char *infilename, char *outfilename)
char output_dir[NAME_LENGTH]
#define PH_THR_NOM_CONFIG
#define ONE_VOLTAGE_CONFIG
int read_config(char *filename)
#define MAX_DELAY_VARIATION
char param_ext[NAME_LENGTH]
#define PH_THR_MAX_CONFIG
void command_line_error(char *filename)
char bad_ext[NAME_LENGTH]
static int check_config_item(char *item_type, char **item_list, int item_num)
char signal_ext[NAME_LENGTH]
#define PHASE_THRESHOLD_MIN
char timeinit_ext[NAME_LENGTH]
#define INPUT_NR_XY_CONFIG
#define XY_CONFIG_FILE_EXT
#define INTEREDGE_INT_CONFIG
static void out_of_range(char *line, char *filename)
PHASE min_pulse_phase_diff
char report_ext[NAME_LENGTH]
#define MIN_PHASE_THRESHOLD
#define COLLECT_BY_VOLTAGE
char print_ext[NAME_LENGTH]
static int blank_line(char *line)
#define CHECK_RATIO_CONFIG
TIME min_interval_to_falledge
int read_xy_config(XY_PARAMETERS *xy_param, char *circuit_name)
char init_ext[NAME_LENGTH]
char spice_name[NAME_LENGTH]
char hold_ext[NAME_LENGTH]
char opt_num[NAME_LENGTH]
#define DEFAULT_TIME_ACCURACY
#define MAX_PHASE_THRESHOLD
#define LATCH_MIN_EDGE_INT
TIME min_interval_to_riseedge
char phase_ext[NAME_LENGTH]
char avr_ext[NAME_LENGTH]
char input_dir[NAME_LENGTH]
char comp_ext[NAME_LENGTH]
#define TIME_ACCURACY_CONFIG
char marg_ext[NAME_LENGTH]
static char line[LONG_LINE_LENGTH]
int generate_jspice_config()
static char * xy_config_item_list[]
int pulse_extraction_method
char step_ext[NAME_LENGTH]
char check_ext[NAME_LENGTH]
char period_ext[NAME_LENGTH]
char separation_ext[NAME_LENGTH]
char circuit_ext[NAME_LENGTH]
#define MAX_DEL_VAR_CONFIG
char tmp_dir[NAME_LENGTH]
#define PH_THR_MIN_CONFIG
#define RISEEDGE_CHECK_INT_CONFIG
#define MIN_PH_DIFF_CONFIG
char bound_ext[NAME_LENGTH]
static char * config_item_list[]
#define IN_CLK_CYCLE_XY_CONFIG
char region_ext[NAME_LENGTH]
#define SEPARATION_CONFIG
char opt_ext[NAME_LENGTH]
static void unrecognized_value(char *line, char *filename)
#define CLK_CHECKTIME_CONFIG
#define FALLEDGE_CHECK_INT_CONFIG
static char filename[LINE_LENGTH]
char passfail_ext[NAME_LENGTH]
static int check_option(char *option)
#define MIN_TIME_STEP_CONFIG
char nom_ext[NAME_LENGTH]