
做模拟IC的应该都有这种经历好不容易搭好一个全差分运放直流仿真一看输出电压全贴到电源轨上去了怎么调管子尺寸都没用。我第一次遇到这个情况时还以为是电路接错查了整整半天最后同事提醒了一句——全差分运放如果不加共模反馈输出共模就是没娘的孩子想在哪漂就在哪漂。这句话我现在还记得。从那以后“全差分运放开关电容共模反馈”就成了我做开关电容类电路时的标准套餐也是今天这篇博文想聊透的东西。这篇内容主要围绕一个在流水线ADC、SAR ADC、Sigma-Delta调制器、开关电容滤波器里绕不开的模块全差分运算放大器的输出共模稳定方案。具体说是用开关电容方式实现共模反馈CMFB而不是那种用电阻分压加误差放大器的连续时间方案。我尽量把原理、参数计算、仿真方法、版图注意事项和踩坑经历都写出来适合正在做运放设计的研究生、初级模拟工程师以及准备流片却对CMFB稳定性没底的朋友。1. 为什么全差分运放必须配共模反馈1.1 全差分结构的核心优势全差分运放相比单端运放最直观的好处是输出摆幅翻倍。在2.5V电源电压下单端输出最多从0.3V到2.2V摆幅也就1.9V左右而差分输出正负两端各摆1.9V差模信号就是3.8Vpp。对ADC前端而言这意味着同样的电源电压下能把输入满量程做得更大信噪比直接获益。第二个优势是偶次谐波抵消。MOS管的Ids-Vgs特性天然存在平方律和更高阶非线性单端结构里这些非线性直接变成输出失真而全差分结构里的二阶分量会在两个输出端相减时自然对消。做高线性度开关电容电路的人几乎没有理由不用全差分。第三个优势是对电源和衬底噪声的抑制。单端运放里电源上的一点纹波会直接串到输出全差分结构则可以把这类共模干扰当作共模信号处理只要共模反馈环路正常工作它对差分输出的影响就很小。1.2 共模失控的本质原因问题在于全差分结构把差分信号处理好了却把共模电平给“放养”了。单端运放里输出节点只有一个反相输入端有直流反馈电阻网络或者钳位二极管总能把输出拉到预定的直流工作点。全差分运放不一样它有两个输出端输入差分管尾电流源和负载电流源的匹配再完美实际流片后也必然存在失配这个失配电流没有地方泄放结果就是输出共模电压慢慢往一个方向的电源轨上跑。跑偏的后果很直接输出管子脱离饱和区增益崩掉带宽也跟着完蛋。而且共模漂移还会通过寄生电容耦合到差分路径上导致信号链路的有效精度大幅下降。可以说全差分运放如果没有共模反馈就像一台没有方向盘的汽车直行还行稍微一个扰动就直接冲出路基。1.3 三种共模反馈方案怎么选业内常用的共模稳定方案有三大类连续时间电阻反馈、连续时间误差放大器反馈、开关电容反馈。我在不同项目里都试过简单对比一下。电阻反馈是最偷懒的做法在两个输出端之间接一对等值电阻拿中点电压跟理想共模参考Vref_cm作比较再用一个辅助放大器去调整电流源。优点是完全连续、不占用时钟相位缺点是电阻会分走一部分输出电流损害运放的开环增益而且阻值小了功耗大阻值大了共模检测点带宽又不够。适合那些对增益要求不极端、对面积功耗不太敏感的老式设计。误差放大器式CMFB是在运放内部专门加一个误差放大器实时比较输出共模和参考输出控制信号调尾电流源。这种方案连续性好、带宽高但误差放大器本身有失调、有噪声还会增加功耗和版图面积设计复杂度明显更高。开关电容CMFB则是在开关电容应用场景里几乎最优雅的方案。它利用电容采样输出共模电压再通过电荷重分配产生控制电压。最大的好处是不消耗静态功耗——只有开关翻转那一下有动态电流不会像电阻那样影响运放增益而且它天然适合那些主信号路径本来就是开关电容的电路时钟域完全同步不需要额外生成模拟控制环路。所以我的建议很明确只要你的运放用在开关电容电路里优先考虑开关电容CMFB如果你的运放是连续时间工作比如驱动一个电阻负载那就老老实实用连续时间方案。2. 开关电容CMFB的工作原理拆解2.1 一句话版原理把开关电容CMFB想成一种“采样-比较-保持”的电荷泵。它在某一相时钟里把输出共模电压采样到电容上然后在另一相时钟里把这个电容和一个参考电容进行电荷重分配得到一个新的控制电压去调运放内部电流源的栅极形成一个负反馈。这个控制电压只在特定相位更新一次其余时间靠电容保持。打个比方你房间温度不稳定你找一个管家每隔一段时间来看一眼温度计记在小本子上然后根据本子上的记录决定要不要开空调。管家不用一直盯着温度计这样做功耗自然低。2.2 两相时钟下的电荷转移过程以最常见的“采样电容保持电容”结构为例。假设有两个采样电容Cs1、Cs2分别接运放的正负输出Vout、Vout-还有一个保持电容Ch接在控制管栅极和参考共模Vref_cm之间。时钟相位φ1是采样相。Cs1的上极板接Vout下极板接到Vref_cmCs2的上极板接Vout-下极板也接到Vref_cm。这样一来Cs1和Cs2上存储的电荷就分别反映了“正输出与参考的差值”和“负输出与参考的差值”。如果正负输出完全对称两个电容上的电荷方向相反总量为零如果输出共模偏离了参考两个电容上的总电荷就不再抵消。时钟相位φ2是求差相。Cs1和Cs2的下极板从Vref_cm断开连到一起接到控制管栅极同时保持电容Ch并联在栅极和参考之间。这时Cs1、Cs2、Ch三者之间发生电荷重分配。最终的控制栅电压变化量正比于采样电容与总电容之比再乘以输出共模与参考的偏差。这正好构成了负反馈如果输出共模偏高φ2得到的控制电压会朝某个方向改变驱动输出共模回落到参考值如果输出共模偏低则朝反方向调整。方向和极性需要在电路里确保正确不然会变成正反馈直接振荡。2.3 小信号模型和反馈系数从传输函数角度把这套东西简化从检测电容到控制栅的电荷传输相当于一个采样保持器其直流增益约等于反馈系数ββ Cs / (Cs Ch Cp)。其中Cp是控制栅节点上的总寄生电容包括开关的扩散电容、走线电容、控制管栅电容。如果用这种CMFB结构稳定一个全差分运放共模环路里存在两条路径一条是通过运放本身的共模增益把控制栅电压变化转化为输出共模变化另一条是CMFB检测网络把输出共模采样回来。整个环路增益近似为A_cm_loop × β其中A_cm_loop是运放控制端到输出共模的增益。由于开关电容网络只在每半个时钟周期工作一次等效成一个离散时间环路闭环稳定条件跟连续时间环路不完全一样但定性规律还是类似环路增益过高容易振荡主极点要足够低第二极点离远点。实际设计里通常把主极点设为输出端到地的共模负载电容也就是两个输出端各自到地的寄生和负载电容的并联这个电容往往不小所以CMFB环路大多能稳定但前提是β不能取太大。我见过有人在PMOS输入对管运放里把CMFB的采样电容取到1pF结果环路增益偏高共模信号在时钟边沿附近出现明显振铃。3. 从零到一的完整电路设计与参数计算3.1 主运放拓扑选择Folded-Cascode做中高速开关电容电路比如12bit 100MS/s流水线ADC里的MDAC运放一般首选Folded-Cascode结构。它输出摆幅中等增益可以做到60到80dB带宽够而且结构对称适合加CMFB。以一个0.18μm CMOS工艺、电源2.5V的设计为例。全差分输入PMOS输入对管负载用NMOS cascode输出级用PMOS和NMOS cascode叠起来CMFB控制管放在输出级。输出电压共模目标设为1.25V也就是电源电压的一半这样摆幅最大化。为什么输入管用PMOS而不是NMOS0.18μm工艺下PMOS的1/f噪声比NMOS小不少对于ADC前端这种对低频噪声敏感的场景更友好而且输入共模电平放在1.25VPMOS输入对管的源端可以到2.0V左右也不会压到电源轨。当然如果工艺里NMOS性能明显更好输入共模又偏低的场合反过来用NMOS输入也没问题CMFB的控制极性相应调整就行。CMFB控制管的接法我建议接在输出端的上拉电流源那一侧。换句话说控制电压调的是PMOS负载电流源的栅极。这样做的好处是控制效率高因为PMOS管的跨导大一点栅压变化就能吸收足够大的共模电流而且输出共模偏高时控制电压会把PMOS负载电流调大把输出拉下来负反馈极性很自然。3.2 CMFB电容取值的实战计算回到采样电容和保持电容的取值。设计指标主运放单位增益带宽做到600MHz负载电容1.5pFCMFB时钟用100MHz也就是每5ns更新一次控制电压。先定采样电容。Cs越大采样到的输出共模越准KT/C噪声越小反馈系数也越大环路增益高但是会给运放差分输出增加额外负载。在输出端到参考地之间跨接一个Cs对差模信号来说等效为Cs/2串联进负载对共模信号就是Cs直接并联到地。所以Cs一般取负载电容的10%到20%比较合适。1.5pF负载里取Cs200fF折合成对输出端的共模负载约为400fF尚可接受。保持电容Ch取多少Ch和Cs共同决定反馈系数β Cs / (Cs Ch Cp)同时还要保证在两次更新间隔内控制电压的泄漏足够小。控制栅上的漏电流主要来自开关的结漏电和栅氧化层漏电0.18μm工艺里通常可以做到pA量级以下。5ns的保持时间内200fF电容上的电压漂移大约如果按漏电100fA算ΔV I×t/C 1e-13 × 5e-9 / 2e-13 2.5mV。听上去有点大但CMFB环路本身有一定的增益2.5mV的控制栅漂移反映到输出共模上要除以环路增益实际影响一般在噪声容限以内。我最后取Cs200fFCh200fFCp估算为80fF左右。β 200 / (200 200 80) 0.417。如果输出共模偏离参考值200mV则控制电压的调节量约为83mV足够让控制管产生明显的电流变化。换到12bit精度的角度1 LSB大约等于2V满量程除以4096约0.49mVCMFB引起的余差在仿真里控制在0.1mV以内即可。除非你追求极低的KT/C噪声否则CMFB电容没必要取到pF量级仿真时先取fF级再根据恢复波形调。3.3 开关尺寸与时序缓冲设计开关电容CMFB里的开关数量不多一般四到六个但每个开关的尺寸选择都有讲究。采样开关如果栅压摆幅足够用PMOS或NMOS单管就可以如果信号摆幅接近电源轨要改用CMOS传输门。这里是采样Vout和Vout-输出摆幅大概在0.5V到2.0V之间所以用传输门更稳妥。开关导通电阻的选取原则是时间常数远小于时钟半周期。比如φ1持续5ns采样时间常数RC至少要做到0.3ns以下。CMOS传输门在2.5V电源下中等栅压下等效导通电阻大约几百欧姆到1kΩ。假设开关电阻Rs300Ω采样电容Cs200fFRC60fs完全够快。但如果只用一个单管且沟道长度做大了电阻可能到3kΩRC0.6ns采样建立就要打个问号了。还要防开关电荷注入。设计传输门时尽量把PMOS和NMOS的宽度配成倒数关系使得两者注入的电荷大致互补抵消。更稳的做法是在关键节点加dummy管把另一半电荷收集掉。但dummy管也会带来额外的寄生电容所以不要什么开关都加优先给控制栅节点和采样节点加。时钟缓冲要独立供电因为在开关翻转瞬间会有比较大的电流尖峰如果和灵敏模拟电路共用电源这个尖峰就会耦合进信号路径。我习惯把时钟缓冲器的电源单独走并且在靠近CMFB电路的位置放一组去耦电容至少50fF量级。3.4 参考电压与时序配合共模参考Vref_cm从哪里来一般从带隙基准经过buffer产生输出阻抗要低。因为CMFB的采样电容在φ1里会从Vref_cm抽取电荷如果参考源阻抗太高每次采样都会把参考电压拉出一个塌陷导致共模检测产生误差。时序方面有个非常关键的细节CMFB的采样相不能和MDAC或者主信号电路的保持相冲突。如果运放在φ1正在做建立CMFB却同时采样输出并更新控制电压那个更新动作会以电流脉冲的形式踢回运放的输出端影响建立精度。所以我一般在时钟方案里把CMFB的采样相位安排在主电路的保持相比如主电路在φ1高电平期间保持CMFB就在φ2高电平期间更新。两个相位要有足够的非交叠时间避免采样开关和求差开关同时导通导致电荷从输出端直接漏到控制栅。还是那句话先把系统级时钟图完整画下来再定CMFB的相序。画时序图这个习惯能帮你躲掉一大半的偶发问题。4. 实操过程与仿真验证4.1 顶层电路连接的检查顺序搭完电路之后不要一头扎进仿真先按以下顺序自查一遍连接逻辑。第一确认CMFB的控制管栅极接到了保持电容Ch的正确一端Ch的另一端确实接到了交流地或者Vref_cm。第二确认采样电容Cs的连接方向φ1接到输出φ2接到控制栅。第三确认时钟相序如果采样用φ1求差用φ2那就检查φ1和φ2非交叠时钟的边沿方向是否正确。第四确认CMFB反馈极性给输出共模加一个正向小扰动看控制电压的变化趋势是回推还是助推这个在仿真里用小信号分析一眼就能看出来。我见过最隐蔽的问题是把Cs接到了Vout和Vout-的交叉位置也就是采样电容一端接正输出、另一端接负输出这样采到的全部是差分信号而不是共模信号CMFB完全失效。这种情况下输出共模漂得更快因为你在把差分信号往控制栅上泵。接线时把Cs1、Cs2画在同一方向上下极板不要搞反。4.2 仿真三步法共模阶跃、STB和瞬态牵引调CMFB我一般分三步仿真。第一步共模阶跃响应。在运放输出端对地注入一个共模阶跃电流或者电压脉冲观察输出共模电平能否在几个时钟周期内回到目标值有没有过冲和振铃。如果恢复太慢说明环路增益不够或者更新频率太低如果振铃说明相位裕度不足。一个健康的CMFB应该在一两个更新周期内把共模拉回。第二步STB仿真看环路稳定性。断开点选在控制管栅极用STB分析跑共模环路。因为这是一个离散时间环路跑严格精确的离散稳定性分析比较复杂我通常的做法是把CMFB时钟频率提高很多倍近似成一个连续时间环路来观察增益和相位裕度再用瞬态共模阶跃去验证。仿真出来相位裕度低的话优先增大保持电容Ch降低反馈系数β。第三步全芯片级别的瞬态牵引。把运放接入真正的MDAC或者采样保持电路给一个满量程输入信号跑足够长的瞬态观察输出共模有没有在每个时钟周期内稳定有没有采样点的明显塌陷或者尖峰。这一步能暴露开关电荷注入、时钟馈通和参考源阻抗问题。4.3 工艺角与温度扫描CMFB是一个反馈环路受工艺角影响明显。FF角下开关和晶体管的导通速度快、漏电大SS角下导通电阻高、建立变慢。我的习惯是在tt、ff、ss、sf、fs五个工艺角下各跑一遍共模阶跃和全芯片瞬态温度从-40℃到125℃电源电压从2.25V到2.75V。这套扫描跑完基本能确认CMFB不会在角点下失效。特别留意ss角下的开关导通电阻如果RC时间常数接近时钟半周期的四分之一以上采样建立就会不足输出共模会出现周期性的毛刺。解决方法是加大开关尺寸或者把CMFB的采样时钟提前一点点让它在非交叠时间里先完成。4.4 版图里最重要的四件事版图布局对CMFB性能的影响不亚于电路设计本身。我个人总结出四个最重要的事项。电容匹配要下功夫。Cs1、Cs2、Ch这些电容要用同一种类型最好是MIM电容采用common-centroid布局周围加一圈dummy电容保证失配尽量小。电容失配在CMFB里虽然不会直接影响差模增益但会导致两个采样电容上的电荷不均衡产生共模检测偏差间接恶化偶次谐波。时钟线和采样线要严格隔离。采样电容的走线属于高阻节点一旦与时钟线耦合时钟馈通会直接注入到控制栅。我吃过亏有一次版图里控制栅走线跟CMFB时钟缓冲器输出平行走了十几微米仿真没看出来流片回来输出共模上出现明显毛刺。后来把控制栅走线加屏蔽时钟线绕到另一边问题就消失了。输出大摆幅走线不要靠近CMFB电容。输出节点的dv/dt很大通过寄生电容耦合到CMFB采样电容上相当于直接给采样过程注入干扰。这个干扰会周期性出现表现为输出共模上的固定模式噪声。去耦电容要放对位置。Vref_cm的走线要加至少200fF的去耦电容并且靠近CMFB电路主体。如果Vref_cm带不动采样的冲击电流共模检测的参考点会抖动整个反馈基准就不稳了。5. 常见问题与排查技巧实录5.1 CMFB环路振荡输出共模在时钟边沿附近出现振铃这个是最常见的。现象是输出共模在φ2更新完之后有一串衰减振荡频率通常在几百MHz到几GHz之间严重时直接变成持续振荡整个运放没法正常工作。第一步检查环路增益是不是过高。把保持电容Ch加大一点比如从200fF加到400fF反馈系数从0.4降到0.27振荡往往有明显改善。第二步检查输出共模负载电容是否足够。如果输出到地的总电容只有200fF而运放本身带宽很高CMFB环路很容易不稳定这时候适当增加输出端的共模负载电容比如在输出节点加一个对地的小电容100fF可以压低主极点。还有种情况是控制管的跨导太大。如果你把CMFB控制管尺寸设计得很大控制电压的一点变动就会产生很大的电流环路增益被推高。试着把控制管略微调小同时让主尾电流源承担更多的静态电流。5.2 输出共模电压偏移实测值与目标值差几十毫伏不要急着怀疑电路先看你的参考电压。Vref_cm如果本身就不准CMFB只会把输出共模拉到错误的参考上。用精确电压源单独测一下参考电压节点的直流电平。如果参考没问题那就是采样电容和保持电容失配导致的电荷注入不对称。这个在仿真里用tt角看不出来但在monte carlo仿真里会暴露。解决办法是在电容外围加匹配环并且尽量让两个采样电容在版图上保持完全对称。另外检查开关的dummy管布局是否对称不对称的开关注入会让控制栅电压产生系统性的偏差。还有一种我踩过的坑CMFB的采样电容接到了运放的输出缓冲之后、还有负载之前的位置跟真正的输出节点之间隔着一段走线电阻导致采样到的电压跟输出实际电压有偏差。这种问题只能靠版图走线优化解决尽量让采样点靠近输出管的漏端。5.3 控制栅上的时钟馈通毛刺如果示波器或仿真里看到控制栅电压在每个时钟边沿都有一个尖刺那通常是开关的时钟馈通没有处理好。方法一把采样开关换成CMOS传输门并用互补时钟驱动让PMOS和NMOS的注入电荷相互抵消。方法二在控制栅节点加一个小的保持电容比如50fF把尖刺滤掉一部分。但不要加太大否则会降低反馈系数。方法三检查时钟走线是否离控制栅太近。时钟走线本身存在耦合电容哪怕开关尺寸没问题走线耦合也会造成毛刺。5.4 上电启动时输出共模建立不起来全差分运放在上电瞬间CMFB的存储电容上有没有电荷如果保持电容没有初始电荷控制管栅极可能处于一个完全错误的不确定电压输出共模就会卡死在某个电源轨附近CMFB怎么转都转不回来。解决办法是在电路里加一个初始化开关上电期间把控制栅短接到一个已知的偏置电压上让CMFB电路从一个合理的起点开始工作然后再断开短接开关让CMFB接管。这个复位开关的尺寸不用很大几十飞法的电容就能保持住初始状态。加过这个初始化电路之后启动问题基本绝迹。5.5 排查流程速查表现象可能原因快速排查动作解决办法输出共模振荡环路增益过高、相位裕度不足加大Ch降低β增大保持电容减小CMFB控制管跨导输出共模缓慢漂移参考源噪声、电容漏电检查Vref_cm稳定性加强参考buffer加去耦电容时钟边沿毛刺开关电荷注入、走线耦合看控制栅波形用CMOS传输门加dummy管隔离走线上电无法建立存储电容无初始电荷看控制栅起始电压加初始化复位开关共模输出偏离目标采样点位置错误、电容失配检查采样点连接采样点靠近输出管漏端电容配匹几个非常值得养成的调试习惯我个人的体会是这类反馈环路的调试不能光靠直觉要养成先画时序图、再动仿真的习惯。每一次拿到新的全差分运放和CMFB拓扑我都会先把四个开关的导通时序、采样相和求差相的关系画清楚确保极性正确再开始仿真。另外一点仿真时不要只看输出共模的平均值看它每个时钟周期里的瞬时波形。很多问题是周期性的平均值可能看起来很健康但瞬时波形早就失真了。把观察窗口放到几个时钟周期打开瞬态波形看细节能发现很多隐藏问题。最后再分享一个小技巧CMFB环路指标不要只盯着输出共模的直流精度还要看它对时钟的敏感度。一个理想的设计应该在时钟频率变化±20%时输出共模的波动几乎不变。如果时钟频率降下来之后输出共模的抖动变大说明保持电容需要加大或者更新频率还不够。这个指标我一般写进设计文档里作为流片前必须检查的项目之一。