summaryrefslogtreecommitdiffstats
path: root/src/aig/saig/saigRetStep.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2008-05-18 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2008-05-18 08:01:00 -0700
commit8b24f6bff92d93c3a4def93b8872105c861d1285 (patch)
treeebef4201d43a1d8bf27f6bc1d703b8e28dad2157 /src/aig/saig/saigRetStep.c
parent4d37d4d92fbc69a67a4e22af80a2acc42dff5e63 (diff)
downloadabc-8b24f6bff92d93c3a4def93b8872105c861d1285.tar.gz
abc-8b24f6bff92d93c3a4def93b8872105c861d1285.tar.bz2
abc-8b24f6bff92d93c3a4def93b8872105c861d1285.zip
Version abc80518
Diffstat (limited to 'src/aig/saig/saigRetStep.c')
-rw-r--r--src/aig/saig/saigRetStep.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/aig/saig/saigRetStep.c b/src/aig/saig/saigRetStep.c
index f7c27a93..fe726702 100644
--- a/src/aig/saig/saigRetStep.c
+++ b/src/aig/saig/saigRetStep.c
@@ -39,7 +39,7 @@
SeeAlso []
***********************************************************************/
-Aig_Obj_t * Saig_ManRetimeNodeFwd( Aig_Man_t * p, Aig_Obj_t * pObj )
+Aig_Obj_t * Saig_ManRetimeNodeFwd( Aig_Man_t * p, Aig_Obj_t * pObj, int fMakeBug )
{
Aig_Obj_t * pFanin0, * pFanin1;
Aig_Obj_t * pInput0, * pInput1;
@@ -72,6 +72,12 @@ Aig_Obj_t * Saig_ManRetimeNodeFwd( Aig_Man_t * p, Aig_Obj_t * pObj )
// get the condition when the register should be complemetned
fCompl = Aig_ObjFaninC0(pObj) && Aig_ObjFaninC1(pObj);
+ if ( fMakeBug )
+ {
+ printf( "Introducing bug during retiming.\n" );
+ pInput1 = Aig_Not( pInput1 );
+ }
+
// create new node
pObjNew = Aig_And( p, pInput0, pInput1 );
@@ -162,7 +168,7 @@ Aig_Obj_t * Saig_ManRetimeNodeBwd( Aig_Man_t * p, Aig_Obj_t * pObjLo )
SeeAlso []
***********************************************************************/
-void Saig_ManRetimeSteps( Aig_Man_t * p, int nSteps, int fForward )
+int Saig_ManRetimeSteps( Aig_Man_t * p, int nSteps, int fForward, int fAddBugs )
{
Aig_Obj_t * pObj, * pObjNew;
int RetValue, s, i;
@@ -175,12 +181,15 @@ void Saig_ManRetimeSteps( Aig_Man_t * p, int nSteps, int fForward )
{
Aig_ManForEachNode( p, pObj, i )
{
- pObjNew = Saig_ManRetimeNodeFwd( p, pObj );
+ pObjNew = Saig_ManRetimeNodeFwd( p, pObj, fAddBugs && (s == 10) );
+// pObjNew = Saig_ManRetimeNodeFwd( p, pObj, 0 );
if ( pObjNew == NULL )
continue;
Aig_ObjReplace( p, pObj, pObjNew, 0 );
break;
}
+ if ( i == Vec_PtrSize(p->vObjs) )
+ break;
}
}
else
@@ -195,6 +204,8 @@ void Saig_ManRetimeSteps( Aig_Man_t * p, int nSteps, int fForward )
Aig_ObjReplace( p, pObj, pObjNew, 0 );
break;
}
+ if ( i == Vec_PtrSize(p->vObjs) )
+ break;
}
}
p->fCreatePios = 0;
@@ -202,6 +213,7 @@ void Saig_ManRetimeSteps( Aig_Man_t * p, int nSteps, int fForward )
RetValue = Aig_ManCleanup( p );
assert( RetValue == 0 );
Aig_ManSetRegNum( p, p->nRegs );
+ return s;
}
////////////////////////////////////////////////////////////////////////