马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 fansonzou 于 2020-3-28 13:29 编辑
文章来源微信公众号【单元库特征化及建库技术】,ID:libchar
前面文章我们提到characterization所需的input文件包括:作为template的参考库(针对rechar flow)、netlist、相关工艺文件spice model等。除此之外,我们还需要一些必要的设置,这些设置主要体现在下面两种文件里:
configure.tcl文件 – 主要针对library level的设置
SiliconSmart对这些参数都设有一个默认值,用户可以根据具体的应用场景灵活地调整参数。
(一)Global Settings – 全局设置
在特征化之前,用户必须先通过configure.tcl文件来设置工作环境,configure.tcl文件用来设置全局参数,这些参数将应用到所有的cells中。这个文件可以完全自行编辑,也可以拷贝一个template然后再修改。Template放在安装目录下-install_path/etc/configure.tcl,可以用create -legacy命令来自动拷贝到你的工作目录里。 configure.tcl主要定义了三块内容:
Operating conditions – 工作条件
Pin type definitions – pintype定义
Global configuration parameters – 全局配置参数
Operating conditions
Operating conditions就是我们熟知的PVT (工艺、工作电压、温度),我们可以定义任意多组,但是需要注意的是,每一组都必须独立开来(不一样的op_cond_name)。 create_operating_condition命令用来定义相应的PVT blocks – set_opc_process命令用来指定相应的spice models add_opc_supplies命令用来指定相应的工作电压 set_opc_temperature命令用来设置相应的工作温度
登录/注册后可看大图
640?wx_fmt=png.jpg (14.61 KB
, 下载次数: 105
)
下载附件
保存到相册
2020-3-26 14:30 上传
Pin type definitions
Pin type定义每一个pin的电气特性,包括数字、模拟和其他一些常见的attributes。对于默认的configure.tcl文件,里面有一个名为default的pintype。用户可以根据需求自行额外定义不同的pintype。这里需要强调的一点是,pintype模块有继承性,即后面的pintype block可以继承之前的pintype block。
登录/注册后可看大图
640?wx_fmt=png.jpg (32.35 KB
, 下载次数: 124
)
下载附件
保存到相册
2020-3-26 14:30 上传
Pintype里的一些典型的options
Supply options
set logic_high_name VDD
set logic_low_name VSS
Delay/slew thresholds (trip points)
set logic_high_threshold 0.8
set logic_low_threshold 0.2
set prop_delay_level 0.5
set prop_delay_current 0.1
Active driver options
set driver_mode active
set driver BUFX16
set driver_rise_time 10e-12
set driver_fall_time 10e-12
Slew options
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}
Load options
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}
Constraints options
set constraints_numsteps_slew 3
set constraint_resolution 10e-12
在library characterization过程中,diver参数的设置对table的value影响很大,因此把这一块单独拿出来介绍一下。设置driver的参数是driver_mode,使用的比较多的有以下几种driver类型:
pwl – 最简单的driver类型,就是一个简单的线性ramp斜坡。
set driver_mode pwl
emulated – 又叫ccs predriver,一种标准的非线性CCS timing波形。
set driver_mode emulated
active – 用一个driver cell(如buffer或者inverter)驱动一个电容来产生实际的输入波形。注意,该类型的driver需要用import_driver命令把driver cell导入进来。
set driver_mode active
set driver “BUFX16”
active-waveform – 跟active driver类似,不同的是,工具将记录driver的输出波形,后续的仿真将直接使用这个波形作为激励,因此,对driver的仿真只需要一次即可,避免了多次仿真。
set driver_mode active_waveform
set driver “BUFX16”
custom – 跟pwl类似,用户可以自行定义波形的形状。配合这种driver使用的参数有driver_pwl_rise和driver_pwl_fall,分别定义rise和fall的形状。这里需要注意的是,电压值需要归一化,介于0~1之间。
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}
custom-perslew – 跟custom类似,对每一个slew都可以设置不同的driver波形。
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。 再提两个参数 –
archive_condition_on_success
archive_condition_on_failure
这两个参数控制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一般会放在
- 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文件长什么样?基本就长成下面这个样子了。
登录/注册后可看大图
640?wx_fmt=png.jpg (65.56 KB
, 下载次数: 136
)
下载附件
保存到相册
2020-3-26 14:30 上传
下面分别看看instance文件里的内容:
Pin definitions
add_pin定义每个pin的电气特性,pin的名字,pintye(这个上篇文章做过介绍),pin的方向等。add_pin的语法在User Guide上有非常详细的说明,这里就不罗列了。需要提一下的是-internal,告诉工具这个pin定义成internal node,因此后面还需要跟上-spice_node指定在netlist里具体的net节点。这在retention cell,memory characterization的时候经常会碰到。
Cell function
Instance文件里另一个非常重要的部分就是cell function,描述cell的逻辑行为。有几种描述function的方式:
1. add_function – 通过布尔表达式来描述,这是最简单的描述逻辑行为的方式之一,对于一些比较简单的function可以用它来描述。
登录/注册后可看大图
640?wx_fmt=png.jpg (21.62 KB
, 下载次数: 116
)
下载附件
保存到相册
2020-3-26 14:30 上传
2. add_table – 通过真值表或者状态表的形式描述cell的行为。这种表格的形式可以描述add_function难以描述的cell行为。对一些复杂的cell,如memory,一般都是采用这种方式。
登录/注册后可看大图
640?wx_fmt=png.jpg (56.94 KB
, 下载次数: 116
)
下载附件
保存到相册
2020-3-26 14:30 上传
3. add_flop和add_latch – 描述时序逻辑寄存器和锁存器的行为。
4. define_differential_receiver和set_output_differential – 有些cell有差分输入或者差分输出,输出function不是由单一的输入信号决定的,通过定义差分输入和输出告诉工具注意处理差分信号。
5. 对于非常复杂的cell,上面的任何一种定义方式都不足以描述它的function,这时就需要组合使用以上多种定义方式。如果组合使用还是不足以描述,那就要上AUS/AUA了。关于AUS/AUA,后面再详细介绍。 这里简单举几个栗子:
登录/注册后可看大图
640?wx_fmt=jpeg.jpg (18.03 KB
, 下载次数: 139
)
下载附件
保存到相册
2020-3-26 14:30 上传
add_function的栗子
add_function output_pin expression [-hi_z expression] [-illegalexpression]
add_function Z A -hi_z !EN – 三态缓冲器,当EN为高输出使能,EN为低输出为三态。
add_table的栗子
比如一个NAND,真值表如下,跟定义add_function Z { (!A) | (!B) }是等价的。
add_table {
A B : Z
0 0 : 1
0 1 : 1
1 0/1 : 1/0
}
add_table和add_function组合使用的栗子
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的栗子
add_flop IQ IQN !CK { D&SEL | IQN&!SEL } -clear !RB -preset S-preset_clear {1 0}
add_function Q IQ
登录/注册后可看大图
640?wx_fmt=png.jpg (27.42 KB
, 下载次数: 121
)
下载附件
保存到相册
2020-3-26 14:30 上传
(三)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。
state_partitions=all
Full states,给出所有secondary inputs的状态,每一条arc的测量基于全部secondary inputs states。
set_config_opt -type delay -from A state_partitions all
登录/注册后可看大图
640?wx_fmt=png.jpg (31.03 KB
, 下载次数: 131
)
下载附件
保存到相册
2020-3-26 14:30 上传
登录/注册后可看大图
640?wx_fmt=png.jpg (38.62 KB
, 下载次数: 134
)
下载附件
保存到相册
2020-3-26 14:30 上传
state_partitions=one
仅考虑secondary inputs的一个状态,相应arc的测量也仅做一次。这里要敲个黑板,这个state是工具选择的,换言之是不受用户控制的。
set_config_opt -type delay -from A state_partitions one
登录/注册后可看大图
640?wx_fmt=png.jpg (92.06 KB
, 下载次数: 116
)
下载附件
保存到相册
2020-3-26 14:30 上传
登录/注册后可看大图
640?wx_fmt=png.jpg (26.66 KB
, 下载次数: 124
)
下载附件
保存到相册
2020-3-26 14:30 上传
到这里,会有人提问题,那不行,我不想被工具控制,工具给定的state不是我想要的,怎么办?两个方法:一个是用explicit来自定义when_condition,另一个是用dontcare_bias来直接给定状态。先说explicit定义whens。
state_patitions=explicit
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。
登录/注册后可看大图
640?wx_fmt=png.jpg (24.18 KB
, 下载次数: 122
)
下载附件
保存到相册
2020-3-26 14:30 上传
state_partitions=none
这个就比较简单了,关闭指定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的内容会在以后的推文里详细介绍。
dontcare_bias
前面提到两个方法来指定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
登录/注册后可看大图
640?wx_fmt=png.jpg (47.42 KB
, 下载次数: 115
)
下载附件
保存到相册
2020-3-26 14:30 上传
还有一个经常会用到,也是给定pin的状态,但它是一个命令而不是option。
add_fixed_value
这个命令指定一个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会在后面的推文介绍)。
登录/注册后可看大图
640?wx_fmt=png.jpg (1.67 KB
, 下载次数: 127
)
下载附件
保存到相册
2020-3-26 14:30 上传
我们有个微信交流群可扫描下方二维码加我微信,拉您入群
登录/注册后可看大图
640?wx_fmt=png.jpg (56.56 KB
, 下载次数: 114
)
下载附件
保存到相册
2020-3-26 14:30 上传
登录/注册后可看大图
640?wx_fmt=gif.jpg (6.36 KB
, 下载次数: 121
)
下载附件
保存到相册
2020-3-26 14:30 上传
登录/注册后可看大图
640?wx_fmt=jpeg.jpg (15.49 KB
, 下载次数: 163
)
下载附件
保存到相册
2020-3-26 14:30 上传
登录/注册后可看大图
640?wx_fmt=gif.jpg (6.36 KB
, 下载次数: 117
)
下载附件
保存到相册
2020-3-26 14:30 上传
长按二维码关注我们