精华内容
下载资源
问答
  • 低功耗设计

    2020-06-02 14:09:45
    低功耗设计入门(一) 低功耗设计入门(二) 低功耗设计入门(三) 低功耗设计入门(四) 低功耗设计入门(五) 低功耗设计入门(六) 低功耗设计入门(七) 低功耗设计入门(八)
    展开全文
  • 低功耗设计综述 低功耗设计综述 低功耗设计综述
  • 单片机低功耗设计策略,单片机低功耗设计策略,单片机低功耗设计策略
  • Cadence发布首个低功耗设计“锦囊”,使处于不同经验水平的工程师,均可以最小的风险、成本和开发时间来采用低功耗技术。做为Cadence低功耗设计解决方案的补充,Cadence:registered: 低功耗设计方法学锦囊(Cadence ...
  • IC低功耗设计

    2019-04-03 22:50:56
    数字集成电路低功耗设计,适合初学或者高阶学习,简洁易懂
  • 对片上系统的设计方法进行了分析与探讨,给出了目前比较适用的SOC低功耗设计方法和一种新的SOC低功耗设计流程。对影响片上系统功耗的因素进行了深入分析,在此基础上从不同的层次讨论了SOC系统较为有效的低功耗设计...
  • Blackfin处理器广泛应用于便携音视频产品等嵌入式系统,低功耗设计直接影响产品使用时间。文中从时钟频率、工作模式、片内外设、内核电压等方面,说明了Blackfin处理器低功耗设计的具体方法,根据实际应用实现对系统...
  • 二、RTL级低功耗设计   前面介绍了系统级的低功耗设计,换句话说就是在系统级降低功耗可以考虑的方面。系统级的低功耗设计,主要是由系统级设计、具有丰富经验的人员实现,虽然还轮不到我们设计,我们了解一下...

    二、RTL级低功耗设计  

      前面介绍了系统级的低功耗设计,换句话说就是在系统级降低功耗可以考虑的方面。系统级的低功耗设计,主要是由系统级设计、具有丰富经验的人员实现,虽然还轮不到我们设计,我们了解一下还是比较好的。我们前端设计人员的重点不在系统级设计上面,而是在RTL级(及综合)上面。下面我们就来介绍RTL编码与逻辑综合的低功耗设计,重点是门控时钟操作数隔离技术。今天主要是讲解操作数和一些常见的方法;门控时钟由于内容比较多,所以写在后面。

      (1)并行与流水的选择

      对于某一个功能模块,我们可以通过并行的方式进行实现,也可以通过流水线的方式进行实现,这两种方法都是面积换速度,不过在一定的场合下可以降低功耗,需要灵活应用,下面就简要地介绍一下这两种方法(的使用)。

      ·并行处理常用于数字信号处理部分。采用并行处理,可以降低系统工作频率,从而可能降低功耗。例如下图中:

                     

    用两个乘法器来取代原设计中的一个乘法器。这样,时钟频率可以降低,系统的整体功耗会降低。采用这种方法,要在增加的面积与节省的功耗之间进行权衡。

      ·流水线技术可以将一个较长的组合路径分成M级流水线。路径长度缩短为原始路径长度的1 /M。这样,一个时钟周期内充/放电电容变为C/M。如果在加入流水线之后,时钟速度不变,则在一个周期内,只需要对C/M进行充/放电,而不是原来对C进行充/放电。因此,在相同的速度要求下,可以采用较低的电源电压来驱动系统。这样,系统的整体功耗可能会降低。例如对于下面的流水线设计:

                         

     假设在一个设计中,关键路径是一个32bit X 32bit的乘法器。假设该乘法器的整体电容为C,工作频率为f。

      ->不加流水线时,要达到此工作频率,工作电压应该为V。

      ->当采用流水线方式时,该路径被分成两部分。对于每一部分,整体电容变为C/2。这样,如果要达到原来的工作频率f,工作电压可以降为βV,这里β<1.  因此,整个系统可以工作在βV电压下,整体功耗变为原来的β^2倍,即:

                                      

     

     

      (2)资源共享与状态编码

      对于设计比较多算术运算的设计,如果有同样的操作在多处使用,那我们就可以避免相应的运算逻辑在多个位置重复出现。例如下面是没有进行共享资源的代码:

                 

    进行资源共享后的代码如下所示:

                 

    上述代码中,在各分支中只使用一个比较器和一个算术比较器就可以实现相同的功能,因此极大地减少了功耗。

      此外,对于一些变化非常频繁的信号,我们利用数据编码来降低开关活动(例如,用格雷码比用二进制码翻转更少,功耗更低)。

     

     

      (3)操作数隔离

    下面我们重点介绍另外一种常用的方法——操作数隔离(operand isolation,简称OI)的方法。

    ①操作数隔离的原理

    我们先来看一个电路,如下所示:

                       

    上面的电路图中,当SEL_0≠1,SEL_1≠0时,加法器Add_0的运算结果不能通过mux_0和mux_1到达寄存器reg_0的输入端口,也就是说寄存器reg_0将不会保存加法器Add_0的运算结果,这就意味着加法器Add_0的运算是不必要的。为了节省功耗,我们可以用操作数分离的方法,在某些条件下,使加法器不工作,保持静态,进行操作隔离之后的电路如下所示:

                     

    因此,操作数隔离的原理就是:如果在某一段时间内,数据通路的输出是无用的,则将它的输入置成个固定值,这样,数据通路部分没有翻转,功耗就会降低。  

      下面我们再举一个例子,对于下面的电路:

                           

    上图所示的乘法器中,如果知道乘法操作延迟超过半个时钟周期,则将乘法器的输出反相时钟进行操作,可以保证在时钟前半周期乘法器的输出不会导致加法器的翻转。这就是操作数隔离技术的基本思想。不过需要注意的是,采用这种方法,会增加面积,并影响到DFT,所以在使用前应该对它的利弊进行权衡。

     

    ②OI的物体选择

      OI并不是什么时候都可以进行使用的(也就是说不是所有的对象(物体)都符合操作数隔离的要求)。此外操作数隔离主要是:满足一定条件下,通过指定操作数隔离的物体来实现的;指定操作数隔离的物体可以通过EDA工具自动执行(我们一般使用这种方法),也可以通过我们手动进行。下面我们就分别介绍一下这两种方式。

      ·EDA工具自动指定操作数隔离的物体

    默认情况下,如果操作数隔离的物体满足下列条件,Power Compiler自动选择它(们):

      1.OI物体是算术运算器或层次组合单元。

      2.OI物体的输出是选择性地使用。

      3.运算器必须有非零的翻转率。

      4.仅当工具进行功耗估算后,用操作数隔离具有潜在的功耗可节省,才把它(们)作为OI物体。

    自动进行操作数隔离的脚本如下:

    set  do_operand_isolation    true

    set_operand_isolation_style

    read_saif  

    ……

    compile

     

      ·手动指定操作数隔离的物体

    除了使用EDA工具自动选择IO物体,我们也可以手动进行指定,然后进行操作数隔离。手动完成操作数隔离大致可以分为两步:

    A:设定操作数隔离的风格为手动(用户自定义模式):

      在约束脚本中加入下面的命令,说明是使用手动的方式指定IO物体:

        set_operand_isolation_style  -user_directives

     

    B:手动指定IO物体:

     手动指定IO物体有下面两种方式:

      1.用命令指定OI物体:set_opreand_isolation_cell,例如:

        set_operand_isolation_cell  [get_cells   U1]

      2.在RTL代码中加综合指引(pragma)

        例如:下面的RTL中加入了综合指令“//synopsys_isolate_operands":

              if(c2 == 1’b1)

                o  = a + b ;

              else

                o  = c + d ; //synopsys_isolate_operands

     

    完成前面A、B两步的设置之后,在使用compile命令进行综合时,如果手动指定的IO物体满足前面的三点:

      1.OI物体是算术运算器或层次组合单元。

      2.OI物体的输出是选择性地使用。

      3.运算器必须有非零的翻转率。

    那么综合器就会进行操作数隔离。

     

    ③操作数隔离的范围

      有些时候,我们需要在整个设计中指定某些模块要做操作数隔离,某些模块不要做操作数隔离。这时候我就可以使用set_operand_isolation_scope命令来实现了。例如下面的分层模块中:

                 

    我们只对SUB2模块中的操作数做隔离,其他的模块不做操作数隔离,那么就可以使用下面的示例脚本:

      set_operand_isolation_scope   [get_designs   tops]   false

      set_operand_isolation_scope   [get_designs   sub1]   false

      set_operand_isolation_style

      ······

     

    ④隔离逻辑的设置

      实现操作数隔离需要插入相应的隔离逻辑,比如与门或者或门之类的。这些逻辑可以由EDA自动选择,也可以由我们自己手动指定。下面就来介绍这两种方式。

      ·默认的EDA工具选择

     默认情况下,隔离逻辑由工具自动选择。工具根据输入数据连线的静态概率(SP)来选择适合的隔离逻辑为“AND'’门或“OR”门。使用的命令如下所示:

            set_operand_isolation_style   -logic   adaptive

    如果SP > 0.5,选择“OR”门作为隔离逻辑

    如果SP < 0.5,选择“AND”门作为隔离逻辑

     

      ·手动

     我们可以手工地选择隔离逻辑,例如下面命令指定用“AND”门作为隔离逻辑:

            set_operand_isolation_style   -logic   AND

     

      通过前面的描述,我们知道操作隔离的实现可以通过EDA全自动化实现,也可以通过我们指定OI物体的半自动化实现。完成操作数隔离后,我们可以用命令报告设计中的操作数隔离,例如:

        report -operand_isolation  -isolated  -verb命令显示如下的信息:

                 

                 

                  

     

    ⑤操作数隔离的复原

       加入隔离逻辑之后,如果时序变差达到不能满足要求的情况,我们就要复原原来的逻辑。复原的方法也是有自动和手动的方法。

      ·自动

     一般情况下,如果加了隔离逻辑后,设计的时序变差了,即当WNS(worst negative slack)大于指定的slack时,EDA工具会使设计自动复原到原来没有操作数隔离的状态。例如下面的脚本适用于如果WNS大于0. 5时,设计自动复原到原来的状态:

        set_operand_isolation_slack   0.5

        compile

        compile  -inc

     

      ·手动

     我们也可以用手工的方法复原操作数隔离。用手工的方法进行操作数隔离的复原是在指定的时序路径上删除OI逻辑。这时候不考虑slack。需要执行增量编辑去删除OI逻辑。脚本如下:

        remove_operand_isolation  -from   <starting_point>   to   <end_point>

        compile  -inc

        ······

     

     

    最后,提供一个完整的加入操作数隔离的示例脚本,如下所示,使用了默认的隔离逻辑类型操作数隔离的自动恢复

        set   do_operand_isolation   true

        read_verilog   mydesign.v

        current_design   top

        link

        create_clock -p 10 [get_ports   clk]

        set_operand_isolation_style

        set_operand_isolation   -slack 0.1

        compile

        report_operand_isolation -verb  -isolated

        ······

    展开全文
  • 晶振的低功耗设计

    2020-08-03 07:06:53
    低功耗设计中晶体的选择非常重要,尤其带有睡眠唤醒的系统,往往使用低电压以求低功耗。由于较低的供电电压,使得提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。
  • 解析FPGA低功耗设计

    2020-08-29 06:41:04
    以下是笔者在这比较短的时间内学习到的一些关于功耗估计和如何进行低功耗设计的知识。
  • RTL级低功耗设计   前面介绍了系统级的低功耗设计,换句话说就是在系统级降低功耗可以考虑的方面。系统级的低功耗设计,主要是由系统级设计、具有丰富经验的人员实现,虽然还轮不到我们设计,我们了解一下还是...

     

    https://www.cnblogs.com/IClearner/p/6912455.html

    (参考硬件架构的艺术)

    RTL级低功耗设计  

      前面介绍了系统级的低功耗设计,换句话说就是在系统级降低功耗可以考虑的方面。系统级的低功耗设计,主要是由系统级设计、具有丰富经验的人员实现,虽然还轮不到我们设计,我们了解一下还是比较好的。我们前端设计人员的重点不在系统级设计上面,而是在RTL级(及综合)上面。下面我们就来介绍RTL编码与逻辑综合的低功耗设计,重点是门控时钟操作数隔离技术。今天主要是讲解操作数和一些常见的方法;门控时钟由于内容比较多,所以写在后面。

      (1)并行与流水的选择

      对于某一个功能模块,我们可以通过并行的方式进行实现,也可以通过流水线的方式进行实现,这两种方法都是面积换速度,不过在一定的场合下可以降低功耗,需要灵活应用,下面就简要地介绍一下这两种方法(的使用)。

      ·并行处理常用于数字信号处理部分。采用并行处理,可以降低系统工作频率,从而可能降低功耗。例如下图中:

                     

    用两个乘法器来取代原设计中的一个乘法器。这样,时钟频率可以降低,系统的整体功耗会降低。采用这种方法,要在增加的面积与节省的功耗之间进行权衡。

      ·流水线技术可以将一个较长的组合路径分成M级流水线。路径长度缩短为原始路径长度的1 /M。这样,一个时钟周期内充/放电电容变为C/M。如果在加入流水线之后,时钟速度不变,则在一个周期内,只需要对C/M进行充/放电,而不是原来对C进行充/放电。因此,在相同的速度要求下,可以采用较低的电源电压来驱动系统。这样,系统的整体功耗可能会降低。例如对于下面的流水线设计:

                         

     假设在一个设计中,关键路径是一个32bit X 32bit的乘法器。假设该乘法器的整体电容为C,工作频率为f。

      ->不加流水线时,要达到此工作频率,工作电压应该为V。

      ->当采用流水线方式时,该路径被分成两部分。对于每一部分,整体电容变为C/2。这样,如果要达到原来的工作频率f,工作电压可以降为βV,这里β<1.  因此,整个系统可以工作在βV电压下,整体功耗变为原来的β^2倍,即:

                                      

     

     

      (2)资源共享与状态编码

      对于设计比较多算术运算的设计,如果有同样的操作在多处使用,那我们就可以避免相应的运算逻辑在多个位置重复出现。例如下面是没有进行共享资源的代码:

                 

    进行资源共享后的代码如下所示:

                 

    上述代码中,在各分支中只使用一个比较器和一个算术比较器就可以实现相同的功能,因此极大地减少了功耗。

      此外,对于一些变化非常频繁的信号,我们利用数据编码来降低开关活动(例如,用格雷码比用二进制码翻转更少,功耗更低)。

      (3)操作数隔离

    下面我们重点介绍另外一种常用的方法——操作数隔离(operand isolation,简称OI)的方法。

    ①操作数隔离的原理

    我们先来看一个电路,如下所示:

                       

    上面的电路图中,当SEL_0≠1,SEL_1≠0时,加法器Add_0的运算结果不能通过mux_0和mux_1到达寄存器reg_0的输入端口,也就是说寄存器reg_0将不会保存加法器Add_0的运算结果,这就意味着加法器Add_0的运算是不必要的。为了节省功耗,我们可以用操作数分离的方法,在某些条件下,使加法器不工作,保持静态,进行操作隔离之后的电路如下所示:

                     

    因此,操作数隔离的原理就是:如果在某一段时间内,数据通路的输出是无用的,则将它的输入置成个固定值,这样,数据通路部分没有翻转,功耗就会降低。  

      下面我们再举一个例子,对于下面的电路:

                           

    上图所示的乘法器中,如果知道乘法操作延迟超过半个时钟周期,则将乘法器的输出反相时钟进行操作,可以保证在时钟前半周期乘法器的输出不会导致加法器的翻转。这就是操作数隔离技术的基本思想。不过需要注意的是,采用这种方法,会增加面积,并影响到DFT,所以在使用前应该对它的利弊进行权衡。

    (4)门控时钟

      门控时钟在我的第一篇博客中有简单的描述,这里就进行比较详细的描述吧。我们主要学习门控时钟电路是什么、什么使用门控时钟、综合库里的门控时钟、如何使用门控时钟、对门控时钟的一些处理、手动插入门控时钟。我们重点介绍如何使用门控时钟和门控时钟的处理

    ①门控时钟概述

      门控时钟有两种方案:一种直接针对寄存器的时钟进行门控,一种对模块级别的时钟进行门控。相比之下,直接对寄存器的时钟进行门控更为灵活。因为在很多时候,我们不能保证刚好将不需要门控的寄存器与需要门控的寄存器分配在不同的模块。因此我们主要介绍寄存器级的门控时钟

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

    下图是门控时钟的一个简单电路图:

                   

    上述电路图中,将控制信号(EN)直接与时钟信号(CLK)进行操作,以完成门控。门控后的时钟信号GCLK送到寄存器阵列中。这样,当EN为0时,该时钟被关掉。相应的波形如下所示:

             

    可以看出,如果EN信号不加控制,会导致门控时钟信号出现毛刺。时钟上的信号出现毛刺是非常危险的。所以在进行门控时,为了使门控时钟不产生毛刺,使能信号必须满足条件:它是寄存器的输出,该寄存器的时钟信号与要门控的时钟信号是相同的。由于上述原因,虽然采用这种门控方式最直接,但在实际中很少采用。

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

    为了解决这种问题,引入基于锁存器的门控时钟方案,如下图所示:

                    

    对应的时序图如下所示:

               

    可以看到,这种方式消除了EN与CLK组合产生的毛刺对门控时钟的影响。该方法的原理在于:锁存器在CLK为低时透明。这样,EN 信号上的毛刺仅出现在CLK的低电平处,EN1与CLK进行与操作,可以将这部分毛刺消除掉。这样,GCLK上就没有毛刺了。

       不过需要注意的是,如果在电路中,锁存器与与门相隔很远,到达锁存器的时钟与到达与门的时钟有较大的延迟差别,则仍会出现毛刺,下面就来分析一下:

         

    上述的右上图中,B点的时钟比A时钟迟到,并且Skew > delay,这种情况下,产生了毛刺。为了消除毛刺,要控制Clock Skew,使它满足Skew >Latch delay(也就是锁存器的clk-q的延时)。上述的右下图中,B点的时钟比A时钟早到,并且|Skew|  > ENsetup 一 (D->Q),这种情况下,也产生了毛刺。为了消除毛刺,要控制Clock Skew,使它满足|Skew|< ENsetup一(D->Q)。

    常见的是第一种毛刺,不过我们可以将这个逻辑做成一个单元,这样就基本上能消除上面的那两种毛刺了,即:

               

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

      


     前面我们说了,门控时钟可以以三种方式实现:一个与门(即不带锁存的门控时钟)、分散的锁存器+与门、集成的锁存器+与门。在综合

    ②门控时钟实现

      我们要实现门控时钟,首先就得从RTL代码中进行设置。在RTL代码中将需要门控的寄存器写成“载入-使能”的形式,如下所示:

          always  @(posedge CLK)

             if (EN)

              Q <=D;

    上述代码中,如果EN有效,则寄存器在时钟上升沿采样数据,否则保持原值。一般情况下,综合会得到下图右上角的电路,而插入门控时钟的电路为下图右下角的电路:

         

    上图的典型综合结果中(即不使用门控时钟的情况),在每个受EN使能控制的寄存器之前加入了一个MUX,当EN信号有效时,寄存器锁存输入信号D;否则保持原值。这种方法也能减少寄存器上的翻转,因而节省翻转功耗。然而,这种“载入一使能”结构中,每个寄存器都有一个MUX,假设MUX面积为4,则8位寄存器需要增加的面积为32。面积越大,意味着芯片成本越高,而且整体的功耗也会增加。另外,这种方式不能消除时钟树上的功耗。

    对于右下角的门控时钟形式的综合电路,假设一个门控逻辑的面积为10,一个门控时钟信号可以驱动8位寄存器,则在门控时钟电路中,对每8个寄存器需增加一个门控逻辑,增加的面积为10。由此可以看到,门控时钟的电路比普通综合结果的面积更小、功耗更低。

     

     

     

      (5)其他

      有的时候,我们不经意间就会引入多余的翻转,多余翻转就引起的多余的功耗。下面是多余翻转的例子(类似于操作数隔离):

           

      上图中,当load_out无效时,如果laod_op有效,那么数据就会进行操作,也就是存在相应的翻转。因为输出是无效的,所以这些翻转是多余的,消耗了功耗,但却没有输出。因此我们就要注意,当load_out无效时,load_op也要设置为无效,这样就可以节省部分功耗。

      对于上面的多余翻转,可以进行相应的压缩来节省功耗,如下所示:

           

    sel_in同时控制了数据输入和多路选择器的输出。SEL=0时,读入A和B,选通操作1;SEL=1时,读入C和D,选通操作2;这时候就可以减少另一半操作引起的翻转,从而减少了功耗。

      对于这种数据输入,然后进行操作选择性输出的,可以进行相应的门控来减少多余的翻转,从而减少功耗。

      结合综合进行RTL级的低功耗就如上所述了,重点是门控时钟的使用和操作数隔离技术,这是我们前端设计人员需要懂的。

     

    展开全文
  • 如何进行低功耗设计

    2020-08-07 12:34:07
    现在电子产品,特别是最近两年很火爆的穿戴产品,智能手表等都是锂电池供电,如果采用同样容量大小的锂电池进行测试不难发现电子产品低功耗做的好的,工作时间越长。因此,低功耗设计排在电子产品设计的重要地位。
  • 低功耗设计指南

    2014-01-16 10:28:01
    低功耗设计指南,说明了单片机设计时低功耗设计方法和技巧
  • 低功耗设计概要》,是一本经典的关于低功耗设计的原理,实现方法,注意事项等的专业书籍,虽然是全英文的,但是书中采用的ppt的讲述方式,非常棒
  • 我们的讲解的低功耗设计主要是自顶向下的设计,也就是说,我们首先介绍在系统架构层面上如何进行低功耗设计(或者可以从哪些方面进行低功耗设计);然后我们在RTL层面和门级层面上介绍低功耗设计的方法,这两个种...

    前面讲解了使用EDA工具(主要是power compiler)进行功耗分析的流程,这里我们将介绍在数字IC中进行低功耗设计的方法,同时也结合EDA工具(主要是Design Compiler)如何实现。我们的讲解的低功耗设计主要是自顶向下的设计,也就是说,我们首先介绍在系统架构层面上如何进行低功耗设计(或者可以从哪些方面进行低功耗设计);然后我们在RTL层面和门级层面上介绍低功耗设计的方法,这两个种方法主要是依靠RTL代码和Design Compiler实现的,这是我们前端设计人员进行低功耗设计与优化所需要知道的,我们会着重介绍;最后我们简单介绍在物理设计层次上面降低功耗的方法。今天我们记录系统与架构级的低功耗设计。

     

    1.系统与架构级低功耗设计

      系统与架构层次的低功耗设计,可以节省70%以上的功耗。这个层次上的设计往往是由系统和架构设计人员进行的,这些人员往往是有着丰富经验的设计人员。他们制定了低功耗设计方案,由下一级的设计人员(比如做前端设计、做Flow的人员)进行具体实现。下面就来介绍一下在系统架构方面,可以从哪些方面进行低功耗设计,由于我只是只菜鸟,因此这些内容只是我在前人的经验中进行总结学习的笔记,仅供参考。

      (1)多电压设计技术(Multi-VDD)

    ①多电压设计技术介绍

    从前面的功耗方程中,我们可以知道,电压与功耗有着密切的联系。因此功耗的降低可以考虑使用低一点的电压。多电压设计技术有三种方式:

                   

     

    A:各电压区域有固定的电压,如上图(a)所示 ;

    B:各电压区域具有固定的多个电压,由软件决定选择哪一个电压,如上图(b)所示;

    C:自适应的方式,各电压域具有可变的,由软件决定选择哪一个电压,如上图(c)所示。

    A是固定分配的电压;而B和C为动态电压管理,涉及到软硬件协同设计,这里我们放到后面进行介绍。这里主要是从整体上进行介绍多电压设计技术及其要求,然后给出A方式的一个例子以及一个多电压低功耗设计的脚本示例。

     

    ②多电压综合库及电压模式控制单元

      无论是哪一种低电压设计方式,都需要综合库的支出。这低功耗设计的综合库中,需要包含同一个单元在不同电压下的描述。此外综合库还要多电压设计的特殊单元,这些单元主要是:

      ·电平转换器(level shifter):把高(低)电压区域的信号转换到低(高)电压区域。信号通常包括数据、时钟、扫描链数据等。电平转换器的示意图如下所:

                   

      ·电源隔离单元(power isolation cell):主要用于模块的输入、输出。它可以关掉电源时,将信号保持为常数,从而避免单元的输入悬空。电源隔离单元如下图所示:

                  

      ·保持寄存器(retention register):在不工作的情况下,将寄存器的状态保留下来。

      电源隔离单元和保持寄存器我们将在后面的电源门控中进行详细介绍,这里先给出一个概念。

      为了实现电压的动态管理——无论是使用硬件还是软件进行动态管理,都需要在设中加入电压模式控制单元。一个电压模式控制单元的例子如下所示:

                     

    该模块的功能是:系统不工作时, 进入IDLE模式, 这时候可以关掉不工作模块的电源; 当系统工作时, 给工作模块提供正常电压。这个模块可以是软件实现,也可以是硬件实现。

     

    ③多电压设计举例

      对于多电压设计(尤其是A设计),关键是电压分配。在划分供电区域时, 要尽量与设计的层次结构一致, 并且要考虑到设计复杂性。 下面例子(左图)中(电压分配采用固定分配方案), 存储器、 处理器核 、 其他逻辑用不同的工作电压。

               

      右图中的设计有3个工作频率,分别为300,250和400MHz。由于单元的延迟与供电电压成相反关系,即供电电压越高,单元的延迟越小。因此为了满足时序的要求,对于工作频率高的模块,使用供电电压高的电源,以降低时序路径中单元的延迟,从而降低整条时序路径的延迟。上例中,工作频率为400MHz的模块,时序要求最高,因此供电电压最高,为1.2V。工作频率为250 MHz的模块,时序要求最低,因此供电电压最低,为0. 8V。通过对不同的模块设置不同的供电电压,可以使整个设计既能满足时序的要求,又可以降低其功耗。使用多电压技术,版图设计时,要产生多个电压区域(Voltage Area),把供电不同的模块,分配到不同的电压区域。

    在power compiler中,可以使用"Top Down Compile"的方法进行多电压的功耗设计,一个示例脚本如下所示:

            

            

              

              

     

      (2)软/硬件协同设计

      前面介绍了多供电电压设计,同时介绍了使用EDA工具实现的一个示例脚本。多供电电压设计中涉及到电压的动态管理,而动态管理可以使用软件实现,这就设计到了软硬件协同设计的问题。在这里,我们主要介绍软硬件协同设计中的软硬件划分以及电压的动态管理技术。

    ①软硬件划分

      系统中的功耗都是硬件单元消耗的,但是软件组织对硬件的功耗有着很大的影响。在设计过程中,系统的功能可以用硬件实现,也可以使用使用软件进行实现。低功耗软件的设计需要注意:在满足系统应用的基础上,速度应该尽可能慢,电压应该尽可能低,尽可能满足时间要求。系统设计者根据规范和自身经验对系统性能进行推测(仿真建模),决定哪一部分使用硬件来实现,哪一部分使用软件来实现,从而达到性能和功耗最佳平衡。这些是系统设计者需要考虑的,这里不进行详细叙述,只需要知道,软硬件划分可以很大程度上降低功耗。

     

    ②动态电压频率调节DVFS技术

      DVFS技术:dynamic voltage dynamic frequency scaling,动态电压频率技术,是一种通过将不同电路模块的工作电压及工作频率降低到恰好满足系统最低要求,来实时降低系统中不同电路模块功耗的方法。

      电路模块中的最大时钟频率和电压紧密相关,如果一个电路能够估算出它必须做多少工作才能完成当前的任务,那么理论上讲就可以将时钟频率调低到刚好能适时完成该任务的水平。降低时钟频率意味着可以同时降低供电电压。频率和电压同时降低,功耗就大大降低了。这个是DVFS的原理。

      DVFS技术这个种方法属于电压的动态管理,可以通过软件和硬件的方式实现。将DVFS合并到操作系统的调度程序和实时嵌入式任务管理服务当中,利用一个可编程的DC-DC开关电压调节器、一个可编程的时钟产生器和一个宽操作域的高性能处理器等资源进行实现。这种技术的使用需要系统使用者决定,这里不进行详述,只需要知道在系统层面可以考虑使用这种方法进行降低功耗。

     

    ③低功耗软件(操作系统)的动态功耗管理

      前面也说了,可以使用软件的方式进行自适应地选择功耗。在系统软件过程运行过程中,可以在操作系统中加入功耗管理机制,把没有使用到的硬件单元关掉,这便是系统功耗的动态管理。加入功耗管理机制的操作系统的示意图如下所示:

                   

    这种功耗的动态管理依赖于前面描述的电压模式控制单元,只不过个单元是用软件进行实现的(因为是操作系统进行动态功耗管理)。具体的功耗动态管理实现这里就不详细说明,这应该是属于系统设计者和软件设计人员考虑的。

     

      (3)系统时钟分配

      系统时钟的分频也是系统层面降低功耗可以考虑的方面。时钟是系统中频率最高的信号,其功耗功之高是不容置疑的。在系统设计层面,可以考虑应用要求,将系统设置为不同的工作模式,加入时钟控制模块,在不同的工作模式下选用不同频率的时钟,并且将一些不需要的模块时钟关闭。时钟的分配可以使用内部的状态机实现,也可以使用软件实现。

      例如,可以将系统分为4种工作模式:normal 、 slow、idle、sleep。在不同的模式下,器分频的时钟如下所示:

                 

     

      (4)算法与IP选择

    在系统设计层次上面,还可以通过算法和IP这两个方面降低功耗。

    算法:

      算法级在算法级降低功耗是非常有价值的。 在设计算法时, 要分析该算法需要多少ALU操作, 需要多少次存储器访问, 要尽量使那些耗能多的操作最小化。算法级低功耗设计跟具体设计有关。比如,对于大规模运算的应用(比如FFT),使用对数系统(logarithmic number system,lns)比使用线性系统更好。lns在降低平均位元活跃度(也就是降低0和1的变化程度)的同时使用加法和减法实现乘除法,使效率比线性系统更高。因此基于lsn算法来实现FFT可以节省大量的功耗,但是加法器和乘法器的宽度会增加,使用FPGA实现时就会需要更大的LUT(查找表),而且这个查找表的大小是以指数增长的。

    在一些行为综合工具中,可采用延时功耗乘积表示系统的优化目标,以降低完成特定计算所需的状态转换数,生成高效的计算结构。算法这一方面的低功耗设计让算法工程去考虑吧,我们来了解一下就可以了。

    IP:

    现在的SoC设计依赖于IP的集成。在选择IP时,除了考虑到性能要求,还需要考虑到功耗问题。例如,在选择CPU时,可以分析在完成相同的功能时,哪种CPU功耗更大。

     

    (5)其他

      在系统层次上,除了可以上面那些因素外,我们还可以考虑异步设计。在现在的系统设计中,一个系统可能使用多个时钟,但是在每个时钟控制的区域内部都设计成一个同步的子系统。通过时钟树综合、插入缓冲器减少时钟的偏移。这种方法在时钟网络上添加了大量的缓冲器,时钟网络消耗的功耗也增加。在异步设计里面,不需要全局时钟,两个模块通过握手信号进行交互,这时候就可以减少功耗。因此异步设计也是降低功耗的一种方法。

      在大多是DSP中,需要用到FFT算法。FFT算法需要频繁访问存储器,我们可以在存储器和处理器之间添加缓存,在处理器需要之前,预先将相关数据从存储器中取到缓存里面。使用小范围的缓存能够使计算能耗大量下降,提高的FFT的效能。因此在系统设计的时候,特别是系统架构设计的时候,可以考虑基于缓存的系统体系结构进降低功耗。

      系统层次上面的低功耗设计方法还有很多,比如说可测性设计上进行低功耗设计、存储器(内存)的低功耗设计等,这些都可以在系统层次上面进考虑,这里就不一一列出来了。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,836
精华内容 5,134
关键字:

低功耗设计