75 return p->nMinDomSize;
110 int i, iOut, nCountPis, nCountRegs;
114 vRoots = Vec_IntAlloc( Vec_IntSize(vPart) );
116 Vec_IntPush( vRoots, Gia_ObjId(
p, Gia_ManCo(
p, Gia_ManPoNum(
p)+iOut)) );
118 Vec_IntFree( vRoots );
121 Gia_ObjSetTravIdPrevious(
p, Gia_ManCi(
p, Gia_ManPiNum(
p)+iOut) );
123 nCountPis = nCountRegs = 0;
125 nCountPis += Gia_ObjIsTravIdCurrent(
p, pObj);
128 nCountRegs += Gia_ObjIsTravIdCurrent(
p, pObj);
130 *pnCountPis = nCountPis;
132 *pnCountRegs = nCountRegs;
135 Gia_ManConst0(
p)->Value = 0;
140 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
141 pObj->
Value = Gia_ManAppendCi(pNew);
146 pObj = Gia_ManCi(
p, Gia_ManPiNum(
p)+iOut);
147 pObj->
Value = Gia_ManAppendCi(pNew);
148 Gia_ManAppendCo( pNew, pObj->
Value );
149 Gia_ObjSetTravIdCurrent(
p, pObj );
153 if ( Gia_ObjIsAnd(pObj) )
154 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
158 pObj = Gia_ManCo(
p, Gia_ManPoNum(
p)+iOut );
159 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
165 pMapBack =
ABC_FALLOC(
int, Gia_ManObjNum(pNew) );
173 assert( Abc_Lit2Var(Gia_ObjValue(pObj)) >= 0 );
174 assert( Abc_Lit2Var(Gia_ObjValue(pObj)) < Gia_ManObjNum(pNew) );
175 pMapBack[ Abc_Lit2Var(Gia_ObjValue(pObj)) ] = Gia_ObjId(
p, pObj);
180 pObj = Gia_ManCi(
p, Gia_ManPiNum(
p)+iOut);
183 assert( Abc_Lit2Var(Gia_ObjValue(pObj)) >= 0 );
184 assert( Abc_Lit2Var(Gia_ObjValue(pObj)) < Gia_ManObjNum(pNew) );
185 pMapBack[ Abc_Lit2Var(Gia_ObjValue(pObj)) ] = Gia_ObjId(
p, pObj);
187 *ppMapBack = pMapBack;
189 Vec_IntFree( vNodes );
207 int i, Id1, Id2, nClasses;
208 if ( pPart->
pReprs == NULL )
213 if ( Gia_ObjRepr(pPart, i) ==
GIA_VOID )
215 assert( i < Gia_ManObjNum(pPart) );
216 assert( Gia_ObjRepr(pPart, i) < Gia_ManObjNum(pPart) );
218 Id2 = pMapBack[ Gia_ObjRepr(pPart, i) ];
244 if ( pReprs[Id] == 0 )
246 if ( pReprs[Id] == ~0 )
268 for ( i = 0; i < Gia_ManObjNum(
p); i++ )
270 for ( i = 0; i < Gia_ManObjNum(
p); i++ )
272 if ( pReprs[i] == ~0 )
275 Gia_ObjSetRepr(
p, i, iRepr );
298 int * pMapBack, * pReprs;
299 int i, nCountPis, nCountRegs;
307 Abc_Print( 1,
"The following clock domains are used:\n" );
311 sprintf( Buffer,
"part%03d.aig", i );
313 Abc_Print( 1,
"part%03d.aig : Reg = %4d. PI = %4d. (True = %4d. Regs = %4d.) And = %5d.\n",
314 i, Vec_IntSize(vPart), Gia_ManCiNum(pTemp)-Vec_IntSize(vPart), nCountPis, nCountRegs, Gia_ManAndNum(pTemp) );
356 Abc_Print( 1,
"%3d : Reg = %4d. PI = %4d. (True = %4d. Regs = %4d.) And = %5d. Cl = %5d.\n",
357 i, Vec_IntSize(vPart), Gia_ManCiNum(pTemp)-Vec_IntSize(vPart), nCountPis, nCountRegs, Gia_ManAndNum(pTemp), nClasses );
370 Abc_PrintTime( 1,
"Total time", Abc_Clock() - clk );
389 int iVar, iVar0, iVar1;
390 if ( Vec_IntEntry(vSatVar, iObj) >= 0 )
391 return Vec_IntEntry(vSatVar, iObj);
393 Vec_IntWriteEntry( vSatVar, iObj, iVar );
394 pObj = Gia_ManObj(
p, iObj );
395 if ( Gia_ObjIsAnd(pObj) )
397 iVar0 = Gia_ManTestOnePair_rec( pSat,
p, Gia_ObjFaninId0(pObj, iObj), vSatVar );
398 iVar1 = Gia_ManTestOnePair_rec( pSat,
p, Gia_ObjFaninId1(pObj, iObj), vSatVar );
399 sat_solver_add_and( pSat, iVar, iVar0, iVar1, Gia_ObjFaninC0(pObj), Gia_ObjFaninC1(pObj), 0 );
405 int Lits[2] = {1}, status;
407 Vec_Int_t * vSatVar = Vec_IntStartFull( Gia_ManObjNum(
p) );
410 Gia_ManTestOnePair_rec( pSat,
p, iObj1, vSatVar );
411 Gia_ManTestOnePair_rec( pSat,
p, iObj2, vSatVar );
412 Lits[0] = Abc_Var2Lit( Vec_IntEntry(vSatVar, iObj1), 1 );
413 Lits[1] = Abc_Var2Lit( Vec_IntEntry(vSatVar, iObj2), fPhase );
417 Lits[0] = Abc_LitNot( Lits[0] );
418 Lits[1] = Abc_LitNot( Lits[1] );
421 Vec_IntFree( vSatVar );
#define ABC_FALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
#define sat_solver_addclause
#define sat_solver_addvar
#define sat_solver_add_and
int Cec_SequentialSynthesisPart(Gia_Man_t *p, Cec_ParSeq_t *pPars)
int Gia_ManTestOnePair(Gia_Man_t *p, int iObj1, int iObj2, int fPhase)
int Cec_SeqReadVerbose(Cec_ParSeq_t *p)
void Gia_ManNormalizeEquivalences(Gia_Man_t *p, int *pReprs)
Gia_Man_t * Gia_ManRegCreatePart(Gia_Man_t *p, Vec_Int_t *vPart, int *pnCountPis, int *pnCountRegs, int **ppMapBack)
int Gia_ManFindRepr_rec(int *pReprs, int Id)
int Gia_TransferMappedClasses(Gia_Man_t *pPart, int *pMapBack, int *pReprs)
ABC_NAMESPACE_IMPL_START void Cec_SeqSynthesisSetDefaultParams(Cec_ParSeq_t *p)
DECLARATIONS ///.
int Cec_SeqReadMinDomSize(Cec_ParSeq_t *p)
void Cec_ManCorSetDefaultParams(Cec_ParCor_t *p)
int Cec_ManLSCorrespondenceClasses(Gia_Man_t *pAig, Cec_ParCor_t *pPars)
struct Cec_ParSeq_t_ Cec_ParSeq_t
struct Cec_ParCor_t_ Cec_ParCor_t
void Gia_ManSeqCleanupClasses(Gia_Man_t *p, int fConst, int fEquiv, int fVerbose)
struct Gia_Rpr_t_ Gia_Rpr_t
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachRo(p, pObj, i)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
int * Gia_ManDeriveNexts(Gia_Man_t *p)
#define Gia_ManForEachPi(p, pObj, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
void Gia_ManFillValue(Gia_Man_t *p)
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
void Gia_ManIncrementTravId(Gia_Man_t *p)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
#define Gia_ManForEachCi(p, pObj, i)
Vec_Int_t * Gia_ManCollectNodesCis(Gia_Man_t *p, int *pNodes, int nNodes)
void Gia_AigerWrite(Gia_Man_t *p, char *pFileName, int fWriteSymbols, int fCompact, int fWriteNewLine)
sat_solver * sat_solver_new(void)
void sat_solver_delete(sat_solver *s)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.