[学习笔记]从架构层面看低功耗(Low Power)Design (二)

本文是承接 [学习笔记]从架构层面看低功耗(Low Power)Design (一), 参考了An Asic Low Power Primer (2013), 第六章, Architectural Techniques for Low Power.
*学习中也参考了
Low Power Methodology Manual for System-On-Chip Design(2007)**, 这本书虽然旧了点(还在讨论90nm, 65nm), 但是更细节, 更注重实现.*
上一篇没有讲完的topic:

  1. Architectural Clock Gating
  2. Power Gating
  3. Multi-voltage
  4. Optimizing Memory Power
  5. Operand Isolation
  6. Operating Modes of Design
  7. RTL Techniques

Architectural Clock Gating

这里的Clock Gating指的是Architectural level 的Clock Gating, 有的公司叫做 Coarse Grain Clock Gating, 能通过它来关闭design主要部分的clock. (与之对应的是Fine Grain Clock Gating, 控制register的, 有些是综合工具自己加的). 这种ACG是designer明确实例化的, 它的enable 逻辑通常由functional mode 有关.
在这里插入图片描述
Block level 也可以实现Architectural Clock Gating, 一个总开关CG控制一个Block. 也可以做成hierarchical, 各自负责各自的function. 如下图.
在这里插入图片描述
通常Architectural CG 不影响timing, 而且对于省power 效果甚好. 但是ACG使得clock tree synthesis变得很复杂, 这可能会导致clock skew变大. 所以design需要明确这种CG放在哪能最省power. (并不是无脑乱加)

Power Gating

如下图所示, 用不到的block可以把supply给关了, 这就是常说的power gating, 需要header cell来切断vdd的供电, 或是footer cell 把vss断掉. 这两种都可以实现控制电源开关
在这里插入图片描述
上图其实是designer经常会选择的两种设计, 要么用一个高吞吐的(2Ghz)处理器, 要么用多个低速(1GHz)处理器. 如果用了右边这种三个处理器的design, 这三个处理器的运算能力也许能超过2G的单核处理器. 而且使用多处理器还能在系统空闲时关掉其中几个, 这能省不少power. 而且因为速度要求不高, 通常对PD来说压力没这么大.
如果有block需要被关掉, 但是有的必须一直开着, 就需要在架构层面考虑以下问题:

  1. 控制其他block开关的逻辑电路必须一直有电.
  2. Isolation cell 应该放在这些可开关block的output端, 以防止置空的signal被传到on-domain.
State Retention

如果某些block被shutdown, 那么有时我们需要恢复供电时system state能迅速恢复, 存储state这个操作能避免彻底reset, 省时省power. State Rentention 的应用场景如下:

  1. 系统状态被存在外部(scan out, saved externally). 恢复供电时再copy回来. 比如用了个外部memory. 使用了scan chain 把需要保存的flip flop串起来, 把它们的data在断电前传给memory. 恢复供电时, data再传回给flipflop. 这种操作造成power off 之前和power on 之后都需要一些delay来copy系统状态.
  2. 使用retention cell. 可以是flip-flop 或是latch. 这种cell有两个power supply, 一个是always on, 一个是可开关的supply. retention cell 有个额外的latch(save-latch), 就是在断电时保存状态的. 见下图, VDDG 是always on, VDD 可开关. 正常情况下, 这个flip-flop 就是普通的flip-flop, 当SAVE信号来时, Flip-flop里的值就被存到save-latch里, 当RESTORE来时, latch里的值被传回Flip-flop.(注意这里retention cell 只能存flop信息, 不能存memory)
    在这里插入图片描述
  3. Memory Retention. 类似于dual rail retention cell, memory存状态用的是dual rail memory. 它使得外围供电停止时还能存储memory内容. 具体实现不再这里描述.

总体来说, Power Gating带来的power saving是最可观的. 但是需要在architecture level就考虑好, 验证时要特别注意(某些block关了其他block还能不能工作), 实现时要特别注意(isolation等问题). 一般power gating对timing影响很小, 除非critical path通过了这个block(因为isolation cell 带来额外delay).

根据笔者经验, 14nm和7nm工艺下的leakage power已经很小了, 而且对于服务器GPU来说大多数时间是工作状态, 因此做主动的power gating代价很大, 不仅是需要更多area, 也消耗更多dynamic, 得不偿失, 所以书里讨论的Power Gating 的粗细密度之分不那么有意义了, 在这里不再重点研究.

Multi-Voltage

顾名思义, 不同的block可以用不同的电压, 比如对timing要求高的部分可以用高电压, 其他block用低电压, 如果一个block和周围logic的电压不一样, 就被称为Voltage island.
任何signal想要跨电压域, 都要用到level shifter, 用来把电压值转换到目标电压域, 这种cell已经被包含在standard cell libraries里了.
level shifter 和 isolation cell 的优化本着能省则省的理念, 这里不再细说.

Memory

这里主要谈如何降低memory dynamic power

  1. 把memory access 归组
    考虑一种情况, Memory以 写-闲-读-闲 (burst length = 1) 这样的方式重复:
    在这里插入图片描述
    优化的思路就是改成 写-写-闲-闲-读-读-闲-闲 (burst length = 2)
    在这里插入图片描述
    第二种情形带来的好处就是 ME, WE 的activity 变小了50%, 因此降低了memory macro的dynamic power

  2. 避免enable pin上多余的跳变
    在这里插入图片描述
    对于上图这种2-port register file memory macro, 右边的MEB(memory enable)和WEB(write enable) 会被连到一起由一个signal控制写操作, 那么就会造成下面这种情况:
    在这里插入图片描述
    其实MEB没必要跟着一起翻转. 把MEB 静态的设为1, 这能省很多dynamic power, 尤其当memory使用很小的burst length时 更加明显.
    在这里插入图片描述

Operand Isolation

data path 会消耗很多switching power, 而一般data path很可能进行了计算但是最终没被用到, 这种情况就有优化的空间
在这里插入图片描述
左图的意思就是乘法器出来的结果有可能不被选中, 这时候完全就可以让这个SEL signal 作为两个operands的gate信号, 这样只有在需要乘法器时才会进行计算. 有一点需要注意, 就是这个SEL信号必须早到, 否则还是gate不住, 解决方法就是让这个sel信号做为clock gate的signal, 把operands锁在之前的那级寄存器里.
这个technique在Power Artist工具里叫做 ODC (observability don’t care). 工具会对此类情况提出类似优化方案.

设计各种运行模式

举一个例子: GPU静屏模(static screen), 这时候计算核心power off, bus 有电, display单元在自己刷新. 或者有sleep mode, hibernate mode等等. 就是让用不到的部分power off或clock off. 当然power off 也是有代价的, 比如logic retention, 使得wake-up的时间变长, chip 的area也变大了.

RTL Techniques.

这里RTL的技巧注重减少逻辑, 减少transition数量.

  1. 减少transition
    写RTL时就应该有这样的意识, 尤其是在写bus时, 注意最小化信号传递数量. 比如说, 不该让新value上bus(receiver准备接收时除外), 看一个反面示例:
always @( posedge reset or negedge ahb_clk)
	if (reset)
		ahb_dbus <= 32b’0;
	else
		if (bus_ready)
			ahb_dbus <= read_dbus;
		else
			ahb_dbus <= 32b’0;

这里没必要给bus设一个default值, 这反而会增加bus上多余的transition, 如果bus没有ready, 这个被读的signal是什么根本不重要, 让自己少点变化更重要.

// Rewritten with fewer transitions:
always @( posedge reset or negedge ahb_clk)
	if (reset)
		ahb_dbus <= 32b’0;
	else
		if (bus_ready)
			ahb_dbus <= read_dbus;
// Not necessary to put default value on bus
// when bus is not ready.
  1. Resource Sharing
    在non-critical path上共享资源能减少logic, 看一个例子:
always @(a or b or c or d or sel)
	if (sel)
		result = a * b;
	else
		result = c * d;

这样的写法会综合出1个乘法器, 由sel控制是哪个input参与计算. 省power, 省area.

其他

  1. 优化logic, 这对于timing, area, power都有好处, 比如flip-flop里是常量.
  2. state machine encoding, 用one-hot 和gray码来给state reg编码能减少transition
  3. counters, 尽量不要用free running counter, 最好加上起始结束的条件.
  • 10
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值