diff options
Diffstat (limited to 'src/aig/nwk/nwkAig.c')
-rw-r--r-- | src/aig/nwk/nwkAig.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/src/aig/nwk/nwkAig.c b/src/aig/nwk/nwkAig.c new file mode 100644 index 00000000..7421348a --- /dev/null +++ b/src/aig/nwk/nwkAig.c @@ -0,0 +1,107 @@ +/**CFile**************************************************************** + + FileName [nwkAig.c] + + SystemName [ABC: Logic synthesis and verification system.] + + PackageName [Netlist representation.] + + Synopsis [Translating of AIG into the network.] + + Author [Alan Mishchenko] + + Affiliation [UC Berkeley] + + Date [Ver. 1.0. Started - June 20, 2005.] + + Revision [$Id: nwkAig.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] + +***********************************************************************/ + +#include "nwk.h" + +//////////////////////////////////////////////////////////////////////// +/// DECLARATIONS /// +//////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////// +/// FUNCTION DEFINITIONS /// +//////////////////////////////////////////////////////////////////////// + +/**Function************************************************************* + + Synopsis [Converts AIG into the network.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +Nwk_Man_t * Nwk_ManDeriveFromAig( Aig_Man_t * p ) +{ + Nwk_Man_t * pNtk; + Aig_Obj_t * pObj; + int i; + pNtk = Nwk_ManAlloc(); + pNtk->nFanioPlus = 0; + Hop_ManStop( pNtk->pManHop ); + pNtk->pManHop = NULL; + pNtk->pName = Aig_UtilStrsav( p->pName ); + pNtk->pSpec = Aig_UtilStrsav( p->pSpec ); + pObj = Aig_ManConst1(p); + pObj->pData = Nwk_ManCreateNode( pNtk, 0, pObj->nRefs ); + Aig_ManForEachPi( p, pObj, i ) + pObj->pData = Nwk_ManCreateCi( pNtk, pObj->nRefs ); + Aig_ManForEachNode( p, pObj, i ) + { + pObj->pData = Nwk_ManCreateNode( pNtk, 2, pObj->nRefs ); + Nwk_ObjAddFanin( pObj->pData, Aig_ObjFanin0(pObj)->pData ); + Nwk_ObjAddFanin( pObj->pData, Aig_ObjFanin1(pObj)->pData ); + } + Aig_ManForEachPo( p, pObj, i ) + { + pObj->pData = Nwk_ManCreateCo( pNtk ); + Nwk_ObjAddFanin( pObj->pData, Aig_ObjFanin0(pObj)->pData ); + } + return pNtk; +} + +/**Function************************************************************* + + Synopsis [Converts AIG into the network.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +Vec_Ptr_t * Nwk_ManDeriveRetimingCut( Aig_Man_t * p, int fForward, int fVerbose ) +{ + Vec_Ptr_t * vNodes; + Nwk_Man_t * pNtk; + Nwk_Obj_t * pNode; + Aig_Obj_t * pObj; + int i; + pNtk = Nwk_ManDeriveFromAig( p ); + if ( fForward ) + vNodes = Nwk_ManRetimeCutForward( pNtk, Aig_ManRegNum(p), fVerbose ); + else + vNodes = Nwk_ManRetimeCutBackward( pNtk, Aig_ManRegNum(p), fVerbose ); + Aig_ManForEachObj( p, pObj, i ) + ((Nwk_Obj_t *)pObj->pData)->pCopy = pObj; + Vec_PtrForEachEntry( vNodes, pNode, i ) + Vec_PtrWriteEntry( vNodes, i, pNode->pCopy ); + Nwk_ManFree( pNtk ); + assert( Vec_PtrSize(vNodes) <= Aig_ManRegNum(p) ); + return vNodes; +} + +//////////////////////////////////////////////////////////////////////// +/// END OF FILE /// +//////////////////////////////////////////////////////////////////////// + + |