summaryrefslogtreecommitdiffstats
path: root/src/temp/ivy/ivySeq.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2006-06-11 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2006-06-11 08:01:00 -0700
commit3db1557f45b03875a0a0b8adddcc15c4565895d2 (patch)
tree2896d20ddcb85ae4aa7245ca28bc585f567fea54 /src/temp/ivy/ivySeq.c
parent7d0921330b1f4e789901b4c2450920e7c412f95f (diff)
downloadabc-3db1557f45b03875a0a0b8adddcc15c4565895d2.tar.gz
abc-3db1557f45b03875a0a0b8adddcc15c4565895d2.tar.bz2
abc-3db1557f45b03875a0a0b8adddcc15c4565895d2.zip
Version abc60611
Diffstat (limited to 'src/temp/ivy/ivySeq.c')
-rw-r--r--src/temp/ivy/ivySeq.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/temp/ivy/ivySeq.c b/src/temp/ivy/ivySeq.c
new file mode 100644
index 00000000..d8fbdd9b
--- /dev/null
+++ b/src/temp/ivy/ivySeq.c
@@ -0,0 +1,101 @@
+/**CFile****************************************************************
+
+ FileName [ivySeq.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [And-Inverter Graph package.]
+
+ Synopsis []
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - May 11, 2006.]
+
+ Revision [$Id: ivySeq.c,v 1.00 2006/05/11 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "ivy.h"
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis [Converts a combinational AIG manager into a sequential one.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Ivy_ManMakeSeq( Ivy_Man_t * p, int nLatches )
+{
+ Vec_Int_t * vNodes;
+ Ivy_Obj_t * pObj, * pObjNew, * pFan0, * pFan1;
+ int i, fChanges;
+ assert( nLatches < Ivy_ManPiNum(p) && nLatches < Ivy_ManPoNum(p) );
+ // change POs into buffers
+ assert( Ivy_ManPoNum(p) == Vec_IntSize(p->vPos) );
+ for ( i = Ivy_ManPoNum(p) - nLatches; i < Vec_IntSize(p->vPos); i++ )
+ {
+ pObj = Ivy_ManPo(p, i);
+ pObj->Type = IVY_BUF;
+ }
+ // change PIs into latches and connect them to the corresponding POs
+ assert( Ivy_ManPiNum(p) == Vec_IntSize(p->vPis) );
+ for ( i = Ivy_ManPiNum(p) - nLatches; i < Vec_IntSize(p->vPis); i++ )
+ {
+ pObj = Ivy_ManPi(p, i);
+ pObj->Type = IVY_LATCH;
+ Ivy_ObjConnect( pObj, Ivy_ManPo(p, Ivy_ManPoNum(p) - Ivy_ManPiNum(p)) );
+ }
+ // shrink the array
+ Vec_IntShrink( p->vPis, Ivy_ManPiNum(p) - nLatches );
+ Vec_IntShrink( p->vPos, Ivy_ManPoNum(p) - nLatches );
+ // update the counters of different objects
+ p->nObjs[IVY_PI] -= nLatches;
+ p->nObjs[IVY_PO] -= nLatches;
+ p->nObjs[IVY_BUF] += nLatches;
+ p->nObjs[IVY_LATCH] += nLatches;
+ // perform structural hashing while there are changes
+ fChanges = 1;
+ while ( fChanges )
+ {
+ fChanges = 0;
+ vNodes = Ivy_ManDfs( p );
+ Ivy_ManForEachNodeVec( p, vNodes, pObj, i )
+ {
+ if ( Ivy_ObjIsBuf(pObj) )
+ continue;
+ pFan0 = Ivy_NodeRealFanin_rec( pObj, 0 );
+ pFan1 = Ivy_NodeRealFanin_rec( pObj, 1 );
+ if ( Ivy_ObjIsAnd(pObj) )
+ pObjNew = Ivy_And(pFan0, pFan1);
+ else if ( Ivy_ObjIsExor(pObj) )
+ pObjNew = Ivy_Exor(pFan0, pFan1);
+ else assert( 0 );
+ if ( pObjNew == pObj )
+ continue;
+ Ivy_ObjReplace( pObj, pObjNew, 1, 1 );
+ fChanges = 1;
+ }
+ Vec_IntFree( vNodes );
+ }
+}
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+