[转贴]【你真的会K库吗】了解K库的基本知识

[转贴]【你真的会K库吗】了解K库的基本知识

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×

本帖最后由 fansonzou 于 2020-3-28 13:29 编辑

文章来源微信公众号【单元库特征化及建库技术】,ID:libchar

前面文章我们提到characterization所需的input文件包括:作为template的参考库(针对rechar flow)、netlist、相关工艺文件spice model等。除此之外,我们还需要一些必要的设置,这些设置主要体现在下面两种文件里:

configure.tcl文件 – 主要针对library level的设置

.inst文件 – 主要针对cell 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一般会放在/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文件长什么样?基本就长成下面这个样子了。

登录/注册后可看大图

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 上传

长按二维码关注我们

相关推荐

《陈瓘简介》► 查看72篇诗文
国外365平台

《陈瓘简介》► 查看72篇诗文

📅 09-16 👁️ 8646
十进制 到 十六进制 转换器
365bet英超

十进制 到 十六进制 转换器

📅 07-08 👁️ 9947
王者荣耀更新时间表及注意事项
国外365平台

王者荣耀更新时间表及注意事项

📅 08-20 👁️ 8251