1 /****************************************************************************/
3 /* Chaine de CAO & VLSI AVERTEC */
5 /* Produit : STM Version 1.00 */
6 /* Fichier : stm_modtbl_print.c */
8 /* (c) copyright 2000 AVERTEC */
9 /* Tous droits reserves */
11 /* Auteur(s) : Gilles Augustins */
13 /****************************************************************************/
15 /****************************************************************************/
17 /****************************************************************************/
21 /****************************************************************************/
23 /****************************************************************************/
25 void stm_modtbl_datprint (FILE *f
, timing_table
*table
)
30 if (table
->XTYPE
== STM_LOAD
&& table
->YTYPE
== STM_INPUT_SLEW
) {
31 for (i
= 0; i
< table
->NY
; i
++) {
32 for (j
= 0; j
< table
->NX
; j
++)
33 fprintf (f
, "%f %f %f\n", table
->YRANGE
[i
], table
->XRANGE
[j
], table
->SET2D
[i
][j
]);
37 if (table
->XTYPE
== STM_INPUT_SLEW
&& table
->YTYPE
== STM_LOAD
) {
38 for (i
= 0; i
< table
->NX
; i
++) {
39 for (j
= 0; j
< table
->NY
; j
++)
40 fprintf (f
, "%f %f %f\n", table
->XRANGE
[i
], table
->YRANGE
[j
], table
->SET2D
[i
][j
]);
44 if (table
->XTYPE
== STM_CLOCK_SLEW
&& table
->YTYPE
== STM_INPUT_SLEW
) {
45 for (i
= 0; i
< table
->NY
; i
++) {
46 for (j
= 0; j
< table
->NX
; j
++)
47 fprintf (f
, "%f %f %f\n", table
->YRANGE
[i
], table
->XRANGE
[j
], table
->SET2D
[i
][j
]);
51 if (table
->XTYPE
== STM_INPUT_SLEW
&& table
->YTYPE
== STM_CLOCK_SLEW
) {
52 for (i
= 0; i
< table
->NX
; i
++) {
53 for (j
= 0; j
< table
->NY
; j
++)
54 fprintf (f
, "%f %f %f\n", table
->XRANGE
[i
], table
->YRANGE
[j
], table
->SET2D
[i
][j
]);
61 for (i
= 0; i
< table
->NX
; i
++)
62 fprintf (f
, "%f %f\n", table
->XRANGE
[i
], table
->SET1D
[i
]);
64 if (!stm_modtbl_isnull (table
->CST
)) {
65 fprintf (f
, "%f %f\n", 0.0, table
->CST
);
66 fprintf (f
, "%f %f\n", 1.0, table
->CST
);
70 /****************************************************************************/
72 void stm_modtbl_plotprint (FILE *f
, char *datfile
, timing_table
*table
)
74 char *xlabel
, *ylabel
, *zlabel
;
77 zlabel
= "delay (ps)";
78 if (table
->XTYPE
== STM_LOAD
&& table
->YTYPE
== STM_INPUT_SLEW
) {
80 ylabel
= "slope (ps)";
82 if (table
->XTYPE
== STM_INPUT_SLEW
&& table
->YTYPE
== STM_LOAD
) {
83 xlabel
= "slope (ps)";
86 if (table
->XTYPE
== STM_CLOCK_SLEW
&& table
->YTYPE
== STM_INPUT_SLEW
) {
87 xlabel
= "clock slope (ps)";
88 ylabel
= "input slope (ps)";
90 if (table
->XTYPE
== STM_INPUT_SLEW
&& table
->YTYPE
== STM_CLOCK_SLEW
) {
91 xlabel
= "input slope (ps)";
92 ylabel
= "clock slope (ps)";
97 ylabel
= "delay (ps)";
98 if (table
->XTYPE
== STM_INPUT_SLEW
)
99 xlabel
= "input slope (ps)";
100 if (table
->XTYPE
== STM_CLOCK_SLEW
)
101 xlabel
= "clock slope (ps)";
102 if (table
->XTYPE
== STM_LOAD
)
103 xlabel
= "load (fF)";
106 if (!stm_modtbl_isnull (table
->CST
)) {
107 ylabel
= "delay (ps)";
111 fprintf (f
, "set xlabel '%s'\n", xlabel
);
112 fprintf (f
, "set ylabel '%s'\n", ylabel
);
115 fprintf (f
, "set zlabel '%s'\n", zlabel
);
116 fprintf (f
, "set hidden3d\n");
117 fprintf (f
, "splot '%s' with lines 2\n", datfile
);
120 if (table
->SET1D
|| !stm_modtbl_isnull (table
->CST
))
121 fprintf (f
, "plot '%s' with lines 2\n", datfile
);
124 /****************************************************************************/
126 void stm_modtbl_templateprint (FILE *f
, timing_ttable
*templ
)
130 fprintf (f
, "template (%s\n", templ
->NAME
);
131 if (!templ
->NX
&& !templ
->NY
)
132 fprintf (f
, "\tconst (\n");
134 fprintf (f
, "\tspline (\n");
140 switch (templ
->XTYPE
) {
141 case STM_INPUT_SLEW
:
142 fprintf (f
, "input_slope_axis (");
144 case STM_CLOCK_SLEW
:
145 fprintf (f
, "clock_slope_axis (");
148 fprintf (f
, "load_axis (");
151 for (i
= 0; i
< templ
->NX
; i
++)
153 fprintf (f
, "%.2f", templ
->XRANGE
[i
]);
155 fprintf (f
, " %.2f", templ
->XRANGE
[i
]);
163 switch (templ
->YTYPE
) {
164 case STM_INPUT_SLEW
:
165 fprintf (f
, "input_slope_axis (");
167 case STM_CLOCK_SLEW
:
168 fprintf (f
, "clock_slope_axis (");
171 fprintf (f
, "load_axis (");
174 for (i
= 0; i
< templ
->NY
; i
++)
176 fprintf (f
, "%.2f", templ
->YRANGE
[i
]);
178 fprintf (f
, " %.2f", templ
->YRANGE
[i
]);
182 fprintf (f
, "\t)\n");
183 fprintf (f
, ")\n\n");
186 /****************************************************************************/
188 void stm_modtbl_print (FILE *f
, timing_table
*table
)
192 if (!table
->NX
&& !table
->NY
)
193 fprintf (f
, "\t\tconst (\n");
195 fprintf (f
, "\t\tspline (\n");
200 fprintf (f
, "\t\t\t");
201 switch (table
->XTYPE
) {
202 case STM_INPUT_SLEW
:
203 fprintf (f
, "input_slope_axis (");
205 case STM_CLOCK_SLEW
:
206 fprintf (f
, "clock_slope_axis (");
209 fprintf (f
, "load_axis (");
212 for (i
= 0; i
< table
->NX
; i
++)
214 fprintf (f
, "%.2f", table
->XRANGE
[i
]);
216 fprintf (f
, " %.2f", table
->XRANGE
[i
]);
223 fprintf (f
, "\t\t\t");
224 switch (table
->YTYPE
) {
225 case STM_INPUT_SLEW
:
226 fprintf (f
, "input_slope_axis (");
228 case STM_CLOCK_SLEW
:
229 fprintf (f
, "clock_slope_axis (");
232 fprintf (f
, "load_axis (");
235 for (i
= 0; i
< table
->NY
; i
++)
237 fprintf (f
, "%.2f", table
->YRANGE
[i
]);
239 fprintf (f
, " %.2f", table
->YRANGE
[i
]);
245 if (!stm_modtbl_isnull (table
->CST
))
246 fprintf(f
, "\t\t\tdata (%.2f)\n", table
->CST
);
251 fprintf(f
, "\t\t\tdata (\n");
252 fprintf(f
, "\t\t\t\t(");
253 for (i
= 0; i
< table
->NX
- 1; i
++)
254 fprintf (f
, "%.2f ", table
->SET1D
[i
]);
255 fprintf (f
, "%.2f)\n", table
->SET1D
[table
->NX
- 1]);
256 fprintf (f
, "\t\t\t)\n");
262 fprintf (f
, "\t\t\tdata (\n");
263 for (i
= 0; i
< table
->NX
- 1; i
++) {
264 fprintf (f
, "\t\t\t\t(");
265 for (j
= 0; j
< table
->NY
- 1; j
++) {
266 fprintf (f
, "%.2f ", table
->SET2D
[i
][j
]);
268 fprintf (f
, "%.2f)\n", table
->SET2D
[i
][table
->NY
- 1]);
270 fprintf (f
, "\t\t\t\t(");
271 for (j
= 0; j
< table
->NY
- 1; j
++) {
272 fprintf (f
, "%.2f ", table
->SET2D
[table
->NX
- 1][j
]);
274 fprintf (f
, "%.2f)\n", table
->SET2D
[table
->NX
- 1][table
->NY
- 1]);
275 fprintf (f
, "\t\t\t)\n");
278 fprintf (f
, "\t\t)\n");