35static Fpga_Man_t * Abc_NtkToFpga(
Abc_Ntk_t * pNtk,
int fRecovery,
float * pSwitching,
int fLatchPaths,
int fVerbose );
56 int fShowSwitching = 1;
60 float * pSwitching = NULL;
63 assert( Abc_NtkIsStrash(pNtk) );
67 Abc_Print( 0,
"Performing LUT mapping with %d choices.\n", Num );
70 fShowSwitching |= fSwitching;
75 pSwitching = (
float *)vSwitching->pArray;
79 pMan = Abc_NtkToFpga( pNtk, fRecovery, pSwitching, fLatchPaths, fVerbose );
80 if ( pSwitching ) {
assert(vSwitching); Vec_IntFree( vSwitching ); }
94 pNtkNew = Abc_NtkFromFpga( pMan, pNtk );
95 if ( pNtkNew == NULL )
108 printf(
"Abc_NtkFpga: The network check has failed.\n" );
126Fpga_Man_t * Abc_NtkToFpga(
Abc_Ntk_t * pNtk,
int fRecovery,
float * pSwitching,
int fLatchPaths,
int fVerbose )
136 assert( Abc_NtkIsStrash(pNtk) );
139 pMan =
Fpga_ManCreate( Abc_NtkCiNum(pNtk), Abc_NtkCoNum(pNtk), fVerbose );
147 for ( i = 0; i < Abc_NtkPiNum(pNtk); i++ )
168 Extra_ProgressBarUpdate( pProgress, i, NULL );
171 Fpga_NotCond( Abc_ObjFanin0(pNode)->pCopy, Abc_ObjFaninC0(pNode) ),
172 Fpga_NotCond( Abc_ObjFanin1(pNode)->pCopy, Abc_ObjFaninC1(pNode) ) );
179 if ( Abc_AigNodeIsChoice( pNode ) )
187 Vec_PtrFree( vNodes );
226 Extra_ProgressBarUpdate( pProgress, i, NULL );
228 assert( !Abc_ObjIsComplement(pNodeNew) );
229 Abc_ObjFanin0(pNode)->pCopy = pNodeNew;
236 if ( Abc_ObjFanoutNum(pNodeNew) == 0 )
241 printf(
"Duplicated %d gates to decouple the CO drivers.\n", nDupGates );
273 pNodeNew = Abc_NtkCreateNode( pNtkNew );
274 for ( i = 0; i < nLeaves; i++ )
275 Abc_ObjAddFanin( pNodeNew, Abc_NodeFromFpga_rec(pNtkNew, ppLeaves[i]) );
Abc_Ntk_t * Abc_NtkFpga(Abc_Ntk_t *pNtk, float DelayTarget, int fRecovery, int fSwitching, int fLatchPaths, int fVerbose)
FUNCTION DEFINITIONS ///.
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
ABC_DLL Vec_Ptr_t * Abc_AigDfs(Abc_Ntk_t *pNtk, int fCollectAll, int fCollectCos)
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL void Abc_NtkDeleteObj(Abc_Obj_t *pObj)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst1(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkGetChoiceNum(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL void Abc_NtkFinalize(Abc_Ntk_t *pNtk, Abc_Ntk_t *pNtkNew)
ABC_DLL int Abc_NtkLogicMakeSimpleCos(Abc_Ntk_t *pNtk, int fDuplicate)
ABC_DLL char ** Abc_NtkCollectCioNames(Abc_Ntk_t *pNtk, int fCollectCos)
ABC_DLL int Abc_NtkMinimumBase(Abc_Ntk_t *pNtk)
DECLARATIONS ///.
#define Abc_NtkForEachCi(pNtk, pCi, i)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NtkCleanCopy(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
ABC_DLL Abc_Ntk_t * Abc_NtkDup(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
ABC_DLL float * Abc_NtkGetCiArrivalFloats(Abc_Ntk_t *pNtk)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
struct Fpga_NodeStruct_t_ Fpga_Node_t
void Fpga_ManFree(Fpga_Man_t *pMan)
Fpga_Node_t * Fpga_ManReadConst1(Fpga_Man_t *p)
Fpga_Cut_t * Fpga_NodeReadCutBest(Fpga_Node_t *p)
struct Fpga_ManStruct_t_ Fpga_Man_t
STRUCTURE DEFINITIONS ///.
#define Fpga_NotCond(p, c)
int Fpga_CutReadLeavesNum(Fpga_Cut_t *p)
char * Fpga_NodeReadData0(Fpga_Node_t *p)
Fpga_Node_t ** Fpga_CutReadLeaves(Fpga_Cut_t *p)
void Fpga_ManSetDelayTarget(Fpga_Man_t *p, float DelayTarget)
struct Fpga_CutStruct_t_ Fpga_Cut_t
Fpga_Node_t ** Fpga_ManReadInputs(Fpga_Man_t *p)
void Fpga_NodeSetRepr(Fpga_Node_t *p, Fpga_Node_t *pRepr)
void Fpga_ManSetInputArrivals(Fpga_Man_t *p, float *pArrivals)
#define Fpga_IsComplement(p)
GLOBAL VARIABLES ///.
Fpga_Node_t ** Fpga_ManReadOutputs(Fpga_Man_t *p)
void Fpga_NodeSetNextE(Fpga_Node_t *p, Fpga_Node_t *pNextE)
void Fpga_ManSetOutputNames(Fpga_Man_t *p, char **ppNames)
void Fpga_ManSetSwitching(Fpga_Man_t *p, int fSwitching)
int Fpga_ManReadVerbose(Fpga_Man_t *p)
void * Fpga_TruthsCutBdd(void *dd, Fpga_Cut_t *pCut)
int Fpga_Mapping(Fpga_Man_t *p)
FUNCTION DEFINITIONS ///.
void Fpga_CutsCleanSign(Fpga_Man_t *pMan)
void Fpga_ManSetAreaRecovery(Fpga_Man_t *p, int fAreaRecovery)
void Fpga_NodeSetData0(Fpga_Node_t *p, char *pData)
int Fpga_NodeIsAnd(Fpga_Node_t *p)
Fpga_Man_t * Fpga_ManCreate(int nInputs, int nOutputs, int fVerbose)
FUNCTION DEFINITIONS ///.
void Fpga_ManSetLatchPaths(Fpga_Man_t *p, int fLatchPaths)
void Fpga_NodeSetSwitching(Fpga_Node_t *p, float Switching)
void Fpga_ManSetLatchNum(Fpga_Man_t *p, int nLatches)
Fpga_Node_t * Fpga_NodeAnd(Fpga_Man_t *p, Fpga_Node_t *p1, Fpga_Node_t *p2)
void Fpga_ManCleanData0(Fpga_Man_t *pMan)
Vec_Int_t * Sim_NtkComputeSwitching(Abc_Ntk_t *pNtk, int nPatterns)
FUNCTION DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.