Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / stm / stm_modscm_good.c
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI AVERTEC */
4 /* */
5 /* Produit : STM Version 1.00 */
6 /* Fichier : stm_modscm_good.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_good_create (float *tab0, float *tabi, float *tabn, float *tabd)
51 {
52 int index;
53 int i;
54 timing_scm *scm = (timing_scm*)mbkalloc (sizeof (struct timing_scm));
55 scm->TYPE = STM_MODSCM_GOOD;
56 scm->PARAMS.GOOD = (goodparams*)mbkalloc (sizeof (struct goodparams));
57
58 if (tab0) {
59 scm->PARAMS.GOOD->L0 = (float*)mbkalloc (STM_NB_LINK_0_PARAMS * sizeof (float));
60 scm->PARAMS.GOOD->L0[STM_CI_0] = tab0[STM_CI_0];
61 scm->PARAMS.GOOD->L0[STM_CF_0] = tab0[STM_CF_0];
62 scm->PARAMS.GOOD->L0[STM_K3_0] = tab0[STM_K3_0];
63 scm->PARAMS.GOOD->L0[STM_K4_0] = tab0[STM_K4_0];
64 scm->PARAMS.GOOD->L0[STM_K5_0] = tab0[STM_K5_0];
65 } else
66 scm->PARAMS.GOOD->L0 = NULL;
67
68 /* link i = 1 to n - 1 */
69 if (tabi) {
70 scm->PARAMS.GOOD->LI = (float*)mbkalloc ((1 + tabi[STM_NB_I_LINKS] * STM_NB_LINK_I_PARAMS) * sizeof (float));
71 scm->PARAMS.GOOD->LI[STM_NB_I_LINKS] = tabi[STM_NB_I_LINKS];
72 for (i = 0; i < tabi[STM_NB_I_LINKS]; i++) {
73 index = 1 + i * STM_NB_LINK_I_PARAMS;
74 scm->PARAMS.GOOD->LI[index + STM_CI_I] = tabi[index + STM_CI_I];
75 scm->PARAMS.GOOD->LI[index + STM_CF_I] = tabi[index + STM_CF_I];
76 scm->PARAMS.GOOD->LI[index + STM_ACTI_I] = tabi[index + STM_ACTI_I];
77 scm->PARAMS.GOOD->LI[index + STM_BCTI_I] = tabi[index + STM_BCTI_I];
78 scm->PARAMS.GOOD->LI[index + STM_K3_I] = tabi[index + STM_K3_I];
79 scm->PARAMS.GOOD->LI[index + STM_K4_I] = tabi[index + STM_K4_I];
80 scm->PARAMS.GOOD->LI[index + STM_K5_I] = tabi[index + STM_K5_I];
81 }
82 } else
83 scm->PARAMS.GOOD->LI = NULL;
84
85 /* link n (dual) */
86 if (tabn) {
87 scm->PARAMS.GOOD->LN = (float*)mbkalloc (STM_NB_LINK_N_PARAMS * sizeof (float));
88 scm->PARAMS.GOOD->LN[STM_CI_N] = tabn[STM_CI_N];
89 scm->PARAMS.GOOD->LN[STM_CF_N] = tabn[STM_CF_N];
90 scm->PARAMS.GOOD->LN[STM_ACTI_N] = tabn[STM_ACTI_N];
91 scm->PARAMS.GOOD->LN[STM_BCTI_N] = tabn[STM_BCTI_N];
92 } else
93 scm->PARAMS.GOOD->LN = NULL;
94
95 /* dual part */
96 scm->PARAMS.GOOD->DP = (float*)mbkalloc (STM_NB_DUAL_PARAMS * sizeof (float));
97 for( i=0 ; i<STM_NB_DUAL_PARAMS ; i++ )
98 scm->PARAMS.GOOD->DP[i] = tabd[i];
99
100 return scm;
101 }
102
103 /****************************************************************************/
104
105 void stm_modscm_good_destroy (goodparams *params)
106 {
107 if (!params)
108 return;
109
110 if (params->L0)
111 mbkfree (params->L0);
112
113 if (params->LI)
114 mbkfree (params->LI);
115
116 if (params->LN)
117 mbkfree (params->LN);
118
119 if (params->DP)
120 mbkfree (params->DP);
121
122 mbkfree (params);
123
124 }