52static inline void Saig_ManStartMap1(
Aig_Man_t *
p,
int nFrames )
57 vMap = Vec_IntAlloc( Aig_ManObjNumMax(
p) * nFrames );
58 for ( i = 0; i < vMap->nCap; i++ )
60 vMap->nSize = vMap->nCap;
63static inline void Saig_ManStopMap1(
Aig_Man_t *
p )
69static inline int Saig_ManHasMap1(
Aig_Man_t *
p )
71 return (
int)(
p->pData != NULL);
76 int nOffset = f1 * Aig_ManObjNumMax(
p) + pOld->Id;
77 assert( !Aig_IsComplement(pOld) );
78 assert( !Aig_IsComplement(pNew) );
79 Vec_IntWriteEntry( vMap, nOffset, pNew->Id );
84 int nOffset = f1 * Aig_ManObjNumMax(
p) + pOld->Id;
85 return Vec_IntEntry( vMap, nOffset );
99static inline void Saig_ManStartMap2(
Aig_Man_t *
p,
int nFrames )
104 vMap = Vec_IntAlloc( Aig_ManObjNumMax(
p) * nFrames * 2 );
105 for ( i = 0; i < vMap->nCap; i++ )
106 vMap->pArray[i] = -1;
107 vMap->nSize = vMap->nCap;
110static inline void Saig_ManStopMap2(
Aig_Man_t *
p )
116static inline int Saig_ManHasMap2(
Aig_Man_t *
p )
118 return (
int)(
p->pData2 != NULL);
123 int nOffset = f1 * Aig_ManObjNumMax(
p) + pOld->Id;
124 assert( !Aig_IsComplement(pOld) );
125 assert( !Aig_IsComplement(pNew) );
126 Vec_IntWriteEntry( vMap, 2*nOffset + 0, pNew->Id );
127 Vec_IntWriteEntry( vMap, 2*nOffset + 1, f2 );
132 int nOffset = f1 * Aig_ManObjNumMax(
p) + pOld->Id;
133 *pf2 = Vec_IntEntry( vMap, 2*nOffset + 1 );
134 return Vec_IntEntry( vMap, 2*nOffset );
150 Aig_Obj_t * pObj, * pObjFrame, * pObjRepr;
151 int i, f, iNum, iFrame;
152 assert( pFrames->pReprs != NULL );
154 Saig_ManStartMap2( pAig, nFrames );
155 Saig_ManStartMap2( pFrames, 1 );
157 for ( f = 0; f < nFrames; f++ )
161 iNum = Saig_ManGetMap1( pAig, pObj, f );
162 pObjFrame = Aig_ManObj( pFrames, iNum );
164 if ( pObjFrame == NULL )
166 Saig_ManSetMap2( pAig, pObj, f, pObj, f );
170 pObjRepr = Aig_ObjRepr( pFrames, pObjFrame );
171 if ( pObjRepr == NULL )
172 pObjRepr = pObjFrame;
174 if ( Saig_ManGetMap2( pFrames, pObjRepr, 0, &iFrame ) == -1 )
175 Saig_ManSetMap2( pFrames, pObjRepr, 0, pObj, f );
177 iNum = Saig_ManGetMap2( pFrames, pObjRepr, 0, &iFrame );
178 Saig_ManSetMap2( pAig, pObj, f, Aig_ManObj(pAig, iNum), iFrame );
180 Saig_ManStopMap2( pFrames );
181 assert( Saig_ManHasMap2(pAig) );
200 assert( Saig_ManRegNum(pAig) > 0 );
202 Saig_ManStartMap1( pAig, nFrames );
204 pFrames =
Aig_ManStart( Aig_ManNodeNum(pAig) * nFrames );
206 Aig_ManConst1(pAig)->pData = Aig_ManConst1( pFrames );
211 for ( f = 0; f < nFrames; f++ )
218 pObj->
pData =
Aig_And( pFrames, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
224 pObj->
pData = Aig_ObjChild0Copy(pObj);
229 Saig_ManSetMap1( pAig, pObj, f, Aig_Regular((
Aig_Obj_t *)pObj->
pData) );
232 if ( f == nFrames - 1 )
259 Aig_Obj_t * pObj, * pObjLi, * pObjLo, * pRepr;
260 int i, f, iNum1, iNum2, iFrame2;
261 assert( nFrames <= nFramesMax );
262 assert( Saig_ManRegNum(pAig) > 0 );
264 Saig_ManStartMap1( pAig, nFramesMax );
266 pFrames =
Aig_ManStart( Aig_ManNodeNum(pAig) * nFramesMax );
272 pObj->
pData = Aig_ManConst0( pFrames );
273 Saig_ManSetMap1( pAig, pObj, 0, Aig_Regular((
Aig_Obj_t *)pObj->
pData) );
279 for ( f = 0; f < nFramesMax; f++ )
286 Saig_ManSetMap1( pAig, pObj, 0, Aig_Regular((
Aig_Obj_t *)pObj->
pData) );
290 for ( f = 0; f < nFramesMax; f++ )
293 pObj = Aig_ManConst1(pAig);
294 pObj->
pData = Aig_ManConst1( pFrames );
295 Saig_ManSetMap1( pAig, pObj, f, Aig_Regular((
Aig_Obj_t *)pObj->
pData) );
302 pObj->
pData = Aig_ManCi( pFrames, f * Saig_ManPiNum(pAig) + i );
303 Saig_ManSetMap1( pAig, pObj, f, Aig_Regular((
Aig_Obj_t *)pObj->
pData) );
308 pObj->
pData =
Aig_And( pFrames, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
309 Saig_ManSetMap1( pAig, pObj, f, Aig_Regular((
Aig_Obj_t *)pObj->
pData) );
310 if ( !Saig_ManHasMap2(pAig) )
315 iNum2 = Saig_ManGetMap2( pAig, pObj, f, &iFrame2 );
320 iNum2 = Saig_ManGetMap2( pAig, pObj, nFrames-1, &iFrame2 );
321 iFrame2 += f - (nFrames-1);
326 iNum1 = Saig_ManGetMap1( pAig, Aig_ManObj(pAig, iNum2), iFrame2 );
327 pRepr = Aig_ManObj( pFrames, iNum1 );
335 Saig_ManSetMap1( pAig, pObj, f, Aig_Regular((
Aig_Obj_t *)pObj->
pData) );
340 pObj->
pData = Aig_ObjChild0Copy(pObj);
341 Saig_ManSetMap1( pAig, pObj, f, Aig_Regular((
Aig_Obj_t *)pObj->
pData) );
344 if ( f == nFramesMax - 1 )
351 Saig_ManSetMap1( pAig, pObjLo, f+1, Aig_Regular((
Aig_Obj_t *)pObjLo->
pData) );
363 Saig_ManStopMap1( pAig );
381 Aig_Man_t * pFrames, * pFraig, * pRes1, * pRes2;
393ABC_PRT(
"Fraiging", Abc_Clock() - clk );
396 assert( pFrames->pReprs != NULL );
400 Saig_ManStopMap1( pAig );
404ABC_PRT(
"Mapped", Abc_Clock() - clk );
406 Saig_ManStopMap2( pAig );
409ABC_PRT(
"Normal", Abc_Clock() - clk );
417 assert( !Saig_ManHasMap1(pAig) );
418 assert( !Saig_ManHasMap2(pAig) );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(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
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
void Aig_ManPrintStats(Aig_Man_t *p)
#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)
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Aig_Man_t * Fra_FraigEquivence(Aig_Man_t *pManAig, int nConfMax, int fProve)
Aig_Man_t * Saig_ManTimeframeSimplify(Aig_Man_t *pAig, int nFrames, int nFramesMax, int fInit, int fVerbose)
void Saig_ManCreateMapping(Aig_Man_t *pAig, Aig_Man_t *pFrames, int nFrames)
Aig_Man_t * Saig_ManFramesInitialMapped(Aig_Man_t *pAig, int nFrames, int nFramesMax, int fInit)
Aig_Man_t * Saig_ManFramesNonInitial(Aig_Man_t *pAig, int nFrames)
#define Saig_ManForEachLiLo(p, pObjLi, pObjLo, i)
#define Saig_ManForEachLi(p, pObj, i)
#define Saig_ManForEachPo(p, pObj, i)
#define Saig_ManForEachLo(p, pObj, i)
#define Saig_ManForEachPi(p, pObj, i)