summaryrefslogtreecommitdiffstats
path: root/src/base/cba/cbaReadBlif.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2015-01-31 19:52:32 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2015-01-31 19:52:32 -0800
commit77dbe2b6565dbc68a04a315fb51b50a35b763228 (patch)
tree8b8c4bddbd01a69314178d33a8b739867d38f78d /src/base/cba/cbaReadBlif.c
parenta523ab792c4627c11a57fce9a002f3a5bd4bae45 (diff)
downloadabc-77dbe2b6565dbc68a04a315fb51b50a35b763228.tar.gz
abc-77dbe2b6565dbc68a04a315fb51b50a35b763228.tar.bz2
abc-77dbe2b6565dbc68a04a315fb51b50a35b763228.zip
Major rehash of the CBA code.
Diffstat (limited to 'src/base/cba/cbaReadBlif.c')
-rw-r--r--src/base/cba/cbaReadBlif.c382
1 files changed, 186 insertions, 196 deletions
diff --git a/src/base/cba/cbaReadBlif.c b/src/base/cba/cbaReadBlif.c
index fa552990..7290f25e 100644
--- a/src/base/cba/cbaReadBlif.c
+++ b/src/base/cba/cbaReadBlif.c
@@ -4,9 +4,9 @@
SystemName [ABC: Logic synthesis and verification system.]
- PackageName [Verilog parser.]
+ PackageName [Hierarchical word-level netlist.]
- Synopsis [Parses several flavors of word-level Verilog.]
+ Synopsis [BLIF parser.]
Author [Alan Mishchenko]
@@ -18,7 +18,6 @@
***********************************************************************/
-#include "cba.h"
#include "cbaPrs.h"
ABC_NAMESPACE_IMPL_START
@@ -29,21 +28,21 @@ ABC_NAMESPACE_IMPL_START
// BLIF keywords
typedef enum {
- CBA_BLIF_NONE = 0, // 0: unused
- CBA_BLIF_MODEL, // 1: .model
- CBA_BLIF_INOUTS, // 2: .inouts
- CBA_BLIF_INPUTS, // 3: .inputs
- CBA_BLIF_OUTPUTS, // 4: .outputs
- CBA_BLIF_NAMES, // 5: .names
- CBA_BLIF_SUBCKT, // 6: .subckt
- CBA_BLIF_GATE, // 7: .gate
- CBA_BLIF_LATCH, // 8: .latch
- CBA_BLIF_SHORT, // 9: .short
- CBA_BLIF_END, // 10: .end
- CBA_BLIF_UNKNOWN // 11: unknown
+ PRS_BLIF_NONE = 0, // 0: unused
+ PRS_BLIF_MODEL, // 1: .model
+ PRS_BLIF_INOUTS, // 2: .inouts
+ PRS_BLIF_INPUTS, // 3: .inputs
+ PRS_BLIF_OUTPUTS, // 4: .outputs
+ PRS_BLIF_NAMES, // 5: .names
+ PRS_BLIF_SUBCKT, // 6: .subckt
+ PRS_BLIF_GATE, // 7: .gate
+ PRS_BLIF_LATCH, // 8: .latch
+ PRS_BLIF_SHORT, // 9: .short
+ PRS_BLIF_END, // 10: .end
+ PRS_BLIF_UNKNOWN // 11: unknown
} Cba_BlifType_t;
-const char * s_BlifTypes[CBA_BLIF_UNKNOWN+1] = {
+const char * s_BlifTypes[PRS_BLIF_UNKNOWN+1] = {
NULL, // 0: unused
".model", // 1: .model
".inouts", // 2: .inputs
@@ -58,15 +57,12 @@ const char * s_BlifTypes[CBA_BLIF_UNKNOWN+1] = {
NULL // 11: unknown
};
-static inline void Cba_PrsAddBlifDirectives( Cba_Prs_t * p )
+static inline void Prs_NtkAddBlifDirectives( Prs_Man_t * p )
{
int i;
for ( i = 1; s_BlifTypes[i]; i++ )
- Abc_NamStrFindOrAdd( p->pDesign->pNames, (char *)s_BlifTypes[i], NULL );
- assert( Abc_NamObjNumMax(p->pDesign->pNames) == i );
- for ( i = 1; i < CBA_NODE_UNKNOWN; i++ )
- Abc_NamStrFindOrAdd( p->pDesign->pFuncs, Ptr_TypeToSop(i), NULL );
- assert( Abc_NamObjNumMax(p->pDesign->pFuncs) == i );
+ Abc_NamStrFindOrAdd( p->pStrs, (char *)s_BlifTypes[i], NULL );
+ assert( Abc_NamObjNumMax(p->pStrs) == i );
}
@@ -85,19 +81,19 @@ static inline void Cba_PrsAddBlifDirectives( Cba_Prs_t * p )
SeeAlso []
***********************************************************************/
-static inline int Cba_CharIsSpace( char c ) { return c == ' ' || c == '\t' || c == '\r'; }
-static inline int Cba_CharIsStop( char c ) { return c == '#' || c == '\\' || c == '\n' || c == '='; }
-static inline int Cba_CharIsLit( char c ) { return c == '0' || c == '1' || c == '-'; }
+static inline int Prs_CharIsSpace( char c ) { return c == ' ' || c == '\t' || c == '\r'; }
+static inline int Prs_CharIsStop( char c ) { return c == '#' || c == '\\' || c == '\n' || c == '='; }
+static inline int Prs_CharIsLit( char c ) { return c == '0' || c == '1' || c == '-'; }
-static inline int Cba_PrsIsSpace( Cba_Prs_t * p ) { return Cba_CharIsSpace(*p->pCur); }
-static inline int Cba_PrsIsStop( Cba_Prs_t * p ) { return Cba_CharIsStop(*p->pCur); }
-static inline int Cba_PrsIsLit( Cba_Prs_t * p ) { return Cba_CharIsLit(*p->pCur); }
+static inline int Prs_ManIsSpace( Prs_Man_t * p ) { return Prs_CharIsSpace(*p->pCur); }
+static inline int Prs_ManIsStop( Prs_Man_t * p ) { return Prs_CharIsStop(*p->pCur); }
+static inline int Prs_ManIsLit( Prs_Man_t * p ) { return Prs_CharIsLit(*p->pCur); }
-static inline int Cba_PrsIsChar( Cba_Prs_t * p, char c ) { return *p->pCur == c; }
-static inline int Cba_PrsIsChar2( Cba_Prs_t * p, char c ) { return *p->pCur++ == c; }
+static inline int Prs_ManIsChar( Prs_Man_t * p, char c ) { return *p->pCur == c; }
+static inline int Prs_ManIsChar2( Prs_Man_t * p, char c ) { return *p->pCur++ == c; }
-static inline void Cba_PrsSkip( Cba_Prs_t * p ) { p->pCur++; }
-static inline char Cba_PrsSkip2( Cba_Prs_t * p ) { return *p->pCur++; }
+static inline void Prs_ManSkip( Prs_Man_t * p ) { p->pCur++; }
+static inline char Prs_ManSkip2( Prs_Man_t * p ) { return *p->pCur++; }
/**Function*************************************************************
@@ -111,79 +107,77 @@ static inline char Cba_PrsSkip2( Cba_Prs_t * p ) { return *p->pCur++;
SeeAlso []
***********************************************************************/
-static inline void Cba_PrsSkipToChar( Cba_Prs_t * p, char c )
+static inline void Prs_ManSkipToChar( Prs_Man_t * p, char c )
{
- while ( !Cba_PrsIsChar(p, c) )
- Cba_PrsSkip(p);
+ while ( !Prs_ManIsChar(p, c) )
+ Prs_ManSkip(p);
}
-static inline void Cba_PrsSkipSpaces( Cba_Prs_t * p )
+static inline void Prs_ManSkipSpaces( Prs_Man_t * p )
{
while ( 1 )
{
- while ( Cba_PrsIsSpace(p) )
- Cba_PrsSkip(p);
- if ( Cba_PrsIsChar(p, '\\') )
+ while ( Prs_ManIsSpace(p) )
+ Prs_ManSkip(p);
+ if ( Prs_ManIsChar(p, '\\') )
{
- Cba_PrsSkipToChar( p, '\n' );
- Cba_PrsSkip(p);
+ Prs_ManSkipToChar( p, '\n' );
+ Prs_ManSkip(p);
continue;
}
- if ( Cba_PrsIsChar(p, '#') )
- Cba_PrsSkipToChar( p, '\n' );
+ if ( Prs_ManIsChar(p, '#') )
+ Prs_ManSkipToChar( p, '\n' );
break;
}
- assert( !Cba_PrsIsSpace(p) );
+ assert( !Prs_ManIsSpace(p) );
}
-static inline int Cba_PrsReadName( Cba_Prs_t * p )
+static inline int Prs_ManReadName( Prs_Man_t * p )
{
char * pStart;
- Cba_PrsSkipSpaces( p );
- if ( Cba_PrsIsChar(p, '\n') )
+ Prs_ManSkipSpaces( p );
+ if ( Prs_ManIsChar(p, '\n') )
return 0;
pStart = p->pCur;
- while ( !Cba_PrsIsSpace(p) && !Cba_PrsIsStop(p) )
- Cba_PrsSkip(p);
+ while ( !Prs_ManIsSpace(p) && !Prs_ManIsStop(p) )
+ Prs_ManSkip(p);
if ( pStart == p->pCur )
return 0;
- return Abc_NamStrFindOrAddLim( p->pDesign->pNames, pStart, p->pCur, NULL );
+ return Abc_NamStrFindOrAddLim( p->pStrs, pStart, p->pCur, NULL );
}
-static inline int Cba_PrsReadList( Cba_Prs_t * p )
+static inline int Prs_ManReadList( Prs_Man_t * p )
{
int iToken;
Vec_IntClear( &p->vTemp );
- while ( (iToken = Cba_PrsReadName(p)) )
+ while ( (iToken = Prs_ManReadName(p)) )
Vec_IntPush( &p->vTemp, iToken );
- if ( Vec_IntSize(&p->vTemp) == 0 ) return Cba_PrsErrorSet(p, "Signal list is empty.", 1);
+ if ( Vec_IntSize(&p->vTemp) == 0 ) return Prs_ManErrorSet(p, "Signal list is empty.", 1);
return 0;
}
-static inline int Cba_PrsReadList2( Cba_Prs_t * p )
+static inline int Prs_ManReadList2( Prs_Man_t * p )
{
int iToken;
- Vec_IntFill( &p->vTemp, 1, -1 );
- while ( (iToken = Cba_PrsReadName(p)) )
- Vec_IntPush( &p->vTemp, iToken );
- iToken = Vec_IntPop(&p->vTemp);
- if ( Vec_IntSize(&p->vTemp) == 0 ) return Cba_PrsErrorSet(p, "Signal list is empty.", 1);
- Vec_IntWriteEntry( &p->vTemp, 0, iToken );
+ Vec_IntClear( &p->vTemp );
+ while ( (iToken = Prs_ManReadName(p)) )
+ Vec_IntPushTwo( &p->vTemp, 0, iToken );
+ if ( Vec_IntSize(&p->vTemp) == 0 ) return Prs_ManErrorSet(p, "Signal list is empty.", 1);
return 0;
}
-static inline int Cba_PrsReadList3( Cba_Prs_t * p )
+static inline int Prs_ManReadList3( Prs_Man_t * p )
{
Vec_IntClear( &p->vTemp );
- while ( !Cba_PrsIsChar(p, '\n') )
+ while ( !Prs_ManIsChar(p, '\n') )
{
- int iToken = Cba_PrsReadName(p);
- if ( iToken == 0 ) return Cba_PrsErrorSet(p, "Cannot read formal name.", 1);
+ int iToken = Prs_ManReadName(p);
+ if ( iToken == 0 ) return Prs_ManErrorSet(p, "Cannot read formal name.", 1);
Vec_IntPush( &p->vTemp, iToken );
- Cba_PrsSkipSpaces( p );
- if ( !Cba_PrsIsChar2(p, '=') ) return Cba_PrsErrorSet(p, "Cannot find symbol \"=\".", 1);
- iToken = Cba_PrsReadName(p);
- if ( iToken == 0 ) return Cba_PrsErrorSet(p, "Cannot read actual name.", 1);
+ Prs_ManSkipSpaces( p );
+ if ( !Prs_ManIsChar2(p, '=') ) return Prs_ManErrorSet(p, "Cannot find symbol \"=\".", 1);
+ iToken = Prs_ManReadName(p);
+ if ( iToken == 0 ) return Prs_ManErrorSet(p, "Cannot read actual name.", 1);
Vec_IntPush( &p->vTemp, iToken );
- Cba_PrsSkipSpaces( p );
+ Prs_ManSkipSpaces( p );
}
- if ( Vec_IntSize(&p->vTemp) == 0 ) return Cba_PrsErrorSet(p, "Cannot read a list of formal/actual names.", 1);
- if ( Vec_IntSize(&p->vTemp) % 2 ) return Cba_PrsErrorSet(p, "The number of formal/actual names is not even.", 1);
+ if ( Vec_IntSize(&p->vTemp) == 0 ) return Prs_ManErrorSet(p, "Cannot read a list of formal/actual names.", 1);
+ if ( Vec_IntSize(&p->vTemp) % 2 ) return Prs_ManErrorSet(p, "The number of formal/actual names is not even.", 1);
return 0;
}
@@ -198,38 +192,39 @@ static inline int Cba_PrsReadList3( Cba_Prs_t * p )
SeeAlso []
***********************************************************************/
-static inline int Cba_PrsReadCube( Cba_Prs_t * p )
+static inline int Prs_ManReadCube( Prs_Man_t * p )
{
- assert( Cba_PrsIsLit(p) );
- while ( Cba_PrsIsLit(p) )
- Vec_StrPush( &p->vCover, Cba_PrsSkip2(p) );
- Cba_PrsSkipSpaces( p );
- if ( Cba_PrsIsChar(p, '\n') )
+ assert( Prs_ManIsLit(p) );
+ while ( Prs_ManIsLit(p) )
+ Vec_StrPush( &p->vCover, Prs_ManSkip2(p) );
+ Prs_ManSkipSpaces( p );
+ if ( Prs_ManIsChar(p, '\n') )
{
- if ( Vec_StrSize(&p->vCover) != 1 ) return Cba_PrsErrorSet(p, "Cannot read cube.", 1);
+ if ( Vec_StrSize(&p->vCover) != 1 ) return Prs_ManErrorSet(p, "Cannot read cube.", 1);
// fix single literal cube by adding space
Vec_StrPush( &p->vCover, Vec_StrEntry(&p->vCover,0) );
Vec_StrWriteEntry( &p->vCover, 0, ' ' );
Vec_StrPush( &p->vCover, '\n' );
return 0;
}
- if ( !Cba_PrsIsLit(p) ) return Cba_PrsErrorSet(p, "Cannot read output literal.", 1);
+ if ( !Prs_ManIsLit(p) ) return Prs_ManErrorSet(p, "Cannot read output literal.", 1);
Vec_StrPush( &p->vCover, ' ' );
- Vec_StrPush( &p->vCover, Cba_PrsSkip2(p) );
+ Vec_StrPush( &p->vCover, Prs_ManSkip2(p) );
Vec_StrPush( &p->vCover, '\n' );
- Cba_PrsSkipSpaces( p );
- if ( !Cba_PrsIsChar(p, '\n') ) return Cba_PrsErrorSet(p, "Cannot read end of cube.", 1);
+ Prs_ManSkipSpaces( p );
+ if ( !Prs_ManIsChar(p, '\n') ) return Prs_ManErrorSet(p, "Cannot read end of cube.", 1);
return 0;
}
-static inline void Cba_PrsSaveCover( Cba_Prs_t * p )
+static inline void Prs_ManSaveCover( Prs_Man_t * p )
{
int iToken;
assert( Vec_StrSize(&p->vCover) > 0 );
Vec_StrPush( &p->vCover, '\0' );
- iToken = Abc_NamStrFindOrAdd( p->pDesign->pFuncs, Vec_StrArray(&p->vCover), NULL );
- assert( Vec_IntEntryLast(&p->vFuncsCur) == 1 );
- Vec_IntWriteEntry( &p->vFuncsCur, Vec_IntSize(&p->vFuncsCur)-1, iToken );
+ iToken = Abc_NamStrFindOrAdd( p->pStrs, Vec_StrArray(&p->vCover), NULL );
Vec_StrClear( &p->vCover );
+ // set the cover to the module of this box
+ assert( Prs_BoxNtk(p->pNtk, Prs_NtkBoxNum(p->pNtk)-1) == 1 ); // default const 0
+ Prs_BoxSetNtk( p->pNtk, Prs_NtkBoxNum(p->pNtk)-1, iToken );
}
/**Function*************************************************************
@@ -243,144 +238,140 @@ static inline void Cba_PrsSaveCover( Cba_Prs_t * p )
SeeAlso []
***********************************************************************/
-static inline int Cba_PrsReadInouts( Cba_Prs_t * p )
+static inline int Prs_ManReadInouts( Prs_Man_t * p )
{
- if ( Cba_PrsReadList(p) ) return 1;
- Vec_IntAppend( &p->vInoutsCur, &p->vTemp );
+ if ( Prs_ManReadList(p) ) return 1;
+ Vec_IntAppend( &p->pNtk->vInouts, &p->vTemp );
return 0;
}
-static inline int Cba_PrsReadInputs( Cba_Prs_t * p )
+static inline int Prs_ManReadInputs( Prs_Man_t * p )
{
- if ( Cba_PrsReadList(p) ) return 1;
- Vec_IntAppend( &p->vInputsCur, &p->vTemp );
+ if ( Prs_ManReadList(p) ) return 1;
+ Vec_IntAppend( &p->pNtk->vInputs, &p->vTemp );
return 0;
}
-static inline int Cba_PrsReadOutputs( Cba_Prs_t * p )
+static inline int Prs_ManReadOutputs( Prs_Man_t * p )
{
- if ( Cba_PrsReadList(p) ) return 1;
- Vec_IntAppend( &p->vOutputsCur, &p->vTemp );
+ if ( Prs_ManReadList(p) ) return 1;
+ Vec_IntAppend( &p->pNtk->vOutputs, &p->vTemp );
return 0;
}
-static inline int Cba_PrsReadNode( Cba_Prs_t * p )
+static inline int Prs_ManReadNode( Prs_Man_t * p )
{
- if ( Cba_PrsReadList2(p) ) return 1;
+ if ( Prs_ManReadList2(p) ) return 1;
// save results
- Vec_IntPush( &p->vTypesCur, CBA_OBJ_NODE );
- Vec_IntPush( &p->vFuncsCur, 1 ); // default const 0 function
- Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
+ Prs_NtkAddBox( p->pNtk, 1, 0, &p->vTemp ); // default const 0 function
return 0;
}
-static inline int Cba_PrsReadBox( Cba_Prs_t * p, int fGate )
+static inline int Prs_ManReadBox( Prs_Man_t * p, int fGate )
{
- int iToken = Cba_PrsReadName(p);
- if ( iToken == 0 ) return Cba_PrsErrorSet(p, "Cannot read model name.", 1);
- if ( Cba_PrsReadList3(p) ) return 1;
+ int iToken = Prs_ManReadName(p);
+ if ( iToken == 0 ) return Prs_ManErrorSet(p, "Cannot read model name.", 1);
+ if ( Prs_ManReadList3(p) ) return 1;
// save results
- Vec_IntPush( &p->vTypesCur, CBA_OBJ_BOX );
- Vec_IntPush( &p->vFuncsCur, iToken );
- Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
+ Prs_NtkAddBox( p->pNtk, iToken, 0, &p->vTemp );
+ if ( fGate ) p->pNtk->fMapped = 1;
return 0;
}
-static inline int Cba_PrsReadLatch( Cba_Prs_t * p )
+static inline int Prs_ManReadLatch( Prs_Man_t * p )
{
- int iToken = Cba_PrsReadName(p);
- Vec_IntFill( &p->vTemp, 2, -1 );
- if ( iToken == 0 ) return Cba_PrsErrorSet(p, "Cannot read latch input.", 1);
+ int iToken = Prs_ManReadName(p);
+ Vec_IntClear( &p->vTemp );
+ if ( iToken == 0 ) return Prs_ManErrorSet(p, "Cannot read latch input.", 1);
Vec_IntWriteEntry( &p->vTemp, 1, iToken );
- iToken = Cba_PrsReadName(p);
- if ( iToken == 0 ) return Cba_PrsErrorSet(p, "Cannot read latch output.", 1);
+ iToken = Prs_ManReadName(p);
+ if ( iToken == 0 ) return Prs_ManErrorSet(p, "Cannot read latch output.", 1);
Vec_IntWriteEntry( &p->vTemp, 0, iToken );
- Cba_PrsSkipSpaces( p );
- if ( Cba_PrsIsChar(p, '0') )
+ Prs_ManSkipSpaces( p );
+ if ( Prs_ManIsChar(p, '0') )
iToken = 0;
- else if ( Cba_PrsIsChar(p, '1') )
+ else if ( Prs_ManIsChar(p, '1') )
iToken = 1;
else
iToken = 2;
- Cba_PrsSkipToChar( p, '\n' );
+ Prs_ManSkipToChar( p, '\n' );
// save results
- Vec_IntPush( &p->vTypesCur, CBA_OBJ_LATCH );
- Vec_IntPush( &p->vFuncsCur, iToken );
- Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
+ Prs_NtkAddBox( p->pNtk, -1, iToken, &p->vTemp ); // -1 stands for latch
return 0;
}
-static inline int Cba_PrsReadShort( Cba_Prs_t * p )
+static inline int Prs_ManReadShort( Prs_Man_t * p )
{
- int iToken = Cba_PrsReadName(p);
- Vec_IntFill( &p->vTemp, 2, -1 );
- if ( iToken == 0 ) return Cba_PrsErrorSet(p, "Cannot read .short input.", 1);
+ int iToken = Prs_ManReadName(p);
+ Vec_IntClear( &p->vTemp );
+ if ( iToken == 0 ) return Prs_ManErrorSet(p, "Cannot read .short input.", 1);
Vec_IntWriteEntry( &p->vTemp, 1, iToken );
- iToken = Cba_PrsReadName(p);
- if ( iToken == 0 ) return Cba_PrsErrorSet(p, "Cannot read .short output.", 1);
+ iToken = Prs_ManReadName(p);
+ if ( iToken == 0 ) return Prs_ManErrorSet(p, "Cannot read .short output.", 1);
Vec_IntWriteEntry( &p->vTemp, 0, iToken );
- Cba_PrsSkipSpaces( p );
- if ( !Cba_PrsIsChar(p, '\n') ) return Cba_PrsErrorSet(p, "Trailing symbols on .short line.", 1);
+ Prs_ManSkipSpaces( p );
+ if ( !Prs_ManIsChar(p, '\n') ) return Prs_ManErrorSet(p, "Trailing symbols on .short line.", 1);
// save results
- Vec_IntPush( &p->vTypesCur, CBA_OBJ_NODE );
- Vec_IntPush( &p->vFuncsCur, 2 ); // default buffer function
- Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
+ iToken = Abc_NamStrFindOrAdd( p->pStrs, "1 1\n", NULL );
+ Prs_NtkAddBox( p->pNtk, iToken, 0, &p->vTemp );
return 0;
}
-static inline int Cba_PrsReadModel( Cba_Prs_t * p )
+static inline int Prs_ManReadModel( Prs_Man_t * p )
{
- if ( p->iModuleName > 0 ) return Cba_PrsErrorSet(p, "Parsing previous model is unfinished.", 1);
- p->iModuleName = Cba_PrsReadName(p);
- Cba_PrsSkipSpaces( p );
- if ( !Cba_PrsIsChar(p, '\n') ) return Cba_PrsErrorSet(p, "Trailing symbols on .model line.", 1);
+ int iToken;
+ if ( p->pNtk != NULL ) return Prs_ManErrorSet(p, "Parsing previous model is unfinished.", 1);
+ iToken = Prs_ManReadName(p);
+ if ( iToken == 0 ) return Prs_ManErrorSet(p, "Cannot read model name.", 1);
+ Prs_ManInitializeNtk( p, iToken, 0 );
+ Prs_ManSkipSpaces( p );
+ if ( !Prs_ManIsChar(p, '\n') ) return Prs_ManErrorSet(p, "Trailing symbols on .model line.", 1);
return 0;
}
-static inline int Cba_PrsReadEnd( Cba_Prs_t * p )
+static inline int Prs_ManReadEnd( Prs_Man_t * p )
{
- if ( p->iModuleName == 0 ) return Cba_PrsErrorSet(p, "Directive .end without .model.", 1);
- //printf( "Saving model \"%s\".\n", Abc_NamStr(p->pDesign->pNames, p->iModuleName) );
- Cba_PrsAddCurrentModel( p, p->iModuleName );
- p->iModuleName = 0;
- Cba_PrsSkipSpaces( p );
- if ( !Cba_PrsIsChar(p, '\n') ) return Cba_PrsErrorSet(p, "Trailing symbols on .end line.", 1);
+ if ( p->pNtk == 0 ) return Prs_ManErrorSet(p, "Directive .end without .model.", 1);
+ //printf( "Saving model \"%s\".\n", Abc_NamStr(p->pStrs, p->iModuleName) );
+ Prs_ManFinalizeNtk( p );
+ Prs_ManSkipSpaces( p );
+ if ( !Prs_ManIsChar(p, '\n') ) return Prs_ManErrorSet(p, "Trailing symbols on .end line.", 1);
return 0;
}
-static inline int Cba_PrsReadDirective( Cba_Prs_t * p )
+static inline int Prs_ManReadDirective( Prs_Man_t * p )
{
int iToken;
- if ( !Cba_PrsIsChar(p, '.') )
- return Cba_PrsReadCube( p );
+ if ( !Prs_ManIsChar(p, '.') )
+ return Prs_ManReadCube( p );
if ( Vec_StrSize(&p->vCover) > 0 ) // SOP was specified for the previous node
- Cba_PrsSaveCover( p );
- iToken = Cba_PrsReadName( p );
- if ( iToken == CBA_BLIF_MODEL )
- return Cba_PrsReadModel( p );
- if ( iToken == CBA_BLIF_INOUTS )
- return Cba_PrsReadInouts( p );
- if ( iToken == CBA_BLIF_INPUTS )
- return Cba_PrsReadInputs( p );
- if ( iToken == CBA_BLIF_OUTPUTS )
- return Cba_PrsReadOutputs( p );
- if ( iToken == CBA_BLIF_NAMES )
- return Cba_PrsReadNode( p );
- if ( iToken == CBA_BLIF_SUBCKT )
- return Cba_PrsReadBox( p, 0 );
- if ( iToken == CBA_BLIF_GATE )
- return Cba_PrsReadBox( p, 1 );
- if ( iToken == CBA_BLIF_LATCH )
- return Cba_PrsReadLatch( p );
- if ( iToken == CBA_BLIF_SHORT )
- return Cba_PrsReadShort( p );
- if ( iToken == CBA_BLIF_END )
- return Cba_PrsReadEnd( p );
- printf( "Cannot read directive \"%s\".\n", Abc_NamStr(p->pDesign->pNames, iToken) );
+ Prs_ManSaveCover( p );
+ iToken = Prs_ManReadName( p );
+ if ( iToken == PRS_BLIF_MODEL )
+ return Prs_ManReadModel( p );
+ if ( iToken == PRS_BLIF_INOUTS )
+ return Prs_ManReadInouts( p );
+ if ( iToken == PRS_BLIF_INPUTS )
+ return Prs_ManReadInputs( p );
+ if ( iToken == PRS_BLIF_OUTPUTS )
+ return Prs_ManReadOutputs( p );
+ if ( iToken == PRS_BLIF_NAMES )
+ return Prs_ManReadNode( p );
+ if ( iToken == PRS_BLIF_SUBCKT )
+ return Prs_ManReadBox( p, 0 );
+ if ( iToken == PRS_BLIF_GATE )
+ return Prs_ManReadBox( p, 1 );
+ if ( iToken == PRS_BLIF_LATCH )
+ return Prs_ManReadLatch( p );
+ if ( iToken == PRS_BLIF_SHORT )
+ return Prs_ManReadShort( p );
+ if ( iToken == PRS_BLIF_END )
+ return Prs_ManReadEnd( p );
+ printf( "Cannot read directive \"%s\".\n", Abc_NamStr(p->pStrs, iToken) );
return 1;
}
-static inline int Cba_PrsReadLines( Cba_Prs_t * p )
+static inline int Prs_ManReadLines( Prs_Man_t * p )
{
while ( p->pCur[1] != '\0' )
{
- assert( Cba_PrsIsChar(p, '\n') );
- Cba_PrsSkip(p);
- Cba_PrsSkipSpaces( p );
- if ( Cba_PrsIsChar(p, '\n') )
+ assert( Prs_ManIsChar(p, '\n') );
+ Prs_ManSkip(p);
+ Prs_ManSkipSpaces( p );
+ if ( Prs_ManIsChar(p, '\n') )
continue;
- if ( Cba_PrsReadDirective(p) )
+ if ( Prs_ManReadDirective(p) )
return 1;
}
return 0;
@@ -397,19 +388,18 @@ static inline int Cba_PrsReadLines( Cba_Prs_t * p )
SeeAlso []
***********************************************************************/
-Cba_Man_t * Cba_PrsReadBlif( char * pFileName )
+Vec_Ptr_t * Prs_ManReadBlif( char * pFileName )
{
- Cba_Man_t * pDesign = NULL;
- Cba_Prs_t * p = Cba_PrsAlloc( pFileName );
+ Vec_Ptr_t * vPrs = NULL;
+ Prs_Man_t * p = Prs_ManAlloc( pFileName );
if ( p == NULL )
return NULL;
- Cba_PrsAddBlifDirectives( p );
- Cba_PrsReadLines( p );
- if ( Cba_PrsErrorPrint(p) )
- ABC_SWAP( Cba_Man_t *, pDesign, p->pDesign );
- Cba_PrsFree( p );
- Cba_PrsRemapBoxModels( pDesign );
- return pDesign;
+ Prs_NtkAddBlifDirectives( p );
+ Prs_ManReadLines( p );
+ if ( Prs_ManErrorPrint(p) )
+ ABC_SWAP( Vec_Ptr_t *, vPrs, p->vNtks );
+ Prs_ManFree( p );
+ return vPrs;
}
/**Function*************************************************************
@@ -423,22 +413,22 @@ Cba_Man_t * Cba_PrsReadBlif( char * pFileName )
SeeAlso []
***********************************************************************/
-void Cba_PrsReadBlifTest( char * pFileName )
+void Prs_ManReadBlifTest()
{
abctime clk = Abc_Clock();
- extern void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * pDes );
- Cba_Man_t * p = Cba_PrsReadBlif( "aga/ray/ray_hie_oper.blif" );
- if ( !p ) return;
- printf( "Finished reading %d networks. ", Cba_ManNtkNum(p) );
- printf( "NameIDs = %d. ", Abc_NamObjNumMax(p->pNames) );
- printf( "Memory = %.2f MB. ", 1.0*Cba_ManMemory(p)/(1<<20) );
+ extern void Prs_ManWriteBlif( char * pFileName, Vec_Ptr_t * vPrs );
+// Vec_Ptr_t * vPrs = Prs_ManReadBlif( "aga/ray/ray_hie_oper.blif" );
+ Vec_Ptr_t * vPrs = Prs_ManReadBlif( "c/hie/dump/1/netlist_1_out8.blif" );
+ if ( !vPrs ) return;
+ printf( "Finished reading %d networks. ", Vec_PtrSize(vPrs) );
+ printf( "NameIDs = %d. ", Abc_NamObjNumMax(Prs_ManRoot(vPrs)->pStrs) );
+ printf( "Memory = %.2f MB. ", 1.0*Prs_ManMemory(vPrs)/(1<<20) );
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
-// Abc_NamPrint( p->pDesign->pNames );
- Cba_PrsWriteBlif( "aga/ray/ray_hie_oper_out.blif", p );
- Cba_ManFree( p );
+// Abc_NamPrint( p->pStrs );
+ Prs_ManWriteBlif( "c/hie/dump/1/netlist_1_out8_out.blif", vPrs );
+ Prs_ManVecFree( vPrs );
}
-
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////