1 /**CFile**************************************************************** 2 3 FileName [mio.h] 4 5 PackageName [MVSIS 2.0: 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: mio.h,v 1.6 2004/08/09 22:16:31 satrajit Exp $] 16 17 ***********************************************************************/ 18 19 #ifndef ABC__map__mio__mio_h 20 #define ABC__map__mio__mio_h 21 22 23 //////////////////////////////////////////////////////////////////////// 24 /// INCLUDES /// 25 //////////////////////////////////////////////////////////////////////// 26 27 //////////////////////////////////////////////////////////////////////// 28 /// PARAMETERS /// 29 //////////////////////////////////////////////////////////////////////// 30 31 32 33 ABC_NAMESPACE_HEADER_START 34 35 36 //////////////////////////////////////////////////////////////////////// 37 /// STRUCTURE DEFINITIONS /// 38 //////////////////////////////////////////////////////////////////////// 39 40 typedef enum { MIO_PHASE_UNKNOWN, MIO_PHASE_INV, MIO_PHASE_NONINV } Mio_PinPhase_t; 41 42 typedef struct Mio_LibraryStruct_t_ Mio_Library_t; 43 typedef struct Mio_GateStruct_t_ Mio_Gate_t; 44 typedef struct Mio_PinStruct_t_ Mio_Pin_t; 45 46 typedef struct Mio_Cell_t_ Mio_Cell_t; 47 struct Mio_Cell_t_ 48 { 49 char * pName; // name 50 unsigned Id : 28; // gate ID 51 unsigned nFanins : 4; // gate fanins 52 float Area; // area 53 word uTruth; // truth table 54 float Delays[6]; // delay 55 }; 56 57 typedef struct Mio_Cell2_t_ Mio_Cell2_t; 58 struct Mio_Cell2_t_ 59 { 60 char * pName; // name 61 Vec_Int_t * vExpr; // expression 62 unsigned Id : 26; // gate ID 63 unsigned Type : 2; // gate type 64 unsigned nFanins : 4; // gate fanins 65 float AreaF; // area 66 word AreaW; // area 67 word uTruth; // truth table 68 int iDelayAve; // average delay 69 int iDelays[6]; // delay 70 void * pMioGate; // gate pointer 71 }; 72 73 //////////////////////////////////////////////////////////////////////// 74 /// GLOBAL VARIABLES /// 75 //////////////////////////////////////////////////////////////////////// 76 77 //////////////////////////////////////////////////////////////////////// 78 /// MACRO DEFINITIONS /// 79 //////////////////////////////////////////////////////////////////////// 80 81 #define Mio_LibraryForEachGate( Lib, Gate ) \ 82 for ( Gate = Mio_LibraryReadGates(Lib); \ 83 Gate; \ 84 Gate = Mio_GateReadNext(Gate) ) 85 #define Mio_LibraryForEachGateSafe( Lib, Gate, Gate2 ) \ 86 for ( Gate = Mio_LibraryReadGates(Lib), \ 87 Gate2 = (Gate? Mio_GateReadNext(Gate): NULL); \ 88 Gate; \ 89 Gate = Gate2, \ 90 Gate2 = (Gate? Mio_GateReadNext(Gate): NULL) ) 91 92 #define Mio_GateForEachPin( Gate, Pin ) \ 93 for ( Pin = Mio_GateReadPins(Gate); \ 94 Pin; \ 95 Pin = Mio_PinReadNext(Pin) ) 96 #define Mio_GateForEachPinSafe( Gate, Pin, Pin2 ) \ 97 for ( Pin = Mio_GateReadPins(Gate), \ 98 Pin2 = (Pin? Mio_PinReadNext(Pin): NULL); \ 99 Pin; \ 100 Pin = Pin2, \ 101 Pin2 = (Pin? Mio_PinReadNext(Pin): NULL) ) 102 103 //////////////////////////////////////////////////////////////////////// 104 /// FUNCTION DEFINITIONS /// 105 //////////////////////////////////////////////////////////////////////// 106 107 /*=== mio.c =============================================================*/ 108 extern void Mio_UpdateGenlib( Mio_Library_t * pLib ); 109 extern int Mio_UpdateGenlib2( Vec_Str_t * vStr, Vec_Str_t * vStr2, char * pFileName, int fVerbose ); 110 /*=== mioApi.c =============================================================*/ 111 extern char * Mio_LibraryReadName ( Mio_Library_t * pLib ); 112 extern int Mio_LibraryReadGateNum ( Mio_Library_t * pLib ); 113 extern Mio_Gate_t * Mio_LibraryReadGates ( Mio_Library_t * pLib ); 114 extern Mio_Gate_t ** Mio_LibraryReadGateArray ( Mio_Library_t * pLib ); 115 extern Mio_Gate_t * Mio_LibraryReadGateById ( Mio_Library_t * pLib, int iD ); 116 extern Mio_Gate_t * Mio_LibraryReadGateByName ( Mio_Library_t * pLib, char * pName, char * pOutName ); 117 extern char * Mio_LibraryReadSopByName ( Mio_Library_t * pLib, char * pName ); 118 extern Mio_Gate_t * Mio_LibraryReadGateByTruth( Mio_Library_t * pLib, word t ); 119 extern Mio_Gate_t * Mio_LibraryReadConst0 ( Mio_Library_t * pLib ); 120 extern Mio_Gate_t * Mio_LibraryReadConst1 ( Mio_Library_t * pLib ); 121 extern Mio_Gate_t * Mio_LibraryReadNand2 ( Mio_Library_t * pLib ); 122 extern Mio_Gate_t * Mio_LibraryReadAnd2 ( Mio_Library_t * pLib ); 123 extern Mio_Gate_t * Mio_LibraryReadNor2 ( Mio_Library_t * pLib ); 124 extern Mio_Gate_t * Mio_LibraryReadOr2 ( Mio_Library_t * pLib ); 125 extern Mio_Gate_t * Mio_LibraryReadBuf ( Mio_Library_t * pLib ); 126 extern Mio_Gate_t * Mio_LibraryReadInv ( Mio_Library_t * pLib ); 127 extern float Mio_LibraryReadDelayInvRise( Mio_Library_t * pLib ); 128 extern float Mio_LibraryReadDelayInvFall( Mio_Library_t * pLib ); 129 extern float Mio_LibraryReadDelayInvMax( Mio_Library_t * pLib ); 130 extern float Mio_LibraryReadDelayNand2Rise( Mio_Library_t * pLib ); 131 extern float Mio_LibraryReadDelayNand2Fall( Mio_Library_t * pLib ); 132 extern float Mio_LibraryReadDelayNand2Max( Mio_Library_t * pLib ); 133 extern float Mio_LibraryReadDelayAnd2Max( Mio_Library_t * pLib ); 134 extern float Mio_LibraryReadDelayAigNode( Mio_Library_t * pLib ); 135 extern float Mio_LibraryReadAreaInv ( Mio_Library_t * pLib ); 136 extern float Mio_LibraryReadAreaBuf ( Mio_Library_t * pLib ); 137 extern float Mio_LibraryReadAreaNand2 ( Mio_Library_t * pLib ); 138 extern int Mio_LibraryReadGateNameMax( Mio_Library_t * pLib ); 139 extern void Mio_LibrarySetName ( Mio_Library_t * pLib, char * pName ); 140 extern char * Mio_GateReadName ( Mio_Gate_t * pGate ); 141 extern char * Mio_GateReadOutName ( Mio_Gate_t * pGate ); 142 extern double Mio_GateReadArea ( Mio_Gate_t * pGate ); 143 extern char * Mio_GateReadForm ( Mio_Gate_t * pGate ); 144 extern Mio_Pin_t * Mio_GateReadPins ( Mio_Gate_t * pGate ); 145 extern Mio_Library_t * Mio_GateReadLib ( Mio_Gate_t * pGate ); 146 extern Mio_Gate_t * Mio_GateReadNext ( Mio_Gate_t * pGate ); 147 extern Mio_Gate_t * Mio_GateReadTwin ( Mio_Gate_t * pGate ); 148 extern int Mio_GateReadPinNum ( Mio_Gate_t * pGate ); 149 extern double Mio_GateReadDelayMax ( Mio_Gate_t * pGate ); 150 extern char * Mio_GateReadSop ( Mio_Gate_t * pGate ); 151 extern Vec_Int_t * Mio_GateReadExpr ( Mio_Gate_t * pGate ); 152 extern word Mio_GateReadTruth ( Mio_Gate_t * pGate ); 153 extern word * Mio_GateReadTruthP ( Mio_Gate_t * pGate ); 154 extern int Mio_GateReadValue ( Mio_Gate_t * pGate ); 155 extern int Mio_GateReadCell ( Mio_Gate_t * pGate ); 156 extern int Mio_GateReadProfile ( Mio_Gate_t * pGate ); 157 extern int Mio_GateReadProfile2 ( Mio_Gate_t * pGate ); 158 extern char * Mio_GateReadPinName ( Mio_Gate_t * pGate, int iPin ); 159 extern float Mio_GateReadPinDelay ( Mio_Gate_t * pGate, int iPin ); 160 extern void Mio_GateSetValue ( Mio_Gate_t * pGate, int Value ); 161 extern void Mio_GateSetCell ( Mio_Gate_t * pGate, int Cell ); 162 extern void Mio_GateSetProfile ( Mio_Gate_t * pGate, int Prof ); 163 extern void Mio_GateSetProfile2 ( Mio_Gate_t * pGate, int Prof ); 164 extern void Mio_GateIncProfile2 ( Mio_Gate_t * pGate ); 165 extern void Mio_GateDecProfile2 ( Mio_Gate_t * pGate ); 166 extern void Mio_GateAddToProfile ( Mio_Gate_t * pGate, int Prof ); 167 extern void Mio_GateAddToProfile2 ( Mio_Gate_t * pGate, int Prof ); 168 extern int Mio_GateIsInv ( Mio_Gate_t * pGate ); 169 extern char * Mio_PinReadName ( Mio_Pin_t * pPin ); 170 extern Mio_PinPhase_t Mio_PinReadPhase ( Mio_Pin_t * pPin ); 171 extern double Mio_PinReadInputLoad ( Mio_Pin_t * pPin ); 172 extern double Mio_PinReadMaxLoad ( Mio_Pin_t * pPin ); 173 extern double Mio_PinReadDelayBlockRise ( Mio_Pin_t * pPin ); 174 extern double Mio_PinReadDelayFanoutRise( Mio_Pin_t * pPin ); 175 extern double Mio_PinReadDelayBlockFall ( Mio_Pin_t * pPin ); 176 extern double Mio_PinReadDelayFanoutFall( Mio_Pin_t * pPin ); 177 extern double Mio_PinReadDelayBlockMax ( Mio_Pin_t * pPin ); 178 extern Mio_Pin_t * Mio_PinReadNext ( Mio_Pin_t * pPin ); 179 /*=== mioRead.c =============================================================*/ 180 extern char * Mio_ReadFile( char * FileName, int fAddEnd ); 181 extern Mio_Library_t * Mio_LibraryRead( char * FileName, char * pBuffer, char * ExcludeFile, int fVerbose ); 182 extern int Mio_LibraryReadExclude( char * ExcludeFile, st__table * tExcludeGate ); 183 /*=== mioFunc.c =============================================================*/ 184 extern int Mio_LibraryParseFormulas( Mio_Library_t * pLib ); 185 /*=== mioParse.c =============================================================*/ 186 extern Vec_Int_t * Mio_ParseFormula( char * pFormInit, char ** ppVarNames, int nVars ); 187 extern Vec_Wrd_t * Mio_ParseFormulaTruth( char * pFormInit, char ** ppVarNames, int nVars ); 188 extern int Mio_ParseCheckFormula( Mio_Gate_t * pGate, char * pForm ); 189 /*=== mioSop.c =============================================================*/ 190 extern char * Mio_LibDeriveSop( int nVars, Vec_Int_t * vExpr, Vec_Str_t * vStr ); 191 /*=== mioUtils.c =============================================================*/ 192 extern void Mio_LibraryDelete( Mio_Library_t * pLib ); 193 extern void Mio_GateDelete( Mio_Gate_t * pGate ); 194 extern void Mio_PinDelete( Mio_Pin_t * pPin ); 195 extern Mio_Pin_t * Mio_PinDup( Mio_Pin_t * pPin ); 196 extern void Mio_WriteLibrary( FILE * pFile, Mio_Library_t * pLib, int fPrintSops, int fShort, int fSelected ); 197 extern Mio_Gate_t ** Mio_CollectRoots( Mio_Library_t * pLib, int nInputs, float tDelay, int fSkipInv, int * pnGates, int fVerbose ); 198 extern Mio_Cell_t * Mio_CollectRootsNew( Mio_Library_t * pLib, int nInputs, int * pnGates, int fVerbose ); 199 extern Mio_Cell_t * Mio_CollectRootsNewDefault( int nInputs, int * pnGates, int fVerbose ); 200 extern Mio_Cell2_t * Mio_CollectRootsNewDefault2( int nInputs, int * pnGates, int fVerbose ); 201 extern int Mio_CollectRootsNewDefault3( int nInputs, Vec_Ptr_t ** pvNames, Vec_Wrd_t ** pvTruths ); 202 extern word Mio_DeriveTruthTable6( Mio_Gate_t * pGate ); 203 extern void Mio_DeriveTruthTable( Mio_Gate_t * pGate, unsigned uTruthsIn[][2], int nSigns, int nInputs, unsigned uTruthRes[] ); 204 extern void Mio_DeriveGateDelays( Mio_Gate_t * pGate, 205 float ** ptPinDelays, int nPins, int nInputs, float tDelayZero, 206 float * ptDelaysRes, float * ptPinDelayMax ); 207 extern Mio_Gate_t * Mio_GateCreatePseudo( int nInputs ); 208 extern void Mio_LibraryShiftDelay( Mio_Library_t * pLib, double Shift ); 209 extern void Mio_LibraryMultiArea( Mio_Library_t * pLib, double Multi ); 210 extern void Mio_LibraryMultiDelay( Mio_Library_t * pLib, double Multi ); 211 extern void Mio_LibraryTransferDelays( Mio_Library_t * pLibD, Mio_Library_t * pLibS ); 212 extern void Mio_LibraryTransferCellIds(); 213 extern void Mio_LibraryReadProfile( FILE * pFile, Mio_Library_t * pLib ); 214 extern void Mio_LibraryWriteProfile( FILE * pFile, Mio_Library_t * pLib ); 215 extern void Mio_LibraryTransferProfile( Mio_Library_t * pLibDst, Mio_Library_t * pLibSrc ); 216 extern void Mio_LibraryTransferProfile2( Mio_Library_t * pLibDst, Mio_Library_t * pLibSrc ); 217 extern int Mio_LibraryHasProfile( Mio_Library_t * pLib ); 218 extern void Mio_LibraryCleanProfile2( Mio_Library_t * pLib ); 219 extern void Mio_LibraryShortNames( Mio_Library_t * pLib ); 220 221 extern void Mio_LibraryMatchesStop( Mio_Library_t * pLib ); 222 extern void Mio_LibraryMatchesStart( Mio_Library_t * pLib, int fPinFilter, int fPinPerm, int fPinQuick ); 223 extern void Mio_LibraryMatchesFetch( Mio_Library_t * pLib, Vec_Mem_t ** pvTtMem, Vec_Wec_t ** pvTt2Match, Mio_Cell2_t ** ppCells, int * pnCells, int fPinFilter, int fPinPerm, int fPinQuick ); 224 225 extern void Mio_LibraryMatches2Stop( Mio_Library_t * pLib ); 226 extern void Mio_LibraryMatches2Start( Mio_Library_t * pLib ); 227 extern void Mio_LibraryMatches2Fetch( Mio_Library_t * pLib, Vec_Ptr_t ** pvNames, Vec_Wrd_t ** pvTruths, Vec_Int_t ** pvTt2Match4, Vec_Int_t ** pvConfigs, Vec_Mem_t * pvTtMem2[3], Vec_Int_t * pvTt2Match2[3] ); 228 229 /*=== sclUtil.c =========================================================*/ 230 extern Mio_Library_t * Abc_SclDeriveGenlibSimple( void * pScl ); 231 extern Mio_Library_t * Abc_SclDeriveGenlib( void * pScl, void * pMio, float Slew, float Gain, int nGatesMin, int fVerbose ); 232 extern int Abc_SclHasDelayInfo( void * pScl ); 233 234 235 ABC_NAMESPACE_HEADER_END 236 237 #endif 238 239 //////////////////////////////////////////////////////////////////////// 240 /// END OF FILE /// 241 //////////////////////////////////////////////////////////////////////// 242 243