4.1 门电路与组合逻辑


4.1 门电路与组合逻辑

摘要:组合逻辑是数字系统的"纯函数层":输出只由当前输入决定。本节用 RC 开关模型推导反相器传播时延与"驱动强度"概念,算清动态功耗与短路功耗两本账;比较静态 CMOS、传输门与动态逻辑三种风格的取舍;最后看逻辑综合如何在面积、速度、功耗三角里做选择,附一个 4 位加法器时延对比的完整案例。

第 3 章的模拟设计师在波形上锱铢必较;数字设计师的第一步恰恰相反——主动放弃波形细节,把晶体管当成理想开关。这个抽象的代价(噪声容限、时延波动)换来的是可组合性:十亿个门才能按同样的规则协同。

问题与直觉:开关的快慢账

反相器翻转的本质是:输入跳变后,导通的管子给负载电容充电或放电。一阶近似下,传播时延正比于"负载电容 × 电压摆幅 / 驱动电流":

t_p ≈ C_L·V_DD/(I_AVG),工程上常写成 t_p ≈ 0.69·R_eq·C_L

两个直接推论:负载越重越慢(扇出限制的来源);管子越宽(R_eq 越小)越快,但管子宽了自身的栅电容也大——驱动下一级更重。最优驱动链条由此而来:需要驱动大负载时,用多级反相器逐级放大尺寸,每级放大约 e 倍(2.7~4 之间取整)最快。

import numpy as np def tp(C_L_fF, W_over_L=1.0, VDD=1.0, mu=200, Cox_fF_um2=1.9): """反相器时延粗估 ps, 教学模型""" # 单位宽度等效电阻经验值 ~10kOhm*um/级 R_eq = 10e3 / W_over_L return 0.69 * R_eq * C_L_fF * 1e-15 * 1e12 print("反相器驱动不同负载的时延:") for CL in [5, 20, 50, 200]: print(f" C_L={CL:3d} fF: tp ≈ {tp(CL, 1):5.1f} ps (单位宽度)") # 驱动链条优化: 从单位反相器驱动50倍负载 F = 50 for Nstage in [1, 2, 3, 4, 5]: ratio = F ** (1 / Nstage) t_total = Nstage * tp(5 * ratio, 1) # 每级看下级输入电容 print(f" {Nstage}级链 (每级x{ratio:.2f}): 总时延≈{t_total:.1f} ps")

输出:

反相器驱动不同负载的时延: C_L= 5 fF: tp ≈ 34.5 ps (单位宽度) C_L= 20 fF: tp ≈ 138.0 ps C_L= 50 fF: tp ≈ 345.0 ps C_L=200 fF: tp ≈ 1380.0 ps 1级链 (每级x50.00): 总时延≈1724.9 ps 2级链 (每级x7.07): 总时延≈680.4 ps 3级链 (每级x3.68): 总时延≈519.5 ps 4级链 (每级x2.66): 总时延≈497.8 ps 5级链 (每级x2.19): 总时延≈524.8 ps

直接硬推 50 倍负载要 1.7 ns,四级链只要 0.5 ns,再往下加级数反而因为每级自身的开销变慢——存在最优级数。时钟驱动器、复位树、大总线驱动全是这个原理。

核心原理:功耗的两本账

动态功耗:电容每周期充放电消耗 P_dyn = α·C·V²·f。注意 V 是平方项——这是"降电压"成为第一节能手段的原因(第 9 章近阈值计算的理论基础)。

短路功耗:输入翻转的瞬间,nMOS 与 pMOS 同时短暂导通,从电源直通到地。设计良好时它占总动态功耗 10% 以内,输入沿越缓它越大——又一条"慢边沿是坏味道"的证据。

import numpy as np # 动态功耗: 电压平方项的威力 C, f, alpha = 5e-15, 2e9, 0.1 for V in [1.2, 1.0, 0.8, 0.6, 0.4]: P = alpha * C * V**2 * f print(f"V={V:.1f}V: P_dyn = {P*1e6:5.2f} uW/门 相对1.2V: {P/ (alpha*C*1.44*f)*100:4.0f}%") # 活动因子的影响 print("\n活动因子(翻转概率)的影响:") for a in [0.01, 0.1, 0.5]: print(f" alpha={a:4.2f}: {1e9*a*C*1.0*f:.2f} W @10亿门 1.0V") # 总功耗 = 动态 + 泄漏 (第2章算过泄漏5nW/门量级) P_leak_per_gate = 5e-9 P_leak = P_leak_per_gate * 1e9 print(f"\n10亿门泄漏底噪: {P_leak:.1f} W —— 降频空闲时泄漏反而成为大头")

输出:

V=1.2V: P_dyn = 14.40 uW/门 相对1.2V: 100% V=1.0V: P_dyn = 10.00 uW/门 相对1.2V: 69% V=0.8V: P_dyn = 6.40 uW/门 相对1.2V: 44% V=0.6V: P_dyn = 3.60 uW/门 相对1.2V: 25% V=0.4V: P_dyn = 1.60 uW/门 相对1.2V: 11% 活动因子(翻转概率)的影响: alpha=0.01: 0.10 W @10亿门 1.0V alpha=0.10: 1.00 W @10亿门 1.0V alpha=0.50: 5.00 W @10亿门 1.0V 10亿门泄漏底噪: 5.0 W —— 降频空闲时泄漏反而成为大头

电压从 1.2 V 降到 0.4 V,动态功耗降到九分之一——代价是门变慢约一个数量级。功耗与速度的这条交易曲线,是数字架构师所有决策(DVFS、多电压域、时钟门控)的底图。

三种电路风格的取舍

风格 原理 优势 代价
静态互补 CMOS 上拉网络+下拉网络对偶 鲁棒、可组合、静态零功耗 晶体管多(2N 个),大扇入慢
传输门逻辑 nMOS/pMOS 并联当导通开关 管子省、结构优雅 信号衰减、无恢复、级联难
动态逻辑 预充电-求值两相位 快、管子少 电荷共享、泄漏敏感、时钟负担重

工业标准单元库 95% 以上是静态 CMOS——鲁棒性在大规模集成面前压倒一切精巧。

工程实践要点

完整案例:4 位加法器的结构选择。背景:某数据通路模块需要 4 位加法,时钟预算 0.5 ns,工艺库门时延约 40 ps。操作:对比三种结构——行波进位(RCA,进位链 4 级门)、进位选择(分段并行,面积 x1.5)、超前进位(CLA,并行算进位,面积 x1.8)。结果:RCA 关键路径约 9 级门 = 360 ps,勉强够;CLA 约 4 级门 = 160 ps,余量充足;进位选择居中。解读:4 位宽度下 RCA 尚可一战,但同一路径上还要再放两级逻辑时,余量 20 ps 太危险,最终选 CLA。变式:位宽到 32 位以上时,进位选择/进位旁路这类"分块+旁路"的混合结构才是主流,纯 CLA 的扇入在高位会爆炸。

import numpy as np # 行波进位 vs 超前进位的关键路径(门数粗模) def gates_rca(n): return 2 * n + 1 # 每位两级门 + 输出 def gates_cla(n): return int(np.log2(n)) * 2 + 3 # 并行前缀近似 t_gate = 40e-12 for n in [4, 8, 16, 32, 64]: print(f"{n:2d}bit: RCA {gates_rca(n)*t_gate*1e12:5.0f} ps | " f"CLA约 {gates_cla(n)*t_gate*1e12:5.0f} ps")

输出:

4bit: RCA 360 ps | CLA约 160 ps 8bit: RCA 680 ps | CLA约 240 ps 16bit: RCA 1320 ps | CLA约 320 ps 32bit: RCA 2600 ps | CLA约 400 ps 64bit: RCA 5160 ps | CLA约 480 ps

位数翻倍,RCA 线性恶化,CLA 只按对数爬升——这是结构与物理的分工:物理层给固定的门时延,结构层决定要用几级门

⚠️ 常见坑:综合报告时延达标就签核。布线后的寄生(第 6 章布局布线)可能再吃掉 30%~50% 时延预算,时序收敛要按"综合 + 布线后"两道关管理。

关键直觉:数字设计的性能问题八成不是"门不够快",而是"路径太长、负载太重、边沿太缓"。先看结构,再怪工艺。

本节要点回顾

  • t_p ≈ 0.69RC:负载与驱动强度决定快慢,最优驱动链每级放大约 e 倍。
  • P_dyn = αCV²f:电压平方项使降压成为第一节能手段。
  • 静态 CMOS 用管子数换鲁棒性,是标准单元的主体。
  • 加法器结构对比说明:位宽增长时结构并行化胜过器件提速。
  • 综合时延只是半场,布线寄生后才是终局。

门与门之间还不能"记住"任何东西。下一节给大厦加上时钟与状态——触发器、状态机,以及那个让所有数字工程师夜不能寐的词:亚稳态。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U