39static unsigned Io_NtkWriteNodes( FILE * pFile,
Abc_Ntk_t * pNtk );
40static void Io_NtkWritePiPoNodes( FILE * pFile,
Abc_Ntk_t * pNtk );
41static void Io_NtkWriteLatchNode( FILE * pFile,
Abc_Obj_t * pLatch,
int NodesOrPl );
42static unsigned Io_NtkWriteIntNode( FILE * pFile,
Abc_Obj_t * pNode,
int NodesOrPl );
44static void Io_NtkWriteNets( FILE * pFile,
Abc_Ntk_t * pNtk );
45static void Io_NtkWriteIntNet( FILE * pFile,
Abc_Obj_t * pNode );
46static void Io_NtkBuildLayout( FILE * pFile1, FILE *pFile2,
Abc_Ntk_t * pNtk,
double aspectRatio,
double whiteSpace,
unsigned coreCellArea );
47static void Io_NtkWriteScl( FILE * pFile,
unsigned numCoreRows,
double layoutWidth );
48static void Io_NtkWritePl( FILE * pFile,
Abc_Ntk_t * pNtk,
unsigned numTerms,
double layoutHeight,
double layoutWidth );
51static int Abc_NodeIsNand2(
Abc_Obj_t * pNode );
52static int Abc_NodeIsNor2(
Abc_Obj_t * pNode );
53static int Abc_NodeIsAnd2(
Abc_Obj_t * pNode );
54static int Abc_NodeIsOr2(
Abc_Obj_t * pNode );
55static int Abc_NodeIsXor2(
Abc_Obj_t * pNode );
56static int Abc_NodeIsXnor2(
Abc_Obj_t * pNode );
58static inline double Abc_Rint(
double x ) {
return (
double)(int)x; }
80 if ( pNtkTemp == NULL )
82 fprintf( stdout,
"Writing BOOK has failed.\n" );
103 FILE * pFileNodes, * pFileNets, * pFileAux;
104 FILE * pFileScl, * pFilePl, * pFileWts;
106 unsigned coreCellArea=0;
110 assert( Abc_NtkIsNetlist(pNtk) );
112 strcpy(FileExt, FileName);
113 pFileNodes = fopen(
strcat(FileExt,
".nodes"),
"w" );
114 strcpy(FileExt, FileName);
115 pFileNets = fopen(
strcat(FileExt,
".nets"),
"w" );
116 strcpy(FileExt, FileName);
117 pFileAux = fopen(
strcat(FileExt,
".aux"),
"w" );
120 if ( (pFileNodes == NULL) || (pFileNets == NULL) || (pFileAux == NULL) )
123 fprintf( stdout,
"Io_WriteBook(): Cannot open the output files.\n" );
126 fprintf( pFileAux,
"RowBasedPlacement : %s.nodes %s.nets %s.scl %s.pl %s.wts",
127 FileName, FileName, FileName, FileName, FileName );
131 coreCellArea+=Io_NtkWriteNodes( pFileNodes, pNtk );
132 Io_NtkWriteNets( pFileNets, pNtk );
135 pExdc = Abc_NtkExdc( pNtk );
138 coreCellArea+=Io_NtkWriteNodes( pFileNodes, pNtk );
139 Io_NtkWriteNets( pFileNets, pNtk );
143 assert( Abc_NtkWhiteboxNum(pNtk) == 0 );
146 if ( Abc_NtkBlackboxNum(pNtk) > 0 )
150 if ( pNtkTemp == pNtk )
152 coreCellArea+=Io_NtkWriteNodes( pFileNodes, pNtkTemp );
153 Io_NtkWriteNets( pFileNets, pNtkTemp );
156 fclose( pFileNodes );
159 strcpy(FileExt, FileName);
160 pFileScl = fopen(
strcat(FileExt,
".scl"),
"w" );
161 strcpy(FileExt, FileName);
162 pFilePl = fopen(
strcat(FileExt,
".pl"),
"w" );
163 strcpy(FileExt, FileName);
164 pFileWts = fopen(
strcat(FileExt,
".wts"),
"w" );
167 Io_NtkBuildLayout( pFileScl, pFilePl, pNtk, 1.0, 10, coreCellArea );
184unsigned Io_NtkWriteNodes( FILE * pFile,
Abc_Ntk_t * pNtk )
188 unsigned numTerms, numNodes, coreCellArea=0;
191 assert( Abc_NtkIsNetlist(pNtk) );
193 numTerms=Abc_NtkPiNum(pNtk)+Abc_NtkPoNum(pNtk);
194 numNodes=numTerms+Abc_NtkNodeNum(pNtk)+Abc_NtkLatchNum(pNtk);
195 printf(
"NumNodes : %d\t", numNodes );
196 printf(
"NumTerminals : %d\n", numTerms );
197 fprintf( pFile,
"UCLA nodes 1.0\n");
198 fprintf( pFile,
"NumNodes : %d\n", numNodes );
199 fprintf( pFile,
"NumTerminals : %d\n", numTerms );
201 Io_NtkWritePiPoNodes( pFile, pNtk );
203 if ( !Abc_NtkIsComb(pNtk) )
207 Io_NtkWriteLatchNode( pFile, pLatch,
NODES );
215 Extra_ProgressBarUpdate( pProgress, i, NULL );
216 coreCellArea+=Io_NtkWriteIntNode( pFile, pNode,
NODES );
233void Io_NtkWritePiPoNodes( FILE * pFile,
Abc_Ntk_t * pNtk )
240 pNet = Abc_ObjFanout0(pTerm);
241 fprintf( pFile,
"i%s_input\t",
Abc_ObjName(pNet) );
242 fprintf( pFile,
"terminal ");
248 pNet = Abc_ObjFanin0(pTerm);
249 fprintf( pFile,
"o%s_output\t",
Abc_ObjName(pNet) );
250 fprintf( pFile,
"terminal ");
266void Io_NtkWriteLatchNode( FILE * pFile,
Abc_Obj_t * pLatch,
int NodesOrPl )
270 pNetLi = Abc_ObjFanin0( Abc_ObjFanin0(pLatch) );
271 pNetLo = Abc_ObjFanout0( Abc_ObjFanout0(pLatch) );
274 if (NodesOrPl ==
NODES)
275 fprintf( pFile,
" %d %d\n", 6, 1 );
289unsigned Io_NtkWriteIntNode( FILE * pFile,
Abc_Obj_t * pNode,
int NodesOrPl )
297 if ( Abc_NtkHasMapping(pNode->
pNtk) )
305 fprintf( pFile,
"name\t" );
307 if(NodesOrPl ==
NODES)
309 isize=Abc_ObjFaninNum(pNode);
319 if ( Abc_NodeIsNand2(pNode) || Abc_NodeIsNor2(pNode) )
321 else if ( Abc_NodeIsAnd2(pNode) || Abc_NodeIsOr2(pNode) )
323 else if ( Abc_NodeIsXor2(pNode) || Abc_NodeIsXnor2(pNode) )
333 if(NodesOrPl ==
NODES)
335 fprintf( pFile,
" %d %d\n", sizex, sizey );
338 isize= isize + Abc_ObjFanoutNum(pNode) + 1;
386 fprintf( pFile,
"%s_",
Abc_ObjName( Abc_ObjFanin(pNode,i) ) );
387 assert ( i == Abc_ObjFaninNum(pNode) );
403void Io_NtkWriteNets( FILE * pFile,
Abc_Ntk_t * pNtk )
410 assert( Abc_NtkIsNetlist(pNtk) );
413 numPin+=Abc_ObjFaninNum(pNet)+Abc_ObjFanoutNum(pNet);
414 printf(
"NumNets : %d\t", Abc_NtkNetNum(pNtk) );
415 printf(
"NumPins : %d\n\n", numPin );
416 fprintf( pFile,
"UCLA nets 1.0\n");
417 fprintf( pFile,
"NumNets : %d\n", Abc_NtkNetNum(pNtk) );
418 fprintf( pFile,
"NumPins : %d\n", numPin );
424 Extra_ProgressBarUpdate( pProgress, i, NULL );
425 Io_NtkWriteIntNet( pFile, pNet );
441void Io_NtkWriteIntNet( FILE * pFile,
Abc_Obj_t * pNet )
447 int NetDegree=Abc_ObjFaninNum(pNet)+Abc_ObjFanoutNum(pNet);
449 fprintf( pFile,
"NetDegree\t:\t\t%d\t\t%s\n", NetDegree,
Abc_ObjName(Abc_ObjFanin0(pNet)) );
451 pFanin=Abc_ObjFanin0(pNet);
452 if ( Abc_ObjIsPi(pFanin) )
453 fprintf( pFile,
"i%s_input I\n",
Abc_ObjName(pNet) );
456 if(!Abc_NtkIsComb(pNet->
pNtk) && Abc_ObjFaninNum(pFanin) && Abc_ObjIsLatch(Abc_ObjFanin0(pFanin)) )
458 pLatch=Abc_ObjFanin0(pFanin);
459 pNetLi=Abc_ObjFanin0(Abc_ObjFanin0(pLatch));
460 pNetLo=Abc_ObjFanout0(Abc_ObjFanout0(pLatch));
469 if ( Abc_NtkHasMapping(pNet->
pNtk) )
472 fprintf( pFile,
"name I : " );
475 fprintf( pFile,
"%.2f %.2f\n", .0, .0 );
480 if ( Abc_ObjIsPo(pFanout) )
481 fprintf( pFile,
"o%s_output O\n",
Abc_ObjName(pNet) );
484 if(!Abc_NtkIsComb(pNet->
pNtk) && Abc_ObjFanoutNum(pFanout) && Abc_ObjIsLatch( Abc_ObjFanout0(pFanout) ) )
486 pLatch=Abc_ObjFanout0(pFanout);
487 pNetLi=Abc_ObjFanin0(Abc_ObjFanin0(pLatch));
488 pNetLo=Abc_ObjFanout0(Abc_ObjFanout0(pLatch));
497 if ( Abc_NtkHasMapping(pNet->
pNtk) )
500 fprintf( pFile,
"name O : " );
503 fprintf( pFile,
"%.2f %.2f\n", .0, .0 );
519void Io_NtkBuildLayout( FILE * pFileScl, FILE * pFilePl,
Abc_Ntk_t * pNtk,
double aspectRatio,
double whiteSpace,
unsigned coreCellArea )
521 unsigned numCoreCells=Abc_NtkNodeNum(pNtk)+Abc_NtkLatchNum(pNtk);
522 double targetLayoutArea = coreCellArea/(1.0-(whiteSpace/100.0));
523 unsigned numCoreRows=(aspectRatio>0.0) ? (Abc_Rint(sqrt(targetLayoutArea/aspectRatio)/
coreHeight)) : 0;
524 unsigned numTerms=Abc_NtkPiNum(pNtk)+Abc_NtkPoNum(pNtk);
526 double layoutHeight = numCoreRows *
coreHeight;
527 double layoutWidth = Abc_Rint(targetLayoutArea/layoutHeight);
528 double actualLayoutArea = layoutWidth * layoutHeight;
530 printf(
"Core cell height(==site height) is %d\n",
coreHeight );
531 printf(
"Total core cell width is %d giving an ave width of %f\n", totalWidth, (
double)(totalWidth/numCoreCells));
532 printf(
"Target Dimensions:\n" );
533 printf(
" Area : %f\n", targetLayoutArea );
534 printf(
" WS%% : %f\n", whiteSpace );
535 printf(
" AR : %f\n", aspectRatio );
536 printf(
"Actual Dimensions:\n" );
537 printf(
" Width : %f\n", layoutWidth );
538 printf(
" Height: %f (%d rows)\n", layoutHeight, numCoreRows);
539 printf(
" Area : %f\n", actualLayoutArea );
540 printf(
" WS%% : %f\n", 100*(actualLayoutArea-coreCellArea)/actualLayoutArea );
541 printf(
" AR : %f\n\n", layoutWidth/layoutHeight );
543 Io_NtkWriteScl( pFileScl, numCoreRows, layoutWidth );
544 Io_NtkWritePl( pFilePl, pNtk, numTerms, layoutHeight, layoutWidth );
558void Io_NtkWriteScl( FILE * pFile,
unsigned numCoreRows,
double layoutWidth )
561 char * rowOrients[2] = {
"N",
"FS"};
563 double sitewidth=1.0;
568 fprintf( pFile,
"UCLA scl 1.0\n\n" );
569 fprintf( pFile,
"Numrows : %d\n\n", numCoreRows );
571 for( rowId=0 ; rowId<numCoreRows ; rowId++, origin_y +=
coreHeight )
573 fprintf( pFile,
"CoreRow Horizontal\n" );
574 fprintf( pFile,
" Coordinate : \t%d\n", origin_y);
575 fprintf( pFile,
" Height : \t%d\n",
coreHeight);
576 fprintf( pFile,
" Sitewidth : \t%d\n", (
unsigned)sitewidth );
577 fprintf( pFile,
" Sitespacing : \t%d\n", (
unsigned)spacing );
578 fprintf( pFile,
" Siteorient : \t%s\n", rowOrients[rowId%2] );
580 fprintf( pFile,
" Sitesymmetry : \t%c\n", symmetry );
582 fprintf( pFile,
" SubrowOrigin : \t%d Numsites : \t%d\n", 0, (
unsigned)layoutWidth );
583 fprintf( pFile,
"End\n" );
598void Io_NtkWritePl( FILE * pFile,
Abc_Ntk_t * pNtk,
unsigned numTerms,
double layoutWidth,
double layoutHeight )
601 Vec_Ptr_t * vTerms = Vec_PtrAlloc ( numTerms );
602 Vec_Ptr_t * vOrderedTerms = Vec_PtrAlloc ( numTerms );
603 double layoutPerim = 2*layoutWidth + 2*layoutHeight;
604 double nextLoc_x, nextLoc_y;
606 unsigned termsOnTop, termsOnBottom, termsOnLeft, termsOnRight;
610 termsOnTop = termsOnBottom = (unsigned)(Abc_Rint(numTerms*(layoutWidth/layoutPerim)));
611 termsOnLeft = numTerms - (termsOnTop+termsOnBottom);
612 termsOnRight = (unsigned)(ceil(termsOnLeft/2.0));
613 termsOnLeft -= termsOnRight;
616 Vec_PtrPush( vTerms, pTerm );
618 Vec_PtrPush( vTerms, pTerm );
620 vOrderedTerms=Io_NtkOrderingPads( pNtk, vTerms );
621 assert( termsOnTop+termsOnBottom+termsOnLeft+termsOnRight == (
unsigned)Vec_PtrSize(vOrderedTerms) );
623 printf(
"Done constructing layout region\n" );
624 printf(
"Terminals: %d\n", numTerms );
625 printf(
" Top: %d\n", termsOnTop );
626 printf(
" Bottom: %d\n", termsOnBottom );
627 printf(
" Left: %d\n", termsOnLeft );
628 printf(
" Right: %d\n", termsOnRight );
630 fprintf( pFile,
"UCLA pl 1.0\n\n" );
632 nextLoc_x = floor(.0);
633 nextLoc_y = ceil(layoutHeight + 2*
coreHeight);
634 delta = layoutWidth / termsOnTop;
635 for(t = 0; t < termsOnTop; t++)
637 pTerm = (
Abc_Obj_t *)Vec_PtrEntry( vOrderedTerms, t );
638 if( Abc_ObjIsPi(pTerm) )
639 fprintf( pFile,
"i%s_input\t\t",
Abc_ObjName(Abc_ObjFanout0(pTerm)) );
641 fprintf( pFile,
"o%s_output\t\t",
Abc_ObjName(Abc_ObjFanin0(pTerm)) );
642 if( t && Abc_Rint(nextLoc_x) < Abc_Rint(nextLoc_x-delta)+
termWidth )
644 fprintf( pFile,
"%d\t\t%d\t: %s /FIXED\n", (
int)Abc_Rint(nextLoc_x), (
int)Abc_Rint(nextLoc_y),
"FS" );
648 nextLoc_x = floor(.0);
650 delta = layoutWidth / termsOnBottom;
651 for(;t < termsOnTop+termsOnBottom; t++)
653 pTerm = (
Abc_Obj_t *)Vec_PtrEntry( vOrderedTerms, t );
654 if( Abc_ObjIsPi(pTerm) )
655 fprintf( pFile,
"i%s_input\t\t",
Abc_ObjName(Abc_ObjFanout0(pTerm)) );
657 fprintf( pFile,
"o%s_output\t\t",
Abc_ObjName(Abc_ObjFanin0(pTerm)) );
658 if( t!=termsOnTop && Abc_Rint(nextLoc_x) < Abc_Rint(nextLoc_x-delta)+
termWidth )
660 fprintf( pFile,
"%d\t\t%d\t: %s /FIXED\n", (
int)Abc_Rint(nextLoc_x), (
int)Abc_Rint(nextLoc_y),
"N" );
665 nextLoc_y = floor(.0);
666 delta = layoutHeight / termsOnLeft;
667 for(;t < termsOnTop+termsOnBottom+termsOnLeft; t++)
669 pTerm = (
Abc_Obj_t *)Vec_PtrEntry( vOrderedTerms, t );
670 if( Abc_ObjIsPi(pTerm) )
671 fprintf( pFile,
"i%s_input\t\t",
Abc_ObjName(Abc_ObjFanout0(pTerm)) );
673 fprintf( pFile,
"o%s_output\t\t",
Abc_ObjName(Abc_ObjFanin0(pTerm)) );
674 if( Abc_Rint(nextLoc_y) < Abc_Rint(nextLoc_y-delta)+
termHeight )
676 fprintf( pFile,
"%d\t\t%d\t: %s /FIXED\n", (
int)Abc_Rint(nextLoc_x), (
int)Abc_Rint(nextLoc_y),
"E" );
681 nextLoc_y = floor(.0);
682 delta = layoutHeight / termsOnRight;
683 for(;t < termsOnTop+termsOnBottom+termsOnLeft+termsOnRight; t++)
685 pTerm = (
Abc_Obj_t *)Vec_PtrEntry( vOrderedTerms, t );
686 if( Abc_ObjIsPi(pTerm) )
687 fprintf( pFile,
"i%s_input\t\t",
Abc_ObjName(Abc_ObjFanout0(pTerm)) );
689 fprintf( pFile,
"o%s_output\t\t",
Abc_ObjName(Abc_ObjFanin0(pTerm)) );
690 if( Abc_Rint(nextLoc_y) < Abc_Rint(nextLoc_y-delta)+
termHeight )
692 fprintf( pFile,
"%d\t\t%d\t: %s /FIXED\n", (
int)Abc_Rint(nextLoc_x), (
int)Abc_Rint(nextLoc_y),
"FW" );
696 if( !Abc_NtkIsComb(pNtk) )
700 Io_NtkWriteLatchNode( pFile, pLatch,
PL );
701 fprintf( pFile,
"\t%d\t\t%d\t: %s\n", 0, 0,
"N" );
707 Io_NtkWriteIntNode( pFile, pNode,
PL );
708 fprintf( pFile,
"\t%d\t\t%d\t: %s\n", 0, 0,
"N" );
726 unsigned numTerms=Vec_PtrSize(vTerms);
727 unsigned termIdx=0, termCount=0;
728 int * pOrdered =
ABC_ALLOC(
int, numTerms);
730 Vec_Ptr_t * vOrderedTerms = Vec_PtrAlloc ( numTerms );
731 Abc_Obj_t * pNeighbor = NULL, * pNextTerm;
734 for( i=0 ; i<numTerms ; i++ )
737 pNextTerm = (
Abc_Obj_t *)Vec_PtrEntry(vTerms, termIdx++);
739 while( termCount < numTerms && termIdx < numTerms )
741 if( pOrdered[Abc_ObjId(pNextTerm)] && !newNeighbor )
743 pNextTerm = (
Abc_Obj_t *)Vec_PtrEntry( vTerms, termIdx++ );
746 if(!Vec_PtrPushUnique( vOrderedTerms, pNextTerm ))
748 pOrdered[Abc_ObjId(pNextTerm)]=1;
751 pNeighbor=Io_NtkBfsPads( pNtk, pNextTerm, numTerms, pOrdered );
752 if( (newNeighbor=!Vec_PtrPushUnique( vOrderedTerms, pNeighbor )) )
754 pOrdered[Abc_ObjId(pNeighbor)]=1;
758 else if(termIdx < numTerms)
759 pNextTerm = (
Abc_Obj_t *)Vec_PtrEntry( vTerms, termIdx++ );
761 Extra_ProgressBarUpdate( pProgress, termCount, NULL );
764 assert(termCount==numTerms);
765 return vOrderedTerms;
781 Vec_Ptr_t * vNeighbors = Vec_PtrAlloc ( numTerms );
786 assert(Abc_ObjIsPi(pTerm) || Abc_ObjIsPo(pTerm) );
787 Abc_NtkIncrementTravId ( pNtk );
788 Abc_NodeSetTravIdCurrent( pTerm );
789 if(Abc_ObjIsPi(pTerm))
791 pNet = Abc_ObjFanout0(pTerm);
793 Vec_PtrPush( vNeighbors, pNode );
797 pNet = Abc_ObjFanin0(pTerm);
799 Vec_PtrPush( vNeighbors, pNode );
802 while ( Vec_PtrSize(vNeighbors) >0 )
804 pNeighbor = (
Abc_Obj_t *)Vec_PtrEntry( vNeighbors, 0 );
805 assert( Abc_ObjIsNode(pNeighbor) || Abc_ObjIsTerm(pNeighbor) );
806 Vec_PtrRemove( vNeighbors, pNeighbor );
808 if( Abc_NodeIsTravIdCurrent( pNeighbor ) )
810 Abc_NodeSetTravIdCurrent( pNeighbor );
812 if( ((Abc_ObjIsPi(pNeighbor) || Abc_ObjIsPo(pNeighbor))) && !pOrdered[Abc_ObjId(pNeighbor)] )
817 if( Abc_ObjFanoutNum( pNeighbor ) )
819 pNet=Abc_ObjFanout0( pNeighbor );
820 if( !Abc_NtkIsComb(pNtk) && Abc_ObjIsLatch(pNet) )
821 pNet=Abc_ObjFanout0( Abc_ObjFanout0(pNet) );
823 if( !Abc_NodeIsTravIdCurrent(pNode) )
824 Vec_PtrPush( vNeighbors, pNode );
826 if( Abc_ObjFaninNum( pNeighbor ) )
828 if( !Abc_NtkIsComb(pNtk) && Abc_ObjIsLatch(Abc_ObjFanin0(pNeighbor)) )
829 pNeighbor=Abc_ObjFanin0( Abc_ObjFanin0(pNeighbor) );
831 if( !Abc_NodeIsTravIdCurrent(pNode=Abc_ObjFanin0(pNet)) )
832 Vec_PtrPush( vNeighbors, pNode );
835 return ( foundNeighbor ) ? pNeighbor : pTerm;
852 assert( Abc_NtkIsNetlist(pNtk) );
853 assert( Abc_ObjIsNode(pNode) );
854 if ( Abc_ObjFaninNum(pNode) != 2 )
856 if ( Abc_NtkHasSop(pNtk) )
857 return ( !
strcmp(((
char *)pNode->
pData),
"-0 1\n0- 1\n") ||
860 if ( Abc_NtkHasMapping(pNtk) )
880 assert( Abc_NtkIsNetlist(pNtk) );
881 assert( Abc_ObjIsNode(pNode) );
882 if ( Abc_ObjFaninNum(pNode) != 2 )
884 if ( Abc_NtkHasSop(pNtk) )
885 return ( !
strcmp(((
char *)pNode->
pData),
"00 1\n") );
904 assert( Abc_NtkIsNetlist(pNtk) );
905 assert( Abc_ObjIsNode(pNode) );
906 if ( Abc_ObjFaninNum(pNode) != 2 )
908 if ( Abc_NtkHasSop(pNtk) )
910 if ( Abc_NtkHasMapping(pNtk) )
930 assert( Abc_NtkIsNetlist(pNtk) );
931 assert( Abc_ObjIsNode(pNode) );
932 if ( Abc_ObjFaninNum(pNode) != 2 )
934 if ( Abc_NtkHasSop(pNtk) )
958 assert( Abc_NtkIsNetlist(pNtk) );
959 assert( Abc_ObjIsNode(pNode) );
960 if ( Abc_ObjFaninNum(pNode) != 2 )
962 if ( Abc_NtkHasSop(pNtk) )
963 return ( !
strcmp(((
char *)pNode->
pData),
"01 1\n10 1\n") || !
strcmp(((
char *)pNode->
pData),
"10 1\n01 1\n") );
982 assert( Abc_NtkIsNetlist(pNtk) );
983 assert( Abc_ObjIsNode(pNode) );
984 if ( Abc_ObjFaninNum(pNode) != 2 )
986 if ( Abc_NtkHasSop(pNtk) )
987 return ( !
strcmp(((
char *)pNode->
pData),
"11 1\n00 1\n") || !
strcmp(((
char *)pNode->
pData),
"00 1\n11 1\n") );
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachNet(pNtk, pNet, i)
ABC_DLL int Abc_NodeIsBuf(Abc_Obj_t *pNode)
#define Abc_NtkForEachPo(pNtk, pPo, i)
#define Abc_NtkForEachLatch(pNtk, pObj, i)
#define Abc_ObjForEachFanin(pObj, pFanin, i)
#define Abc_ObjForEachFanout(pObj, pFanout, i)
ABC_DLL int Abc_NodeIsInv(Abc_Obj_t *pNode)
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL int Abc_NodeIsConst0(Abc_Obj_t *pNode)
ABC_DLL Abc_Ntk_t * Abc_NtkToNetlist(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachPi(pNtk, pPi, i)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_SopIsAndType(char *pSop)
ABC_DLL int Abc_SopGetCubeNum(char *pSop)
ABC_DLL int Abc_NodeIsConst1(Abc_Obj_t *pNode)
ABC_DLL int Abc_SopIsOrType(char *pSop)
#define Abc_NtkForEachNode(pNtk, pNode, i)
#define ABC_ALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_DLL void * Abc_FrameReadLibGen()
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
int Io_NtkWriteNodeGate(FILE *pFile, Abc_Obj_t *pNode, int Length)
void Io_WriteBookLogic(Abc_Ntk_t *pNtk, char *FileName)
FUNCTION DEFINITIONS ///.
void Io_WriteBook(Abc_Ntk_t *pNtk, char *FileName)
Mio_Gate_t * Mio_LibraryReadAnd2(Mio_Library_t *pLib)
Mio_Pin_t * Mio_GateReadPins(Mio_Gate_t *pGate)
double Mio_GateReadArea(Mio_Gate_t *pGate)
struct Mio_LibraryStruct_t_ Mio_Library_t
char * Mio_GateReadName(Mio_Gate_t *pGate)
Mio_Gate_t * Mio_LibraryReadNand2(Mio_Library_t *pLib)
Mio_Pin_t * Mio_PinReadNext(Mio_Pin_t *pPin)
struct Mio_PinStruct_t_ Mio_Pin_t
struct Mio_GateStruct_t_ Mio_Gate_t
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.