/**Function************************************************************* Synopsis [Returns the maximum latch number on any of the fanouts.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Seq_NtkLevelMax( Abc_Ntk_t * pNtk ) { Abc_Obj_t * pNode; int i, Result; assert( Abc_NtkIsSeq(pNtk) ); Result = 0; Abc_NtkForEachPo( pNtk, pNode, i ) { pNode = Abc_ObjFanin0(pNode); if ( Result < (int)pNode->Level ) Result = pNode->Level; }
/**Function************************************************************* Synopsis [Maps virtual latches into real latches.] Description [Creates new latches and assigns them to virtual latches on the edges of a sequential AIG. The nodes of the new network should be created before this procedure is called.] SideEffects [] SeeAlso [] ***********************************************************************/ void Seq_NtkShareLatches( Abc_Ntk_t * pNtkNew, Abc_Ntk_t * pNtk ) { Abc_Obj_t * pObj, * pFanin; stmm_table * tLatchMap; int i; assert( Abc_NtkIsSeq( pNtk ) ); tLatchMap = stmm_init_table( stmm_ptrcmp, stmm_ptrhash ); Abc_AigForEachAnd( pNtk, pObj, i ) { pFanin = Abc_ObjFanin0(pObj); Seq_NtkShareLatches_rec( pNtkNew, pFanin->pCopy, Seq_NodeGetRing(pObj,0), Seq_NodeCountLats(pObj,0), tLatchMap ); pFanin = Abc_ObjFanin1(pObj); Seq_NtkShareLatches_rec( pNtkNew, pFanin->pCopy, Seq_NodeGetRing(pObj,1), Seq_NodeCountLats(pObj,1), tLatchMap ); }