Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / stm / stm_modtbl_print.c
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI AVERTEC */
4 /* */
5 /* Produit : STM Version 1.00 */
6 /* Fichier : stm_modtbl_print.c */
7 /* */
8 /* (c) copyright 2000 AVERTEC */
9 /* Tous droits reserves */
10 /* */
11 /* Auteur(s) : Gilles Augustins */
12 /* */
13 /****************************************************************************/
14
15 /****************************************************************************/
16 /* includes */
17 /****************************************************************************/
18
19 #include "stm.h"
20
21 /****************************************************************************/
22 /* functions */
23 /****************************************************************************/
24
25 void stm_modtbl_datprint (FILE *f, timing_table *table)
26 {
27 long i, j;
28
29 if (table->SET2D) {
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]);
34 fprintf (f, "\n");
35 }
36 }
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]);
41 fprintf (f, "\n");
42 }
43 }
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]);
48 fprintf (f, "\n");
49 }
50 }
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]);
55 fprintf (f, "\n");
56 }
57 }
58 }
59
60 if (table->SET1D)
61 for (i = 0; i < table->NX; i++)
62 fprintf (f, "%f %f\n", table->XRANGE[i], table->SET1D[i]);
63
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);
67 }
68 }
69
70 /****************************************************************************/
71
72 void stm_modtbl_plotprint (FILE *f, char *datfile, timing_table *table)
73 {
74 char *xlabel, *ylabel, *zlabel;
75
76 if (table->SET2D) {
77 zlabel = "delay (ps)";
78 if (table->XTYPE == STM_LOAD && table->YTYPE == STM_INPUT_SLEW) {
79 xlabel = "load (fF)";
80 ylabel = "slope (ps)";
81 }
82 if (table->XTYPE == STM_INPUT_SLEW && table->YTYPE == STM_LOAD) {
83 xlabel = "slope (ps)";
84 ylabel = "load (fF)";
85 }
86 if (table->XTYPE == STM_CLOCK_SLEW && table->YTYPE == STM_INPUT_SLEW) {
87 xlabel = "clock slope (ps)";
88 ylabel = "input slope (ps)";
89 }
90 if (table->XTYPE == STM_INPUT_SLEW && table->YTYPE == STM_CLOCK_SLEW) {
91 xlabel = "input slope (ps)";
92 ylabel = "clock slope (ps)";
93 }
94 }
95
96 if (table->SET1D) {
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)";
104 }
105
106 if (!stm_modtbl_isnull (table->CST)) {
107 ylabel = "delay (ps)";
108 xlabel = "";
109 }
110
111 fprintf (f, "set xlabel '%s'\n", xlabel);
112 fprintf (f, "set ylabel '%s'\n", ylabel);
113
114 if (table->SET2D) {
115 fprintf (f, "set zlabel '%s'\n", zlabel);
116 fprintf (f, "set hidden3d\n");
117 fprintf (f, "splot '%s' with lines 2\n", datfile);
118 }
119
120 if (table->SET1D || !stm_modtbl_isnull (table->CST))
121 fprintf (f, "plot '%s' with lines 2\n", datfile);
122 }
123
124 /****************************************************************************/
125
126 void stm_modtbl_templateprint (FILE *f, timing_ttable *templ)
127 {
128 int i;
129
130 fprintf (f, "template (%s\n", templ->NAME);
131 if (!templ->NX && !templ->NY)
132 fprintf (f, "\tconst (\n");
133 else
134 fprintf (f, "\tspline (\n");
135
136 /* axe X */
137
138 if (templ->NX > 0) {
139 fprintf (f, "\t\t");
140 switch (templ->XTYPE) {
141 case STM_INPUT_SLEW :
142 fprintf (f, "input_slope_axis (");
143 break;
144 case STM_CLOCK_SLEW :
145 fprintf (f, "clock_slope_axis (");
146 break;
147 case STM_LOAD :
148 fprintf (f, "load_axis (");
149 break;
150 }
151 for (i = 0; i < templ->NX; i++)
152 if (!i)
153 fprintf (f, "%.2f", templ->XRANGE[i]);
154 else
155 fprintf (f, " %.2f", templ->XRANGE[i]);
156 fprintf (f, ")\n");
157 }
158
159 /* axe Y */
160
161 if (templ->NY > 0) {
162 fprintf (f, "\t\t");
163 switch (templ->YTYPE) {
164 case STM_INPUT_SLEW :
165 fprintf (f, "input_slope_axis (");
166 break;
167 case STM_CLOCK_SLEW :
168 fprintf (f, "clock_slope_axis (");
169 break;
170 case STM_LOAD :
171 fprintf (f, "load_axis (");
172 break;
173 }
174 for (i = 0; i < templ->NY; i++)
175 if (!i)
176 fprintf (f, "%.2f", templ->YRANGE[i]);
177 else
178 fprintf (f, " %.2f", templ->YRANGE[i]);
179 fprintf (f, ")\n");
180 }
181
182 fprintf (f, "\t)\n");
183 fprintf (f, ")\n\n");
184
185 }
186 /****************************************************************************/
187
188 void stm_modtbl_print (FILE *f, timing_table *table)
189 {
190 int i, j;
191
192 if (!table->NX && !table->NY)
193 fprintf (f, "\t\tconst (\n");
194 else
195 fprintf (f, "\t\tspline (\n");
196
197 /* axe X */
198
199 if (table->NX > 0) {
200 fprintf (f, "\t\t\t");
201 switch (table->XTYPE) {
202 case STM_INPUT_SLEW :
203 fprintf (f, "input_slope_axis (");
204 break;
205 case STM_CLOCK_SLEW :
206 fprintf (f, "clock_slope_axis (");
207 break;
208 case STM_LOAD :
209 fprintf (f, "load_axis (");
210 break;
211 }
212 for (i = 0; i < table->NX; i++)
213 if (!i)
214 fprintf (f, "%.2f", table->XRANGE[i]);
215 else
216 fprintf (f, " %.2f", table->XRANGE[i]);
217 fprintf (f, ")\n");
218 }
219
220 /* axe Y */
221
222 if (table->NY > 0) {
223 fprintf (f, "\t\t\t");
224 switch (table->YTYPE) {
225 case STM_INPUT_SLEW :
226 fprintf (f, "input_slope_axis (");
227 break;
228 case STM_CLOCK_SLEW :
229 fprintf (f, "clock_slope_axis (");
230 break;
231 case STM_LOAD :
232 fprintf (f, "load_axis (");
233 break;
234 }
235 for (i = 0; i < table->NY; i++)
236 if (!i)
237 fprintf (f, "%.2f", table->YRANGE[i]);
238 else
239 fprintf (f, " %.2f", table->YRANGE[i]);
240 fprintf (f, ")\n");
241 }
242
243 /* const */
244
245 if (!stm_modtbl_isnull (table->CST))
246 fprintf(f, "\t\t\tdata (%.2f)\n", table->CST);
247
248 /* table 1D */
249
250 if (table->SET1D) {
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");
257 }
258
259 /* table 2D */
260
261 if (table->SET2D) {
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]);
267 }
268 fprintf (f, "%.2f)\n", table->SET2D[i][table->NY - 1]);
269 }
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]);
273 }
274 fprintf (f, "%.2f)\n", table->SET2D[table->NX - 1][table->NY - 1]);
275 fprintf (f, "\t\t\t)\n");
276 }
277
278 fprintf (f, "\t\t)\n");
279 }