30static void Abc_FlowRetime_AddDummyFanin(
Abc_Obj_t * pObj );
32static Abc_Ntk_t* Abc_FlowRetime_MainLoop( );
34static void Abc_FlowRetime_MarkBlocks(
Abc_Ntk_t * pNtk );
35static void Abc_FlowRetime_MarkReachable_rec(
Abc_Obj_t * pObj,
char end );
36static int Abc_FlowRetime_ImplementCut(
Abc_Ntk_t * pNtk );
37static void Abc_FlowRetime_RemoveLatchBubbles(
Abc_Obj_t * pLatch );
41static void Abc_FlowRetime_VerifyPathLatencies(
Abc_Ntk_t * pNtk );
42static int Abc_FlowRetime_VerifyPathLatencies_rec(
Abc_Obj_t * pObj,
int markD );
44static void Abc_FlowRetime_UpdateLags_forw_rec(
Abc_Obj_t *pObj );
45static void Abc_FlowRetime_UpdateLags_back_rec(
Abc_Obj_t *pObj );
73 int fComputeInitState,
int fGuaranteeInitState,
int fBlockConst,
74 int fForwardOnly,
int fBackwardOnly,
int nMaxIters,
75 int maxDelay,
int fFastButConservative ) {
85 pManMR->fVerbose = fVerbose;
86 pManMR->fComputeInitState = fComputeInitState;
87 pManMR->fGuaranteeInitState = fGuaranteeInitState;
88 pManMR->fBlockConst = fBlockConst;
89 pManMR->fForwardOnly = fForwardOnly;
90 pManMR->fBackwardOnly = fBackwardOnly;
91 pManMR->nMaxIters = nMaxIters;
92 pManMR->maxDelay = maxDelay;
93 pManMR->fComputeInitState = fComputeInitState;
94 pManMR->fConservTimingOnly = fFastButConservative;
95 pManMR->vNodes = Vec_PtrAlloc(100);
96 pManMR->vInitConstraints = Vec_PtrAlloc(2);
98 pManMR->pInitToOrig = NULL;
99 pManMR->sizeInitToOrig = 0;
101 vprintf(
"Flow-based minimum-register retiming...\n");
103 if (!Abc_NtkHasOnlyLatchBoxes(pNtk)) {
104 printf(
"\tERROR: Can not retime with black/white boxes\n");
109 vprintf(
"\tmax delay constraint = %d\n", maxDelay);
111 printf(
"ERROR: max delay constraint (%d) must be > current max delay (%d)\n", maxDelay, i);
118 if (Abc_NtkIsNetlist( pNtk )) {
vprintf(
"netlist/"); }
119 else if (Abc_NtkIsLogic( pNtk )) {
vprintf(
"logic/"); }
120 else if (Abc_NtkIsStrash( pNtk )) {
vprintf(
"strash/"); }
121 else {
vprintf(
"***unknown***/"); }
122 if (Abc_NtkHasSop( pNtk )) {
vprintf(
"sop\n"); }
123 else if (Abc_NtkHasBdd( pNtk )) {
vprintf(
"bdd\n"); }
124 else if (Abc_NtkHasAig( pNtk )) {
vprintf(
"aig\n"); }
125 else if (Abc_NtkHasMapping( pNtk )) {
vprintf(
"mapped\n"); }
126 else {
vprintf(
"***unknown***\n"); }
128 vprintf(
"\tinitial reg count = %d\n", Abc_NtkLatchNum(pNtk));
133 vprintf(
"\tpushing bubbles out of latch boxes\n");
135 Abc_FlowRetime_RemoveLatchBubbles(pObj);
140 assert(Abc_ObjFaninNum(pObj) == 1);
141 assert(Abc_ObjFanoutNum(pObj) == 1);
142 assert(!Abc_ObjFaninC0(pObj));
144 pNext = Abc_ObjFanin0(pObj);
145 assert(Abc_ObjIsBi(pNext));
146 assert(Abc_ObjFaninNum(pNext) <= 1);
147 if(Abc_ObjFaninNum(pNext) == 0)
148 Abc_FlowRetime_AddDummyFanin( pNext );
150 pNext = Abc_ObjFanout0(pObj);
151 assert(Abc_ObjIsBo(pNext));
152 assert(Abc_ObjFaninNum(pNext) == 1);
153 assert(!Abc_ObjFaninC0(pNext));
156 pManMR->nLatches = Abc_NtkLatchNum( pNtk );
157 pManMR->nNodes = Abc_NtkObjNumMax( pNtk )+1;
160 pManMR->vSinkDistHist = Vec_IntStart(
pManMR->nNodes*2+10 );
174 pNtk = Abc_FlowRetime_MainLoop();
179 if (!fComputeInitState && Abc_ObjIsLatch(pObj))
180 Abc_LatchSetInitDc(pObj);
188 if (
pManMR->vSinkDistHist) Vec_IntFree(
pManMR->vSinkDistHist);
190 while( Vec_PtrSize(
pManMR->vInitConstraints )) {
200 if (Abc_NtkIsStrash(pNtk)) {
205 vprintf(
"\tfinal reg count = %d\n", Abc_NtkLatchNum(pNtk));
208#if defined(DEBUG_CHECK)
230Abc_FlowRetime_MainLoop( ) {
233 int last, flow = 0, cut;
239 if (!
pManMR->fBackwardOnly)
do {
244 last = Abc_NtkLatchNum( pNtk );
246 Abc_FlowRetime_MarkBlocks( pNtk );
259 cut = Abc_FlowRetime_ImplementCut( pNtk );
261#if defined (DEBUG_PRINT_LEVELS)
268 }
while( cut != last );
271 if (Abc_NtkIsStrash(pNtk)) {
283 if (!
pManMR->fForwardOnly)
do {
288 if (
pManMR->fGuaranteeInitState) {
289 if ( pNtk != pNtkCopy )
291 pNtk =
pManMR->pNtk = Abc_FlowRetime_NtkDup( pNtkCopy );
292 vprintf(
"\trestoring network. regs = %d\n", Abc_NtkLatchNum( pNtk ));
295 if (
pManMR->fComputeInitState) {
304 last = Abc_NtkLatchNum( pNtk );
307 Abc_FlowRetime_MarkBlocks( pNtk );
321 cut = Abc_FlowRetime_ImplementCut( pNtk );
323#if defined(DEBUG_PRINT_LEVELS)
330 }
while( cut != last );
333 if (!
pManMR->fComputeInitState)
break;
339 if (!
pManMR->fGuaranteeInitState) {
340 printf(
"WARNING: no equivalent init state. setting all initial states to don't-cares\n");
372Abc_FlowRetime_RemoveLatchBubbles(
Abc_Obj_t * pLatch ) {
377 pBi = Abc_ObjFanin0(pLatch);
378 pBo = Abc_ObjFanout0(pLatch);
379 assert(!Abc_ObjIsComplement(pBi));
380 assert(!Abc_ObjIsComplement(pBo));
383 if (Abc_ObjFaninC0(pBo) && Abc_ObjFanoutNum(pBo) > 0) {
385 if (Abc_LatchIsInit0(pLatch)) Abc_LatchSetInit1(pLatch);
386 else if (Abc_LatchIsInit1(pLatch)) Abc_LatchSetInit0(pLatch);
390 pBi->
fCompl0 ^= bubble ^ Abc_ObjFaninC0(pLatch);
393 if (!Abc_NtkIsStrash( pNtk ) && Abc_ObjFaninC0(pBi)) {
416Abc_FlowRetime_MarkBlocks(
Abc_Ntk_t * pNtk ) {
447 if (
pManMR->fBlockConst) {
449 if ((Abc_NtkIsStrash(pNtk) && Abc_AigNodeIsConst(pObj)) ||
460 if (!Abc_ObjIsLatch(pObj) )
480 int i, j, flow = 0, last, srcDist = 0;
486 pManMR->fSinkDistTerminate = 0;
493 if (
FDATA(pObj)->e_dist)
494 srcDist =
MIN(srcDist, (
int)
FDATA(pObj)->e_dist);
497 if (srcDist == (
int)
FDATA(pObj)->e_dist &&
499#ifdef DEBUG_PRINT_FLOWS
507 if (fVerbose)
vprintf(
"\t\tmax-flow1 = %d \t", flow);
515#ifdef DEBUG_PRINT_FLOWS
523 }
while (flow > last);
525 if (fVerbose)
vprintf(
"max-flow2 = %d\n", flow);
547 Abc_Obj_t *pObj, *pBo = NULL, *pBi = NULL;
548 Vec_Ptr_t *vFreeBi = Vec_PtrAlloc( 100 );
549 Vec_Ptr_t *vFreeBo = Vec_PtrAlloc( 100 );
552 while(Vec_PtrSize( vBoxIns )) {
553 pBi = (
Abc_Obj_t *)Vec_PtrPop( vBoxIns );
555 assert(Abc_ObjFanoutNum(pBi) == 1);
557 pBo = Abc_ObjFanout0(pBi);
558 assert(!Abc_ObjFaninC0(pBo));
560 if (Abc_ObjIsBo(pBo)) {
565 assert(!Abc_ObjIsComplement(Abc_ObjFanin0(pBi)));
570 Vec_PtrPush( vFreeBi, pBi );
571 Vec_PtrPush( vFreeBo, pBo );
580 assert(Abc_ObjFaninNum(pBi) == 0);
581 assert(Abc_ObjFanoutNum(pBi) == 0);
582 assert(Abc_ObjFaninNum(pBo) == 0);
583 assert(Abc_ObjFanoutNum(pBo) == 0);
584 }
else if (Abc_ObjIsLatch(pBo)) {
594 assert(Abc_ObjFaninNum(pObj) == 1);
595 if (Abc_ObjFanoutNum(pObj))
596 pBo = Abc_ObjFanout0(pObj);
598 pBi = Abc_ObjFanin0(pObj);
601 if (!pBo || !Abc_ObjIsBo(pBo)) {
602 pBo = (
Abc_Obj_t *)Vec_PtrPop( vFreeBo );
607 if (!Abc_ObjIsBi(pBi)) {
608 pBi = (
Abc_Obj_t *)Vec_PtrPop( vFreeBi );
609 assert(Abc_ObjFaninNum(pBi) == 0);
618 while(Vec_PtrSize( vFreeBi )) {
619 pObj = (
Abc_Obj_t *)Vec_PtrPop( vFreeBi );
622 while(Vec_PtrSize( vFreeBo )) {
623 pObj = (
Abc_Obj_t *)Vec_PtrPop( vFreeBo );
627#if defined(DEBUG_CHECK)
629 if (Abc_ObjIsBo(pObj)) {
630 assert(Abc_ObjFaninNum(pObj) == 1);
631 assert(Abc_ObjIsLatch(Abc_ObjFanin0(pObj)));
633 if (Abc_ObjIsBi(pObj)) {
634 assert(Abc_ObjFaninNum(pObj) == 1);
635 assert(Abc_ObjFanoutNum(pObj) == 1);
636 assert(Abc_ObjIsLatch(Abc_ObjFanout0(pObj)));
638 if (Abc_ObjIsLatch(pObj)) {
639 assert(Abc_ObjFanoutNum(pObj) == 1);
640 assert(Abc_ObjFaninNum(pObj) == 1);
645 Vec_PtrFree( vFreeBi );
646 Vec_PtrFree( vFreeBo );
662Abc_FlowRetime_VerifyPathLatencies(
Abc_Ntk_t * pNtk ) {
667 vprintf(
"\t\tVerifying latency along all paths...");
670 if (Abc_ObjIsBo(pObj)) {
671 Abc_FlowRetime_VerifyPathLatencies_rec( pObj, 0 );
672 }
else if (!
pManMR->fIsForward && Abc_ObjIsPi(pObj)) {
673 Abc_FlowRetime_VerifyPathLatencies_rec( pObj, 0 );
677 if (Abc_ObjFaninNum(pObj) > 0) {
697Abc_FlowRetime_VerifyPathLatencies_rec(
Abc_Obj_t * pObj,
int markD ) {
706 if (Abc_ObjIsLatch(pObj))
709 if (!
pManMR->fIsForward && !Abc_ObjIsPo(pObj) && !Abc_ObjFanoutNum(pObj))
714 if ( Abc_ObjIsBo(pNext) ||
715 (
pManMR->fIsForward && Abc_ObjIsPo(pNext)) ) {
716 if (!markD && !Abc_ObjIsLatch(pObj)) {
717 printf(
"\nERROR: no-latch path (end)\n");
722 }
else if (!
pManMR->fIsForward && Abc_ObjIsPo(pNext)) {
723 if (markD || Abc_ObjIsLatch(pObj)) {
724 printf(
"\nERROR: extra-latch path to outputs\n");
730 j = Abc_FlowRetime_VerifyPathLatencies_rec( pNext, markD || Abc_ObjIsLatch(pObj) );
745 if (!fCare)
return -1;
747 if (markC && markD) {
748 printf(
"\nERROR: mult-latch path\n");
753 if (!markC && !markD) {
754 printf(
"\nERROR: no-latch path (inter)\n");
760 return (pObj->
fMarkC = markC);
780 if (!
pManMR->fComputeInitState)
return;
782 assert(Abc_ObjIsLatch(pSrc));
783 assert(Abc_ObjFanin0(pDest) == pSrc);
784 assert(!Abc_ObjFaninC0(pDest));
787 if (Abc_LatchIsInit0(pSrc)) {
789 }
else if (Abc_LatchIsInit1(pSrc)) {
793 if (!
pManMR->fIsForward) {
795 assert(Abc_ObjIsPi(pObj));
796 FDATA(pDest)->pInitObj = pObj;
813Abc_FlowRetime_ImplementCut(
Abc_Ntk_t * pNtk ) {
814 int i, j, cut = 0, unmoved = 0;
815 Abc_Obj_t *pObj, *pReg, *pNext, *pBo = NULL, *pBi = NULL;
816 Vec_Ptr_t *vFreeRegs = Vec_PtrAlloc( Abc_NtkLatchNum(pNtk) );
817 Vec_Ptr_t *vBoxIns = Vec_PtrAlloc( Abc_NtkLatchNum(pNtk) );
822 pBo = Abc_ObjFanout0(pObj);
823 pBi = Abc_ObjFanin0(pObj);
824 assert(Abc_ObjIsBo(pBo) && Abc_ObjIsBi(pBi));
825 Vec_PtrPush( vBoxIns, pBi );
831 Vec_PtrPush( vFreeRegs, pObj );
845 if (Abc_ObjIsLatch( pObj ))
continue;
855 if ((
pManMR->fIsForward && Abc_ObjIsBo(pObj)) ||
856 (!
pManMR->fIsForward && Abc_ObjIsBi(pObj)))
863 Vec_PtrPush(vMove, pNext);
866 if (Vec_PtrSize(vMove) == 0)
868 assert(Vec_PtrSize(vMove) > 0);
871 assert(Vec_PtrSize( vFreeRegs ));
872 pReg = (
Abc_Obj_t *)Vec_PtrPop( vFreeRegs );
875 while(Vec_PtrSize( vMove )) {
876 pNext = (
Abc_Obj_t *)Vec_PtrPop( vMove );
878 if (Abc_ObjIsBi(pNext))
assert(Abc_ObjFaninNum(pNext) == 1);
885#if defined(DEBUG_CHECK)
886 Abc_FlowRetime_VerifyPathLatencies( pNtk );
890 while(Vec_PtrSize( vFreeRegs )) {
891 pReg = (
Abc_Obj_t *)Vec_PtrPop( vFreeRegs );
902 Vec_PtrFree( vFreeRegs );
903 Vec_PtrFree( vMove );
904 Vec_PtrFree( vBoxIns );
906 vprintf(
"\t\tmin-cut = %d (unmoved = %d)\n", cut, unmoved);
923Abc_FlowRetime_AddDummyFanin(
Abc_Obj_t * pObj ) {
926 if (Abc_NtkIsStrash(pNtk))
958 printf(
"node %d type=%d lev=%d tedge=%d (%x%s) fanouts {", Abc_ObjId(pObj), Abc_ObjType(pObj),
961 printf(
"%d[%d](%d),", Abc_ObjId(pNext), Abc_ObjType(pNext),
FDATA(pNext)->
mark);
962 printf(
"} fanins {");
964 printf(
"%d[%d](%d),", Abc_ObjId(pNext), Abc_ObjType(pNext),
FDATA(pNext)->
mark);
982 printf(
"node %d type=%d %s fanouts {", Abc_ObjId(pObj), Abc_ObjType(pObj), m);
984 printf(
"%d ,", Abc_ObjId(pNext));
985 printf(
"} fanins {");
987 printf(
"%d ,", Abc_ObjId(pNext));
1005 printf(
"\nnode %d type=%d mark=%d %s\n", Abc_ObjId(pObj), Abc_ObjType(pObj),
FDATA(pObj)->
mark, m);
1006 printf(
"fanouts\n");
1035 while(Abc_ObjFanoutNum(pFrom) > 0) {
1036 pNext = Abc_ObjFanout0(pFrom);
1057 if (
pManMR->fIsForward) {
1061 Abc_ObjIsLatch(pNext))
1094 for(i=0; i<
pManMR->nNodes; i++) {
1096 pManMR->pDataArray[i].e_dist = 0;
1097 pManMR->pDataArray[i].r_dist = 0;
1098 pManMR->pDataArray[i].pred = NULL;
1117 Abc_Obj_t *pObj, *pObjCopy, *pNext, *pNextCopy;
1127 if (Abc_NtkIsStrash( pNtk ) && Abc_AigNodeIsConst( pObj ))
1132 FDATA( pObj )->pCopy = pObjCopy;
1133 FDATA( pObj )->mark = 0;
1156#if defined(DEBUG_CHECK) || 1
1159 assert( Abc_ObjFanoutNum( pObj ) == Abc_ObjFanoutNum( pObjCopy ) );
1160 assert( Abc_ObjFaninNum( pObj ) == Abc_ObjFaninNum( pObjCopy ) );
1164 assert(Abc_NtkObjNum( pNtk ) == Abc_NtkObjNum( pNtkCopy ) );
1165 assert(Abc_NtkLatchNum( pNtk ) == Abc_NtkLatchNum( pNtkCopy ) );
1166 assert(Abc_NtkPoNum( pNtk ) == Abc_NtkPoNum( pNtkCopy ) );
1167 assert(Abc_NtkPiNum( pNtk ) == Abc_NtkPiNum( pNtkCopy ) );
1189 assert( Abc_NtkIsStrash(pNtk) );
1206 printf(
"Abc_NtkStrash: The network check has failed.\n" );
1227Abc_FlowRetime_UpdateLags_forw_rec(
Abc_Obj_t *pObj ) {
1231 assert(!Abc_ObjIsPi(pObj));
1232 assert(!Abc_ObjIsLatch(pObj));
1234 if (Abc_ObjIsBo(pObj))
return;
1235 if (Abc_NodeIsTravIdCurrent(pObj))
return;
1237 Abc_NodeSetTravIdCurrent(pObj);
1239 if (Abc_ObjIsNode(pObj)) {
1244 Abc_FlowRetime_UpdateLags_forw_rec( pNext );
1261Abc_FlowRetime_UpdateLags_back_rec(
Abc_Obj_t *pObj ) {
1265 assert(!Abc_ObjIsPo(pObj));
1266 assert(!Abc_ObjIsLatch(pObj));
1268 if (Abc_ObjIsBo(pObj))
return;
1269 if (Abc_NodeIsTravIdCurrent(pObj))
return;
1271 Abc_NodeSetTravIdCurrent(pObj);
1273 if (Abc_ObjIsNode(pObj)) {
1278 Abc_FlowRetime_UpdateLags_back_rec( pNext );
1298 Abc_NtkIncrementTravId(
pManMR->pNtk );
1301 if (
pManMR->fIsForward) {
1303 Abc_FlowRetime_UpdateLags_forw_rec( pNext );
1306 Abc_FlowRetime_UpdateLags_back_rec( pNext );
1324 assert( !Abc_ObjIsLatch(pObj) );
1325 assert( (
int)Abc_ObjId(pObj) < Vec_IntSize(
pManMR->vLags) );
1327 return Vec_IntEntry(
pManMR->vLags, Abc_ObjId(pObj));
1343 assert( Abc_ObjIsNode(pObj) );
1344 assert( (
int)Abc_ObjId(pObj) < Vec_IntSize(
pManMR->vLags) );
1346 Vec_IntWriteEntry(
pManMR->vLags, Abc_ObjId(pObj), lag);
1350static void Abc_ObjPrintNeighborhood_rec(
Abc_Obj_t *pObj,
Vec_Ptr_t *vNodes,
int depth ) {
1354 if (pObj->
fMarkC || depth < 0)
return;
1357 Vec_PtrPush( vNodes, pObj );
1362 Abc_ObjPrintNeighborhood_rec( pObj2, vNodes, depth-1 );
1365 Abc_ObjPrintNeighborhood_rec( pObj2, vNodes, depth-1 );
1373 Abc_ObjPrintNeighborhood_rec( pObj, vNodes, depth );
1375 while(Vec_PtrSize(vNodes)) {
1380 Vec_PtrFree(vNodes);
struct Abc_Obj_t_ Abc_Obj_t
ABC_DLL Abc_Ntk_t * Abc_NtkAlloc(Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan)
DECLARATIONS ///.
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL void Abc_NtkDeleteObj(Abc_Obj_t *pObj)
#define Abc_NtkForEachPo(pNtk, pPo, i)
ABC_DLL Abc_Obj_t * Abc_NtkDupObj(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int fCopyName)
#define Abc_NtkForEachLatch(pNtk, pObj, i)
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
#define Abc_NtkForEachObj(pNtk, pObj, i)
ITERATORS ///.
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst0(Abc_Ntk_t *pNtk)
#define Abc_ObjForEachFanin(pObj, pFanin, i)
#define Abc_ObjForEachFanout(pObj, pFanout, i)
ABC_DLL void Abc_ObjPrint(FILE *pFile, Abc_Obj_t *pObj)
ABC_DLL int Abc_NtkLevelReverse(Abc_Ntk_t *pNtk)
struct Abc_Aig_t_ Abc_Aig_t
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL void Abc_NtkFinalize(Abc_Ntk_t *pNtk, Abc_Ntk_t *pNtkNew)
ABC_DLL void Abc_ObjTransferFanout(Abc_Obj_t *pObjOld, Abc_Obj_t *pObjNew)
ABC_DLL int Abc_NodeIsConst(Abc_Obj_t *pNode)
ABC_DLL int Abc_NtkLevel(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_AigCleanup(Abc_Aig_t *pMan)
ABC_DLL Abc_Obj_t * Abc_AigAnd(Abc_Aig_t *pMan, Abc_Obj_t *p0, Abc_Obj_t *p1)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeInv(Abc_Ntk_t *pNtk, Abc_Obj_t *pFanin)
#define Abc_NtkForEachPi(pNtk, pPi, i)
ABC_DLL int Abc_NtkDoCheck(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_ObjRemoveFanins(Abc_Obj_t *pObj)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_ObjPatchFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFaninOld, Abc_Obj_t *pFaninNew)
ABC_DLL void Abc_NtkReassignIds(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
ABC_DLL Abc_Ntk_t * Abc_NtkDup(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachNode(pNtk, pNode, i)
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
pcover complement(pcube *T)
int dfsfast_e(Abc_Obj_t *pObj, Abc_Obj_t *pPred)
int dfsplain_e(Abc_Obj_t *pObj, Abc_Obj_t *pPred)
void dfsfast_preorder(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
void Abc_ObjPrintNeighborhood(Abc_Obj_t *pObj, int depth)
void Abc_FlowRetime_ClearFlows(int fClearAll)
Abc_Ntk_t * Abc_FlowRetime_MinReg(Abc_Ntk_t *pNtk, int fVerbose, int fComputeInitState, int fGuaranteeInitState, int fBlockConst, int fForwardOnly, int fBackwardOnly, int nMaxIters, int maxDelay, int fFastButConservative)
FUNCTION DEFINITIONS ///.
void Abc_FlowRetime_UpdateLags()
void Abc_ObjBetterTransferFanout(Abc_Obj_t *pFrom, Abc_Obj_t *pTo, int complement)
int Abc_FlowRetime_GetLag(Abc_Obj_t *pObj)
void print_node2(Abc_Obj_t *pObj)
int Abc_FlowRetime_PushFlows(Abc_Ntk_t *pNtk, int fVerbose)
void Abc_FlowRetime_SetLag(Abc_Obj_t *pObj, int lag)
void Abc_FlowRetime_FixLatchBoxes(Abc_Ntk_t *pNtk, Vec_Ptr_t *vBoxIns)
void Abc_FlowRetime_CopyInitState(Abc_Obj_t *pSrc, Abc_Obj_t *pDest)
void Abc_NtkMarkCone_rec(Abc_Obj_t *pObj, int fForward)
Abc_Ntk_t * Abc_FlowRetime_NtkSilentRestrash(Abc_Ntk_t *pNtk, int fCleanup)
void print_node3(Abc_Obj_t *pObj)
void print_node(Abc_Obj_t *pObj)
int Abc_FlowRetime_IsAcrossCut(Abc_Obj_t *pObj, Abc_Obj_t *pNext)
int Abc_FlowRetime_SolveBackwardInit(Abc_Ntk_t *pNtk)
struct MinRegMan_t_ MinRegMan_t
void Abc_FlowRetime_AddInitBias()
void Abc_FlowRetime_ConstrainConserv(Abc_Ntk_t *pNtk)
void Abc_FlowRetime_PrintInitStateInfo(Abc_Ntk_t *pNtk)
void Abc_FlowRetime_RemoveInitBias()
int Abc_FlowRetime_RefineConstraints()
void Abc_FlowRetime_InitState(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
struct Flow_Data_t_ Flow_Data_t
void Abc_FlowRetime_ConstrainInit()
struct InitConstraint_t_ InitConstraint_t
void Abc_FlowRetime_InitTiming(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
void Abc_FlowRetime_SetupBackwardInit(Abc_Ntk_t *pNtk)
void Abc_FlowRetime_FreeTiming(Abc_Ntk_t *pNtk)
char * Nm_ManFindNameById(Nm_Man_t *p, int ObjId)
void Nm_ManDeleteIdName(Nm_Man_t *p, int ObjId)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.