在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 20852|回复: 19

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

[复制链接]
发表于 2020-3-26 14:24:57 | 显示全部楼层 |阅读模式

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

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

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 – 工作条件

  • 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

Pin type definitions



Pin type定义每一个pin的电气特性,包括数字、模拟和其他一些常见的attributes。对于默认的configure.tcl文件,里面有一个名为default的pintype。用户可以根据需求自行额外定义不同的pintype。这里需要强调的一点是,pintype模块有继承性,即后面的pintype block可以继承之前的pintype block。

640?wx_fmt=png.jpg



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参数的设置对tablevalue影响很大,因此把这一块单独拿出来介绍一下。设置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 nocompress。举个栗子,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文件长什么样?基本就长成下面这个样子了。

640?wx_fmt=png.jpg


下面分别看看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


2.    add_table – 通过真值表或者状态表的形式描述cell的行为。这种表格的形式可以描述add_function难以描述的cell行为。对一些复杂的cell,如memory,一般都是采用这种方式。
640?wx_fmt=png.jpg

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

  • 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_tableadd_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




(三)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
640?wx_fmt=png.jpg
  • state_partitions=one


仅考虑secondary inputs的一个状态,相应arc的测量也仅做一次。这里要敲个黑板,这个state是工具选择的,换言之是不受用户控制的


set_config_opt -type delay -from A
state_partitions one

640?wx_fmt=png.jpg
640?wx_fmt=png.jpg


到这里,会有人提问题,那不行,我不想被工具控制,工具给定的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

  • 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


还有一个经常会用到,也是给定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

我们有个微信交流群
可扫描下方二维码
加我微信,拉您入群


640?wx_fmt=png.jpg
640?wx_fmt=gif.jpg
640?wx_fmt=jpeg.jpg
640?wx_fmt=gif.jpg
长按二维码关注我们












Picture4.png
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
640?wx_fmt=gif.jpg
640?wx_fmt=jpeg.jpg
640?wx_fmt=gif.jpg
640?wx_fmt=gif.jpg
发表于 2020-5-13 16:31:32 | 显示全部楼层
好东西,顶一个
发表于 2020-5-13 23:31:44 | 显示全部楼层
看完收益良多,学到了不少基础知识
发表于 2020-10-29 14:20:05 | 显示全部楼层
干活!收藏了!谢谢大佬!
发表于 2020-11-3 09:47:42 | 显示全部楼层
多谢分享
发表于 2020-11-3 10:31:21 | 显示全部楼层
多谢大佬分享
发表于 2020-12-4 10:59:30 | 显示全部楼层
学习了,收藏
发表于 2021-1-20 10:53:52 | 显示全部楼层
来学习 感谢
发表于 2022-5-10 10:07:07 | 显示全部楼层
学习了,顶一个
发表于 2022-5-20 10:27:13 | 显示全部楼层
太优秀了,赞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-25 13:02 , Processed in 0.037305 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表