线性延迟模型

把实际延迟 dabsd_{abs} 除以一个基准时间常数 τ\tau,得到无量纲的归一化延迟 dd。dd 是工艺无关的,因此可以作为比较电路结构优劣的标准。

d=dabsτ d=\frac{d_{abs}}{\tau}

dd 由两部分组成:

d=f+p d=f+p

其中 ff 是努力延迟(effort delay),取决于门的复杂度与扇出,是门实际在努力为负载电容充放电产生的延迟;pp 是寄生延迟(parasitic delay),是门内部的寄生电容充放电产生的延迟。当 f=0f=0(无负载电容时),dd 函数的截距(interception)即为 pp。

f=gh f=gh

gg 是逻辑努力(logical effort),表征门的复杂度。而电气逻辑(electrical effort)则表征门的扇出,其计算方式是负载(输出)电容与门输入电容的比值:

h=CoutCin h=\frac{C_{out}}{C_{in}}

逻辑努力

如何表征一个逻辑门的复杂度?选取标准反相器作为归一化的标准。一个逻辑门越复杂,它的输入电容越大。定义逻辑努力 gg 为:该门的输入电容与一个能提供相同输出电流的标准反相器的输入电容之比。

显然标准反相器的逻辑努力为 11。

计算逻辑努力时,仅需:

  • 第一步:将门按照标准反相器的有效电阻(PUN 与 PDN 分别为 RR)尺寸化(调整各部分晶体管的宽度使其 PUN 与 PDN 分别为 RR,晶体管宽度与其有效电阻成反比),使其输出电流与标准反相器一致
  • 第二步:计算该门输入晶体管的宽度之和,除以 33 得到 gg(晶体管宽度与其电容成正比,标准反相器的输入晶体管宽度之和为 pMOS 22 + nMOS 1=31=3)
常用门的逻辑努力
常用门的逻辑努力

寄生延迟

粗略估计寄生延迟的方法:输出节点 YY 的扩散电容与 3C3C 的比值(归一化,标准反相器输出节点处的扩散电容为 3C3C),单位为 τ\tau。

常用门的寄生延迟
常用门的寄生延迟

这忽略了门内部的扩散电容,比如串联 MOS 中夹着的(共享)扩散电容。因此有时会使用 Elmore 延迟模型来更准确的计算寄生延迟。

最小化路径上的努力延迟

计算多级路径(multistage path)中各级的逻辑努力与电气努力。

关注的路径(path of interest)的逻辑努力:

G=∏gi G=\prod g_i

路径电气努力(在这个定义中就考虑旁支负载 BB):

H=∏hi=∏Cout,iCin,i H=\prod h_i=\prod \frac{C_{out, i}}{C_{in, i}}

路径努力(path effort):

F=GH F=GH

注意只要路径的输入电容与负载电容不变,路径努力 FF 就与该路径上电容的尺寸无关。

考虑路径的总延迟 DD:

D=∑di=DF+PDF=∑fiP=∑pi \begin{aligned} D&=\sum d_i=D_F+P \\ D_F&=\sum f_i \\ P&=\sum p_i \end{aligned}

路径努力 F=∏fiF=\prod f_i 为一定值,为最小化路径努力延迟(path effort delay)DF=∑fiD_F=\sum f_i,每个 fif_i 均应相等。因此路径上每一级的最优努力延迟应为:

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

从后往前(路径终点的负载电容不变且已知)逐个计算第 ii 级门的最优输入电容:

f^=gihi=giCout,iCin,i⟹Cin,i=giCout,if^ \hat{f}=g_ih_i=g_i\frac{C_{out, i}}{C_{in, i}} \\ \Longrightarrow C_{in, i}=\frac{g_iC_{out, i}}{\hat{f}}

调整对应逻辑门的尺寸(宽度)以达到最优输入电容。

例题见 Lecture 5 pp. 28-32。

最优级数(一)

考虑一条 64 位的数据通路(datapath),被若干个单位反相器驱动。最优级数是多少?

单位反相器的逻辑努力 gi=1g_i=1,路径的逻辑努力 G=∏gi=1G=\prod g_i=1

路径的电气努力 F=64∏(1/1)=64F=64\prod(1/1)=64

所以有 DF=F1/ND_F=F^{1/N}

单位反相器的寄生延迟 pinv(i)≈1p_{inv}(i)\approx 1,路径的寄生延迟 P=∑pinv(i)=NP=\sum p_{inv}(i)=N

所以路径的总延迟可以表示为关于级数 NN 的函数 D=N(64)1/N+ND=N(64)^{1/N}+N

最优级数(二)

第二个场景,有一个 n1n_1 级,路径努力为 FF 的逻辑块(logic block),在其末端再加若干个单位反相器,最优总级数 NN 是多少?

增加反相器并不会改变路径的逻辑努力 GG 与电气努力 FF,但会增加路径的寄生延迟 PP。新路径的最佳总延迟为:

D=NF1/N+∑i=1n1pi+(N−n1)pinv D=NF^{1/N}+\sum_{i=1}^{n_1} p_i+(N-n_1)p_{inv}

D(N)D(N) 先降后升,令导数 =0=0,求最小化 DD 的极值点 N^\hat{N}:

dDdN=−F1/Nln⁡F1/N+F1/N+pinv=0⇒pinv+ρ(1−ln⁡ρ)=0 where ρ=F1/N^ \begin{aligned} \frac{dD}{dN}=-F^{1/N}\ln F^{1/N}+F^{1/N}+p_{inv}&=0 \\ \Rightarrow p_{inv}+\rho(1-\ln \rho)&=0 \text{ where }\rho=F^{1/\hat{N}} \end{aligned}

该式无形式解。若忽略反相器的寄生延迟(pinv=0p_{inv}=0),有级努力(stage effort)ρ=e\rho=e;通常地,有 pinv=1p_{inv}=1,此时方程的数值解为 ρ=3.59\rho=3.59。

使得总延迟最小的最佳级数为 N^=log⁡ρF\hat{N}=\log_{\rho} F。

敏感度分析

敏感度(sensitivity):当采用的级数偏离最佳值时,延迟会对这种偏离有多敏感?

延迟与最小延迟的比值(偏离度)与级数的关系
延迟与最小延迟的比值(偏离度)与级数的关系

级数在理论最佳级数的 2/32/3 到 3/23/2 之间(相应的,级努力在 2.4∼62.4\sim 6 范围内),延迟都能保持在最小延迟的 15%15\% 以内。工程上常取级努力 ρ=4\rho=4,便于快速计算合适的级数。这解释了为何 4 扇出反相器是一个代表性的逻辑门延迟单元。

一个例子:解码器设计

设计一个 4:16 解码器(decoder)

  • 16 个 word register file
  • 每个 word 有 32 位
  • 每一位负载 3 个单位晶体管(2 个单位访问晶体管电容与 1 个布线电容)
  • 输入 A[3:0]A[3:0] 自带补信号
  • 每个输入驱动最多 10 个单位晶体管

一个 2N2^N 输出的解码器,可以用 2N2^N 个 NN 输入 NAND 门来实现。做法是:对每个输入位,同时提供它的原信号和反相信号;对每一种可能的输入组合,构造一个对应的 NAND 门。该门的每个输入要么接原信号,要么接反相信号,使其只在这一种组合下所有输入为 11。这样,每个 NAND 门唯一对应一个地址组合,从而产生 2N2^N 条互斥的(低有效)选择信号。

那么,某一条(输入)地址线 address line 将会驱动 16 个字线 word line 的一半(另一半由反相信号地址线驱动),所以电路路径上的某处一定有一个 8 路扇出。

一条字线控制 3232 位的 word,共 32×3=9632\times 3=96 个单位的电容。

那么对于一条驱动 10 单位晶体管的地址线输入,其电气努力约为:

H=8×96/10=76.8 H=8\times 96 / 10=76.8

忽略逻辑努力(令 G=1G=1,即理想驱动器,延迟不受门逻辑功能的复杂度影响),有路径努力:

F=GH=76.8 F=GH=76.8

取级努力 ρ=4\rho=4,级数 N=log⁡4F=3.1N=\log_4 F=3.1;因此可以尝试 3 级设计。

3 级设计中各级的输入电容与门宽度计算见 Lecture 5 pp. 46。

由此可见逻辑努力的一个重要局限:先有鸡还是先有蛋问题(chicken-and-egg problem)。我们需要路径的具体设计来计算 GG,但没有 GG 我们又无法计算路径的级数 NN。

一些常用结论

逻辑努力是大略估计电路延迟的有效方法。

CMOS 中 NAND 门通常比 NOR 门快(PMOS 比 NMOS 慢,串联比并联慢;NAND 中 PMOS 并联而 NOR 中 PMOS 串联)。

工程上,某路径上的最佳级努力为 ∼4\sim 4。

路径延迟通常对级数与尺寸不敏感(延迟曲线在最优点附近较平)。

级数小并不意味着延迟低,最佳级数通常是 log⁡4F\log_4 F。

驱动大电容时,反相器和 2 输入 NAND 通常延迟较小。