malt-wr
maininit.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 
5 #include "constype.h"
6 #include "filenames.h"
7 
8 #include "init.h"
9 #include "collect.h"
10 #include "timelogic.h"
11 #include "passfail.h"
12 #include "vpassfail.h"
13 #include "result.h"
14 
15 #define DEBUG_PULSES 0
16 
17 
19 {
20  char command_line[LINE_LENGTH];
21  int is_ws = (strstr(param.spice_name, "wrspice") != NULL);
22 
23  printf("RUNNING %s FOR THE NOMINAL VALUES OF OPERATING PARAMETERS.\n\n\n",
24  is_ws ? "WRSPICE" : "JSPICE");
25 
26  strcpy(command_line, param.spice_name);
27  strcat(command_line, " nominal");
28 
29  return system(command_line);
30 }
31 
32 
33 int compute_nominal(int runall)
34 {
35  SIGNALS *sp;
36  char inputfile[NAME_LENGTH], logicfile[NAME_LENGTH], sigfile[NAME_LENGTH];
37  char checkfile[NAME_LENGTH];
38  char passfailfile[NAME_LENGTH];
39  FILE *fp;
40 
41 
42  printf("\nRUNNING PULSE EXTRACTION FOR THE NOMINAL VALUES OF OPERATING PARAMETERS.\n\n\n");
43 
44  strcpy(inputfile, param.tmp_dir);
45  strcat(inputfile, param.circuit_name);
46  strcat(inputfile, param.nom_ext);
47 
48  strcpy(logicfile, param.output_dir);
49  strcat(logicfile, param.circuit_name);
50  strcat(logicfile, param.nom_ext);
51  strcat(logicfile, param.logic_ext);
52 
53  strcpy(passfailfile, param.input_dir);
54  strcat(passfailfile, param.circuit_name);
55  strcat(passfailfile, param.passfail_ext);
56 
57  strcpy(checkfile, param.input_dir);
58  strcat(checkfile, param.circuit_name);
59  strcat(checkfile, param.check_ext);
60 
61 
62 #if DEBUG_PULSES
63  strcpy(sigfile, param.output_dir);
64  strcat(sigfile, param.circuit_name);
65  strcat(sigfile, PULSE_EXT);
66 #endif
67 
69  {
70  case COLLECT_BY_PHASE:
71  sp=collect_pulses_by_phase(inputfile);
72  break;
73 
74  case COLLECT_BY_VOLTAGE:
75  sp=collect_pulses_by_voltage(inputfile);
76  break;
77 
78  case COLLECT_EDGES:
79  sp=collect_edges(inputfile);
80  break;
81  }
82 
83 
84  if(sp!=NULL)
85  {
86 #if DEBUG_PULSES
87  print_signals(sp, sigfile);
88 #endif
89 
91  print_edges(sp, logicfile);
92  generate_latch_passfail_file(sp, passfailfile, runall);
93  free_data(sp);
94  return 1;
95  }
96 
97  if(sp->clk_num>0)
99 
100  generate_passfail_file(sp, passfailfile, runall);
101 
103  generate_check_file(sp, checkfile);
104 
105  if((fp=fopen(logicfile, "w"))==NULL)
106  {
107  printf("Cannot open file %s!\n\n", logicfile);
108  return 0;
109  }
110 
111  if(sp->clk_num>0)
112  print_with_clk(sp, fp);
113  else
114  print_async_signals(sp, fp);
115 
116  free_data(sp);
117  }
118  else
119  return 0;
120 
121  return 1;
122 }
123 
124 
125 static int read_command_line(int argc, char *argv[])
126 {
127  if((argc<2) || (argc>3))
128  return 0;
129 
130  if(argc==2)
131  if(argv[1][0]!='-')
132  return 1;
133  else
134  return 0;
135 
136  if(argc==3)
137  if((strcmp(argv[1], "-c")==0) && (argv[2][0]!='-')) {
139  return 1;
140  }
141  else if((strcmp(argv[1], "-B")==0) && (argv[2][0]!='-')) {
143  return 1;
144  }
145  else if((strcmp(argv[1], "-l")==0) && (argv[2][0]!='-')) {
147  return 1;
148  }
149  else if((strcmp(argv[1], "-lB")==0) && (argv[2][0]!='-')) {
152  return 1;
153  }
154  else
155  return 0;
156 }
157 
158 #ifdef MAIN
159 #define init_main main
160 #endif
161 
162 int init_main(int argc, char *argv[])
163 {
164  FILE *fp;
165 
166  init_parameters();
167 
168 
169  if(!read_command_line(argc, argv))
170  {
171  printf("SYNOPSIS:\n");
172  printf("\tinit [-B|-c|-l|-lB] <circuit_name>\n");
173  exit(255);
174  }
175 
177  exit(255);
178 
179  strcpy(param.circuit_name, argv[argc-1]);
180 
181 /* prepare_included_files(); */
182 
184 
188  }
189 
190  run_nominal();
192  compute_nominal(1);
193  else
194  compute_nominal(0);
195 }
196 
197 #ifndef MAIN
198 
199 int main(int argc, char **argv)
200 {
201  extern init_main(int, char**);
202  extern opt_main(int, char**);
203  extern marg_main(int, char**);
204  const char *usage =
205  "Usage:\n malt -i (init args)\n"
206  " malt -o (opt args)\n"
207  " malt -m (marg args)\n";
208 
209  if (argc < 3) {
210  puts(usage);
211  return (255);
212  }
213  char *av1 = argv[1];
214  argv[1] = argv[0];
215  argc--;
216  argv++;
217  if (av1[0] == '-' && av1[1] == 'i')
218  return (init_main(argc, argv));
219  if (av1[0] == '-' && av1[1] == 'o')
220  return (opt_main(argc, argv));
221  if (av1[0] == '-' && av1[1] == 'm')
222  return (marg_main(argc, argv));
223  puts(usage);
224  return (255);
225 }
226 
227 #endif
228 
char logic_ext[NAME_LENGTH]
Definition: constype.h:168
int compute_nominal(int runall)
Definition: maininit.c:33
#define COLLECT_EDGES
Definition: constype.h:46
char circuit_name[NAME_LENGTH]
Definition: constype.h:184
SIGNALS * collect_pulses_by_phase(char *filename)
Definition: collect.c:750
#define BATCH_SET
Definition: constype.h:35
int change_into_logic(SIGNALS *sp)
Definition: timelogic.c:8
SIGNALS * collect_edges(char *filename)
Definition: collect.c:767
char output_dir[NAME_LENGTH]
Definition: constype.h:149
int input_options
Definition: constype.h:199
int print_with_clk(SIGNALS *sp, FILE *fp)
Definition: result.c:155
int read_config(char *filename)
Definition: init.c:189
#define PULSE_EXT
Definition: filenames.h:16
int print_edges(SIGNALS *sp, char *filename)
Definition: result.c:42
#define COLLECT_BY_PHASE
Definition: constype.h:44
#define LATCH_SET
Definition: constype.h:38
int generate_latch_passfail_file(SIGNALS *sp, char *filename, int runall)
Definition: vpassfail.c:279
int run_nominal()
Definition: maininit.c:18
PARAMETERS param
Definition: init.c:10
#define COLLECT_BY_VOLTAGE
Definition: constype.h:45
SIGNALS * collect_pulses_by_voltage(char *filename)
Definition: collect.c:732
#define NAME_LENGTH
Definition: constype.h:3
int opt_main(int argc, char *argv[])
Definition: optimize.c:75
#define INIT_PROGRAM
Definition: constype.h:244
int clk_num
Definition: constype.h:369
char spice_name[NAME_LENGTH]
Definition: constype.h:152
int program
Definition: constype.h:193
int print_async_signals(SIGNALS *sp, FILE *fp)
Definition: result.c:254
char input_dir[NAME_LENGTH]
Definition: constype.h:143
int generate_check_file(SIGNALS *sp, char *filename)
Definition: passfail.c:777
int generate_jspice_config()
Definition: init.c:967
int print_signals(SIGNALS *sp, char *filename)
Definition: result.c:9
#define LINE_LENGTH
Definition: constype.h:4
int pulse_extraction_method
Definition: constype.h:78
char check_ext[NAME_LENGTH]
Definition: constype.h:161
int main(int argc, char **argv)
Definition: maininit.c:199
char tmp_dir[NAME_LENGTH]
Definition: constype.h:146
#define INIT_CONFIG_FILE
Definition: filenames.h:4
int marg_main(int argc, argv)
Definition: margins.c:214
void free_data(SIGNALS *sp)
Definition: collect.c:787
int generate_passfail_file(SIGNALS *sp, char *filename, int runall)
Definition: passfail.c:646
#define C_SET
Definition: constype.h:25
int init_main(int argc, char *argv[])
Definition: maininit.c:162
char passfail_ext[NAME_LENGTH]
Definition: constype.h:158
void init_parameters()
Definition: init.c:39
static int read_command_line(int argc, char *argv[])
Definition: maininit.c:125
char nom_ext[NAME_LENGTH]
Definition: constype.h:174