Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / stm / stm_modscm_false.c
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI AVERTEC */
4 /* */
5 /* Produit : STM Version 1.00 */
6 /* Fichier : stm_modscm_false.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 index | param. | signif.
26 --------------------------+---------+------------
27 0 | n | # links
28 --------------------------+---------+------------
29 1 | Ci | link 0
30 1 + 1 | Cf |
31 1 + 2 | k3 |
32 1 + 3 | k4 |
33 1 + 4 | k5 |
34 --------------------------+---------+------------
35 6 + 7 * (i - 1) | Ci | link i
36 6 + 7 * (i - 1) + 1 | Cf | 1 to n - 1
37 6 + 7 * (i - 1) + 2 | acti |
38 6 + 7 * (i - 1) + 3 | bcti |
39 6 + 7 * (i - 1) + 4 | k3 |
40 6 + 7 * (i - 1) + 5 | k4 |
41 6 + 7 * (i - 1) + 6 | k5 |
42 --------------------------+---------+------------
43 6 + 7 * (n - 2) | Ci | link n
44 6 + 7 * (n - 2) + 1 | Cf |
45 6 + 7 * (n - 2) + 2 | acti |
46 6 + 7 * (n - 2) + 3 | bcti |
47 --------------------------+---------+------------
48 */
49
50 timing_scm *stm_modscm_false_create (float *tab0, float *tabi, float *tabn, float *tabf)
51 {
52 int index;
53 int i;
54 timing_scm *scm = (timing_scm*)mbkalloc (sizeof (struct timing_scm));
55 scm->TYPE = STM_MODSCM_FALSE;
56 scm->PARAMS.FALS = (falseparams*)mbkalloc (sizeof (struct falseparams));
57
58 /* link 0 */
59 if (tab0) {
60 scm->PARAMS.FALS->L0 = (float*)mbkalloc (STM_NB_LINK_0_PARAMS * sizeof (float));
61 scm->PARAMS.FALS->L0[STM_CI_0] = tab0[STM_CI_0];
62 scm->PARAMS.FALS->L0[STM_CF_0] = tab0[STM_CF_0];
63 scm->PARAMS.FALS->L0[STM_K3_0] = tab0[STM_K3_0];
64 scm->PARAMS.FALS->L0[STM_K4_0] = tab0[STM_K4_0];
65 scm->PARAMS.FALS->L0[STM_K5_0] = tab0[STM_K5_0];
66 } else
67 scm->PARAMS.FALS->L0 = NULL;
68
69 /* link i = 1 to n - 1 */
70 if (tabi) {
71 scm->PARAMS.FALS->LI = (float*)mbkalloc ((1 + tabi[STM_NB_I_LINKS] * STM_NB_LINK_I_PARAMS) * sizeof (float));
72 scm->PARAMS.FALS->LI[STM_NB_I_LINKS] = tabi[STM_NB_I_LINKS];
73 for (i = 0; i < tabi[STM_NB_I_LINKS]; i++) {
74 index = 1 + i * STM_NB_LINK_I_PARAMS;
75 scm->PARAMS.FALS->LI[index + STM_CI_I] = tabi[index + STM_CI_I];
76 scm->PARAMS.FALS->LI[index + STM_CF_I] = tabi[index + STM_CF_I];
77 scm->PARAMS.FALS->LI[index + STM_ACTI_I] = tabi[index + STM_ACTI_I];
78 scm->PARAMS.FALS->LI[index + STM_BCTI_I] = tabi[index + STM_BCTI_I];
79 scm->PARAMS.FALS->LI[index + STM_K3_I] = tabi[index + STM_K3_I];
80 scm->PARAMS.FALS->LI[index + STM_K4_I] = tabi[index + STM_K4_I];
81 scm->PARAMS.FALS->LI[index + STM_K5_I] = tabi[index + STM_K5_I];
82 }
83 } else
84 scm->PARAMS.FALS->LI = NULL;
85
86 /* link n (active) */
87 if (tabn) {
88 scm->PARAMS.FALS->LN = (float*)mbkalloc (STM_NB_LINK_N_PARAMS * sizeof (float));
89 scm->PARAMS.FALS->LN[STM_CI_N] = tabn[STM_CI_N];
90 scm->PARAMS.FALS->LN[STM_CF_N] = tabn[STM_CF_N];
91 scm->PARAMS.FALS->LN[STM_ACTI_N] = tabn[STM_ACTI_N];
92 scm->PARAMS.FALS->LN[STM_BCTI_N] = tabn[STM_BCTI_N];
93 } else
94 scm->PARAMS.FALS->LN = NULL;
95
96
97 /* false part */
98 scm->PARAMS.FALS->FP = (float*)mbkalloc (STM_NB_FALSE_PARAMS * sizeof (float));
99 scm->PARAMS.FALS->FP[STM_PCONF0] = tabf[STM_PCONF0];
100 scm->PARAMS.FALS->FP[STM_PCONF1] = tabf[STM_PCONF1];
101 scm->PARAMS.FALS->FP[STM_RTOT_F] = tabf[STM_RTOT_F];
102 scm->PARAMS.FALS->FP[STM_K_F] = tabf[STM_K_F];
103 scm->PARAMS.FALS->FP[STM_VDDMAX_F] = tabf[STM_VDDMAX_F];
104 scm->PARAMS.FALS->FP[STM_DRC_F] = tabf[STM_DRC_F];
105 scm->PARAMS.FALS->FP[STM_VF_INPUT_F] = tabf[STM_VF_INPUT_F];
106
107 return scm;
108 }
109
110 /****************************************************************************/
111
112 void stm_modscm_false_destroy (falseparams *params)
113 {
114 if (!params)
115 return;
116
117 if (params->L0)
118 mbkfree (params->L0);
119
120 if (params->LI)
121 mbkfree (params->LI);
122
123 if (params->LN)
124 mbkfree (params->LN);
125
126 if (params->FP)
127 mbkfree (params->FP);
128
129 mbkfree (params);
130 }