/**Function************************************************************* Synopsis [Returns 1 if simulation info is composed of all zeros.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Ssw_SmlNodeIsZero( Ssw_Sml_t * p, Aig_Obj_t * pObj ) { unsigned * pSims; int i; pSims = Ssw_ObjSim(p, pObj->Id); for ( i = p->nWordsPref; i < p->nWordsTotal; i++ ) if ( pSims[i] ) return 0; return 1; }
/**Function************************************************************* Synopsis [Counts the number of 1s in the implication.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Ssw_SmlCountXorImplication( Ssw_Sml_t * p, Aig_Obj_t * pObjLi, Aig_Obj_t * pObjLo, Aig_Obj_t * pCand ) { unsigned * pSimLi, * pSimLo, * pSimCand; int k, Counter = 0; assert( pObjLo->fPhase == 0 ); // pObjLi->fPhase may be 1, but the LI simulation data is not complemented! pSimCand = Ssw_ObjSim( p, Aig_Regular(pCand)->Id ); pSimLi = Ssw_ObjSim( p, pObjLi->Id ); pSimLo = Ssw_ObjSim( p, pObjLo->Id ); if ( Aig_Regular(pCand)->fPhase ^ Aig_IsComplement(pCand) ) { for ( k = p->nWordsPref; k < p->nWordsTotal; k++ ) Counter += Aig_WordCountOnes(~pSimCand[k] & ~(pSimLi[k] ^ pSimLo[k])); } else { for ( k = p->nWordsPref; k < p->nWordsTotal; k++ ) Counter += Aig_WordCountOnes(pSimCand[k] & ~(pSimLi[k] ^ pSimLo[k])); } return Counter; }
/**Function************************************************************* Synopsis [Counts the number of one's in the patten the object.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Ssw_SmlNodeCountOnesReal( Ssw_Sml_t * p, Aig_Obj_t * pObj ) { unsigned * pSims; int i, Counter = 0; pSims = Ssw_ObjSim(p, Aig_Regular(pObj)->Id); if ( Aig_Regular(pObj)->fPhase ^ Aig_IsComplement(pObj) ) { for ( i = 0; i < p->nWordsTotal; i++ ) Counter += Aig_WordCountOnes( ~pSims[i] ); } else { for ( i = 0; i < p->nWordsTotal; i++ ) Counter += Aig_WordCountOnes( pSims[i] ); } return Counter; }
/**Function************************************************************* Synopsis [Counts the number of one's in the patten the object.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Ssw_SmlNodeCountOnesRealVec( Ssw_Sml_t * p, Vec_Ptr_t * vObjs ) { Aig_Obj_t * pObj; unsigned * pSims, uWord; int i, k, Counter = 0; if ( Vec_PtrSize(vObjs) == 0 ) return 0; for ( i = 0; i < p->nWordsTotal; i++ ) { uWord = 0; Vec_PtrForEachEntry( Aig_Obj_t *, vObjs, pObj, k ) { pSims = Ssw_ObjSim(p, Aig_Regular(pObj)->Id); if ( Aig_Regular(pObj)->fPhase ^ Aig_IsComplement(pObj) ) uWord |= ~pSims[i]; else uWord |= pSims[i]; } Counter += Aig_WordCountOnes( uWord ); }
/**Function************************************************************* Synopsis [Returns 1 if simulation info is composed of all zeros.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Ssw_SmlNodeIsZeroFrame( Ssw_Sml_t * p, Aig_Obj_t * pObj, int f ) { unsigned * pSims = Ssw_ObjSim(p, pObj->Id); return pSims[f] == 0; }