summaryrefslogtreecommitdiffstats
path: root/src/map/scl/sclLiberty.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2014-09-16 16:44:51 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2014-09-16 16:44:51 -0700
commit6d0b555dabe44d5b6eb428e05fea673395602b65 (patch)
tree37d21f5ebdaf27b1d1b83c3307ed09341d47b346 /src/map/scl/sclLiberty.c
parent288d64d033516f992b7c07620e43ee6fbbf9e26a (diff)
downloadabc-6d0b555dabe44d5b6eb428e05fea673395602b65.tar.gz
abc-6d0b555dabe44d5b6eb428e05fea673395602b65.tar.bz2
abc-6d0b555dabe44d5b6eb428e05fea673395602b65.zip
Support for leakage power in Liberty parser and sizer.
Diffstat (limited to 'src/map/scl/sclLiberty.c')
-rw-r--r--src/map/scl/sclLiberty.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/map/scl/sclLiberty.c b/src/map/scl/sclLiberty.c
index 36d01c1b..23258b7c 100644
--- a/src/map/scl/sclLiberty.c
+++ b/src/map/scl/sclLiberty.c
@@ -619,6 +619,23 @@ char * Scl_LibertyReadCellArea( Scl_Tree_t * p, Scl_Item_t * pCell )
return Scl_LibertyReadString(p, pArea->Head);
return 0;
}
+char * Scl_LibertyReadCellLeakage( Scl_Tree_t * p, Scl_Item_t * pCell )
+{
+ Scl_Item_t * pItem, * pChild;
+ Scl_ItemForEachChildName( p, pCell, pItem, "cell_leakage_power" )
+ return Scl_LibertyReadString(p, pItem->Head);
+ // look for another type
+ Scl_ItemForEachChildName( p, pCell, pItem, "leakage_power" )
+ {
+ Scl_ItemForEachChildName( p, pItem, pChild, "when" )
+ break;
+ if ( pChild && !Scl_LibertyCompare(p, pChild->Key, "when") )
+ continue;
+ Scl_ItemForEachChildName( p, pItem, pChild, "value" )
+ return Scl_LibertyReadString(p, pChild->Head);
+ }
+ return 0;
+}
char * Scl_LibertyReadPinFormula( Scl_Tree_t * p, Scl_Item_t * pPin )
{
Scl_Item_t * pFunc;
@@ -1447,6 +1464,8 @@ Vec_Str_t * Scl_LibertyReadSclStr( Scl_Tree_t * p, int fVerbose, int fVeryVerbos
Vec_StrPutS_( vOut, Scl_LibertyReadString(p, pCell->Head) );
pName = Scl_LibertyReadCellArea(p, pCell);
Vec_StrPutF_( vOut, pName ? atof(pName) : 1 );
+ pName = Scl_LibertyReadCellLeakage(p, pCell);
+ Vec_StrPutF_( vOut, pName ? atof(pName) : 0 );
Vec_StrPutI_( vOut, Scl_LibertyReadDeriveStrength(p, pCell) );
// pin count
nOutputs = Scl_LibertyReadCellOutputNum( p, pCell );