212 vLits = Vec_IntAlloc( Aig_ManCoNum(pMan) );
215 pDriver = Aig_ObjFanin0(pObj);
216 Vec_IntPush( vLits, Ioa_ObjMakeLit( Ioa_ObjAigerNum(pDriver), Aig_ObjFaninC0(pObj) ^ (Ioa_ObjAigerNum(pDriver) == 0) ) );
220 pDriver = Aig_ObjFanin0(pObj);
221 Vec_IntPush( vLits, Ioa_ObjMakeLit( Ioa_ObjAigerNum(pDriver), Aig_ObjFaninC0(pObj) ^ (Ioa_ObjAigerNum(pDriver) == 0) ) );
240 int Pos = 0, Lit, LitPrev, Diff, i;
241 vBinary = Vec_StrAlloc( 2 * Vec_IntSize(vLits) );
242 LitPrev = Vec_IntEntry( vLits, 0 );
246 Diff = Lit - LitPrev;
247 Diff = (Lit < LitPrev)? -Diff : Diff;
248 Diff = (Diff << 1) | (
int)(Lit < LitPrev);
251 if (
Pos + 10 > vBinary->
nCap )
252 Vec_StrGrow( vBinary, vBinary->
nCap+1 );
290 int nNodes, i, uLit, uLit0, uLit1;
293 Ioa_ObjSetAigerNum( Aig_ManConst1(pMan), nNodes++ );
295 Ioa_ObjSetAigerNum( pObj, nNodes++ );
297 Ioa_ObjSetAigerNum( pObj, nNodes++ );
309 vBuffer = Vec_StrAlloc( 3*Aig_ManObjNum(pMan) );
310 Vec_StrPrintStr( vBuffer,
"aig " );
311 Vec_StrPrintNum( vBuffer, Aig_ManCiNum(pMan) + Aig_ManNodeNum(pMan) );
312 Vec_StrPrintStr( vBuffer,
" " );
313 Vec_StrPrintNum( vBuffer, Aig_ManCiNum(pMan) - Aig_ManRegNum(pMan) );
314 Vec_StrPrintStr( vBuffer,
" " );
315 Vec_StrPrintNum( vBuffer, Aig_ManRegNum(pMan) );
316 Vec_StrPrintStr( vBuffer,
" " );
317 Vec_StrPrintNum( vBuffer, Aig_ManCoNum(pMan) - Aig_ManRegNum(pMan) );
318 Vec_StrPrintStr( vBuffer,
" " );
319 Vec_StrPrintNum( vBuffer, Aig_ManNodeNum(pMan) );
320 Vec_StrPrintStr( vBuffer,
"\n" );
325 pDriver = Aig_ObjFanin0(pObj);
326 uLit = Ioa_ObjMakeLit( Ioa_ObjAigerNum(pDriver), Aig_ObjFaninC0(pObj) ^ (Ioa_ObjAigerNum(pDriver) == 0) );
328 Vec_StrPrintNum( vBuffer, uLit );
329 Vec_StrPrintStr( vBuffer,
"\n" );
335 pDriver = Aig_ObjFanin0(pObj);
336 uLit = Ioa_ObjMakeLit( Ioa_ObjAigerNum(pDriver), Aig_ObjFaninC0(pObj) ^ (Ioa_ObjAigerNum(pDriver) == 0) );
338 Vec_StrPrintNum( vBuffer, uLit );
339 Vec_StrPrintStr( vBuffer,
"\n" );
344 uLit = Ioa_ObjMakeLit( Ioa_ObjAigerNum(pObj), 0 );
345 uLit0 = Ioa_ObjMakeLit( Ioa_ObjAigerNum(Aig_ObjFanin0(pObj)), Aig_ObjFaninC0(pObj) );
346 uLit1 = Ioa_ObjMakeLit( Ioa_ObjAigerNum(Aig_ObjFanin1(pObj)), Aig_ObjFaninC1(pObj) );
359 Vec_StrPrintStr( vBuffer,
"c" );
383 Vec_StrPrintStr( vBuffer,
"n" );
384 Vec_StrPrintStr( vBuffer, pMan->pName );
385 Vec_StrPush( vBuffer, 0 );
388 *pnSize = Vec_StrSize( vBuffer );
389 pBuffer = Vec_StrReleaseArray( vBuffer );
390 Vec_StrFree( vBuffer );
451 int i, nNodes, nBufferSize,
Pos;
452 unsigned char * pBuffer;
453 unsigned uLit0, uLit1, uLit;
455 if ( Aig_ManCoNum(pMan) == 0 )
457 printf(
"AIG cannot be written because it has no POs.\n" );
463 pFile = fopen( pFileName,
"wb" );
466 fprintf( stdout,
"Ioa_WriteAiger(): Cannot open the output file \"%s\".\n", pFileName );
479 Ioa_ObjSetAigerNum( Aig_ManConst1(pMan), nNodes++ );
481 Ioa_ObjSetAigerNum( pObj, nNodes++ );
483 Ioa_ObjSetAigerNum( pObj, nNodes++ );
486 fprintf( pFile,
"aig%s %u %u %u %u %u",
488 Aig_ManCiNum(pMan) + Aig_ManNodeNum(pMan),
489 Aig_ManCiNum(pMan) - Aig_ManRegNum(pMan),
491 Aig_ManConstrNum(pMan) ? 0 : Aig_ManCoNum(pMan) - Aig_ManRegNum(pMan),
492 Aig_ManNodeNum(pMan) );
494 if ( Aig_ManConstrNum(pMan) )
495 fprintf( pFile,
" %u %u", Aig_ManCoNum(pMan) - Aig_ManRegNum(pMan) - Aig_ManConstrNum(pMan), Aig_ManConstrNum(pMan) );
496 fprintf( pFile,
"\n" );
508 pDriver = Aig_ObjFanin0(pObj);
509 fprintf( pFile,
"%u\n", Ioa_ObjMakeLit( Ioa_ObjAigerNum(pDriver), Aig_ObjFaninC0(pObj) ^ (Ioa_ObjAigerNum(pDriver) == 0) ) );
515 pDriver = Aig_ObjFanin0(pObj);
516 fprintf( pFile,
"%u\n", Ioa_ObjMakeLit( Ioa_ObjAigerNum(pDriver), Aig_ObjFaninC0(pObj) ^ (Ioa_ObjAigerNum(pDriver) == 0) ) );
523 fwrite( Vec_StrArray(vBinary), 1, Vec_StrSize(vBinary), pFile );
524 Vec_StrFree( vBinary );
525 Vec_IntFree( vLits );
531 nBufferSize = 6 * Aig_ManNodeNum(pMan) + 100;
532 pBuffer =
ABC_ALLOC(
unsigned char, nBufferSize );
537 uLit = Ioa_ObjMakeLit( Ioa_ObjAigerNum(pObj), 0 );
538 uLit0 = Ioa_ObjMakeLit( Ioa_ObjAigerNum(Aig_ObjFanin0(pObj)), Aig_ObjFaninC0(pObj) );
539 uLit1 = Ioa_ObjMakeLit( Ioa_ObjAigerNum(Aig_ObjFanin1(pObj)), Aig_ObjFaninC1(pObj) );
549 if (
Pos > nBufferSize - 10 )
551 printf(
"Ioa_WriteAiger(): AIGER generation has failed because the allocated buffer is too small.\n" );
560 fwrite( pBuffer, 1,
Pos, pFile );
585 fprintf( pFile,
"c" );
587 fprintf( pFile,
"n%s%c", pMan->pName,
'\0' );
588 fprintf( pFile,
"\nThis file was produced by the IOA package in ABC on %s\n",
Ioa_TimeStamp() );
589 fprintf( pFile,
"For information about AIGER format, refer to %s\n",
"http://fmv.jku.at/aiger" );