summaryrefslogtreecommitdiffstats
path: root/src/map/amap/amapRead.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-09-19 17:35:04 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2012-09-19 17:35:04 -0700
commit480ca14c75e9f8c54ca9b55c39162324aaa1e288 (patch)
tree446dc0fd3a98d5d60c01f01f5b95e380b002ce34 /src/map/amap/amapRead.c
parent3af0f719afa368cafbe7c8178d0995819b47be90 (diff)
downloadabc-480ca14c75e9f8c54ca9b55c39162324aaa1e288.tar.gz
abc-480ca14c75e9f8c54ca9b55c39162324aaa1e288.tar.bz2
abc-480ca14c75e9f8c54ca9b55c39162324aaa1e288.zip
Extending Liberty parser to handle multi-output cells.
Diffstat (limited to 'src/map/amap/amapRead.c')
-rw-r--r--src/map/amap/amapRead.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/map/amap/amapRead.c b/src/map/amap/amapRead.c
index bf308c08..e8206e31 100644
--- a/src/map/amap/amapRead.c
+++ b/src/map/amap/amapRead.c
@@ -326,10 +326,10 @@ int Amap_CollectFormulaTokens( Vec_Ptr_t * vTokens, char * pToken, int iPos )
Amap_Lib_t * Amap_ParseTokens( Vec_Ptr_t * vTokens, int fVerbose )
{
Amap_Lib_t * p;
- Amap_Gat_t * pGate;
+ Amap_Gat_t * pGate, * pPrev;
Amap_Pin_t * pPin;
char * pToken;
- int nPins, iPos = 0;
+ int i, nPins, iPos = 0;
p = Amap_LibAlloc();
pToken = (char *)Vec_PtrEntry(vTokens, iPos++);
do
@@ -409,8 +409,21 @@ Amap_Lib_t * Amap_ParseTokens( Vec_Ptr_t * vTokens, int fVerbose )
Vec_PtrPush( p->vGates, pGate );
}
pToken = (char *)Vec_PtrEntry(vTokens, iPos++);
+//printf( "Finished reading gate %s (%s)\n", pGate->pName, pGate->pOutName );
}
while ( strcmp( pToken, ".end" ) );
+
+ // check if there are gates with identical names
+ pPrev = NULL;
+ Amap_LibForEachGate( p, pGate, i )
+ {
+ if ( pPrev && !strcmp(pPrev->pName, pGate->pName) )
+ {
+ pPrev->pTwin = pGate, pGate->pTwin = pPrev;
+ printf( "Warning: Detected multi-output gate \"%s\".\n", pGate->pName );
+ }
+ pPrev = pGate;
+ }
return p;
}