ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

别再只盯着增益:比较器噪声、失调与延时的Cadence仿真全攻略

别再只盯着增益:比较器噪声、失调与延时的Cadence仿真全攻略 很多人刚开始做比较器设计第一反应就是问“这个比较器增益要多少 dB”。这个习惯如果是从运放设计那边带过来的我建议你先把它放到一边——因为比较器的增益远没有噪声、失调和延时这三个指标重要。这篇文章我就用 Cadence Virtuoso 环境把两级比较器预放大级 锁存级这三项指标的仿真方法和优化思路完整捋一遍全程都是可以直接照做的操作流程。标题里写“别再只盯着增益”不是否定增益而是要把增益放回它该在的位置上。对比较器来说增益只是保证精度的若干手段之一真正的性能瓶颈往往出在输入等效噪声、失调电压和传播延时上。这三个指标直接决定了比较器在 ADC、存储读出、电源管理等场景里的分辨率和速度表现也是面试、流片评审时最容易被追问的三个数字。文章会覆盖这三项指标的原理、Cadence 仿真设置、参数提取和常见陷阱无论你是刚接触比较器的学生还是想系统补全仿真流程的工程师都能直接参考。1. 为什么比较器设计里增益不是第一优先级1.1 运放和比较器差的不只是名字运放设计里增益是命根子因为在深度负反馈下闭环增益的精度直接依赖开环增益。你要运放做 10 倍闭环放大设计目标常常要 80 dB 开环增益起步就是想把误差压到 0.01% 以下。比较器完全不是这个逻辑。比较器工作在开环、大信号、限幅输出状态它要的最终结果是输出一个高电平或低电平而不是一个连续放大的模拟电压。输入差分电压只要超过某个门限输出就会被推到电源轨上这时候增益再高也没有额外收益。那增益完全没用吗也不是。比较器从输入到输出仍需要足够的增益链把输入端的微小差分电压放大到能让后级数字电路或锁存器可靠翻转的量级。但这个增益需求远没有运放那么苛刻通常两级比较器的预放大级有 3046 dB 增益就足够了剩下的“放大”任务交给锁存器正反馈去完成。1.2 增益到底需要多少一个公式就能算清楚比较器分辨率的定义是在给定输入差分电压下输出必须能可靠翻转。假设电源电压 1.8V系统要求最小可分辨的输入差分电压是 0.5mV那直观上线性增益链至少需要提供[ 20 \log_{10}(1.8 / 0.0005) \approx 71dB ]如果只有一个线性放大级你确实需要 70 dB 以上的增益才能把 0.5mV 放大到满摆幅。但两级比较器里的锁存器不是线性放大器它是正反馈再生结构理论上再生增益是随时间指数增长的。锁存器一旦触发只需要预放大级在锁存器输入端建立起一个比失调和噪声大得多的初始压差正反馈就会把这个压差迅速“滚雪球”到电源轨。所以预放大级增益的真正作用不是把信号放大到满摆幅而是把输入差分信号放大到足以克服锁存器自身失调的程度把锁存器噪声、回踢噪声折算到输入端的等效值压制到可接受水平为锁存器提供足够大的初始差分电压缩短再生时间。用一个工程经验公式来表达[ V_{os,in} \approx V_{os,pre} \frac{V_{os,latch}}{A_{pre}} ]如果锁存器失调是 10mV预放大级增益是 20 倍那么输入参考失调里锁存器贡献的分量是 0.5mV增益提升到 40 倍这个分量降到 0.25mV。这就是“别再只盯着增益”的含义——预放大级增益只要能做到 3046 dB把锁存器失调和噪声压制到系统精度要求以下就够了。再往上加增益需要消耗额外的功耗和面积还会因为带宽下降把延时做差纯属得不偿失。2. 两级比较器的设计逻辑预放大级和锁存级各管什么2.1 第一级预放大精度担当经典两级比较器的第一级是预放大级核心结构是输入差分对加有源负载。输入对管通常用 PMOS 或 NMOS 差分对尾部接一个电流源提供偏置电流有源负载用电流镜或交叉耦合负载把差分电流变成差分电压。预放大级承担三件事。第一提供前面算过的增益把输入信号放大到足以驱动锁存器的水平。第二把锁存器失调和噪声折算到输入端的贡献除以增益倍数。第三隔离作用——锁存器再生阶段会在输入端产生剧烈的电荷注入和电压跳变这就是所谓的回踢噪声预放大级能把这个跳变部分隔离在内部节点避免污染输入信号。偏置电流的选择直接影响噪声、失调和带宽。差分输入管的跨导 gm 与尾电流的平方根成正比而输入参考热噪声电压谱密度反比于 gm 的平方根增加尾电流能同时改善噪声和带宽但功耗会上升。输入管的面积则主要影响失调和 1/f 噪声。按 Pelgrom 模型阈值电压失配的标准差[ \sigma_{Vth} \frac{A_{VT}}{\sqrt{W \cdot L}} ]A_VT 是工艺常数W 和 L 是输入管尺寸。把输入管面积做大失调才能下降。这也是后面蒙特卡洛仿真中输入管尺寸对失调分布影响最明显的物理原因。2.2 第二级锁存速度担当第二级是交叉耦合的锁存器通常由两个反相器首尾相接构成或者用差分对的交叉耦合负载实现。锁存器工作的核心机制是正反馈再生内部节点上的一个微小差分电压ΔV会在每个再生时间常数里被放大 e 倍。再生时间常数的表达式[ \tau C_{L} / g_{m} ]C_L 是锁存器内部节点的等效电容g_m 是再生管的跨导。锁存器从初始压差ΔV_0 放大到输出摆幅 VDD 所需的时间大约是[ t_{latch} \approx \tau \cdot \ln(V_{DD} / \Delta V_0) ]从这个公式能看出两个关键结论锁存器再生时间与初始压差成对数关系。预放大级增益每提升一点初始压差变大延时下降但收益是对数级的锁存器速度与 gm/C_L 成正比增大再生管跨导、减小节点电容是提速的主要手段。2.3 仿真前先列好指标清单在打开 Cadence 之前先把指标列清楚。我建议按下面这张表来准备仿真项目每一项后面跟着对应的仿真方法后面几节会逐个展开。性能指标典型目标参考Cadence 仿真方法输入参考噪声 1 mVrmsnoise 分析 / 瞬态噪声输入失调电压 1 mV3σMonte Carlo mismatch传播延时 5 nstran cross 函数回踢噪声幅度/恢复时间满足系统要求tran 观察输入节点扰动功耗按系统预算dc / tran 平均功耗没有这些数字仿真就变成“跑完看结果”而不是“验证设计是否达标”。我在实际项目里见过太多次仿真跑了几天出来的波形很好但复盘时发现当初根本没定噪声和失调的目标值最后在芯片回来测试时才出了问题。3. Cadence 噪声仿真输入参考噪声的两种标准做法3.1 方法一AC 噪声法把比较器“钉”在亚稳态比较器在翻转点附近的工作状态其实等价于一个高增益线性放大器——输入差分电压非常小输出摆幅在中点附近各路晶体管都工作在饱和区。这个状态叫亚稳态也是比较器噪声分析的关键前提。在 Cadence Virtuoso 里操作时先搭一个专用测试电路把两个输入端短接接到一个共模电压 VCM 上。VCM 的选择要让比较器输出落在 VDD/2 附近。比如电源 1.8V可以先把 VCM 设为 0.7V跑一个 dc 扫描看输出是否在中点不在就微调 VCM。这个过程就是“把比较器钉在亚稳态”。接着在 ADE L 里设置 noise 分析类型选 noise频率范围根据预放大级带宽来定比如预放大级 -3dB 带宽是 50MHz扫描就设 1Hz 到 100MHz输出节点选比较器输出端输入源选比较器的正输入端或负输入端。仿真完成后用 Results → Direct Plot → Main Form → Noise Summary 勾选 Input Referred就能看到输入参考噪声谱密度。然后对噪声谱积分得到 RMS 噪声值。在计算器里对 vn 曲线做积分运算或者直接看集成噪声报告里的数值。这里有个工程问题积分带宽上限怎么定。热噪声是白噪声积分带宽越大RMS 结果越大但实际系统的噪声带宽是有限的。我常用的做法是取预放大级 -3dB 带宽的 1.5 到 3 倍作为积分上限。取太小会把实际贡献的高频噪声漏掉取太大则会把超出系统带宽的噪声也算进来数值偏悲观。如果比较器是带时钟采样的结构还要额外考虑采样噪声也就是 kT/C 噪声。这部分噪声由采样开关导通电阻产生在 pss pnoise 分析里才能完整看到。3.2 方法二瞬态噪声法看输出抖动AC 噪声法简单快捷但它有一个内在假设比较器稳定工作在亚稳态附近。实际应用里比较器输入信号往往是动态变化的不同时刻工作点都不同有些动态锁存器结构甚至没法稳定在亚稳态。这时就要用瞬态噪声仿真。在 ADE L 里打开 tran 分析勾选 Noise 选项。输入激励用一个慢斜坡或接近实际应用的输入波形。比如给正输入端接一个斜坡信号斜率设为 0.1V/μs在斜坡穿越参考电压的时刻附近比较器输出会发生翻转。由于噪声的存在每次瞬态仿真输出翻转的时刻都会有一点点不同这个时间抖动直接用计算器统计出来。时间抖动换算成等效输入噪声的方法是[ V_{n,rms} \sigma_t \times (dV_{in}/dt) ]σ_t 是输出翻转时刻的标准差dV_in/dt 是输入斜坡的斜率。举个例子斜坡斜率 0.1V/μs统计 100 次瞬态仿真输出翻转时刻的标准差是 10ns等效输入噪声就是[ 10 \times 10^{-9} \times 0.1 \times 10^6 1mV ]瞬态噪声仿真非常费时间样本数量不用一上来就 100 次先跑 10 次看个大概趋势再逐步增加。设置仿真时长时要保证斜坡信号穿越比较器翻转点的前后有足够的余量否则容易截断波形。3.3 噪声仿真中容易踩的坑第一个坑AC 噪声法仿真时比较器没有真正处于亚稳态。工作点飘到饱和区之外噪声结果完全失真。判断方法很简单跑完 dc 仿真后看一下输出节点电压必须在 VDD/2 附近。第二个坑积分带宽乱设。我见过有人把积分上限设到 1GHz噪声结果比 100MHz 上限大了三四倍还以为电路出了问题。实际上只是积分上限不合理。第三个坑把锁存器噪声漏掉。AC 噪声法在亚稳态工作点分析的噪声主要是预放大级和部分锁存器在平衡点附近的噪声。但动态锁存器在再生阶段正反馈会把锁存器内部噪声直接放大这部分贡献在 AC 噪声法里是看不全的。严格的做法是用 pss pnoise 做周期稳态噪声分析把采样噪声、再生噪声完整提取出来。对比项目AC 噪声法瞬态噪声法适用结构开环比较器、可稳定在亚稳态的结构动态比较器、真实信号激励仿真速度快慢输出结果输入参考噪声谱密度和 RMS翻转时刻抖动可换算为输入噪声对锁存器噪声部分体现完整体现只要激励合理4. Cadence 失调仿真蒙特卡洛分析的正确打开方式4.1 先分清系统失调和随机失调失调和噪声是两类完全不同的问题。噪声是随机的、瞬时的失调是确定性的在特定样本上但样本间随机分布的。一个具体芯片的失调固定不变但不同芯片之间的失调是随机分布的。从设计角度失调分两种来源。系统失调来自电路结构不对称、版图不匹配、共模电压变化和电源变化。这类失调是“可以设计掉的”。比如输入对管版图采用 common-centroid 布局、负载镜完全对称、电源走线对称都能减小系统失调。随机失调来自制造工艺中阈值电压、栅氧厚度、沟道尺寸的随机涨落无法通过版图完全消除只能把器件面积做大来摊薄。Pelgrom 模型是理解随机失调的物理基础。阈值电压失调的标准差反比于器件面积的平方根所以增大输入管面积是减小随机失调最直接的手段。这也是为何高精度比较器的输入管尺寸通常都很巨大面积往往占整个比较器的一半以上。4.2 Monte Carlo 仿真的具体设置Cadence Virtuoso 的 Monte Carlo 仿真一般在 ADE XL 里配置。前提是工艺库支持统计模型通常库文件里有一个 mc 视图或者带 statistical 信息的模型文件。没有这个支持Monte Carlo 就跑不起来。配置步骤在 ADE XL 中新建一个 Analysis仿真类型根据你要提取的指标决定。提取失调电压通常用 dc 仿真让输入电压从一个低于参考电平的值扫描到高于参考电平的值记录输出翻转点在 Monte Carlo 选项里选择 Distribution。提取失调用 mismatch only 就够了Process 是工艺角全局变化mismatch 是器件间随机失配。两者都选会跑出最坏情况但仿真成本和数据分析复杂度也会上升样本数选择。先跑 50 个点看分布形状稳定后可加到 200500 个点。工程上 200 个点的 3σ 估计误差大约在 10% 左右完全够用每个样本跑一次 dc 扫描记录翻转阈值这个阈值减去典型值就是该样本的失调电压。参数推荐配置分布类型mismatch only初跑/ process mismatch终验样本数50 初跑200500 终验仿真类型dc 扫描数据提取输出翻转阈值 → 减去典型值4.3 从仿真数据里提取输入失调提取失调最笨的方法是每个样本跑完整的 dc 传输曲线看输出翻转的输入电压。这样做精度高但每个样本的仿真时间都较长200 个样本可能要跑几个小时。更高效的做法是用双斜坡法。给正输入端和负输入端分别加斜率相同、方向相反的斜坡信号跑 tran 仿真统计输出翻转时间。如果比较器没有失调翻转发生在两个斜坡交汇的时刻有失调翻转时刻会提前或延后。翻转时刻偏差乘以斜坡斜率就是失调电压。这个方法一次 tran 仿真就能跑完所有样本速度比 dc 扫描快很多精度对工程应用也够了。在 CSDN 和 EETOP 上有不少工程师分享过同一个经验提取失调之后再减去典型值比直接看绝对翻转阈值更直观因为绝对阈值包含了参考电压信息而失调只关心样本与典型值之间的偏差。有一种常见错误是直接把蒙特卡洛统计直方图的中心值当成失调——那只反映系统失调随机失配要看 σ 值。以我之前做过的一个 preamp latch 比较器为例典型翻转阈值 0.9V300 个 Monte Carlo 样本统计出翻转阈值标准差 0.82mV那么[ \text{失调 3σ} 3 \times 0.82 2.46mV ]这个值要与系统精度要求对比。如果系统要求 10bit 精度、参考电压 1.8VLSB 是 1.76mV那么 3σ 失调 2.46mV 已经超过一个 LSB设计需要改进。5. Cadence 延时仿真用两个 cross 动作测传播延时5.1 延时定义和测试激励怎么给比较器传播延时最通用的定义是输入信号越过参考阈值到输出信号越过 VDD/2 之间的时间差。这个定义对所有类型的比较器都适用也最容易在 Cadence 计算器里测量。测试激励分两类。阶跃激励最直观正输入端从 (Vref - ΔV) 阶跃跳到 (Vref ΔV)ΔV 就是你关心的输入过驱电压。比如 Vref 0.9VΔV 5mV那么输入从 0.895V 跳到 0.905V观察输出从高到低或者从低到高翻转的时间。另一种是斜坡激励更接近真实应用场景。输入信号以固定斜率穿越参考电压。这时延时的测量点不是阶跃的起始时刻而是斜坡穿越 Vref 的时刻。这种激励方式可以同时评估比较器对慢变化信号的响应能力。输出端必须接负载电容。这个负载电容代表后级数字逻辑的输入电容、版图寄生电容等。不加负载电容测出来的延时通常会偏小 30% 以上对设计指导意义有限。工程上常用的负载是 100fF 到 1pF根据实际应用定。5.2 用计算器 cross 函数精确测量在 Cadence Virtuoso 的波形窗口里手动量延时既慢又容易出错。我用的是计算器里的 cross 函数。表达式是这样的cross(VT(/out) 0.9 1 rising) - cross(VT(/inp) 0.9 1 rising)cross 函数四个参数分别是待测量信号的电压表达式、阈值电压、信号沿方向rising/falling、查找次数。上面这个表达式就是从输入信号第一次从下往上穿过 0.9V 的时刻开始到输出信号第一次穿越 0.9V 的时刻结束两者相减就是传播延时。在 ADE L 的 Outputs 里可以直接把这个表达式设成输出变量跑完仿真自动计算。如果输入是阶跃信号测量起始点不是 cross 的时刻而是阶跃发生的时刻表达式要相应调整。5.3 参数扫描过驱电压和延时曲线比较器延时与输入过驱电压的关系是评估速度性能的经典曲线。用小过驱电压延时大增大过驱电压延时逐渐逼近一个极限值。在 Cadence 里做参数扫描可以在 ADE XL 里把过驱电压 ΔV 设成变量从 1mV 扫到 100mV用对数步进。每个点跑一次 tran 仿真记录延时。最后画出一条延时 vs 过驱电压曲线。这条曲线有双层意义。第一它直接告诉你在系统能提供的最小输入差分电压下比较器的延时是否满足时序要求。第二它把两级比较器的延时分解成了一个清晰的物理模型。预放大级主导的延时对过驱电压不敏感锁存器主导的延时则与 ln(VDD/ΔV_0) 近似成正比。曲线上延时急剧上升的区域就是锁存器再生能力不足以支撑小信号的区域。5.4 延时仿真里的边界条件延时仿真结果的有效性与测试条件强相关。以下这几个边界条件我在实际项目中都踩过第一输入共模电压对延时的影响。输入共模不同输入管工作点就不同gm 随之变化延时也会漂移。延时仿真至少要在两个极端共模电压下各跑一遍看延时变化范围是否符合系统要求。第二电源噪声和地弹噪声的影响。热搜词里有“地弹噪声”这个东西在高速比较器延时仿真中非常现实。电源上叠加的噪声会直接影响锁存器翻转速度和逻辑电平门限。严谨的做法是在电源上叠加一个正弦扰动或者真实测得的电源纹波跑瞬态仿真看延时是否恶化。第三复位时间。比较器的工作周期是“复位 比较”。传播延时只衡量了比较阶段的一半时序复位时间同样影响最高工作频率。动态锁存器复位阶段如果太慢整个比较周期会变长这在仿真时很容易被直观的传播延时掩盖。6. 三个指标一起调优的实战经验噪声、失调和延时的取舍6.1 噪声和失调不要一上来就一起优化设计工程师最容易犯的错误是把噪声和失调混在一起一次调一堆参数最后分不清谁改善了谁。我的做法是先分开定位。如果失调超标先看是不是系统失调占大头。用共模电压扫描就能暴露系统失调的趋势。若趋势明显优先改版图对称性和电路拓扑如果噪声超标先看噪声主要贡献节点。Cadence 的 Noise Summary 能直接列出每个器件对总噪声的贡献占比。一般贡献最大的是输入管和预放大级负载管针对性加大器件尺寸或偏置电流。无论先调哪个每次只动一个维度。调完立刻重新仿真记录变化趋势。这样迭代几十轮后手上就有一张参数-指标映射表后续设计可以直接查表选初值。6.2 功耗、速度、精度的三角权衡用我之前做过的一个真实案例来演示权衡过程。初始设计参数预放大级尾电流 20μA输入管尺寸 W/L 20μm/1μm预放大级增益约 20dB锁存器再生管 gm 200μS输出负载 200fF。第一轮噪声仿真输入参考噪声 3.2mVrms目标 1mVrms噪声超标明显。提高尾电流到 40μA输入管面积加倍噪声降到了 1.4mVrms目标达成。但第二轮延时仿真发现传播延时从 3.5ns 恶化到了 5ns。原因是输入管尺寸增大预放大级输出的寄生电容变大了锁存器初始压差的建立变慢。第三轮优化锁存器把再生管宽度加大gm 从 200μS 提升到 350μS同时把锁存器内部节点电容尽量用版图布线减小。延时从 5ns 拉回到 4.2ns。整个比较器功耗从 40μW 涨到 90μW。最终选定 70μW 左右的折中点噪声 1.3mVrms、延时 4ns、失调 3σ 约 2.4mV。相比初始设计噪声改善了 2.5 倍延时代价只有 20%功耗代价可以接受。这个迭代过程跟教科书里漂亮的理论曲线不一样但这就是真实设计的样子——没有免费的午餐每一次性能提升都要付账单。6.3 流片前的最终验证清单最后一次仿真验证按下面这张清单逐项确认检查项验证方法通过标准输入参考噪声noise 分析 瞬态噪声交叉验证两种方法结果偏差小于 20%输入失调电压Monte Carlo mismatch300 样本3σ 满足精度要求传播延时过驱电压扫到系统最小差分信号最坏共模 最坏工艺角下满足时序复位时间tran 仿真测量复位 比较总周期满足最高工作频率功耗dc tran 平均功耗满足系统预算功能正确性方波激励 随机码激励输出逻辑与输入关系正确这个清单是我每次流片前都会挂在屏幕旁边的东西。单看每一项都不是高深技术但合在一起能避免绝大多数“仿真通过、芯片翻车”的尴尬局面。顺带说一个小技巧每次在 Cadence 里调整完电路参数我会在 ADE XL 里把所有核心指标一次性跑完并导出 CSV 保存。这样每次迭代后的数据都留了一个存档流片回来测试不达标时能迅速回看是哪一版设计引入了回归问题。比起在微信聊天记录里翻找仿真截图这个习惯能省下一个通宵。
返回列表