尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

时钟占空比校正电路设计:从原理到SPICE仿真验证

时钟占空比校正电路设计:从原理到SPICE仿真验证 1. 从一个被忽视的时钟问题说起做模拟IC设计这些年我越来越觉得很多看起来不起眼的模块往往才是真正决定系统性能上限的关键。时钟占空比校正电路就是这样一个典型。你可能在SoC里跑得好好的DDR接口时序突然就崩了或者ADC采样精度怎么调都上不去最后发现是采样时钟的占空比偏了5%。这类问题排查起来极其痛苦因为它不像功能错误那样直接报错而是以一种“性能不达标”的软性方式折磨你。时钟占空比校正英文叫Duty Cycle Correction简称DCC干的事情说白了就一件把输入时钟的占空比从任意值比如40%、55%、甚至30%拉回到接近50%。为什么是50%因为在大多数数字和混合信号系统里时钟的上升沿和下降沿分别定义了不同的时间窗口。占空比一旦偏离50%就意味着某个相位的时间窗口被压缩了建立时间或保持时间就会不够用。尤其在DDR这类双沿采样DDRDouble Data Rate的接口里上升沿和下降沿都要用来传数据占空比误差直接吃掉时序裕量。这个模块在学术界和工业界都有大量成熟方案但很多教材讲得比较散要么只讲概念不给电路要么给了电路但不说仿真怎么搭。我打算把之前做过的一个经典DCC电路完整拆一遍从原理推导到SPICE仿真验证把每个管子的作用、每个参数的计算、每个仿真设置的意图都讲清楚。适合有一定模拟电路基础、正在做时钟链路设计或者准备面试的读者。看完你应该能自己搭出一个可用的DCC并且知道怎么验证它到底行不行。2. 为什么需要DCC从时序裕量到系统崩溃2.1 占空比误差到底吃掉了什么先算一笔账。假设一个系统时钟频率是1GHz周期T1ns理想情况下高电平500ps、低电平500ps。如果占空比变成45%高电平450ps、低电平550ps。看起来只差了50ps但对于一个需要在高电平窗口内完成建立的数据路径来说这50ps可能就是压死骆驼的最后一根稻草。更关键的是占空比误差会随着时钟树传播而累积。时钟经过多级缓冲器、分频器、驱动器之后由于PMOS和NMOS的驱动能力不匹配、负载不对称、工艺偏差等原因占空比会进一步恶化。我见过一个实际案例输入时钟占空比48%经过时钟树之后到DDR PHY变成了42%直接导致眼图闭合。注意占空比误差和时钟抖动是两回事。抖动是边沿位置的随机或确定性波动占空比误差是高低电平时间的系统性偏差。DCC解决的是后者不要指望DCC去修抖动。2.2 哪些场景必须上DCC不是所有电路都需要DCC。如果你的系统是单沿采样比如普通的同步数字逻辑只在上升沿触发那占空比对时序的影响相对小一些只要高电平足够宽就行。但以下场景基本逃不掉DDR内存接口双沿采样上升沿和下降沿都要锁数据占空比误差直接压缩数据有效窗口。高速ADC/DAC采样时钟的占空比影响采样保持电路的建立时间尤其在高精度场景下。射频收发链路本振信号的占空比影响混频器的增益和线性度。时钟分频器输出分频器本身就容易产生占空比失真后级需要校正。2.3 DCC的基本架构分类从架构上分DCC大致可以分成三类。第一类是模拟反馈型用一个低通滤波器提取占空比信息再通过反馈环路调整时钟的边沿位置。第二类是数字控制型用时间数字转换器TDC测量占空比再通过数字逻辑控制延迟线。第三类是混合型结合模拟和数字的优点。我这个项目用的是模拟反馈型架构原因是结构简单、功耗低、面积小而且不需要复杂的数字校准逻辑。对于大多数中等精度的应用占空比误差校正到1%以内模拟反馈型完全够用。3. 电路架构与核心原理拆解3.1 整体框图与信号流整个DCC电路的核心思路可以用一句话概括把占空比误差转换成电压信号再用这个电压去控制延迟线的延迟量从而调整时钟边沿的位置。具体来说电路包含以下几个关键部分占空比检测器将时钟的高低电平时间差转换成差分电流或电压。低通滤波器滤除高频纹波提取出与占空比误差成正比的直流电压。误差放大器放大误差信号提供足够的环路增益。压控延迟线根据控制电压调整时钟上升沿或下降沿的延迟量。输出缓冲器驱动后级负载同时隔离延迟线与负载。信号流是这样的输入时钟经过延迟线输出校正后的时钟。同时输出时钟被反馈到占空比检测器检测器产生与占空比误差相关的电流信号经过低通滤波和放大后控制延迟线的延迟量。整个环路是负反馈最终稳定在占空比接近50%的工作点。3.2 占空比检测器的设计细节占空比检测器是整个环路的核心它的精度直接决定了最终校正效果。我用的是一种基于电流积分的检测方式原理很简单用两个电流源分别对时钟的高电平和低电平时间进行积分如果占空比是50%两个积分值相等如果有偏差积分值就不等差值就反映了占空比误差。具体电路实现上我用了一个差分对结构。时钟信号控制两个开关高电平时电流源I_up对电容充电低电平时电流源I_dn对另一个电容充电。两个电容上的电压差经过一个差分放大器输出就得到了与占空比误差成正比的电压信号。这里有个关键参数需要计算积分电容的大小。电容太小纹波大环路不稳定电容太大响应慢校正速度跟不上。我的经验公式是C_int ≥ I_bias / (2 × f_clk × V_ripple_max)其中I_bias是积分电流f_clk是时钟频率V_ripple_max是可接受的纹波电压。假设I_bias10μAf_clk1GHzV_ripple_max1mV那么C_int至少需要5pF。实际我取了10pF留了一倍裕量。3.3 压控延迟线的实现方式压控延迟线决定了校正的范围和精度。我用的是一种基于电流 starving 的反相器链结构。每个反相器的供电电流由一个PMOS电流源控制控制电压越高电流越大延迟越小控制电压越低电流越小延迟越大。延迟线的级数需要根据最大校正范围来确定。假设输入时钟占空比偏差最大为±10%周期为1ns那么需要校正的时间量为100ps。如果每级反相器的延迟调节范围是10ps到30ps那么至少需要5级才能覆盖100ps的范围。我实际用了8级留了足够的裕量。实操心得延迟线的级数不要刚好卡在理论值上因为工艺偏差会导致实际延迟范围比仿真值窄。我一般会留30%到50%的裕量。另外延迟线的线性度很重要如果控制电压和延迟量的关系非线性太强环路增益会随工作点变化可能导致在某些条件下环路不稳定。3.4 环路稳定性与带宽设计负反馈环路最怕的就是振荡。DCC环路的稳定性取决于环路增益和相位裕度。由于环路里有一个低通滤波器主极点通常由它决定。为了保证稳定环路带宽需要远低于时钟频率一般取时钟频率的1/100到1/1000。假设时钟频率1GHz环路带宽取1MHz。低通滤波器的截止频率需要低于环路带宽我取了100kHz。滤波电容和电阻的值根据截止频率计算f_cutoff 1 / (2πRC)取R100kΩC16pF截止频率约100kHz。这个值在仿真里验证过相位裕度大约65度足够稳定。4. SPICE仿真环境搭建与参数设置4.1 仿真工具选择与模型准备我平时用HSPICE和Spectre比较多这次仿真用HSPICE因为它的收敛性在混合信号仿真里表现比较稳。工艺库用的是一种常见的0.18μm CMOS工艺模型文件从代工厂的PDK里拿。如果你手头没有PDK可以用BSIM3的通用模型先跑通流程但定量结果不能直接用于流片。仿真前需要准备好以下文件工艺模型文件.lib或.scs网表文件.sp或.scs激励源定义仿真控制语句.tran、.ac、.dc等4.2 关键仿真类型与设置DCC电路需要跑三种仿真瞬态仿真看时域波形验证占空比校正效果。设置仿真时间至少覆盖环路建立时间我一般跑10μs确保环路稳定。时间步长要足够小至少是时钟周期的1/1001GHz时钟对应10ps步长。AC仿真看环路增益和相位裕度。需要在环路里插入一个断点用stb分析或者break环路的方法。我习惯用HSPICE的.tf分析或者Spectre的stb分析。DC仿真看控制电压和延迟量的关系验证延迟线的调节范围。4.3 激励源与初始条件设置输入时钟用PULSE源设置上升下降时间为周期的1%10ps占空比初始设为40%用来验证校正能力。初始条件方面控制电压的初值设为中间值避免仿真从极端工作点开始导致收敛困难。注意瞬态仿真刚开始的时候环路还没建立输出占空比会有一段时间的过渡过程。这是正常的不要看到前几百纳秒波形不对就以为电路有问题。我一般会等环路稳定后再测量占空比。5. 仿真结果分析与关键波形解读5.1 瞬态波形从40%到49.8%的校正过程跑完瞬态仿真看输出时钟的占空比变化。输入是40%占空比经过大约2μs的建立时间后输出占空比稳定在49.8%左右。残余误差0.2%对应时间误差2ps1GHz时钟这个精度对于大多数应用已经足够了。建立时间主要取决于环路带宽和初始误差大小。2μs的建立时间对应环路带宽约1MHz和设计值吻合。如果你需要更快的建立时间可以增大环路带宽但要牺牲稳定性。波形上还能看到一个细节校正后的时钟边沿有轻微的抖动这是延迟线控制电压上的纹波引起的。纹波幅度大约0.5mV对应延迟抖动约1ps在可接受范围内。5.2 环路增益与相位裕度仿真AC仿真结果显示低频环路增益约60dB单位增益带宽约1.2MHz相位裕度约65度。这个结果说明环路稳定没有振荡风险。不过我发现一个问题在控制电压的某些工作点上延迟线的增益变化比较大导致环路带宽波动。为了解决这个问题我在误差放大器的输出端加了一个源极跟随器起到一定的增益压缩作用让环路增益更平稳。5.3 不同工艺角下的表现工艺角仿真很关键。我在TT、SS、FF、SF、FS五个角下都跑了。TT角下占空比校正到49.8%SS角下49.5%FF角下50.2%SF和FS角下分别在49.3%和50.5%。最差情况误差0.7%对应7ps的时间误差。这个结果说明电路对工艺偏差有一定的鲁棒性但如果要进一步提高精度需要增加校准机制。比如在延迟线里加入可调电容阵列通过数字控制来补偿工艺偏差。5.4 电源电压和温度变化的影响电源电压从1.8V变化到1.6V和2.0V占空比校正结果变化在0.3%以内。温度从-40°C到125°C变化在0.5%以内。这两个指标说明电路的电源抑制比和温度稳定性都还不错。不过有一个现象值得注意在低压条件下1.6V延迟线的调节范围会缩小如果输入占空比偏差太大比如30%可能校正不到位。所以设计时要根据最低工作电压来确定延迟线的级数。6. 常见问题与排查技巧实录6.1 环路不收敛或振荡怎么办这是DCC调试中最常见的问题。表现是输出占空比一直在波动或者控制电压饱和到电源轨。排查思路如下先检查环路极性对不对。负反馈接成了正反馈必振荡。把断点打开看从控制电压到占空比检测器输出的符号。检查相位裕度。如果小于45度减小环路带宽增大滤波电容。检查延迟线的增益是否过大。如果控制电压微小变化导致延迟量剧烈变化环路增益过高容易振荡。可以在误差放大器输出加衰减。6.2 校正精度不够怎么调如果校正后占空比误差还是大于1%可能的原因有占空比检测器的失调。差分对的失配会导致检测器输出有固有偏差。可以通过增大器件面积来减小失配或者加失调校准。延迟线的分辨率不够。如果延迟线的调节步长太大无法精细调整。可以增加延迟线级数或者用更精细的电流控制。环路增益不够。低频增益不足会导致稳态误差。增大误差放大器的增益。6.3 仿真速度太慢的优化方法DCC电路的瞬态仿真通常比较慢因为要跑很多个时钟周期。优化方法包括用PSSPeriodic Steady State分析代替长瞬态仿真可以快很多。适当放宽仿真精度比如reltol从1e-3放到1e-2但要注意结果是否可信。用行为级模型先验证环路稳定性再用晶体管级跑最终验证。6.4 常见问题速查表问题现象可能原因排查方法解决措施输出占空比振荡环路相位裕度不足跑AC仿真看相位裕度减小环路带宽增大滤波电容校正后仍有固定偏差检测器失调检查差分对失配增大器件面积或加校准控制电压饱和延迟线调节范围不够跑DC仿真看调节范围增加延迟线级数建立时间太长环路带宽太低检查滤波电容值适当减小滤波电容低压下校正失效延迟线增益下降跑低压DC仿真增加延迟线级数或提高控制电压范围实操心得调试DCC的时候我习惯先把环路断开单独测占空比检测器的传输曲线和延迟线的控制曲线确认两个模块都正常之后再闭合环路。这样出问题的时候容易定位是哪个模块的锅。7. 从仿真到流片几个容易踩的坑仿真跑通只是第一步真正流片还有几个坑要提前想清楚。第一个是版图匹配。占空比检测器里的差分对和电流源必须做匹配否则失调会直接吃掉校正精度。我一般会用共 centroid 布局并且加dummy器件。第二个是电源噪声。DCC电路对电源噪声比较敏感尤其是延迟线部分。电源上的噪声会直接调制延迟量导致输出时钟抖动增加。建议在延迟线的电源上多加去耦电容并且用独立的LDO供电。第三个是测试方案。流片回来怎么测占空比用示波器直接测的话探头负载会影响结果。我一般会在芯片上做一个占空比检测器的副本输出一个与占空比成正比的电压这样测试更方便也更准确。第四个是启动行为。上电的时候环路可能从任意状态开始如果启动电路没做好可能锁死在错误的工作点。我一般会加一个启动电路强制控制电压从中间值开始确保环路能正常建立。8. 这个电路还能怎么扩展如果你已经跑通了基本的DCC可以考虑几个扩展方向。一个是数字化把模拟反馈环路换成数字控制用TDC测量占空比用数字滤波器做环路补偿这样更灵活也更容易做工艺校准。另一个是多相位DCC对于多相位时钟系统每个相位的占空比都需要校正可以共用检测器但独立控制延迟线。还有一个方向是降低功耗。模拟反馈环路的功耗主要在误差放大器和延迟线。如果能把环路带宽做低误差放大器的偏置电流可以降到很小。延迟线方面可以用亚阈值区的电流源来降低功耗但要注意速度会变慢。我自己在实际项目里最看重的还是鲁棒性。仿真结果再漂亮流片回来如果工艺角一偏就崩了那等于白做。所以我在设计阶段会花很多时间跑蒙特卡洛仿真确保失调和工艺偏差在可接受范围内。这个DCC电路我前后改了三次版图才把良率做到可以接受的水平。第一次是差分对匹配没做好失调太大第二次是延迟线的电源走线太细IR drop导致增益不够第三次才基本满意。这些经验仿真里是学不到的只有真正流过片才知道。
返回列表