15 fp=fopen(filename,
"w");
27 fprintf(fp,
"%.2f ps\t%.2f uV\t%.2f\n", pp->
t*1.0e12,
48 fp=fopen(filename,
"w");
58 fprintf(fp,
"edge\ttime\n");
61 fprintf(fp,
"%s\t%.2f ps\n",
84 fprintf(fp,
"DELAYS:\n\n");
87 fprintf(fp,
"delay (input clk_cycle)\n\n");
140 result->
v.
avr/=pulse_nr;
148 fprintf(fp,
"PEAK VOLTAGES:\n\n");
149 fprintf(fp,
"min - %.2f uV\n", peak_volt->
v.
min*1.0e6);
150 fprintf(fp,
"max - %.2f uV\n", peak_volt->
v.
max*1.0e6);
151 fprintf(fp,
"avr - %.2f uV\n", peak_volt->
v.
avr*1.0e6);
157 int clk_cycle, sig_nr;
164 fprintf(fp,
"simulation step = %.2f ps\nsimulation length = %.2f ps\n\n",
168 fprintf(fp,
"SIGNALS TRACED:\n");
171 for(sig_nr=0; sig_nr<sp->
signal_num; sig_nr++)
172 fprintf(fp,
"%s\t<=>\t%s,\t%s\n",
179 for(sig_nr=0; sig_nr<sp->
signal_num; sig_nr++)
180 fprintf(fp,
"%s\t<=>\t%s\n",
187 fprintf(fp,
"CYCLE\tCLK\tPERIOD\t");
189 for(sig_nr=1; sig_nr<sp->
signal_num; sig_nr++)
196 fprintf(fp,
"\t%.2f\t\t", sp->
clk_times[clk_cycle]*1.0e12);
198 fprintf(fp,
"\t\t\t");
200 for(sig_nr=1; sig_nr<sp->
signal_num; sig_nr++)
202 fprintf(fp,
"\t +%.2f", sp->
sig_log[sig_nr][clk_cycle].
delta[0]*1.0e12);
210 for(sig_nr=1; sig_nr<sp->
signal_num; sig_nr++)
217 fprintf(fp,
"\t\t\t");
218 for(sig_nr=1; sig_nr<sp->
signal_num; sig_nr++)
220 fprintf(fp,
"\t +%.2f",
230 fprintf(fp,
"%d\t\t%.2f\t", clk_cycle,
233 fprintf(fp,
"%d\t\t\t", clk_cycle);
234 for(sig_nr=1; sig_nr<sp->
signal_num; sig_nr++)
235 fprintf(fp,
"\t%d", sp->
sig_log[sig_nr][clk_cycle].
val);
258 int current_index, min_step, min_sig_nr;
265 fprintf(fp,
"simulation step = %.2f ps\nsimulation length = %.2f ps\n\n",
270 fprintf(fp,
"SIGNALS TRACED:\n");
273 for(sig_nr=0; sig_nr<sp->
signal_num; sig_nr++)
274 fprintf(fp,
"%s\t<=>\t%s,\t%s\n",
281 for(sig_nr=0; sig_nr<sp->
signal_num; sig_nr++)
282 fprintf(fp,
"%s\t<=>\t%s\n",
289 fprintf(fp,
"TIME\t\t");
296 for(sig_nr=0; sig_nr<sp->
signal_num; sig_nr++)
297 last_pulse[sig_nr] = sp->
sig_bgn[sig_nr];
303 for(sig_nr=0; sig_nr<sp->signal_num; sig_nr++)
305 if(last_pulse[sig_nr]==NULL)
308 if(last_pulse[sig_nr]->index-current_index < min_step)
310 min_step = last_pulse[sig_nr]->
index-current_index;
318 current_index = last_pulse[min_sig_nr]->
index;
322 fprintf(fp,
"%.2f\t\t", last_pulse[min_sig_nr]->t*1.0e12);
325 if(last_pulse[sig_nr]==NULL)
328 if(last_pulse[sig_nr]->index==current_index)
331 last_pulse[sig_nr]=last_pulse[sig_nr]->
next;
339 fprintf(fp,
"%.2f\t\t%s", last_pulse[min_sig_nr]->t*1.0e12,
343 if(last_pulse[sig_nr]!=NULL)
345 if(last_pulse[sig_nr]->prev!=NULL)
346 fprintf(fp,
"\t %.2f",
347 (last_pulse[min_sig_nr]->t - last_pulse[sig_nr]->prev->
t)*1.0e12);
354 fprintf(fp,
"\t %.2f",
355 (last_pulse[min_sig_nr]->t - sp->
sig_end[sig_nr]->
t)*1.0e12);
360 last_pulse[min_sig_nr] = last_pulse[min_sig_nr]->
next;
385 fp=fopen(filename,
"a");
392 fprintf(fp,
"HOLD TIME");
396 printf(
"SETUP TIME");
397 fprintf(fp,
"SETUP TIME");
400 printf(
"= %.2f ps\n", holdset->
delta*1.0e12);
401 fprintf(fp,
"= %.2f ps\n", holdset->
delta*1.0e12);
405 printf(
"clk cycle: %d\n", holdset->
cycle);
406 fprintf(fp,
"clk cycle: %d\n", holdset->
cycle);
410 fprintf(fp,
"for:\n");
420 printf(
"proper output:\n\t%s = %d\n",
423 fprintf(fp,
"proper output:\n\t%s = %d\n",
427 printf(
"false output:\n\t%s = %d\n\n",
430 fprintf(fp,
"false output:\n\t%s = %d\n\n",
438 printf(
"HOLD PROPAGATION DELAY = ");
439 fprintf(fp,
"HOLD PROPAGATION DELAY = ");
443 printf(
"SETUP PROPAGATION DELAY = ");
444 fprintf(fp,
"SETUP PROPAGATION DELAY = ");
448 fprintf(fp,
"%.1f ps\n",
459 int in_clk_cycle,
int out_clk_cycle)
461 fprintf(fp,
"%.4f\t",
463 fprintf(fp,
"%.4f\n",
474 fp=fopen(filename,
"w");
484 while(pp_phase!=NULL)
486 fprintf(fp,
"%.5f\n", pp_phase->
t*1.0e12);
488 pp_phase=pp_phase->
next;
507 strcpy(outfile, filename);
508 strcat(outfile,
".");
511 fp=fopen(outfile,
"w");
514 printf(
"Cannot open file: %s\n", outfile);
519 while(pp_phase!=NULL)
521 if(pp_phase->
next!=NULL)
522 fprintf(fp,
"%.5f\n", (pp_phase->
next->
t-pp_phase->
t)*1.0e12);
523 pp_phase=pp_phase->
next;
538 fp=fopen(filename,
"w");
549 fprintf(fp,
"PHASE BELOW\t");
550 fprintf(fp,
"PHASE ABOVE\t");
551 fprintf(fp,
"PHASE THRESH\t");
552 fprintf(fp,
"TIME BELOW\t");
553 fprintf(fp,
"TIME ABOVE\t");
554 fprintf(fp,
"TIME THRESH\n");
556 while(pp_phase!=NULL)
558 fprintf(fp,
"%.2f\t\t", pp_phase->
p_below);
559 fprintf(fp,
"%.2f\t\t", pp_phase->
p_above);
561 fprintf(fp,
"%.2f\t\t", pp_phase->
t_below*1.0e12);
562 fprintf(fp,
"%.2f\t\t", pp_phase->
t_above*1.0e12);
563 fprintf(fp,
"%.2f\n", pp_phase->
t*1.0e12);
565 pp_phase=pp_phase->
next;
578 #define VOLTAGE_TYPE 2 586 if(new_val< mma->t.min)
587 mma->
t.
min = new_val;
588 if(new_val > mma->
t.
max)
589 mma->
t.
max = new_val;
590 mma->
t.
avr += new_val;
594 if(new_val< mma->p.min)
595 mma->
p.
min = new_val;
596 if(new_val > mma->
p.
max)
597 mma->
p.
max = new_val;
598 mma->
p.
avr += new_val;
602 if(new_val< mma->v.min)
603 mma->
v.
min = new_val;
604 if(new_val > mma->
v.
max)
605 mma->
v.
max = new_val;
606 mma->
v.
avr += new_val;
615 PULSE *pp_phase, *pp_peak;
622 MIN_MAX_AVR t2peak, phaseper, peakper, v2peak, p2phase, p2thresh;
628 printf(
"Numbers of signals defined in voltage and phase files do not match!\n");
635 printf(
"Time resolutions defined in voltage and phase files do not match!\n");
639 fp=fopen(filename,
"w");
651 p2phase.
p.
min = p2thresh.
p.
min = 2*M_PI;
652 p2phase.
p.
max = p2thresh.
p.
max = -2*M_PI;
653 p2phase.
p.
avr = p2thresh.
p.
avr = 0.0;
663 fprintf(fp,
"PHASE TIME\t\t\t\t\t\t\t");
664 fprintf(fp,
"PHASE VOLTAGE\t\t");
665 fprintf(fp,
"PEAK PHASE\t\t");
666 fprintf(fp,
"PHASE\n");
668 fprintf(fp,
"\tTO PEAK\t\t");
669 fprintf(fp,
"PHASE PERIOD\t");
670 fprintf(fp,
"PEAK PERIOD\t\t\t");
671 fprintf(fp,
"TO PEAK\t\t\t");
672 fprintf(fp,
"TO PHASE\t\t");
673 fprintf(fp,
"TO THRESHOLD\n\n");
676 while(pp_phase!=NULL)
680 printf(
"PULSE COLLECTION METHODS COMPARISON:\n");
681 printf(
"Warning !\n");
682 printf(
"Numbers of pulses in signal %s do not match.\n\n",
688 fprintf(fp,
"%.2f ps \t\t\t\t\t\t\t", pp_phase->
t*1.0e12);
689 fprintf(fp,
"%.1f uV \t\t", pp_phase->
val*1.0e+6);
690 fprintf(fp,
"%.2f\t\t\t", pp_peak->
phase);
691 fprintf(fp,
"%.2f", pp_phase->
phase);
694 tdelta = pp_phase->
t-pp_peak->
t;
695 fprintf(fp,
"\t%.2f ps \t", tdelta*1.0e12);
698 if(pp_phase->
next!=NULL)
700 tdelta = pp_phase->
next->
t-pp_phase->
t;
701 fprintf(fp,
"%.2f ps \t", tdelta*1.0e12);
705 fprintf(fp,
"\t\t\t\t");
707 if(pp_peak->
next!=NULL)
709 tdelta = pp_peak->
next->
t-pp_peak->
t;
710 fprintf(fp,
"%.2f ps \t\t\t", tdelta*1.0e12);
716 vdelta = pp_phase->
val-pp_peak->
val;
717 fprintf(fp,
"%.1f uV \t\t", vdelta*1.0e+6);
721 fprintf(fp,
"%.2f\t\t\t", pdelta);
725 fprintf(fp,
"%.2f", pdelta);
730 pp_phase=pp_phase->
next;
731 pp_peak=pp_peak->
next;
740 t2peak.
t.
avr/=pulse_nr;
741 p2phase.
p.
avr/=pulse_nr;
742 p2thresh.
p.
avr/=pulse_nr;
743 v2peak.
v.
avr/=pulse_nr;
747 phaseper.
t.
avr/=(pulse_nr-1);
748 peakper.
t.
avr/=(pulse_nr-1);
751 fprintf(fp,
"AVR\t");
753 fprintf(fp,
"%.2f ps \t", t2peak.
t.
avr*1.0e+12);
757 fprintf(fp,
"%.2f ps \t%.2f ps \t\t\t",
758 phaseper.
t.
avr*1.0e+12,
759 peakper.
t.
avr*1.0e+12);
762 fprintf(fp,
"%.1f uV \t\t", v2peak.
v.
avr*1.0e6);
763 fprintf(fp,
"%.2f\t\t\t", p2phase.
p.
avr);
764 fprintf(fp,
"%.2f", p2thresh.
p.
avr);
768 fprintf(fp,
"MIN\t");
770 fprintf(fp,
"%.2f ps \t", t2peak.
t.
min*1.0e+12);
774 fprintf(fp,
"%.2f ps \t%.2f ps \t\t\t",
775 phaseper.
t.
min*1.0e+12,
776 peakper.
t.
min*1.0e+12);
779 fprintf(fp,
"%.1f uV \t\t", v2peak.
v.
min*1.0e6);
780 fprintf(fp,
"%.2f\t\t\t", p2phase.
p.
min);
781 fprintf(fp,
"%.2f", p2thresh.
p.
min);
785 fprintf(fp,
"MAX\t");
787 fprintf(fp,
"%.2f ps \t", t2peak.
t.
max*1.0e+12);
791 fprintf(fp,
"%.2f ps \t%.2f ps \t\t\t",
792 phaseper.
t.
max*1.0e+12,
793 peakper.
t.
max*1.0e+12);
796 fprintf(fp,
"%.1f uV \t\t", v2peak.
v.
max*1.0e6);
797 fprintf(fp,
"%.2f\t\t\t", p2phase.
p.
max);
798 fprintf(fp,
"%.2f", p2thresh.
p.
max);
818 strcpy(outfile, filename);
int print_phase_peak_signals(SIGNALS *sp_phase, SIGNALS *sp_peak, char *filename)
char circuit_name[NAME_LENGTH]
char(* jspice_phase_names)[NAME_LENGTH]
int print_with_clk(SIGNALS *sp, FILE *fp)
int print_edges(SIGNALS *sp, char *filename)
char(* signal_names)[NAME_LENGTH]
static void compute_min_max_voltage(SIGNALS *sp, MIN_MAX_AVR *result)
static int print_interpolated_time(SIGNALS *sp_phase, char *filename)
#define COLLECT_BY_VOLTAGE
int interpolate_signal(SIGNALS *sp_phase, char *filename)
static int print_interpolated_time_phase(SIGNALS *sp_phase, char *filename)
static void set_min_max_avr(MIN_MAX_AVR *mma, double new_val, int type)
int print_async_signals(SIGNALS *sp, FILE *fp)
void print_delays(FILE *fp, SIGNALS *sp, INPUTS *ip)
int print_signals(SIGNALS *sp, char *filename)
INPUTS * compute_delays(SIGNALS *sp)
struct DELAYS_DESC * next
int print_holdsetup(char *filename, SIGNALS *sp_good, SIGNALS *sp_bad, HOLDSETUP *holdset, int hold1setup0)
int pulse_extraction_method
static int print_interpolated_signals(SIGNALS *sp_phase, char *filename)
char period_ext[NAME_LENGTH]
char(* jspice_voltage_names)[NAME_LENGTH]
int interpolate_phase_thresh_time(SIGNALS *sp_phase)
void print_voltages(FILE *fp, MIN_MAX_AVR *peak_volt)
static char filename[LINE_LENGTH]
int print_xy_propagation(FILE *fp, SIGNALS *sp, int input_nr, int in_clk_cycle, int out_clk_cycle)