热度 3| |||
libertyParser下载下来以后包括以下内容。
examples libertyParser.py LICENSE README
其中libertyParser.py包含了核心代码,包括parser和一些实用的function。
README文件中则对liberty parser的基本原理和代码结构做了详细说明。
examples目录中包含一个library文件范例example.lib和一个使用脚本范例example.py,我们就从这个脚本的使用来了解一下libertyParser.py的应用。
example.py
首先应该将libertyParser.py中的类libertyParser实例化,实例化的时候同时传入library file(s),此时liberty parser会逐行解析library file(s),报告不规范行和非法行,同时将library file(s)的数据记录到python dict(字典)的数据结构之中。(数据结构请参阅README)
myLibertyParser = libertyParser.libertyParser(libFile)
对于myLibertyParser,其使用有两种。
1. 直接获取数据结构myLibertyParser.libDic,自己逐层拨开libDic取出所需数据。
2. 如果对libDic的结构了解不充分,也可以使用libertyParser内置的一些函数来获取基本数据,内置函数有以下几种。
* getUnit() : 返回字典unitDic,里面包含library file中所有关于unit的定义。
* getCellList() : 返回列表cellList,里面包含library file中所有cell。
* getCellArea() : 返回字典cellAreaDic,里面包含library file中所有cell的area信息。
* getCellLeakagePower() :返回字典cellLeakagePowerDic,里面包含library file中所有cell的leakage_power信息,因为一个cell会包含多个leakage_power,所以每个leakage_power的数据结构中会同时包含when/related_pg_pin/values这三个数据以示区分。
* getLibPinInfo() : 返回字典libPinDic,里面包含library file中所有pin层级的timing和internal_power信息,最小单位是timing table和internal_power table中所包含的index及values数据。
那么我们用范例lib(非常简单的一个lib,包含了三个简单cell)来运行一下范例脚本。
这个parser具有简单高效的特点。
由于采用了基于结构分析(不包含任何关键词),所以它能普遍适用于不同纳米制程的library file(实测过28nm - 7nm)。
尽管python属于一种执行低效的语言,但是经过代码调优,实测parser 700万行的library file(有700MB这么大),用时仅仅28s左右。
欢迎大家使用,如果发现bug请及时联系我liyanqing1987@163.com修复。
如果有其它合理的enhancement的需求,也可以联系我。