00001
00019 #ifndef __FPGA_H__
00020 #define __FPGA_H__
00021
00022 #ifdef __cplusplus
00023 extern "C" {
00024 #endif
00025
00029
00033
00034
00035 #define FPGA_MAX_LUTSIZE 32
00036
00040
00041 typedef struct Fpga_ManStruct_t_ Fpga_Man_t;
00042 typedef struct Fpga_NodeStruct_t_ Fpga_Node_t;
00043 typedef struct Fpga_NodeVecStruct_t_ Fpga_NodeVec_t;
00044 typedef struct Fpga_CutStruct_t_ Fpga_Cut_t;
00045 typedef struct Fpga_LutLibStruct_t_ Fpga_LutLib_t;
00046
00050
00054
00055 #define Fpga_IsComplement(p) (((int)((unsigned long) (p) & 01)))
00056 #define Fpga_Regular(p) ((Fpga_Node_t *)((unsigned long)(p) & ~01))
00057 #define Fpga_Not(p) ((Fpga_Node_t *)((unsigned long)(p) ^ 01))
00058 #define Fpga_NotCond(p,c) ((Fpga_Node_t *)((unsigned long)(p) ^ (c)))
00059
00060 #define Fpga_Ref(p)
00061 #define Fpga_Deref(p)
00062 #define Fpga_RecursiveDeref(p,c)
00063
00067
00068
00069 extern Fpga_Man_t * Fpga_ManCreate( int nInputs, int nOutputs, int fVerbose );
00070 extern Fpga_Node_t * Fpga_NodeCreate( Fpga_Man_t * p, Fpga_Node_t * p1, Fpga_Node_t * p2 );
00071 extern void Fpga_ManFree( Fpga_Man_t * pMan );
00072 extern void Fpga_ManPrintTimeStats( Fpga_Man_t * p );
00073
00074 extern int Fpga_ManReadInputNum( Fpga_Man_t * p );
00075 extern int Fpga_ManReadOutputNum( Fpga_Man_t * p );
00076 extern Fpga_Node_t ** Fpga_ManReadInputs ( Fpga_Man_t * p );
00077 extern Fpga_Node_t ** Fpga_ManReadOutputs( Fpga_Man_t * p );
00078 extern Fpga_Node_t * Fpga_ManReadConst1 ( Fpga_Man_t * p );
00079 extern float * Fpga_ManReadInputArrivals( Fpga_Man_t * p );
00080 extern int Fpga_ManReadVerbose( Fpga_Man_t * p );
00081 extern float * Fpga_ManReadLutAreas( Fpga_Man_t * p );
00082 extern void Fpga_ManSetTimeToMap( Fpga_Man_t * p, int Time );
00083 extern void Fpga_ManSetTimeToNet( Fpga_Man_t * p, int Time );
00084 extern void Fpga_ManSetTimeTotal( Fpga_Man_t * p, int Time );
00085 extern void Fpga_ManSetOutputNames( Fpga_Man_t * p, char ** ppNames );
00086 extern void Fpga_ManSetInputArrivals( Fpga_Man_t * p, float * pArrivals );
00087 extern void Fpga_ManSetAreaRecovery( Fpga_Man_t * p, int fAreaRecovery );
00088 extern void Fpga_ManSetDelayLimit( Fpga_Man_t * p, float DelayLimit );
00089 extern void Fpga_ManSetAreaLimit( Fpga_Man_t * p, float AreaLimit );
00090 extern void Fpga_ManSetTimeLimit( Fpga_Man_t * p, float TimeLimit );
00091 extern void Fpga_ManSetObeyFanoutLimits( Fpga_Man_t * p, int fObeyFanoutLimits );
00092 extern void Fpga_ManSetNumIterations( Fpga_Man_t * p, int nNumIterations );
00093 extern int Fpga_ManReadFanoutViolations( Fpga_Man_t * p );
00094 extern void Fpga_ManSetFanoutViolations( Fpga_Man_t * p, int nVio );
00095 extern void Fpga_ManSetChoiceNodeNum( Fpga_Man_t * p, int nChoiceNodes );
00096 extern void Fpga_ManSetChoiceNum( Fpga_Man_t * p, int nChoices );
00097 extern void Fpga_ManSetVerbose( Fpga_Man_t * p, int fVerbose );
00098 extern void Fpga_ManSetSwitching( Fpga_Man_t * p, int fSwitching );
00099 extern void Fpga_ManSetLatchPaths( Fpga_Man_t * p, int fLatchPaths );
00100 extern void Fpga_ManSetLatchNum( Fpga_Man_t * p, int nLatches );
00101 extern void Fpga_ManSetDelayTarget( Fpga_Man_t * p, float DelayTarget );
00102 extern void Fpga_ManSetName( Fpga_Man_t * p, char * pFileName );
00103
00104 extern int Fpga_LibReadLutMax( Fpga_LutLib_t * pLib );
00105
00106 extern char * Fpga_NodeReadData0( Fpga_Node_t * p );
00107 extern Fpga_Node_t * Fpga_NodeReadData1( Fpga_Node_t * p );
00108 extern int Fpga_NodeReadRefs( Fpga_Node_t * p );
00109 extern int Fpga_NodeReadNum( Fpga_Node_t * p );
00110 extern int Fpga_NodeReadLevel( Fpga_Node_t * p );
00111 extern Fpga_Cut_t * Fpga_NodeReadCuts( Fpga_Node_t * p );
00112 extern Fpga_Cut_t * Fpga_NodeReadCutBest( Fpga_Node_t * p );
00113 extern Fpga_Node_t * Fpga_NodeReadOne( Fpga_Node_t * p );
00114 extern Fpga_Node_t * Fpga_NodeReadTwo( Fpga_Node_t * p );
00115 extern void Fpga_NodeSetLevel( Fpga_Node_t * p, Fpga_Node_t * pNode );
00116 extern void Fpga_NodeSetData0( Fpga_Node_t * p, char * pData );
00117 extern void Fpga_NodeSetData1( Fpga_Node_t * p, Fpga_Node_t * pNode );
00118 extern void Fpga_NodeSetArrival( Fpga_Node_t * p, float Time );
00119 extern void Fpga_NodeSetNextE( Fpga_Node_t * p, Fpga_Node_t * pNextE );
00120 extern void Fpga_NodeSetRepr( Fpga_Node_t * p, Fpga_Node_t * pRepr );
00121 extern void Fpga_NodeSetSwitching( Fpga_Node_t * p, float Switching );
00122
00123 extern int Fpga_NodeIsConst( Fpga_Node_t * p );
00124 extern int Fpga_NodeIsVar( Fpga_Node_t * p );
00125 extern int Fpga_NodeIsAnd( Fpga_Node_t * p );
00126 extern int Fpga_NodeComparePhase( Fpga_Node_t * p1, Fpga_Node_t * p2 );
00127
00128 extern int Fpga_CutReadLeavesNum( Fpga_Cut_t * p );
00129 extern Fpga_Node_t ** Fpga_CutReadLeaves( Fpga_Cut_t * p );
00130
00131 extern Fpga_Node_t * Fpga_NodeAnd( Fpga_Man_t * p, Fpga_Node_t * p1, Fpga_Node_t * p2 );
00132 extern Fpga_Node_t * Fpga_NodeOr( Fpga_Man_t * p, Fpga_Node_t * p1, Fpga_Node_t * p2 );
00133 extern Fpga_Node_t * Fpga_NodeExor( Fpga_Man_t * p, Fpga_Node_t * p1, Fpga_Node_t * p2 );
00134 extern Fpga_Node_t * Fpga_NodeMux( Fpga_Man_t * p, Fpga_Node_t * pNode, Fpga_Node_t * pNodeT, Fpga_Node_t * pNodeE );
00135 extern void Fpga_NodeSetChoice( Fpga_Man_t * pMan, Fpga_Node_t * pNodeOld, Fpga_Node_t * pNodeNew );
00136
00137 extern void Fpga_ManStats( Fpga_Man_t * p );
00138
00139
00140 extern int Fpga_Mapping( Fpga_Man_t * p );
00141
00142 extern void Fpga_MappingCreatePiCuts( Fpga_Man_t * p );
00143 extern void Fpga_CutsCleanSign( Fpga_Man_t * pMan );
00144
00145 extern void Fpga_CutCreateFromNode( Fpga_Man_t * p, int iRoot, int * pLeaves, int nLeaves );
00146 extern void Fpga_MappingSetUsedCuts( Fpga_Man_t * p );
00147
00148 extern Fpga_LutLib_t * Fpga_LutLibDup( Fpga_LutLib_t * p );
00149 extern int Fpga_LutLibReadVarMax( Fpga_LutLib_t * p );
00150 extern float * Fpga_LutLibReadLutAreas( Fpga_LutLib_t * p );
00151 extern float * Fpga_LutLibReadLutDelays( Fpga_LutLib_t * p );
00152 extern float Fpga_LutLibReadLutArea( Fpga_LutLib_t * p, int Size );
00153 extern float Fpga_LutLibReadLutDelay( Fpga_LutLib_t * p, int Size );
00154
00155 extern void * Fpga_TruthsCutBdd( void * dd, Fpga_Cut_t * pCut );
00156 extern int Fpga_CutVolume( Fpga_Cut_t * pCut );
00157
00158 extern int Fpga_ManCheckConsistency( Fpga_Man_t * p );
00159 extern void Fpga_ManCleanData0( Fpga_Man_t * pMan );
00160 extern Fpga_NodeVec_t * Fpga_CollectNodeTfo( Fpga_Man_t * pMan, Fpga_Node_t * pNode );
00161
00162 extern void Fpga_SetSimpleLutLib( int nLutSize );
00163
00164 #ifdef __cplusplus
00165 }
00166 #endif
00167
00168 #endif
00169