53static inline void Abc_PlaceCreateCell(
Abc_Obj_t * pObj,
int fAnd )
75static inline void Abc_PlaceUpdateNet(
Abc_Obj_t * pObj )
80 if (
nets[pObj->
Id].m_terms )
84 nets[pObj->
Id].m_weight = 1.0;
85 nets[pObj->
Id].m_numTerms = Abc_ObjFanoutNum(pObj);
133 vCells = Vec_PtrAlloc( 16 );
134 vNets = Vec_PtrAlloc( 32 );
139 assert( !Abc_ObjIsComplement(pObj) );
140 Abc_PlaceCreateCell( pObj, 1 );
141 Abc_PlaceUpdateNet( pObj );
144 Vec_PtrPush( vCells, &(
cells[pObj->
Id]) );
146 Vec_PtrPushUnique( vNets, &(
nets[pFanin->
Id]) );
152 assert( !Abc_ObjIsComplement(pObj) );
155 Abc_PlaceUpdateNet( pObj );
163 Vec_PtrFree( vCells );
164 Vec_PtrFree( vNets );
208 Abc_PlaceCreateCell( pObj, 0 );
212 Abc_PlaceCreateCell( pObj, 0 );
216 Abc_PlaceCreateCell( pObj, 1 );
221 if ( !Abc_ObjIsCi(pObj) && !Abc_ObjIsNode(pObj) )
223 Abc_PlaceUpdateNet( pObj );
void Abc_PlaceUpdate(Vec_Ptr_t *vAddedCells, Vec_Ptr_t *vUpdatedNets)
ABC_NAMESPACE_IMPL_START AbstractCell * abstractCells
DECLARATIONS ///.
void Abc_PlaceBegin(Abc_Ntk_t *pNtk)
void Abc_PlaceEnd(Abc_Ntk_t *pNtk)
float Abc_PlaceEvaluateCut(Abc_Obj_t *pRoot, Vec_Ptr_t *vFanins)
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
#define Abc_AigForEachAnd(pNtk, pNode, i)
#define Abc_NtkForEachObj(pNtk, pObj, i)
ITERATORS ///.
#define Abc_ObjForEachFanin(pObj, pFanin, i)
#define Abc_ObjForEachFanout(pObj, pFanout, i)
struct Abc_Ntk_t_ Abc_Ntk_t
#define Abc_NtkForEachCi(pNtk, pCi, i)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define REALLOC(type, obj, num)
void addConcreteNet(ConcreteNet *net)
Adds a net to the placement database.
void addConcreteCell(ConcreteCell *cell)
void globalPreplace(float utilization)
Place pad ring, leaving a core area to meet a desired utilization.
void globalPlace()
Performs analytic placement using a GORDIAN-like algorithm.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.