21#ifndef MINI_AIG__mini_aig_h
22#define MINI_AIG__mini_aig_h
33#ifndef _VERIFIC_DATABASE_H_
41#define MINI_AIG_NULL (0x7FFFFFFF)
42#define MINI_AIG_START_SIZE (0x000000FF)
62#define MINI_AIG_ALLOC(type, num) ((type *) malloc(sizeof(type) * (num)))
63#define MINI_AIG_CALLOC(type, num) ((type *) calloc((num), sizeof(type)))
64#define MINI_AIG_FALLOC(type, num) ((type *) memset(malloc(sizeof(type) * (num)), 0xff, sizeof(type) * (num)))
65#define MINI_AIG_FREE(obj) ((obj) ? (free((char *) (obj)), (obj) = 0) : 0)
66#define MINI_AIG_REALLOC(type, obj, num) \
67 ((obj) ? ((type *) realloc((char *)(obj), sizeof(type) * (num))) : \
68 ((type *) malloc(sizeof(type) * (num))))
71static void Mini_AigGrow(
Mini_Aig_t *
p,
int nCapMin )
73 if (
p->nCap >= nCapMin )
79static void Mini_AigPush(
Mini_Aig_t *
p,
int Lit0,
int Lit1 )
81 if (
p->nSize + 2 >
p->nCap )
87 Mini_AigGrow(
p, 2 *
p->nCap );
89 p->pArray[
p->nSize++] = Lit0;
90 p->pArray[
p->nSize++] = Lit1;
94static int Mini_AigNodeFanin0(
Mini_Aig_t *
p,
int Id )
96 assert( Id >= 0 && 2*Id < p->nSize );
98 return p->pArray[2*Id];
100static int Mini_AigNodeFanin1(
Mini_Aig_t *
p,
int Id )
102 assert( Id >= 0 && 2*Id < p->nSize );
104 return p->pArray[2*Id+1];
110 p->pArray[
p->nSize-2] ^= 1;
114static int Mini_AigVar2Lit(
int Var,
int fCompl ) {
return Var +
Var + fCompl; }
115static int Mini_AigLit2Var(
int Lit ) {
return Lit >> 1; }
116static int Mini_AigLitIsCompl(
int Lit ) {
return Lit & 1; }
117static int Mini_AigLitNot(
int Lit ) {
return Lit ^ 1; }
118static int Mini_AigLitNotCond(
int Lit,
int c ) {
return Lit ^ (int)(c > 0); }
119static int Mini_AigLitRegular(
int Lit ) {
return Lit & ~01; }
121static int Mini_AigLitConst0() {
return 0; }
122static int Mini_AigLitConst1() {
return 1; }
123static int Mini_AigLitIsConst0(
int Lit ) {
return Lit == 0; }
124static int Mini_AigLitIsConst1(
int Lit ) {
return Lit == 1; }
125static int Mini_AigLitIsConst(
int Lit ) {
return Lit == 0 || Lit == 1; }
127static int Mini_AigNodeNum(
Mini_Aig_t *
p ) {
return p->nSize/2; }
128static int Mini_AigNodeIsConst(
Mini_Aig_t *
p,
int Id ) {
assert( Id >= 0 );
return Id == 0; }
134static int Mini_AigRegNum(
Mini_Aig_t *
p ) {
return p->nRegs; }
135static void Mini_AigSetRegNum(
Mini_Aig_t *
p,
int n ) {
p->nRegs = n; }
138#define Mini_AigForEachPi( p, i ) for (i = 1; i < Mini_AigNodeNum(p); i++) if ( !Mini_AigNodeIsPi(p, i) ) {} else
139#define Mini_AigForEachPo( p, i ) for (i = 1; i < Mini_AigNodeNum(p); i++) if ( !Mini_AigNodeIsPo(p, i) ) {} else
140#define Mini_AigForEachAnd( p, i ) for (i = 1; i < Mini_AigNodeNum(p); i++) if ( !Mini_AigNodeIsAnd(p, i) ) {} else
153static Mini_Aig_t * Mini_AigStartSupport(
int nIns,
int nObjsAlloc )
156 assert( 1+nIns < nObjsAlloc );
158 p->nCap = 2*nObjsAlloc;
159 p->nSize = 2*(1+nIns);
161 for ( i = 0; i <
p->nSize; i++ )
165static Mini_Aig_t * Mini_AigStartArray(
int nIns,
int n0InAnds,
int * p0InAnds,
int nOuts,
int * pOuts )
168 assert( 1+nIns <= n0InAnds );
170 p->nCap = 2*(n0InAnds + nOuts);
171 p->nSize = 2*(n0InAnds + nOuts);
173 for ( i = 0; i < 2*(1 + nIns); i++ )
175 memcpy(
p->pArray + 2*(1 + nIns), p0InAnds + 2*(1 + nIns), 2*(n0InAnds - 1 - nIns)*
sizeof(
int) );
176 for ( i = 0; i < nOuts; i++ )
178 p->pArray[2*(n0InAnds + i)+0] = pOuts[i];
187 pNew->
nCap =
p->nCap;
223 nNodes +=
p->pArray[2*i] >
p->pArray[2*i+1];
232 int Lel0 = pLevels[Mini_AigLit2Var(Mini_AigNodeFanin0(
p, i))];
233 int Lel1 = pLevels[Mini_AigLit2Var(Mini_AigNodeFanin1(
p, i))];
234 pLevels[i] = 1 + (Lel0 > Lel1 ? Lel0 : Lel1);
238 int Lel0 = pLevels[Mini_AigLit2Var(Mini_AigNodeFanin0(
p, i))];
239 Level = Level > Lel0 ? Level : Lel0;
246 printf(
"MiniAIG stats: PI = %d PO = %d FF = %d AND = %d\n", Mini_AigPiNum(
p), Mini_AigPoNum(
p), Mini_AigRegNum(
p), Mini_AigAndNum(
p) );
250static void Mini_AigDump(
Mini_Aig_t *
p,
char * pFileName )
254 pFile = fopen( pFileName,
"wb" );
257 printf(
"Cannot open file for writing \"%s\".\n", pFileName );
260 RetValue = (int)fwrite( &
p->nSize,
sizeof(
int), 1, pFile );
261 RetValue = (int)fwrite( &
p->nRegs,
sizeof(
int), 1, pFile );
262 RetValue = (int)fwrite(
p->pArray,
sizeof(
int),
p->nSize, pFile );
265static Mini_Aig_t * Mini_AigLoad(
char * pFileName )
270 pFile = fopen( pFileName,
"rb" );
273 printf(
"Cannot open file for reading \"%s\".\n", pFileName );
276 RetValue = (int)fread( &nSize,
sizeof(
int), 1, pFile );
278 p->nSize =
p->nCap = nSize;
280 RetValue = (int)fread( &
p->nRegs,
sizeof(
int), 1, pFile );
281 RetValue = (int)fread(
p->pArray,
sizeof(
int),
p->nSize, pFile );
295static int Mini_AigCreatePo(
Mini_Aig_t *
p,
int Lit0 )
298 assert( Lit0 >= 0 && Lit0 < Lit );
304static int Mini_AigAnd(
Mini_Aig_t *
p,
int Lit0,
int Lit1 )
307 assert( Lit0 >= 0 && Lit0 < Lit );
308 assert( Lit1 >= 0 && Lit1 < Lit );
310 Mini_AigPush(
p, Lit0, Lit1 );
312 Mini_AigPush(
p, Lit1, Lit0 );
315static int Mini_AigOr(
Mini_Aig_t *
p,
int Lit0,
int Lit1 )
317 return Mini_AigLitNot( Mini_AigAnd(
p, Mini_AigLitNot(Lit0), Mini_AigLitNot(Lit1) ) );
319static int Mini_AigMux(
Mini_Aig_t *
p,
int LitC,
int Lit1,
int Lit0 )
321 int Res0 = Mini_AigAnd(
p, LitC, Lit1 );
322 int Res1 = Mini_AigAnd(
p, Mini_AigLitNot(LitC), Lit0 );
323 return Mini_AigOr(
p, Res0, Res1 );
325static int Mini_AigXor(
Mini_Aig_t *
p,
int Lit0,
int Lit1 )
327 return Mini_AigMux(
p, Lit0, Mini_AigLitNot(Lit1), Lit1 );
329static int Mini_AigXorSpecial(
Mini_Aig_t *
p,
int Lit0,
int Lit1 )
332 assert( Lit0 >= 0 && Lit0 < Lit );
333 assert( Lit1 >= 0 && Lit1 < Lit );
335 Mini_AigPush(
p, Lit0, Lit1 );
337 Mini_AigPush(
p, Lit1, Lit0 );
340static int Mini_AigAndMulti(
Mini_Aig_t *
p,
int * pLits,
int nLits )
346 for ( i = 0; i < nLits/2; i++ )
347 pLits[i] = Mini_AigAnd(
p, pLits[2*i], pLits[2*i+1]);
349 pLits[i++] = pLits[nLits-1];
354static int Mini_AigMuxMulti(
Mini_Aig_t *
p,
int * pCtrl,
int nCtrl,
int * pData,
int nData )
360 assert( nData <= (1 << nCtrl) );
361 for ( c = 0; c < nCtrl; c++ )
363 for ( i = 0; i < nData/2; i++ )
364 pData[i] = Mini_AigMux(
p, pCtrl[c], pData[2*i+1], pData[2*i] );
366 pData[i++] = Mini_AigMux(
p, pCtrl[c], 0, pData[nData-1] );
372static int Mini_AigMuxMulti_rec(
Mini_Aig_t *
p,
int * pCtrl,
int * pData,
int nData )
379 Res0 = Mini_AigMuxMulti_rec(
p, pCtrl+1, pData, nData/2 );
380 Res1 = Mini_AigMuxMulti_rec(
p, pCtrl+1, pData+nData/2, nData/2 );
381 return Mini_AigMux(
p, pCtrl[0], Res1, Res0 );
388 pCopy[i] = Mini_AigCreatePi(pNew);
391 int iLit0 = Mini_AigNodeFanin0(
p, i);
392 int iLit1 = Mini_AigNodeFanin1(
p, i);
393 iLit0 = Mini_AigLitNotCond( pCopy[Mini_AigLit2Var(iLit0)], Mini_AigLitIsCompl(iLit0) );
394 iLit1 = Mini_AigLitNotCond( pCopy[Mini_AigLit2Var(iLit1)], Mini_AigLitIsCompl(iLit1) );
395 if ( iLit0 <= iLit1 )
396 pCopy[i] = Mini_AigAnd( pNew, iLit0, iLit1 );
398 pCopy[i] = Mini_AigXor( pNew, iLit0, iLit1 );
402 int iLit0 = Mini_AigNodeFanin0(
p, i );
403 iLit0 = Mini_AigLitNotCond( pCopy[Mini_AigLit2Var(iLit0)], Mini_AigLitIsCompl(iLit0) );
404 pCopy[i] = Mini_AigCreatePo( pNew, iLit0 );
411static unsigned s_MiniTruths5[5] = {
418static inline int Mini_AigTt5HasVar(
unsigned t,
int iVar )
420 return ((t << (1<<iVar)) & s_MiniTruths5[iVar]) != (t & s_MiniTruths5[iVar]);
422static inline unsigned Mini_AigTt5Cofactor0(
unsigned t,
int iVar )
424 assert( iVar >= 0 && iVar < 6 );
425 return (t & ~s_MiniTruths5[iVar]) | ((t & ~s_MiniTruths5[iVar]) << (1<<iVar));
427static inline unsigned Mini_AigTt5Cofactor1(
unsigned t,
int iVar )
429 assert( iVar >= 0 && iVar < 6 );
430 return (t & s_MiniTruths5[iVar]) | ((t & s_MiniTruths5[iVar]) >> (1<<iVar));
432static inline int Mini_AigAndProp(
Mini_Aig_t *
p,
int iLit0,
int iLit1 )
435 return iLit0 ? iLit1 : 0;
437 return iLit1 ? iLit0 : 0;
438 if ( iLit0 == iLit1 )
440 if ( iLit0 == Mini_AigLitNot(iLit1) )
442 return Mini_AigAnd(
p, iLit0, iLit1 );
444static inline int Mini_AigMuxProp(
Mini_Aig_t *
p,
int iCtrl,
int iData1,
int iData0 )
446 int iTemp0 = Mini_AigAndProp(
p, Mini_AigLitNot(iCtrl), iData0 );
447 int iTemp1 = Mini_AigAndProp(
p, iCtrl, iData1 );
448 return Mini_AigLitNot( Mini_AigAndProp(
p, Mini_AigLitNot(iTemp0), Mini_AigLitNot(iTemp1) ) );
450static inline int Mini_AigTruth(
Mini_Aig_t *
p,
int * pVarLits,
int nVars,
unsigned Truth )
460 if ( Mini_AigTt5HasVar( Truth,
Var ) )
464 Lit0 = Mini_AigTruth(
p, pVarLits,
Var, Mini_AigTt5Cofactor0(Truth,
Var) );
465 Lit1 = Mini_AigTruth(
p, pVarLits,
Var, Mini_AigTt5Cofactor1(Truth,
Var) );
466 return Mini_AigMuxProp(
p, pVarLits[
Var], Lit1, Lit0 );
474 int iFaninLit0 = Mini_AigNodeFanin0(
p, i );
475 int iFaninLit1 = Mini_AigNodeFanin1(
p, i );
476 int Phase0 = pRes[Mini_AigLit2Var(iFaninLit0)] ^ Mini_AigLitIsCompl(iFaninLit0);
477 int Phase1 = pRes[Mini_AigLit2Var(iFaninLit1)] ^ Mini_AigLitIsCompl(iFaninLit1);
478 pRes[i] = Phase0 & Phase1;
487 int i, iFaninLit0, iFaninLit1;
491 iFaninLit0 = Mini_AigNodeFanin0(
p, i );
492 iFaninLit1 = Mini_AigNodeFanin1(
p, i );
494 if ( iFaninLit0 >= 2 * i )
495 printf(
"Fanin0 of AND node %d is not in a topological order.\n", i ), status = 0;
496 if ( iFaninLit1 >= 2 * i )
497 printf(
"Fanin0 of AND node %d is not in a topological order.\n", i ), status = 0;
502 iFaninLit0 = Mini_AigNodeFanin0(
p, i );
504 if ( iFaninLit0 >= 2 * i )
505 printf(
"Fanin0 of PO node %d is not in a topological order.\n", i ), status = 0;
511static void Mini_AigDumpVerilog(
char * pFileName,
char * pModuleName,
Mini_Aig_t *
p )
513 int i, k, iFaninLit0, iFaninLit1, Length =
strlen(pModuleName), nPos = Mini_AigPoNum(
p);
515 FILE * pFile = fopen( pFileName,
"wb" );
516 if ( pFile == NULL ) { printf(
"Cannot open output file %s\n", pFileName );
MINI_AIG_FREE( pObjIsPi );
return; }
519 fprintf( pFile,
"module %s (\n", pModuleName );
520 if ( Mini_AigPiNum(
p) > 0 )
522 fprintf( pFile,
"%*sinput wire", Length+10,
"" );
526 if ( k++ % 12 == 0 ) fprintf( pFile,
"\n%*s", Length+10,
"" );
527 fprintf( pFile,
"i%d, ", i );
531 fprintf( pFile,
"\n%*soutput wire", Length+10,
"" );
535 if ( k++ % 12 == 0 ) fprintf( pFile,
"\n%*s", Length+10,
"" );
536 fprintf( pFile,
"o%d%s", i, k==nPos ?
"":
", " );
538 fprintf( pFile,
"\n%*s);\n\n", Length+8,
"" );
542 iFaninLit0 = Mini_AigNodeFanin0(
p, i );
543 iFaninLit1 = Mini_AigNodeFanin1(
p, i );
544 fprintf( pFile,
" assign n%d = ", i );
545 fprintf( pFile,
"%s%c%d", (iFaninLit0 & 1) ?
"~":
"", pObjIsPi[iFaninLit0 >> 1] ?
'i':
'n', iFaninLit0 >> 1 );
546 fprintf( pFile,
" & " );
547 fprintf( pFile,
"%s%c%d", (iFaninLit1 & 1) ?
"~":
"", pObjIsPi[iFaninLit1 >> 1] ?
'i':
'n', iFaninLit1 >> 1 );
548 fprintf( pFile,
";\n" );
551 fprintf( pFile,
"\n" );
554 iFaninLit0 = Mini_AigNodeFanin0(
p, i );
555 fprintf( pFile,
" assign o%d = ", i );
556 fprintf( pFile,
"%s%c%d", (iFaninLit0 & 1) ?
"~":
"", pObjIsPi[iFaninLit0 >> 1] ?
'i':
'n', iFaninLit0 >> 1 );
557 fprintf( pFile,
";\n" );
559 fprintf( pFile,
"\nendmodule // %s \n\n\n", pModuleName );
565static void Mini_AigDumpBlif(
char * pFileName,
char * pModuleName,
Mini_Aig_t *
p,
int fVerbose )
567 int i, k, iFaninLit0, iFaninLit1;
569 FILE * pFile = fopen( pFileName,
"wb" );
570 assert( Mini_AigPiNum(
p) <= 26 );
571 if ( pFile == NULL ) { printf(
"Cannot open output file %s\n", pFileName );
MINI_AIG_FREE( pObjIsPi );
return; }
574 fprintf( pFile,
".model %s\n", pModuleName );
575 if ( Mini_AigPiNum(
p) )
578 fprintf( pFile,
".inputs" );
582 fprintf( pFile,
" %c", (
char)(
'a'+k++) );
586 fprintf( pFile,
"\n.outputs" );
588 fprintf( pFile,
" o%d", k++ );
589 fprintf( pFile,
"\n\n" );
593 iFaninLit0 = Mini_AigNodeFanin0(
p, i );
594 iFaninLit1 = Mini_AigNodeFanin1(
p, i );
595 fprintf( pFile,
".names" );
596 if ( pObjIsPi[iFaninLit0 >> 1] >= 0 )
597 fprintf( pFile,
" %c", (
char)(
'a'+pObjIsPi[iFaninLit0 >> 1]) );
599 fprintf( pFile,
" n%d", iFaninLit0 >> 1 );
600 if ( pObjIsPi[iFaninLit1 >> 1] >= 0 )
601 fprintf( pFile,
" %c", (
char)(
'a'+pObjIsPi[iFaninLit1 >> 1]) );
603 fprintf( pFile,
" n%d", iFaninLit1 >> 1 );
604 fprintf( pFile,
" n%d\n", i );
605 if ( iFaninLit0 < iFaninLit1 )
606 fprintf( pFile,
"%d%d 1\n", !(iFaninLit0 & 1), !(iFaninLit1 & 1) );
607 else if ( !(iFaninLit0 & 1) == !(iFaninLit1 & 1) )
608 fprintf( pFile,
"10 1\n01 1\n" );
610 fprintf( pFile,
"00 1\n11 1\n" );
613 fprintf( pFile,
"\n" );
617 iFaninLit0 = Mini_AigNodeFanin0(
p, i );
618 fprintf( pFile,
".names" );
619 if ( pObjIsPi[iFaninLit0 >> 1] >= 0 )
620 fprintf( pFile,
" %c", (
char)(
'a'+pObjIsPi[iFaninLit0 >> 1]) );
622 fprintf( pFile,
" n%d", iFaninLit0 >> 1 );
623 fprintf( pFile,
" o%d\n", k++ );
624 fprintf( pFile,
"%d 1\n", !(iFaninLit0 & 1) );
626 fprintf( pFile,
".end\n\n" );
630 printf(
"Written MiniAIG into the BLIF file \"%s\".\n", pFileName );
637 int nCiNum = Mini_AigPiNum(
p);
638 int nCoNum = Mini_AigPoNum(
p);
640 for ( i = 0; i < nCiNum; i++ )
641 if ( !Mini_AigNodeIsPi(
p, nOffset+i ) )
643 nOffset = Mini_AigNodeNum(
p) - nCoNum;
644 for ( i = 0; i < nCoNum; i++ )
645 if ( !Mini_AigNodeIsPo(
p, nOffset+i ) )
655static unsigned Mini_AigerReadUnsigned( FILE * pFile )
657 unsigned x = 0, i = 0;
659 while ((ch = fgetc(pFile)) & 0x80)
660 x |= (ch & 0x7f) << (7 * i++);
661 return x | (ch << (7 * i));
663static void Mini_AigerWriteUnsigned( FILE * pFile,
unsigned x )
668 ch = (x & 0x7f) | 0x80;
675static int * Mini_AigerReadInt(
char * pFileName,
int * pnObjs,
int * pnIns,
int * pnLatches,
int * pnOuts,
int * pnAnds )
677 int i, Temp,
nTotal, nObjs, nIns, nLatches, nOuts, nAnds, * pObjs;
678 FILE * pFile = fopen( pFileName,
"rb" );
681 fprintf( stdout,
"Mini_AigerRead(): Cannot open the output file \"%s\".\n", pFileName );
684 if ( fgetc(pFile) !=
'a' || fgetc(pFile) !=
'i' || fgetc(pFile) !=
'g' )
686 fprintf( stdout,
"Mini_AigerRead(): Can only read binary AIGER.\n" );
690 if ( fscanf(pFile,
"%d %d %d %d %d", &
nTotal, &nIns, &nLatches, &nOuts, &nAnds) != 5 )
692 fprintf( stdout,
"Mini_AigerRead(): Cannot read the header line.\n" );
696 if (
nTotal != nIns + nLatches + nAnds )
698 fprintf( stdout,
"The number of objects does not match.\n" );
702 nObjs = 1 + nIns + 2*nLatches + nOuts + nAnds;
704 for ( i = 0; i <= nIns + nLatches; i++ )
707 for ( i = 0; i < nLatches; i++ )
709 while ( fgetc(pFile) !=
'\n' );
710 fscanf( pFile,
"%d", &Temp );
711 pObjs[2*(nObjs-nLatches+i)+0] = Temp;
715 for ( i = 0; i < nOuts; i++ )
717 while ( fgetc(pFile) !=
'\n' );
718 fscanf( pFile,
"%d", &Temp );
719 pObjs[2*(nObjs-nOuts-nLatches+i)+0] = Temp;
723 while ( fgetc(pFile) !=
'\n' );
724 for ( i = 0; i < nAnds; i++ )
726 int uLit = 2*(1+nIns+nLatches+i);
727 int uLit1 = uLit - Mini_AigerReadUnsigned( pFile );
728 int uLit0 = uLit1 - Mini_AigerReadUnsigned( pFile );
729 pObjs[uLit+0] = uLit0;
730 pObjs[uLit+1] = uLit1;
733 if ( pnObjs ) *pnObjs = nObjs;
734 if ( pnIns ) *pnIns = nIns;
735 if ( pnLatches ) *pnLatches = nLatches;
736 if ( pnOuts ) *pnOuts = nOuts;
737 if ( pnAnds ) *pnAnds = nAnds;
740static Mini_Aig_t * Mini_AigerRead(
char * pFileName,
int fVerbose )
743 int nObjs, nIns, nLatches, nOuts, nAnds, * pObjs = Mini_AigerReadInt( pFileName, &nObjs, &nIns, &nLatches, &nOuts, &nAnds );
752 printf(
"Loaded MiniAIG from the AIGER file \"%s\".\n", pFileName );
756static void Mini_AigerWriteInt(
char * pFileName,
int * pObjs,
int nObjs,
int nIns,
int nLatches,
int nOuts,
int nAnds )
758 FILE * pFile = fopen( pFileName,
"wb" );
int i;
761 fprintf( stdout,
"Mini_AigerWrite(): Cannot open the output file \"%s\".\n", pFileName );
764 fprintf( pFile,
"aig %d %d %d %d %d\n", nIns + nLatches + nAnds, nIns, nLatches, nOuts, nAnds );
765 for ( i = 0; i < nLatches; i++ )
766 fprintf( pFile,
"%d\n", pObjs[2*(nObjs-nLatches+i)+0] );
767 for ( i = 0; i < nOuts; i++ )
768 fprintf( pFile,
"%d\n", pObjs[2*(nObjs-nOuts-nLatches+i)+0] );
769 for ( i = 0; i < nAnds; i++ )
771 int uLit = 2*(1+nIns+nLatches+i);
772 int uLit0 = pObjs[uLit+0];
773 int uLit1 = pObjs[uLit+1];
774 Mini_AigerWriteUnsigned( pFile, uLit - uLit1 );
775 Mini_AigerWriteUnsigned( pFile, uLit1 - uLit0 );
777 fprintf( pFile,
"c\n" );
780static void Mini_AigerWrite(
char * pFileName,
Mini_Aig_t *
p,
int fVerbose )
782 int i, nIns = 0, nOuts = 0, nAnds = 0;
783 assert( Mini_AigIsNormalized(
p) );
784 for ( i = 1; i < Mini_AigNodeNum(
p); i++ )
786 if ( Mini_AigNodeIsPi(
p, i) )
788 else if ( Mini_AigNodeIsPo(
p, i) )
793 Mini_AigerWriteInt( pFileName,
p->pArray,
p->nSize/2, nIns -
p->nRegs,
p->nRegs, nOuts -
p->nRegs, nAnds );
795 printf(
"Written MiniAIG into the AIGER file \"%s\".\n", pFileName );
797static void Mini_AigerTest(
char * pFileNameIn,
char * pFileNameOut )
802 printf(
"Finished reading input file \"%s\".\n", pFileNameIn );
803 Mini_AigerWrite( pFileNameOut,
p, 1 );
804 printf(
"Finished writing output file \"%s\".\n", pFileNameOut );
841#ifndef _VERIFIC_DATABASE_H_
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
int nTotal
DECLARATIONS ///.
#define MINI_AIG_ALLOC(type, num)
MACRO DEFINITIONS ///.
struct Mini_Aig_t_ Mini_Aig_t
BASIC TYPES ///.
#define MINI_AIG_FALLOC(type, num)
#define MINI_AIG_NULL
INCLUDES ///.
#define MINI_AIG_REALLOC(type, obj, num)
#define MINI_AIG_FREE(obj)
#define Mini_AigForEachPi(p, i)
#define Mini_AigForEachPo(p, i)
#define MINI_AIG_CALLOC(type, num)
#define Mini_AigForEachAnd(p, i)
#define MINI_AIG_START_SIZE