ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
bacNtk.c
Go to the documentation of this file.
1
20
21#include "bac.h"
22
24
28
29typedef struct Bac_Pair_t_ Bac_Pair_t;
31{
33 char * pName;
34 char * pSymb;
35};
36static const char * s_Pref = "ABC_";
37static Bac_Pair_t s_Types[BAC_BOX_UNKNOWN] =
38{
39 { BAC_OBJ_NONE, "NONE", NULL },
40 { BAC_OBJ_PI, "PI", NULL },
41 { BAC_OBJ_PO, "PO", NULL },
42 { BAC_OBJ_BI, "BI", NULL },
43 { BAC_OBJ_BO, "BO", NULL },
44 { BAC_OBJ_BOX, "BOX", NULL },
45
46 { BAC_BOX_CF, "CF", "o" },
47 { BAC_BOX_CT, "CT", "o" },
48 { BAC_BOX_CX, "CX", "o" },
49 { BAC_BOX_CZ, "CZ", "o" },
50 { BAC_BOX_BUF, "BUF", "ao" },
51 { BAC_BOX_INV, "INV", "ao" },
52 { BAC_BOX_AND, "AND", "abo" },
53 { BAC_BOX_NAND, "NAND", "abo" },
54 { BAC_BOX_OR, "OR", "abo" },
55 { BAC_BOX_NOR, "NOR", "abo" },
56 { BAC_BOX_XOR, "XOR", "abo" },
57 { BAC_BOX_XNOR, "XNOR", "abo" },
58 { BAC_BOX_SHARP, "SHARP", "abo" },
59 { BAC_BOX_SHARPL, "SHARPL", "abo" },
60 { BAC_BOX_MUX, "MUX", "cabo" },
61 { BAC_BOX_MAJ, "MAJ", "abco" },
62
63 { BAC_BOX_RAND, "RAND", "ao" },
64 { BAC_BOX_RNAND, "RNAND", "ao" },
65 { BAC_BOX_ROR, "ROR", "ao" },
66 { BAC_BOX_RNOR, "RNOR", "ao" },
67 { BAC_BOX_RXOR, "RXOR", "ao" },
68 { BAC_BOX_RXNOR, "RXNOR", "ao" },
69
70 { BAC_BOX_LAND, "LAND", "abo" },
71 { BAC_BOX_LNAND, "LNAND", "abo" },
72 { BAC_BOX_LOR, "LOR", "abo" },
73 { BAC_BOX_LNOR, "LNOR", "abo" },
74 { BAC_BOX_LXOR, "LXOR", "abo" },
75 { BAC_BOX_LXNOR, "LXNOR", "abo" },
76
77 { BAC_BOX_NMUX, "NMUX", "abo" },
78 { BAC_BOX_SEL, "SEL", "abo" },
79 { BAC_BOX_PSEL, "PSEL", "iabo" },
80 { BAC_BOX_ENC, "ENC", "ao" },
81 { BAC_BOX_PENC, "PENC", "ao" },
82 { BAC_BOX_DEC, "DEC", "ao" },
83 { BAC_BOX_EDEC, "EDEC", "abo" },
84
85 { BAC_BOX_ADD, "ADD", "iabso" },
86 { BAC_BOX_SUB, "SUB", "abo" },
87 { BAC_BOX_MUL, "MUL", "abo" },
88 { BAC_BOX_DIV, "DIV", "abo" },
89 { BAC_BOX_MOD, "MOD", "abo" },
90 { BAC_BOX_REM, "REM", "abo" },
91 { BAC_BOX_POW, "POW", "abo" },
92 { BAC_BOX_MIN, "MIN", "ao" },
93 { BAC_BOX_ABS, "ABS", "ao" },
94
95 { BAC_BOX_LTHAN, "LTHAN", "iabo" },
96 { BAC_BOX_LETHAN, "LETHAN", "abo" },
97 { BAC_BOX_METHAN, "METHAN", "abo" },
98 { BAC_BOX_MTHAN, "MTHAN", "abo" },
99 { BAC_BOX_EQU, "EQU", "abo" },
100 { BAC_BOX_NEQU, "NEQU", "abo" },
101
102 { BAC_BOX_SHIL, "SHIL", "abo" },
103 { BAC_BOX_SHIR, "SHIR", "abo" },
104 { BAC_BOX_ROTL, "ROTL", "abo" },
105 { BAC_BOX_ROTR, "ROTR", "abo" },
106
107 { BAC_BOX_GATE, "GATE", "io" },
108 { BAC_BOX_LUT, "LUT", "io" },
109 { BAC_BOX_ASSIGN, "ASSIGN", "abo" },
110
111 { BAC_BOX_TRI, "TRI", "abo" },
112 { BAC_BOX_RAM, "RAM", "eadro" },
113 { BAC_BOX_RAMR, "RAMR", "eamo" },
114 { BAC_BOX_RAMW, "RAMW", "eado" },
115 { BAC_BOX_RAMWC, "RAMWC", "ceado" },
116 { BAC_BOX_RAMBOX, "RAMBOX", "io" },
117
118 { BAC_BOX_LATCH, "LATCH", "dvsgq" },
119 { BAC_BOX_LATCHRS, "LATCHRS", "dsrgq" },
120 { BAC_BOX_DFF, "DFF", "dvscq" },
121 { BAC_BOX_DFFRS, "DFFRS", "dsrcq" }
122};
123static inline int Bac_GetTypeId( Bac_ObjType_t Type )
124{
125 int i;
126 for ( i = 1; i < BAC_BOX_UNKNOWN; i++ )
127 if ( s_Types[i].Type == Type )
128 return i;
129 return -1;
130}
131void Bac_ManSetupTypes( char ** pNames, char ** pSymbs )
132{
133 int Type;
134 for ( Type = 1; Type < BAC_BOX_UNKNOWN; Type++ )
135 {
136 int Id = Bac_GetTypeId( (Bac_ObjType_t)Type );
137 pNames[Type] = s_Types[Id].pName;
138 pSymbs[Type] = s_Types[Id].pSymb;
139 }
140}
141
143{
144 static char Buffer[100];
145 char * pTemp; int i, Bits;
146 char * pName = Bac_ManPrimName( p->pDesign, Type );
147 char * pSymb = Bac_ManPrimSymb( p->pDesign, Type );
148 assert( Vec_IntSize(vBits) == (int)strlen(pSymb) );
149 sprintf( Buffer, "%s%s_", s_Pref, pName );
150 pTemp = Buffer + strlen(Buffer);
151 Vec_IntForEachEntry( vBits, Bits, i )
152 {
153 sprintf( pTemp, "%c%d", pSymb[i], Bits );
154 pTemp += strlen(pTemp);
155 }
156 //Vec_IntPrint( vBits );
157 //printf( "%s\n", Buffer );
158 return Buffer;
159}
160
162{
163 int i;
164 if ( strncmp(pName, s_Pref, strlen(s_Pref)) )
165 return BAC_OBJ_NONE;
166 pName += strlen(s_Pref);
167 for ( i = 1; i < BAC_BOX_UNKNOWN; i++ )
168 if ( !strncmp(pName, s_Types[i].pName, strlen(s_Types[i].pName)) )
169 return s_Types[i].Type;
170 return BAC_OBJ_NONE;
171}
173{
174 static Vec_Int_t Bits, * vBits = &Bits;
175 static int pArray[10];
176 char * pTemp;
177 int Num = 0, Count = 0;
178 // initialize array
179 vBits->pArray = pArray;
180 vBits->nSize = 0;
181 vBits->nCap = 10;
182 // check the name
183 assert( !strncmp(pName, s_Pref, strlen(s_Pref)) );
184 for ( pTemp = pName; *pTemp && !Bac_CharIsDigit(*pTemp); pTemp++ );
185 assert( Bac_CharIsDigit(*pTemp) );
186 for ( ; *pTemp; pTemp++ )
187 {
188 if ( Bac_CharIsDigit(*pTemp) )
189 Num = 10 * Num + *pTemp - '0';
190 else
191 Vec_IntPush( vBits, Num ), Count += Num, Num = 0;
192 }
193 assert( Num > 0 );
194 Vec_IntPush( vBits, Num ); Count += Num;
195 assert( Vec_IntSize(vBits) <= 10 );
196 return vBits;
197}
198
199
203
215void Bac_NtkUpdateFanout( Bac_Ntk_t * p, int iOld, int iNew )
216{
217 int iCo;
218 assert( Bac_ObjIsCi(p, iOld) );
219 assert( Bac_ObjIsCi(p, iNew) );
220 Bac_ObjForEachFanout( p, iOld, iCo )
221 {
222 assert( Bac_ObjFanin(p, iCo) == iOld );
223 Bac_ObjCleanFanin( p, iCo );
224 Bac_ObjSetFanin( p, iCo, iNew );
225 }
226 Bac_ObjSetFanout( p, iNew, Bac_ObjFanout(p, iOld) );
227 Bac_ObjSetFanout( p, iOld, 0 );
228}
229
242{
243 int iCi, iCo;
244 assert( !Bac_NtkHasFanouts(p) );
245 Bac_NtkStartFanouts( p );
246 Bac_NtkForEachCo( p, iCo )
247 {
248 assert( !Bac_ObjNextFanout(p, iCo) );
249 iCi = Bac_ObjFanin(p, iCo);
250 if ( Bac_ObjFanout(p, iCi) )
251 Bac_ObjSetNextFanout( p, Bac_ObjFanout(p, iCi), iCo );
252 Bac_ObjSetFanout( p, iCi, iCo );
253 }
254 Bac_NtkForEachCo( p, iCo )
255 if ( !Bac_ObjNextFanout(p, iCo) )
256 Bac_ObjSetFanout( p, Bac_ObjFanin(p, iCo), iCo );
257}
259{
260 Bac_Ntk_t * pNtk; int i;
261 Bac_ManForEachNtk( p, pNtk, i )
262 Bac_NtkDeriveFanout( pNtk );
263}
264
276int Bac_ManAssignInternTwo( Bac_Ntk_t * p, int iNum, int nDigits, char * pPref, Vec_Int_t * vMap )
277{
278 char Buffer[16]; int i, NameId = 0;
279 for ( i = 0; !NameId || Vec_IntEntry(vMap, NameId); i++ )
280 {
281 if ( i == 0 )
282 sprintf( Buffer, "%s%0*d", pPref, nDigits, iNum );
283 else
284 sprintf( Buffer, "%s%0*d_%d", pPref, nDigits, iNum, i );
285 NameId = Abc_NamStrFindOrAdd( p->pDesign->pStrs, Buffer, NULL );
286 }
287 Vec_IntWriteEntry( vMap, NameId, 1 );
288 return NameId;
289}
291{
292 int i, iObj, iBox, Count = 0;
293 Bac_NtkForEachPiMain( p, iObj, i )
294 if ( !Bac_ObjNameInt(p, iObj) )
295 Count++;
296 Bac_NtkForEachBox( p, iBox )
297 Bac_BoxForEachBoMain( p, iBox, iObj, i )
298 if ( !Bac_ObjNameInt(p, iObj) )
299 Count++;
300 return Count;
301}
303{
304 int k, iObj, iTerm, iName = -1, iBit = -1;
305 int nDigits, nPis = 0, nPos = 0, nNames = 1;
306 // start names
307 if ( !Bac_NtkHasNames(p) )
308 Bac_NtkStartNames(p);
309 nDigits = Abc_Base10Log( Bac_ManAssignCountNames(p) );
310 // populate map with the currently used names
311 Bac_NtkForEachCi( p, iObj )
312 if ( Bac_ObjNameInt(p, iObj) )
313 Vec_IntWriteEntry( vMap, Bac_ObjNameId(p, iObj), 1 );
314 Bac_NtkForEachBox( p, iObj )
315 if ( Bac_ObjNameInt(p, iObj) )
316 Vec_IntWriteEntry( vMap, Bac_ObjNameId(p, iObj), 1 );
317 // assign CI names
318 Bac_NtkForEachCi( p, iObj )
319 {
320 if ( Bac_ObjNameInt(p, iObj) )
321 {
322 iName = -1;
323 iBit = -1;
324 continue;
325 }
326 if ( Bac_ObjBit(p, iObj) )
327 {
328 assert( iBit > 0 );
329 Bac_ObjSetName( p, iObj, Abc_Var2Lit2(iBit++, BAC_NAME_INDEX) );
330 }
331 else
332 {
333 //int Type = Bac_ObjType(p, iObj);
334 int Range = Bac_ObjIsPi(p, iObj) ? Bac_ObjPiRange(p, iObj) : Bac_BoxBoRange(p, iObj);
335 iName = Bac_ManAssignInternTwo( p, nNames++, nDigits, (char*)(Bac_ObjIsPi(p, iObj) ? "i":"n"), vMap );
336 if ( Range == 1 )
337 Bac_ObjSetName( p, iObj, Abc_Var2Lit2(iName, BAC_NAME_BIN) );
338 else
339 Bac_ObjSetName( p, iObj, Abc_Var2Lit2(iName, BAC_NAME_WORD) );
340 iBit = 1;
341 }
342 }
343 // transfer names to the interface
344 if ( Bac_NtkInfoNum(p) )
345 {
346 for ( k = 0; k < Bac_NtkInfoNum(p); k++ )
347 {
348 //char * pName = Bac_NtkName(p);
349 if ( Bac_NtkInfoType(p, k) == 1 ) // PI
350 {
351 iObj = Bac_NtkPi(p, nPis);
352 assert( !Bac_ObjBit(p, iObj) );
353 assert( Bac_ObjNameType(p, iObj) <= BAC_NAME_WORD );
354 Bac_NtkSetInfoName( p, k, Abc_Var2Lit2(Bac_ObjNameId(p, iObj), 1) );
355 nPis += Bac_NtkInfoRange(p, k);
356 }
357 else if ( Bac_NtkInfoType(p, k) == 2 ) // PO
358 {
359 iObj = Bac_NtkPo(p, nPos);
360 assert( !Bac_ObjBit(p, iObj) );
361 iObj = Bac_ObjFanin(p, iObj);
362 assert( Bac_ObjNameType(p, iObj) <= BAC_NAME_WORD );
363 Bac_NtkSetInfoName( p, k, Abc_Var2Lit2(Bac_ObjNameId(p, iObj), 2) );
364 nPos += Bac_NtkInfoRange(p, k);
365 }
366 else assert( 0 );
367 }
368 assert( nPis == Bac_NtkPiNum(p) );
369 assert( nPos == Bac_NtkPoNum(p) );
370 }
371 // assign instance names
372 nDigits = Abc_Base10Log( Bac_NtkObjNum(p) );
373 Bac_NtkForEachBox( p, iObj )
374 if ( !Bac_ObjNameInt(p, iObj) )
375 {
376 iName = Bac_ManAssignInternTwo( p, iObj, nDigits, "g", vMap );
377 Bac_ObjSetName( p, iObj, Abc_Var2Lit2(iName, BAC_NAME_BIN) );
378 }
379 // unmark all names
380 Bac_NtkForEachPi( p, iObj, k )
381 if ( Bac_ObjNameType(p, iObj) <= BAC_NAME_WORD )
382 Vec_IntWriteEntry( vMap, Bac_ObjNameId(p, iObj), 0 );
383 Bac_NtkForEachBox( p, iObj )
384 {
385 Vec_IntWriteEntry( vMap, Bac_ObjNameId(p, iObj), 0 );
386 Bac_BoxForEachBo( p, iObj, iTerm, k )
387 if ( Bac_ObjNameType(p, iTerm) <= BAC_NAME_WORD )
388 Vec_IntWriteEntry( vMap, Bac_ObjNameId(p, iTerm), 0 );
389 }
390// printf( "Generated %d word-level names.\n", nNames-1 );
391}
393{
394 Vec_Int_t * vMap = Vec_IntStart( 2*Bac_ManObjNum(p) );
395 Bac_Ntk_t * pNtk; int i;
396 Bac_ManForEachNtk( p, pNtk, i )
398 assert( Vec_IntCountEntry(vMap, 0) == Vec_IntSize(vMap) );
399 Vec_IntFree( vMap );
400}
401
402
415{
416 int i, Counter = 0;
417 if ( p->Count >= 0 )
418 return p->Count;
419 Bac_NtkForEachBox( p, i )
420 Counter += Bac_ObjIsBoxUser(p, i) ? Bac_ManClpObjNum_rec( Bac_BoxNtk(p, i) ) + 3*Bac_BoxBoNum(p, i) : Bac_BoxSize(p, i);
421 return (p->Count = Counter);
422}
424{
425 Bac_Ntk_t * pNtk; int i;
426 Bac_ManForEachNtk( p, pNtk, i )
427 pNtk->Count = -1;
428 return Bac_NtkPioNum( Bac_ManRoot(p) ) + Bac_ManClpObjNum_rec( Bac_ManRoot(p) );
429}
430
442void Bac_NtkDfs_rec( Bac_Ntk_t * p, int iObj, Vec_Int_t * vBoxes )
443{
444 int k, iFanin;
445 if ( Bac_ObjIsBo(p, iObj) == 1 )
446 {
447 Bac_NtkDfs_rec( p, Bac_ObjFanin(p, iObj), vBoxes );
448 return;
449 }
450 assert( Bac_ObjIsPi(p, iObj) || Bac_ObjIsBox(p, iObj) );
451 if ( Bac_ObjCopy(p, iObj) > 0 ) // visited
452 return;
453 Bac_ObjSetCopy( p, iObj, 1 );
454 Bac_BoxForEachFanin( p, iObj, iFanin, k )
455 Bac_NtkDfs_rec( p, iFanin, vBoxes );
456 Vec_IntPush( vBoxes, iObj );
457}
459{
460 int i, iObj;
461 Vec_Int_t * vBoxes = Vec_IntAlloc( Bac_NtkBoxNum(p) );
462 Bac_NtkStartCopies( p ); // -1 = not visited; 1 = finished
463 Bac_NtkForEachPi( p, iObj, i )
464 Bac_ObjSetCopy( p, iObj, 1 );
465 Bac_NtkForEachPo( p, iObj, i )
466 Bac_NtkDfs_rec( p, Bac_ObjFanin(p, iObj), vBoxes );
467 return vBoxes;
468}
469
481int Bac_NtkDfsUserBoxes_rec( Bac_Ntk_t * p, int iObj, Vec_Int_t * vBoxes )
482{
483 int k, iFanin;
484 assert( Bac_ObjIsBoxUser(p, iObj) );
485 if ( Bac_ObjCopy(p, iObj) == 1 ) // visited
486 return 1;
487 if ( Bac_ObjCopy(p, iObj) == 0 ) // loop
488 return 0;
489 Bac_ObjSetCopy( p, iObj, 0 );
490 Bac_BoxForEachFanin( p, iObj, iFanin, k )
491 if ( Bac_ObjIsBo(p, iFanin) && Bac_ObjIsBoxUser(p, Bac_ObjFanin(p, iFanin)) )
492 if ( !Bac_NtkDfsUserBoxes_rec( p, Bac_ObjFanin(p, iFanin), vBoxes ) )
493 return 0;
494 Vec_IntPush( vBoxes, iObj );
495 Bac_ObjSetCopy( p, iObj, 1 );
496 return 1;
497}
499{
500 int iObj;
501 Bac_NtkStartCopies( p ); // -1 = not visited; 0 = on the path; 1 = finished
502 Vec_IntClear( &p->vArray );
503 Bac_NtkForEachBoxUser( p, iObj )
504 if ( !Bac_NtkDfsUserBoxes_rec( p, iObj, &p->vArray ) )
505 {
506 printf( "Cyclic dependency of user boxes is detected.\n" );
507 return 0;
508 }
509 return 1;
510}
511
524{
525 int i, iObj, iObjNew, iTerm;
526 Bac_NtkStartCopies( p );
527 // set PI copies
528 assert( Vec_IntSize(vSigs) == Bac_NtkPiNum(p) );
529 Bac_NtkForEachPi( p, iObj, i )
530 Bac_ObjSetCopy( p, iObj, Vec_IntEntry(vSigs, i) );
531 // duplicate internal objects and create buffers for hierarchy instances
532 Bac_NtkForEachBox( p, iObj )
533 if ( Bac_ObjIsBoxPrim( p, iObj ) )
534 Bac_BoxDup( pNew, p, iObj );
535 else
536 {
537 Bac_BoxForEachBo( p, iObj, iTerm, i )
538 {
539 iObjNew = Bac_ObjAlloc( pNew, BAC_OBJ_BI, -1 );
540 iObjNew = Bac_ObjAlloc( pNew, BAC_BOX_BUF, -1 ); // buffer
541 iObjNew = Bac_ObjAlloc( pNew, BAC_OBJ_BO, -1 );
542 Bac_ObjSetCopy( p, iTerm, iObjNew );
543 }
544 }
545 // duplicate user modules and connect objects
546 Bac_NtkForEachBox( p, iObj )
547 if ( Bac_ObjIsBoxPrim( p, iObj ) )
548 {
549 Bac_BoxForEachBi( p, iObj, iTerm, i )
550 Bac_ObjSetFanin( pNew, Bac_ObjCopy(p, iTerm), Bac_ObjCopy(p, Bac_ObjFanin(p, iTerm)) );
551 }
552 else
553 {
554 Vec_IntClear( vSigs );
555 Bac_BoxForEachBi( p, iObj, iTerm, i )
556 Vec_IntPush( vSigs, Bac_ObjCopy(p, Bac_ObjFanin(p, iTerm)) );
557 Bac_NtkCollapse_rec( pNew, Bac_BoxNtk(p, iObj), vSigs );
558 assert( Vec_IntSize(vSigs) == Bac_BoxBoNum(p, iObj) );
559 Bac_BoxForEachBo( p, iObj, iTerm, i )
560 Bac_ObjSetFanin( pNew, Bac_ObjCopy(p, iTerm)-2, Vec_IntEntry(vSigs, i) );
561 }
562 // collect POs
563 Vec_IntClear( vSigs );
564 Bac_NtkForEachPo( p, iObj, i )
565 Vec_IntPush( vSigs, Bac_ObjCopy(p, Bac_ObjFanin(p, iObj)) );
566}
568{
569 int i, iObj;
570 Vec_Int_t * vSigs = Vec_IntAlloc( 1000 );
571 Bac_Man_t * pNew = Bac_ManStart( p, 1 );
572 Bac_Ntk_t * pRoot = Bac_ManRoot( p );
573 Bac_Ntk_t * pRootNew = Bac_ManRoot( pNew );
574 Bac_NtkAlloc( pRootNew, Bac_NtkNameId(pRoot), Bac_NtkPiNum(pRoot), Bac_NtkPoNum(pRoot), Bac_ManClpObjNum(p) );
575 if ( Vec_IntSize(&pRoot->vInfo) )
576 Vec_IntAppend( &pRootNew->vInfo, &pRoot->vInfo );
577 Bac_NtkForEachPi( pRoot, iObj, i )
578 Vec_IntPush( vSigs, Bac_ObjAlloc(pRootNew, BAC_OBJ_PI, -1) );
579 Bac_NtkCollapse_rec( pRootNew, pRoot, vSigs );
580 assert( Vec_IntSize(vSigs) == Bac_NtkPoNum(pRoot) );
581 Bac_NtkForEachPo( pRoot, iObj, i )
582 Bac_ObjAlloc( pRootNew, BAC_OBJ_PO, Vec_IntEntry(vSigs, i) );
583 assert( Bac_NtkObjNum(pRootNew) == Bac_NtkObjNumAlloc(pRootNew) );
584 Vec_IntFree( vSigs );
585 // transfer PI/PO names
586 if ( Bac_NtkHasNames(pRoot) )
587 {
588 Bac_NtkStartNames( pRootNew );
589 Bac_NtkForEachPi( pRoot, iObj, i )
590 Bac_ObjSetName( pRootNew, Bac_NtkPi(pRootNew, i), Bac_ObjName(pRoot, iObj) );
591 Bac_NtkForEachPoDriver( pRoot, iObj, i )
592 if ( !Bac_ObjIsPi(pRoot, iObj) )
593 Bac_ObjSetName( pRootNew, Bac_ObjCopy(pRoot, iObj), Bac_ObjName(pRoot, iObj) );
594 }
595 return pNew;
596}
597
601
602
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Bac_Man_t * Bac_ManCollapse(Bac_Man_t *p)
Definition bacNtk.c:567
char * Bac_NtkGenerateName(Bac_Ntk_t *p, Bac_ObjType_t Type, Vec_Int_t *vBits)
Definition bacNtk.c:142
int Bac_ManAssignInternTwo(Bac_Ntk_t *p, int iNum, int nDigits, char *pPref, Vec_Int_t *vMap)
Definition bacNtk.c:276
void Bac_NtkUpdateFanout(Bac_Ntk_t *p, int iOld, int iNew)
FUNCTION DEFINITIONS ///.
Definition bacNtk.c:215
int Bac_NtkDfsUserBoxes(Bac_Ntk_t *p)
Definition bacNtk.c:498
void Bac_ManDeriveFanout(Bac_Man_t *p)
Definition bacNtk.c:258
void Bac_NtkDeriveFanout(Bac_Ntk_t *p)
Definition bacNtk.c:241
void Bac_ManAssignInternWordNames(Bac_Man_t *p)
Definition bacNtk.c:392
int Bac_ManAssignCountNames(Bac_Ntk_t *p)
Definition bacNtk.c:290
int Bac_ManClpObjNum_rec(Bac_Ntk_t *p)
Definition bacNtk.c:414
Vec_Int_t * Bac_NameToRanges(char *pName)
Definition bacNtk.c:172
void Bac_NtkDfs_rec(Bac_Ntk_t *p, int iObj, Vec_Int_t *vBoxes)
Definition bacNtk.c:442
Bac_ObjType_t Bac_NameToType(char *pName)
Definition bacNtk.c:161
typedefABC_NAMESPACE_IMPL_START struct Bac_Pair_t_ Bac_Pair_t
DECLARATIONS ///.
Definition bacNtk.c:29
int Bac_ManClpObjNum(Bac_Man_t *p)
Definition bacNtk.c:423
int Bac_NtkDfsUserBoxes_rec(Bac_Ntk_t *p, int iObj, Vec_Int_t *vBoxes)
Definition bacNtk.c:481
Vec_Int_t * Bac_NtkDfs(Bac_Ntk_t *p)
Definition bacNtk.c:458
void Bac_ManAssignInternWordNamesNtk(Bac_Ntk_t *p, Vec_Int_t *vMap)
Definition bacNtk.c:302
void Bac_ManSetupTypes(char **pNames, char **pSymbs)
Definition bacNtk.c:131
void Bac_NtkCollapse_rec(Bac_Ntk_t *pNew, Bac_Ntk_t *p, Vec_Int_t *vSigs)
Definition bacNtk.c:523
struct Bac_Man_t_ Bac_Man_t
Definition bac.h:142
struct Bac_Ntk_t_ Bac_Ntk_t
Definition bac.h:141
#define Bac_BoxForEachBo(p, iBox, iTerm, i)
Definition bac.h:377
#define Bac_BoxForEachBoMain(p, iBox, iTerm, i)
Definition bac.h:384
#define Bac_NtkForEachCo(p, i)
Definition bac.h:363
#define Bac_NtkForEachPi(p, iObj, i)
Definition bac.h:337
#define Bac_NtkForEachCi(p, i)
Definition bac.h:361
#define Bac_BoxForEachFanin(p, iBox, iFanin, i)
Definition bac.h:387
#define Bac_NtkForEachBoxUser(p, i)
Definition bac.h:356
#define Bac_BoxForEachBi(p, iBox, iTerm, i)
Definition bac.h:375
@ BAC_NAME_WORD
Definition bac.h:135
@ BAC_NAME_INDEX
Definition bac.h:137
@ BAC_NAME_BIN
Definition bac.h:134
#define Bac_NtkForEachPo(p, iObj, i)
Definition bac.h:339
#define Bac_ObjForEachFanout(p, iCi, iCo)
Definition bac.h:392
#define Bac_NtkForEachPoDriver(p, iObj, i)
Definition bac.h:341
#define Bac_ManForEachNtk(p, pNtk, i)
MACRO DEFINITIONS ///.
Definition bac.h:334
#define Bac_NtkForEachBox(p, i)
Definition bac.h:354
#define Bac_NtkForEachPiMain(p, iObj, i)
Definition bac.h:344
Bac_ObjType_t
INCLUDES ///.
Definition bac.h:43
@ BAC_BOX_SHIR
Definition bac.h:108
@ BAC_BOX_DFFRS
Definition bac.h:126
@ BAC_BOX_ROR
Definition bac.h:70
@ BAC_BOX_UNKNOWN
Definition bac.h:128
@ BAC_BOX_ASSIGN
Definition bac.h:114
@ BAC_BOX_RAMWC
Definition bac.h:120
@ BAC_BOX_SHARP
Definition bac.h:63
@ BAC_BOX_MIN
Definition bac.h:97
@ BAC_BOX_ROTL
Definition bac.h:109
@ BAC_BOX_MUL
Definition bac.h:92
@ BAC_BOX_LATCH
Definition bac.h:123
@ BAC_BOX_XNOR
Definition bac.h:62
@ BAC_BOX_AND
Definition bac.h:57
@ BAC_BOX_RAND
Definition bac.h:68
@ BAC_BOX_INV
Definition bac.h:56
@ BAC_BOX_PSEL
Definition bac.h:84
@ BAC_BOX_PENC
Definition bac.h:86
@ BAC_BOX_TRI
Definition bac.h:116
@ BAC_BOX_LUT
Definition bac.h:113
@ BAC_BOX_RXOR
Definition bac.h:72
@ BAC_BOX_EDEC
Definition bac.h:88
@ BAC_BOX_SHIL
Definition bac.h:107
@ BAC_BOX_LNOR
Definition bac.h:78
@ BAC_BOX_RNOR
Definition bac.h:71
@ BAC_BOX_LATCHRS
Definition bac.h:124
@ BAC_BOX_SEL
Definition bac.h:83
@ BAC_BOX_ADD
Definition bac.h:90
@ BAC_BOX_MAJ
Definition bac.h:66
@ BAC_BOX_NMUX
Definition bac.h:82
@ BAC_OBJ_PO
Definition bac.h:46
@ BAC_BOX_CT
Definition bac.h:52
@ BAC_BOX_DIV
Definition bac.h:93
@ BAC_BOX_RXNOR
Definition bac.h:73
@ BAC_BOX_CX
Definition bac.h:53
@ BAC_BOX_ROTR
Definition bac.h:110
@ BAC_BOX_DEC
Definition bac.h:87
@ BAC_BOX_BUF
Definition bac.h:55
@ BAC_BOX_MTHAN
Definition bac.h:103
@ BAC_BOX_REM
Definition bac.h:95
@ BAC_OBJ_BI
Definition bac.h:47
@ BAC_BOX_LAND
Definition bac.h:75
@ BAC_BOX_ENC
Definition bac.h:85
@ BAC_BOX_CF
Definition bac.h:51
@ BAC_OBJ_NONE
Definition bac.h:44
@ BAC_BOX_RAMR
Definition bac.h:118
@ BAC_BOX_XOR
Definition bac.h:61
@ BAC_BOX_MUX
Definition bac.h:65
@ BAC_OBJ_BO
Definition bac.h:48
@ BAC_BOX_GATE
Definition bac.h:112
@ BAC_BOX_DFF
Definition bac.h:125
@ BAC_BOX_RAMBOX
Definition bac.h:121
@ BAC_BOX_OR
Definition bac.h:59
@ BAC_BOX_RAMW
Definition bac.h:119
@ BAC_BOX_LETHAN
Definition bac.h:101
@ BAC_BOX_NAND
Definition bac.h:58
@ BAC_BOX_LTHAN
Definition bac.h:100
@ BAC_BOX_SHARPL
Definition bac.h:64
@ BAC_BOX_CZ
Definition bac.h:54
@ BAC_OBJ_PI
Definition bac.h:45
@ BAC_BOX_POW
Definition bac.h:96
@ BAC_BOX_LXNOR
Definition bac.h:80
@ BAC_BOX_RNAND
Definition bac.h:69
@ BAC_BOX_NEQU
Definition bac.h:105
@ BAC_BOX_METHAN
Definition bac.h:102
@ BAC_BOX_RAM
Definition bac.h:117
@ BAC_BOX_EQU
Definition bac.h:104
@ BAC_BOX_ABS
Definition bac.h:98
@ BAC_BOX_NOR
Definition bac.h:60
@ BAC_BOX_SUB
Definition bac.h:91
@ BAC_BOX_LXOR
Definition bac.h:79
@ BAC_BOX_MOD
Definition bac.h:94
@ BAC_BOX_LNAND
Definition bac.h:76
@ BAC_OBJ_BOX
Definition bac.h:49
@ BAC_BOX_LOR
Definition bac.h:77
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
Vec_Int_t vInfo
Definition bac.h:157
int Count
Definition bac.h:152
char * pName
Definition bacNtk.c:33
char * pSymb
Definition bacNtk.c:34
Bac_ObjType_t Type
Definition bacNtk.c:32
int Abc_NamStrFindOrAdd(Abc_Nam_t *p, char *pStr, int *pfFound)
Definition utilNam.c:453
#define assert(ex)
Definition util_old.h:213
int strncmp()
int strlen()
char * sprintf()
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecInt.h:54