免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

55nm工艺DDR高速I/O电路设计:从ONFI 3.2协议到信号完整性实战

55nm工艺DDR高速I/O电路设计:从ONFI 3.2协议到信号完整性实战 DDR 存储器接口设计这活儿说难不难说简单也真不简单。我接触过不少刚入行的朋友一上来就盯着时序图猛看结果板子回来一跑眼图闭合、误码率飙升回头查原因发现是 I/O 驱动强度没配对。55 nm 这个工艺节点在 DDR 接口设计里是个很有意思的位置——它不像 28 nm 那样对均衡和预加重要求那么苛刻但又比 0.13 μm 时代对信号完整性的敏感度高出一大截。这篇内容我想把基于 55 nm 平台做 DDR 高速 I/O 电路设计的完整思路捋一遍从工艺特性、I/O 单元结构、ONFI 3.2 协议约束到实际调试中那些文档里不会写的坑都聊一聊。适合正在做存储控制器物理层设计、或者准备从 FPGA 原型往 ASIC 落地过渡的工程师参考。1. 55 nm 工艺给 DDR I/O 设计带来的真实约束1.1 为什么偏偏是 55 nm 这个节点很多人会问DDR 接口用 40 nm、28 nm 不是更主流吗这话没错但 55 nm 在存储控制器和桥接芯片领域有它自己的生态位。一方面55 nm 的晶圆成本比 40 nm 低不少对于 DDR2 或者 ONFI 3.2 这种速率需求在 400 MT/s 到 800 MT/s 之间的场景55 nm 的晶体管 fT 完全够用另一方面55 nm 的 IO 器件耐压选项比较灵活1.8 V 和 2.5 V 的厚栅氧器件都能提供这对 DDR2 的 SSTL-18 和 ONFI 3.2 的 1.8 V 接口非常友好。我在实际项目里选 55 nm 还有一个很现实的原因模拟和混合信号 IP 的成熟度。DDR PHY 里除了纯数字的逻辑还有 DLL、PLL、占空比校正这些模拟成分55 nm 平台上这些 IP 的硅验证数据比较充分流片风险相对可控。你要是拿一个 28 nm 的新工艺从头搭 DDR PHY光 DLL 的锁定范围就得调好几个月。1.2 晶体管本征速度与 I/O 带宽的匹配账算一笔账。55 nm 工艺的 NMOS 在 1.2 V 下的 fT 大概在 60 到 80 GHz 量级听起来很充裕。但 DDR I/O 的瓶颈从来不在单管速度而在输出驱动级的翻转速率和封装寄生参数。DDR2-800 的数据速率是 800 MT/s对应时钟 400 MHz一个 UI 只有 1.25 ns。输出缓冲器要在这么短的时间里把负载电容充放电到判决门限驱动电流必须够大。我一般会这样估算假设封装和 PCB 走线的总负载电容是 5 pF要在 0.3 个 UI 内完成 0.9 V 的摆幅需要的平均电流大约是 5 pF × 0.9 V / (0.3 × 1.25 ns) ≈ 12 mA。这还只是平均值峰值电流要翻倍。所以 55 nm 的 I/O 器件宽度得给够但又不能一味加宽因为宽度越大输出电容越大自己拖自己后腿。这个折中点是设计里第一个要拿捏的地方。1.3 电源域划分与噪声耦合的现实问题55 nm 的电源网格比更先进节点要粗一些这意味着 I/O 开关噪声更容易通过电源耦合到敏感模拟电路。我在一个项目里遇到过 DLL 抖动突然变大的问题查了两周才发现是同一电源域上的 DDR 输出驱动在特定数据模式下产生了周期性电流冲击。后来我们的做法是把 DDR I/O 的电源域和 DLL/PLL 的电源域彻底分开中间用深 N 阱隔离每个电源域单独做片上稳压和去耦。去耦电容不是随便放要按 I/O 开关频率的四分之一波长来估算位置让去耦路径的寄生电感尽量小。这个经验在文档里基本不会写但实际调试时能省掉大量返工。2. DDR 高速 I/O 单元的内部结构拆解2.1 输出驱动级从预驱动到最终级的分级逻辑DDR I/O 的输出级不是一个大管子直接推而是分级驱动的。典型结构是预驱动级加最终输出级预驱动级负责把内部逻辑的摆幅转换到 I/O 电源域同时提供足够的驱动能力去推动最终级的大管子。最终级通常是多个并联的指状结构每个指可以独立使能用来做输出阻抗校准。为什么分级因为如果让内部逻辑直接驱动最终级的大管子栅极电容太大翻转沿会变得很慢而且会反向耦合噪声到内部电源。分级之后每一级的负载都控制在合理范围内沿的单调性也更好保证。我在 55 nm 上一般把预驱动级和最终级的宽度比设在 1:8 到 1:12 之间具体看负载和速率要求。2.2 输入接收级差分放大与参考电压生成DDR2 的输入是 SSTL-18本质上是单端信号加参考电压。接收级通常用差分放大器实现一端接输入信号一端接参考电压 VREF。VREF 一般是 I/O 电源的一半但实际设计里 VREF 的生成和分布非常讲究。我见过不少设计把 VREF 直接用电阻分压从电源拉出来结果电源一波动VREF 跟着动接收眼图直接恶化。正确的做法是用一个独立的 VREF 生成电路带自己的去耦和缓冲确保 VREF 在 PVT 变化下稳定在目标值附近。55 nm 工艺下VREF 的精度我一般要求控制在 ±2% 以内否则接收余量会被吃掉一大块。2.3 终端匹配片上端接的取舍DDR2 的 ODT 是片上的但控制器侧的端接往往需要外部或者片上可调。55 nm 平台上做片上端接的好处是省掉外部电阻坏处是端接电阻的线性度受工艺偏差影响大。我的做法是用可校准的端接结构通过一个参考电阻和比较器在启动时校准到目标阻抗。校准的精度直接决定信号完整性。我实测下来如果端接阻抗偏差超过 15%反射就会明显影响眼高。校准电路本身也要注意比较器的失调要小参考电阻要用高精度类型否则校准出来的结果只是看起来对。3. ONFI 3.2 协议对 I/O 时序的具体要求3.1 ONFI 3.2 的速率等级与 I/O 接口定义ONFI 3.2 是 NAND 闪存的接口标准它定义了从 SDR 到 NV-DDR3 的多种速率模式。在 55 nm 平台上比较常见的是 NV-DDR2 模式速率在 400 MT/s 到 533 MT/s 之间。这个速率下I/O 接口的时序余量已经比较紧张了尤其是写方向的数据建立保持时间。ONFI 3.2 对 I/O 的电气特性有明确规定包括输出驱动阻抗、输入电容、参考电压范围等。设计时不能只看协议文本还要结合具体的 NAND 器件手册因为不同厂商的 NAND 在时序参数上会有差异。我一般会留出至少 20% 的时序余量防止批次差异导致兼容性问题。3.2 写方向的时序窗口与训练机制写方向是控制器驱动数据到 NAND时序窗口由控制器的输出延迟和 NAND 的输入建立保持要求共同决定。ONFI 3.2 支持写训练通过调整输出延迟来对齐数据眼和 NAND 的采样窗口。训练的本质是扫描延迟线找到误码率最低的延迟点。我在实现时会把延迟线做成精细可调步进控制在 UI 的 1/32 左右。训练过程中要注意不能只测一个点要在整个窗口内测多个点取窗口中心作为最终值这样对温度和电压漂移的容忍度更高。3.3 读方向的眼图中心对齐与 DQS 门控读方向是 NAND 驱动数据回来控制器用 DQS 来采样。DQS 是随数据一起过来的选通信号它的边沿要和数据的眼图中心对齐。ONFI 3.2 的读训练就是调整 DQS 的延迟让采样点落在数据眼的正中间。这里有个容易忽略的点DQS 门控。NAND 的 DQS 在空闲时可能是不定态控制器需要在前导码期间打开门控在数据结束后关闭。门控的时机如果不对要么采到无效的 DQS 边沿要么丢掉第一个数据。我在调试时一般会用示波器同时抓 DQS 和数据确认门控窗口覆盖了整个有效数据段。4. 从 RTL 到 GDS 的 I/O 电路实现路径4.1 定制 I/O 单元的设计流程DDR I/O 单元通常不是用标准库里的普通 I/O而是需要定制的。定制流程一般是从原理图开始确定驱动级结构、端接方式、ESD 保护方案然后做版图设计。55 nm 的版图设计要注意几个点输出级的电流密度不能超过电迁移限值ESD 器件的布局要保证泄放路径对称电源和地的走线要足够宽。我在做版图时习惯把输出级放在靠近焊盘的位置减少走线电阻和电感。ESD 保护器件要放在焊盘和输出级之间但又要尽量少引入寄生电容否则高速信号会被衰减。这个平衡点需要通过仿真来确认不能凭感觉。4.2 寄生参数提取与后仿真验证版图完成后寄生提取是必须的。55 nm 的金属层数比较多寄生电容和电阻的提取精度直接影响后仿结果。我一般会用场求解器提取关键网络的寄生尤其是输出级到焊盘的路径和 DQS 的走线。后仿真要覆盖 PVT 角包括慢速、快速、典型以及高低温。DDR I/O 的后仿重点是眼图和时序余量我会把仿真结果和手工估算做对比如果差异超过 20%就要回头查寄生提取或者模型是否有问题。4.3 硅后调试的常见问题与排查顺序硅后调试是真正见真章的时候。我一般按这个顺序排查先确认电源和参考电压正常再看时钟和复位然后测输出信号的摆幅和沿最后看接收眼图。如果输出有问题先查驱动强度和端接再查预驱动的偏置。如果接收有问题先查 VREF再查接收级的增益和带宽。有个坑我踩过输出信号的过冲和下冲看起来不严重但接收端就是误码。后来发现是输出级的电源地反弹导致接收参考电压抖动。解决办法是加强电源去耦同时在接收级加共模反馈。这个问题在仿真里很难复现因为仿真模型的电源网络太理想了。5. 信号完整性仿真与实测的差距处理5.1 仿真模型的局限性IBIS 模型是信号完整性仿真的常用模型但它对电源噪声和地反弹的建模能力有限。我在 55 nm DDR I/O 项目里发现IBIS 仿真出来的眼图往往比实测好因为模型没有包含片上电源网络的阻抗和封装内的耦合。为了缩小差距我会在仿真里加入封装模型和简化的电源网络模型。封装模型可以从封装厂拿到电源网络可以用简化的 RLC 网络代替。这样仿真结果会更接近实测但仿真时间也会增加不少。5.2 实测眼图与仿真眼图的对比方法实测眼图要用高带宽示波器加差分探头探头的地线要尽量短否则会引入额外的电感。我一般会把实测眼图和仿真眼图放在同一坐标系下对比看眼高、眼宽、抖动这几个关键指标。如果实测眼图比仿真差很多先查探头和测试点的寄生再查电源噪声。很多时候问题不在 I/O 电路本身而在测试方法或者电源设计。我见过一个案例实测眼图一直不好最后发现是测试点的过孔太长引入了很大的反射。5.3 温度与电压漂移下的余量验证DDR I/O 的时序余量会随温度和电压变化。我在验证时会做高低温循环和电压拉偏测试确认在整个工作范围内眼图都满足要求。55 nm 工艺下温度从 -40°C 到 125°C晶体管的驱动能力变化可能超过 30%这个变化必须在设计时留出余量。电压拉偏一般做 ±10%看眼图的变化趋势。如果电压降低时眼图明显恶化说明驱动能力不够需要加大输出级或者优化预驱动。如果电压升高时眼图变差可能是过冲导致的需要调整端接或者输出摆幅。6. 实际项目中那些文档不会写的经验6.1 训练算法的收敛性与异常处理DDR 的训练算法不是跑一次就能收敛的。我在实际项目里遇到过训练结果跳变的情况原因是延迟线的步进不均匀某些码值对应的实际延迟偏差较大。解决办法是在训练时加入平滑滤波或者用多个采样点做平均。异常处理也很重要。如果训练过程中 NAND 没有响应或者 DQS 一直没有有效边沿算法要有超时机制不能死等。我一般会设置重试次数超过就报错并回退到安全模式保证系统不会因为训练失败而挂死。6.2 多颗 NAND 并联时的负载效应当多个 NAND 并联在同一组 I/O 上时负载电容会增加信号沿会变慢眼图会变小。我在设计时会按最坏情况的负载来算驱动能力同时用片选信号来隔离未选中的 NAND减少负载。片选隔离要注意未选中的 NAND 的 I/O 要处于高阻态否则会形成额外的负载。有些 NAND 在高阻态下仍有漏电这个漏电会累积影响信号电平。我一般会在控制器侧加弱下拉确保未选中时 I/O 电平稳定。6.3 与 DDR2 控制器对接时的地址线等长问题虽然这篇主要讲 I/O 电路但地址线的等长设置对 I/O 时序也有影响。DDR2 的地址线是共享的等长做不好会导致不同地址的建立保持时间不一致。我在 PCB 设计时一般要求地址线等长误差控制在 ±50 mil 以内时钟线要单独处理避免和地址线耦合。等长不是越长越好走线太长会引入额外的延迟和衰减。我一般会先确定一个基准长度然后让所有地址线围绕这个基准做蛇形绕线。绕线的间距要足够避免线间耦合。6.4 测试模式与量产测试的考虑I/O 电路在设计时就要考虑测试模式。我一般会加入环回测试模式让输出直接回到输入方便在量产测试时快速验证 I/O 功能。还会加入驱动强度和端接的可编程控制方便在不同测试条件下调整。量产测试还要考虑测试时间。训练算法如果太慢会影响测试吞吐量。我一般会把训练算法做成可配置的量产时用快速模式实验室调试时用精细模式。这样兼顾了测试覆盖率和效率。7. 从 55 nm 向更先进节点迁移的注意点7.1 器件特性变化对 I/O 设计的影响从 55 nm 往 40 nm 或 28 nm 迁移时晶体管的本征速度更快但耐压能力下降I/O 电源电压可能需要降低。这意味着输出摆幅会变小对接收级的灵敏度要求更高。同时更先进节点的寄生电容更小但电阻更大走线的 RC 延迟需要重新评估。我在迁移时会重新做驱动能力的估算不能直接照搬 55 nm 的尺寸。一般会先用仿真做扫描找到满足时序和眼图要求的最小尺寸然后再做版图。7.2 工艺偏差与可靠性的新挑战更先进节点的工艺偏差更大端接阻抗和驱动强度的校准精度会受影响。我在 28 nm 项目里发现同样的校准电路校准后的阻抗偏差比 55 nm 大了将近一倍。解决办法是增加校准的精细度或者用更复杂的校准算法。可靠性方面更先进节点的电迁移限值更严格输出级的电流密度要控制得更低。这可能需要增加输出级的面积或者用更宽的金属走线。ESD 保护也要重新设计因为更薄的栅氧更容易被击穿。7.3 可复用的设计资产与需要重做的部分从 55 nm 迁移时有些设计资产可以复用比如训练算法的数字逻辑、测试模式的控制逻辑。但模拟部分基本要重做包括 DLL、PLL、VREF 生成、端接校准。I/O 单元的版图也要重新设计因为设计规则变了。我的经验是迁移项目的时间预算里模拟部分要占大头。数字逻辑的复用可以省时间但模拟的重新设计和验证往往比预期长。提前做好规划避免后期赶工。8. 写在最后的一点个人体会做 DDR 高速 I/O 设计这些年我最大的感受是仿真和实测之间的差距往往不是电路本身的问题而是你对整个系统的理解不够。电源、封装、PCB、测试方法任何一个环节出问题都会在眼图上体现出来。55 nm 这个平台给了我们一个相对温和的起点但该踩的坑一个都不会少。我现在的习惯是每做一个新项目先把电源和参考电压的分布规划好再做 I/O 单元的设计。训练算法和测试模式在 RTL 阶段就考虑进去不要等到硅后才发现没法调试。版图阶段多花时间做寄生提取和后仿比硅后反复改版要划算得多。还有一点多和 PCB 工程师、封装工程师沟通。很多信号完整性问题不是芯片能单独解决的需要系统级的配合。我见过太多案例芯片本身没问题但 PCB 走线或者封装设计不合理导致整体性能不达标。把边界条件提前对齐能省掉大量后期调试的时间。
返回列表