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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 13126|回复: 21

[求助] 标准单元库.lib中参数说明

[复制链接]
发表于 2018-10-23 21:44:55 | 显示全部楼层 |阅读模式

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

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

x
各位有没有对标准单元库了解比较深的,我请问下各位,标准单元库的.lib文件中的internal power是怎么生成的?它指的好像是内部的直流通路功耗。在用write_datebase把数据写成txt文件时,发现给出的这个internal switching power的单位是PJ.有人知道是怎么算的吗?请大佬帮忙解决解决!
发表于 2018-11-2 21:09:12 | 显示全部楼层
回复 1# 亭ting

Internal power 的单位的确是J,而不是W。工具分析电路的功耗是计算信号翻转的次数,lib里面的internal power查找表标准是单元翻转一次所消耗的能量,所以也成为功耗。
发表于 2018-11-2 21:09:48 | 显示全部楼层
回复 2# seu_huzw
01.png
02.png
03.png
发表于 2018-11-2 21:13:08 | 显示全部楼层
想了解单元库的话推荐两个文档:
Library Compiler 的UserGuide: 着重讲Liberty格式单元库的语法。
Siliconsmart 的UserGuide: 讲单元库的表征化流程,可以学习库里面的数据是如何提取得到的。
发表于 2018-11-2 21:19:31 | 显示全部楼层
回复 3# seu_huzw
04.png
05.png
 楼主| 发表于 2018-11-3 10:28:02 | 显示全部楼层
回复 3# seu_huzw

非常用心感谢您的详细解答。我在用Liberate做library的特征化,对这个switching and hidden power参数比较疑惑是怎么求得,记有详细database的文档就给出了pJ的单位,让人比较误解。我后来让它生成power info记录文件,得到了下面的计算公式:(1) A: Rise > Z:Rise
* Cell=ND2M0R_st Pin=Z RelatedPin=A RelatedPGPin=VDD Type=combinational Direction=rise_transition When= Deck= Vector_space=FxR Vector_used=110
    - Leakage_state =
    - Leakage_value =
    - Raw_equation  = ((((-Q(VDD))*(VDD(VDD)-GND(GND))*0.5)*2.0-((((Cload(Z)*(_ecsmRailVdd - _ecsmRailGnd))*(_ecsmRailVdd - _ecsmRailGnd)*0.5)*2.0))))/capacitance_unit

    - Eval_equation = ((((1.45894e-11)*(0.3-0)*0.5)*2.0-((((1e-15*(0.299988-0.000185172))*(0.299988-0.000185172)*0.5)*2.0))))/1e-12
    - Value         = 4.37673

(A)这个公式跟您给我展示的类似,区别就是这里面没有显示减去leakage的那一项。然后这个结果给出的单位就是pJ。我感觉后面除去了电容单位,怎么就成了pJ了呐?
(B)还有一点,上面公式中的那个2,命令里设置了,不考虑VSS端功耗,他给的结果就是都乘以了2,事实上,即使考虑VSS,这个结果是为0的,怎么会在不考虑是乘以2呐,比较疑惑。
pin_based_power:
If disabled (mode 0) only the power in the power supplies (Vdd's) is monitored.. The VSS power will not be output when using pin_based_power 0.

结果记录: 不考虑vss.PNG
(2)当考虑VSS端功耗时:
* Cell=ND2M0R_st Pin=Z RelatedPin=A RelatedPGPin=GND Type=combinational Direction=rise_transition When= Deck= Vector_space=FxR Vector_used=110
    - Leakage_state =
    - Leakage_value =
    - Raw_equation  = (Q(GND)*(VDD(VDD)-GND(GND))*0.5)/capacitance_unit

    - Eval_equation = (0*(0.3-0)*0.5)/1e-12
    - Value         = 0


* Cell=ND2M0R_st Pin=Z RelatedPin=A RelatedPGPin=VDD Type=combinational Direction=rise_transition When= Deck= Vector_space=FxR Vector_used=110
    - Leakage_state =
    - Leakage_value =
    - Raw_equation  = (((-Q(VDD))*(VDD(VDD)-GND(GND))*0.5-(((Cload(Z)*(_ecsmRailVdd - _ecsmRailGnd))*(_ecsmRailVdd - _ecsmRailGnd)*0.5))))/capacitance_unit

    - Eval_equation = (((1.45894e-11)*(0.3-0)*0.5-(((1e-15*(0.299988-0.000185172))*(0.299988-0.000185172)*0.5))))/1e-12
    - Value         = 2.18836


最后结果:
考虑VSS.PNG


hidden 和switch power一样,都是在不考虑vss时,结果会是考虑的2倍。

如果大佬知道这是怎么回事,请您指教
发表于 2018-11-3 21:59:20 | 显示全部楼层
回复 6# 亭ting

关于(A),你的公式里除的是capacitance_unit,不是capacitance。capacitance是由单位的,但capacitance_unit没有单位,就是一个数字(1e-12),除以capacitance_unit的目的就是把最终结果的单位(J)转换成(pJ)。关于(B),建议VDD, VSS都考虑。至于没考虑VSS时公式里为什么乘以2,我不清楚,我没用过Liberate,你可以查看liberate的文档。
 楼主| 发表于 2018-11-4 09:19:03 | 显示全部楼层
回复 7# seu_huzw


   原来那个pJ是这样来的啊,多谢了,我一直以为里面人家那个Q=(C*V)中 的C就是给的单位是pf,因为.lib里面也有定义这样的单位,然后除以电容单位1e-12,这样power就变成了标准单位J了。真是多谢啦!
 楼主| 发表于 2018-11-7 20:16:47 | 显示全部楼层
回复 7# seu_huzw


   你好!可以再请教您一个问题吗?就是标准单元里面delay arc和power arc中template中有两个参数,分别是input net transition,另一个是total_output_net_capacitance,我想知道这个foundry是怎么确定这两个值呐。(1)template中定义delay 和power arc是这样的:
define_template -type delay \
         -index_1 { 4.1 9.9 12.9 21.3 30.2 45.3  92.4 186.6 375.1 } \
         -index_2 {0.00031 0.00057 0.00085 0.00108 0.00152 0.0021 0.00414 0.00822 0.01639} \
         delay_template_7x7_6

define_template -type power \
         -index_1 { 4.1 9.9 12.9 21.3 30.2 45.3  92.4 186.6 375.1 } \
         -index_2 {0.00031 0.00057 0.00085 0.00108 0.00152 0.0021 0.00414 0.00822 0.01639} \
         power_template_7x7_6

(2)lib中显示这样的
  lu_table_template (delay_template_7x7_11) {
    variable_1 : input_net_transition;
    variable_2 : total_output_net_capacitance;
    index_1 ("0.002, 0.0179736, 0.0740444, 0.18112, 0.347938, 0.582002, 0.89");
    index_2 ("0.001, 0.00119591, 0.00188358, 0.0031968, 0.00524272, 0.00811339, 0.0118908");


  power_lut_template (power_template_7x7_11) {
    variable_1 : input_transition_time;
    variable_2 : total_output_net_capacitance;
    index_1 ("0.002, 0.0179736, 0.0740444, 0.18112, 0.347938, 0.582002, 0.89");
    index_2 ("0.001, 0.00119591, 0.00188358, 0.0031968, 0.00524272, 0.00811339, 0.0118908");
发表于 2018-11-12 13:31:22 | 显示全部楼层
回复 9# 亭ting
你只需要确定min_transition, max transition, min_capacitance, max_capacitance. 其他索引值可以通过插值得到。min_transition/min_capacitance对电路的影响不大,主要考虑max_transition和max_capacitance。
首先确定max_transition,如果characterize的PVT和foundry提供的一样,可以直接使用foundry提供的max_transition。如果你在
新的PVT下characterize,那么max_transition的设置可能和设计的电路有关了。一般会和时钟的频率有关,比如不得大于时钟周期的20%或30%,这个没有固定的标准值。一般一个Library里面单元的pin的max_transition一样,另外由于clock信号的max_transition要严格,因此跟时序单元的clock pin相关的max_transition会设成一半的值。
不同单元的驱动能力不同,因此max_capacitance不同。工具可以自动去设置这个值(我之前用的siliconsmart就是这样的),原则是:仿真单元,不断加大output_load,知道output_transition等于max_transition,那么该output_load就是max_capacitance.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-23 06:14 , Processed in 0.028558 second(s), 8 queries , Gzip On, Redis On.

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