From 8b24f6bff92d93c3a4def93b8872105c861d1285 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Sun, 18 May 2008 08:01:00 -0700 Subject: Version abc80518 --- src/aig/saig/saigRetStep.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/aig/saig/saigRetStep.c') 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; } //////////////////////////////////////////////////////////////////////// -- cgit v1.2.3