Commit 7e805e5c by Alan Mishchenko

Making GENLIB parser skip LATCHes.

parent 7fa9de2d
...@@ -183,6 +183,10 @@ Vec_Ptr_t * Amap_DeriveTokens( char * pBuffer ) ...@@ -183,6 +183,10 @@ Vec_Ptr_t * Amap_DeriveTokens( char * pBuffer )
{ {
Vec_PtrPush( vTokens, pToken ); Vec_PtrPush( vTokens, pToken );
pToken = strtok( NULL, " =\t\r\n" ); pToken = strtok( NULL, " =\t\r\n" );
// skip latches
if ( pToken && strcmp( pToken, "LATCH" ) == 0 )
while ( pToken && strcmp( pToken, "GATE" ) != 0 )
pToken = strtok( NULL, " =\t\r\n" );
} }
return vTokens; return vTokens;
} }
......
...@@ -446,6 +446,11 @@ int Mio_CommandPrintLibrary( Abc_Frame_t * pAbc, int argc, char **argv ) ...@@ -446,6 +446,11 @@ int Mio_CommandPrintLibrary( Abc_Frame_t * pAbc, int argc, char **argv )
goto usage; goto usage;
} }
} }
if ( Abc_FrameReadLibGen() == NULL )
{
printf( "Library is not available.\n" );
return 1;
}
FileName = argv[globalUtilOptind]; FileName = argv[globalUtilOptind];
if ( argc == globalUtilOptind + 1 ) if ( argc == globalUtilOptind + 1 )
{ {
......
...@@ -41,6 +41,7 @@ ABC_NAMESPACE_HEADER_START ...@@ -41,6 +41,7 @@ ABC_NAMESPACE_HEADER_START
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
#define MIO_STRING_GATE "GATE" #define MIO_STRING_GATE "GATE"
#define MIO_STRING_LATCH "LATCH"
#define MIO_STRING_PIN "PIN" #define MIO_STRING_PIN "PIN"
#define MIO_STRING_NONINV "NONINV" #define MIO_STRING_NONINV "NONINV"
#define MIO_STRING_INV "INV" #define MIO_STRING_INV "INV"
......
...@@ -186,8 +186,25 @@ int Mio_LibraryReadInternal( Mio_Library_t * pLib, char * pBuffer, int fExtended ...@@ -186,8 +186,25 @@ int Mio_LibraryReadInternal( Mio_Library_t * pLib, char * pBuffer, int fExtended
// read gates one by one // read gates one by one
pToken = strtok( pBuffer, " \t\r\n" ); pToken = strtok( pBuffer, " \t\r\n" );
while ( pToken && strcmp( pToken, MIO_STRING_GATE ) == 0 ) while ( pToken && (strcmp( pToken, MIO_STRING_GATE ) == 0 || strcmp( pToken, MIO_STRING_LATCH ) == 0) )
{ {
// skip latches
if ( strcmp( pToken, MIO_STRING_LATCH ) == 0 )
{
while ( pToken && strcmp( pToken, MIO_STRING_GATE ) != 0 && strcmp( pToken, ".end" ) != 0 )
{
if ( strcmp( pToken, MIO_STRING_LATCH ) == 0 )
{
pToken = strtok( NULL, " \t\r\n" );
printf( "Skipping latch \"%s\"...\n", pToken );
continue;
}
pToken = strtok( NULL, " \t\r\n" );
}
if ( !(pToken && strcmp( pToken, MIO_STRING_GATE ) == 0) )
break;
}
// derive the next gate // derive the next gate
pGate = Mio_LibraryReadGate( &pToken, fExtendedFormat ); pGate = Mio_LibraryReadGate( &pToken, fExtendedFormat );
if ( pGate == NULL ) if ( pGate == NULL )
...@@ -221,6 +238,12 @@ int Mio_LibraryReadInternal( Mio_Library_t * pLib, char * pBuffer, int fExtended ...@@ -221,6 +238,12 @@ int Mio_LibraryReadInternal( Mio_Library_t * pLib, char * pBuffer, int fExtended
if ( fVerbose ) if ( fVerbose )
printf( "The number of gates read = %d.\n", nGates ); printf( "The number of gates read = %d.\n", nGates );
if ( nGates == 0 )
{
printf( "The library contains no gates.\n" );
return 1;
}
// check what is the last word read // check what is the last word read
if ( pToken && strcmp( pToken, ".end" ) != 0 ) if ( pToken && strcmp( pToken, ".end" ) != 0 )
return 1; return 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment