2、硬件连接设计:FPGA与SFP的PCB布局要点、差分信号走线规则、电源去耦设计
好,咱们接着聊。上一章我们把SFP光模块的接口信号理清楚了,这一章就该动真格的了——画PCB。说实话,FPGA和SFP的硬件连接,说难不难,说简单也不简单。我见过太多项目,原理图看着没问题,板子打回来一调,眼图就是过不了。问题出在哪?十有八九是PCB布局和走线没做好。
这一章,我就把我在几个高速项目里踩过的坑、总结的经验,一股脑倒给你。你照着做,至少能避开80%的雷区。
2.1 PCB布局:先把“大家伙”安排好
布局是第一步,也是最重要的一步。你想想看,如果SFP笼子和FPGA隔了十万八千里,后面走线再怎么优化也白搭。
核心原则就一条:SFP笼子尽量靠近FPGA的高速串行收发器(SerDes)引脚。
我个人习惯,先把SFP笼子放在板边,方便插拔光模块。然后FPGA的Bank(尤其是带GTH/GTY/GTX的Bank)直接对着SFP放。距离控制在1到2英寸以内最好,超过3英寸你就得小心了。
布局检查清单:
- SFP笼子金属外壳与PCB板边地平面良好接触,用于散热和EMI屏蔽
- FPGA的SerDes电源引脚(如MGTAVCC、MGTAVTT)就近放置去耦电容
- SFP的I2C管理信号(SCL/SDA)走线不要太长,避免被高速信号干扰
- 光模块的“热插拔”检测引脚(Mod_ABS)要拉一个上拉电阻到FPGA的GPIO
嗯,这里要注意:SFP笼子底下那一排接地焊盘,一定要打过孔到主地平面。我曾经有个项目,就是因为笼子接地不好,导致EMI测试超标,折腾了两周才找到原因。
2.2 差分信号走线规则:眼图好不好,全看它
SFP的高速数据线是差分对(TD+/-、RD+/-),速率从1Gbps到28Gbps不等。走线规则必须严格遵守,否则眼图闭合、误码率飙升,你哭都来不及。
规则一:差分对内等长,误差控制在5mil以内。
说白了,就是P和N两条线要走得一样长。为什么?因为信号是差分传输的,如果两条线长度不一致,到达接收端的时间就不同,共模噪声抑制能力就下降了。我一般会在走线时手动绕一下蛇形线来补偿。
规则二:差分对间等长,但要求没那么严。
不同通道之间的走线长度差,控制在50mil以内就行。这个主要是为了满足SFP协议中的skew(时滞)要求。
规则三:阻抗控制,100欧姆差分阻抗,±10%。
这个你得跟板厂沟通好。叠层结构、线宽、线间距,都要算清楚。我常用的叠层是:表层微带走线,参考层是第二层地平面。线宽5mil,线间距8mil,基本能控在100欧姆左右。
我的小技巧:
走线时,差分对之间保持3倍线宽的间距(3W原则),减少串扰。如果空间实在紧张,至少也要2W。另外,差分对两侧最好包地,打一排地过孔。
规则四:避免过孔,实在避不开就成对打。
过孔会引入寄生电感和阻抗不连续。如果必须换层,差分对的两个过孔要对称放置,且距离尽量短。我习惯在过孔旁边加一个地过孔,提供回流路径。
举个例子,我做过一个10Gbps的SFP+项目,FPGA和SFP之间走线长度1.5英寸,用了两个过孔换层。结果眼图测试时,眼高只有300mV,明显偏低。后来我把过孔去掉,走线全部走表层,眼高直接到了450mV。你看,过孔的影响就这么大。
2.3 电源去耦设计:别让电源噪声毁了你的信号
高速电路里,电源就是信号的生命线。SFP光模块需要3.3V供电,FPGA的SerDes需要1.0V(MGTAVCC)和1.2V(MGTAVTT)。这些电源如果纹波太大,信号质量直接完蛋。
去耦的核心思想:低阻抗、宽频带。
我一般这样设计去耦网络:
| 电容类型 | 容值 | 封装 | 作用 |
|---|---|---|---|
| 大电解电容 | 10uF ~ 100uF | 1210/1206 | 滤除低频纹波(<1MHz) |
| 陶瓷电容 | 0.1uF ~ 1uF | 0603/0402 | 滤除中频噪声(1MHz~100MHz) |
| 小陶瓷电容 | 0.01uF ~ 0.1uF | 0402/0201 | 滤除高频噪声(>100MHz) |
布局要点:
- 小电容(0.01uF、0.1uF)必须紧挨着FPGA的电源引脚,距离不超过50mil
- 电容的接地焊盘要直接打过孔到地平面,不要走线绕一圈
- 每个电源引脚至少配一个0.1uF和一个0.01uF电容
- SFP的3.3V供电,在笼子附近也要加一组去耦电容
警告:
千万不要把去耦电容放在FPGA的背面!虽然看起来省空间,但过孔引入的电感会大大降低去耦效果。我见过有人这么干,结果SerDes锁相环(PLL)一直失锁,查了三天才发现是电容位置不对。
另外,FPGA的SerDes电源建议用独立的LDO供电,不要直接从开关电源拉过来。开关电源的纹波通常在10mV~50mV,而SerDes对电源噪声的要求是<10mV。我习惯用TI的TPS7A系列或者ADI的LT3042,噪声低、PSRR高。
最后提一句电源平面分割。如果板子上同时有3.3V、1.0V、1.2V,尽量给SerDes电源单独一个区域,不要跟数字逻辑电源混在一起。我曾经在项目里把MGTAVCC和FPGA核心电源共用一个平面,结果高速信号抖动大了30%。从那以后,我再也不敢偷懒了。
好了,这一章的内容就这些。布局、走线、去耦,这三件事做好了,你的FPGA和SFP通信就成功了一半。下一章我们聊聊上电时序和初始化配置,那也是容易出幺蛾子的地方。