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通信就成功了一半。下一章我们聊聊上电时序和初始化配置,那也是容易出幺蛾子的地方。