草庐IT

6.1 Verilog 低功耗简介

runoob 2023-03-28 原文

关键词:开关功耗,内部功耗,静态功耗


功耗影响

便携性

功耗越低,同等电量下电子产品工作时间越长,便携性设备的电池容量和体积设计的困难度也会降低。例如,手机越做越薄,性能还不受影响,就是因为低功耗设计发挥了至关重要的作用。

性能

功耗越大,耗能越多,产生的热量越多,各器件的工作性能就会受到影响。例如,手机使用时间较长时,会感觉手机发热,而且各应用软件也会出现卡顿的现象。

成本

不考虑低功耗设计时,一个功能的实现方法可能较为繁琐,实现的器件增多,产品面积增大;同时,功耗过大时,就要考虑散热装置,这又增加了组装成本。 总之,低功耗设计有很多的优点,也是以后数字设计的发展趋势。


功耗类型

功耗类型一般可分为动态功耗、静态功耗和浪涌功耗。

动态功耗

动态功耗主要包括开关功耗(又称为翻转功耗)和短路功耗(又称为内部功耗)。

1、开关功耗

在 CMOS 数字电路中,对负载电容进行充放电时消耗的功耗为开关功耗。如下 CMOS 非门:

当 Vin = 0 时,上面的 PMOS 导通,下面的 NMOS 截止;VDD 对负载电容 Cload 进行充电。充电完成后,Vout 的电平为高。

当 Vin = 1 时,上面的 PMOS 截止,下面的 NMOS 导通,负载电容通过 NMOS 进行放电。放电完成后,Vout 的电平为低。

这样一开一闭的变化,即电源的充放电,就形成了开关功耗。开关功耗的计算公式如下所示:

其中,VDD 为供电电压,Cload 为后级电路等效的负载电容,Tr 为输入信号的翻转率。

2、短路功耗

信号的翻转不是在瞬时完成的。因此,在输入信号进行翻转时,PMOS 和 NMOS 总有一段时间是同时导通的,那么从电源 VDD 到地 VSS 之间就有了通路,形成短路电流,产生短路功耗。如下反相器电路图所示:

短路功耗的计算公式如下:

其中,Vdd 为供电电压,Tr 为翻转率,Q 为一次翻转过程中从电源流到地的电荷量。

静态功耗

在 CMOS 电路中,静态功耗主要是漏电流引起的功耗,往往与工艺有关。

漏电流的组成主要为:PN 结反向电流 I1、源极和漏极之间的亚阈值漏电流 I2、栅极漏电流(包括栅极和漏极之间的感应漏电流 I3)、栅极和衬底之间的隧道漏电流 I4。

一般情况下,漏电流主要是指栅极泄漏电流和亚阈值电流。对于超深亚微米工艺,隧道漏电流成为主要电流之一。

  • 1、在 PN 结两端加反向电压时,P 区空穴和 N 区电子的运动相反,没有电流通过,二极管处于截止状态,部分能量较大的空穴和电子会挣脱反向电场的束缚而形成微弱的漂移电流。
  • 2、栅极泄漏功耗:在栅极加上信号后(即栅压),栅级到衬底之间会存在电容,因此在栅衬之间就会存在有电流,由此就会存在功耗。
  • 3、 亚阈值电流:栅极电压低于导通阈值,仍会产生从漏极到源极的泄漏电流。此电流称为亚阈值泄漏电流。在较狭窄的晶体管中,漏极和源极距离较近的情况下会产生亚阈值泄漏电流。晶体管越窄,泄漏电流越大。要降低亚阈值电流,可以使用高阈值的器件,还可以通过衬底偏置增加阈值电压,这些也属于低功耗设计的考虑范畴。
  • 4、隧道漏电流:属于量子力学范畴,感兴趣的同学可自行查阅。

静态功耗的计算公式如下:

浪涌功耗

浪涌功耗是浪涌电流引起的功耗。浪涌电流是指开机或者唤醒时,器件流过的最大电流,因此浪涌电流也称为启动电流。浪涌功耗不是本次所讨论的内容。


功耗模型

library 信息

下面是一种 library 工艺的前几行代码描述,包含功耗有关的参数,具体含义在注释中说明。

实例


library (xxx) {
    /*  library head: xxx */
    technology (cmos) ;
    simulation  : true ;
    nom_process : 1 ;
    nom_temperature : -40;         //默认温度
    nom_voltage : 0.81;            //默认电压
    voltage_map(VDD, 0.81);        //定义lib中多个电压,包括以下几行
    voltage_map(TVDD, 0.81);
    voltage_map(VDDDST, 0.81);
    voltage_map(VDDGR, 0.81);
    voltage_map(VDDSRC, 0.81);
    voltage_map(VSS, 0);
    operating_conditions("ssg0p81vm40c"){    //一种corner定义
        process : 1; /* SSGlobalCorner_LocalMC_MOS_MOSCAP-SSGlobalCorner_LocalMC_RES_BIP_DIO_DISRES */
        temperature : -40;
        voltage : 0.81;
        tree_type : "balanced_tree";
    }
    default_operating_conditions : ssg0p81vm40c ;
    capacitive_load_unit (1,pf) ;      //定义电容单位
    voltage_unit : "1V" ;              //定义电压单位
    current_unit : "1mA" ;             //定义电流单位
    time_unit : "1ns" ;                //定义时间单位
    pulling_resistance_unit : "1kohm";
    define_cell_area (pad_drivers,pad_driver_sites) ;
    ……

cell 信息

一个 library 中会有多个基本功能单元,用关键字 cell 声明,也包含了多种功耗信息。

实例


cell (AN2D0BWP7T40P140) {
    area : 0.392;
    cell_footprint : "an2d1";
    pg_pin (VDD) {                //电源引脚
        pg_type : primary_power;
        voltage_name : VDD;
    }
    ……
   
    pin(A1) {                     //输入信号引脚
    driver_waveform_fall : "tcbn22ullbwp7t40p140ssg0p81vm40c:fall";
    driver_waveform_rise : "tcbn22ullbwp7t40p140ssg0p81vm40c:rise";
    direction : input;
    related_ground_pin : VSS;     //输入引脚地端
    related_power_pin : VDD;      //输入引脚电压
    capacitance : 0.000418924 ;   //输入引脚电容
    ……  
    }

  pin(Z) {
    direction : output;
    power_down_function : "!VDD + VSS";
    function : "(A1 A2)";
    related_ground_pin : VSS;     //输出引脚地端
    related_power_pin : VDD;      //输出引脚电压
    max_capacitance : 0.04182;    //输出引脚最大电容
    min_capacitance : 0.00013;    //输出引脚最小电容
    ……  
  }

此时,如果再知道翻转率,就可以计算出动态功耗。

翻转率(Toggle rate,Tr),指单位时间内信号(包括时钟、数据等信号) 的翻转次数。如下所示,信号在 40ns 时间内跳转了 4 次,则翻转率为 Tr = 4/4ns = 0.1GHz。

内部功耗信息

cell 定义中,内部功耗会有如下定义。

实例


internal_power() { 
    related_pin : "A1" ;
    related_pg_pin : VDD ;
    rise_power(power_template_8x8) {   //内部功耗查找表
        index_1("0.0026, 0.0101, 0.0252, 0.0553, 0.1155, 0.236, 0.4769, 0.9587");
        index_2("0.00013, 0.00046, 0.00112, 0.00243, 0.00506, 0.01031, 0.02081, 0.04182");
        values ( \
          "0.000249215, 0.000254481, 0.000262354, 0.000261007, 0.00026381, 0.000277799, 0.000304295, 0.000345046", \
          "0.000239751, 0.000248667, 0.000255454, 0.0002551, 0.000268563, 0.000275995, 0.000294669, 0.000336529", \
          ……  
        );
      }

    fall_power(power_template_8x8) { //内部功耗查找表
        index_1("0.0026, 0.0101, 0.0252, 0.0553, 0.1155, 0.236, 0.4769, 0.9587");
        index_2("0.00013, 0.00046, 0.00112, 0.00243, 0.00506, 0.01031, 0.02081, 0.04182");
        values ( \
          "0.000577367, 0.000584652, 0.000589472, 0.000591623, 0.000592223, 0.000591943, 0.00059185, 0.000592132", \
          "0.000563896, 0.000570743, 0.000576589, 0.000579818, 0.000580794, 0.00057962, 0.000579997, 0.000579136", \
          "0.000550059, 0.000555794, 0.00056188, 0.000565568, 0.000567663, 0.000567231, 0.000567712, 0.00056745", \
          ……  
        );
      }
}

cell 的内部功耗与其转换时间和输出电容负载有关。根据输入转换时间和输出电容的大小,在工艺库中进行查表,得到上升功耗和下降功耗,再根据下面公式进行计算,可得到总的内部功耗:

静态功耗信息

cell 定义中,静态功耗(漏电功耗)会有如下定义。

实例


  leakage_power () {
    value : 0.059561;
    related_pg_pin : VDD;
  }
  leakage_power () {
    value : 0.048082;
    when : "!A1 !A2 !Z";
    related_pg_pin : VDD;
  }
  leakage_power () {
    value : 0.053318;
    when : "!A1 A2 !Z";
    related_pg_pin : VDD;
  }
  ……  

静态功耗跟 cell 的状态有关,也就是输入输出信号在不同的状态下,功耗也会有所差异。通过状态进行查表,就可以得到相应的静态功耗了。 实际分析功耗时,不会手动的去查找相关参数来计算功耗,否则工作量会大到难以估计。往往是借助一些功耗分析工具,提取这些标准单元库的功耗信息进行整合计算。

有关6.1 Verilog 低功耗简介的更多相关文章

  1. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  2. Verilog使用inout信号的方法 - 2

    目录一、inout在设计文件中的使用方法1.1、inout的第一种使用方法1.2、inout实现的第二种使用方法1.3、inout使用总结 二、inout在仿真测试中的使用方法一、inout在设计文件中的使用方法在FPGA的设计过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号)。比如,IIC总线中的SDA信号就是一个双向信号,QSPIFlash的四线操作的时候四根信号线均为双向信号。在Verilog中用关键字inout定义双向信号,这里总结一下双向信号的处理方法。1.1、inout的第一种使用方法  实际上,双向信号的本质是由一个三态门组成的,三态门可以输出高电平,低电

  3. IDEA 2023.1 正式发布,新特性简介 - 2

     昨晚看到IDEA官推宣布IntelliJIDEA2023.1正式发布了。简单看了一下,发现这次的新版本包含了许多改进,进一步优化了用户体验,提高了便捷性。至于是否升级最新版本完全是个人意愿,如果觉得新版本没有让自己感兴趣的改进,完全就不用升级,影响不大。软件的版本迭代非常正常,正确看待即可,不持续改进就会慢慢被淘汰!根据官方介绍:IntelliJIDEA2023.1针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施,使得Maven导入更快,并且在打开项目时IDE功能更早地可用。由于后台提交检查,新版本提供了简化的提交流程。IntelliJIDEA

  4. pytest简介 - 2

    介绍pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:简单灵活,容易上手支持参数化能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等测试用例的skip和xfail处理可以很好的和jenkins集成

  5. SpringCloud入门实战(七)-Hystrix入门简介 - 2

    📝学技术、更要掌握学习的方法,一起学习,让进步发生👩🏻作者:一只IT攻城狮。💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。❤️《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。项目demo:源码地址👉🏻SpringCloud入门实战系列不迷路👈🏻:SpringCloud入门实战(一)什么是SpringCloud?SpringCloud入门实战

  6. ruby-on-rails - Rails 6.1 将不经修改返回 Content-Type header ...改为使用 `#media_type` - 2

    当引用此block时,此弃用消息对我来说意味着什么?defjson_response(object,status=:ok)renderjson:object,status:statusend编辑讯息:Rails6.1willreturnContent-Typeheaderwithoutmodification…use#media_typeinstead 最佳答案 当我将我的应用程序从Rails5.2.3升级到Rails6.0.0-rc1时,我收到了同样的错误消息config/application.rb#thiswastheline

  7. 最新2023年Kali Purple,紫色的带防御kali,简介和安装(超详细) - 2

    文章目录一,什么是kaliPurle(卡利紫)二,如何安装kaliPurple。(有步骤没图片直接是默认)1,复制它的下载链接到迅雷可以让你下镜像变得更快。2,打开你的虚拟机创建新的虚拟机3,点击后面浏览然后找到镜像的所在地选中确定,下一步4,这里默认就可以,因为Ubuntu和这个差不多架构。5,然后,名字自己改一下,然后把他安到你想要装的盘,容量默认。之后一直下一步就可以**6,打开它,然后第一个图形界面安装,直接回车,然后选中文点continue之后没有图片的直接点继续。7,密码想设什么设什么。然后一直继续到我的图片那里改一下就可以了。8,软件默认就行。9,耐心等待。然后点手动配置dvc然

  8. MPU6050 简介 - 2

    目录关于MPU6050芯片关于小板关于厂家和DATASHEET关于漂移关于角加速度还是角速度关于精度和量程(可调,可选)关于功耗,陀螺仪+加速器工作电流:3.8mA(全功率,陀螺仪在所有速率下,在1kHz采样率下加速)采样率高,功耗也高可以参考  MPU6050陀螺仪与Processing和匿名上位机飞控联动实录-知乎关于MPU6050芯片MPU6050传感器模块是6轴运动跟踪设备。包含3轴陀螺仪、3轴加速度计、运动处理器、温度传感器。I2C总线接口,可与微控制器进行通信。通过辅助I2C总线与其他传感器设备通信,如3轴磁力计、压力传感器等。如果3轴磁力计连接到辅助I2C总线,则MPU6050可

  9. MySQL REPLACE字符串函数简介 - 2

    MySQL为您提供了一个有用的字符串函数REPLACE(),它允许您用新的字符串替换表的列中的字符串。REPLACE()函数的语法如下:REPLACE(str,old_string,new_string);SQLREPLACE()函数有三个参数,它将string中的old_string替换为new_string字符串。注意:有一个也叫作REPLACE的语句用于插入或更新数据。所以不要将REPLACE语句与这里的REPLACE字符串函数混淆。REPLACE()函数非常方便搜索和替换表中的文本,例如更新过时的URL,纠正拼写错误等。在UPDATE语句中使用REPLACE函数的语法如下:UPDATE

  10. vscode搭建Verilog HDL开发环境 - 2

      工欲善其事,必先利其器。应该没有多少人会使用Quartus和vivado这些软件自带的编辑器吧,原因在于这些编辑器效率很低,VerilogHDL代码格式比较固定,通常可以利用代码片段补全加快书写。基本上代码写完之后才会打开Quartus或者vivado建立工程,这其实要求编辑器需要有代码检错的功能,否则可能编译时一直报错,什么信号没定义,信号定义错误之类的。Vscode利用插件可以实现此功能,可以达到一次设计就通过编译和仿真。1、vscode安装及解决下载速度慢  首先通过VisualStudioCode-CodeEditing.Redefined安装vscode软件,如图1下载64位vs

随机推荐