48 static char Buffer[1000];
49 if ( Aig_ObjIsNode(pObj) || Aig_ObjIsConst1(pObj) )
50 sprintf( Buffer,
"n%0*d", (
unsigned char)Abc_Base10Log(Aig_ManObjNumMax(
p)), Aig_ObjId(pObj) );
51 else if ( Saig_ObjIsPi(
p, pObj) )
52 sprintf( Buffer,
"pi%0*d", (
unsigned char)Abc_Base10Log(Saig_ManPiNum(
p)), Aig_ObjCioId(pObj) );
53 else if ( Saig_ObjIsPo(
p, pObj) )
54 sprintf( Buffer,
"po%0*d", (
unsigned char)Abc_Base10Log(Saig_ManPoNum(
p)), Aig_ObjCioId(pObj) );
55 else if ( Saig_ObjIsLo(
p, pObj) )
56 sprintf( Buffer,
"lo%0*d", (
unsigned char)Abc_Base10Log(Saig_ManRegNum(
p)), Aig_ObjCioId(pObj) - Saig_ManPiNum(
p) );
57 else if ( Saig_ObjIsLi(
p, pObj) )
58 sprintf( Buffer,
"li%0*d", (
unsigned char)Abc_Base10Log(Saig_ManRegNum(
p)), Aig_ObjCioId(pObj) - Saig_ManPoNum(
p) );
80 if ( Aig_ManCoNum(
p) == 0 )
82 printf(
"Aig_ManDumpBlif(): AIG manager does not have POs.\n" );
87 pFile = fopen( pFileName,
"w" );
90 printf(
"Saig_ManDumpBlif(): Cannot open file for writing.\n" );
93 fprintf( pFile,
"# BLIF file written by procedure Saig_ManDumpBlif()\n" );
94 fprintf( pFile,
"# If unedited, this file can be read by Saig_ManReadBlif()\n" );
95 fprintf( pFile,
"# AIG stats: pi=%d po=%d reg=%d and=%d obj=%d maxid=%d\n",
96 Saig_ManPiNum(
p), Saig_ManPoNum(
p), Saig_ManRegNum(
p),
97 Aig_ManNodeNum(
p), Aig_ManObjNum(
p), Aig_ManObjNumMax(
p) );
98 fprintf( pFile,
".model %s\n",
p->pName );
100 fprintf( pFile,
".inputs" );
103 fprintf( pFile,
"\n" );
105 fprintf( pFile,
".outputs" );
108 fprintf( pFile,
"\n" );
110 if ( Aig_ManRegNum(
p) )
114 fprintf( pFile,
".latch" );
117 fprintf( pFile,
" 0\n" );
121 if ( Aig_ObjRefs(Aig_ManConst1(
p)) )
122 fprintf( pFile,
".names %s\n 1\n",
Saig_ObjName(
p, Aig_ManConst1(
p)) );
126 fprintf( pFile,
".names" );
127 fprintf( pFile,
" %s",
Saig_ObjName(
p, Aig_ObjFanin0(pObj)) );
128 fprintf( pFile,
" %s",
Saig_ObjName(
p, Aig_ObjFanin1(pObj)) );
130 fprintf( pFile,
"\n%d%d 1\n", !Aig_ObjFaninC0(pObj), !Aig_ObjFaninC1(pObj) );
135 fprintf( pFile,
".names" );
136 fprintf( pFile,
" %s",
Saig_ObjName(
p, Aig_ObjFanin0(pObj)) );
138 fprintf( pFile,
"\n%d 1\n", !Aig_ObjFaninC0(pObj) );
140 fprintf( pFile,
".end\n" );
157 static char Buffer[1000];
158 if ( fscanf( pFile,
"%s", Buffer ) == 1 )
176 if ( pToken[0] ==
'n' )
177 return atoi( pToken + 1 );
178 if ( pToken[0] ==
'p' )
179 return atoi( pToken + 2 );
180 if ( pToken[0] ==
'l' )
181 return atoi( pToken + 2 );
200 if ( pToken[0] ==
'n' )
202 Num = atoi( pToken + 1 );
203 return Aig_ManObj(
p, pNum2Id[Num] );
205 if ( pToken[0] ==
'p' )
208 if ( pToken[0] ==
'i' )
210 Num = atoi( pToken + 1 );
211 return Aig_ManCi(
p, Num );
213 if ( pToken[0] ==
'o' )
218 if ( pToken[0] ==
'l' )
221 if ( pToken[0] ==
'o' )
223 Num = atoi( pToken + 1 );
224 return Saig_ManLo(
p, Num );
226 if ( pToken[0] ==
'i' )
252 int i, nPis, nPos, nRegs, Number;
253 int * pNum2Id = NULL;
255 pFile = fopen( pFileName,
"r" );
258 printf(
"Saig_ManReadBlif(): Cannot open file for reading.\n" );
263 if ( pToken == NULL )
264 { printf(
"Saig_ManReadBlif(): Error 1.\n" );
return NULL; }
267 if ( pToken == NULL )
268 { printf(
"Saig_ManReadBlif(): Error 2.\n" );
return NULL; }
271 p->pName = Abc_UtilStrsav( pToken );
272 p->pSpec = Abc_UtilStrsav( pFileName );
275 if ( pToken == NULL ||
strcmp( pToken,
".inputs" ) )
276 { printf(
"Saig_ManReadBlif(): Error 3.\n" );
Aig_ManStop(
p);
return NULL; }
277 for ( nPis = 0; (pToken =
Saig_ManReadToken( pFile )) && pToken[0] !=
'.'; nPis++ );
279 if ( pToken == NULL ||
strcmp( pToken,
".outputs" ) )
280 { printf(
"Saig_ManReadBlif(): Error 4.\n" );
Aig_ManStop(
p);
return NULL; }
281 for ( nPos = 0; (pToken =
Saig_ManReadToken( pFile )) && pToken[0] !=
'.'; nPos++ );
283 if ( pToken == NULL )
284 { printf(
"Saig_ManReadBlif(): Error 5.\n" );
Aig_ManStop(
p);
return NULL; }
285 for ( nRegs = 0;
strcmp( pToken,
".latch" ) == 0; nRegs++ )
288 if ( pToken == NULL )
289 { printf(
"Saig_ManReadBlif(): Error 6.\n" );
Aig_ManStop(
p);
return NULL; }
291 if ( pToken == NULL )
292 { printf(
"Saig_ManReadBlif(): Error 7.\n" );
Aig_ManStop(
p);
return NULL; }
294 if ( pToken == NULL )
295 { printf(
"Saig_ManReadBlif(): Error 8.\n" );
Aig_ManStop(
p);
return NULL; }
297 if ( pToken == NULL )
298 { printf(
"Saig_ManReadBlif(): Error 9.\n" );
Aig_ManStop(
p);
return NULL; }
301 for ( i = 0; i < nPis + nRegs; i++ )
305 for ( i = 0;
strcmp( pToken,
".names" ) == 0; i++ )
309 if ( i == 0 && pToken[0] ==
'n' )
313 if ( pToken == NULL ||
strcmp( pToken,
"1" ) )
314 { printf(
"Saig_ManReadBlif(): Error 10.\n" );
Aig_ManStop(
p);
return NULL; }
317 if ( pToken == NULL )
318 { printf(
"Saig_ManReadBlif(): Error 11.\n" );
Aig_ManStop(
p);
return NULL; }
325 if ( (pToken[0] ==
'p' && pToken[1] ==
'o') || (pToken[0] ==
'l' && pToken[1] ==
'i') )
329 if ( pToken == NULL )
330 { printf(
"Saig_ManReadBlif(): Error 12.\n" );
Aig_ManStop(
p);
return NULL; }
331 if ( pToken[0] ==
'0' )
332 pFanin0 = Aig_Not(pFanin0);
335 if ( pToken == NULL ||
strcmp( pToken,
"1" ) )
336 { printf(
"Saig_ManReadBlif(): Error 13.\n" );
Aig_ManStop(
p);
return NULL; }
340 if ( pToken == NULL )
341 { printf(
"Saig_ManReadBlif(): Error 14.\n" );
Aig_ManStop(
p);
return NULL; }
351 if ( pNum2Id == NULL )
354 int Size = (int)pow(10.0, (
double)(
strlen(pToken) - 1));
361 if ( pToken == NULL )
362 { printf(
"Saig_ManReadBlif(): Error 15.\n" );
Aig_ManStop(
p);
return NULL; }
363 if ( pToken[0] ==
'0' )
364 pFanin0 = Aig_Not(pFanin0);
365 if ( pToken[1] ==
'0' )
366 pFanin1 = Aig_Not(pFanin1);
369 if ( pToken == NULL ||
strcmp( pToken,
"1" ) )
370 { printf(
"Saig_ManReadBlif(): Error 16.\n" );
Aig_ManStop(
p);
return NULL; }
373 if ( pToken == NULL )
374 { printf(
"Saig_ManReadBlif(): Error 17.\n" );
Aig_ManStop(
p);
return NULL; }
377 pNode =
Aig_And(
p, pFanin0, pFanin1 );
378 if ( Aig_IsComplement(pNode) )
379 { printf(
"Saig_ManReadBlif(): Error 18.\n" );
Aig_ManStop(
p);
return NULL; }
381 pNum2Id[ Number ] = pNode->
Id;
383 if ( pToken == NULL ||
strcmp( pToken,
".end" ) )
384 { printf(
"Saig_ManReadBlif(): Error 19.\n" );
Aig_ManStop(
p);
return NULL; }
385 if ( nPos + nRegs != Aig_ManCoNum(
p) )
386 { printf(
"Saig_ManReadBlif(): Error 20.\n" );
Aig_ManStop(
p);
return NULL; }
389 pNum2Id[pNode->
Id] = pNode->
Id;
395 printf(
"Saig_ManReadBlif(): Check has failed.\n" );
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
void Aig_ManSetCioIds(Aig_Man_t *p)
void Aig_ManStop(Aig_Man_t *p)
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
struct Aig_Obj_t_ Aig_Obj_t
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
#define Aig_ManForEachPiSeq(p, pObj, i)
SEQUENTIAL ITERATORS ///.
#define Aig_ManForEachCo(p, pObj, i)
#define Aig_ManForEachPoSeq(p, pObj, i)
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
#define Aig_ManForEachLiLoSeq(p, pObjLi, pObjLo, k)
ABC_DLL int Aig_ManCheck(Aig_Man_t *p)
FUNCTION DECLARATIONS ///.
int Saig_ManReadNumber(Aig_Man_t *p, char *pToken)
Aig_Obj_t * Saig_ManReadNode(Aig_Man_t *p, int *pNum2Id, char *pToken)
char * Saig_ManReadToken(FILE *pFile)
ABC_NAMESPACE_IMPL_START char * Saig_ObjName(Aig_Man_t *p, Aig_Obj_t *pObj)
DECLARATIONS ///.
Aig_Man_t * Saig_ManReadBlif(char *pFileName)
void Saig_ManDumpBlif(Aig_Man_t *p, char *pFileName)