本文主要介绍单元库建库几个常用的flow。从大类上分,主要有三种常见的flow,分别是re-characterization,new characterization和add-on,其中re-characterization flow还可以细分多种小类。下面我们一起来看一下。
1. Re-characterization Flow
先来看re-characterization flow。Rechar flow是经常用到的flow之一,比如我们手上有之前建好的lib,或者vendor提供了部分PVT的lib,但我们的实际项目需要更多PVT的lib;再比如我们对一套库进行了部分小的优化(优化了layout,优化cell的设计),但没有做功能性的改变。当我们需要保留原来lib的结构,仅仅需要更新lib里的table(如timing,power)数值,我们一般用到的就是rechar flow。
从参考库(seed.lib)里抽取必要的信息,如function,slews,loads,timing arcs等,因此pure rechar flow需要用户给的input最少。 Pure rechar flow需要的文件有: - Seed.lib – 含function信息,以及slews/loads/timing arcs等信息 - Netlist(一般是带有寄生参数的后仿网表)和工艺文件(spice model) - Configure.tcl文件 – 如果没有,在使用import命令导入seed.lib和netlist的同时,SiliconSmart可以自动产生基本的configure.tcl import -fast -liberty seed.lib -netlist_dir netlist_dir -ext ext cells
FR flow在seed.lib没有function的时候很有用。它通过读取cell的netlist自动识别cell的function,并且自动产生instance file(.inst)。 FR flow需要的文件有: - Seed.lib – 不包含function信息,但有slews/loads/timing arcs等信息 - Netlist(一般是带有寄生参数的后仿网表)和工艺文件(spice model)
- Configure.tcl文件 – 如果没有,在使用import命令导入seed.lib和netlist的同时,SiliconSmart可以自动产生基本的configure.tcl 举两个栗子: - Function由FR识别,slews/loads/whens从seed.lib抽取 import -recognize -liberty seed.lib -netlist_dir netlist_dir -ext ext注意,这里的-recognize不能省略,否则FR功能会被-liberty关闭。 - Function由FR识别,slews/loads/whens由用户自定义 import -recognize -liberty seed.lib -netlist_dir netlist_dir-ext ext -use_default_slews -use_default_loads -use_default_whens 使用FR flow需要注意以下几点:- Netlist – 必须是SPICE格式,Spectre网表目前不支持 - Spice model – 需通过add_opc_process命令定义在configure.tcl里- Power rails – 除了在add_opc_supplies定义外,还需在power_meas_supplies/grounds里定义
- Clock pin – 在import时序逻辑单元时,注意要将clock pin列在-clocks和-inputs里,否则工具可能会认错
import -recognize -netlist_dir netlist_dir -ext ext -clocks {CLK} -inputs {CLK D} -outputs {Q}
- Model names – 如果netlist里的mos管是subcircuit方式定义的,注意,nmos/pmos_model_names参数要定义上。同样的,diode用dio_model_names定义;电容用cap_model_names定义;电阻用res_model_names定义。
这个flow适用于需要保留seed.lib的attributes,structure,headers,comments等,不使用seed.lib里的loads/slews/whens/arcs。用户可以自行定义autorange,numsteps_slew/load,smallest_slew/load,state_partitions等。Skeleton liberty-based flow需要的文件有: - Seed.lib – 只需包含你希望保留的attributes,structure,headers,comments等信息 - Netlist(一般是带有寄生参数的后仿网表)和工艺文件(spice model) - Configure.tcl文件 – 如果没有,在使用import命令导入seed.lib和netlist的同时,SiliconSmart可以自动产生基本的configure.tclimport -fast -skeleton -liberty seed.lib -netlist_dir netlist_dir -ext ext cells
2. Add-on Flow
Add-on flow的用法跟re-characterization flow比较类似,不同的是,add-on flow仅characterize我们需要增加的数据,保留已经存在的数据。常用-match来指定需要跑的仿真。 Add-on flow需要的文件有: - Seed.lib – 含function信息,以及slews/loads/timing arcs等信息 - Netlist(一般是带有寄生参数的后仿网表)和工艺文件(spice model) - Configure.tcl文件 – 如果没有,在使用import命令导入seed.lib和netlist的同时,SiliconSmart可以自动产生基本的configure.tcl 常用add-on flow的几个场景:
- 增加LVF tables
- 增加CCS-Timing/CCS-Noise/CCS-Power tables
- 增加EM tables create chpset_log_file chp/sis.logset_location chpimport -fast -liberty seed.lib -netlist_dir ./ -ext .spfconfigure -timing -ccs_noisecharacterize -match (ccs_noise_*|miller_ccs_*) $cellsmodel -ccs_noise -output with_ccsn $cells
3. New Characterization Flow
这个flow可以理解成从无到有,如我们手头没有任何参考lib,仅有一套cell的网表(netlist),但是我们仍要建库。New char flow需要的文件有: - Netlist(一般是带有寄生参数的后仿网表)和工艺文件(spice model) - Instance文件 – 手工定义cell的function,pin的信息,以及characterization的控制信息等 - Configure.tcl文件 – 不能自动生成,但可以使用create -legacy从安装目录下copy一个最基本的configure.tcl后,根据具体需求手工设置相关settingcreate chpset_log_file chp/sis.logexec cp configure.tcl chp/config/configure.tclset_location chpexec cp cell.inst chp/control/configure -timing -power $cellscharacterize $cellsmodel -timing -power $cells 常用的flow就是这几种,需要提醒的是,这些flow不是互斥的,在实际项目中,我们很少仅使用某一种flow,更多时候是综合使用多种flow来建库。 如有flow的相关问题,可在公众号里留言或加群,我们一起交流学习。--------------------------------------------------------------------------------------------文章来源公众号【单元库特征化及建库技术】,ID:libchar