ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
retArea.c
Go to the documentation of this file.
1
20
21#include "retInt.h"
22
24
25
29
30static Abc_Ntk_t * Abc_NtkRetimeMinAreaOne( Abc_Ntk_t * pNtk, int fForward, int fUseOldNames, int fVerbose );
31static void Abc_NtkRetimeMinAreaPrepare( Abc_Ntk_t * pNtk, int fForward );
32static void Abc_NtkRetimeMinAreaInitValues( Abc_Ntk_t * pNtk, Vec_Ptr_t * vMinCut );
33static Abc_Ntk_t * Abc_NtkRetimeMinAreaConstructNtk( Abc_Ntk_t * pNtk, Vec_Ptr_t * vMinCut );
34static void Abc_NtkRetimeMinAreaUpdateLatches( Abc_Ntk_t * pNtk, Vec_Ptr_t * vMinCut, int fForward, int fUseOldNames );
35
36extern Abc_Ntk_t * Abc_NtkAttachBottom( Abc_Ntk_t * pNtkTop, Abc_Ntk_t * pNtkBottom );
37
41
53int Abc_NtkRetimeMinArea( Abc_Ntk_t * pNtk, int fForwardOnly, int fBackwardOnly, int fUseOldNames, int fVerbose )
54{
55 Abc_Ntk_t * pNtkTotal = NULL, * pNtkBottom;
56 Vec_Int_t * vValuesNew = NULL, * vValues;
57 int nLatches = Abc_NtkLatchNum(pNtk);
58 int fOneFrame = 0;
59 assert( !fForwardOnly || !fBackwardOnly );
60 // there should not be black boxes
61 assert( Abc_NtkIsSopLogic(pNtk) );
62 assert( Abc_NtkLatchNum(pNtk) == Vec_PtrSize(pNtk->vBoxes) );
63 // reorder CI/CO/latch inputs
64 Abc_NtkOrderCisCos( pNtk );
65 // perform forward retiming
66 if ( !fBackwardOnly )
67 {
68 if ( fOneFrame )
69 Abc_NtkRetimeMinAreaOne( pNtk, 1, fUseOldNames, fVerbose );
70 else
71 while ( Abc_NtkRetimeMinAreaOne( pNtk, 1, fUseOldNames, fVerbose ) );
72 }
73 // remember initial values
74 vValues = Abc_NtkCollectLatchValues( pNtk );
75 // perform backward retiming
76 if ( !fForwardOnly )
77 {
78 if ( fOneFrame )
79 pNtkTotal = Abc_NtkRetimeMinAreaOne( pNtk, 0, fUseOldNames, fVerbose );
80 else
81 while ( (pNtkBottom = Abc_NtkRetimeMinAreaOne( pNtk, 0, fUseOldNames, fVerbose )) )
82 pNtkTotal = Abc_NtkAttachBottom( pNtkTotal, pNtkBottom );
83 }
84 // compute initial values
85 vValuesNew = Abc_NtkRetimeInitialValues( pNtkTotal, vValues, fVerbose );
86 if ( pNtkTotal ) Abc_NtkDelete( pNtkTotal );
87 // insert new initial values
88 Abc_NtkInsertLatchValues( pNtk, vValuesNew );
89 if ( vValuesNew ) Vec_IntFree( vValuesNew );
90 if ( vValues ) Vec_IntFree( vValues );
91 // fix the COs (this changes the circuit structure)
92// Abc_NtkLogicMakeSimpleCos( pNtk, 0 );
93 // check for correctness
94 if ( !Abc_NtkCheck( pNtk ) )
95 fprintf( stdout, "Abc_NtkRetimeMinArea(): Network check has failed.\n" );
96 // return the number of latches saved
97 return nLatches - Abc_NtkLatchNum(pNtk);
98}
99
111Abc_Ntk_t * Abc_NtkRetimeMinAreaOne( Abc_Ntk_t * pNtk, int fForward, int fUseOldNames, int fVerbose )
112{
113 Abc_Ntk_t * pNtkNew = NULL;
114 Vec_Ptr_t * vMinCut;
115 // mark current latches and TFI(POs)
116 Abc_NtkRetimeMinAreaPrepare( pNtk, fForward );
117 // run the maximum forward flow
118 vMinCut = Abc_NtkMaxFlow( pNtk, fForward, fVerbose );
119// assert( Vec_PtrSize(vMinCut) <= Abc_NtkLatchNum(pNtk) );
120 // create new latch boundary if there is improvement
121 if ( Vec_PtrSize(vMinCut) < Abc_NtkLatchNum(pNtk) )
122 {
123 pNtkNew = (Abc_Ntk_t *)1;
124 if ( fForward )
125 Abc_NtkRetimeMinAreaInitValues( pNtk, vMinCut );
126 else
127 pNtkNew = Abc_NtkRetimeMinAreaConstructNtk( pNtk, vMinCut );
128 Abc_NtkRetimeMinAreaUpdateLatches( pNtk, vMinCut, fForward, fUseOldNames );
129 }
130 // clean up
131 Vec_PtrFree( vMinCut );
132 Abc_NtkCleanMarkA( pNtk );
133 return pNtkNew;
134}
135
147void Abc_NtkMarkCone_rec( Abc_Obj_t * pObj, int fForward )
148{
149 Abc_Obj_t * pNext;
150 int i;
151 if ( pObj->fMarkA )
152 return;
153 pObj->fMarkA = 1;
154 if ( fForward )
155 {
156 Abc_ObjForEachFanout( pObj, pNext, i )
157 Abc_NtkMarkCone_rec( pNext, fForward );
158 }
159 else
160 {
161 Abc_ObjForEachFanin( pObj, pNext, i )
162 Abc_NtkMarkCone_rec( pNext, fForward );
163 }
164}
165
177void Abc_NtkUnmarkCone_rec( Abc_Obj_t * pObj, int fForward )
178{
179 Abc_Obj_t * pNext;
180 int i;
181 if ( !pObj->fMarkA || Abc_ObjIsLatch(pObj) )
182 return;
183 pObj->fMarkA = 0;
184 if ( fForward )
185 {
186 Abc_ObjForEachFanout( pObj, pNext, i )
187 Abc_NtkUnmarkCone_rec( pNext, fForward );
188 }
189 else
190 {
191 Abc_ObjForEachFanin( pObj, pNext, i )
192 Abc_NtkUnmarkCone_rec( pNext, fForward );
193 }
194}
195
207void Abc_NtkRetimeMinAreaPrepare( Abc_Ntk_t * pNtk, int fForward )
208{
209 Vec_Ptr_t * vNodes;
210 Abc_Obj_t * pObj, * pFanin;
211 int i, k;
212 if ( fForward )
213 {
214 // mark the frontier
215 Abc_NtkForEachPo( pNtk, pObj, i )
216 pObj->fMarkA = 1;
217 Abc_NtkForEachLatch( pNtk, pObj, i )
218 {
219 pObj->fMarkA = 1;
220 Abc_ObjFanin0(pObj)->fMarkA = 1;
221 }
222 // mark the nodes reachable from the PIs
223 Abc_NtkForEachPi( pNtk, pObj, i )
224 Abc_NtkMarkCone_rec( pObj, fForward );
225 // collect the unmarked fanins of the marked nodes
226 vNodes = Vec_PtrAlloc( 100 );
227 Abc_NtkForEachObj( pNtk, pObj, i )
228 if ( pObj->fMarkA )
229 Abc_ObjForEachFanin( pObj, pFanin, k )
230 if ( !pFanin->fMarkA )
231 Vec_PtrPush( vNodes, pFanin );
232 // mark these nodes
233 Vec_PtrForEachEntry( Abc_Obj_t *, vNodes, pObj, i )
234 pObj->fMarkA = 1;
235 Vec_PtrFree( vNodes );
236 }
237 else
238 {
239 // mark the frontier
240 Abc_NtkForEachPi( pNtk, pObj, i )
241 pObj->fMarkA = 1;
242 Abc_NtkForEachLatch( pNtk, pObj, i )
243 {
244 pObj->fMarkA = 1;
245 Abc_ObjFanout0(pObj)->fMarkA = 1;
246 }
247 // mark the nodes reachable from the POs
248 Abc_NtkForEachPo( pNtk, pObj, i )
249 Abc_NtkMarkCone_rec( pObj, fForward );
250 }
251}
252
265{
266 Abc_Obj_t * pFanin;
267 int i;
268 // skip visited nodes
269 if ( Abc_NodeIsTravIdCurrent(pObj) )
270 return (int)(ABC_PTRUINT_T)pObj->pCopy;
271 Abc_NodeSetTravIdCurrent(pObj);
272 // consider the case of a latch output
273 if ( Abc_ObjIsBo(pObj) )
274 {
275 assert( Abc_ObjIsLatch(Abc_ObjFanin0(pObj)) );
276 pObj->pCopy = (Abc_Obj_t *)(ABC_PTRUINT_T)Abc_NtkRetimeMinAreaInitValues_rec( Abc_ObjFanin0(pObj) );
277 return (int)(ABC_PTRUINT_T)pObj->pCopy;
278 }
279 assert( Abc_ObjIsNode(pObj) );
280 // visit the fanins
281 Abc_ObjForEachFanin( pObj, pFanin, i )
283 // compute the value of the node
284 pObj->pCopy = (Abc_Obj_t *)(ABC_PTRUINT_T)Abc_ObjSopSimulate(pObj);
285 return (int)(ABC_PTRUINT_T)pObj->pCopy;
286}
287
299void Abc_NtkRetimeMinAreaInitValues( Abc_Ntk_t * pNtk, Vec_Ptr_t * vMinCut )
300{
301 Abc_Obj_t * pObj;
302 int i;
303 // transfer initial values to pCopy and mark the latches
304 Abc_NtkIncrementTravId(pNtk);
305 Abc_NtkForEachLatch( pNtk, pObj, i )
306 {
307 pObj->pCopy = (Abc_Obj_t *)(ABC_PTRUINT_T)Abc_LatchIsInit1(pObj);
308 Abc_NodeSetTravIdCurrent( pObj );
309 }
310 // propagate initial values
311 Vec_PtrForEachEntry( Abc_Obj_t *, vMinCut, pObj, i )
313 // unmark the latches
314 Abc_NtkForEachLatch( pNtk, pObj, i )
315 Abc_NodeSetTravIdPrevious( pObj );
316}
317
330{
331 Abc_Obj_t * pFanin;
332 int i;
333 // skip visited nodes
334 if ( Abc_NodeIsTravIdCurrent(pObj) )
335 return pObj->pCopy;
336 Abc_NodeSetTravIdCurrent(pObj);
337 // consider the case of a latch output
338 if ( Abc_ObjIsBi(pObj) )
339 {
340 pObj->pCopy = Abc_NtkRetimeMinAreaConstructNtk_rec( pNtkNew, Abc_ObjFanin0(pObj) );
341 return pObj->pCopy;
342 }
343 assert( Abc_ObjIsNode(pObj) );
344 // visit the fanins
345 Abc_ObjForEachFanin( pObj, pFanin, i )
346 Abc_NtkRetimeMinAreaConstructNtk_rec( pNtkNew, pFanin );
347 // compute the value of the node
348 Abc_NtkDupObj( pNtkNew, pObj, 0 );
349 Abc_ObjForEachFanin( pObj, pFanin, i )
350 Abc_ObjAddFanin( pObj->pCopy, pFanin->pCopy );
351 return pObj->pCopy;
352}
353
365Abc_Ntk_t * Abc_NtkRetimeMinAreaConstructNtk( Abc_Ntk_t * pNtk, Vec_Ptr_t * vMinCut )
366{
367 Abc_Ntk_t * pNtkNew;
368 Abc_Obj_t * pObj, * pObjNew;
369 int i;
370 // create new network
371 pNtkNew = Abc_NtkAlloc( ABC_NTK_LOGIC, ABC_FUNC_SOP, 1 );
372 // map new latches into PIs of the new network
373 Abc_NtkIncrementTravId(pNtk);
374 Vec_PtrForEachEntry( Abc_Obj_t *, vMinCut, pObj, i )
375 {
376 pObj->pCopy = Abc_NtkCreatePi(pNtkNew);
377 Abc_NodeSetTravIdCurrent( pObj );
378 }
379 // construct the network recursively
380 Abc_NtkForEachLatch( pNtk, pObj, i )
381 {
382 pObjNew = Abc_NtkRetimeMinAreaConstructNtk_rec( pNtkNew, Abc_ObjFanin0(pObj) );
383 Abc_ObjAddFanin( Abc_NtkCreatePo(pNtkNew), pObjNew );
384 }
385 // unmark the nodes in the cut
386 Vec_PtrForEachEntry( Abc_Obj_t *, vMinCut, pObj, i )
387 Abc_NodeSetTravIdPrevious( pObj );
388 // unmark the latches
389 Abc_NtkForEachLatch( pNtk, pObj, i )
390 Abc_NodeSetTravIdPrevious( pObj );
391 // assign dummy node names
392 Abc_NtkAddDummyPiNames( pNtkNew );
393 Abc_NtkAddDummyPoNames( pNtkNew );
394 if ( !Abc_NtkCheck( pNtkNew ) )
395 fprintf( stdout, "Abc_NtkRetimeMinAreaConstructNtk(): Network check has failed.\n" );
396 return pNtkNew;
397}
398
411void Abc_NtkRetimeMinAreaUpdateLatches( Abc_Ntk_t * pNtk, Vec_Ptr_t * vMinCut, int fForward, int fUseOldNames )
412{
413 Vec_Ptr_t * vCis, * vCos, * vBoxes, * vBoxesNew, * vNodes, * vBuffers;
414 Abc_Obj_t * pObj, * pLatch, * pLatchIn, * pLatchOut, * pNext, * pBuffer;
415 int i, k;
416 // create new latches
417 Vec_PtrShrink( pNtk->vCis, Abc_NtkCiNum(pNtk) - Abc_NtkLatchNum(pNtk) );
418 Vec_PtrShrink( pNtk->vCos, Abc_NtkCoNum(pNtk) - Abc_NtkLatchNum(pNtk) );
419 vCis = pNtk->vCis; pNtk->vCis = NULL;
420 vCos = pNtk->vCos; pNtk->vCos = NULL;
421 vBoxes = pNtk->vBoxes; pNtk->vBoxes = NULL;
422 // transfer boxes
423 vBoxesNew = Vec_PtrAlloc(100);
424 Vec_PtrForEachEntry( Abc_Obj_t *, vBoxes, pObj, i )
425 if ( !Abc_ObjIsLatch(pObj) )
426 Vec_PtrPush( vBoxesNew, pObj );
427 // create or reuse latches
428 vNodes = Vec_PtrAlloc( 100 );
429 vBuffers = Vec_PtrAlloc( 100 );
430 Vec_PtrForEachEntry( Abc_Obj_t *, vMinCut, pObj, i )
431 {
432 if ( Abc_ObjIsCi(pObj) && fForward )
433 {
434 pLatchOut = pObj;
435 pLatch = Abc_ObjFanin0(pLatchOut);
436 pLatchIn = Abc_ObjFanin0(pLatch);
437 assert( Abc_ObjIsBo(pLatchOut) && Abc_ObjIsLatch(pLatch) && Abc_ObjIsBi(pLatchIn) );
438 // mark the latch as reused
439 Abc_NodeSetTravIdCurrent( pLatch );
440
441 // check if there are marked fanouts
442 // (these are fanouts to be connected to the latch input)
443 Abc_ObjForEachFanout( pObj, pNext, k )
444 if ( pNext->fMarkA )
445 break;
446 if ( k < Abc_ObjFanoutNum(pObj) )
447 {
448 // add the buffer
449 pBuffer = Abc_NtkCreateNodeBuf( pNtk, Abc_ObjFanin0(pLatchIn) );
450 Abc_ObjAssignName( pBuffer, Abc_ObjName(pObj), "_buf" );
451 Abc_ObjPatchFanin( pLatchIn, Abc_ObjFanin0(pLatchIn), pBuffer );
452 Vec_PtrPush( vBuffers, pBuffer );
453 // redirect edges to the unvisited fanouts of the node
454 Abc_NodeCollectFanouts( pObj, vNodes );
455 Vec_PtrForEachEntry( Abc_Obj_t *, vNodes, pNext, k )
456 if ( pNext->fMarkA )
457 Abc_ObjPatchFanin( pNext, pObj, pBuffer );
458 }
459 assert( Abc_ObjFanoutNum(pObj) > 0 );
460// if ( Abc_ObjFanoutNum(pObj) == 0 )
461// Abc_NtkDeleteObj_rec( pObj, 0 );
462 }
463 else if ( Abc_ObjIsCo(pObj) && !fForward )
464 {
465 pLatchIn = pObj;
466 pLatch = Abc_ObjFanout0(pLatchIn);
467 pLatchOut = Abc_ObjFanout0(pLatch);
468 assert( Abc_ObjIsBo(pLatchOut) && Abc_ObjIsLatch(pLatch) && Abc_ObjIsBi(pLatchIn) );
469 // mark the latch as reused
470 Abc_NodeSetTravIdCurrent( pLatch );
471 assert( !Abc_ObjFanin0(pLatchIn)->fMarkA );
472 }
473 else
474 {
475 pLatchOut = Abc_NtkCreateBo(pNtk);
476 pLatch = Abc_NtkCreateLatch(pNtk);
477 pLatchIn = Abc_NtkCreateBi(pNtk);
478
479 if ( fUseOldNames )
480 {
481 Abc_ObjAssignName( pLatchOut, Abc_ObjName(pLatch), "_out" );
482 Abc_ObjAssignName( pLatchIn, Abc_ObjName(pLatch), "_in" );
483 }
484 else
485 {
486 Abc_ObjAssignName( pLatchOut, Abc_ObjName(pObj), "_o1" );
487 Abc_ObjAssignName( pLatchIn, Abc_ObjName(pObj), "_i1" );
488 }
489 // connect
490 Abc_ObjAddFanin( pLatchOut, pLatch );
491 Abc_ObjAddFanin( pLatch, pLatchIn );
492 if ( fForward )
493 {
494 pLatch->pData = (void *)(ABC_PTRUINT_T)(pObj->pCopy? ABC_INIT_ONE : ABC_INIT_ZERO);
495 // redirect edges to the unvisited fanouts of the node
496 Abc_NodeCollectFanouts( pObj, vNodes );
497 Vec_PtrForEachEntry( Abc_Obj_t *, vNodes, pNext, k )
498 if ( !pNext->fMarkA )
499 Abc_ObjPatchFanin( pNext, pObj, pLatchOut );
500 }
501 else
502 {
503 // redirect edges to the visited fanouts of the node
504 Abc_NodeCollectFanouts( pObj, vNodes );
505 Vec_PtrForEachEntry( Abc_Obj_t *, vNodes, pNext, k )
506 if ( pNext->fMarkA )
507 Abc_ObjPatchFanin( pNext, pObj, pLatchOut );
508 }
509 // connect latch to the node
510 Abc_ObjAddFanin( pLatchIn, pObj );
511 }
512 Vec_PtrPush( vCis, pLatchOut );
513 Vec_PtrPush( vBoxesNew, pLatch );
514 Vec_PtrPush( vCos, pLatchIn );
515 }
516 Vec_PtrFree( vNodes );
517 // remove buffers
518 Vec_PtrForEachEntry( Abc_Obj_t *, vBuffers, pObj, i )
519 {
520 Abc_ObjTransferFanout( pObj, Abc_ObjFanin0(pObj) );
521 Abc_NtkDeleteObj( pObj );
522 }
523 Vec_PtrFree( vBuffers );
524 // remove useless latches
525 Vec_PtrForEachEntry( Abc_Obj_t *, vBoxes, pObj, i )
526 {
527 if ( !Abc_ObjIsLatch(pObj) )
528 continue;
529 if ( Abc_NodeIsTravIdCurrent(pObj) )
530 continue;
531 pLatchOut = Abc_ObjFanout0(pObj);
532 pLatch = pObj;
533 pLatchIn = Abc_ObjFanin0(pObj);
534 if ( Abc_ObjFanoutNum(pLatchOut) > 0 )
535 Abc_ObjTransferFanout( pLatchOut, Abc_ObjFanin0(pLatchIn) );
536 Abc_NtkDeleteObj( pLatchOut );
537 Abc_NtkDeleteObj( pObj );
538 Abc_NtkDeleteObj( pLatchIn );
539 }
540 // set the arrays
541 pNtk->vCis = vCis;
542 pNtk->vCos = vCos;
543 pNtk->vBoxes = vBoxesNew;
544 Vec_PtrFree( vBoxes );
545}
546
547
551
552
554
struct Abc_Obj_t_ Abc_Obj_t
Definition abc.h:116
ABC_DLL void Abc_NtkCleanMarkA(Abc_Ntk_t *pNtk)
Definition abcUtil.c:696
ABC_DLL Abc_Ntk_t * Abc_NtkAlloc(Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan)
DECLARATIONS ///.
Definition abcNtk.c:53
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
Definition abcFanio.c:84
ABC_DLL void Abc_NtkDeleteObj(Abc_Obj_t *pObj)
Definition abcObj.c:170
#define Abc_NtkForEachPo(pNtk, pPo, i)
Definition abc.h:520
ABC_DLL Abc_Obj_t * Abc_NtkDupObj(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int fCopyName)
Definition abcObj.c:342
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeBuf(Abc_Ntk_t *pNtk, Abc_Obj_t *pFanin)
Definition abcObj.c:706
#define Abc_NtkForEachLatch(pNtk, pObj, i)
Definition abc.h:500
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
Definition abcCheck.c:64
#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
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
Definition abcNames.c:49
ABC_DLL void Abc_NodeCollectFanouts(Abc_Obj_t *pNode, Vec_Ptr_t *vNodes)
Definition abcUtil.c:1647
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
@ ABC_INIT_ZERO
Definition abc.h:104
@ ABC_INIT_ONE
Definition abc.h:105
ABC_DLL char * Abc_ObjAssignName(Abc_Obj_t *pObj, char *pName, char *pSuffix)
Definition abcNames.c:69
@ ABC_NTK_LOGIC
Definition abc.h:57
ABC_DLL void Abc_ObjTransferFanout(Abc_Obj_t *pObjOld, Abc_Obj_t *pObjNew)
Definition abcFanio.c:292
ABC_DLL void Abc_NtkAddDummyPoNames(Abc_Ntk_t *pNtk)
Definition abcNames.c:521
ABC_DLL void Abc_NtkInsertLatchValues(Abc_Ntk_t *pNtk, Vec_Int_t *vValues)
Definition abcLatch.c:235
#define Abc_NtkForEachPi(pNtk, pPi, i)
Definition abc.h:516
ABC_DLL Vec_Int_t * Abc_NtkCollectLatchValues(Abc_Ntk_t *pNtk)
Definition abcLatch.c:181
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
Definition abcNtk.c:1421
ABC_DLL void Abc_ObjPatchFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFaninOld, Abc_Obj_t *pFaninNew)
Definition abcFanio.c:172
@ ABC_FUNC_SOP
Definition abc.h:65
ABC_DLL void Abc_NtkOrderCisCos(Abc_Ntk_t *pNtk)
Definition abcUtil.c:76
ABC_DLL void Abc_NtkAddDummyPiNames(Abc_Ntk_t *pNtk)
Definition abcNames.c:495
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Abc_Obj_t * Abc_NtkRetimeMinAreaConstructNtk_rec(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj)
Definition retArea.c:329
int Abc_NtkRetimeMinArea(Abc_Ntk_t *pNtk, int fForwardOnly, int fBackwardOnly, int fUseOldNames, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition retArea.c:53
int Abc_NtkRetimeMinAreaInitValues_rec(Abc_Obj_t *pObj)
Definition retArea.c:264
void Abc_NtkUnmarkCone_rec(Abc_Obj_t *pObj, int fForward)
Definition retArea.c:177
void Abc_NtkMarkCone_rec(Abc_Obj_t *pObj, int fForward)
Definition retArea.c:147
Abc_Ntk_t * Abc_NtkAttachBottom(Abc_Ntk_t *pNtkTop, Abc_Ntk_t *pNtkBottom)
Definition abcNtk.c:866
Vec_Ptr_t * Abc_NtkMaxFlow(Abc_Ntk_t *pNtk, int fForward, int fVerbose)
Definition retFlow.c:143
Vec_Int_t * Abc_NtkRetimeInitialValues(Abc_Ntk_t *pNtkCone, Vec_Int_t *vValues, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition retInit.c:47
int Abc_ObjSopSimulate(Abc_Obj_t *pObj)
Definition retInit.c:93
Vec_Ptr_t * vCis
Definition abc.h:165
Vec_Ptr_t * vCos
Definition abc.h:166
Vec_Ptr_t * vBoxes
Definition abc.h:168
void * pData
Definition abc.h:145
Abc_Obj_t * pCopy
Definition abc.h:148
unsigned fMarkA
Definition abc.h:134
#define assert(ex)
Definition util_old.h:213
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition vecPtr.h:55