Chapter 8:延迟与速度 Speed

门延迟的估算方法,包括 RC 模型、Elmore delay 与逻辑努力(logical effort)。

有很多的图,请对照课件进行复习

学习路线总览

建议把这个课件分成 6 个板块 学习,比较符合它从“定义 → 模型 → 门级 → 工具 → 逻辑努力 → 优化方法”的展开顺序。

板块页码范围学习主题重点抓什么
1P2–P9延迟的基本概念与获取方法gate delay、propagation delay、contamination delay、rise/fall time、arrival time、slack,以及 SPICE / LUT / RC analytical model 的区别。课件前面明确把 propagation delay 作为最核心的 delay 概念,并引出 timing analyzer、arrival time 和 slack。
2P10–P31从 CMOS 反相器理解延迟反相器 DC / transient response、NMOS/PMOS 等效电阻、寄生电容、RC delay、输入 slew、器件尺寸和 PMOS/NMOS ratio 对 delay 的影响。课件强调 analytical model 用 R 和 C 估算延迟,核心近似是 tpd ≈ RC
3P32–P46复杂逻辑门的延迟NAND 等复杂门的等效电阻、电容、Elmore delay、contamination delay、input pattern 对延迟的影响,以及 sizing、topology、transistor ordering、buffer insertion 等加速技巧。课件总结中指出 fan-in 增大会使 delay 快速恶化,复杂门要关注 worst-case delay。
4P47–P51现代标准单元中的 delay 建模standard cell、standard cell library、cell delay、input slew 和 output load 的查表关系,以及 interconnect delay。课件在这一段进入 “Standard Cell Delay in Modern Design”,并说明 cell delay/output slew 是 input slew 和 output load 的函数。
5P52–P71Logical Effort 基础logical effort、electrical effort、parasitic delay、FO4、ring oscillator、多级路径 delay、branching effort。课件定义 logical effort 为“同等输出驱动能力下,某门输入电容与反相器输入电容的比值”,且复杂门 logical effort 更大。
6P72–P86用 Logical Effort 做路径优化path effort F = GBH、best number of stages、best stage effort、gate sizing、delay minimization,以及最后的公式总复习。课件给出了 logical effort 的完整方法:算 path effort、估最佳级数、加 buffer、估最小 delay、确定 stage effort、反推 gate size。

一、延迟的基本概念与获取方法

performance / speed / delay

Gate Delay —— 门延迟

从逻辑门输入变得稳定并且有效开始,到该逻辑门输出变得稳定并且有效为止,中间经历的时间就是 gate delay。

img

Propagation Delay and Rising/Falling Time | 延时参数tpdrtpdftptrtf\mathbf{t_{pdr}、t_{pdf}、t_p、t_r、t_f}

img

  1. tpdrt_{pdr}:rising propagation delay
  2. tpdft_{pdf}:falling propagation delay

这里的 “rising\falling” 指的是 output rising VDD/2V_{DD}/2->VDD/2V_{DD}/2

  1. tpdt_{pd}:平均传播延迟 tpd=tpdr+tpdf2t_{pd} = \frac{t_{pdr} + t_{pdf}}{2}; 一般 tpdrtpdft_{pdr} \neq t_{pdf}
  • tpd:输入到输出的延迟t_{pd}: \text{输入到输出的延迟}
  1. trt_r:rise time 常见 0.1VDD0.9VDD0.1V_{DD} \rightarrow 0.9V_{DD}
  2. tft_f:fall time 常见:0.9VDD0.1VDD0.9V_{DD} \rightarrow 0.1V_{DD}
tr,tf:输出边沿自身的陡峭程度t_r, t_f: \text{输出边沿自身的陡峭程度}

t_pLH 对应的是 tpdr(rise),tpdf 对应的是 t_pHL。

img

Contamination delay | 最小延迟

propagation delay 通常对应 最大延迟 / max-time。 contamination delay 对应 最小延迟 / min-time

img

  1. tcdrt_{cdr}:rising contamination delay

表示输出开始可能上升的最早时间。

  1. tcdft_{cdf}:falling contamination delay

表示输出开始可能下降的最早时间。

  1. tcdt_{cd}:平均 contamination delay
tcd=tcdr+tcdf2t_{cd} = \frac{t_{cdr}+t_{cdf}}{2}
提醒

Propagation delay 是最常用的 delay。对于 tpdt_{pd} tcdt_{cd} 来说,测量方法都是一样的:从输入跨过 VDD/2V_{DD}/2 开始,到输出跨过 VDD/2V_{DD}/2 结束。区别在于,像 NAND 门这种电路,同样是输出 010\to1 101\to0,不同输入端翻转、不同导通路径会导致延迟有快有慢。因此 tpdt_{pd} 取最慢情况下的延迟,tcdt_{cd} 取最快情况下的延迟。

名称含义用途
contamination delay输出最早可能被“污染”或开始变化的时间检查 hold time / min-time
propagation delay输出最晚保证稳定到正确值的时间检查 setup time / max-time

Timing analyzer | 时序分析

Arrival time | 到达时间
  • Arrival time 表示:某个节点最晚什么时候会切换到正确值。
    • 如果一个门有多个输入,要等所有相关输入中最晚的那个,因为输出的正确值通常取决于最慢到达的输入。
  • 公式为:ai=maxjfanin(i){aj}+tpd,ia_i = \max_{j \in fanin(i)} \{a_j\} + t_{pd,i}
所有输入 arrival time 的最大值+当前门的传播延迟\text{所有输入 arrival time 的最大值} + \text{当前门的传播延迟}

img

Slack | 时序裕量

img

  • slack=required timearrival time\text{slack} = \text{required time} - \text{arrival time}
    • slack>0\text{slack} > 0 说明信号来得够早,电路满足时序。
    • slack<0\text{slack} < 0 说明信号来得太晚,电路不够快,需要优化。

img

延时计算

img

img

  1. transistor-level simulator,例如 SPICE
    • 准确,但慢
  2. LUT-based EDA tool
    • 比 SPICE 快很多,精度也较好
  3. analytical model,例如 RC ladder model
    • 最快,但是不够精确

虽然 SPICE 准,但我们仍然需要 analytical model,因为analytical model is fast而且更容易回答 “what if?”。

CMOS Inverter | CMOS反相器

提醒

11-18 电阻(铺垫)

19-21 电容(铺垫)

22-25 delay和RC关系 (24页单位CMOS 重要)

26-30 反向器延迟及其影响因素

31 总结

img

  • 反相器 delay 来自输出节点电容被 PMOS 充电或被 NMOS 放电所需的时间。
  • 这个“中间阶段”就是动态延迟产生的关键,因为输出节点电容不是瞬间放完电的。
  • 把 NMOS 看成开关 delay=RonCdelay=R_{on}C
    • 把复杂的 MOS 电流方程变成了简单的 RC 延迟模型。
    • 但是MOS transistor 的导通电阻是动态变化的,RC 模型里的 RR 是平均等效值。

img

img

平均电阻取 VDDV_{DD}VDD/2V_{DD}/2, delay 测到 VDD/2V_{DD}/2,所以估算 ReqR_{eq} 时也主要平均输出从 VDDV_{DD}VDD/2V_{DD}/2 这段。

等效电阻

img

Summary on Resistance | 电阻总结

  1. R1W/LR \propto \frac{1}{W/L},晶体管越宽,导通电阻越小,delay 越小。
  2. 当供电电压接近阈值电压 VthV_{th} 时,电阻会急剧增大。这对应 near-threshold 和 sub-threshold 工作区,速度会显著下降。
  3. MOS 等效电阻通常是 kΩk\Omega 量级。

Revisit Parasitics MOS Capacitance | MOS 寄生电容

输出节点不只是接了外部负载电容,还会有 MOS 自身带来的寄生电容。

img

img

  • 栅面积大约和 WLW \cdot L (Gate channel cap沟道电容)或和 WW(Gate overlap cap 、Diffusion cap) 有关;所以晶体管做大虽然降低电阻,但也会增加电容。
  • CWLC \propto W\cdot L, cell 级别的电容通常是 fF,也就是:1015F10^{-15}F
    • 而整个芯片的总 CdieC_{die} 可以达到几百到几千 nF,甚至更多。

反相器延时估计

img

快速估算时可以先忽略 0.69,直接用:tpdRCt_{pd}\approx RC

计算过程:(实际老掉牙了 非常简单)

一阶 RC 放电可以写成:Vout(t)=VDDet/(RonCL)V_{out}(t)=V_{DD}e^{-t/(R_{on}C_L)}, 传播延迟通常测到输出过半:Vout=VDD2V_{out}=\frac{V_{DD}}{2}, 代入:12=et/(RonCL)\frac{1}{2}=e^{-t/(R_{on}C_L)},可得t=ln2RonCLt=\ln 2 \cdot R_{on}C_L 因此 t0.69RonCLt\approx 0.69R_{on}C_L

更高阶的估计——Transient Response 的长沟道模型推导

对输出下降过程做了更细的长沟道模型分析。

img

这页想表达的是:如果精确分析,电流方程是分段的,求解比较麻烦;所以后面才更愿意用平均电阻 ReqR_{eq} 的 RC 模型来估算。

RC Delay Model —— PMOS 和 NMOS 不一样(重要)

进一步修正 RC 模型:PMOS 和 NMOS 的迁移率不同。

img

给出单位PMOS 和 NMOS

因为 PMOS 的空穴迁移率低于 NMOS 的电子迁移率,所以同尺寸 PMOS 通常比 NMOS 弱。

为了让上升和下降速度接近平衡,常常把 PMOS 尺寸做成 NMOS 的大约 2 倍:

Wp2WnW_p≈2W_n

晶体管尺寸放大 kk 倍时,导通电阻约变为原来的 1/k1/k,但相关电容约增大为 kk 倍,因此 sizing up 会降低电阻、增加电容。

RC Values | R、C 典型值

img


Example: Inverter Delay Estimate | 反相器延迟估算

img

对于这道题而言 无论是0到1反转还是1-0翻转,延时都是相同的delay=6RCdelay=6RC

Factors Impacting Inverter Delay | 影响反相器 delay 的因素

img

  1. Output load:输出负载越大,delay 越大:
  2. Device size:增大晶体管尺寸可以降低电阻:WRW\uparrow \Rightarrow R\downarrow,但会增加寄生电容:WCparasiticW\uparrow \Rightarrow C_{parasitic}\uparrow,所以存在 trade-off。
  3. P/N ratio,PMOS 和 NMOS 的尺寸比例会影响上升延迟和下降延迟。PMOS 做大,上升更快,但它的扩散电容也变大,可能拖慢下降。
  4. Input slew:输入边沿越慢,输出延迟通常越大。因为输入慢时,PMOS 和 NMOS 同时导通的时间更长,并且还会带来更复杂的耦合效应。
Device Size —— 晶体管尺寸对 delay 的影响

随着尺寸因子 SS 增大,delay 下降,但不是线性下降,而是逐渐趋于饱和。

img

原因是:

  • 刚开始增大晶体管时,RR 明显下降,所以 delay 降得快;
  • 后面继续增大时,晶体管自己的 intrinsic capacitance 寄生电容也变大;
  • self-loading effect 开始主导,所以 delay 不再明显下降。

可以把总 delay 写成一个直观形式:tReq(Cload+Cparasitic)t \approx R_{eq}(C_{load}+C_{parasitic}),假设尺寸放大 SS 倍:ReqRSR_{eq}\sim \frac{R}{S} CparasiticSCC_{parasitic}\sim SC,所以:tRS(Cload+SC)t\sim \frac{R}{S}(C_{load}+SC)tRCloadS+RCt\sim \frac{RC_{load}}{S}+RC

第一项会随着 SS 增大而下降,但第二项不会消失。这就是为什么尺寸做大后 delay 下降会变慢。


PMOS/NMOS Ratio —— PMOS/NMOS 比例

img

固定 NMOS、增大 β=Wp/Wn\beta=W_p/W_n 时,PMOS 上拉电阻减小,tpLHt_{pLH} 下降;但 PMOS 扩散电容增大,输出节点负载变大,NMOS 放电更慢,tpHLt_{pHL} 上升。因此平均延迟 tpt_pβ\beta 呈 U 形变化,存在最优宽度比。这个最优点不一定等于 tpLH=tpHLt_{pLH}=t_{pHL} 的平衡点。

Input Slew | 输入边沿对 delay 的影响

讨论输入 slew,也就是输入信号的上升/下降时间。

对旧工艺来说,这种关系几乎线性;对 32 nm 及以下工艺,会表现出非线性。

img

Input slew 表示输入边沿的上升/下降时间。输入边沿越慢,NMOS/PMOS 的导通状态变化越慢,输出电容的充放电电流变小,因此门延迟增大。图中 triset_{rise} 越大,输出高到低延迟 tpHLt_{pHL} 越大。实际 STA 中,单元 delay 不是常数,而是 delay=f(input slew, output load)delay=f(input\ slew,\ output\ load),所以高速设计必须控制输入 slew。


Key Take-Aways | 总结

tpdRCt_{pd}\approx RC, 其中:R=MOS 等效导通电阻R=\text{MOS 等效导通电阻}C=输出节点总电容C=\text{输出节点总电容},并且: WR, CW\uparrow \Rightarrow R\downarrow,\ C\uparrow,所以 sizing 是 trade-off。


复杂逻辑门的延迟

反相器只有一个上拉/下拉路径;复杂门有串联、并联晶体管和内部节点电容,delay 怎么估?

Example: 3-input NAND —— 三输入 NAND 的晶体管尺寸

MOS中数字代表晶体管宽度,注意标准反向器PMOS宽度为2,NOMS宽度为1

img

img

  1. NMOS
    1. 在反相器中,unit NMOS 的宽度可以看作 1,对应导通电阻:RR
    2. 为了让三个串联 NMOS 的总电阻仍然约为 RR,把每个 NMOS 宽度放大 3 倍:Wn=3W_n=3
    3. 单个 NMOS 电阻变为:R3\frac{R}{3}
  2. PMOS
    1. 上拉网络是三个 PMOS 并联。NAND 输出上升时,最坏情况通常只有一个 PMOS 导通。
    2. 所以每个 PMOS 取:Wp=2W_p=2
    3. 3-input NAND: Wp=2,Wn=3\text{3-input NAND: } W_p=2,\quad W_n=3

3-input NAND Caps —— 给 NAND3 标寄生电容

按24页标准来


img

  1. 输入端
    1. PMOS 宽度是 2,所以它的 gate capacitance 约为:2C2C
    2. NMOS 宽度是 3,所以它的 gate capacitance 约为:3C3C 所以每个输入端的总输入电容是:Cin=2C+3C=5CC_{in}=2C+3C=5C

    如果这个 NAND3 驱动 hh 个相同 NAND3,那么负载 gate capacitance 就是:Cload=h5C=5hCC_{load}=h\cdot 5C=5hC
  2. 输出端
    1. 三个 PMOS 每个宽度 2,所以贡献:3×2C=6C3 \times 2C=6C
    2. 最上方 NMOS 宽度 3,贡献:3C3C
    3. 所以输出节点自身寄生电容为:CY=6C+3C=9CC_Y=6C+3C=9C

如果再加上外部 fanout 负载:

CY=(9+5h)CC_Y=(9+5h)C
  1. 内部节点
    1. 3 个 NMOS 串联时,中间会出现两个内部节点,其电容:3C3C
    2. 是因为源漏共用,只算一个

Elmore Delay —— 用 Elmore delay 分析 RC ladder

则 Elmore delay :tpdiRisourceCit_{pd}\approx \sum_i R_{i\rightarrow source}C_i


NAND3 worst-case rising/falling delay

这一页估算 3-input NAND 驱动 hh 个相同 NAND3 时的最坏上升和下降延迟。

img

rising delay:输出从 0 到 1

VCC -> R -> Y

用 Elmore delay 即得如图

falling delay:输出从 1 到 0

GNDR3n1R3n2R3YGND \rightarrow \frac{R}{3} \rightarrow n_1 \rightarrow \frac{R}{3} \rightarrow n_2 \rightarrow \frac{R}{3} \rightarrow Y

用 Elmore delay 即得如图


P37:Delay Components —— 延迟分成两部分

把复杂门 delay 拆成两部分:

parasitic delay+effort delay\text{parasitic delay}+\text{effort delay}

parasitic delay 是 15 或 12 RC,和负载无关;effort delay 是 5hRC5hRC,与负载电容成正比。


Contamination Delay —— 最好情况延迟

复杂门里的 contamination delay

三个 PMOS 同时导通,而且它们是并联的。

img

tcdr=R3(9+5h)Ct_{cdr}=\frac{R}{3}(9+5h)Ctcdr=(3+5h3)RCt_{cdr}=\left(3+\frac{5h}{3}\right)RC

tcdft_{cdf}不变,因为最好情况与最坏情况一样


P39:Diffusion Capacitance —— 版图会影响扩散电容

前面假设每个 source/drain 都有 contacted diffusion capacitance,但真实 layout 可以优化 diffusion area。课件举例说,NAND3 layout 共享一个 diffusion contact,可以把输出电容减少 2C2C,merged uncontacted diffusion 也可能有帮助。

img

9C->7C

好的 layout 可以减少 diffusion capacitance,从而减少 parasitic delay。


Input Pattern Affects Delay —— 输入模式影响延迟

除了前面讲过的输出负载、尺寸、P/N ratio、input slew 之外,复杂门 delay 还依赖 input pattern

由于中间节点的电容是否充上电的缘故导致的

img

A=B=1->0 的情况是,上拉的两个PMOS并联,电阻小,delay小

A=1,B=1->0的情况是,下拉电路中B关断,AB两管之间的电容会被充电,延时增强

Faster Design: Sizing —— 用 progressive sizing 加速

P41 开始讲复杂门怎么设计得更快。

靠近输出NMOS小:减小电容\text{靠近输出NMOS小:减小电容}

输出节点电容在 delay 中权重最大,因为输出电容要经过整个下拉路径放电。

靠近地NOMS大:减小电阻\text{靠近地NOMS大:减小电阻}

靠近 GND 的 NMOS 虽然变大会增加内部节点电容,但这些内部节点电容在 Elmore delay 里的权重较小。

同时,把底部 NMOS 做大可以减少串联路径电阻。

Sizing 例子比较 —— 12RC vs 137/12RC

img


P43:Faster Design: Topology —— 拓扑结构也影响速度

P43 讨论 alternative logic designs,也就是同一个逻辑功能可以用不同门级结构实现。课件要求比较哪个更快,并提示用 Elmore delay 计算 worst-case delay。

img

直接用一个大 fan-in 门虽然逻辑级数少,但串联晶体管太多,等效电阻和内部寄生电容都很大,所以 worst-case delay 可能反而很慢。把大 fan-in 逻辑适当拆成中等 fan-in 的多级结构,通常可以在“单级门太慢”和“级数太多”之间取得折中。因此图中通常右下角结构最快:它避免了右上角 8-input NAND 的大 fan-in 问题,也避免了左边结构逻辑级数过多的问题。

同一个布尔函数,不同拓扑的 delay 可能差很多。


P44:Faster Design: Transistor Ordering —— 晶体管排序

img

左图:0->1的时候,它需要将输出以及中间节点的所有电容上的电荷全部放掉

右图:0->1的时候,它只需要放掉输出节点的电荷

如果某个输入在 critical path 上,并且它的 0→1 变化触发输出下降,通常希望把它对应的 NMOS 放在靠近输出的位置。这样可以减少它触发切换时需要一起放电的内部寄生电容。


P45:Faster Design: Buffer Insertion —— 插 buffer 隔离 fanin 和 fanout(最有效)

P45 讲 buffer insertion。课件说:用 buffer insertion 隔离 fanin 和 fanout,为什么以及怎么做,后面会在 logical effort 中进一步理解。(后面重点讲)

img


P46:Key Take-Aways —— 第三板块总结

P46 总结了第三板块的重点:

复杂门的 delay 会随着 fan-in 增加快速恶化;input pattern 会影响复杂门 delay,尤其当寄生电容较大时更明显;实际设计通常更关心 worst-case delay;加速复杂门的经验方法包括 progressive sizing transistor ordering topology optimization 和 buffer insertion。


四:现代标准单元中的 delay 建模,P47–P51(说不考)


P48:Standard Cell —— 什么是标准单元?

P48 说:在数字设计中,大多数时候我们处理的是 standard cells(预设好的逻辑单元)


P49:Standard Cell Library —— 标准单元库里有什么?

P49 讲的是 standard cell library 的组织方式。

课件说:对于每个 combinational cell family,会有:

M×NM \times N
  • MM:不同 threshold voltage,也就是不同 VtV_t
  • NN:每种 VtV_t 下的不同尺寸。

P50:Cell Delay —— cell delay 不是固定值


P51:Interconnect Delay —— 互连延迟让问题更复杂


五:Logical Effort 基础,P52–P71(最重要)

d=gh+pd = gh + p

也就是:

一个门的 delay = 逻辑复杂度带来的努力 + 负载带来的努力 + 自身寄生延迟。


P53:History of Logic Effort —— Logical Effort 的背景


P54:Sizing Logic Paths for Speed —— 路径 sizing 的问题

 inverter chain (反向器)的思想推广到任意逻辑(复杂逻辑门)\text{ inverter chain (反向器)的思想推广到任意逻辑(复杂逻辑门)}

P55:More for Speed —— 设计者面对哪些选择?

Logical Effort 是用来在拓扑、级数、尺寸之间快速做速度优化的。


P56:Revisit: Inverter Delay —— 从反相器 delay 重新拆分

P56 回到反相器,把负载电容分成两部分:

CL=Cint+CextC_L = C_{int} + C_{ext}

其中:

CintC_{int} 是 intrinsic parasitic capacitance,主要来自 diffusion 等内部寄生电容。

CextC_{ext} 是 extrinsic load capacitance,主要来自 wiring 和 fanout。

课件给出:tp=0.69ReqCint(1+CextCint)t_p = 0.69R_{eq}C_{int}\left(1+\frac{C_{ext}}{C_{int}}\right)

也可以写成:tp=0.69ReqCint+0.69ReqCextt_p = 0.69R_{eq}C_{int} + 0.69R_{eq}C_{ext}

这两个部分含义不同:

0.69ReqCint0.69R_{eq}C_{int} 是门本身的 intrinsic delay,也叫 parasitic delay

0.69ReqCext0.69R_{eq}C_{ext} 是外部负载造成的 delay,也叫 effort delay

delay 可以拆成“自身寄生造成的固定部分”和“驱动外部负载造成的可变部分”。

这就是后面:d=f+pd = f + p 的来源。


P57:Buffer Example —— 用 buffer chain 引出 g、p、f

img

P57 用一个 buffer chain 说明后面要用的三个符号:

pp 表示 intrinsic delay,也就是 parasitic delay。

gg 表示 logical effort

ff 表示 effective fanout,或者 stage effort。

课件右边说:ginv=1,pinv=1g_{inv}=1,\quad p_{inv}=1

意思是:所有东西都归一化到反相器。


P58:Delay in a Logic Gate —— 逻辑门 delay 的核心公式

d=gh+pd = gh + p·

img

  1. gg:logical effort
    1. 衡量这个门相对于反相器来说,驱动电流的能力有多“吃力”。
    2. 相当于门本身的性质,越复杂,g越大
  2. hh:electrical effort h=CoutCinh = \frac{C_{out}}{C_{in}}
  3. 它表示输出负载电容和输入电容之比,也常被叫作 fanout。(尝试驱动几倍于自身的吨位,可以当作是fanout)
  4. ff:effort delay
  5. f=ghf=gh
  6. 它表示这个 stage 真正承担的“努力”。
  7. pp:parasitic delay
  8. 表示无外部负载时,门自身内部寄生造成的 delay。也是门本身的性质
d=gh+p\boxed{d=gh+p}总延迟=驱动负载的延迟+门自身寄生延迟\boxed{\text{总延迟}=\text{驱动负载的延迟}+\text{门自身寄生延迟}}

Understand Logical Effort —— 为什么叫 effort?

课件说:对于同样的负载,复杂门比 inverter 更“费力”,才能达到类似速度。Logical effort 定义为:

在提供相同输出电流能力的前提下,某个逻辑门的输入电容与反相器输入电容的比值。

g=Cin, gateCin, inverterg = \frac{C_{in,\ gate}}{C_{in,\ inverter}}逻辑越复杂Cin 越大g 越大\text{逻辑越复杂} \Rightarrow C_{in}\text{ 越大} \Rightarrow g\text{ 越大}

logical effort 衡量的是“为了实现某种逻辑功能,相比 inverter 多付出了多少输入电容代价”。


Computing Logical Effort —— 怎么计算 logical effort?(依旧套用P24的基准)

img

  1. Inverter:Cin=1+2=3C_{in}=1+2=3
  2. 定义:ginv=1g_{inv}=1

  1. 2-input NAND
  2. Cin=2+2=4C_{in}=2+2=4
  3. gNAND2=43g_{NAND2}=\frac{4}{3}

  1. 2-input NOR
  2. Cin=4+1=5C_{in}=4+1=5
  3. gNOR2=53g_{NOR2}=\frac{5}{3}

所以 NOR2 比 NAND2 的 logical effort 更大:NOR 通常比 NAND 更“费力”


P61:Delay Plots —— delay 图怎么看?

img

P62:Catalog of Gates —— 常见门的 logical effort(g)

img

为什么 NOR 比 NAND 差?

因为 NOR 的 PMOS 是串联的,而 PMOS 本身迁移率低、驱动弱。为了匹配驱动能力,需要把 PMOS 做得更宽,导致输入电容明显增加。

因此在 CMOS 设计中,大 fan-in NOR 通常比大 fan-in NAND 更慢、更不划算。


P63:Catalog of Gates —— 常见门的 parasitic delay

P63 给出常见门的 parasitic delay 表。课件说,一个门的 parasitic delay 是它驱动零负载时的 delay;手算时可以粗略只数输出节点上的 diffusion capacitance。

img


P64:Parasitic Delay —— 高 fan-in 门的寄生延迟增长

P64 用更细的 RC ladder 模型估算高 fan-in NAND 的寄生延迟。

图里有一个 nn-input NAND,下拉网络有 nn 个串联 NMOS。为了保持总电阻不变,每个 NMOS 放大到宽度 nn,所以每个 NMOS 的电阻约为:

Rn\frac{R}{n}

但这样会导致内部节点电容增加为:

nCnC

输出节点还要看到 PMOS 和 NMOS 的扩散电容,大约有:

3nC3nC

课件给出的估算式是:

tpd=R(3nC)+i=1n1(iRn)(nC)t_{pd}=R(3nC)+\sum_{i=1}^{n-1}\left(\frac{iR}{n}\right)(nC)

化简为:

tpd=(n22+5n2)RCt_{pd}=\left(\frac{n^2}{2}+\frac{5n}{2}\right)RC

这说明 parasitic delay 会随着 fan-in 增加得很快,里面出现了:

n22\frac{n^2}{2}

也就是二次增长趋势。

课件还写了:

N:45N:4\sim 5

意思是高 fan-in 门通常不要做得太大。输入数到 4 或 5 以上,delay 代价已经明显变差。

这一页的核心结论是:

fan-in 很大的单级复杂门通常不是好选择,因为内部寄生 delay 会快速增长。


P65:Example – 8-input AND —— 重新理解 8 输入 AND

仅引入,具体看后面


P66:Example: Ring Oscillator —— 环形振荡器例子

img

d=gh+p=11+1=2d=gh+p=1\cdot 1+1=2

环形振荡器的周期需要信号绕环传播两次,因为一次传播只完成半个周期翻转,所以:fosc=12Ndf_{osc}=\frac{1}{2Nd}

代入:d=2d=2

得到:fosc=14Nf_{osc}=\frac{1}{4N}


P67:Example: FO4 Inverter —— FO4 反相器延迟

img

FO4 的意思是:

一个 inverter 驱动 4 个同样大小 inverter 的输入电容。d=5

所以:g=1g=1h=4p=1p=1

因此:

d=gh+p=14+1=5d=gh+p=1\cdot4+1=5

d=5 可能要记


P68:Multistage Logic Path Delay —— 多级路径 delay

P68 把单级公式推广到多级逻辑路径。课件给出几个路径级别的量:parasitic delay、path logical effort、path electrical effort、path effort。

  1. Path parasitic delay P=piP=\sum p_i
  2. 就是路径上每一级门的 parasitic delay 相加。
  3. Path logical effort
  4. G=giG=\prod g_i
  5. 就是路径上每一级门的 logical effort 相乘。
  6. Path electrical effort H=CoutpathCinpathH=\frac{C_{out-path}}{C_{in-path}}
  7. 也就是路径最终输出负载和路径最初输入电容的比值。(其实相当于每一级的h相乘)
  8. Path effort(无分支)
  9. F=fi=gihiF=\prod f_i=\prod g_i h_i
  10. 总delay
    1. D=fi+PD=\sum f_i+P

P69:Paths that Branch —— 有分支时 F=GHF=GH 不一定成立

P69 提醒:路径中如果有分支,不能简单用:F=GHF=GH


P70:Branching Effort —— 分支努力

P70 正式引入 branching effort

对某一级分支,定义:

b=Conpath+CoffpathConpathb=\frac{C_{on-path}+C_{off-path}}{C_{on-path}}

其中:

ConpathC_{on-path} 是目标路径上的负载电容。

CoffpathC_{off-path} 是不在目标路径上、但同样由该门驱动的负载电容。

  • 如果没有分支:Coffpath=0C_{off-path}=0

所以:b=1b=1

  • 如果 off-path 负载和 on-path 负载一样大:
b=C+CC=2b=\frac{C+C}{C}=2

整条路径的 branching effort 是:B=biB=\prod b_i

于是有分支时,path effort 变成:F=GBHF=GBH

整道例题

img

第二级下面那个反向器改为5,路径不变

  • G(逻辑努力):两级都是反相器,G=1×1=1G = 1×1 = 1
  • B(分支努力):在分支节点处,上支路输入电容为 15,下支路(修改后)输入电容为 5 B=15+55=4B=\frac{15+5}{5} =4
  • H(电气努力):下支路从第一级输入到最终负载的电容比 H=905=18H= \frac{90}{5} =18

所以:

F=G×B×H=1×4×18=72F=G \times B \times H = 1 \times 4 \times 18 = 72
提醒

管子里的数字可以看作管的大小,或者直接当作管子的输入电容


Summary on Multistage Delays —— 多级 delay 小结

单级门:

d=gh+pd=gh+p

其中:

g=logical effortg=\text{logical effort}h=CoutCinh=\frac{C_{out}}{C_{in}}p=parasitic delayp=\text{parasitic delay}f=ghf=gh

多级路径:

P=piP=\sum p_iG=giG=\prod g_iH=CoutpathCinpathH=\frac{C_{out-path}}{C_{in-path}}

如果有分支:

B=biB=\prod b_i

最终 path effort:

F=GBHF=GBH

这一页实际上是为下一板块做准备:下一板块会讲如何用 FF 来确定 最佳级数、最佳 stage effort、最小 delay 和每一级 gate size

六:用 Logical Effort 做路径优化,P72–P86

已知一条路径和负载,怎样选级数、插 buffer、算最小 delay,并反推出每一级门的尺寸?

P72:Designing Fast Circuits —— 快速电路设计的核心结论(F已知/级数N已知时

这一页给出 Logical Effort 最重要的优化结论:Delay is smallest when each stage bears same effort\text{Delay is smallest when each stage bears same effort}:一条路径最快时,每一级承担的 stage effort 应该相等。

提醒

前提是F已知的情况下

在总路径 effort F=ifiF=\prod_i f_i 已知、级数 NN 已知的前提下,路径优化就转化为一个数学问题:在各级 effort 的乘积固定时,怎样分配 fif_i 才能使 ifi\sum_i f_i 最小。根据算术-几何平均不等式,正数乘积固定时,和在各项相等时取得最小。因此最优情况是每一级承担相同的 stage effort,即 f1=f2==fN=f^f_1=f_2=\cdots=f_N=\hat f,其中 f^=F1/N\hat f=F^{1/N}

D=fi+PD=\sum f_i+PF=fiF=\prod f_i

那么当每一级 effort 相等时:f1=f2==fN=f^f_1=f_2=\cdots=f_N=\hat f D取最小

于是:f^=F1/N\hat f=F^{1/N}因此多级时最小路径 delay 可以写成: D=NF1/N+PD=NF^{1/N}+P


P73:Gate Sizes —— 如何反推 gate size?

img

由于f^=giCout,iCin,i\hat f=g_i\frac{C_{out,i}}{C_{in,i}},所以可以推出每一级的Cin,i=giCout,if^C_{in,i}=\frac{g_iC_{out,i}}{\hat f}

当路径总 effort FF 和级数 NN 已知时,最优每级 effort 为 f^=F1/N\hat f=F^{1/N}。为了确定各级门尺寸,利用 f^=gihi=giCoutiCini\hat f=g_i h_i=g_i\frac{C_{out_i}}{C_{in_i}} 反推出 Cini=giCoutif^C_{in_i}=\frac{g_i C_{out_i}}{\hat f}。因此实际计算时从最终负载 CLC_L 开始向前倒推,每一级根据它要驱动的负载 CoutiC_{out_i} 求出自身所需输入电容 CiniC_{in_i},而输入电容大小就对应门的宽度。最后再检查倒推得到的第一级输入电容是否满足题目给定的输入电容约束。


P74:Example: Optimize Path —— 四级路径优化例子

img

H=5H=5G=259G=\frac{25}{9}B=1B=1

所以 path effort:

F=GBH=2595=1259=13.9F=GBH=\frac{25}{9}\cdot5=\frac{125}{9}=13.9

四级路径的 best stage effort 是:

f^=F1/4\hat f=F^{1/4}f^=(13.9)1/41.93\hat f=(13.9)^{1/4}\approx1.93

这页想说明的是:一旦知道了 G,H,B,NG,H,B,N,就能很快得到每一级应该承担的 effort。后面如果要 sizing,就用 P73 的公式从后往前推。


P75-77:Example: 3-Stage Path —— 三极路径 sizing 题目(本章最重要的例子)

img

先算F

G=10027G=\frac{100}{27} (三个g相乘,前面表格中有公式)

H=458H=\frac{45}{8}(因为最终 on-path 负载是 4545,最初输入电容限制是 88。)

B=32=6B=3\cdot2=6 (2*3的分叉,且都是均分的)

F=GBH=100274586=125F=GBH=\frac{100}{27}\cdot\frac{45}{8}\cdot6=125

这条路径有 3 级,所以 best stage effort(每一级承担一样的):

f^=1251/3=5\hat f=125^{1/3}=5

parasitic delay:

P=2+3+2=7P=2+3+2=7

总 delay:

D=35+7=22D=3\cdot5+7=22

如果用 FO4 作为单位,前面 FO4 inverter 的归一化 delay 是 5,所以:

22/5=4.4 FO422/5=4.4\ \text{FO4}

最关键的一步:先算 FF,再算 f^\hat f,再估最小 delay。

算y,x

y=gCoutf^y=\frac{gC_{out}}{\hat f}y=53455=15y=\frac{\frac{5}{3}\cdot45}{5}=15x=53305=10x=\frac{\frac{5}{3}\cdot30}{5}=10

反推输入电容(检查验算)

Cin=43305=8C_{in}=\frac{\frac{4}{3}\cdot30}{5}=8

刚好等于题目给定的输入电容限制:

Cin=8C_{in}=8

推算复杂门的MOS管宽度(同样根据P24的准则,或者P60)

img

过程如上


P78:Best Number of Stages —— 最佳级数不一定最少

级数 NN每级 effort ff总 delay DD
16465
2818
3415
42.815.3

最快的是:

N=3N=3

虽然 4 级也很接近,但不是最优。

这一页说明:如果负载很大,只用一级门直接驱动会非常慢。加入 buffer chain 虽然增加了 parasitic delay,但显著降低了每一级的 electrical effort,所以总 delay 反而下降。


P79:Derivation —— 最佳级数公式怎么来的?(看看就行,非重点)

推导最佳级数

思路是:假设原来的 logic block 有 n1n_1 级,现在可以在路径末端加 inverter buffer,把总级数变成 NN

总 delay 写成:

D=NF1/N+i=1n1pi+(Nn1)pinvD=NF^{1/N}+\sum_{i=1}^{n_1}p_i+(N-n_1)p_{inv}

其中:

  • NF1/NNF^{1/N} 是所有 stage effort delay 的总和;
  • pi\sum p_i 是原始逻辑门的寄生延迟;
  • (Nn1)pinv(N-n_1)p_{inv} 是额外插入 inverter 的寄生延迟。

为了找最佳 NN,对 NN 求导并令导数为 0。

课件定义:ρ=F1/N\rho=F^{1/N}也就是最佳 stage effort。

最后得到最佳 stage effort 满足:pinv+ρ(1lnρ)=0p_{inv}+\rho(1-\ln\rho)=0

这个公式的作用是告诉我们:最佳每级 effort 不只是数学上的 ee,还要考虑每加一级 inverter 带来的 parasitic delay。


P80:Best Stage Effort —— 最佳每级 effort 大约是多少?(看看就行,非重点)

P80 继续 P79 的公式:

pinv+ρ(1lnρ)=0p_{inv}+\rho(1-\ln\rho)=0

这个方程没有简单解析解。

如果忽略 parasitic delay:pinv=0p_{inv}=0

那么:ρ=e2.718\rho=e\approx2.718

这说明纯数学上,如果只考虑 effort delay,最佳每级放大倍率是 ee

但真实 inverter 有寄生延迟。若:pinv=1p_{inv}=1

数值解得到:ρ=3.59\rho=3.59

这就是为什么工程上经常说最优 stage effort 接近 4,也就是 FO4 附近。

所以实际经验是:f^4\hat f \approx 4

这也是 P83 里用:N=log4FN=\log_4F 估算最佳级数的原因。


P81-82:Sensitivity Analysis —— 级数不必精确到完美/sizing 方向的误差也相对温和

img

img


P83:Method of Logical Effort —— 做题总流程(重要,常作为最后一道大题)

课件把 Logical Effort 方法总结为 6 步

第一步:Compute path effort

F=GBHF=GBH
  • path logical effort GG
  • branching effort BB
  • path electrical effort HH

第二步:Estimate best number of stages(N已知时不需要)

用经验公式:

N=log4FN=\log_4F

这里的 4 来自前面最佳 stage effort 接近 FO4。

如果算出来不是整数,就选附近的整数进行比较。


第三步:Sketch path with NN stages by adding buffers(N已知时不需要)

如果原路径级数不够,就加 buffer。

如果原路径级数太多,就考虑改拓扑,减少逻辑级数。


第四步:Estimate least delay

D=NF1/N+PD=NF^{1/N}+P

这里:

P=piP=\sum p_i

注意如果你加了 inverter buffer,PP 也要包括这些新增 inverter 的 parasitic delay。


第五步:Determine best stage effort

f^=F1/N\hat f=F^{1/N}

这是每一级目标 effort。


第六步:Find gate sizes

从最后一级负载开始往前推:

Cin,i=giCout,if^C_{in,i}=\frac{g_iC_{out,i}}{\hat f}

如果有分支,Cout,iC_{out,i} 必须包括 on-path 和 off-path 的总负载。

第七步:算MOS管大小

根据P24和P60的标准

具体计算参考P77


P84:Review of Definitions —— 符号总复习

img


P85:Key Take-Aways —— Logical Effort 的优点和限制

第一,logical effort 可以用数字表征不同 gate 的速度代价。

第二,最快路径通常让每一级 effort 接近 4。

第三,路径 delay 对级数和尺寸不是极端敏感。

第四,级数少不一定更快。

第五,在 CMOS 中,NAND 通常比 NOR 快。

原因是 NOR 的 PMOS 串联,PMOS 本身弱,为了匹配驱动能力需要更大W,输入电容大,所以 logical effort 更大。

第六,inverter 和 NAND2 通常比较适合驱动大电容。


P86:Summary —— 全章总结

  1. delay 和 RC delay model;
  2. complex gates 的 delay model;
  3. modern design 中的 standard cell delay;
  4. logical effort
Chapter 7:时序逻辑 Sequential Logic
Chapter 9:功耗 Power

评论区