0%

MIT 6.004:L08 设计折衷

整理自 MIT OCW 6.004 Computation Structures(Spring 2017)L08 注解幻灯片。

源网页:8.1 Annotated Slides | Design Tradeoffs

讲师:Chris Terman。图片直接引用 OCW 原站链接。

L08:设计折衷(Design Tradeoffs)

本讲讨论功耗(静态/动态)、降耗手段,以及加法器(ripple / carry-select / CLA)与乘法器(组合 / 流水 / 时序 carry-save)在延迟、吞吐与面积上的 Θ\Theta 折衷。完成本课程 Part 1 的收束。

1. 优化你的设计(Optimizing Your Design)

Optimizing Your Design

正确折衷取决于设计目标。显卡团队:优先性能,可在限度内换成本与功耗;尺寸有硬上限,再小收益不大。手表团队:尺寸与功耗关键(戴一天、不烫手腕)。

同一“是否流水”决策:流水寄存器增加成本;重叠执行与更高 tCLKt_{\mathrm{CLK}} 抬高功耗与散热需求 → 两队结论可能相反。本章列举可用折衷;选对约束下的权衡是工程师的乐趣。

2. CMOS 静态功耗(CMOS Static Power Dissipation)

CMOS Static Power Dissipation

静态功耗:电路空闲(节点不变)时仍消耗的功率。理想开关模型下 CMOS 静态功耗为 0;早期接近理想,但尺寸缩小、电压降低后两大效应凸显(n/p 沟道皆有):

  1. 栅氧变薄 → 电场增强、速度提升,但电子可隧穿绝缘层,产生栅→衬底漏电流;数十亿管累积不可忽视
  2. 亚阈导通(sub-threshold conduction):名义截止(VGS<VTHV_{\mathrm{GS}}<V_{\mathrm{TH}})时仍有漏电,与 VGSVTHV_{\mathrm{GS}}-V_{\mathrm{TH}}(截止时为负)指数相关;VTHV_{\mathrm{TH}} 降低使漏电增大

缓解:FinFET / tri-gate(沟道成鳍、栅三面包围)可把亚阈漏电降一个数量级以上。

3. CMOS 动态功耗 I(CMOS Dynamic Power Dissipation I)

CMOS Dynamic Power Dissipation I

动态功耗:节点翻转充放电电容时消耗。以反相器为例:充/放电时电流经 MOSFET,瞬时功率 IDSVDSI_{\mathrm{DS}}V_{\mathrm{DS}}。对 1→0 积分(I=CdV/dtI=C\,dV/dt),若时钟周期 tCLKt_{\mathrm{CLK}}、每半周期一次翻转,经 pulldown 耗散的功率约为 0.5fCVDD20.5\,f\,C\,V_{\mathrm{DD}}^2ff 为每秒翻转次数)。

完整充→放一周期耗散 CVDD2CV_{\mathrm{DD}}^2 焦耳;频率 ff 时平均功率为 fCVDD2fCV_{\mathrm{DD}}^2 瓦;能量全部来自电源:一半充电容时耗散,一半存于电容后放电耗散。

4. CMOS 动态功耗 II(CMOS Dynamic Power Dissipation II)

CMOS Dynamic Power Dissipation II

整电路:每周期约 NN 个节点翻转时,可据此估算总能耗。信封估算:1 GHz、1 亿内部节点、每节点 1fF\sim 1\,\mathrm{fF}VDD1VV_{\mathrm{DD}}\sim 1\,\mathrm{V} → 约 100 W——接近白炽灯泡,散热困难。笔记本 CPU 远低于此,靠设计技巧压功耗。

单独降低 VDDV_{\mathrm{DD}}(如 3.3 V→1 V)可降功耗一个数量级以上(因 V2\propto V^2)。技术趋势使晶体管更多更快,若不精打细算会撞上功耗墙。

5. 如何降低功耗?(How Can We Reduce Power?)

How Can We Reduce Power

ALU 常含算术、布尔、移位、比较等独立模块;控制只选其一,其余结果被忽略——但仍在耗动态功耗。机会:关掉不需要的模块。

思路:阻止其输入变化 → 内部节点不动 → 动态功耗为零。

6. 更少翻转 → 更低功耗(Fewer Transitions → Lower Power)

Fewer Transitions Lower Power

手段:

  • 各模块输入加 latch,仅当本周期需要该结果时打开 → 移位器等大模块多数时间不翻转
  • 切断电源关断整块(更复杂,常用于特殊省电模式)
  • 降频:无事时减慢时钟(对毫秒级外部事件尤其有效),有事件再加速

移动设备广泛使用上述技巧。计算是否必然耗能见课程笔记 §6.5。

7. 提速:加法器例子(Improving Speed: Adder Example)

Improving Speed: Adder Example

瓶颈常在行波进位加法器(ripple-carry):最长路径是进位链。触发:A 全 1、B 最低位 1 其余 0(加 1-111)→ 进位逐级 ripple。

延迟 (N1)×tcarry+tsum\approx (N-1)\times t_{\mathrm{carry}}+t_{\mathrm{sum}}NN 翻倍则延迟约翻倍 → 延迟 Θ(N)\Theta(N)(阶记号忽略相对次要项)。

8. 性能/成本分析(Performance/Cost Analysis)

Performance/Cost Analysis

渐近分析:标出 NN\to\infty 时主导项。例:n2+2n+3n^2+2n+3 被常数倍的 n2n^2 上下夹住(除有限个 nn)→ Θ(n2)\Theta(n^2)

  • Θ(f)\Theta(f):上下皆被 ff 的常数倍界定
  • O(f)O(f):仅上界

9. 进位选择加法器(Carry-Select Adders)

Carry-Select Adders

高半部不必等低半部进位:做两份高 16 位加法(假设 Cin=0C_{\mathrm{in}}=011),与低半部并行;再用低半部真实进位选结果 → carry-select adder

32 bit 延迟约略高于 16 bit ripple,\sim 减半延迟,代价约 +50% 电路。递归对更小块做同样事:log2N\log_2 N 层后延迟为常数加法 + logN\log N 个 MUX → Θ(logN)\Theta(\log N)。清晰的性能–面积折衷。

10. 32 位进位选择加法器(32-Bit Carry-Select Adder)

32-Bit Carry-Select Adder

工程版:块大小使试算和与前级进位几乎同时到达 select MUX;select 负载大时加 buffer。相对 32 bit ripple:约 2.5× 更快,约 2× 电路——ALU 提速常记方案。

11. 要更快的进位逻辑!(Wanted: Faster Carry Logic!)

Wanted: Faster Carry Logic

链 → 树可把线性延迟变对数。改写全加器进位:

  • G(generate):无需等 CinC_{\mathrm{in}} 即产生进位
  • P(propagate):有 CinC_{\mathrm{in}} 才传出

Cout=G(PCin)C_{\mathrm{out}}=G\lor(P\land C_{\mathrm{in}})。常把 P 从 ABA\lor B 改为 ABA\oplus B,则和可写 S=PCinS=P\oplus C_{\mathrm{in}}。进位 SOP 可用三个 2 输入 NAND 实现。

12. 超前进位加法器(Carry Look-Ahead Adders, CLA)

Carry Look-Ahead Adders

相邻两模块 H、L:块 generate / propagate:

Gblock=GH(GLPH),Pblock=PLPH.G_{\mathrm{block}}=G_H\lor(G_L\land P_H),\quad P_{\mathrm{block}}=P_L\land P_H.

用 GP 模块组合两级进位信息,把两模块当作更大块。

13. 8 位 CLA(生成 G 与 P)(8-Bit CLA: generate G & P)

8-Bit CLA generate G and P

多层 GP 成树:NN 输入共 N1N-1 个 GP 模块,延迟 Θ(logN)\Theta(\log N)。下一步用 G/P 快速算各全加器的 CinC_{\mathrm{in}}

14. 8 位 CLA(进位生成)(8-Bit CLA: carry generation)

8-Bit CLA carry generation

给定最低位 C0C_0:块的低半直接用该进位;高半进位用低半 G/P 算出。C 模块再排成树,层层算出各全加器 CinC_{\mathrm{in}},延迟仍 Θ(logN)\Theta(\log N)。注意同一位置 C 的 GL,PLG_L,P_L 与 GP 树输入对应。

15. 8 位 CLA(完整)(8-Bit CLA: complete)

8-Bit CLA complete

GP 与 C 合成 carry-lookahead 模块:向上传 G/P,向下传进位。上行+下行总延迟 Θ(logN)\Theta(\log N),再加一级 XOR 得和 → 整加法器延迟 Θ(logN)\Theta(\log N),远优于 ripple 的 Θ(N)\Theta(N)。全加器内原 carry-out 逻辑可删。同类策略的极致见 Kogge-Stone 等。

16. 二进制乘法(Binary Multiplication)

Binary Multiplication

小学竖式:乘数每位 × 被乘数得部分积,左移对齐后相加。1 bit×1 bit 即 AND,无进位;部分积宽 NNMM 位乘数 → MM 个部分积;相加得 N+MN+M 位结果。贵在把 MMNN 位部分积相加。

17. 组合乘法器(Combinational Multiplier)

Combinational Multiplier

M×NM\times N 个 AND 算部分积;行间用全加器/半加器累加。信息只向下或向左,最长路径至多 N+MN+M 个模块 → 延迟 Θ(N)\Theta(N)M,NM,N 差常数倍);吞吐 =1/latency=1/\textrm{latency};硬件 Θ(N2)\Theta(N^2)

18. 补码乘法(2’s Complement Multiplication)

2's Complement Multiplication

补码最高位负权重 → 部分积需符号扩展N+MN+M 位;末个部分积因乘数符号位而改为。技巧:在若干列加 1 再抵消,把符号扩展与减法化成:若干位取反 + 两处加常数 1——最终表几乎与无符号竖式同形。

19. 补码乘法器电路(2’s Complement Multiplier)

2's Complement Multiplier

相对无符号版:部分 AND→NAND(取反),并改两处加 1 的逻辑。延迟、吞吐、硬件代价与无符号版同阶。

20. 流水提高吞吐(Increase Throughput with Pipelining)

Increase Throughput with Pipelining

原组合乘吞吐约每 2N2N 拍出一个结果。画输出轮廓得 1-pipeline;再对半切可翻倍吞吐,但仍 Θ(1/N)\Theta(1/N)。关键洞察:整行在同一级 → 级延迟仍含 NN bit ripple → Θ(N)\Theta(N)

21. Carry-Save 流水乘法器(Carry-Save Pipelined Multiplier)

Carry-Save Pipelined Multiplier

重画进位链:进位仍向左一列,但接到下一行同列。水平流水线切断长进位;每级延迟常数(与 NN 无关)。需 Θ(N)\Theta(N) 额外行收尾进位。

Θ(N)\Theta(N) 级 → 级延迟/时钟/吞吐皆 Θ(1)\Theta(1);系统延迟 Θ(N)\Theta(N);硬件仍 Θ(N2)\Theta(N^2)。吞吐显著提升的折衷。

22. 时序逻辑减面积(Reduce Area with Sequential Logic)

Reduce Area with Sequential Logic

时序乘法器:每拍算一个部分积并累加到 P,共 Θ(N)\Theta(N) 步。B 最低位 × 被乘数 → carry-save 加法器;P 与加法器输出为 carry-save 格式(数据和 + 保存的进位)。每拍 P、B 右移 1——等价于“部分积左移”的对偶。

无完整进位传播 → 时钟周期与 NN 无关(约一个全加器延迟)。再 Θ(N)\Theta(N) 步收尾进位 → 总延迟仍 Θ(N)\Theta(N),吞吐 Θ(1/N)\Theta(1/N)硬件 Θ(N)\Theta(N)(相对组合 Θ(N2)\Theta(N^2) 大降)。Carry-save:可同硬件提吞吐,或同吞吐省面积。

23. 小结(Summary)

Summary

Part 1 收束:信息与编码 → 冗余检错/纠错 → 数字抽象与噪声容限 → MOSFET/CMOS 与组合综合 → 双稳态存储与动态纪律 → FSM 与亚稳态/同步 → 延迟与吞吐 → 本讲功耗与加法/乘法折衷。

设计时可在功耗、延迟 Θ(N)\Theta(N) vs Θ(logN)\Theta(\log N)、吞吐 Θ(1)\Theta(1) vs Θ(1/N)\Theta(1/N)、面积 Θ(N)\Theta(N) vs Θ(N2)\Theta(N^2) 之间按目标选型。