低功耗设计


1. 功耗源

  • 浪涌
    • 浪涌电流也称为启动电流,指器件上电时产生最大瞬时输入电流。浪涌功耗主要由浪涌电流引起的。
  • 静态功耗
    • 电路中晶体管漏电流导致的功耗。
    • 工艺进步,供电电压越来越低,单元的阈值电压也越来越小;导致漏电流越来越大,静态功耗占比越来越大。
  • 动态功耗
    • 主要分为翻转功耗和短路功耗。
    • 翻转功耗
      • 对输出负载电容进行充放电引起的,
      • 计算公式:$ P_{dynamic} = S*C_L*V_{dd}^{2}*f_{clk}$
        • 其中,$ C_L$为门寄生电容,$S$为输出的平均翻转次数。
      • 可以看到,功耗和供电电压是平方函数的关系。
      • 降低翻转功耗
        • 降低电压:但是低电压会导致设计时序变差,导致难以满足时序要求。
        • 减小负载电容大小。
        • 降低信号翻转率。
    • 短路功耗
      • 考虑到信号翻转不可能瞬时完成,PMOS和NMOS不可能总是一个截止另一个导通,两者存在都导通的情况,那么此时VDD和GND之间便有了通路,形成了短路电流。
      • 计算公式:$ P_{short} = t_{sc}*V_{dd}*I_{peak}*f_{clock}$
        • 其中$t_{sc}$是短路电流持续时间,$I_{peak}$是总的短路电流。
      • 一般短路功耗占比较小,可以忽略。

2. 低功耗电路设计和优化

2.1 门控时钟

  • 可以在基于DC的Power Compiler中执行下面指令插入门控时钟。
    insert_clock_gating
    
  • 门控时钟减少了时钟的开关行为,节省了功耗。
  • 门控时钟分类
    • 离散和集成
      • 离散的是Power Compiler用工艺库中的锁存器和其它逻辑门搭的。
      • 集成的是工艺库中一个门控单元,是库商创作的。
    • 是否带锁存器
      • 带锁存器的门控时钟可以一定程度上过滤毛刺。

      • 但是当clock skew太大时,输出还是会有毛刺。

        • 第一个波形中:delay为CLKA和CLKA_N之间的时间差,skew为CLKA和CLKB之间的时间差,且到A的时钟快于到B的时钟;当delay<skew时,会出现毛刺。波形图如下所示。

        • 第二个波形中:到B的时钟快于到A的时钟,如下图所示,也会产生毛刺。

      • 可以通过两种方式管理Clock Skew,使门控单元输出没有毛刺。

        • 使用集成的门控单元,前面介绍了这个单元取自工艺库,已经对skew做了控制。
        • 若使用离散的门控单元,在做布局时可以将门控单元和锁存器摆放靠近一些。
  • 门控时钟单元的扇出越大,到达寄存器的延迟就越大。所以需要控制门控时钟单元的扇出大小。

2.2 操作数分离

  • 首先观察下图,当SEL_0和SEL_1为某些值时,加法器的运算结果对于输出没有影响,所以此时可以让加法器不工作,来降低功耗。
  • 可以添加下面的电路,实现未选中加法器输出时,加法器不工作。
  • 添加的隔离逻辑可能会让时序变差。

2.3 门级电路的功耗优化

2.3.1 优化对象及优先级

  • 门级电路的功耗优化是对已经映射到网表进行功耗的优化。
  • 逻辑综合的优化策略是存在优先级的,如下图所示。
    • 优化首先满足更高优先级的约束,进行低优先级约束的优化不能以牺牲更高优先级的约束。

2.3.2 多阈值电压优化漏电功耗

  • 阈值电压越高的单元,漏电功耗越低,但门延迟越长。
  • 阈值电压越低的单元,漏电功耗越高,但门延迟越短。
  • 可以对关键路径使用低阈值电压的单元,改善时序。非关键路径使用高阈值电压的单元,以降低静态功耗。

2.3.3 动态功耗优化

  • 读入含有开关行为的SAIF文件,用于约束动态功耗的优化。
    • SAIF:用于仿真器和功率工具之间交换信息的ASCII文件。
    • 更多关于SAIF/VCD分析功耗的方法在后面会详细介绍。
  • 高翻转率信号,尽可能降低其负载电容,可以从以下几个方式入手
    • 对于高频连线,在不影响时序的前提下,更换门单元,降低其负载,有助于降低其功耗。
    • 缩短高翻转率net长度,降低net电容。
    • 将高翻转率连线靠近输出端(可以通过因式分解重组逻辑实现)。
    • 将高翻转率的连线连接到电容值小的引脚上。
    • 插入buffer,减少门输出负载,并使buffer后级电路转移时间变小。
  • 更详细内容可以看《专用集成电路设计实用教程》。

2.3.4 多个供电电压

  • 对工作频率高的模块,使用供电电压高的电源。对工作频率低的模块,使用供电电压低的电源。
  • 主要有下面三种设计风格。
    • 图1:各电压区域有固定的单一电压。
    • 图2:软件控制各个区域选用哪种电压,但各个电压区域仍有固定电压。
    • 图3,采用自适应方式,各电压区域有可变的电压,软件控制选用电压。

2.3.5 电源门控

  • 如下图所示,当一个模块一段时间不工作,可以关掉它的供电电源。
    • 断电后,模块进入睡眠模式,只有静态功耗,较小。
    • 唤醒时,为了让模块尽快恢复工作模式,需要保持断电前的状态,可以使用寄存器来记忆状态。
  • 实现电路如下所示。
    • 睡眠模式
      • 寄存器的电源Vdd2被切断,它的漏电功耗极小,此时只有锁存器处于工作状态,寄存器的值保存在锁存器里,由于锁存器是用高阈值电压晶体管组成的,所以漏电功耗很低。
    • 唤醒模式
      • Restore信号被激活时,寄存器的电源Vdd2被加上,保留在锁存器里的值被载入到寄存器。
    • 注意:电源门控模块的输出端需要用隔离单元。
      • 因为在睡眠模式时,模块的输出为一个不确定值。为了保证在睡眠模式下,下一级的输入不会悬空,插入隔离单元,提供一个1或者0的输出,使下一级的输入为确定的逻辑值。

3.各个设计层次降低功耗

  • 不同设计层次有不同低功耗的设计方法,如下图所示。层次越高,对功耗的降低越有效。
posted @ 2023-07-27 11:10  可达达鸭  阅读(92)  评论(0编辑  收藏  举报