马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 fansonzou 于 2020-3-28 13:29 编辑
文章来源微信公众号【单元库特征化及建库技术】,ID:libchar
前面文章我们提到characterization所需的input文件包括:作为template的参考库(针对rechar flow)、netlist、相关工艺文件spice model等。除此之外,我们还需要一些必要的设置,这些设置主要体现在下面两种文件里: configure.tcl文件 – 主要针对library level的设置 <cell_name>.inst文件 – 主要针对cell level的设置 SiliconSmart对这些参数都设有一个默认值,用户可以根据具体的应用场景灵活地调整参数。
(一)Global Settings – 全局设置
在特征化之前,用户必须先通过configure.tcl文件来设置工作环境,configure.tcl文件用来设置全局参数,这些参数将应用到所有的cells中。这个文件可以完全自行编辑,也可以拷贝一个template然后再修改。Template放在安装目录下-install_path/etc/configure.tcl,可以用create -legacy命令来自动拷贝到你的工作目录里。 configure.tcl主要定义了三块内容:
Operating conditions
Operating conditions就是我们熟知的PVT (工艺、工作电压、温度),我们可以定义任意多组,但是需要注意的是,每一组都必须独立开来(不一样的op_cond_name)。 create_operating_condition命令用来定义相应的PVT blocks – set_opc_process命令用来指定相应的spice models add_opc_supplies命令用来指定相应的工作电压 set_opc_temperature命令用来设置相应的工作温度
Pin type definitions
Pin type定义每一个pin的电气特性,包括数字、模拟和其他一些常见的attributes。对于默认的configure.tcl文件,里面有一个名为default的pintype。用户可以根据需求自行额外定义不同的pintype。这里需要强调的一点是,pintype模块有继承性,即后面的pintype block可以继承之前的pintype block。
Pintype里的一些典型的options
set logic_high_name VDD set logic_low_name VSS set logic_high_threshold 0.8 set logic_low_threshold 0.2 set prop_delay_level 0.5 set prop_delay_current 0.1 set driver_mode active set driver BUFX16 set driver_rise_time 10e-12 set driver_fall_time 10e-12 set numsteps_slew 5 set smallest_slew 10e-12 set default_slew 15e-12 set largest_slew 1.2e-9 set explicit_points_slew {0.1e-9 0.2e-9 0.3e-9 0.4e-9 0.5e-9} set autorange_load pin set numsteps_load 5 set smallest_load 10e-15 set default_load 40e-15 set largest_load 100e-15 set explicit_points_load {1e-15 3e-15 10e-15 25e-15 100e-15} set constraints_numsteps_slew 3 set constraint_resolution 10e-12
在library characterization过程中,diver参数的设置对table的value影响很大,因此把这一块单独拿出来介绍一下。设置driver的参数是driver_mode,使用的比较多的有以下几种driver类型:
set driver_mode pwl
set driver_mode emulated
set driver_mode active set driver “BUFX16”
set driver_mode active_waveform set driver “BUFX16”
set driver_mode active_waveform set driver_pwl_rise {0 0 0.1 0.05 0.2 0.1 0.35 0.25 0.55 0.8 0.7 0.98 1 1} set driver_pwl_fall {0 1 0.1 0.98 0.2 0.8 0.35 0.6 0.55 0.4 0.7 0.3 1 0}
set driver_mode active_waveform set driver_pwl_rise {{slew1} {t11 v1 t12 v2 ... t1n vn} ... {slewm} {tm1 v1 tm2 v2... tmn vn}} set driver_pwl_fall {}
我们要根据自己的需求选择合适的driver_mode,确保characterization出来的table value准确。
列一下常见的需要修改的参数:
• explicit_points_load
• explicit_points_slew
• initial_delay
• largest_load
• largest_slew
• logic_high_name
• logic_high_threshold
• logic_low_name
• logic_low_threshold
• numsteps_load
• numsteps_slew
• prop_delay_level
• smallest_slew
• smallest_load
• driver_mode
Globalconfiguration parameters
全局配置参数应用于整个library中所有cell中,在characterization之前必须定义这些参数的值(即使有default)。
• active_pvts
• job_scheduler
• normal_queue
• power_meas_supplies
• run_list_maxsize
• simulator
• simulator_cmd
• simulator_options• time_res_high
其中,simulator参数指定仿真器,SiliconSmart支持Hspice,Finesim,Hspice_embedded,Finesim_embedded等仿真器。simulator_cmd指定启动仿真器的命令行。关于以上参数的解释和用法,可以参照user guide。 再提两个参数 –
这两个参数控制Spice仿真结果的存档方式,尤其在debug阶段经常会用到。有三个值,分别是yes ,no,compress。举个栗子,set archive_condition_on_success compress,将成功的仿真结果存档并压缩;yes,只存档但不压缩;no,只保存sof文件(供model步骤使用)不存档仿真结果。archive_condition_on_failure也是一样的,只不过针对的是出错的仿真结果的存档方式。
(二)Cell level设置 – instance file
Instance file (cellname.inst) 是基于Tcl的脚本,描述每一个cell的结构,逻辑行为,定义配置信息,告诉工具如何去做characterization和modeling。Instance一般会放在<charpoint>/control/路径下。一个完整的instance file主要包含这些信息–
- cell网表的存放路径
- 每个pin的方向和类型
- Cell的function- 激励和测量控制
- 用来告诉工具如何做characterization和modeling的其他配置信息
那么我们如何拿到这个instance文件呢?主要有四种途径:一是走rechar flow,import参考库的同时,工具会自动产生instance文件,import -liberty seed.lib;二是functional recognition flow(这个flow后面会详细介绍),import -netlist_dir data/netlists -extension .cir BUFX16,三是使用golden instance,针对像STD cell这样的标准单元,instance文件有时是可以重复使用的;最后一个是完全手写,这个对刚接触工具的同学可能不太友好。
既然Instance文件能自动产生,那是不是就不需要用户干预了?NO!下面几种情况还是需要我们手动编辑修改的:
- Rechar flow,对于复杂的cell,seed.lib里function信息不全,或者压根就没有。
- FR (Functional Recognition) flow,一些复杂的cell工具认不出来或者认不对。
- 用户需要做一些自定义的arc。- 有些arc需要提供cell内部节点 (internal node)。
- 有些cell的pin的定义需要更新。
- 其他我没想到的。
Instance文件长什么样?基本就长成下面这个样子了。
下面分别看看instance文件里的内容:
add_pin定义每个pin的电气特性,pin的名字,pintye(这个上篇文章做过介绍),pin的方向等。add_pin的语法在User Guide上有非常详细的说明,这里就不罗列了。需要提一下的是-internal,告诉工具这个pin定义成internal node,因此后面还需要跟上-spice_node指定在netlist里具体的net节点。这在retention cell,memory characterization的时候经常会碰到。
Instance文件里另一个非常重要的部分就是cell function,描述cell的逻辑行为。有几种描述function的方式:
1. add_function – 通过布尔表达式来描述,这是最简单的描述逻辑行为的方式之一,对于一些比较简单的function可以用它来描述。
2. add_table – 通过真值表或者状态表的形式描述cell的行为。这种表格的形式可以描述add_function难以描述的cell行为。对一些复杂的cell,如memory,一般都是采用这种方式。
3. add_flop和add_latch – 描述时序逻辑寄存器和锁存器的行为。
4. define_differential_receiver和set_output_differential – 有些cell有差分输入或者差分输出,输出function不是由单一的输入信号决定的,通过定义差分输入和输出告诉工具注意处理差分信号。
5. 对于非常复杂的cell,上面的任何一种定义方式都不足以描述它的function,这时就需要组合使用以上多种定义方式。如果组合使用还是不足以描述,那就要上AUS/AUA了。关于AUS/AUA,后面再详细介绍。 这里简单举几个栗子:
add_function output_pin expression [-hi_z expression] [-illegalexpression]
add_function Z A -hi_z !EN – 三态缓冲器,当EN为高输出使能,EN为低输出为三态。
比如一个NAND,真值表如下,跟定义add_function Z { (!A) | (!B) }是等价的。
add_table {
A B : Z
0 0 : 1
0 1 : 1
1 0/1 : 1/0
}
add_table {
EN SE CK : IQ : IQ
- - 1 : - : n
0 0 0 : - : 0
1 0 0 : - : 1
1 1 0 : - : 1
}
add_function Q { IQ&CK }
add_flop IQ IQN !CK { D&SEL | IQN&!SEL } -clear !RB -preset S-preset_clear {1 0}
add_function Q IQ
(三)set_config_opt命令
set_config_opt命令是SiliconSmart最常见的命令之一,用来设置全局参数、pintype参数等等。这个命令非常好用,出现的频率也非常高。set_config_opt的语法这里不详细罗列,请大家参考UserGuide。set_config_opt命令经常用来对某些特殊arc的condition进行重置,挑几个常见的应用来介绍一下。
-type
这个参数指定后面的option会应用到哪些measurement type上,比如delay,slew,setup,hold,recovery,removal,mpw,ibis等等。如果不指定type,option将用于所有type类型。
-from/-to/-pin
-from指定从一个(或一组)pin开始,-to指定另一个(或另一组)pin结束,-pin用来重置configure.tcl文件里相应pintype里设置的参数。
如:
set_config_opt -type {timing} -from I -to Z -pin Z explicit_points_load {0.5e-12}
测量I->Z这条arc的timing时,将pinZ的load指定为0.5pF。
set_config_opt -cell {DF*} -type {setup hold} glitch_high_threshold 0.8
通配DF*类型的cell,在测量setup,hold时,将glitch检查时的glitch_high_threshold设置成80%。
set_config_opt -type {timing} -from {CP} -to {Q} state_partitions all
测量CP->Q的timing arc时,设置state_partitions=all。 state_partitions是什么?
state_partitions=all又是什么?接下来我们就介绍这个。
(四)基于state的测量
我们在做某个cell的characterization的时候,它的输入inputs往往不止一个,我们将某一条arc的input之外的inputs称为secondary inputs,它的状态会对这条arc的测量产生影响。比如一个两输入的与门,输入pin是A和B,输出pin是Z,在测量A->Z的delay时,B的状态(0或者1)对这条arc的delay会有影响吗?有时是会的。因此,我们需要基于B的状态进行测量,这就是state_partitions。
state_partitions参数的值有很多,常用的有all,one,explicit,none。
Full states,给出所有secondary inputs的状态,每一条arc的测量基于全部secondary inputs states。
set_config_opt -type delay -from A state_partitions all
仅考虑secondary inputs的一个状态,相应arc的测量也仅做一次。这里要敲个黑板,这个state是工具选择的,换言之是不受用户控制的。
set_config_opt -type delay -from A state_partitions one
到这里,会有人提问题,那不行,我不想被工具控制,工具给定的state不是我想要的,怎么办?两个方法:一个是用explicit来自定义when_condition,另一个是用dontcare_bias来直接给定状态。先说explicit定义whens。
explicit开放给用户自行定义state的状态。
set_config_opt -type delay -from A state_partitions explicit
set_config_opt -type delay -from A whens {!B&C}
secondary inputs用布尔表达式定义在whens里,上面两句话定义了B和C的状态分别为0和1。定义state_partitions=explicit后不要忘了指定whens。
这个就比较简单了,关闭指定arc的测量。
set_config_opt -type delay -from A -to Z state_partitions none
不测量A->Z这条arc的delay。
set_config_opt state_partitions none
关闭所有arcs的测量。这个设置在某些场合是有用的,比如用户需要自行定义所有的arc;再比如我们在做IBIS characterization的时候就会先disable掉所有的arc。IBIS的内容会在以后的推文里详细介绍。
前面提到两个方法来指定secondary inputs的state,第一个方法是用state_partitions=explicit来指定,另一个方法就是dontcare_bias。
还是拿state_partitions=one来举例,工具自动选择了B=0,C=0来测量,假设我们希望指定C=1,用dontcare_bias就能实现了。
set_config_opt -type delay -from A state_partitions one
set_config_opt -type delay -from A -pin C dontcare_bias 1
还有一个经常会用到,也是给定pin的状态,但它是一个命令而不是option。
这个命令指定一个input或者IO pin为某个恒定的状态(0,1,Z)。如果我们认为某个pin的状态不会对整个cell产生影响,或者不在意影响,或者我们不希望这个pin在整个characterization过程中翻转,那么就可以使用这个命令将这个pin定死。
但要注意一点的是,如果用add_fixed_value指定某个pin为恒定状态,如add_fixed_value C 1,那么pin C就不会再被认为是input,相应的,也就不会测量pin C的capacitance,也不会测量pin C的hidden power(hidden power会在后面的推文介绍)。
我们有个微信交流群 可扫描下方二维码 加我微信,拉您入群
长按二维码关注我们
|