Files
abc/src/map/pga/pgaInt.h
T
2006-03-03 08:01:00 -08:00

133 lines
5.7 KiB
C

/**CFile****************************************************************
FileName [pgaInt.h]
SystemName [ABC: Logic synthesis and verification system.]
PackageName [FPGA mapper.]
Synopsis [Internal declarations.]
Author [Alan Mishchenko]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - June 20, 2005.]
Revision [$Id: pgaInt.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
***********************************************************************/
#ifndef __PGA_INT_H__
#define __PGA_INT_H__
////////////////////////////////////////////////////////////////////////
/// INCLUDES ///
////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include "abc.h"
#include "fraig.h"
#include "fpga.h"
#include "cut.h"
#include "pga.h"
////////////////////////////////////////////////////////////////////////
/// PARAMETERS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// BASIC TYPES ///
////////////////////////////////////////////////////////////////////////
typedef struct Pga_NodeStruct_t_ Pga_Node_t;
typedef struct Pga_MatchStruct_t_ Pga_Match_t;
struct Pga_ManStruct_t_
{
// mapping parameters
Pga_Params_t * pParams; // input data
// mapping structures
Pga_Node_t * pMemory; // the memory for all mapping structures
Vec_Ptr_t * vStructs; // mapping structures one-to-one with ABC nodes
Vec_Ptr_t * vOrdering; // mapping nodes ordered by level
// k-feasible cuts
int nVarsMax; // the "k" of k-feasible cuts
Cut_Man_t * pManCut; // the cut manager
// LUT library
float * pLutDelays; // the delay of the LUTs
float * pLutAreas; // the areas of the LUTs
float Epsilon;
// global parameters
float AreaGlobal; // the total area of this mapping
float ArrivalGlobal; // the largest delay of any path
float RequiredGlobal;// the global required time (may be different from largest delay)
float RequiredUser; // the required time given by the user
// runtime stats
int timeToMap; // the time to start the mapper
int timeCuts; // the time to compute the cuts
int timeDelay; // the time to compute delay
int timeAreaFlow; // the time to perform area flow optimization
int timeArea; // the time to perform area flow optimization
int timeToNet; // the time to transform back to network
int timeTotal; // the total time
int time1; // temporary
int time2; // temporary
};
struct Pga_MatchStruct_t_
{
Cut_Cut_t * pCut; // the best cut
float Delay; // the arrival time of this cut
float Area; // the area of this cut
};
struct Pga_NodeStruct_t_
{
int Id; // ID of the node
int nRefs; // the number of references
float EstRefs; // the estimated reference counter
float Required; // the required time
float Switching; // the switching activity
Pga_Match_t Match; // the best match at the node
};
////////////////////////////////////////////////////////////////////////
/// MACRO DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
static inline Pga_Node_t * Pga_Node( Pga_Man_t * p, int Id ) { return p->vStructs->pArray[Id]; }
// iterator through the CIs
#define Pga_ManForEachCi( p, pCi, i ) \
for ( i = 0; (i < Abc_NtkCiNum(p->pParams->pNtk)) && (((pCi) = Pga_Node(p, Abc_NtkCi(p->pParams->pNtk,i)->Id)), 1); i++ )
// iterator through the CO derivers
#define Pga_ManForEachCoDriver( p, pCo, i ) \
for ( i = 0; (i < Abc_NtkCoNum(p->pParams->pNtk)) && (((pCo) = Pga_Node(p, Abc_ObjFaninId0(Abc_NtkCo(p->pParams->pNtk,i)))), 1); i++ )
// iterators through the CIs and internal nodes
#define Pga_ManForEachObjDirect( p, pNode, i ) \
Vec_PtrForEachEntry( p->vOrdering, pNode, i )
#define Pga_ManForEachObjReverse( p, pNode, i ) \
Vec_PtrForEachEntryReverse( p->vOrdering, pNode, i )
////////////////////////////////////////////////////////////////////////
/// FUNCTION DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
/*=== pgaMatch.c ==========================================================*/
extern void Pga_MappingMatches( Pga_Man_t * p, int Mode );
/*=== pgaUtil.c ==========================================================*/
extern Vec_Ptr_t * Pga_MappingResults( Pga_Man_t * p );
extern float Pga_TimeComputeArrivalMax( Pga_Man_t * p );
extern void Pga_MappingComputeRequired( Pga_Man_t * p );
extern float Pga_MappingSetRefsAndArea( Pga_Man_t * p );
extern float Pga_MappingGetSwitching( Pga_Man_t * p );
extern void Pga_MappingPrintOutputArrivals( Pga_Man_t * p );
#endif
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////