(数字IC)低功耗设计入门(六)——门级电路低功耗设计优化

三、门级电路低功耗设计优化

  (1)门级电路的功耗优化综述

  门级电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射的门级网表开始,对设计进行功耗的优化以满足功耗的约束,同时设计保持其性能,即满足设计规则和时序的要求。功耗优化前的设计是已经映射到工艺库的电路,如下图所示:

    

  门级电路的功耗优化包括了设计总功耗,动态功耗以及漏电功耗的优化。对设计做优化时,优化的优先次序如下:

    

由此我们可以找到, 优化时,所产生的电路首先要满足设计规则的要求,然后满足延迟(时序)约束的要求,在满足时序性能要求的基础上,进行总功耗的优化,再进行动态功耗的优化和漏电功耗的优化,最后对面积进行优化。

  优化时先满足更高级优先权的约束。进行低级优先权约束的优化不能以牺牲更高优先权的约束为代价。功耗的优化不能降低设计的时序。为了有效地进行功耗优化,需要设计中有正的时间冗余(timing slacks)。功耗的减少以时序路径的正时间冗余作为交换,即功耗优化时会减少时序路径上的正的时间冗余。因此,设计中正的时间冗余越多,就越有潜力降低功耗。

  通过上面的描述,对门级功耗优化有了一下了解之后,这里先介绍一下静态功耗优化的方法——多阈值电压设计,然后介绍基于EDA工具的动态功耗的优化,接着介绍总体功耗的优化;在最后介绍一种常用的门级低功耗的方法——电源门控。电源门控我放在明天发表,今天的内容主要就是围绕静态、动态、总功耗来写。

  (2)多阈值电压设计

①多阈值电压设计原理

  由于半导体工艺越来越先进,半导体器件的几何尺寸越来越小,器件中的晶体管(门)数越来越多,器件的供电电压越来越低,单元门的阈值电压越来越低。由于单位面积中的单元门越来越多,功耗密度高,器件的功耗大。因此,设计时,我们要对功耗进行优化和管理。在90nm或以下的工艺,静态功耗要占整个设计功耗的20%以上。因此,使用超深亚微米工艺时,除了要降低动态功耗,还要降低静态功耗。在超深亚微米工艺,单元门的阈值电压漏电功耗(静态功耗)有如下图所示的关系:

      

由图可见,阈值电压Vt以指数关系影响着漏电功耗。阈值电压Vt与漏电功耗和单元门延迟有如下关系:

        阈值电压Vt越高的单元,它的漏电功耗越,但门延迟越长,也就是速度

        阈值电压Vt越低的单元,它的漏电功耗越,但门延迟越短,也就是速度

我们可以利用多阈值电压工艺库的这种特点,进行漏电功耗的优化,设计静态功耗低性能高的电路。

  一般的设计中,一个时序路径组((timing path group)有多条时序路径,延迟最大的路径称为关键路径。根据多阈值电压单元的特点,为了满足时序的要求,关键路径中使用低阈值电压的单元(low Vt cells),以减少单元门的延迟,改善路径的时序。而为了减少静态功耗,在非关键路径中使用高阈值电压的单元(high Vt cells),以降低静态功耗。因此,使用多阈值电压的工艺库,我们可以设计出低静态功耗和高性能的设计。上面的描述如下图所示:

          

②门级网表/RTL代码的多阈值电压设计

  多阈值电压设计可以在门级网表或者RTL代码的时候就进行,也可以在后面布线后进行。门级网表/RTL代码的多阈值电压设计(或者说是静态功耗优化)流程如下所示:

      

一个对应的示例脚本如下所示:

    set   target_library   "hvt.db   svt.db   lvt.db"

    ······

    read_verilog   mydesign.v

    current_design   top

    source   myconstraint.tcl

    ······

    set_max_leakage    -power   0mw

    compile

    ······

与以前的脚本不同,设置target_library时,我们用了多个库。上列中,目标库设置为 "hvt.db   svt.db   lvt.db"脚本中使用set_max_leakage_power命令为电路设置静态功耗的约束。在运行compile命令时,Power Compiler将根据时序和静态功耗的约束,在目标库选择合适的单元,在满足时序约束的前提下,尽量使用Svt或Hvt单元,使优化出的设计性能高,静态功耗低。

  PS:如果在Physical Compiler工具(现在我们使用DC的拓扑模式)里做漏电功耗优化时,我们可以保留一点正的时间冗余(positive slack),使电路不会在极限的时序下工作.这些时间冗余量也可被后面其他的优化算法所使用。设置时间冗余的命令如下:

    set   physopt_power_critical_range   时间量

③布线后的多阈值电压设计

  上面是门级网表/RTL代码的多阈值电压设计,下面简单介绍布线后的多阈值电压设计,流程如下图所示:

        

相应的一个示例脚本如下所示:

    set   target_library   "hvt.db   svt.db   lvt.db"

    read_verilog   routed_design.v

    current_design   top

    source    top.sdc

    ······

    set_max_leakage    -power   0mw

    physopt   -preserve_footprint    -only_power_recovery  -post_route  -incremental

physopt命令中使用了“-poat_route”的选项,特别用于进行布线后的漏电功耗的优化。优化时,单元的外形名称(footprint)保留下来,原有的布线保持不变。

④多阈值电压设计与多阈值库的报告

  进行漏电功耗的优化时,Power Compile将报告如下的漏电优化的信息:

      

LEAKAGE POWER的列(Column)展出了内部优化的漏电成本值。它和报告出来的漏电功耗可能不一样。我们用“report_power”命令得到功耗的准确的报告。

======================================================================

  我们现在来看一下多阈值库。多阈值库定义了两个属性,一个为库属性default_threshold_voltage_group,另一个为单独库单元的属性threshold_voltage_group。然后报告多阈值电压组的命令是:report_threshold_voltage_group.我们可以使用多阈值库的这两个属性,报告出设计中使用多域值库单元的比例,一个示例的脚本如下所示:

    set_attr   -type string  lvt.db:slow  default_threshold_voltage_group  LVt

    set_attr   -type string  svt.db:slow  default_threshold_voltage_group  SVt

    set_attr   -type string  hvt.db:slow  default_threshold_voltage-group  HVt

    report_threshold_voltage_group

报告得到的结果如下所示:

    

  (3)基于EDA工具的动态功耗优化

  前面介绍了静态功耗的优化,下面介绍动态功耗的优化。动态功耗优化通常在做完时序优化后进行。动态功耗优化时,需要提供电路的开关行为,工具根据每个节点的翻转率,来优化整个电路的动态功耗。用compile/physopt命令可以同时对时序和功耗做优化。设置动态功耗的命令为:

            set_max_dynamic_power  xxmw.(一般设置为0)

  动态功耗优化的流程如下所示:

          

一个对应的示例脚本如下所示:

    read_verilog   top.v

    source   constraints.tcl

    set   target_library   "tech.db"

    compile

    read_saif

    set_ max_dynamic_power   0 mw

    compile  -inc

动态功耗的优化的实现如上面所示。优化过程用了很多技术比如插入缓冲器、相位分配之类的。由于这些都是power compiler在背后自动实现(或者说是进行低功耗优化时工具使用的原理),不需要我们进行设置,因此这里不进行介绍。

  (4)总体功耗优化

  前面分别介绍了静态功耗和动态功耗的优化方法。我们可以把它们结合在一起,进行整个设计总功耗的优化。总功耗是动态功耗和静态功耗的和,总功耗的优先级比动态功耗和静态功耗高。总功耗优化时,工具尽量减少动态功耗和静态功耗的和。优化时如果减少了漏电功耗增加了动态功耗,但它们的和减少了,优化是有效的。反之亦然。我们可以通过设置开关,使动态功耗优化和静态功耗优化用不同的努力级别(effort levels)和权重(weights)进行优化。

  总功耗的优化流程如下图所示:

          

一个对应的示例脚本如下所示:

    read_verilog    top.v

    source     constraints.tcl

    set   target_library   "hvt.db svt.db lvt.db"

    ······

    compile

    read_saif

    set_max_total_power  0  mw  -leakage_weight   30

    compile   -inc

    ······

脚本中,target_library设置为多阈值电压的库,用于做静态功耗的优化。读入含有开关行为的saif文件,用于约束动态功耗的优化。在设置总功耗的约束时,我们可以在set_max_total_power命令中使用静态或/和动态功耗权重(weight)的选项,使工具在优化时,偏重于静态或动态功耗。假设P、Pd和Pl分别为总功耗、动态功耗和静态功耗,Wd和Wl分别为动态功耗和静态功耗的权重,则

        总功耗P = (Wd*Pd+Wl*P1)/Wd

  我们可以在DC或PC中设定只对功耗做优化。这时候,工具仅优化设计的功耗,而不会对更高优先级的约束做任何的优化和修正设计规则DRC违例。但是这种优化也不会使设计的更高优先级约束的性能变差和引起DRC违例。这种优化的优点在于运行时间较短,可用于优化设计的动态功耗、静态功耗和总功耗。在DC和PC中,只能以增量编辑的形式工作。

  PC中只对功耗做优化的命令如下:

    set_max_total   -power  0  mw

    physopt    -only_power_recovery

  DC中只对功耗做优化的命令如下(由于现在PC在DC中,因此下面的脚本更常用):

    set   compile_power_opto_only   true

    set_max_leakage_power  0  mw

    compile  -inc

今天就先介绍到这里,明天将介绍门控电源的内容。

时间: 2024-08-28 18:24:15

(数字IC)低功耗设计入门(六)——门级电路低功耗设计优化的相关文章

(数字IC)低功耗设计入门(八)——物理级低功耗设计&to be continued?

前面学习了从系统级到门级的低功耗设计,现在简单地了解了一下物理级设计.由于物理级的低功耗设计与后端有关了,这里就不详细学习了.这里主要是学习了一些基本原则,在物理级,进行低功耗设计的基本原则是:   ·对于设计中翻转活动很频繁的节点,采用低电容的金属层进行布线; ·使高翻转率的节点尽可能地短;  ·对于高负载的节点与总线,采用低电容的金属层; ·对于特别宽的器件,采用特殊的版图技术,以得到更小的漏极结电容.  ·在有些布局布线工具中,可以将功耗作为优化目标来生成时钟树. 低功耗设计入门的学习到这

(数字IC)低功耗设计入门(二)——功耗的分析

前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析.由于是面向数字IC前端设计的学习,所以这里的功耗分析是基于DC中的power compiler工具:更精确的功耗分析可以采用PT,关于PT的功耗分析可以查阅其他资料,这里不涉及使用PT的进行功耗分析. (1)功耗分析与流程概述 上一个小节中讲解了功耗的构成,并且结合工艺库进行简要地介绍了功耗的计算.但是实际上,我们根本不可能人工地计算实际的大规模集成电路的功耗,我们往往借助EDA工具帮我们分析电路的功耗.这里我们就介绍一下EDA

VerilogHDL概述与数字IC设计流程学习笔记

一.HDL的概念和特征 HDL,Hard Discrimination Language的缩写,翻译过来就是硬件描述语言.那么什么是硬件描述语言呢?为什么不叫硬件设计语言呢?硬件描述语言,顾名思义就是描述硬件的语言,它用文本的形式来描述电子系统硬件结构和行为,是一种用形式化方法来描述数字电路和系统的语言.正是因为如此,硬件与软件不一样,他不像软件,你某天突发奇想,想实现某个的界面,搞搞代码就OK了.硬件它是由实实在在的物理器件搭载而成,用抽象的语言怎么可能弄出一个电路来呢? 一门语言,总有那么一

(数字IC)低功耗设计入门(一)

低功耗设计这个专题整理了好久,有一个月了,有图有证据: 然而最近一直有些烦心事.郁闷事,拖延了一下,虽然现在还是有点烦,但是还是先发表了吧.下面我们就来聊聊低功耗设计吧,由于文章比较长,因此我就不一次性发完,我整理之后再发上去.当然,这里的低功耗设计基本上是入门阶段,也就是大部分从理论角度进行阐述,你也可以说是从书本上说的,但是呢,我可以先给大家剧透一下:不仅仅是从理论上说,我还结合EDA工具进行说明如何进行低功耗设计.废话不多说,下面就来看看这个专题的主要内容: ·低功耗设计的目的 ·功耗的构

数字IC前后端设计中Setup违反的修复方法

本文转自:自己的微信公众号<集成电路设计及EDA教程> 数字IC设计中Setup的分析与优化贯穿前后端设计中,最好在开始后端设计之前就获得一个没有Setup违反的网表,下面按照从前到后的流程逐一讲解每个阶段如果出现Setup违反该如何解决.下面用到的命令,主要针对的是Synopsys公司的综合工具DC以及布局布线工具ICC.还有需要注意的是,Setup的修复和之后要讲解的Hold的修复有很大的不同,Setup的违反随着布局到布线阶段的推进,它是越来越恶化的,不像Hold,线延迟会有益于Hold

数字IC入门之二(简单的算法架构)

这一节的核心内容要围绕"脑中有清晰的电路框架,再用Verilog简洁表达"来进行,虽然数字电路由于其稳定性使得可以用软件式的设计形式来进行电路设计,但是其与软件设计有着本质的区别,<Verilog HDL高级数字设计>中数字信号处理的算法与架构那一块有个例子,半色调像素图像处理器,强烈推荐这本书给大家,如果你看过了但是没看透彻,希望能反复看个3~5遍,这本书可以说是目前我见过的数字设计教材形式中最好的一本了,虽然我的看的也不是很多,但是真的这本书非常的重要,尤其是上面提到的

从数字IC后端设计实现看先进工艺7nm实现的各种挑战

目前虽然号称拥有或将要研发7nm工艺的有多家工艺厂商,但是具有实际流片能力的可能只有TSMC和三星.随着GlobalFoundries最近宣布放弃7nm的进一步研发,以及尽管Intel的10nm和这几家的7nm差不多一个水准,但是要跳票到2019年,因此短期内应该就是双雄争霸的局面. 玩家越来越少,技术实现也没有太多选择,目前的方法无非两种:Multiple Pattern和EUV.前者沿用16nm/14nm等工艺的多重曝光技术,后者采用极紫外光刻机一次曝光.在工艺上的实现上,可能会有如下方案:

基于ARM的SoC设计入门[转]

原文:基于ARM的SoC设计入门 我们跳过所有对ARM介绍性的描述,直接进入工程师们最关心的问题.要设计一个基于ARM的SoC,我们首先要了解一个基于ARM的SoC的结构.图1是一个典型的SoC的结构: 图1从图1我们可以了解这个的SoC的基本构成: ARM core:ARM966E AMBA 总线:AHB+APB 外设IP(Peripheral IPs):VIC(Vector Interrupt Controller), DMA, UART, RTC, SSP, WDT…… Memory bl

[WebGL入门]六,顶点和多边形

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 可以在三维空间中描画的东西 要说在WebGL的世界里能够描画什么,其实任何东西都可以描画.而描画的最基本的东西就是下面几种. ?点 ?线段 ?三角形 虽然在OpenGL中提供了矩形的绘制,但是WebGL中基本上只能绘制上面的三种类型.和二维世界不同,比如像HTML中的img标签那样,简单的在画