// go through the modified nets Vec_PtrForEachEntry( Abc_Obj_t *, vUpdatedNets, pObj, i ) { assert( !Abc_ObjIsComplement(pObj) ); if ( Abc_ObjType(pObj) == ABC_OBJ_NONE ) // dead node continue; Abc_PlaceUpdateNet( pObj ); }
/**Function************************************************************* Synopsis [Sets polarity attribute of each object in the network.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Abc_NtkDressMapSetPolarity( Abc_Ntk_t * pNtk ) { Abc_Obj_t * pObj, * pAnd; int i; // each node refers to the the strash copy whose polarity is set Abc_NtkForEachObj( pNtk, pObj, i ) { if ( (pAnd = Abc_ObjRegular(pObj->pCopy)) && Abc_ObjType(pAnd) != ABC_OBJ_NONE ) // strashed object is present and legal pObj->fPhase = pAnd->fPhase ^ Abc_ObjIsComplement(pObj->pCopy); } }
int calc_depth(Abc_Obj_t * obj) { int i, depth; Abc_Obj_t * fanin; depth = 0; switch (Abc_ObjType(obj)) { case ABC_OBJ_NODE: case ABC_OBJ_PO: case ABC_OBJ_BI: Abc_ObjForEachFanin(obj, fanin, i) { Ace_Obj_Info_t * fanin_info = Ace_ObjInfo(fanin); depth = MAX(depth, fanin_info->depth); } return (depth + 1); default: return 0; }
/**Function************************************************************* Synopsis [Create mapping of node IDs of pNtk into equiv classes of pMiter.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ Vec_Int_t * Abc_NtkDressMapClasses( Aig_Man_t * pMiter, Abc_Ntk_t * pNtk ) { Vec_Int_t * vId2Lit; Abc_Obj_t * pObj, * pAnd; Aig_Obj_t * pObjMan, * pObjMiter, * pObjRepr; int i; vId2Lit = Vec_IntAlloc( 0 ); Vec_IntFill( vId2Lit, Abc_NtkObjNumMax(pNtk), -1 ); Abc_NtkForEachNode( pNtk, pObj, i ) { // get the pointer to the miter node corresponding to pObj if ( (pAnd = Abc_ObjRegular(pObj->pCopy)) && Abc_ObjType(pAnd) != ABC_OBJ_NONE && // strashed node is present and legal (pObjMan = Aig_Regular((Aig_Obj_t *)pAnd->pCopy)) && Aig_ObjType(pObjMan) != AIG_OBJ_NONE && // AIG node is present and legal (pObjMiter = Aig_Regular((Aig_Obj_t *)pObjMan->pData)) && Aig_ObjType(pObjMiter) != AIG_OBJ_NONE ) // miter node is present and legal { // get the representative of the miter node pObjRepr = Aig_ObjRepr( pMiter, pObjMiter ); pObjRepr = pObjRepr? pObjRepr : pObjMiter; // map pObj (whose ID is i) into the repr node ID (i.e. equiv class) Vec_IntWriteEntry( vId2Lit, i, Aig_ObjId(pObjRepr) ); } } return vId2Lit; }
void get_pi_values(Abc_Ntk_t * ntk, Vec_Ptr_t * nodes, int cycle) { Abc_Obj_t * obj; Ace_Obj_Info_t * info; int i; double prob0to1, prob1to0, rand_num; //Vec_PtrForEachEntry(Abc_Obj_t *, nodes, obj, i) Abc_NtkForEachObj(ntk, obj, i) { info = Ace_ObjInfo(obj); if (Abc_ObjType(obj) == ABC_OBJ_PI) { if (info->values) { if (info->status == ACE_UNDEF) { info->status = ACE_NEW; if (info->values[cycle] == 1) { info->value = 1; info->num_toggles = 1; info->num_ones = 1; } else { info->value = 0; info->num_toggles = 0; info->num_ones = 0; } } else { switch (info->value) { case 0: if (info->values[cycle] == 1) { info->value = 1; info->status = ACE_NEW; info->num_toggles++; info->num_ones++; } else { info->status = ACE_OLD; } break; case 1: if (info->values[cycle] == 0) { info->value = 0; info->status = ACE_NEW; info->num_toggles++; } else { info->num_ones++; info->status = ACE_OLD; } break; default: printf("Bad Value\n"); assert(0); break; } } } else { prob0to1 = ACE_P0TO1(info->static_prob, info->switch_prob); prob1to0 = ACE_P1TO0(info->static_prob, info->switch_prob); //We don't need a cryptographically secure random number //generator so suppress warning in coverity // //coverity[dont_call] rand_num = (double) rand() / (double) RAND_MAX; if (info->status == ACE_UNDEF) { info->status = ACE_NEW; if (rand_num < prob0to1) { info->value = 1; info->num_toggles = 1; info->num_ones = 1; } else { info->value = 0; info->num_toggles = 0; info->num_ones = 0; } } else { switch (info->value) { case 0: if (rand_num < prob0to1) { info->value = 1; info->status = ACE_NEW; info->num_toggles++; info->num_ones++; } else { info->status = ACE_OLD; } break; case 1: if (rand_num < prob1to0) { info->value = 0; info->status = ACE_NEW; info->num_toggles++; } else { info->num_ones++; info->status = ACE_OLD; } break; default: printf("Bad value\n"); assert(FALSE); break; } } } } }