zoukankan      html  css  js  c++  java
  • 静态功耗 计算

    大概在遥远的90nm之前,leakage power在library里确实是被描述成一个常值的。但从90nm开始,为了更加精确,library里的leakage power不再是个常值了,而是被模拟成一个输入状态的函数。所以基础还是library,在一个library里跟leakage相关的变量大致有:

    library(my_lib) {

    leakage_power_unit :"1nW";

    default_leakage_power_density :0.0;

    default_cell_leakage_power :0.0;

    cell_leakage_power :53057.365200; 

    leakage_power(){

    when :"!A & !B & !CI";

    value: ...;

    power_level:"VDD";}

    }

    • Leakage_power_unit:标示leakage power的单位,如果所有库里都没有该变量的定义,每个工具都会有自己默认的单位,如Genus默认用nW。

    • cell_leakage_power:标示固定的leakage power值,如果library里没有该变量的定义,或者该变量是个负值,工具会用default_cell_leakage_power的值,如果default_cell_leakage_power也没有指定,则用default_leakage_power_density的值乘以该cell的面积来计算得出一个leakage值,如果这三个变量都没有定义,则leakage的值为0。

    • leakage_power(){}:这一部分就是用来定义跟输入状态相关的leakage power,其中"when"用于定义输入的状态,如果某种状态没有定义,则用cell_leakage_power定义的值来计算leakage;power_level用于多电压cell中指定是跟哪个电压相关的leakage power。

    1.如果library里既没有定义cell_leakage_power也没有定义default_cell_leakage_power而只定义了default_leakage_power_density,则:

    cell_leakage_power= area *default_leakage_power_density

     2.

    拿AND2X2这个cell为例,它的输入总共有四种组合状态,在lib中只定义了三种状态,同时还定义了cell_leakage_power,所以对于没定义的状态,在计算时用cell_leakage_power指定的值。假设,A处在状态"1"的概率是0.6,B处在状态"1"的概率是0.3,则该cell的leakge power为:

    prob(!A) x prob(!B) x yy11+ prob(!A) x prob(B) x yy22 +prob(A) x prob(!B) x yy33 +prob(A) x prob(B) x YYYY=0.4 x 0.7 x yy11 +0.4 x 0.3 x yy22 + 0.6 x 0.7 x yy33 +0.6 x 0.3 x YYYY

    在实际项目中,如果没有读入activity的文件,不同的工具都会有根据默认或指定的probability来计算每个cell输入pin的probability,不同工具也会有相应的命令来report出当前的probability是多少,如Genus可以用命令:report instance –power,也可以通过以下attribute得到相关信息:

    lp_probability_type

    lp_default_probability

    lp_computed_probability

    不成熟的小建议:找一个cell在不同的工具里分别去报它的leakage,再根据本文陈述的内容,去观摩工具的行为,这一点就会尽在你的掌握之中了。

  • 相关阅读:
    java网络编程之图片上传
    java网络编程之Socket编程
    sql查询优化
    sql语句in
    结构型模式总结(14)
    Python程序中的进程操作-进程间数据共享(multiprocess.Manager)
    同步异步阻塞非阻塞
    Python程序中的进程操作-进程池(multiprocess.Pool)
    Python程序中的进程操作-开启多进程(multiprocess.process)
    Python程序中的进程操作-进程同步(multiprocess.Lock)
  • 原文地址:https://www.cnblogs.com/lelin/p/11409976.html
Copyright © 2011-2022 走看看