21#ifndef ABC__opt_sfmInt__h
22#define ABC__opt_sfmInt__h
51#define SFM_FANIN_MAX 12
52#define SFM_WORDS_MAX ((SFM_FANIN_MAX>6) ? (1<<(SFM_FANIN_MAX-6)) : 1)
53#define SFM_SAT_UNDEC 0x1234567812345678
54#define SFM_SAT_SAT 0x8765432187654321
57#define SFM_WORD_MAX ((SFM_SUPP_MAX>6) ? (1<<(SFM_SUPP_MAX-6)) : 1)
58#define SFM_WIN_MAX 1000
60#define SFM_SIM_WORDS 8
152static inline int Sfm_NtkPiNum(
Sfm_Ntk_t *
p ) {
return p->nPis; }
153static inline int Sfm_NtkPoNum(
Sfm_Ntk_t *
p ) {
return p->nPos; }
154static inline int Sfm_NtkNodeNum(
Sfm_Ntk_t *
p ) {
return p->nObjs -
p->nPis -
p->nPos; }
156static inline int Sfm_ObjIsPi(
Sfm_Ntk_t *
p,
int i ) {
return i <
p->nPis; }
157static inline int Sfm_ObjIsPo(
Sfm_Ntk_t *
p,
int i ) {
return i +
p->nPos >=
p->nObjs; }
158static inline int Sfm_ObjIsNode(
Sfm_Ntk_t *
p,
int i ) {
return i >=
p->nPis && i +
p->nPos <
p->nObjs; }
159static inline int Sfm_ObjIsFixed(
Sfm_Ntk_t *
p,
int i ) {
return Vec_StrEntry(
p->vFixed, i); }
160static inline int Sfm_ObjAddsLevelArray(
Vec_Str_t *
p,
int i ) {
return p == NULL || Vec_StrEntry(
p, i) == 0; }
161static inline int Sfm_ObjAddsLevel(
Sfm_Ntk_t *
p,
int i ) {
return Sfm_ObjAddsLevelArray(
p->vEmpty, i); }
163static inline Vec_Int_t * Sfm_ObjFiArray(
Sfm_Ntk_t *
p,
int i ) {
return Vec_WecEntry(&
p->vFanins, i); }
164static inline Vec_Int_t * Sfm_ObjFoArray(
Sfm_Ntk_t *
p,
int i ) {
return Vec_WecEntry(&
p->vFanouts, i); }
166static inline int Sfm_ObjFaninNum(
Sfm_Ntk_t *
p,
int i ) {
return Vec_IntSize(Sfm_ObjFiArray(
p, i)); }
167static inline int Sfm_ObjFanoutNum(
Sfm_Ntk_t *
p,
int i ) {
return Vec_IntSize(Sfm_ObjFoArray(
p, i)); }
169static inline int Sfm_ObjRefIncrement(
Sfm_Ntk_t *
p,
int iObj ) {
return ++Sfm_ObjFoArray(
p, iObj)->nSize; }
170static inline int Sfm_ObjRefDecrement(
Sfm_Ntk_t *
p,
int iObj ) {
return --Sfm_ObjFoArray(
p, iObj)->nSize; }
172static inline int Sfm_ObjFanin(
Sfm_Ntk_t *
p,
int i,
int k ) {
return Vec_IntEntry(Sfm_ObjFiArray(
p, i), k); }
173static inline int Sfm_ObjFanout(
Sfm_Ntk_t *
p,
int i,
int k ) {
return Vec_IntEntry(Sfm_ObjFoArray(
p, i), k); }
175static inline int Sfm_ObjSatVar(
Sfm_Ntk_t *
p,
int iObj ) {
assert(Vec_IntEntry(&
p->vId2Var, iObj) > 0);
return Vec_IntEntry(&
p->vId2Var, iObj); }
176static inline void Sfm_ObjSetSatVar(
Sfm_Ntk_t *
p,
int iObj,
int Num ) {
assert(Vec_IntEntry(&
p->vId2Var, iObj) == -1); Vec_IntWriteEntry(&
p->vId2Var, iObj, Num); Vec_IntWriteEntry(&
p->vVar2Id, Num, iObj); }
177static inline void Sfm_ObjCleanSatVar(
Sfm_Ntk_t *
p,
int Num ) {
int iObj = Vec_IntEntry(&
p->vVar2Id, Num);
assert(Vec_IntEntry(&
p->vId2Var, iObj) > 0); Vec_IntWriteEntry(&
p->vId2Var, iObj, -1); Vec_IntWriteEntry(&
p->vVar2Id, Num, -1); }
178static inline void Sfm_NtkCleanVars(
Sfm_Ntk_t *
p ) {
int i;
for ( i = 1; i <
p->nSatVars; i++ )
if ( Vec_IntEntry(&
p->vVar2Id, i) != -1 ) Sfm_ObjCleanSatVar(
p, i ); }
180static inline int Sfm_ObjLevel(
Sfm_Ntk_t *
p,
int iObj ) {
return Vec_IntEntry( &
p->vLevels, iObj ); }
181static inline void Sfm_ObjSetLevel(
Sfm_Ntk_t *
p,
int iObj,
int Lev ) { Vec_IntWriteEntry( &
p->vLevels, iObj, Lev ); }
183static inline int Sfm_ObjLevelR(
Sfm_Ntk_t *
p,
int iObj ) {
return Vec_IntEntry( &
p->vLevelsR, iObj ); }
184static inline void Sfm_ObjSetLevelR(
Sfm_Ntk_t *
p,
int iObj,
int Lev ) { Vec_IntWriteEntry( &
p->vLevelsR, iObj, Lev ); }
186static inline int Sfm_ObjUpdateFaninCount(
Sfm_Ntk_t *
p,
int iObj ) {
return Vec_IntAddToEntry(&
p->vCounts, iObj, -1); }
187static inline void Sfm_ObjResetFaninCount(
Sfm_Ntk_t *
p,
int iObj ) { Vec_IntWriteEntry(&
p->vCounts, iObj, Sfm_ObjFaninNum(
p, iObj)-1); }
195#define Sfm_NtkForEachPi( p, i ) for ( i = 0; i < p->nPis; i++ )
196#define Sfm_NtkForEachPo( p, i ) for ( i = p->nObjs - p->nPos; i < p->nObjs; i++ )
197#define Sfm_NtkForEachNode( p, i ) for ( i = p->nPis; i + p->nPos < p->nObjs; i++ )
198#define Sfm_NtkForEachNodeReverse( p, i ) for ( i = p->nObjs - p->nPos - 1; i >= p->nPis; i-- )
199#define Sfm_ObjForEachFanin( p, Node, Fan, i ) for ( i = 0; i < Sfm_ObjFaninNum(p, Node) && ((Fan = Sfm_ObjFanin(p, Node, i)), 1); i++ )
200#define Sfm_ObjForEachFanout( p, Node, Fan, i ) for ( i = 0; i < Sfm_ObjFanoutNum(p, Node) && ((Fan = Sfm_ObjFanout(p, Node, i)), 1); i++ )
struct Abc_Obj_t_ Abc_Obj_t
struct Abc_Ntk_t_ Abc_Ntk_t
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
unsigned __int64 word
DECLARATIONS ///.
struct Mio_LibraryStruct_t_ Mio_Library_t
struct Mio_GateStruct_t_ Mio_Gate_t
typedefABC_NAMESPACE_HEADER_START struct Scl_Con_t_ Scl_Con_t
DECLARATIONS ///.
int Sfm_TimSortArrayByArrival(Sfm_Tim_t *p, Vec_Int_t *vNodes, int iPivot)
int Sfm_NtkCreateWindow(Sfm_Ntk_t *p, int iNode, int fVerbose)
void Sfm_MitTimingGrow(Sfm_Mit_t *p)
int Sfm_LibImplementGatesArea(Sfm_Lib_t *p, int *pFanins, int nFanins, int iObj, Vec_Int_t *vGates, Vec_Wec_t *vFanins)
void Sfm_MitUpdateTiming(Sfm_Mit_t *p, Vec_Int_t *vTimeNodes)
void Sfm_MitTransferLoad(Sfm_Mit_t *p, Abc_Obj_t *pNew, Abc_Obj_t *pOld)
void Sfm_NtkUpdate(Sfm_Ntk_t *p, int iNode, int f, int iFaninNew, word uTruth, word *pTruth)
void Sfm_LibPrint(Sfm_Lib_t *p)
void Sfm_MitStop(Sfm_Mit_t *p)
Sfm_Ntk_t * Sfm_ConstructNetwork(Vec_Wec_t *vFanins, int nPis, int nPos)
struct Sfm_Tim_t_ Sfm_Tim_t
Sfm_Tim_t * Sfm_TimStart(Mio_Library_t *pLib, Scl_Con_t *pExt, Abc_Ntk_t *pNtk, int DeltaCrit)
struct Sfm_Mit_t_ Sfm_Mit_t
int Sfm_MitReadNtkDelay(Sfm_Mit_t *p)
int Sfm_TruthToCnf(word Truth, word *pTruth, int nVars, Vec_Int_t *vCover, Vec_Str_t *vCnf)
int Sfm_NtkWindowToSolver(Sfm_Ntk_t *p)
DECLARATIONS ///.
int Sfm_TimReadObjDelay(Sfm_Tim_t *p, int iObj)
struct Sfm_Fun_t_ Sfm_Fun_t
BASIC TYPES ///.
int Sfm_TimNodeIsNonCritical(Sfm_Tim_t *p, Abc_Obj_t *pPivot, Abc_Obj_t *pNode)
void Sfm_MitUpdateLoad(Sfm_Mit_t *p, Vec_Int_t *vTimeNodes, int fAdd)
int Sfm_MitReadObjDelay(Sfm_Mit_t *p, int iObj)
Sfm_Lib_t * Sfm_LibPrepare(int nVars, int fTwo, int fDelay, int fVerbose, int fLibVerbose)
int Sfm_LibFindComplInputGate(Vec_Wrd_t *vFuncs, int iGate, int nFanins, int iFanin, int *piFaninNew)
void Sfm_LibStop(Sfm_Lib_t *p)
int Sfm_TimReadNtkDelay(Sfm_Tim_t *p)
void Sfm_TimUpdateTiming(Sfm_Tim_t *p, Vec_Int_t *vTimeNodes)
void Sfm_NtkPrepare(Sfm_Ntk_t *p)
int Sfm_MitPriorityNodes(Sfm_Mit_t *p, Vec_Int_t *vCands, int Window)
void Sfm_TimStop(Sfm_Tim_t *p)
int Sfm_LibImplementGatesDelay(Sfm_Lib_t *p, int *pFanins, Mio_Gate_t *pGateB, Mio_Gate_t *pGateT, char *pFansB, char *pFansT, Vec_Int_t *vGates, Vec_Wec_t *vFanins)
word Sfm_ComputeInterpolant(Sfm_Ntk_t *p)
void Sfm_PrintCnf(Vec_Str_t *vCnf)
FUNCTION DECLARATIONS ///.
int Sfm_LibFindDelayMatches(Sfm_Lib_t *p, word *pTruth, int *pFanins, int nFanins, Vec_Ptr_t *vGates, Vec_Ptr_t *vFans)
void Kit_DsdPrintFromTruth(unsigned *pTruth, int nVars)
word Sfm_ComputeInterpolant2(Sfm_Ntk_t *p)
struct Sfm_Lib_t_ Sfm_Lib_t
int Sfm_LibImplementSimple(Sfm_Lib_t *p, word *pTruth, int *pFanins, int nFanins, Vec_Int_t *vGates, Vec_Wec_t *vFanins)
int Sfm_MitSortArrayByArrival(Sfm_Mit_t *p, Vec_Int_t *vNodes, int iPivot)
int Sfm_MitNodeIsNonCritical(Sfm_Mit_t *p, Abc_Obj_t *pPivot, Abc_Obj_t *pNode)
int Sfm_LibFindAreaMatch(Sfm_Lib_t *p, word *pTruth, int nFanins, int *piObj)
int Sfm_MitReadNtkMinSlack(Sfm_Mit_t *p)
void Sfm_TranslateCnf(Vec_Wec_t *vRes, Vec_Str_t *vCnf, Vec_Int_t *vFaninMap, int iPivotVar)
int Sfm_ObjMffcSize(Sfm_Ntk_t *p, int iObj)
#define SFM_FANIN_MAX
INCLUDES ///.
int Sfm_TimEvalRemapping(Sfm_Tim_t *p, Vec_Int_t *vFanins, Vec_Int_t *vMap, Mio_Gate_t *pGate1, char *pFans1, Mio_Gate_t *pGate2, char *pFans2)
int Sfm_MitEvalRemapping(Sfm_Mit_t *p, Vec_Int_t *vMffc, Abc_Obj_t *pObj, Vec_Int_t *vFanins, Vec_Int_t *vMap, Mio_Gate_t *pGate1, char *pFans1, Mio_Gate_t *pGate2, char *pFans2)
Vec_Wec_t * Sfm_CreateCnf(Sfm_Ntk_t *p)
int Sfm_TimPriorityNodes(Sfm_Tim_t *p, Vec_Int_t *vCands, int Window)
Sfm_Mit_t * Sfm_MitStart(Mio_Library_t *pLib, SC_Lib *pScl, Scl_Con_t *pExt, Abc_Ntk_t *pNtk, int DeltaCrit)
FUNCTION DEFINITIONS ///.
struct Sfm_Par_t_ Sfm_Par_t
typedefABC_NAMESPACE_HEADER_START struct Sfm_Ntk_t_ Sfm_Ntk_t
INCLUDES ///.
word TtElems[SFM_FANIN_MAX][SFM_WORDS_MAX]
word pCube[SFM_WORDS_MAX]
word pTruth[SFM_WORDS_MAX]
word * pTtElems[SFM_FANIN_MAX]
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.