malt-wr
passfail.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int generate_check_file (SIGNALS *sp, char *filename)
 
int generate_passfail_file (SIGNALS *sp, char *filename, int runall)
 
int generate_latch_passfail_file (SIGNALS *sp, char *filename, int runall)
 

Function Documentation

int generate_check_file ( SIGNALS sp,
char *  filename 
)

Definition at line 777 of file passfail.c.

778 {
779  FILE *fp;
780  int i;
781  ASYNC_CHECK *tmp_check;
782  int sig_num, out_num, check_nr;
783 
784 
785  fp=fopen(filename, "w");
786  if(fp==NULL)
787  return 0;
788 
790  if(sp->clk_num>0)
792 
793 
794  fprintf(fp, ".check\n\n");
795 
796  for(i=1; i<=2; i++)
797  {
798  fprintf(fp, "checkVAL%d = \n", i);
799  fprintf(fp, "checkSTP%d = \n", i);
800  fprintf(fp, "checkDEL%d = \n\n", i);
801  }
802 
803  fprintf(fp, "compose checkPNTS values ");
804 
805  tmp_check = sp->async_check_list;
806 
807  while(tmp_check!=NULL)
808  {
809  fprintf(fp, "%6.1fps ",
810  (sp->min_time_delta*1.0e12)*tmp_check->index+
811  sp->start_time*1.0e12);
812  while(tmp_check->next!=NULL)
813  {
814  if(tmp_check->next->index == tmp_check->index)
815  tmp_check=tmp_check->next;
816  else
817  break;
818  }
819  tmp_check=tmp_check->next;
820  }
821  fprintf(fp, "%6.1fps\n\n",
822  (sp->min_time_delta*1.0e12)*(sp->indices_nr-1)+
823  sp->start_time*1.0e12);
824 
825 
826  fprintf(fp, "checkFAIL = 0\n");
827 
828  fprintf(fp, "failthres = %4.2f\n", param.min_fail_thresh);
829 
830  fprintf(fp, "source %s%s%s\n\n", param.input_dir,
832  param.param_ext);
833 
834  fprintf(fp, ".control\n\n");
835 
836  tmp_check = sp->async_check_list;
837  check_nr = 0;
838 
839  while(tmp_check!=NULL)
840  {
841  fprintf(fp, "if TIME > checkPNTS[%d]\n", check_nr);
842  fprintf(fp, "\tif TIME < checkPNTS[%d]\n", check_nr+1);
843 
844  sig_num = tmp_check->sig_nr;
845  if(tmp_check->type==REGULAR_CHECKPOINT)
846  {
847  fprintf(fp, "\t\tif abs(%s - phase0[%d] - %d*pi) > failthres\n",
848  sp->jspice_phase_names[sig_num],
849  sig_num,
850  tmp_check->pi_phase);
851  fprintf(fp, "\t\t\tcheckFAIL = 1\n");
852  fprintf(fp, "\t\tend\n");
853  }
854  if(tmp_check->type==INIT_CHECKPOINT)
855  {
856  fprintf(fp, "\t\tphase0[%d] = %s\n",
857  tmp_check->sig_nr,
858  sp->jspice_phase_names[tmp_check->sig_nr]);
859  }
860 
861  while(tmp_check->next!=NULL)
862  {
863  if(tmp_check->next->index == tmp_check->index)
864  {
865  tmp_check=tmp_check->next;
866  sig_num = tmp_check->sig_nr;
867  if(tmp_check->type==REGULAR_CHECKPOINT)
868  {
869  fprintf(fp, "\t\tif abs(%s - phase0[%d] - %d*pi) > failthres\n",
870  sp->jspice_phase_names[sig_num],
871  sig_num,
872  tmp_check->pi_phase);
873  fprintf(fp, "\t\t\tcheckFAIL = 1\n");
874  fprintf(fp, "\t\tend\n");
875  }
876 
877  if(tmp_check->type==INIT_CHECKPOINT)
878  {
879  fprintf(fp, "\t\tphase0[%d] = %s\n",
880  tmp_check->sig_nr,
881  sp->jspice_phase_names[tmp_check->sig_nr]);
882  }
883  }
884  else
885  break;
886  }
887 
888  fprintf(fp, "\tend\n");
889  fprintf(fp, "end\n\n");
890 
891  tmp_check=tmp_check->next;
892  check_nr++;
893  }
894 
895 
896  fprintf(fp, ".endc\n");
897  fprintf(fp, "%s\n\n", param.circuit_name);
898  fprintf(fp, ".include %s%s%s%s\n\n", param.input_dir,
901  param.check_ext);
902  fprintf(fp, ".end\n");
903 
904  return 1;
905 }
struct async_checkpoint * next
Definition: constype.h:353
#define REGULAR_CHECKPOINT
Definition: constype.h:359
char circuit_name[NAME_LENGTH]
Definition: constype.h:184
TIME min_time_delta
Definition: constype.h:393
char(* jspice_phase_names)[NAME_LENGTH]
Definition: constype.h:387
#define INIT_CHECKPOINT
Definition: constype.h:360
char param_ext[NAME_LENGTH]
Definition: constype.h:156
static void add_sync_checkpoints(SIGNALS *sp)
Definition: passfail.c:749
PARAMETERS param
Definition: init.c:10
PHASE min_fail_thresh
Definition: constype.h:119
int clk_num
Definition: constype.h:369
int indices_nr
Definition: constype.h:399
char input_dir[NAME_LENGTH]
Definition: constype.h:143
TIME start_time
Definition: constype.h:396
char check_ext[NAME_LENGTH]
Definition: constype.h:161
char circuit_ext[NAME_LENGTH]
Definition: constype.h:155
ASYNC_CHECK * async_check_list
Definition: constype.h:458
static void add_initial_checkpoints(SIGNALS *sp)
Definition: passfail.c:704
static char filename[LINE_LENGTH]
Definition: optimize.c:35
int generate_latch_passfail_file ( SIGNALS sp,
char *  filename,
int  runall 
)

Definition at line 279 of file vpassfail.c.

285 {
286  FILE *fp;
287 
288  fp=fopen(filename, "w");
289  if(fp==NULL)
290  return 0;
291 
292  fprintf(fp, "%s\n", filename);
293  fprintf(fp, ".control\n\n");
294 
295  fprintf(fp, "vthreshold0 = %f\n", param.max_zero_volt);
296  fprintf(fp, "vthreshold1 = %f\n\n", param.min_one_volt);
297 
298  if(runall)
299  fprintf(fp, "run\n\n");
300 
301  if(sp->clk_num>0)
302  generate_sync_latch_passfail(fp, sp, runall);
303  else
304  generate_async_latch_passfail(fp, sp, runall);
305 
306  fprintf(fp, "if chFAIL = 1\n");
307  fprintf(fp, "\tfree all yes\n");
308  fprintf(fp, "\tchFAIL = 1\n");
309  fprintf(fp, "end\n\n");
310 
311  fprintf(fp, "if chFAIL = 0\n");
312  fprintf(fp, "\tfree all yes\n");
313  fprintf(fp, "\tchFAIL = 0\n");
314  fprintf(fp, "end\n\n");
315 
316  return 1;
317 }
double max_zero_volt
Definition: constype.h:211
static int generate_async_latch_passfail(FILE *fp, SIGNALS *sp, int runall)
Definition: vpassfail.c:208
PARAMETERS param
Definition: init.c:10
double min_one_volt
Definition: constype.h:214
int clk_num
Definition: constype.h:369
static int generate_sync_latch_passfail(FILE *fp, SIGNALS *sp, int runall)
Definition: vpassfail.c:48
static char filename[LINE_LENGTH]
Definition: optimize.c:35
int generate_passfail_file ( SIGNALS sp,
char *  filename,
int  runall 
)

Definition at line 646 of file passfail.c.

647 {
648  FILE *fp;
649  int sig_num;
650  int last_index;
651  int i, first;
652  ASYNC_CHECK *tmp_check;
653 
654  fp=fopen(filename, "w");
655  if(fp==NULL)
656  return 0;
657 
658  fprintf(fp, "%s\n", filename);
659  fprintf(fp, ".control\n\n");
660 
661  sp->initial_phase_index=(int*)calloc(sp->signal_num, sizeof(int));
662 
663  if(sp->clk_num>0)
664  last_index=generate_sync_passfail(sp, fp, runall);
665  else
666  last_index=generate_async_passfail(sp, fp, runall);
667 
668  fprintf(fp, "\nif chFAIL = 0\n");
669  fprintf(fp, "if check_inputs = 1\n");
670 
671  if(param.program != HS_PROGRAM) {
672  if(sp->clk_num>0) {
673  add_input_checkpoint(fp, sp, 0, &last_index, runall);
674  add_clk_checkpoints(fp, sp);
675  }
676  for(sig_num=1; sig_num<sp->clk_num+sp->ins_num; sig_num++)
677  add_input_checkpoint(fp, sp, sig_num, &last_index, runall);
678  }
679  else {
680  if(sp->clk_num>0)
681  add_clk_checkpoints(fp, sp);
682  }
683 
684  fprintf(fp, "\tif chFAIL = 1\n");
685  fprintf(fp, "\t\techo FAILED BECAUSE OF EXTRA INPUT PULSES\n");
686  fprintf(fp, "\tend\n");
687  fprintf(fp, "end\n");
688  fprintf(fp, "end\n\n");
689 
690  fprintf(fp, "if chFAIL = 1\n");
691  fprintf(fp, "\tfree all yes\n");
692  fprintf(fp, "\tchFAIL = 1\n");
693  fprintf(fp, "end\n\n");
694 
695  fprintf(fp, "if chFAIL = 0\n");
696  fprintf(fp, "\tfree all yes\n");
697  fprintf(fp, "\tchFAIL = 0\n");
698  fprintf(fp, "end\n\n");
699 
700  return 1;
701 }
static int add_clk_checkpoints(FILE *fp, SIGNALS *sp)
Definition: passfail.c:378
static int add_input_checkpoint(FILE *fp, SIGNALS *sp, int sig_nr, int *last_index, int runall)
Definition: passfail.c:497
static int generate_sync_passfail(SIGNALS *sp, FILE *fp, int runall)
Definition: passfail.c:310
int * initial_phase_index
Definition: constype.h:449
int signal_num
Definition: constype.h:366
static int generate_async_passfail(SIGNALS *sp, FILE *fp, int runall)
Definition: passfail.c:396
PARAMETERS param
Definition: init.c:10
int clk_num
Definition: constype.h:369
int program
Definition: constype.h:193
#define HS_PROGRAM
Definition: constype.h:243
int ins_num
Definition: constype.h:372
static char filename[LINE_LENGTH]
Definition: optimize.c:35