abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
fpgaCreate.c File Reference
#include "fpgaInt.h"
#include "base/main/main.h"

Go to the source code of this file.

Functions

static
ABC_NAMESPACE_IMPL_START void 
Fpga_TableCreate (Fpga_Man_t *p)
 DECLARATIONS ///. More...
 
static void Fpga_TableResize (Fpga_Man_t *p)
 
static Fpga_Node_tFpga_TableLookup (Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
 
static unsigned Fpga_HashKey2 (Fpga_Node_t *p0, Fpga_Node_t *p1, int TableSize)
 
int Fpga_ManReadInputNum (Fpga_Man_t *p)
 FUNCTION DEFINITIONS ///. More...
 
int Fpga_ManReadOutputNum (Fpga_Man_t *p)
 
Fpga_Node_t ** Fpga_ManReadInputs (Fpga_Man_t *p)
 
Fpga_Node_t ** Fpga_ManReadOutputs (Fpga_Man_t *p)
 
Fpga_Node_tFpga_ManReadConst1 (Fpga_Man_t *p)
 
float * Fpga_ManReadInputArrivals (Fpga_Man_t *p)
 
int Fpga_ManReadVerbose (Fpga_Man_t *p)
 
int Fpga_ManReadVarMax (Fpga_Man_t *p)
 
float * Fpga_ManReadLutAreas (Fpga_Man_t *p)
 
Fpga_NodeVec_tFpga_ManReadMapping (Fpga_Man_t *p)
 
void Fpga_ManSetOutputNames (Fpga_Man_t *p, char **ppNames)
 
void Fpga_ManSetInputArrivals (Fpga_Man_t *p, float *pArrivals)
 
void Fpga_ManSetAreaRecovery (Fpga_Man_t *p, int fAreaRecovery)
 
void Fpga_ManSetDelayLimit (Fpga_Man_t *p, float DelayLimit)
 
void Fpga_ManSetAreaLimit (Fpga_Man_t *p, float AreaLimit)
 
void Fpga_ManSetChoiceNodeNum (Fpga_Man_t *p, int nChoiceNodes)
 
void Fpga_ManSetChoiceNum (Fpga_Man_t *p, int nChoices)
 
void Fpga_ManSetVerbose (Fpga_Man_t *p, int fVerbose)
 
void Fpga_ManSetSwitching (Fpga_Man_t *p, int fSwitching)
 
void Fpga_ManSetLatchPaths (Fpga_Man_t *p, int fLatchPaths)
 
void Fpga_ManSetLatchNum (Fpga_Man_t *p, int nLatches)
 
void Fpga_ManSetDelayTarget (Fpga_Man_t *p, float DelayTarget)
 
void Fpga_ManSetName (Fpga_Man_t *p, char *pFileName)
 
int Fpga_LibReadLutMax (Fpga_LutLib_t *pLib)
 
char * Fpga_NodeReadData0 (Fpga_Node_t *p)
 
Fpga_Node_tFpga_NodeReadData1 (Fpga_Node_t *p)
 
int Fpga_NodeReadRefs (Fpga_Node_t *p)
 
int Fpga_NodeReadNum (Fpga_Node_t *p)
 
int Fpga_NodeReadLevel (Fpga_Node_t *p)
 
Fpga_Cut_tFpga_NodeReadCuts (Fpga_Node_t *p)
 
Fpga_Cut_tFpga_NodeReadCutBest (Fpga_Node_t *p)
 
Fpga_Node_tFpga_NodeReadOne (Fpga_Node_t *p)
 
Fpga_Node_tFpga_NodeReadTwo (Fpga_Node_t *p)
 
void Fpga_NodeSetData0 (Fpga_Node_t *p, char *pData)
 
void Fpga_NodeSetData1 (Fpga_Node_t *p, Fpga_Node_t *pNode)
 
void Fpga_NodeSetNextE (Fpga_Node_t *p, Fpga_Node_t *pNextE)
 
void Fpga_NodeSetRepr (Fpga_Node_t *p, Fpga_Node_t *pRepr)
 
void Fpga_NodeSetSwitching (Fpga_Node_t *p, float Switching)
 
int Fpga_NodeIsConst (Fpga_Node_t *p)
 
int Fpga_NodeIsVar (Fpga_Node_t *p)
 
int Fpga_NodeIsAnd (Fpga_Node_t *p)
 
int Fpga_NodeComparePhase (Fpga_Node_t *p1, Fpga_Node_t *p2)
 
int Fpga_CutReadLeavesNum (Fpga_Cut_t *p)
 
Fpga_Node_t ** Fpga_CutReadLeaves (Fpga_Cut_t *p)
 
Fpga_Man_tFpga_ManCreate (int nInputs, int nOutputs, int fVerbose)
 FUNCTION DEFINITIONS ///. More...
 
void Fpga_ManFree (Fpga_Man_t *p)
 
void Fpga_ManPrintTimeStats (Fpga_Man_t *p)
 
Fpga_Node_tFpga_NodeCreate (Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
 
Fpga_Node_tFpga_NodeAnd (Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
 
Fpga_Node_tFpga_NodeOr (Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
 
Fpga_Node_tFpga_NodeExor (Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
 
Fpga_Node_tFpga_NodeMux (Fpga_Man_t *p, Fpga_Node_t *pC, Fpga_Node_t *pT, Fpga_Node_t *pE)
 
void Fpga_NodeSetChoice (Fpga_Man_t *pMan, Fpga_Node_t *pNodeOld, Fpga_Node_t *pNodeNew)
 
void Fpga_ManStats (Fpga_Man_t *p)
 

Function Documentation

Fpga_Node_t** Fpga_CutReadLeaves ( Fpga_Cut_t p)

Definition at line 142 of file fpgaCreate.c.

142 { return p->ppLeaves; }
Fpga_Node_t * ppLeaves[FPGA_MAX_LEAVES+1]
Definition: fpgaInt.h:237
int Fpga_CutReadLeavesNum ( Fpga_Cut_t p)

Function*************************************************************

Synopsis [Reads parameters from the cut.]

Description []

SideEffects []

SeeAlso []

Definition at line 141 of file fpgaCreate.c.

141 { return p->nLeaves; }
static unsigned Fpga_HashKey2 ( Fpga_Node_t p0,
Fpga_Node_t p1,
int  TableSize 
)
inlinestatic

Definition at line 34 of file fpgaCreate.c.

34 { return (unsigned)(((ABC_PTRUINT_T)(p0) + (ABC_PTRUINT_T)(p1) * 12582917) % TableSize); }
int Fpga_LibReadLutMax ( Fpga_LutLib_t pLib)

Function*************************************************************

Synopsis [Reads the parameters of the LUT library.]

Description []

SideEffects []

SeeAlso []

Definition at line 86 of file fpgaCreate.c.

86 { return pLib->LutMax; }
Fpga_Man_t* Fpga_ManCreate ( int  nInputs,
int  nOutputs,
int  fVerbose 
)

FUNCTION DEFINITIONS ///.

Function*************************************************************

Synopsis [Create the mapping manager.]

Description [The number of inputs and outputs is assumed to be known is advance. It is much simpler to have them fixed upfront. When it comes to representing the object graph in the form of AIG, the resulting manager is similar to the regular AIG manager, except that it does not use reference counting (and therefore does not have garbage collections). It does have table resizing. The data structure is more flexible to represent additional information needed for mapping.]

SideEffects []

SeeAlso []

Definition at line 163 of file fpgaCreate.c.

164 {
165  Fpga_Man_t * p;
166  int i;
167 
168  // start the manager
169  p = ABC_ALLOC( Fpga_Man_t, 1 );
170  memset( p, 0, sizeof(Fpga_Man_t) );
172  p->nVarsMax = p->pLutLib->LutMax;
173  p->fVerbose = fVerbose;
174  p->fAreaRecovery = 1;
175  p->fEpsilon = (float)0.001;
176 
177  Fpga_TableCreate( p );
178 //if ( p->fVerbose )
179 // printf( "Node = %d (%d) bytes. Cut = %d bytes.\n", sizeof(Fpga_Node_t), FPGA_NUM_BYTES(sizeof(Fpga_Node_t)), sizeof(Fpga_Cut_t) );
181  p->mmCuts = Extra_MmFixedStart( sizeof(Fpga_Cut_t) );
182 
183  assert( p->nVarsMax > 0 );
184 // Fpga_MappingSetupTruthTables( p->uTruths );
185 
186  // make sure the constant node will get index -1
187  p->nNodes = -1;
188  // create the constant node
189  p->pConst1 = Fpga_NodeCreate( p, NULL, NULL );
190  p->vNodesAll = Fpga_NodeVecAlloc( 1000 );
191  p->vMapping = Fpga_NodeVecAlloc( 1000 );
192 
193  // create the PI nodes
194  p->nInputs = nInputs;
195  p->pInputs = ABC_ALLOC( Fpga_Node_t *, nInputs );
196  for ( i = 0; i < nInputs; i++ )
197  p->pInputs[i] = Fpga_NodeCreate( p, NULL, NULL );
198 
199  // create the place for the output nodes
200  p->nOutputs = nOutputs;
201  p->pOutputs = ABC_ALLOC( Fpga_Node_t *, nOutputs );
202  memset( p->pOutputs, 0, sizeof(Fpga_Node_t *) * nOutputs );
203  return p;
204 }
char * memset()
Fpga_Node_t ** pInputs
Definition: fpgaInt.h:104
static Llb_Mgr_t * p
Definition: llb3Image.c:950
Fpga_Node_t ** pOutputs
Definition: fpgaInt.h:106
Fpga_Node_t * Fpga_NodeCreate(Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
Definition: fpgaCreate.c:293
Fpga_NodeVec_t * vMapping
Definition: fpgaInt.h:113
#define ABC_ALLOC(type, num)
Definition: abc_global.h:229
Fpga_NodeVec_t * vNodesAll
Definition: fpgaInt.h:111
Fpga_NodeVec_t * Fpga_NodeVecAlloc(int nCap)
FUNCTION DEFINITIONS ///.
Definition: fpgaVec.c:45
Extra_MmFixed_t * Extra_MmFixedStart(int nEntrySize)
Fpga_Node_t * pConst1
Definition: fpgaInt.h:110
Extra_MmFixed_t * mmNodes
Definition: fpgaInt.h:140
Extra_MmFixed_t * mmCuts
Definition: fpgaInt.h:141
STRUCTURE DEFINITIONS ///.
Definition: fpgaInt.h:99
static ABC_NAMESPACE_IMPL_START void Fpga_TableCreate(Fpga_Man_t *p)
DECLARATIONS ///.
Definition: fpgaCreate.c:342
#define assert(ex)
Definition: util_old.h:213
#define FPGA_NUM_BYTES(n)
Definition: fpgaInt.h:58
Fpga_LutLib_t * pLutLib
Definition: fpgaInt.h:137
ABC_DLL void * Abc_FrameReadLibLut()
Definition: mainFrame.c:54
void Fpga_ManFree ( Fpga_Man_t p)

Function*************************************************************

Synopsis [Deallocates the mapping manager.]

Description []

SideEffects []

SeeAlso []

Definition at line 217 of file fpgaCreate.c.

218 {
219 // Fpga_ManStats( p );
220 // int i;
221 // for ( i = 0; i < p->vNodesAll->nSize; i++ )
222 // Fpga_NodeVecFree( p->vNodesAll->pArray[i]->vFanouts );
223 // Fpga_NodeVecFree( p->pConst1->vFanouts );
224  if ( p->vMapping )
226  if ( p->vAnds )
227  Fpga_NodeVecFree( p->vAnds );
228  if ( p->vNodesAll )
232  ABC_FREE( p->ppOutputNames );
233  ABC_FREE( p->pInputArrivals );
234  ABC_FREE( p->pInputs );
235  ABC_FREE( p->pOutputs );
236  ABC_FREE( p->pBins );
237  ABC_FREE( p );
238 }
float * pInputArrivals
Definition: fpgaInt.h:118
Fpga_Node_t ** pInputs
Definition: fpgaInt.h:104
Fpga_Node_t ** pOutputs
Definition: fpgaInt.h:106
void Extra_MmFixedStop(Extra_MmFixed_t *p)
Fpga_NodeVec_t * vMapping
Definition: fpgaInt.h:113
char ** ppOutputNames
Definition: fpgaInt.h:117
Fpga_NodeVec_t * vNodesAll
Definition: fpgaInt.h:111
void Fpga_NodeVecFree(Fpga_NodeVec_t *p)
Definition: fpgaVec.c:68
Extra_MmFixed_t * mmNodes
Definition: fpgaInt.h:140
Extra_MmFixed_t * mmCuts
Definition: fpgaInt.h:141
#define ABC_FREE(obj)
Definition: abc_global.h:232
Fpga_Node_t ** pBins
Definition: fpgaInt.h:102
Fpga_NodeVec_t * vAnds
Definition: fpgaInt.h:112
void Fpga_ManPrintTimeStats ( Fpga_Man_t p)

Function*************************************************************

Synopsis [Prints runtime statistics of the mapping manager.]

Description []

SideEffects []

SeeAlso []

Definition at line 252 of file fpgaCreate.c.

253 {
254 // extern char * pNetName;
255 // extern int TotalLuts;
256 // FILE * pTable;
257 
258 
259 /*
260  pTable = fopen( "stats.txt", "a+" );
261  fprintf( pTable, "%s ", pNetName );
262  fprintf( pTable, "%.0f ", p->fRequiredGlo );
263 // fprintf( pTable, "%.0f ", p->fAreaGlo );//+ (float)nOutputInvs );
264  fprintf( pTable, "%.0f ", (float)TotalLuts );
265  fprintf( pTable, "%4.2f\n", (float)(p->timeTotal-p->timeToMap)/(float)(CLOCKS_PER_SEC) );
266  fclose( pTable );
267 */
268 
269 // printf( "N-canonical = %d. Matchings = %d. ", p->nCanons, p->nMatches );
270 // printf( "Choice nodes = %d. Choices = %d.\n", p->nChoiceNodes, p->nChoices );
271  ABC_PRT( "ToMap", p->timeToMap );
272  ABC_PRT( "Cuts ", p->timeCuts );
273  ABC_PRT( "Match", p->timeMatch );
274  ABC_PRT( "Area ", p->timeRecover );
275  ABC_PRT( "ToNet", p->timeToNet );
276  ABC_PRT( "TOTAL", p->timeTotal );
277  if ( p->time1 ) { ABC_PRT( "time1", p->time1 ); }
278  if ( p->time2 ) { ABC_PRT( "time2", p->time2 ); }
279 }
clock_t timeToMap
Definition: fpgaInt.h:158
clock_t timeTotal
Definition: fpgaInt.h:164
clock_t timeCuts
Definition: fpgaInt.h:159
clock_t time1
Definition: fpgaInt.h:165
clock_t timeRecover
Definition: fpgaInt.h:162
#define ABC_PRT(a, t)
Definition: abc_global.h:220
clock_t timeToNet
Definition: fpgaInt.h:163
clock_t time2
Definition: fpgaInt.h:166
clock_t timeMatch
Definition: fpgaInt.h:161
Fpga_Node_t* Fpga_ManReadConst1 ( Fpga_Man_t p)

Definition at line 55 of file fpgaCreate.c.

55 { return p->pConst1; }
Fpga_Node_t * pConst1
Definition: fpgaInt.h:110
float* Fpga_ManReadInputArrivals ( Fpga_Man_t p)

Definition at line 56 of file fpgaCreate.c.

56 { return p->pInputArrivals;}
float * pInputArrivals
Definition: fpgaInt.h:118
int Fpga_ManReadInputNum ( Fpga_Man_t p)

FUNCTION DEFINITIONS ///.

Function*************************************************************

Synopsis [Reads parameters of the mapping manager.]

Description []

SideEffects []

SeeAlso []

Definition at line 51 of file fpgaCreate.c.

51 { return p->nInputs; }
Fpga_Node_t** Fpga_ManReadInputs ( Fpga_Man_t p)

Definition at line 53 of file fpgaCreate.c.

53 { return p->pInputs; }
Fpga_Node_t ** pInputs
Definition: fpgaInt.h:104
float* Fpga_ManReadLutAreas ( Fpga_Man_t p)

Definition at line 59 of file fpgaCreate.c.

59 { return p->pLutLib->pLutAreas; }
float pLutAreas[FPGA_MAX_LUTSIZE+1]
Definition: fpgaInt.h:175
Fpga_LutLib_t * pLutLib
Definition: fpgaInt.h:137
Fpga_NodeVec_t* Fpga_ManReadMapping ( Fpga_Man_t p)

Definition at line 60 of file fpgaCreate.c.

60 { return p->vMapping; }
Fpga_NodeVec_t * vMapping
Definition: fpgaInt.h:113
int Fpga_ManReadOutputNum ( Fpga_Man_t p)

Definition at line 52 of file fpgaCreate.c.

52 { return p->nOutputs; }
Fpga_Node_t** Fpga_ManReadOutputs ( Fpga_Man_t p)

Definition at line 54 of file fpgaCreate.c.

54 { return p->pOutputs; }
Fpga_Node_t ** pOutputs
Definition: fpgaInt.h:106
int Fpga_ManReadVarMax ( Fpga_Man_t p)

Definition at line 58 of file fpgaCreate.c.

58 { return p->pLutLib->LutMax; }
Fpga_LutLib_t * pLutLib
Definition: fpgaInt.h:137
int Fpga_ManReadVerbose ( Fpga_Man_t p)

Definition at line 57 of file fpgaCreate.c.

57 { return p->fVerbose; }
void Fpga_ManSetAreaLimit ( Fpga_Man_t p,
float  AreaLimit 
)

Definition at line 65 of file fpgaCreate.c.

65 { p->AreaLimit = AreaLimit; }
void Fpga_ManSetAreaRecovery ( Fpga_Man_t p,
int  fAreaRecovery 
)

Definition at line 63 of file fpgaCreate.c.

63 { p->fAreaRecovery = fAreaRecovery;}
void Fpga_ManSetChoiceNodeNum ( Fpga_Man_t p,
int  nChoiceNodes 
)

Definition at line 66 of file fpgaCreate.c.

66 { p->nChoiceNodes = nChoiceNodes; }
void Fpga_ManSetChoiceNum ( Fpga_Man_t p,
int  nChoices 
)

Definition at line 67 of file fpgaCreate.c.

67 { p->nChoices = nChoices; }
void Fpga_ManSetDelayLimit ( Fpga_Man_t p,
float  DelayLimit 
)

Definition at line 64 of file fpgaCreate.c.

64 { p->DelayLimit = DelayLimit; }
float DelayLimit
Definition: fpgaInt.h:153
void Fpga_ManSetDelayTarget ( Fpga_Man_t p,
float  DelayTarget 
)

Definition at line 72 of file fpgaCreate.c.

72 { p->DelayTarget = DelayTarget; }
float DelayTarget
Definition: fpgaInt.h:127
void Fpga_ManSetInputArrivals ( Fpga_Man_t p,
float *  pArrivals 
)

Definition at line 62 of file fpgaCreate.c.

62 { p->pInputArrivals = pArrivals; }
float * pInputArrivals
Definition: fpgaInt.h:118
void Fpga_ManSetLatchNum ( Fpga_Man_t p,
int  nLatches 
)

Definition at line 71 of file fpgaCreate.c.

71 { p->nLatches = nLatches; }
void Fpga_ManSetLatchPaths ( Fpga_Man_t p,
int  fLatchPaths 
)

Definition at line 70 of file fpgaCreate.c.

70 { p->fLatchPaths = fLatchPaths; }
void Fpga_ManSetName ( Fpga_Man_t p,
char *  pFileName 
)

Definition at line 73 of file fpgaCreate.c.

73 { p->pFileName = pFileName; }
char * pFileName
Definition: fpgaInt.h:116
void Fpga_ManSetOutputNames ( Fpga_Man_t p,
char **  ppNames 
)

Definition at line 61 of file fpgaCreate.c.

61 { p->ppOutputNames = ppNames; }
char ** ppOutputNames
Definition: fpgaInt.h:117
void Fpga_ManSetSwitching ( Fpga_Man_t p,
int  fSwitching 
)

Definition at line 69 of file fpgaCreate.c.

69 { p->fSwitching = fSwitching; }
void Fpga_ManSetVerbose ( Fpga_Man_t p,
int  fVerbose 
)

Definition at line 68 of file fpgaCreate.c.

68 { p->fVerbose = fVerbose; }
void Fpga_ManStats ( Fpga_Man_t p)

Function*************************************************************

Synopsis [Prints some interesting stats.]

Description []

SideEffects []

SeeAlso []

Definition at line 564 of file fpgaCreate.c.

565 {
566  FILE * pTable;
567  pTable = fopen( "stats.txt", "a+" );
568  fprintf( pTable, "%s ", p->pFileName );
569  fprintf( pTable, "%4d ", p->nInputs - p->nLatches );
570  fprintf( pTable, "%4d ", p->nOutputs - p->nLatches );
571  fprintf( pTable, "%4d ", p->nLatches );
572  fprintf( pTable, "%7d ", p->vAnds->nSize );
573  fprintf( pTable, "%7d ", Fpga_CutCountAll(p) );
574  fprintf( pTable, "%2d\n", (int)p->fRequiredGlo );
575  fclose( pTable );
576 }
int Fpga_CutCountAll(Fpga_Man_t *pMan)
Definition: fpgaCut.c:767
Fpga_NodeVec_t * vAnds
Definition: fpgaInt.h:112
float fRequiredGlo
Definition: fpgaInt.h:145
char * pFileName
Definition: fpgaInt.h:116
Fpga_Node_t* Fpga_NodeAnd ( Fpga_Man_t p,
Fpga_Node_t p1,
Fpga_Node_t p2 
)

Function*************************************************************

Synopsis [Elementary AND operation on the AIG.]

Description []

SideEffects []

SeeAlso []

Definition at line 470 of file fpgaCreate.c.

471 {
472  Fpga_Node_t * pNode;
473  pNode = Fpga_TableLookup( p, p1, p2 );
474  return pNode;
475 }
static Fpga_Node_t * Fpga_TableLookup(Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
Definition: fpgaCreate.c:365
int Fpga_NodeComparePhase ( Fpga_Node_t p1,
Fpga_Node_t p2 
)

Definition at line 128 of file fpgaCreate.c.

128 { assert( !Fpga_IsComplement(p1) ); assert( !Fpga_IsComplement(p2) ); return p1->fInv ^ p2->fInv; }
unsigned fInv
Definition: fpgaInt.h:191
#define assert(ex)
Definition: util_old.h:213
#define Fpga_IsComplement(p)
GLOBAL VARIABLES ///.
Definition: fpga.h:57
Fpga_Node_t* Fpga_NodeCreate ( Fpga_Man_t p,
Fpga_Node_t p1,
Fpga_Node_t p2 
)

Function*************************************************************

Synopsis [Creates a new node.]

Description [This procedure should be called to create the constant node and the PI nodes first.]

SideEffects []

SeeAlso []

Definition at line 293 of file fpgaCreate.c.

294 {
295  Fpga_Node_t * pNode;
296  // create the node
298  memset( pNode, 0, sizeof(Fpga_Node_t) );
299  // set very large required time
300  pNode->tRequired = FPGA_FLOAT_LARGE;
301  pNode->aEstFanouts = -1;
302  pNode->p1 = p1;
303  pNode->p2 = p2;
304  // set the number of this node
305  pNode->Num = p->nNodes++;
306  // place to store the fanouts
307 // pNode->vFanouts = Fpga_NodeVecAlloc( 5 );
308  // store this node in the internal array
309  if ( pNode->Num >= 0 )
310  Fpga_NodeVecPush( p->vNodesAll, pNode );
311  else
312  pNode->fInv = 1;
313  // set the level of this node
314  if ( p1 )
315  {
316 #ifdef FPGA_ALLOCATE_FANOUT
317  // create the fanout info
320 #endif
321  // compute the level
322  pNode->Level = 1 + FPGA_MAX(Fpga_Regular(p1)->Level, Fpga_Regular(p2)->Level);
324  }
325  // reference the inputs
326  if ( p1 ) Fpga_NodeRef(p1);
327  if ( p2 ) Fpga_NodeRef(p2);
328  return pNode;
329 }
char * memset()
unsigned Level
Definition: fpgaInt.h:195
#define FPGA_FLOAT_LARGE
Definition: fpgaInt.h:65
#define FPGA_MAX(a, b)
Definition: fpgaInt.h:62
char * Extra_MmFixedEntryFetch(Extra_MmFixed_t *p)
#define Fpga_NodeRef(p)
Definition: fpgaInt.h:86
void Fpga_NodeAddFaninFanout(Fpga_Node_t *pFanin, Fpga_Node_t *pFanout)
Fpga_Node_t * p1
Definition: fpgaInt.h:200
Fpga_NodeVec_t * vNodesAll
Definition: fpgaInt.h:111
unsigned fInv
Definition: fpgaInt.h:191
Extra_MmFixed_t * mmNodes
Definition: fpgaInt.h:140
#define Fpga_Regular(p)
Definition: fpga.h:58
#define Fpga_NodeIsSimComplement(p)
Definition: fpgaInt.h:89
Fpga_Node_t * p2
Definition: fpgaInt.h:201
void Fpga_NodeVecPush(Fpga_NodeVec_t *p, Fpga_Node_t *Entry)
Definition: fpgaVec.c:169
Fpga_Node_t* Fpga_NodeExor ( Fpga_Man_t p,
Fpga_Node_t p1,
Fpga_Node_t p2 
)

Function*************************************************************

Synopsis [Elementary EXOR operation on the AIG.]

Description []

SideEffects []

SeeAlso []

Definition at line 506 of file fpgaCreate.c.

507 {
508  return Fpga_NodeMux( p, p1, Fpga_Not(p2), p2 );
509 }
#define Fpga_Not(p)
Definition: fpga.h:59
Fpga_Node_t * Fpga_NodeMux(Fpga_Man_t *p, Fpga_Node_t *pC, Fpga_Node_t *pT, Fpga_Node_t *pE)
Definition: fpgaCreate.c:522
int Fpga_NodeIsAnd ( Fpga_Node_t p)

Definition at line 127 of file fpgaCreate.c.

127 { return (Fpga_Regular(p))->p1 != NULL; }
#define Fpga_Regular(p)
Definition: fpga.h:58
int Fpga_NodeIsConst ( Fpga_Node_t p)

Function*************************************************************

Synopsis [Checks the type of the node.]

Description []

SideEffects []

SeeAlso []

Definition at line 125 of file fpgaCreate.c.

125 { return (Fpga_Regular(p))->Num == -1; }
#define Fpga_Regular(p)
Definition: fpga.h:58
int Fpga_NodeIsVar ( Fpga_Node_t p)

Definition at line 126 of file fpgaCreate.c.

126 { return (Fpga_Regular(p))->p1 == NULL && (Fpga_Regular(p))->Num >= 0; }
#define Fpga_Regular(p)
Definition: fpga.h:58
Fpga_Node_t* Fpga_NodeMux ( Fpga_Man_t p,
Fpga_Node_t pC,
Fpga_Node_t pT,
Fpga_Node_t pE 
)

Function*************************************************************

Synopsis [Elementary MUX operation on the AIG.]

Description []

SideEffects []

SeeAlso []

Definition at line 522 of file fpgaCreate.c.

523 {
524  Fpga_Node_t * pAnd1, * pAnd2, * pRes;
525  pAnd1 = Fpga_TableLookup( p, pC, pT );
526  pAnd2 = Fpga_TableLookup( p, Fpga_Not(pC), pE );
527  pRes = Fpga_NodeOr( p, pAnd1, pAnd2 );
528  return pRes;
529 }
static Fpga_Node_t * Fpga_TableLookup(Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
Definition: fpgaCreate.c:365
#define Fpga_Not(p)
Definition: fpga.h:59
Fpga_Node_t * Fpga_NodeOr(Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
Definition: fpgaCreate.c:488
Fpga_Node_t* Fpga_NodeOr ( Fpga_Man_t p,
Fpga_Node_t p1,
Fpga_Node_t p2 
)

Function*************************************************************

Synopsis [Elementary OR operation on the AIG.]

Description []

SideEffects []

SeeAlso []

Definition at line 488 of file fpgaCreate.c.

489 {
490  Fpga_Node_t * pNode;
491  pNode = Fpga_Not( Fpga_TableLookup( p, Fpga_Not(p1), Fpga_Not(p2) ) );
492  return pNode;
493 }
static Fpga_Node_t * Fpga_TableLookup(Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
Definition: fpgaCreate.c:365
#define Fpga_Not(p)
Definition: fpga.h:59
Fpga_Cut_t* Fpga_NodeReadCutBest ( Fpga_Node_t p)

Definition at line 105 of file fpgaCreate.c.

105 { return p->pCutBest; }
Fpga_Cut_t * pCutBest
Definition: fpgaInt.h:222
Fpga_Cut_t* Fpga_NodeReadCuts ( Fpga_Node_t p)

Definition at line 104 of file fpgaCreate.c.

104 { return p->pCuts; }
Fpga_Cut_t * pCuts
Definition: fpgaInt.h:224
char* Fpga_NodeReadData0 ( Fpga_Node_t p)

Function*************************************************************

Synopsis [Reads parameters of the mapping node.]

Description []

SideEffects []

SeeAlso []

Definition at line 99 of file fpgaCreate.c.

99 { return p->pData0; }
Fpga_Node_t* Fpga_NodeReadData1 ( Fpga_Node_t p)

Definition at line 100 of file fpgaCreate.c.

100 { return p->pLevel; }
Fpga_Node_t * pLevel
Definition: fpgaInt.h:184
int Fpga_NodeReadLevel ( Fpga_Node_t p)

Definition at line 103 of file fpgaCreate.c.

103 { return Fpga_Regular(p)->Level; }
#define Fpga_Regular(p)
Definition: fpga.h:58
int Fpga_NodeReadNum ( Fpga_Node_t p)

Definition at line 102 of file fpgaCreate.c.

102 { return p->Num; }
Fpga_Node_t* Fpga_NodeReadOne ( Fpga_Node_t p)

Definition at line 106 of file fpgaCreate.c.

106 { return p->p1; }
Fpga_Node_t * p1
Definition: fpgaInt.h:200
int Fpga_NodeReadRefs ( Fpga_Node_t p)

Definition at line 101 of file fpgaCreate.c.

101 { return p->nRefs; }
Fpga_Node_t* Fpga_NodeReadTwo ( Fpga_Node_t p)

Definition at line 107 of file fpgaCreate.c.

107 { return p->p2; }
Fpga_Node_t * p2
Definition: fpgaInt.h:201
void Fpga_NodeSetChoice ( Fpga_Man_t pMan,
Fpga_Node_t pNodeOld,
Fpga_Node_t pNodeNew 
)

Function*************************************************************

Synopsis [Sets the node to be equivalent to the given one.]

Description [This procedure is a work-around for the equivalence check. Does not verify the equivalence. Use at the user's risk.]

SideEffects []

SeeAlso []

Definition at line 544 of file fpgaCreate.c.

545 {
546  pNodeNew->pNextE = pNodeOld->pNextE;
547  pNodeOld->pNextE = pNodeNew;
548  pNodeNew->pRepr = pNodeOld;
549 }
Fpga_Node_t * pRepr
Definition: fpgaInt.h:203
Fpga_Node_t * pNextE
Definition: fpgaInt.h:202
void Fpga_NodeSetData0 ( Fpga_Node_t p,
char *  pData 
)

Definition at line 108 of file fpgaCreate.c.

108 { p->pData0 = pData; }
void Fpga_NodeSetData1 ( Fpga_Node_t p,
Fpga_Node_t pNode 
)

Definition at line 109 of file fpgaCreate.c.

109 { p->pLevel = pNode; }
Fpga_Node_t * pLevel
Definition: fpgaInt.h:184
void Fpga_NodeSetNextE ( Fpga_Node_t p,
Fpga_Node_t pNextE 
)

Definition at line 110 of file fpgaCreate.c.

110 { p->pNextE = pNextE; }
Fpga_Node_t * pNextE
Definition: fpgaInt.h:202
void Fpga_NodeSetRepr ( Fpga_Node_t p,
Fpga_Node_t pRepr 
)

Definition at line 111 of file fpgaCreate.c.

111 { p->pRepr = pRepr; }
Fpga_Node_t * pRepr
Definition: fpgaInt.h:203
void Fpga_NodeSetSwitching ( Fpga_Node_t p,
float  Switching 
)

Definition at line 112 of file fpgaCreate.c.

112 { p->Switching = Switching; }
void Fpga_TableCreate ( Fpga_Man_t pMan)
static

DECLARATIONS ///.

CFile****************************************************************

FileName [fpgaCreate.c]

PackageName [MVSIS 1.3: Multi-valued logic synthesis system.]

Synopsis [Technology mapping for variable-size-LUT FPGAs.]

Author [MVSIS Group]

Affiliation [UC Berkeley]

Date [Ver. 2.0. Started - August 18, 2004.]

Revision [

Id:
fpgaCreate.c,v 1.8 2004/09/30 21:18:09 satrajit Exp

]

Function*************************************************************

Synopsis [Create the unique table of AND gates.]

Description []

SideEffects []

SeeAlso []

Definition at line 342 of file fpgaCreate.c.

343 {
344  assert( pMan->pBins == NULL );
345  pMan->nBins = Abc_PrimeCudd(50000);
346  pMan->pBins = ABC_ALLOC( Fpga_Node_t *, pMan->nBins );
347  memset( pMan->pBins, 0, sizeof(Fpga_Node_t *) * pMan->nBins );
348  pMan->nNodes = 0;
349 }
char * memset()
static int Abc_PrimeCudd(unsigned int p)
Definition: abc_global.h:383
#define ABC_ALLOC(type, num)
Definition: abc_global.h:229
#define assert(ex)
Definition: util_old.h:213
Fpga_Node_t ** pBins
Definition: fpgaInt.h:102
Fpga_Node_t * Fpga_TableLookup ( Fpga_Man_t pMan,
Fpga_Node_t p1,
Fpga_Node_t p2 
)
static

Function*************************************************************

Synopsis [Looks up the AND2 node in the unique table.]

Description [This procedure implements one-level hashing. All the nodes are hashed by their children. If the node with the same children was already created, it is returned by the call to this procedure. If it does not exist, this procedure creates a new node with these children. ]

SideEffects []

SeeAlso []

Definition at line 365 of file fpgaCreate.c.

366 {
367  Fpga_Node_t * pEnt;
368  unsigned Key;
369 
370  if ( p1 == p2 )
371  return p1;
372  if ( p1 == Fpga_Not(p2) )
373  return Fpga_Not(pMan->pConst1);
374  if ( Fpga_NodeIsConst(p1) )
375  {
376  if ( p1 == pMan->pConst1 )
377  return p2;
378  return Fpga_Not(pMan->pConst1);
379  }
380  if ( Fpga_NodeIsConst(p2) )
381  {
382  if ( p2 == pMan->pConst1 )
383  return p1;
384  return Fpga_Not(pMan->pConst1);
385  }
386 
387  if ( Fpga_Regular(p1)->Num > Fpga_Regular(p2)->Num )
388  pEnt = p1, p1 = p2, p2 = pEnt;
389 
390  Key = Fpga_HashKey2( p1, p2, pMan->nBins );
391  for ( pEnt = pMan->pBins[Key]; pEnt; pEnt = pEnt->pNext )
392  if ( pEnt->p1 == p1 && pEnt->p2 == p2 )
393  return pEnt;
394  // resize the table
395  if ( pMan->nNodes >= 2 * pMan->nBins )
396  {
397  Fpga_TableResize( pMan );
398  Key = Fpga_HashKey2( p1, p2, pMan->nBins );
399  }
400  // create the new node
401  pEnt = Fpga_NodeCreate( pMan, p1, p2 );
402  // add the node to the corresponding linked list in the table
403  pEnt->pNext = pMan->pBins[Key];
404  pMan->pBins[Key] = pEnt;
405  return pEnt;
406 }
static void Fpga_TableResize(Fpga_Man_t *p)
Definition: fpgaCreate.c:420
Fpga_Node_t * Fpga_NodeCreate(Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
Definition: fpgaCreate.c:293
#define Fpga_Not(p)
Definition: fpga.h:59
Fpga_Node_t * p1
Definition: fpgaInt.h:200
int Fpga_NodeIsConst(Fpga_Node_t *p)
Definition: fpgaCreate.c:125
Fpga_Node_t * pNext
Definition: fpgaInt.h:183
Fpga_Node_t * pConst1
Definition: fpgaInt.h:110
static unsigned Fpga_HashKey2(Fpga_Node_t *p0, Fpga_Node_t *p1, int TableSize)
Definition: fpgaCreate.c:34
#define Fpga_Regular(p)
Definition: fpga.h:58
Fpga_Node_t * p2
Definition: fpgaInt.h:201
Fpga_Node_t ** pBins
Definition: fpgaInt.h:102
void Fpga_TableResize ( Fpga_Man_t pMan)
static

Function*************************************************************

Synopsis [Resizes the table.]

Description []

SideEffects []

SeeAlso []

Definition at line 420 of file fpgaCreate.c.

421 {
422  Fpga_Node_t ** pBinsNew;
423  Fpga_Node_t * pEnt, * pEnt2;
424  int nBinsNew, Counter, i;
425  clock_t clk;
426  unsigned Key;
427 
428 clk = clock();
429  // get the new table size
430  nBinsNew = Abc_PrimeCudd(2 * pMan->nBins);
431  // allocate a new array
432  pBinsNew = ABC_ALLOC( Fpga_Node_t *, nBinsNew );
433  memset( pBinsNew, 0, sizeof(Fpga_Node_t *) * nBinsNew );
434  // rehash the entries from the old table
435  Counter = 0;
436  for ( i = 0; i < pMan->nBins; i++ )
437  for ( pEnt = pMan->pBins[i], pEnt2 = pEnt? pEnt->pNext: NULL; pEnt;
438  pEnt = pEnt2, pEnt2 = pEnt? pEnt->pNext: NULL )
439  {
440  Key = Fpga_HashKey2( pEnt->p1, pEnt->p2, nBinsNew );
441  pEnt->pNext = pBinsNew[Key];
442  pBinsNew[Key] = pEnt;
443  Counter++;
444  }
445  assert( Counter == pMan->nNodes - pMan->nInputs );
446  if ( pMan->fVerbose )
447  {
448 // printf( "Increasing the unique table size from %6d to %6d. ", pMan->nBins, nBinsNew );
449 // ABC_PRT( "Time", clock() - clk );
450  }
451  // replace the table and the parameters
452  ABC_FREE( pMan->pBins );
453  pMan->pBins = pBinsNew;
454  pMan->nBins = nBinsNew;
455 }
char * memset()
static int Abc_PrimeCudd(unsigned int p)
Definition: abc_global.h:383
#define ABC_ALLOC(type, num)
Definition: abc_global.h:229
Fpga_Node_t * p1
Definition: fpgaInt.h:200
Fpga_Node_t * pNext
Definition: fpgaInt.h:183
static int Counter
static unsigned Fpga_HashKey2(Fpga_Node_t *p0, Fpga_Node_t *p1, int TableSize)
Definition: fpgaCreate.c:34
#define ABC_FREE(obj)
Definition: abc_global.h:232
#define assert(ex)
Definition: util_old.h:213
Fpga_Node_t * p2
Definition: fpgaInt.h:201
Fpga_Node_t ** pBins
Definition: fpgaInt.h:102