SiliconSmart的compare_library作为单元库质量验证方法之一,在比较两个lib结构及数值的一致性方面非常有用。当我们手上只有一个lib,我们能否检查这个lib的语法,结构,一致性,数据合理性,精度等等质量指标呢?这篇文章就来介绍一下单元库质量验证方法之二——
qualify_library。
Qualify_library能检查的项目包括:NLDM-CCST一致性检查,NLDM-CCSN一致性检查,voltagerange检查,sensitivity检查,leakage检查,hazard检查,pg_pin检查,data range检查,minimumload index检查等等。其中前三项是必查项,后几项为选查项,由用户指定是否需要检查。
先上qualify_library的语法:
qualify_library [-cells list_of_strings][-check list_of_strings] string
[-cells list_of_strings]列出哪些cells需要检查;[-checklist_of_strings]列出需要做的检查项,如aocv, data_range, hazard,leakage, load_index, lvf, pg_pin, sensitivity等等;string指定library的名字或者cell-levellibrary的路径。
qualify_library如何使用?下面列举一个基本的用法:
set_location $charpoint
set_config_opt qualification_lc_shell /tools/2020.03/bin/lc_shell(LC的启动命令)
qualify_library test.lib
这三句话就能让SiliconSmart运行qualify的功能,运行完之后会在当前的charpoint目录下自动产生qualification的文件夹。结果为.html文件,用户可以通过浏览器如firefox打开结果:
firefox $charpoint/qualification/html/index.html
由于qualify_library是基于LibraryCompiler工具的检查,因此必须调用LC工具,最简单的调用方式就是直接指定LC的启动命令:
set_config_opt qualification_lc_shell/tools/2020.03/bin/lc_shell(LC的启动命令)
下面一起来分别了解qualify_library的各个检查项
顾名思义,这个检查是针对lib的语法、结构等的检查。SiliconSmart调用LC对lib进行编译,如果有warning或者error就会报出来。用户可以根据自己的需要,使用qualification_lc_suppress参数来wAIve掉部分已知的warning。
set_config_opt qualification_lc_suppress {LBDB-605 LBDB-172}
CCST-NLDM和CCSN-NLDN一致性检查是qualify_library的默认检查项。它检查的是从CCST以及CCSN model里求得的slew和delay是否与NLDM一致。针对每一个cell,每一条arc,每一个state,每一组slew/load都会做检查,只有当slew和delay的误差在设定的tolerance之内才会被认为通过。设定误差容限的语句:
set_config_opt qualification_tol {delay rel_tol abs_tol slew rel_tol abs_tol}
如:set_config_optqualification_tol {delay 0.1 0.2 slew 0.3 0.4}
Voltage range检查也是qualify_library的默认检查项。它检查的是CCSNmodel是否能够实现轨到轨的transition。使用了5%和95%两个数值作为轨到轨的阈值。
Cell sensitivity检查是可选检查项,检查cell的delay和slew对input波形尤其是波形尾部的敏感度,因为有时input波形的扭曲对cell的timing值的变化影响很大。在做这个检查的时候,会用两个input波形驱动同一个cell,一个是正常的轨到轨的transition,另一个是95%VDD的transition,然后比较这两个波形驱动下的delay或者slew,一旦超过设定的阈值,则报error。
qualify_libarary -check sensitivity test.lib
Data range检查也是可选检查项,检查lib里的数值是否有超出用户指定范围之外的值。
set_config_opt qualification_data_range {delay 0.1 0.25transition 0.1 0.25}
qualify_library -check data_range test.lib
这个检查也是可选检查,检查loadindex里的最小值是否比min_capacitance还要小,这样能避免下游工具使用外插的方法计算对应的value。
qualify_library -check load_index test.lib
该项检查也是可选项,用来检查leakage_power里是否有0值。
qualify_library -check leakage test.lib
该项检查也是可选项,主要用来检查table中的0值(min_pulse_width除外),以及数值的单调性。
qualify_library -check hazard test.lib
该项检查也是可选项,用来检查.lib中的pg_pin是否跟netlist中的pg_pin一致。
qualify_library -check pg_pin test.lib
除了上面提到的检查项外,qualify_library还能检查UPF,AOCV,LVF,Scaling等等。这些检查项待我们介绍到相应部分的时候再介绍给大家,所以,敬请期待吧。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
扫描下方二维码关注【单元库特征化及建库技术】,ID:libchar,交流K库经验