门延时的定义
传播延时的定义
上升/下降时间的定义
污染延时的定义
当输入发生变化时,输出至少在污染延时内保持它原来的值不变,并且至多在传播延时之后就改变为它的新值
到达时间
positive slack 表示电路满足时序约束
晶体管级仿真器,例如 SPICE
每个晶体管的行为都用微分方程来建模
通过数值方法求解这些微分方程
模型阶数越高,精度越好
主流的基于查找表(LUT)的 EDA 工具
对每个标准单元使用两个或更多查找表
针对不同的工艺角 / 阈值电压 / 电源电压分别建立表格
速度快但精度没那么高的解析模型
例如:RC 梯形模型
注意 VTC 中每个管子的工作区是如何变化的
必须记住
Unit NMOS :
Unit PMOS :
因此为了平衡上升、下降时间,我们可以把PMOS的宽度做成NMOS两倍
影响反相器延时的四个关键因素
输出负载
器件尺寸
P/N尺寸比
输入转换斜率(Input slew):Input slew 指输入信号从低到高或从高到低变化的快慢。
会产生更大的
假设 NMOS 尺寸保持不变,只逐渐增大 PMOS 尺寸。
增大 PMOS 宽度,PMOS 的等效电阻减小,充电能力增强
同时,会导致更大的 PMOS 结电容需要被放电,因此会导致 H→L 延迟增大。
Input Slew(上升/下降时间)
随着输入上升时间
原因:输入信号如果变化很慢,NMOS 不是瞬间完全导通,而是在一段时间内逐渐导通。这样输出节点放电速度会变慢,所以输出从高到低的延迟会增大。
对于较老的工艺,这种关系几乎是线性的。
对于 32 nm 及以下的先进工艺,这种关系会变成非线性。
在 3 输入 NAND 门中标出栅电容和扩散电容。
导通的晶体管可以看作电阻
上拉网络或下拉网络可以建模为 RC 梯形网络
随着扇入数增加,延迟会近似按平方关系恶化
估算一个 3 输入 NAND 门在驱动
非常重要的一页,必须全部搞清楚
我们之前假设每一个源极 / 漏极扩散区都有接触孔。
好的版图设计会尽量减小扩散区面积
例如:3 输入 NAND 门的版图可以共享一个扩散接触。
可以使输出电容减少
合并没有接触孔的扩散区也可能进一步有帮助。
除了前面提到的因素之外,复杂门电路的延迟还取决于输入模式。
大多数时候,设计者更关心最坏情况延迟,而不是最好情况延迟。
前提假设
扇出电容占主导
渐进式尺寸调整
按照自下而上的顺序,NMOS 晶体管尺寸逐渐变小
最靠近输出端的 FET 尺寸最小
可将延迟降低约 20%
但随着工艺尺寸缩小,由于寄生电容更高,这种优化收益会降低
用 buffer 把前面的逻辑门和后面的大负载隔开,避免前级逻辑门直接驱动很大的负载电容。
对于每一种组合逻辑单元族:
有
对于每种
设计者需要从单元库中选择合适的单元尺寸和器件类型,使得:
满足所有时序约束,例如延迟约束
总功耗最小化
通常,一个逻辑路径的输入电容是受限制的
逻辑电路还需要驱动一定的电容
例子:Intel 微处理器中的 ALU 负载为 0.5 pF
如何调整 ALU 数据通路的尺寸,以获得最大速度?
我们已经在反相器链中解决过这个问题——能否把它推广到任意类型的逻辑?
逻辑努力是一种用于做出这些设计决策的方法
使用简单的延迟模型
允许进行粗略的快速估算
帮助在不同方案之间进行快速比较
强调其中显著的对称性
反相器链中每一级的传播延时
一般化
用与工艺无关的单位来表示延迟:
与负载电容成正比
又包含两个部分:
对反相器而言:g = 1
表示逻辑门驱动自己内部扩散电容所需要的时间
由内部寄生参数决定
是门本身固有的,并且与外部负载无关
其中:
大约为:
65 nm 工艺中:约 3 ps
0.6 μm 工艺中:约 60 ps
为什么叫 “努力”?
对于给定负载,复杂逻辑门 相比 反相器 需要“更加努力”工作,才能达到类似的速度
逻辑努力定义为:
对反相器而言,逻辑努力定义为:
逻辑努力会随着逻辑门复杂度的增加而增大。输入个数增加,逻辑努力增大
根据定义,“能提供相同输出电流”要求,逻辑门与反相器的等效电阻相同
为什么反相器的
2 输入 NOR 门又怎么样?(也是
解释:
寄生延迟 (本征)
标准反相器中,输出节点连着:
一个 PMOS 的漏端
一个 NMOS 的漏端
PMOS 宽度为 2,NMOS 宽度为 1,则输出扩散电容大约正比于:
用公式7对其归一化:
2 输入 NAND 输出节点连接的扩散电容包括:
两个 PMOS 漏端:
一个 NMOS 漏端:
所以总输出寄生电容约为:
与反相器的基准
所以 NAND2 的寄生延迟约为 2。
Tristate / mux:三态门 / 多路选择器
注意,NAND和NOR门的寄生延时一样,
计算 N 输入与非门 空载时 的低电平寄生延时
可见,寄生延时随输入数目N的增长大于线形增长
g 相乘为整个路径逻辑努力大小
估算一个 N 级环形振荡器 的振荡频率
逻辑努力(反相器定义为1):
电气努力(输出和输入电容比):
寄生延迟(反相器定义为1):
级延迟(d=f+p=gh+p):
频率:
估算一个 扇出为 4 的反相器(fanout-of-4, FO4 inverter) 的延迟
逻辑努力:
电气努力:
寄生延迟:
级延迟:
多级逻辑路径延迟
逻辑努力可以推广到多级网络
必须记住的结论:逻辑努力与尺寸无关,电气努力与尺寸有关
寄生延迟
路径逻辑努力
路径电气努力
路径努力
注意这个式子恒成立
对于有分支的路径 F = GH 不再成立
分支努力。引入分支努力(branching effort),用来计入路径各级之间的分支影响。
理解:
若没有分支,
若有额外分支负载,
注意,把路径上每一级的分支努力都乘起来,就是整条路径的总分支努力
各级电气努力的积,实际上是 BH ,而不只是 H 。
现在的路径努力:
多级延迟总结
寄生延迟
路径逻辑努力
路径分支努力
路径电气努力
路径努力
加入额外反相器时,
设计快速电路
其中 。路径延时
当每一级承担相同的努力时,延迟最小
因此,
这表明,一条路径的最小延时可以在只知道级数、路径努力、寄生延时的情况下估算出来,而不需要事先确定晶体管的尺寸。
为了获得最小延迟,门应该做多宽?
电容转换公式(Capacitance Transformation)
从后往前推,根据每个门所驱动的负载,利用电容变换求出各级门的输入电容。
通过检查输入电容是否满足输入端规格要求,来验证计算结果。
计算每一级的最优路径努力
选定 x 和 y 的尺寸,让 A 到 B 的延迟最小
把路径上每一级门的逻辑努力相乘:
就是终点负载除以起点输入电容:
第一级输出分到 3 个 x 门,所以分支因子是 3
第二级输出分到 2 个 y 门,所以分支因子是 2
所以:
因为一共有 3 级,最优时每一级 effort 应该相等:
最优情况下,每一级都应该做到
寄生延迟(牢记定义,每一级空载时):
最优总延迟:
又因为 FO4 延迟 = 5,所以:
用公式:
从最后一级往前推。
最后一级门的输出负载就是 45,且它的逻辑努力
第二级门不仅驱动主路径上的
于是:
第一级输出驱动 3 个
于是第一级输入电容应为:
正好和题目给的 A 端输入电容 8 一致,说明尺寸选对了。
原笔记中的这张配图源文件已丢失,待补充。
最佳级数
一条路径应该使用多少级?
级数最少不一定最快
例子:用单位反相器驱动 64 位数据通路
右图比较了不同级数的结果:
所以 3 级最快。
考虑在路径末端增加若干个反相器
加多少个时延迟最小?
定义最佳的每级努力:
则有
最佳级努力
上式没有闭式解
忽略寄生延迟(
当
这就是 FO4 的原因之一。
延迟对“恰好使用最佳级数”有多敏感?
当
时,延迟仍在最优值的 15% 以内
我们可以不用卡得那么死
级数比最优值稍多一些,通常“没那么糟”
沿任意尺寸调整方向,惩罚都相同(门尺寸比最佳值大一些或小一些,带来的延迟惩罚是对称的)
路径最快时,每一级的 effort 大约取 4 左右
逻辑努力法适合在不考虑面积/功耗代价时思考电路延迟
数值化的逻辑努力可以表征各类门
当每级努力延迟约为 4 时,路径最快
路径延迟对级数、尺寸的敏感性较弱
级数更少不一定意味着路径更快
在 CMOS 中,NAND 比 NOR 更快
反相器和 NAND2 最适合驱动大电容
它提供了一套讨论快速电路的语言
但需要练习才能熟练掌握
它没有计入互连或转换时间(slew)的影响
它追求的是最高速度
不是在给定延迟约束下的最小面积/最小功耗