summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuantamHD <emahintorabi@gmail.com>2021-12-20 12:55:11 -0800
committerQuantamHD <emahintorabi@gmail.com>2021-12-20 12:55:11 -0800
commitf288c4d7f6e97146bdc4de48f14168cbce9d3c96 (patch)
tree0eda31ba0acc43042ad971f3078ea8d8a072c8f2
parent85b74f68f19fc4857daba703f909a02410f04065 (diff)
downloadabc-f288c4d7f6e97146bdc4de48f14168cbce9d3c96.tar.gz
abc-f288c4d7f6e97146bdc4de48f14168cbce9d3c96.tar.bz2
abc-f288c4d7f6e97146bdc4de48f14168cbce9d3c96.zip
Fixes internal pin parsing error in ASAP7 liberty file.
This fix addresses an issue I saw with the ASAP7 liberty files and ABC. ASAP7 lists internal pins in its liberty file which ABC's liberty parser doesn't account for. This causes an assert to be triggered. This fix simply adds interal pins to the ignore list.
-rw-r--r--src/map/scl/sclLiberty.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/map/scl/sclLiberty.c b/src/map/scl/sclLiberty.c
index 4b6adab4..49b5c237 100644
--- a/src/map/scl/sclLiberty.c
+++ b/src/map/scl/sclLiberty.c
@@ -955,6 +955,8 @@ int Scl_LibertyReadPinDirection( Scl_Tree_t * p, Scl_Item_t * pPin )
return 0;
if ( !strcmp(pToken, "output") )
return 1;
+ if ( !strcmp(pToken, "internal") )
+ return 2;
break;
}
return -1;
@@ -1525,7 +1527,7 @@ Vec_Str_t * Scl_LibertyReadSclStr( Scl_Tree_t * p, int fVerbose, int fVeryVerbos
float CapOne, CapRise, CapFall;
if ( Scl_LibertyReadPinFormula(p, pPin) != NULL ) // skip output pin
continue;
- assert( Scl_LibertyReadPinDirection(p, pPin) == 0 );
+ assert( Scl_LibertyReadPinDirection(p, pPin) == 0 || Scl_LibertyReadPinDirection(p, pPin) == 2);
pName = Scl_LibertyReadString(p, pPin->Head);
Vec_PtrPush( vNameIns, Abc_UtilStrsav(pName) );
Vec_StrPutS_( vOut, pName );
@@ -1546,6 +1548,8 @@ Vec_Str_t * Scl_LibertyReadSclStr( Scl_Tree_t * p, int fVerbose, int fVeryVerbos
{
if ( !Scl_LibertyReadPinFormula(p, pPin) ) // skip input pin
continue;
+ if (Scl_LibertyReadPinDirection(p, pPin) == 2) // skip internal pin
+ continue;
assert( Scl_LibertyReadPinDirection(p, pPin) == 1 );
pName = Scl_LibertyReadString(p, pPin->Head);
Vec_StrPutS_( vOut, pName );