整理自 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)在延迟、吞吐与面积上的 折衷。完成本课程 Part 1 的收束。
1. 优化你的设计(Optimizing Your Design)
正确折衷取决于设计目标。显卡团队:优先性能,可在限度内换成本与功耗;尺寸有硬上限,再小收益不大。手表团队:尺寸与功耗关键(戴一天、不烫手腕)。
同一“是否流水”决策:流水寄存器增加成本;重叠执行与更高 抬高功耗与散热需求 → 两队结论可能相反。本章列举可用折衷;选对约束下的权衡是工程师的乐趣。
2. CMOS 静态功耗(CMOS Static Power Dissipation)
静态功耗:电路空闲(节点不变)时仍消耗的功率。理想开关模型下 CMOS 静态功耗为 0;早期接近理想,但尺寸缩小、电压降低后两大效应凸显(n/p 沟道皆有):
- 栅氧变薄 → 电场增强、速度提升,但电子可隧穿绝缘层,产生栅→衬底漏电流;数十亿管累积不可忽视
- 亚阈导通(sub-threshold conduction):名义截止()时仍有漏电,与 (截止时为负)指数相关; 降低使漏电增大
缓解:FinFET / tri-gate(沟道成鳍、栅三面包围)可把亚阈漏电降一个数量级以上。
3. CMOS 动态功耗 I(CMOS Dynamic Power Dissipation I)
动态功耗:节点翻转充放电电容时消耗。以反相器为例:充/放电时电流经 MOSFET,瞬时功率 。对 1→0 积分(),若时钟周期 、每半周期一次翻转,经 pulldown 耗散的功率约为 ( 为每秒翻转次数)。
完整充→放一周期耗散 焦耳;频率 时平均功率为 瓦;能量全部来自电源:一半充电容时耗散,一半存于电容后放电耗散。
4. CMOS 动态功耗 II(CMOS Dynamic Power Dissipation II)
整电路:每周期约 个节点翻转时,可据此估算总能耗。信封估算:1 GHz、1 亿内部节点、每节点 、 → 约 100 W——接近白炽灯泡,散热困难。笔记本 CPU 远低于此,靠设计技巧压功耗。
单独降低 (如 3.3 V→1 V)可降功耗一个数量级以上(因 )。技术趋势使晶体管更多更快,若不精打细算会撞上功耗墙。
5. 如何降低功耗?(How Can We Reduce Power?)
ALU 常含算术、布尔、移位、比较等独立模块;控制只选其一,其余结果被忽略——但仍在耗动态功耗。机会:关掉不需要的模块。
思路:阻止其输入变化 → 内部节点不动 → 动态功耗为零。
6. 更少翻转 → 更低功耗(Fewer Transitions → Lower Power)
手段:
- 各模块输入加 latch,仅当本周期需要该结果时打开 → 移位器等大模块多数时间不翻转
- 切断电源关断整块(更复杂,常用于特殊省电模式)
- 降频:无事时减慢时钟(对毫秒级外部事件尤其有效),有事件再加速
移动设备广泛使用上述技巧。计算是否必然耗能见课程笔记 §6.5。
7. 提速:加法器例子(Improving Speed: Adder Example)
瓶颈常在行波进位加法器(ripple-carry):最长路径是进位链。触发:A 全 1、B 最低位 1 其余 0(加 与 )→ 进位逐级 ripple。
延迟 。 翻倍则延迟约翻倍 → 延迟 (阶记号忽略相对次要项)。
8. 性能/成本分析(Performance/Cost Analysis)
渐近分析:标出 时主导项。例: 被常数倍的 上下夹住(除有限个 )→ 。
- :上下皆被 的常数倍界定
- :仅上界
9. 进位选择加法器(Carry-Select Adders)
高半部不必等低半部进位:做两份高 16 位加法(假设 与 ),与低半部并行;再用低半部真实进位选结果 → carry-select adder。
32 bit 延迟约略高于 16 bit ripple, 减半延迟,代价约 +50% 电路。递归对更小块做同样事: 层后延迟为常数加法 + 个 MUX → 。清晰的性能–面积折衷。
10. 32 位进位选择加法器(32-Bit Carry-Select Adder)
工程版:块大小使试算和与前级进位几乎同时到达 select MUX;select 负载大时加 buffer。相对 32 bit ripple:约 2.5× 更快,约 2× 电路——ALU 提速常记方案。
11. 要更快的进位逻辑!(Wanted: Faster Carry Logic!)
链 → 树可把线性延迟变对数。改写全加器进位:
- G(generate):无需等 即产生进位
- P(propagate):有 才传出
。常把 P 从 改为 ,则和可写 。进位 SOP 可用三个 2 输入 NAND 实现。
12. 超前进位加法器(Carry Look-Ahead Adders, CLA)
相邻两模块 H、L:块 generate / propagate:
用 GP 模块组合两级进位信息,把两模块当作更大块。
13. 8 位 CLA(生成 G 与 P)(8-Bit CLA: generate G & P)
多层 GP 成树: 输入共 个 GP 模块,延迟 。下一步用 G/P 快速算各全加器的 。
14. 8 位 CLA(进位生成)(8-Bit CLA: carry generation)
给定最低位 :块的低半直接用该进位;高半进位用低半 G/P 算出。C 模块再排成树,层层算出各全加器 ,延迟仍 。注意同一位置 C 的 与 GP 树输入对应。
15. 8 位 CLA(完整)(8-Bit CLA: complete)
GP 与 C 合成 carry-lookahead 模块:向上传 G/P,向下传进位。上行+下行总延迟 ,再加一级 XOR 得和 → 整加法器延迟 ,远优于 ripple 的 。全加器内原 carry-out 逻辑可删。同类策略的极致见 Kogge-Stone 等。
16. 二进制乘法(Binary Multiplication)
小学竖式:乘数每位 × 被乘数得部分积,左移对齐后相加。1 bit×1 bit 即 AND,无进位;部分积宽 。 位乘数 → 个部分积;相加得 位结果。贵在把 个 位部分积相加。
17. 组合乘法器(Combinational Multiplier)
个 AND 算部分积;行间用全加器/半加器累加。信息只向下或向左,最长路径至多 个模块 → 延迟 ( 差常数倍);吞吐 ;硬件 。
18. 补码乘法(2’s Complement Multiplication)
补码最高位负权重 → 部分积需符号扩展到 位;末个部分积因乘数符号位而改为减。技巧:在若干列加 1 再抵消,把符号扩展与减法化成:若干位取反 + 两处加常数 1——最终表几乎与无符号竖式同形。
19. 补码乘法器电路(2’s Complement Multiplier)
相对无符号版:部分 AND→NAND(取反),并改两处加 1 的逻辑。延迟、吞吐、硬件代价与无符号版同阶。
20. 流水提高吞吐(Increase Throughput with Pipelining)
原组合乘吞吐约每 拍出一个结果。画输出轮廓得 1-pipeline;再对半切可翻倍吞吐,但仍 。关键洞察:整行在同一级 → 级延迟仍含 bit ripple → 。
21. Carry-Save 流水乘法器(Carry-Save Pipelined Multiplier)
重画进位链:进位仍向左一列,但接到下一行同列。水平流水线切断长进位;每级延迟常数(与 无关)。需 额外行收尾进位。
级 → 级延迟/时钟/吞吐皆 ;系统延迟 ;硬件仍 。吞吐显著提升的折衷。
22. 时序逻辑减面积(Reduce Area with Sequential Logic)
时序乘法器:每拍算一个部分积并累加到 P,共 步。B 最低位 × 被乘数 → carry-save 加法器;P 与加法器输出为 carry-save 格式(数据和 + 保存的进位)。每拍 P、B 右移 1——等价于“部分积左移”的对偶。
无完整进位传播 → 时钟周期与 无关(约一个全加器延迟)。再 步收尾进位 → 总延迟仍 ,吞吐 ,硬件 (相对组合 大降)。Carry-save:可同硬件提吞吐,或同吞吐省面积。
23. 小结(Summary)
Part 1 收束:信息与编码 → 冗余检错/纠错 → 数字抽象与噪声容限 → MOSFET/CMOS 与组合综合 → 双稳态存储与动态纪律 → FSM 与亚稳态/同步 → 延迟与吞吐 → 本讲功耗与加法/乘法折衷。
设计时可在功耗、延迟 vs 、吞吐 vs 、面积 vs 之间按目标选型。