52 assert( Saig_ManRegNum(
p) > 0 );
53 assert( Aig_ObjIsNode(pObj) );
56 pFanin0 = Aig_ObjFanin0(pObj);
57 pFanin1 = Aig_ObjFanin1(pObj);
59 if ( !Aig_ObjIsCi(pFanin0) || !Aig_ObjIsCi(pFanin1) )
63 if ( !Saig_ObjIsLo(
p, pFanin0) || !Saig_ObjIsLo(
p, pFanin1) )
65 assert( Aig_ObjCioId(pFanin0) > 0 );
66 assert( Aig_ObjCioId(pFanin1) > 0 );
69 if ( !Aig_ObjIsTravIdCurrent(
p, pFanin0) && !Aig_ObjIsTravIdCurrent(
p, pFanin1) )
73 pInput0 = Saig_ManLi(
p, Aig_ObjCioId(pFanin0) - Saig_ManPiNum(
p) );
74 pInput1 = Saig_ManLi(
p, Aig_ObjCioId(pFanin1) - Saig_ManPiNum(
p) );
75 pInput0 = Aig_ObjChild0( pInput0 );
76 pInput1 = Aig_ObjChild0( pInput1 );
77 pInput0 = Aig_NotCond( pInput0, Aig_ObjFaninC0(pObj) );
78 pInput1 = Aig_NotCond( pInput1, Aig_ObjFaninC1(pObj) );
80 fCompl = Aig_ObjFaninC0(pObj) && Aig_ObjFaninC1(pObj);
84 printf(
"Introducing bug during retiming.\n" );
85 pInput1 = Aig_Not( pInput1 );
89 pObjNew =
Aig_And(
p, pInput0, pInput1 );
93 pObjLi->
CioId = Aig_ManCoNum(
p) - 1;
97 pObjLo->
CioId = Aig_ManCiNum(
p) - 1;
101 Aig_ObjSetTravIdCurrent(
p, pObjLo);
107 return Aig_NotCond( pObjLo, fCompl );
127 int fCompl0, fCompl1;
129 assert( Saig_ManRegNum(
p) > 0 );
130 assert( Aig_ObjCioId(pObjLo) > 0 );
131 assert( Saig_ObjIsLo(
p, pObjLo) );
134 pObjLi = Saig_ManLi(
p, Aig_ObjCioId(pObjLo) - Saig_ManPiNum(
p) );
137 pObj = Aig_ObjFanin0(pObjLi);
138 if ( !Aig_ObjIsNode(pObj) )
142 pFanin0 = Aig_ObjFanin0(pObj);
143 pFanin1 = Aig_ObjFanin1(pObj);
146 fCompl0 = Aig_ObjFaninC0(pObj) ^ Aig_ObjFaninC0(pObjLi);
147 fCompl1 = Aig_ObjFaninC1(pObj) ^ Aig_ObjFaninC0(pObjLi);
151 pLi0New->
CioId = Aig_ManCoNum(
p) - 1;
153 pLi1New->
CioId = Aig_ManCoNum(
p) - 1;
157 pLo0New->
CioId = Aig_ManCiNum(
p) - 1;
159 pLo1New->
CioId = Aig_ManCiNum(
p) - 1;
160 pLo0New = Aig_NotCond( pLo0New, fCompl0 );
161 pLo1New = Aig_NotCond( pLo1New, fCompl1 );
165 pObjNew =
Aig_And(
p, pLo0New, pLo1New );
191 for ( s = 0; s < nSteps; s++ )
197 if ( pObjNew == NULL )
202 if ( i == Vec_PtrSize(
p->vObjs) )
208 for ( s = 0; s < nSteps; s++ )
213 if ( pObjNew == NULL )
218 if ( i == Vec_PtrSize(
p->vObjs) )
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManFanoutStart(Aig_Man_t *p)
FUNCTION DEFINITIONS ///.
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
void Aig_ManSetCioIds(Aig_Man_t *p)
void Aig_ManFanoutStop(Aig_Man_t *p)
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
struct Aig_Obj_t_ Aig_Obj_t
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
int Aig_ManCleanup(Aig_Man_t *p)
void Aig_ObjReplace(Aig_Man_t *p, Aig_Obj_t *pObjOld, Aig_Obj_t *pObjNew, int fUpdateLevel)
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
ABC_NAMESPACE_IMPL_START Aig_Obj_t * Saig_ManRetimeNodeFwd(Aig_Man_t *p, Aig_Obj_t *pObj, int fMakeBug)
DECLARATIONS ///.
Aig_Obj_t * Saig_ManRetimeNodeBwd(Aig_Man_t *p, Aig_Obj_t *pObjLo)
int Saig_ManRetimeSteps(Aig_Man_t *p, int nSteps, int fForward, int fAddBugs)
void Saig_ManMarkAutonomous(Aig_Man_t *p)
#define Saig_ManForEachLo(p, pObj, i)