ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
ifLibBox.c File Reference
#include "if.h"
#include "misc/extra/extra.h"
#include "base/main/main.h"
Include dependency graph for ifLibBox.c:

Go to the source code of this file.

Macros

#define If_LibBoxForEachBox(p, pBox, i)
 DECLARATIONS ///.
 

Functions

If_Box_tIf_BoxStart (char *pName, int Id, int nPis, int nPos, int fSeq, int fBlack, int fOuter)
 FUNCTION DEFINITIONS ///.
 
If_Box_tIf_BoxDup (If_Box_t *p)
 
void If_BoxFree (If_Box_t *p)
 
If_LibBox_tIf_LibBoxStart ()
 
If_LibBox_tIf_LibBoxDup (If_Box_t *p)
 
void If_LibBoxFree (If_LibBox_t *p)
 
If_Box_tIf_LibBoxReadBox (If_LibBox_t *p, int Id)
 
If_Box_tIf_LibBoxFindBox (If_LibBox_t *p, char *pName)
 
void If_LibBoxAdd (If_LibBox_t *p, If_Box_t *pBox)
 
int If_LibBoxNum (If_LibBox_t *p)
 
If_LibBox_tIf_LibBoxRead2 (char *pFileName)
 
char * If_LibBoxGetToken (FILE *pFile)
 
If_LibBox_tIf_LibBoxRead (char *pFileName)
 
void If_LibBoxPrint (FILE *pFile, If_LibBox_t *p)
 
void If_LibBoxWrite (char *pFileName, If_LibBox_t *p)
 
int If_LibBoxLoad (char *pFileName)
 

Macro Definition Documentation

◆ If_LibBoxForEachBox

#define If_LibBoxForEachBox ( p,
pBox,
i )
Value:
Vec_PtrForEachEntry( If_Box_t *, p->vBoxes, pBox, i ) if ( pBox == NULL ) {} else
Cube * p
Definition exorList.c:222
struct If_Box_t_ If_Box_t
Definition if.h:364
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition vecPtr.h:55

DECLARATIONS ///.

CFile****************************************************************

FileName [ifLibBox.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [FPGA mapping based on priority cuts.]

Synopsis [Box library.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - November 21, 2006.]

Revision [

Id
ifLibBox.c,v 1.00 2006/11/21 00:00:00 alanmi Exp

]

Definition at line 31 of file ifLibBox.c.

31#define If_LibBoxForEachBox( p, pBox, i ) \
32 Vec_PtrForEachEntry( If_Box_t *, p->vBoxes, pBox, i ) if ( pBox == NULL ) {} else

Function Documentation

◆ If_BoxDup()

If_Box_t * If_BoxDup ( If_Box_t * p)

Definition at line 63 of file ifLibBox.c.

64{
65 If_Box_t * pNew = NULL;
66 return pNew;
67}

◆ If_BoxFree()

void If_BoxFree ( If_Box_t * p)

Definition at line 68 of file ifLibBox.c.

69{
70 ABC_FREE( p->pDelays );
71 ABC_FREE( p->pName );
72 ABC_FREE( p );
73}
#define ABC_FREE(obj)
Definition abc_global.h:267
Here is the caller graph for this function:

◆ If_BoxStart()

If_Box_t * If_BoxStart ( char * pName,
int Id,
int nPis,
int nPos,
int fSeq,
int fBlack,
int fOuter )

FUNCTION DEFINITIONS ///.

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 49 of file ifLibBox.c.

50{
51 If_Box_t * p;
52 p = ABC_CALLOC( If_Box_t, 1 );
53 p->pName = pName; // consumes memory
54 p->Id = Id;
55 p->fSeq = (char)fSeq;
56 p->fBlack = (char)fBlack;
57 p->fOuter = (char)fOuter;
58 p->nPis = nPis;
59 p->nPos = nPos;
60 p->pDelays = ABC_CALLOC( int, nPis * nPos );
61 return p;
62}
#define ABC_CALLOC(type, num)
Definition abc_global.h:265
Here is the caller graph for this function:

◆ If_LibBoxAdd()

void If_LibBoxAdd ( If_LibBox_t * p,
If_Box_t * pBox )

Definition at line 136 of file ifLibBox.c.

137{
138 if ( pBox->Id >= Vec_PtrSize(p->vBoxes) )
139 Vec_PtrFillExtra( p->vBoxes, 2 * pBox->Id + 10, NULL );
140 assert( Vec_PtrEntry( p->vBoxes, pBox->Id ) == NULL );
141 Vec_PtrWriteEntry( p->vBoxes, pBox->Id, pBox );
142 p->nBoxes++;
143}
int Id
Definition if.h:372
#define assert(ex)
Definition util_old.h:213
Here is the caller graph for this function:

◆ If_LibBoxDup()

If_LibBox_t * If_LibBoxDup ( If_Box_t * p)

Definition at line 93 of file ifLibBox.c.

94{
95 If_LibBox_t * pNew = NULL;
96 return pNew;
97}
struct If_LibBox_t_ If_LibBox_t
Definition if.h:83

◆ If_LibBoxFindBox()

If_Box_t * If_LibBoxFindBox ( If_LibBox_t * p,
char * pName )

Definition at line 125 of file ifLibBox.c.

126{
127 If_Box_t * pBox;
128 int i;
129 if ( p == NULL )
130 return NULL;
131 If_LibBoxForEachBox( p, pBox, i )
132 if ( !strcmp(pBox->pName, pName) )
133 return pBox;
134 return NULL;
135}
#define If_LibBoxForEachBox(p, pBox, i)
DECLARATIONS ///.
Definition ifLibBox.c:31
char * pName
Definition if.h:367
int strcmp()
Here is the call graph for this function:

◆ If_LibBoxFree()

void If_LibBoxFree ( If_LibBox_t * p)

Definition at line 98 of file ifLibBox.c.

99{
100 If_Box_t * pBox;
101 int i;
102 if ( p == NULL )
103 return;
104 If_LibBoxForEachBox( p, pBox, i )
105 If_BoxFree( pBox );
106 Vec_PtrFree( p->vBoxes );
107 ABC_FREE( p );
108}
void If_BoxFree(If_Box_t *p)
Definition ifLibBox.c:68
Here is the call graph for this function:
Here is the caller graph for this function:

◆ If_LibBoxGetToken()

char * If_LibBoxGetToken ( FILE * pFile)

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 255 of file ifLibBox.c.

256{
257 static char pBuffer[1000];
258 int c; char * pTemp = pBuffer;
259 while ( (c = fgetc(pFile)) != EOF )
260 {
261 if ( c == '#' )
262 {
263 while ( (c = fgetc(pFile)) != EOF )
264 if ( c == '\n' )
265 break;
266 }
267 if ( c == ' ' || c == '\t' || c == '\n' || c == '\r' )
268 {
269 if ( pTemp > pBuffer )
270 break;
271 continue;
272 }
273 *pTemp++ = c;
274 }
275 *pTemp = 0;
276 return pTemp > pBuffer ? pBuffer : NULL;
277}
Here is the caller graph for this function:

◆ If_LibBoxLoad()

int If_LibBoxLoad ( char * pFileName)

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 381 of file ifLibBox.c.

382{
383 FILE * pFile;
384 If_LibBox_t * pLib;
385 char * pFileNameOther;
386 // check if library can be read
387 pFileNameOther = Extra_FileNameGenericAppend( pFileName, ".cdl" );
388 pFile = fopen( pFileNameOther, "r" );
389 if ( pFile == NULL )
390 return 0;
391 fclose( pFile );
392 // read library
393 pLib = If_LibBoxRead2( pFileNameOther );
394 // replace the current library
396 Abc_FrameSetLibBox( pLib );
397 return 1;
398}
ABC_DLL void Abc_FrameSetLibBox(void *pLib)
Definition mainFrame.c:94
ABC_DLL void * Abc_FrameReadLibBox()
Definition mainFrame.c:58
char * Extra_FileNameGenericAppend(char *pBase, char *pSuffix)
If_LibBox_t * If_LibBoxRead2(char *pFileName)
Definition ifLibBox.c:160
void If_LibBoxFree(If_LibBox_t *p)
Definition ifLibBox.c:98
Here is the call graph for this function:

◆ If_LibBoxNum()

int If_LibBoxNum ( If_LibBox_t * p)

Definition at line 144 of file ifLibBox.c.

145{
146 return p->nBoxes;
147}
Here is the caller graph for this function:

◆ If_LibBoxPrint()

void If_LibBoxPrint ( FILE * pFile,
If_LibBox_t * p )

Definition at line 339 of file ifLibBox.c.

340{
341 If_Box_t * pBox;
342 int i, j, k;
343 fprintf( pFile, "# Box library written by ABC on %s.\n", Extra_TimeStamp() );
344 fprintf( pFile, "# <Name> <ID> <Type> <I> <O>\n" );
345 If_LibBoxForEachBox( p, pBox, i )
346 {
347 fprintf( pFile, "%s %d %d %d %d\n", pBox->pName, pBox->Id, !pBox->fBlack, pBox->nPis, pBox->nPos );
348 for ( j = 0; j < pBox->nPos; j++, fprintf(pFile, "\n") )
349 for ( k = 0; k < pBox->nPis; k++ )
350 if ( pBox->pDelays[j * pBox->nPis + k] == -ABC_INFINITY )
351 fprintf( pFile, " - " );
352 else
353 fprintf( pFile, "%5d ", pBox->pDelays[j * pBox->nPis + k] );
354 }
355}
#define ABC_INFINITY
MACRO DEFINITIONS ///.
Definition abc_global.h:250
char * Extra_TimeStamp()
int nPos
Definition if.h:374
int nPis
Definition if.h:373
char fBlack
Definition if.h:369
int * pDelays
Definition if.h:375
Here is the call graph for this function:
Here is the caller graph for this function:

◆ If_LibBoxRead()

If_LibBox_t * If_LibBoxRead ( char * pFileName)

Definition at line 278 of file ifLibBox.c.

279{
280 FILE * pFile;
281 If_LibBox_t * p;
282 If_Box_t * pBox;
283 char * pToken, * pName;
284 int i, Id, fBlack, nPis, nPos;
285 pFile = fopen( pFileName, "rb" );
286 if ( pFile == NULL )
287 {
288 printf( "Cannot open file \"%s\".\n", pFileName );
289 return NULL;
290 }
291 // get the library name
292 pToken = If_LibBoxGetToken( pFile );
293 if ( pToken == NULL )
294 {
295 fclose( pFile );
296 printf( "Cannot read library name from file \"%s\".\n", pFileName );
297 return NULL;
298 }
299 if ( pToken[0] == '.' )
300 {
301 fclose( pFile );
302 printf( "Wrong box format. Please try \"read_box -e\".\n" );
303 return NULL;
304 }
305
306 // create library
307 p = If_LibBoxStart();
308 while ( pToken )
309 {
310 // save name
311 pName = Abc_UtilStrsav(pToken);
312 // save ID
313 pToken = If_LibBoxGetToken( pFile );
314 Id = atoi( pToken );
315 // save white/black
316 pToken = If_LibBoxGetToken( pFile );
317 fBlack = !atoi( pToken );
318 // save PIs
319 pToken = If_LibBoxGetToken( pFile );
320 nPis = atoi( pToken );
321 // save POs
322 pToken = If_LibBoxGetToken( pFile );
323 nPos = atoi( pToken );
324 // create box
325 pBox = If_BoxStart( pName, Id, nPis, nPos, 0, fBlack, 0 );
326 If_LibBoxAdd( p, pBox );
327 // read the table
328 for ( i = 0; i < nPis * nPos; i++ )
329 {
330 pToken = If_LibBoxGetToken( pFile );
331 pBox->pDelays[i] = (pToken[0] == '-') ? -ABC_INFINITY : atoi(pToken);
332 }
333 // extract next name
334 pToken = If_LibBoxGetToken( pFile );
335 }
336 fclose( pFile );
337 return p;
338}
char * If_LibBoxGetToken(FILE *pFile)
Definition ifLibBox.c:255
If_Box_t * If_BoxStart(char *pName, int Id, int nPis, int nPos, int fSeq, int fBlack, int fOuter)
FUNCTION DEFINITIONS ///.
Definition ifLibBox.c:49
void If_LibBoxAdd(If_LibBox_t *p, If_Box_t *pBox)
Definition ifLibBox.c:136
If_LibBox_t * If_LibBoxStart()
Definition ifLibBox.c:86
Here is the call graph for this function:

◆ If_LibBoxRead2()

If_LibBox_t * If_LibBoxRead2 ( char * pFileName)

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 160 of file ifLibBox.c.

161{
162 int nSize = 100000;
163 char * pBuffer;
164 FILE * pFile;
165 If_LibBox_t * p = NULL;
166 If_Box_t * pBox = NULL;
167 char * pToken, * pName;
168 int fSeq, fBlack, fOuter;
169 int i, Id, nPis, nPos;
170 pFile = fopen( pFileName, "rb" );
171 if ( pFile == NULL )
172 {
173 printf( "Cannot open file \"%s\".\n", pFileName );
174 return NULL;
175 }
176 // read lines
177 nPis = nPos = 0;
178 pBuffer = ABC_ALLOC( char, nSize );
179 while ( fgets( pBuffer, nSize, pFile ) )
180 {
181 pToken = strtok( pBuffer, " \n\r\t" );
182 if ( pToken == NULL )
183 continue;
184 if ( pToken[0] == '.' )
185 {
186 if ( !strcmp(pToken, ".box") )
187 {
188 // save ID
189 pToken = strtok( NULL, " \n\r\t" );
190 Id = atoi( pToken );
191 // save name
192 pToken = strtok( NULL, " \n\r\t" );
193 pName = Abc_UtilStrsav(pToken);
194 // save PIs
195 pToken = strtok( NULL, " \n\r\t" );
196 nPis = atoi( pToken );
197 // save POs
198 pToken = strtok( NULL, " \n\r\t" );
199 nPos = atoi( pToken );
200 // save attributes
201 fSeq = fBlack = fOuter = 0;
202 pToken = strtok( NULL, " \n\r\t" );
203 while ( pToken )
204 {
205 if ( !strcmp(pToken, "seq") )
206 fSeq = 1;
207 else if ( !strcmp(pToken, "black") )
208 fBlack = 1;
209 else if ( !strcmp(pToken, "outer") )
210 fOuter = 1;
211 else assert( !strcmp(pToken, "comb") || !strcmp(pToken, "white") || !strcmp(pToken, "inner") );
212 pToken = strtok( NULL, " \n\r\t" );
213 }
214 // create library
215 if ( p == NULL )
216 p = If_LibBoxStart();
217 // create box
218 pBox = If_BoxStart( pName, Id, nPis, nPos, fSeq, fBlack, fOuter );
219 If_LibBoxAdd( p, pBox );
220 }
221 continue;
222 }
223 // read the table
224 assert( nPis > 0 && nPos > 0 );
225 for ( i = 0; i < nPis * nPos; i++ )
226 {
227 while ( pToken == NULL )
228 {
229 if ( fgets( pBuffer, nSize, pFile ) == NULL )
230 { printf( "The table does not have enough entries.\n" ); fflush(stdout); assert( 0 ); }
231 pToken = strtok( pBuffer, " \n\r\t" );
232 }
233 pBox->pDelays[i] = (pToken[0] == '-') ? -1 : atoi(pToken);
234 pToken = strtok( NULL, " \n\r\t" );
235 }
236 pBox = NULL;
237 }
238 ABC_FREE( pBuffer );
239 fclose( pFile );
240 return p;
241}
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
char * strtok()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ If_LibBoxReadBox()

If_Box_t * If_LibBoxReadBox ( If_LibBox_t * p,
int Id )

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 121 of file ifLibBox.c.

122{
123 return (If_Box_t *)Vec_PtrEntry( p->vBoxes, Id );
124}

◆ If_LibBoxStart()

If_LibBox_t * If_LibBoxStart ( )

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 86 of file ifLibBox.c.

87{
88 If_LibBox_t * p;
89 p = ABC_CALLOC( If_LibBox_t, 1 );
90 p->vBoxes = Vec_PtrAlloc( 100 );
91 return p;
92}
Here is the caller graph for this function:

◆ If_LibBoxWrite()

void If_LibBoxWrite ( char * pFileName,
If_LibBox_t * p )

Definition at line 356 of file ifLibBox.c.

357{
358 FILE * pFile;
359 pFile = fopen( pFileName, "wb" );
360 if ( pFile == NULL )
361 {
362 printf( "Cannot open file \"%s\".\n", pFileName );
363 return;
364 }
365 If_LibBoxPrint( pFile, p );
366 fclose( pFile );
367 printf( "Finished writing box library into file \"%s\".\n", pFileName );
368}
void If_LibBoxPrint(FILE *pFile, If_LibBox_t *p)
Definition ifLibBox.c:339
Here is the call graph for this function: