1 /**CFile****************************************************************
2
3 FileName [mioApi.c]
4
5 PackageName [MVSIS 1.3: Multi-valued logic synthesis system.]
6
7 Synopsis [File reading/writing for technology mapping.]
8
9 Author [MVSIS Group]
10
11 Affiliation [UC Berkeley]
12
13 Date [Ver. 1.0. Started - September 8, 2003.]
14
15 Revision [$Id: mioApi.c,v 1.4 2004/06/28 14:20:25 alanmi Exp $]
16
17 ***********************************************************************/
18
19 #include "mioInt.h"
20
21 ABC_NAMESPACE_IMPL_START
22
23
24 ////////////////////////////////////////////////////////////////////////
25 /// DECLARATIONS ///
26 ////////////////////////////////////////////////////////////////////////
27
28 ////////////////////////////////////////////////////////////////////////
29 /// FUNCTION DEFINITIONS ///
30 ////////////////////////////////////////////////////////////////////////
31
32 /**Function*************************************************************
33
34 Synopsis []
35
36 Description []
37
38 SideEffects []
39
40 SeeAlso []
41
42 ***********************************************************************/
Mio_LibraryReadName(Mio_Library_t * pLib)43 char * Mio_LibraryReadName ( Mio_Library_t * pLib ) { return pLib->pName; }
Mio_LibraryReadGateNum(Mio_Library_t * pLib)44 int Mio_LibraryReadGateNum ( Mio_Library_t * pLib ) { return pLib->nGates; }
Mio_LibraryReadGates(Mio_Library_t * pLib)45 Mio_Gate_t * Mio_LibraryReadGates ( Mio_Library_t * pLib ) { return pLib->pGates; }
Mio_LibraryReadGateArray(Mio_Library_t * pLib)46 Mio_Gate_t ** Mio_LibraryReadGateArray ( Mio_Library_t * pLib ) { return pLib->ppGatesName;}
Mio_LibraryReadGateById(Mio_Library_t * pLib,int Id)47 Mio_Gate_t * Mio_LibraryReadGateById ( Mio_Library_t * pLib, int Id ) { assert( pLib->ppGates0[Id]->Cell == Id ); return pLib->ppGates0[Id];}
Mio_LibraryReadBuf(Mio_Library_t * pLib)48 Mio_Gate_t * Mio_LibraryReadBuf ( Mio_Library_t * pLib ) { return pLib->pGateBuf; }
Mio_LibraryReadInv(Mio_Library_t * pLib)49 Mio_Gate_t * Mio_LibraryReadInv ( Mio_Library_t * pLib ) { return pLib->pGateInv; }
Mio_LibraryReadConst0(Mio_Library_t * pLib)50 Mio_Gate_t * Mio_LibraryReadConst0 ( Mio_Library_t * pLib ) { return pLib->pGate0; }
Mio_LibraryReadConst1(Mio_Library_t * pLib)51 Mio_Gate_t * Mio_LibraryReadConst1 ( Mio_Library_t * pLib ) { return pLib->pGate1; }
Mio_LibraryReadNand2(Mio_Library_t * pLib)52 Mio_Gate_t * Mio_LibraryReadNand2 ( Mio_Library_t * pLib ) { return pLib->pGateNand2; }
Mio_LibraryReadAnd2(Mio_Library_t * pLib)53 Mio_Gate_t * Mio_LibraryReadAnd2 ( Mio_Library_t * pLib ) { return pLib->pGateAnd2; }
Mio_LibraryReadNor2(Mio_Library_t * pLib)54 Mio_Gate_t * Mio_LibraryReadNor2 ( Mio_Library_t * pLib ) { return pLib->pGateNor2; }
Mio_LibraryReadOr2(Mio_Library_t * pLib)55 Mio_Gate_t * Mio_LibraryReadOr2 ( Mio_Library_t * pLib ) { return pLib->pGateOr2; }
Mio_LibraryReadDelayInvRise(Mio_Library_t * pLib)56 float Mio_LibraryReadDelayInvRise ( Mio_Library_t * pLib ) { return (float)(pLib->pGateInv? pLib->pGateInv->pPins->dDelayBlockRise : 0.0); }
Mio_LibraryReadDelayInvFall(Mio_Library_t * pLib)57 float Mio_LibraryReadDelayInvFall ( Mio_Library_t * pLib ) { return (float)(pLib->pGateInv? pLib->pGateInv->pPins->dDelayBlockFall : 0.0); }
Mio_LibraryReadDelayInvMax(Mio_Library_t * pLib)58 float Mio_LibraryReadDelayInvMax ( Mio_Library_t * pLib ) { return (float)(pLib->pGateInv? pLib->pGateInv->pPins->dDelayBlockMax : 0.0); }
Mio_LibraryReadDelayNand2Rise(Mio_Library_t * pLib)59 float Mio_LibraryReadDelayNand2Rise( Mio_Library_t * pLib ) { return (float)(pLib->pGateNand2? pLib->pGateNand2->pPins->dDelayBlockRise : 0.0); }
Mio_LibraryReadDelayNand2Fall(Mio_Library_t * pLib)60 float Mio_LibraryReadDelayNand2Fall( Mio_Library_t * pLib ) { return (float)(pLib->pGateNand2? pLib->pGateNand2->pPins->dDelayBlockFall : 0.0); }
Mio_LibraryReadDelayNand2Max(Mio_Library_t * pLib)61 float Mio_LibraryReadDelayNand2Max ( Mio_Library_t * pLib ) { return (float)(pLib->pGateNand2? pLib->pGateNand2->pPins->dDelayBlockMax : 0.0); }
Mio_LibraryReadDelayAnd2Max(Mio_Library_t * pLib)62 float Mio_LibraryReadDelayAnd2Max ( Mio_Library_t * pLib ) { return (float)(pLib->pGateAnd2? pLib->pGateAnd2->pPins->dDelayBlockMax : 0.0); }
Mio_LibraryReadDelayAigNode(Mio_Library_t * pLib)63 float Mio_LibraryReadDelayAigNode ( Mio_Library_t * pLib ) { return pLib->pGateAnd2 ? Mio_LibraryReadDelayAnd2Max(pLib) : Mio_LibraryReadDelayNand2Max(pLib); } // approximate delay of the AIG node
Mio_LibraryReadAreaInv(Mio_Library_t * pLib)64 float Mio_LibraryReadAreaInv ( Mio_Library_t * pLib ) { return (float)(pLib->pGateInv? pLib->pGateInv->dArea : 0.0); }
Mio_LibraryReadAreaBuf(Mio_Library_t * pLib)65 float Mio_LibraryReadAreaBuf ( Mio_Library_t * pLib ) { return (float)(pLib->pGateBuf? pLib->pGateBuf->dArea : 0.0); }
Mio_LibraryReadAreaNand2(Mio_Library_t * pLib)66 float Mio_LibraryReadAreaNand2 ( Mio_Library_t * pLib ) { return (float)(pLib->pGateNand2? pLib->pGateNand2->dArea : 0.0); }
Mio_LibrarySetName(Mio_Library_t * pLib,char * pName)67 void Mio_LibrarySetName ( Mio_Library_t * pLib, char * pName ) { ABC_FREE(pLib->pName); pLib->pName = pName; }
68
69 /**Function*************************************************************
70
71 Synopsis [Returns the longest gate name.]
72
73 Description []
74
75 SideEffects []
76
77 SeeAlso []
78
79 ***********************************************************************/
Mio_LibraryReadGateNameMax(Mio_Library_t * pLib)80 int Mio_LibraryReadGateNameMax( Mio_Library_t * pLib )
81 {
82 Mio_Gate_t * pGate;
83 int LenMax = 0, LenCur;
84 Mio_LibraryForEachGate( pLib, pGate )
85 {
86 LenCur = strlen( Mio_GateReadName(pGate) );
87 if ( LenMax < LenCur )
88 LenMax = LenCur;
89 }
90 return LenMax;
91 }
92
93 /**Function*************************************************************
94
95 Synopsis [Read Mvc of the gate by name.]
96
97 Description []
98
99 SideEffects []
100
101 SeeAlso []
102
103 ***********************************************************************/
Mio_LibraryReadGateByName(Mio_Library_t * pLib,char * pName,char * pOutName)104 Mio_Gate_t * Mio_LibraryReadGateByName( Mio_Library_t * pLib, char * pName, char * pOutName )
105 {
106 Mio_Gate_t * pGate;
107 if ( ! st__lookup( pLib->tName2Gate, pName, (char **)&pGate ) )
108 return NULL;
109 if ( pOutName == NULL )
110 return pGate;
111 if ( !strcmp(pGate->pOutName, pOutName) )
112 return pGate;
113 if ( pGate->pTwin && !strcmp(pGate->pTwin->pOutName, pOutName) )
114 return pGate->pTwin;
115 return NULL;
116 }
117
118 /**Function*************************************************************
119
120 Synopsis [Returns the first gate in the library with the given TT.]
121
122 Description []
123
124 SideEffects []
125
126 SeeAlso []
127
128 ***********************************************************************/
Mio_LibraryReadGateByTruth(Mio_Library_t * pLib,word t)129 Mio_Gate_t * Mio_LibraryReadGateByTruth( Mio_Library_t * pLib, word t )
130 {
131 Mio_Gate_t * pGate;
132 Mio_LibraryForEachGate( pLib, pGate )
133 if ( pGate->nInputs <= 6 && pGate->uTruth == t )
134 return pGate;
135 return NULL;
136 }
137
138 /**Function*************************************************************
139
140 Synopsis [Read Mvc of the gate by name.]
141
142 Description []
143
144 SideEffects []
145
146 SeeAlso []
147
148 ***********************************************************************/
Mio_LibraryReadSopByName(Mio_Library_t * pLib,char * pName)149 char * Mio_LibraryReadSopByName( Mio_Library_t * pLib, char * pName )
150 {
151 Mio_Gate_t * pGate;
152 if ( st__lookup( pLib->tName2Gate, pName, (char **)&pGate ) )
153 return pGate->pSop;
154 return NULL;
155 }
156
157 /**Function*************************************************************
158
159 Synopsis []
160
161 Description []
162
163 SideEffects []
164
165 SeeAlso []
166
167 ***********************************************************************/
Mio_GateReadName(Mio_Gate_t * pGate)168 char * Mio_GateReadName ( Mio_Gate_t * pGate ) { return pGate->pName; }
Mio_GateReadOutName(Mio_Gate_t * pGate)169 char * Mio_GateReadOutName ( Mio_Gate_t * pGate ) { return pGate->pOutName; }
Mio_GateReadArea(Mio_Gate_t * pGate)170 double Mio_GateReadArea ( Mio_Gate_t * pGate ) { return pGate->dArea; }
Mio_GateReadForm(Mio_Gate_t * pGate)171 char * Mio_GateReadForm ( Mio_Gate_t * pGate ) { return pGate->pForm; }
Mio_GateReadPins(Mio_Gate_t * pGate)172 Mio_Pin_t * Mio_GateReadPins ( Mio_Gate_t * pGate ) { return pGate->pPins; }
Mio_GateReadLib(Mio_Gate_t * pGate)173 Mio_Library_t * Mio_GateReadLib ( Mio_Gate_t * pGate ) { return pGate->pLib; }
Mio_GateReadNext(Mio_Gate_t * pGate)174 Mio_Gate_t * Mio_GateReadNext ( Mio_Gate_t * pGate ) { return pGate->pNext; }
Mio_GateReadTwin(Mio_Gate_t * pGate)175 Mio_Gate_t * Mio_GateReadTwin ( Mio_Gate_t * pGate ) { return pGate->pTwin; }
Mio_GateReadPinNum(Mio_Gate_t * pGate)176 int Mio_GateReadPinNum ( Mio_Gate_t * pGate ) { return pGate->nInputs; }
Mio_GateReadDelayMax(Mio_Gate_t * pGate)177 double Mio_GateReadDelayMax ( Mio_Gate_t * pGate ) { return pGate->dDelayMax; }
Mio_GateReadSop(Mio_Gate_t * pGate)178 char * Mio_GateReadSop ( Mio_Gate_t * pGate ) { return pGate->pSop; }
Mio_GateReadExpr(Mio_Gate_t * pGate)179 Vec_Int_t * Mio_GateReadExpr ( Mio_Gate_t * pGate ) { return pGate->vExpr; }
Mio_GateReadTruth(Mio_Gate_t * pGate)180 word Mio_GateReadTruth ( Mio_Gate_t * pGate ) { return pGate->nInputs <= 6 ? pGate->uTruth : 0; }
Mio_GateReadTruthP(Mio_Gate_t * pGate)181 word * Mio_GateReadTruthP ( Mio_Gate_t * pGate ) { return pGate->nInputs <= 6 ? &pGate->uTruth: pGate->pTruth; }
Mio_GateReadValue(Mio_Gate_t * pGate)182 int Mio_GateReadValue ( Mio_Gate_t * pGate ) { return pGate->Value; }
Mio_GateReadCell(Mio_Gate_t * pGate)183 int Mio_GateReadCell ( Mio_Gate_t * pGate ) { return pGate->Cell; }
Mio_GateReadProfile(Mio_Gate_t * pGate)184 int Mio_GateReadProfile ( Mio_Gate_t * pGate ) { return pGate->Profile; }
Mio_GateReadProfile2(Mio_Gate_t * pGate)185 int Mio_GateReadProfile2 ( Mio_Gate_t * pGate ) { return pGate->Profile2; }
Mio_GateSetValue(Mio_Gate_t * pGate,int Value)186 void Mio_GateSetValue ( Mio_Gate_t * pGate, int Value ) { pGate->Value = Value; }
Mio_GateSetCell(Mio_Gate_t * pGate,int Cell)187 void Mio_GateSetCell ( Mio_Gate_t * pGate, int Cell ) { pGate->Cell = Cell; }
Mio_GateSetProfile(Mio_Gate_t * pGate,int Prof)188 void Mio_GateSetProfile ( Mio_Gate_t * pGate, int Prof ) { pGate->Profile = Prof; }
Mio_GateSetProfile2(Mio_Gate_t * pGate,int Prof)189 void Mio_GateSetProfile2 ( Mio_Gate_t * pGate, int Prof ) { pGate->Profile2 = Prof; }
Mio_GateIncProfile2(Mio_Gate_t * pGate)190 void Mio_GateIncProfile2 ( Mio_Gate_t * pGate ) { pGate->Profile2++; }
Mio_GateDecProfile2(Mio_Gate_t * pGate)191 void Mio_GateDecProfile2 ( Mio_Gate_t * pGate ) { pGate->Profile2--; }
Mio_GateAddToProfile(Mio_Gate_t * pGate,int Prof)192 void Mio_GateAddToProfile ( Mio_Gate_t * pGate, int Prof ) { pGate->Profile += Prof; }
Mio_GateAddToProfile2(Mio_Gate_t * pGate,int Prof)193 void Mio_GateAddToProfile2( Mio_Gate_t * pGate, int Prof ) { pGate->Profile2 += Prof; }
Mio_GateIsInv(Mio_Gate_t * pGate)194 int Mio_GateIsInv ( Mio_Gate_t * pGate ) { return pGate->uTruth == ABC_CONST(0x5555555555555555); }
195
196 /**Function*************************************************************
197
198 Synopsis []
199
200 Description []
201
202 SideEffects []
203
204 SeeAlso []
205
206 ***********************************************************************/
Mio_PinReadName(Mio_Pin_t * pPin)207 char * Mio_PinReadName ( Mio_Pin_t * pPin ) { return pPin->pName; }
Mio_PinReadPhase(Mio_Pin_t * pPin)208 Mio_PinPhase_t Mio_PinReadPhase ( Mio_Pin_t * pPin ) { return pPin->Phase; }
Mio_PinReadInputLoad(Mio_Pin_t * pPin)209 double Mio_PinReadInputLoad ( Mio_Pin_t * pPin ) { return pPin->dLoadInput; }
Mio_PinReadMaxLoad(Mio_Pin_t * pPin)210 double Mio_PinReadMaxLoad ( Mio_Pin_t * pPin ) { return pPin->dLoadMax; }
Mio_PinReadDelayBlockRise(Mio_Pin_t * pPin)211 double Mio_PinReadDelayBlockRise ( Mio_Pin_t * pPin ) { return pPin->dDelayBlockRise; }
Mio_PinReadDelayFanoutRise(Mio_Pin_t * pPin)212 double Mio_PinReadDelayFanoutRise( Mio_Pin_t * pPin ) { return pPin->dDelayFanoutRise;}
Mio_PinReadDelayBlockFall(Mio_Pin_t * pPin)213 double Mio_PinReadDelayBlockFall ( Mio_Pin_t * pPin ) { return pPin->dDelayBlockFall; }
Mio_PinReadDelayFanoutFall(Mio_Pin_t * pPin)214 double Mio_PinReadDelayFanoutFall( Mio_Pin_t * pPin ) { return pPin->dDelayFanoutFall;}
Mio_PinReadDelayBlockMax(Mio_Pin_t * pPin)215 double Mio_PinReadDelayBlockMax ( Mio_Pin_t * pPin ) { return pPin->dDelayBlockMax; }
Mio_PinReadNext(Mio_Pin_t * pPin)216 Mio_Pin_t * Mio_PinReadNext ( Mio_Pin_t * pPin ) { return pPin->pNext; }
217
218 /**Function*************************************************************
219
220 Synopsis []
221
222 Description []
223
224 SideEffects []
225
226 SeeAlso []
227
228 ***********************************************************************/
Mio_GateReadPinName(Mio_Gate_t * pGate,int iPin)229 char * Mio_GateReadPinName( Mio_Gate_t * pGate, int iPin )
230 {
231 Mio_Pin_t * pPin;
232 int i = 0;
233 Mio_GateForEachPin( pGate, pPin )
234 if ( i++ == iPin )
235 return Mio_PinReadName(pPin);
236 return NULL;
237 }
Mio_GateReadPinDelay(Mio_Gate_t * pGate,int iPin)238 float Mio_GateReadPinDelay( Mio_Gate_t * pGate, int iPin )
239 {
240 Mio_Pin_t * pPin;
241 int i = 0;
242 Mio_GateForEachPin( pGate, pPin )
243 if ( i++ == iPin )
244 return 0.5 * pPin->dDelayBlockRise + 0.5 * pPin->dDelayBlockFall;
245 return ABC_INFINITY;
246 }
247
248 ////////////////////////////////////////////////////////////////////////
249 /// END OF FILE ///
250 ////////////////////////////////////////////////////////////////////////
251
252
253 ABC_NAMESPACE_IMPL_END
254
255