ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
fretTime.c
Go to the documentation of this file.
1
20
21#include "fretime.h"
22
24
25
29
30static void Abc_FlowRetime_Dfs_forw( Abc_Obj_t * pObj, Vec_Ptr_t *vNodes );
31static void Abc_FlowRetime_Dfs_back( Abc_Obj_t * pObj, Vec_Ptr_t *vNodes );
32
33static void Abc_FlowRetime_ConstrainExact_forw( Abc_Obj_t * pObj );
34static void Abc_FlowRetime_ConstrainExact_back( Abc_Obj_t * pObj );
35static void Abc_FlowRetime_ConstrainConserv_forw( Abc_Ntk_t * pNtk );
36static void Abc_FlowRetime_ConstrainConserv_back( Abc_Ntk_t * pNtk );
37
38
39void trace2(Abc_Obj_t *pObj) {
40 Abc_Obj_t *pNext;
41 int i;
42
43 print_node(pObj);
44 Abc_ObjForEachFanin(pObj, pNext, i)
45 if (pNext->Level >= pObj->Level - 1) {
46 trace2(pNext);
47 break;
48 }
49}
50
54
55
68
69 pManMR->nConservConstraints = pManMR->nExactConstraints = 0;
70
71 pManMR->vExactNodes = Vec_PtrAlloc(1000);
72
73 pManMR->vTimeEdges = ABC_ALLOC( Vec_Ptr_t, Abc_NtkObjNumMax(pNtk)+1 );
74 assert(pManMR->vTimeEdges);
75 memset(pManMR->vTimeEdges, 0, (Abc_NtkObjNumMax(pNtk)+1) * sizeof(Vec_Ptr_t) );
76}
77
78
91 Abc_Obj_t *pObj;
92 int i;
93 void *pArray;
94
95 // clear all exact constraints
96 pManMR->nExactConstraints = 0;
97 while( Vec_PtrSize( pManMR->vExactNodes )) {
98 pObj = (Abc_Obj_t*)Vec_PtrPop( pManMR->vExactNodes );
99
100 if ( Vec_PtrSize( FTIMEEDGES(pObj) )) {
101 pArray = Vec_PtrReleaseArray( FTIMEEDGES(pObj) );
102 ABC_FREE( pArray );
103 }
104 }
105
106#if !defined(IGNORE_TIMING)
107 if (pManMR->fIsForward) {
108 Abc_FlowRetime_ConstrainConserv_forw(pNtk);
109 } else {
110 Abc_FlowRetime_ConstrainConserv_back(pNtk);
111 }
112#endif
113
114 Abc_NtkForEachObj( pNtk, pObj, i)
115 assert( !Vec_PtrSize(FTIMEEDGES(pObj)) );
116}
117
118
119void Abc_FlowRetime_ConstrainConserv_forw( Abc_Ntk_t * pNtk ) {
120 Vec_Ptr_t *vNodes = pManMR->vNodes;
121 Abc_Obj_t *pObj, *pNext, *pBi, *pBo;
122 int i, j;
123
124 assert(!Vec_PtrSize( vNodes ));
125 pManMR->nConservConstraints = 0;
126
127 // 1. hard constraints
128
129 // (i) collect TFO of PIs
130 Abc_NtkIncrementTravId(pNtk);
131 Abc_NtkForEachPi(pNtk, pObj, i)
132 Abc_FlowRetime_Dfs_forw( pObj, vNodes );
133
134 // ... propagate values
135 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
136 pObj->Level = 0;
137 Abc_ObjForEachFanin( pObj, pNext, j )
138 {
139 if ( Abc_NodeIsTravIdCurrent(pNext) &&
140 pObj->Level < pNext->Level )
141 pObj->Level = pNext->Level;
142 }
143 pObj->Level += Abc_ObjIsNode(pObj) ? 1 : 0;
144
145 if ( Abc_ObjIsBi(pObj) )
146 pObj->fMarkA = 1;
147
148 assert((int)pObj->Level <= pManMR->maxDelay);
149 }
150
151 // collect TFO of latches
152 // seed arrival times from BIs
153 Vec_PtrClear(vNodes);
154 Abc_NtkIncrementTravId(pNtk);
155 Abc_NtkForEachLatch(pNtk, pObj, i) {
156 pBo = Abc_ObjFanout0( pObj );
157 pBi = Abc_ObjFanin0( pObj );
158
159 Abc_NodeSetTravIdCurrent( pObj );
160 Abc_FlowRetime_Dfs_forw( pBo, vNodes );
161
162 if (pBi->fMarkA) {
163 pBi->fMarkA = 0;
164 pObj->Level = pBi->Level;
165 assert((int)pObj->Level <= pManMR->maxDelay);
166 } else
167 pObj->Level = 0;
168 }
169
170#if defined(DEBUG_CHECK)
171 // DEBUG: check DFS ordering
172 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
173 pObj->fMarkB = 1;
174
175 Abc_ObjForEachFanin( pObj, pNext, j )
176 if ( Abc_NodeIsTravIdCurrent(pNext) && !Abc_ObjIsLatch(pNext))
177 assert(pNext->fMarkB);
178 }
179 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i)
180 pObj->fMarkB = 0;
181#endif
182
183 // ... propagate values
184 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
185 pObj->Level = 0;
186 Abc_ObjForEachFanin( pObj, pNext, j )
187 {
188 if ( Abc_NodeIsTravIdCurrent(pNext) &&
189 pObj->Level < pNext->Level )
190 pObj->Level = pNext->Level;
191 }
192 pObj->Level += Abc_ObjIsNode(pObj) ? 1 : 0;
193
194 if ((int)pObj->Level > pManMR->maxDelay) {
195 FSET(pObj, BLOCK);
196 }
197 }
198
199 // 2. conservative constraints
200
201 // first pass: seed latches with T=0
202 Abc_NtkForEachLatch(pNtk, pObj, i) {
203 pObj->Level = 0;
204 }
205
206 // ... propagate values
207 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
208 pObj->Level = 0;
209 Abc_ObjForEachFanin( pObj, pNext, j ) {
210 if ( Abc_NodeIsTravIdCurrent(pNext) &&
211 pObj->Level < pNext->Level )
212 pObj->Level = pNext->Level;
213 }
214 pObj->Level += Abc_ObjIsNode(pObj) ? 1 : 0;
215
216 if ( Abc_ObjIsBi(pObj) )
217 pObj->fMarkA = 1;
218
219 assert((int)pObj->Level <= pManMR->maxDelay);
220 }
221
222 Abc_NtkForEachLatch(pNtk, pObj, i) {
223 pBo = Abc_ObjFanout0( pObj );
224 pBi = Abc_ObjFanin0( pObj );
225
226 if (pBi->fMarkA) {
227 pBi->fMarkA = 0;
228 pObj->Level = pBi->Level;
229 assert((int)pObj->Level <= pManMR->maxDelay);
230 } else
231 pObj->Level = 0;
232 }
233
234 // ... propagate values
235 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
236 pObj->Level = 0;
237 Abc_ObjForEachFanin( pObj, pNext, j ) {
238 if ( Abc_NodeIsTravIdCurrent(pNext) &&
239 pObj->Level < pNext->Level )
240 pObj->Level = pNext->Level;
241 }
242 pObj->Level += Abc_ObjIsNode(pObj) ? 1 : 0;
243
244 // constrained?
245 if ((int)pObj->Level > pManMR->maxDelay) {
246 FSET( pObj, CONSERVATIVE );
247 pManMR->nConservConstraints++;
248 } else
249 FUNSET( pObj, CONSERVATIVE );
250 }
251
252 Vec_PtrClear( vNodes );
253}
254
255
256void Abc_FlowRetime_ConstrainConserv_back( Abc_Ntk_t * pNtk ) {
257 Vec_Ptr_t *vNodes = pManMR->vNodes;
258 Abc_Obj_t *pObj, *pNext, *pBi, *pBo;
259 int i, j, l;
260
261 assert(!Vec_PtrSize(vNodes));
262
263 pManMR->nConservConstraints = 0;
264
265 // 1. hard constraints
266
267 // (i) collect TFO of POs
268 Abc_NtkIncrementTravId(pNtk);
269 Abc_NtkForEachPo(pNtk, pObj, i)
270 Abc_FlowRetime_Dfs_back( pObj, vNodes );
271
272 // ... propagate values
273 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
274 pObj->Level = 0;
275 Abc_ObjForEachFanout( pObj, pNext, j )
276 {
277 l = pNext->Level + (Abc_ObjIsNode(pObj) ? 1 : 0);
278 if ( Abc_NodeIsTravIdCurrent(pNext) &&
279 (int)pObj->Level < l )
280 pObj->Level = l;
281 }
282
283 if ( Abc_ObjIsBo(pObj) )
284 pObj->fMarkA = 1;
285
286 assert((int)pObj->Level <= pManMR->maxDelay);
287 }
288
289 // collect TFO of latches
290 // seed arrival times from BIs
291 Vec_PtrClear(vNodes);
292 Abc_NtkIncrementTravId(pNtk);
293 Abc_NtkForEachLatch(pNtk, pObj, i) {
294 pBo = Abc_ObjFanout0( pObj );
295 pBi = Abc_ObjFanin0( pObj );
296
297 Abc_NodeSetTravIdCurrent( pObj );
298 Abc_FlowRetime_Dfs_back( pBi, vNodes );
299
300 if (pBo->fMarkA) {
301 pBo->fMarkA = 0;
302 pObj->Level = pBo->Level;
303 assert((int)pObj->Level <= pManMR->maxDelay);
304 } else
305 pObj->Level = 0;
306 }
307
308#if defined(DEBUG_CHECK)
309 // DEBUG: check DFS ordering
310 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
311 pObj->fMarkB = 1;
312
313 Abc_ObjForEachFanout( pObj, pNext, j )
314 if ( Abc_NodeIsTravIdCurrent(pNext) && !Abc_ObjIsLatch(pNext))
315 assert(pNext->fMarkB);
316 }
317 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i)
318 pObj->fMarkB = 0;
319#endif
320
321 // ... propagate values
322 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
323 pObj->Level = 0;
324 Abc_ObjForEachFanout( pObj, pNext, j )
325 {
326 l = pNext->Level + (Abc_ObjIsNode(pObj) ? 1 : 0);
327 if ( Abc_NodeIsTravIdCurrent(pNext) &&
328 (int)pObj->Level < l )
329 pObj->Level = l;
330 }
331
332 if ((int)pObj->Level + (Abc_ObjIsNode(pObj)?1:0) > pManMR->maxDelay) {
333 FSET(pObj, BLOCK);
334 }
335 }
336
337 // 2. conservative constraints
338
339 // first pass: seed latches with T=0
340 Abc_NtkForEachLatch(pNtk, pObj, i) {
341 pObj->Level = 0;
342 }
343
344 // ... propagate values
345 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
346 pObj->Level = 0;
347 Abc_ObjForEachFanout( pObj, pNext, j ) {
348 l = pNext->Level + (Abc_ObjIsNode(pObj) ? 1 : 0);
349 if ( Abc_NodeIsTravIdCurrent(pNext) &&
350 (int)pObj->Level < l )
351 pObj->Level = l;
352 }
353
354 if ( Abc_ObjIsBo(pObj) ) {
355 pObj->fMarkA = 1;
356 }
357
358 assert((int)pObj->Level <= pManMR->maxDelay);
359 }
360
361 Abc_NtkForEachLatch(pNtk, pObj, i) {
362 pBo = Abc_ObjFanout0( pObj );
363 assert(Abc_ObjIsBo(pBo));
364 pBi = Abc_ObjFanin0( pObj );
365 assert(Abc_ObjIsBi(pBi));
366
367 if (pBo->fMarkA) {
368 pBo->fMarkA = 0;
369 pObj->Level = pBo->Level;
370 } else
371 pObj->Level = 0;
372 }
373
374 // ... propagate values
375 Vec_PtrForEachEntryReverse( Abc_Obj_t *,vNodes, pObj, i) {
376 pObj->Level = 0;
377 Abc_ObjForEachFanout( pObj, pNext, j ) {
378 l = pNext->Level + (Abc_ObjIsNode(pObj) ? 1 : 0);
379 if ( Abc_NodeIsTravIdCurrent(pNext) &&
380 (int)pObj->Level < l )
381 pObj->Level = l;
382 }
383
384 // constrained?
385 if ((int)pObj->Level > pManMR->maxDelay) {
386 FSET( pObj, CONSERVATIVE );
387 pManMR->nConservConstraints++;
388 } else
389 FUNSET( pObj, CONSERVATIVE );
390 }
391
392 Vec_PtrClear( vNodes );
393}
394
395
408
409 if (FTEST( pObj, CONSERVATIVE )) {
410 pManMR->nConservConstraints--;
411 FUNSET( pObj, CONSERVATIVE );
412 }
413
414#if !defined(IGNORE_TIMING)
415 if (pManMR->fIsForward) {
416 Abc_FlowRetime_ConstrainExact_forw(pObj);
417 } else {
418 Abc_FlowRetime_ConstrainExact_back(pObj);
419 }
420#endif
421}
422
424 Abc_Obj_t *pNext;
425 int i;
426
427 // terminate?
428 if (Abc_ObjIsLatch(pObj)) {
429 if (latch) return;
430 latch = 1;
431 }
432
433 // already visited?
434 if (!latch) {
435 if (pObj->fMarkA) return;
436 pObj->fMarkA = 1;
437 } else {
438 if (pObj->fMarkB) return;
439 pObj->fMarkB = 1;
440 }
441
442 // recurse
443 Abc_ObjForEachFanin(pObj, pNext, i) {
444 Abc_FlowRetime_ConstrainExact_forw_rec( pNext, vNodes, latch );
445 }
446
447 // add
448 pObj->Level = 0;
449 Vec_PtrPush(vNodes, Abc_ObjNotCond(pObj, latch));
450}
451
452void Abc_FlowRetime_ConstrainExact_forw( Abc_Obj_t * pObj ) {
453 Vec_Ptr_t *vNodes = pManMR->vNodes;
454 Abc_Obj_t *pNext, *pCur, *pReg;
455 // Abc_Ntk_t *pNtk = pManMR->pNtk;
456 int i, j;
457
458 assert( !Vec_PtrSize(vNodes) );
459 assert( !Abc_ObjIsLatch(pObj) );
460 assert( !Vec_PtrSize( FTIMEEDGES(pObj) ));
461 Vec_PtrPush( pManMR->vExactNodes, pObj );
462
463 // rev topo order
465
466 Vec_PtrForEachEntryReverse( Abc_Obj_t *, vNodes, pCur, i) {
467 pReg = Abc_ObjRegular( pCur );
468
469 if (pReg == pCur) {
470 assert(!Abc_ObjIsLatch(pReg));
471 Abc_ObjForEachFanin(pReg, pNext, j)
472 pNext->Level = MAX( pNext->Level, pReg->Level + (Abc_ObjIsNode(pReg)?1:0));
473 assert((int)pReg->Level <= pManMR->maxDelay);
474 pReg->Level = 0;
475 pReg->fMarkA = pReg->fMarkB = 0;
476 }
477 }
478 Vec_PtrForEachEntryReverse( Abc_Obj_t *, vNodes, pCur, i) {
479 pReg = Abc_ObjRegular( pCur );
480 if (pReg != pCur) {
481 Abc_ObjForEachFanin(pReg, pNext, j)
482 if (!Abc_ObjIsLatch(pNext))
483 pNext->Level = MAX( pNext->Level, pReg->Level + (Abc_ObjIsNode(pReg)?1:0));
484
485 if ((int)pReg->Level == pManMR->maxDelay) {
486 Vec_PtrPush( FTIMEEDGES(pObj), pReg);
487 pManMR->nExactConstraints++;
488 }
489 pReg->Level = 0;
490 pReg->fMarkA = pReg->fMarkB = 0;
491 }
492 }
493
494 Vec_PtrClear( vNodes );
495}
496
498 Abc_Obj_t *pNext;
499 int i;
500
501 // terminate?
502 if (Abc_ObjIsLatch(pObj)) {
503 if (latch) return;
504 latch = 1;
505 }
506
507 // already visited?
508 if (!latch) {
509 if (pObj->fMarkA) return;
510 pObj->fMarkA = 1;
511 } else {
512 if (pObj->fMarkB) return;
513 pObj->fMarkB = 1;
514 }
515
516 // recurse
517 Abc_ObjForEachFanout(pObj, pNext, i) {
518 Abc_FlowRetime_ConstrainExact_back_rec( pNext, vNodes, latch );
519 }
520
521 // add
522 pObj->Level = 0;
523 Vec_PtrPush(vNodes, Abc_ObjNotCond(pObj, latch));
524}
525
526
527void Abc_FlowRetime_ConstrainExact_back( Abc_Obj_t * pObj ) {
528 Vec_Ptr_t *vNodes = pManMR->vNodes;
529 Abc_Obj_t *pNext, *pCur, *pReg;
530 // Abc_Ntk_t *pNtk = pManMR->pNtk;
531 int i, j;
532
533 assert( !Vec_PtrSize( vNodes ));
534 assert( !Abc_ObjIsLatch(pObj) );
535 assert( !Vec_PtrSize( FTIMEEDGES(pObj) ));
536 Vec_PtrPush( pManMR->vExactNodes, pObj );
537
538 // rev topo order
540
541 Vec_PtrForEachEntryReverse( Abc_Obj_t *, vNodes, pCur, i) {
542 pReg = Abc_ObjRegular( pCur );
543
544 if (pReg == pCur) {
545 assert(!Abc_ObjIsLatch(pReg));
546 Abc_ObjForEachFanout(pReg, pNext, j)
547 pNext->Level = MAX( pNext->Level, pReg->Level + (Abc_ObjIsNode(pReg)?1:0));
548 assert((int)pReg->Level <= pManMR->maxDelay);
549 pReg->Level = 0;
550 pReg->fMarkA = pReg->fMarkB = 0;
551 }
552 }
553 Vec_PtrForEachEntryReverse( Abc_Obj_t *, vNodes, pCur, i) {
554 pReg = Abc_ObjRegular( pCur );
555 if (pReg != pCur) {
556 Abc_ObjForEachFanout(pReg, pNext, j)
557 if (!Abc_ObjIsLatch(pNext))
558 pNext->Level = MAX( pNext->Level, pReg->Level + (Abc_ObjIsNode(pReg)?1:0));
559
560 if ((int)pReg->Level == pManMR->maxDelay) {
561 Vec_PtrPush( FTIMEEDGES(pObj), pReg);
562 pManMR->nExactConstraints++;
563 }
564 pReg->Level = 0;
565 pReg->fMarkA = pReg->fMarkB = 0;
566 }
567 }
568
569 Vec_PtrClear( vNodes );
570}
571
572
585 int i;
586 Abc_Obj_t *pObj;
587 void *pArray;
588
589 // free existing constraints
590 Abc_NtkForEachObj( pNtk, pObj, i )
591 if ( Vec_PtrSize( FTIMEEDGES(pObj) )) {
592 pArray = Vec_PtrReleaseArray( FTIMEEDGES(pObj) );
593 ABC_FREE( pArray );
594 }
595 pManMR->nExactConstraints = 0;
596
597 // generate all constraints
598 Abc_NtkForEachObj(pNtk, pObj, i)
599 if (!Abc_ObjIsLatch(pObj) && FTEST( pObj, CONSERVATIVE ) && !FTEST( pObj, BLOCK ))
600 if (!Vec_PtrSize( FTIMEEDGES( pObj ) ))
602}
603
604
605
618 Abc_Obj_t *pObj;
619 void *pArray;
620
621 while( Vec_PtrSize( pManMR->vExactNodes )) {
622 pObj = (Abc_Obj_t*)Vec_PtrPop( pManMR->vExactNodes );
623
624 if ( Vec_PtrSize( FTIMEEDGES(pObj) )) {
625 pArray = Vec_PtrReleaseArray( FTIMEEDGES(pObj) );
626 ABC_FREE( pArray );
627 }
628 }
629
630 Vec_PtrFree(pManMR->vExactNodes);
631 ABC_FREE( pManMR->vTimeEdges );
632}
633
634
646void Abc_FlowRetime_Dfs_forw( Abc_Obj_t * pObj, Vec_Ptr_t *vNodes ) {
647 Abc_Obj_t *pNext;
648 int i;
649
650 if (Abc_ObjIsLatch(pObj)) return;
651
652 Abc_NodeSetTravIdCurrent( pObj );
653
654 Abc_ObjForEachFanout( pObj, pNext, i )
655 if (!Abc_NodeIsTravIdCurrent( pNext ))
656 Abc_FlowRetime_Dfs_forw( pNext, vNodes );
657
658 Vec_PtrPush( vNodes, pObj );
659}
660
661
662void Abc_FlowRetime_Dfs_back( Abc_Obj_t * pObj, Vec_Ptr_t *vNodes ) {
663 Abc_Obj_t *pNext;
664 int i;
665
666 if (Abc_ObjIsLatch(pObj)) return;
667
668 Abc_NodeSetTravIdCurrent( pObj );
669
670 Abc_ObjForEachFanin( pObj, pNext, i )
671 if (!Abc_NodeIsTravIdCurrent( pNext ))
672 Abc_FlowRetime_Dfs_back( pNext, vNodes );
673
674 Vec_PtrPush( vNodes, pObj );
675}
676
677
694 Abc_Ntk_t *pNtk = pManMR->pNtk;
695 int i, flow, count = 0;
696 Abc_Obj_t *pObj;
697 int maxTighten = 99999;
698
699 vprintf("\t\tsubiter %d : constraints = {cons, exact} = %d, %d\n",
700 pManMR->subIteration, pManMR->nConservConstraints, pManMR->nExactConstraints);
701
702 // 1. overconstrained
703 pManMR->constraintMask = BLOCK | CONSERVATIVE;
704 vprintf("\t\trefinement: over ");
705 fflush(stdout);
706 flow = Abc_FlowRetime_PushFlows( pNtk, 0 );
707 vprintf("= %d ", flow);
708
709 // remember nodes
710 if (pManMR->fIsForward) {
711 Abc_NtkForEachObj( pNtk, pObj, i )
712 if (!FTEST(pObj, VISITED_R))
713 pObj->fMarkC = 1;
714 } else {
715 Abc_NtkForEachObj( pNtk, pObj, i )
716 if (!FTEST(pObj, VISITED_E))
717 pObj->fMarkC = 1;
718 }
719
720 if (pManMR->fConservTimingOnly) {
721 vprintf(" done\n");
722 return 0;
723 }
724
725 // 2. underconstrained
726 pManMR->constraintMask = BLOCK;
728 vprintf("under = ");
729 fflush(stdout);
730 flow = Abc_FlowRetime_PushFlows( pNtk, 0 );
731 vprintf("%d refined nodes = ", flow);
732 fflush(stdout);
733
734 // find area-limiting constraints
735 if (pManMR->fIsForward) {
736 Abc_NtkForEachObj( pNtk, pObj, i ) {
737 if (pObj->fMarkC &&
738 FTEST(pObj, VISITED_R) &&
739 FTEST(pObj, CONSERVATIVE) &&
740 count < maxTighten) {
741 count++;
743 }
744 pObj->fMarkC = 0;
745 }
746 } else {
747 Abc_NtkForEachObj( pNtk, pObj, i ) {
748 if (pObj->fMarkC &&
749 FTEST(pObj, VISITED_E) &&
750 FTEST(pObj, CONSERVATIVE) &&
751 count < maxTighten) {
752 count++;
754 }
755 pObj->fMarkC = 0;
756 }
757 }
758
759 vprintf("%d\n", count);
760
761 return (count > 0);
762}
763
764
766
struct Abc_Obj_t_ Abc_Obj_t
Definition abc.h:116
#define Abc_NtkForEachPo(pNtk, pPo, i)
Definition abc.h:520
#define Abc_NtkForEachLatch(pNtk, pObj, i)
Definition abc.h:500
#define Abc_NtkForEachObj(pNtk, pObj, i)
ITERATORS ///.
Definition abc.h:449
#define Abc_ObjForEachFanin(pObj, pFanin, i)
Definition abc.h:527
#define Abc_ObjForEachFanout(pObj, pFanout, i)
Definition abc.h:529
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
#define Abc_NtkForEachPi(pNtk, pPi, i)
Definition abc.h:516
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
#define ABC_FREE(obj)
Definition abc_global.h:267
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define MAX(a, b)
Definition avl.h:23
void trace2(Abc_Obj_t *pObj)
Definition fretTime.c:39
void Abc_FlowRetime_ConstrainExact_forw_rec(Abc_Obj_t *pObj, Vec_Ptr_t *vNodes, int latch)
Definition fretTime.c:423
void Abc_FlowRetime_ConstrainExact(Abc_Obj_t *pObj)
Definition fretTime.c:407
void Abc_FlowRetime_ConstrainConserv(Abc_Ntk_t *pNtk)
Definition fretTime.c:90
void Abc_FlowRetime_ConstrainExact_back_rec(Abc_Obj_t *pObj, Vec_Ptr_t *vNodes, int latch)
Definition fretTime.c:497
int Abc_FlowRetime_RefineConstraints()
Definition fretTime.c:693
void Abc_FlowRetime_InitTiming(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
Definition fretTime.c:67
void Abc_FlowRetime_ConstrainExactAll(Abc_Ntk_t *pNtk)
Definition fretTime.c:584
void Abc_FlowRetime_FreeTiming(Abc_Ntk_t *pNtk)
Definition fretTime.c:617
#define FSET(x, y)
Definition fretime.h:81
#define vprintf
Definition fretime.h:138
void Abc_FlowRetime_ClearFlows(int fClearAll)
Definition fretMain.c:1087
#define VISITED_E
Definition fretime.h:46
#define BLOCK
Definition fretime.h:51
MinRegMan_t * pManMR
Definition fretMain.c:52
int Abc_FlowRetime_PushFlows(Abc_Ntk_t *pNtk, int fVerbose)
Definition fretMain.c:479
#define VISITED_R
Definition fretime.h:47
#define FUNSET(x, y)
Definition fretime.h:82
#define CONSERVATIVE
Definition fretime.h:55
void print_node(Abc_Obj_t *pObj)
Definition fretMain.c:945
#define FTIMEEDGES(x)
Definition fretime.h:84
#define FTEST(x, y)
Definition fretime.h:83
unsigned fMarkC
Definition abc.h:136
unsigned fMarkB
Definition abc.h:135
unsigned fMarkA
Definition abc.h:134
unsigned Level
Definition abc.h:142
#define assert(ex)
Definition util_old.h:213
char * memset()
#define Vec_PtrForEachEntryReverse(Type, vVec, pEntry, i)
Definition vecPtr.h:63
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42