1. FMC与FMC+到底是什么:从一块板卡的“接插件焦虑”说起
搞FPGA硬件设计的人,迟早会撞上一个问题:板子上的高速接口不够用了。摄像头、ADC、DAC、光纤模块、射频前端,一个个都嗷嗷待哺地等着往FPGA上挂,可FPGA芯片本身的引脚就那么多,PCB面积也有限,你不可能给每个外设都单独拉一组走线。这时候,FMC(FPGA Mezzanine Card)就登场了。
FMC本质上是一个标准化的夹层卡接口规范,由VITA组织制定,标准号是ANSI/VITA 57.1。你可以把它理解成FPGA世界里的“USB接口”——当然,它比USB复杂得多。它的核心思路是:在载板(Carrier Board)上放一个统一的连接器插座,FPGA的引脚按照标准定义连到这个插座上;然后各种功能子板(Mezzanine Card)只要做成符合这个标准的“插头”,就能即插即用。今天插一块ADC采集卡,明天换一块光纤通信卡,载板和FPGA都不用动。
这个思路解决的核心痛点非常实际。在没有FMC之前,每个项目的外设接口都是定制化的,硬件工程师画原理图、Layout、打样、调试,一套流程走下来少说两三个月。如果项目需要换一个不同型号的ADC,可能整个PCB都要重新设计。FMC把这个过程标准化之后,子板可以独立设计、独立验证,载板只需要保证FMC连接器的引脚分配符合规范就行。
FMC+(VITA 57.4)是FMC的升级版本,主要解决的是带宽瓶颈问题。原始FMC标准定义了400个引脚(实际上连接器有400个触点位置,但并非全部都用满),其中高速差分对的数量有限。随着ADC采样率越来越高、光纤速率越来越快,原来的差分对数量不够用了。FMC+把高速差分对从原来的最多约40对(取决于连接器型号)扩展到了最多80对,单通道速率也支持到了28Gbps以上,直接面向100G以太网、高速数据采集、相控阵雷达等应用场景。
注意:FMC和FMC+在物理连接器上是兼容的。FMC+的子板可以插到FMC的载板上(但只能使用FMC定义的那部分引脚),FMC的子板也可以插到FMC+的载板上。这个向下兼容的设计非常关键,避免了标准升级带来的硬件报废。
适合阅读这篇文章的人:正在做FPGA硬件选型的工程师、需要设计载板或子板的PCB工程师、做高速数据采集或通信系统架构的开发者,以及刚入门FPGA、想搞清楚“板子上那个大连接器到底是干嘛的”的初学者。我会从标准定义、引脚分配、电气特性、实操设计要点几个维度展开,尽量把VITA文档里那些枯燥的表格翻译成人话。
2. 标准拆解:VITA 57.1与VITA 57.4的核心差异
2.1 连接器物理结构:从400针到560针的演进
FMC标准定义了几种连接器配置,最常见的是单宽度(Single Width)和双宽度(Double Width)两种。单宽度子板尺寸是69mm x 76.5mm,双宽度是139mm x 76.5mm。连接器本身是一个高密度阵列,ASP-134486-01(或类似型号)是Samtec等厂商生产的标准FMC连接器。
原始FMC连接器有400个触点位置,分为A、B、C、D、E、F、G、H、J、K共10列,每列40个引脚。但实际可用的高速差分对数量取决于你用的是哪种连接器变体。标准FMC连接器(VITA 57.1)提供:
- LA[00:33]:34对高速差分信号(Low Pin Count Area,低引脚数区域)
- HA[00:23]:24对高速差分信号(High Pin Count Area,高引脚数区域)
- HB[00:23]:24对高速差分信号(仅双宽度连接器)
单宽度连接器只有LA和HA区域,双宽度连接器额外有HB区域。所以单宽度最多58对差分,双宽度最多82对差分。但实际可用数量还受限于连接器型号和引脚复用。
FMC+(VITA 57.4)把连接器扩展到了560个触点,增加了额外的列。高速差分对数量大幅提升:
- LA[00:33]:34对(保持不变)
- HA[00:23]:24对(保持不变)
- HB[00:23]:24对(保持不变)
- HP[00:23]:新增24对(High Pin Count Plus Area)
这样FMC+单宽度就能提供82对差分,双宽度更是达到106对。而且FMC+支持更高的单对速率,GTY/GTM收发器可以直接通过连接器而不需要额外的重定时芯片。
2.2 引脚功能分区:为什么要有LA、HA、HB、HP的区分
这个分区设计不是随便拍脑袋定的。LA区域(Low Pin Count Area)是所有FMC子板必须支持的最小集合,它包含了基本的电源、JTAG、I2C管理接口和34对差分信号。这意味着即使你设计一个最简单的子板,只要用LA区域的信号,就能保证在几乎所有FMC载板上工作。
HA和HB区域是可选扩展。载板设计者可以选择只连接LA区域(成本低、布线简单),也可以连接HA/HB来获得更多高速通道。子板设计者需要根据自己需要的带宽来决定用哪些区域。
FMC+新增的HP区域则是面向超高速应用的。HP区域的差分对在PCB布线时有更严格的阻抗控制和长度匹配要求,通常需要载板使用更低损耗的板材(如Megtron 6或类似等级)。
| 区域 | FMC差分对数量 | FMC+差分对数量 | 典型用途 |
|---|---|---|---|
| LA | 34 | 34 | 基本通信、低速ADC/DAC、控制信号 |
| HA | 24 | 24 | 中速数据采集、视频接口 |
| HB | 24(仅双宽度) | 24(仅双宽度) | 高速ADC、光纤 |
| HP | 无 | 24 | 超高速收发器、100G以太网 |
2.3 管理接口:I2C、JTAG和电源控制
FMC标准定义了一套管理接口,这是它区别于普通排针连接器的关键。每块FMC子板上都有一颗EEPROM(通常是24LC02或兼容型号),里面存储了子板的身份信息:制造商、型号、序列号、电源需求、引脚分配描述等。载板上的控制器(通常是FPGA或BMC)通过I2C总线读取这些信息,就能自动识别插上来的是什么子板。
这个机制的实际价值在于热插拔和自适应。比如你做了一个通用载板,今天插ADC子板,明天插光纤子板,FPGA通过读取EEPROM就能知道当前插的是什么,然后加载对应的配置文件。不需要人工干预,也不需要拨码开关。
JTAG接口也是标准化的。FMC连接器上有一组JTAG信号(TCK、TDI、TDO、TMS),载板可以通过这些信号对子板上的器件进行编程或调试。不过实际使用中,很多子板并不通过FMC连接器走JTAG,而是自己留了调试排针。
电源方面,FMC标准定义了12V、3.3V、VADJ三组主要电源。12V和3.3V是固定电压,VADJ是可调电压(默认1.8V,但可以通过载板上的电阻分压网络调整到1.2V、1.5V、2.5V等)。VADJ的存在是为了适配不同I/O电平标准的子板。比如子板上的ADC是1.8V LVDS接口,那VADJ就设成1.8V;如果是2.5V LVCMOS,就设成2.5V。
实操心得:VADJ的电压设置一定要和子板EEPROM里声明的电压一致。我见过有人载板VADJ设成1.8V,子板却要求2.5V,上电后子板上的电平转换芯片直接冒烟。上电前务必核对子板手册中的VADJ要求。
3. 电气特性与信号完整性:高速差分对的那些坑
3.1 差分阻抗与布线要求
FMC标准规定高速差分对的差分阻抗为100欧姆(±10%),单端阻抗50欧姆。这个要求看起来简单,实际执行起来坑很多。首先,FMC连接器本身的阻抗并不是完美的100欧姆,在连接器过渡区域会有阻抗不连续。其次,PCB走线的阻抗取决于叠层结构、线宽、线间距、铜厚、介质厚度等多个参数。
我实际做过的项目中,FMC差分对的布线有几个硬性要求:
- 长度匹配:同一对差分信号的两根线长度差控制在5mil以内(对于10Gbps以上信号,建议3mil以内)
- 对间匹配:如果是一组总线(比如16对LVDS),对与对之间的长度差控制在100mil以内(具体取决于协议要求)
- 过孔数量:尽量减少过孔,每个过孔都会引入阻抗不连续和寄生电容
- 参考平面:差分对下方必须有完整的参考平面,不能跨分割
这些要求听起来是常识,但实际Layout时很容易忽略。比如FMC连接器的引脚排列非常密集,扇出时不可避免地要打过孔,这时候过孔的设计就很关键。我通常会用背钻(Back Drilling)来减少过孔的寄生效应,虽然成本会增加,但对于28Gbps以上的信号是必要的。
3.2 连接器选型:不是所有FMC连接器都一样
市面上能买到的FMC连接器有好几种,价格从几十块到几百块不等。主要区别在于:
- 引脚数量:单宽度还是双宽度
- 高速性能:支持的最高速率(有些连接器只支持到10Gbps,有些支持到28Gbps甚至56Gbps)
- 材料:高温塑料还是普通塑料
- 安装方式:SMT还是通孔
我一般推荐用Samtec的ASP系列或类似的高性能连接器。虽然贵,但信号完整性有保障。便宜的连接器在低速应用(比如100Mbps以下)没问题,但上了10Gbps就会出现明显的眼图闭合。
还有一个容易被忽略的点:连接器的配对高度。FMC标准定义了不同的堆叠高度(从5mm到10mm不等),载板和子板之间的间距必须匹配。如果选错了,子板要么插不进去,要么悬空导致接触不良。
3.3 电源完整性与去耦
FMC子板上的电源去耦经常被忽视。标准要求子板在12V和3.3V输入端有足够的去耦电容,但具体放多少、放哪里,很多人是凭感觉。我的经验是:
- 12V输入端:至少放一个100uF的钽电容或电解电容,再加几个10uF的陶瓷电容
- 3.3V输入端:至少放一个47uF的钽电容,加多个1uF和0.1uF的陶瓷电容
- VADJ输入端:根据负载电流决定,一般至少放一个22uF的钽电容加若干0.1uF陶瓷电容
去耦电容要尽量靠近连接器引脚放置,走线要短而粗。我见过一个设计,去耦电容放在子板另一头,结果ADC采样时电源纹波大到影响信噪比。
常见问题:FMC子板上电后载板检测不到。排查顺序:先量VADJ电压是否正常,再查I2C总线上拉电阻是否焊接,最后用示波器看EEPROM的SDA/SCL是否有波形。十有八九是I2C地址冲突或上拉电阻缺失。
4. 载板与子板设计实操:从原理图到调试
4.1 载板设计要点:FPGA引脚分配与约束
设计FMC载板的第一步是确定FPGA的引脚分配。FMC连接器的引脚定义是固定的,但FPGA端的引脚是你自己选的。这里有几个原则:
第一,高速差分对必须连接到FPGA的收发器(GT)引脚或高性能I/O bank。比如Xilinx UltraScale+系列,HP bank支持的最高速率比HR bank高,GTY/GTM收发器则专门用于超高速信号。如果你把FMC的HA区域差分对连到了普通HR bank,那速率可能连5Gbps都跑不到。
第二,时钟信号要连到FPGA的专用时钟引脚(MRCC/SRCC)。FMC连接器上有CLK0和CLK1两组差分时钟,通常用来给子板提供参考时钟,或者从子板接收时钟。这些时钟信号必须连到FPGA的全局时钟引脚,否则时钟抖动会很大。
第三,LA区域的单端信号可以连到普通I/O。LA区域除了差分对外,还有一些单端信号(如I2C、JTAG、复位等),这些对引脚要求不高,随便连到普通I/O即可。
在Vivado或Quartus中做引脚约束时,要特别注意I/O标准的设置。FMC的VADJ电压决定了I/O bank的VCCO电压。如果VADJ是1.8V,那对应的I/O标准要设成LVCMOS18或LVDS(1.8V)。设错了轻则不工作,重则烧芯片。
4.2 子板设计要点:EEPROM编程与引脚映射
子板设计的核心是EEPROM内容的编写。FMC标准定义了一个特定的数据格式(基于IPMI规范),里面包含了子板的各种信息。你可以用FMC EEPROM编程工具(很多厂商提供)来生成二进制文件,然后烧录到24LC02里。
EEPROM里最关键的信息是引脚分配描述。它告诉载板:我的LA区域第0对差分是输入还是输出,电平标准是什么,有没有端接电阻等。载板上的控制器读取这些信息后,可以动态配置FPGA的I/O属性。
不过实际项目中,很多团队并不严格遵循这个规范。因为写EEPROM、调试I2C、验证兼容性都要花时间,而项目进度往往很紧。我见过不少子板干脆不焊EEPROM,载板也不读,直接硬编码引脚配置。这样做省事,但失去了FMC标准化的最大优势——互换性。
我的建议是:如果是内部项目、子板种类固定,可以简化EEPROM;但如果是产品化、需要支持多种子板,那EEPROM一定要做,而且要严格按照标准来。
4.3 上电时序与保护电路
FMC标准定义了上电时序:12V先上,然后3.3V,最后VADJ。载板上的电源管理芯片要保证这个顺序。如果顺序错了,子板上的器件可能因为I/O电压先于核心电压建立而损坏。
保护电路方面,至少要在12V和3.3V输入端加自恢复保险丝(PTC)和TVS二极管。我遇到过子板短路导致载板电源芯片烧毁的情况,加了保护之后最多换根保险丝。
还有一个细节:热插拔。FMC标准支持热插拔,但前提是载板和子板都有相应的保护电路。如果没有,带电插拔可能产生浪涌电流,损坏连接器触点或芯片。我一般建议客户不要带电插拔,除非系统明确要求。
实操记录:曾经调试一块高速ADC子板,采样率跑到1GSPS时数据误码率很高。排查了一周,最后发现是FMC连接器的某个地引脚虚焊。重新补焊后误码率降到1e-12以下。教训:FMC连接器的焊接质量一定要用X光检查,尤其是BGA封装的连接器。
5. 常见问题速查与避坑指南
5.1 识别与枚举失败
现象:载板上电后,FPGA读不到子板EEPROM,或者读到的数据全是0xFF。
排查步骤:
- 量VADJ电压,确认在子板要求的范围内
- 量I2C上拉电阻,确认SDA和SCL在空闲时是高电平(通常上拉到3.3V或VADJ)
- 用示波器看I2C波形,确认有起始条件和地址帧
- 检查EEPROM的写保护引脚(WP)是否接地
- 确认I2C地址没有冲突(FMC标准规定EEPROM地址是0xA0)
常见原因:上拉电阻没焊、EEPROM型号不对(有些型号的地址不一样)、I2C总线被其他器件拉死。
5.2 高速信号误码
现象:低速时数据正常,速率一高就误码。
排查思路:
- 先用示波器看眼图,确认信号幅度和抖动
- 检查差分对的长度匹配是否满足要求
- 确认FPGA端的均衡器(Equalizer)设置是否正确
- 检查参考时钟的抖动是否超标
- 如果是背板连接,检查连接器是否有信号完整性报告
我的经验:80%的高速误码问题出在PCB布线或连接器上,20%出在FPGA的收发器配置上。先查硬件,再调软件。
5.3 电源相关问题
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 子板不工作,VADJ为0V | 载板VADJ使能信号未拉高 | 检查载板电源管理芯片的使能引脚 |
| VADJ电压不对 | 分压电阻选错 | 根据子板要求重新计算分压电阻 |
| 上电后子板发热严重 | 电源短路或反接 | 立即断电,检查电源引脚是否短路 |
| 纹波过大 | 去耦电容不足 | 增加陶瓷电容,靠近负载放置 |
5.4 机械与结构问题
FMC子板的机械尺寸有严格规定,尤其是面板开孔位置和连接器高度。我见过子板做出来插不进去机箱的情况,就是因为面板开孔偏了几毫米。设计时一定要用VITA标准里的机械图纸做参考,不要凭感觉画。
另外,固定螺丝也很重要。FMC连接器的插拔力不小,如果没有螺丝固定,振动环境下子板可能松脱。标准规定用M2.5的螺丝,但实际用M3的也有。
6. 从FMC到FMC+的升级考量
6.1 什么时候需要升级到FMC+
如果你的应用满足以下任一条件,就应该考虑FMC+:
- 需要超过58对差分信号(单宽度)或82对(双宽度)
- 单通道速率超过10Gbps
- 需要连接多个100G以太网端口
- 使用最新的高速ADC(采样率>5GSPS)或DAC
FMC+的连接器虽然物理上兼容FMC,但载板设计需要升级。主要是PCB材料要换成低损耗板材,布线规则要更严格,电源也要能提供更大的电流(FMC+允许更高的单引脚电流)。
6.2 兼容性设计技巧
如果你要设计一个同时支持FMC和FMC+的载板,有几个技巧:
- 连接器选用FMC+的型号(560针),但引脚定义兼容FMC
- 电源设计留足余量,至少支持FMC+的最大电流
- PCB叠层按FMC+的要求设计,这样插FMC子板时性能更好
- 在FPGA端,把HP区域的差分对也连上,即使暂时不用
这样设计的载板成本会高一些,但未来升级空间大。我一般建议客户如果项目周期超过两年,直接上FMC+载板。
6.3 实际项目中的选型建议
最后分享一个选型决策表,是我在多个项目中总结出来的:
| 应用场景 | 推荐标准 | 连接器类型 | 备注 |
|---|---|---|---|
| 低速数据采集(<100MSPS) | FMC | 单宽度 | 成本低,LA区域够用 |
| 中速视频处理 | FMC | 单宽度 | 需要HA区域 |
| 高速ADC(1-5GSPS) | FMC+ | 双宽度 | 需要HP区域和低损耗板材 |
| 100G以太网 | FMC+ | 双宽度 | 必须用FMC+,FMC带宽不够 |
| 射频前端 | FMC+ | 双宽度 | 需要多通道同步 |
这个表只是参考,具体还要看FPGA型号、项目预算和进度要求。我在实际项目中遇到过因为FMC+连接器缺货而被迫改用FMC的情况,所以选型时也要考虑供应链。
个人体会:FMC标准最大的价值不是技术本身,而是它建立了一个生态系统。市面上有几百种FMC子板,从ADC到光纤到电机驱动,几乎覆盖了所有FPGA应用场景。你不需要什么都自己设计,买一块现成的子板,插上就能用。这个生态的价值,远比省几根走线要大得多。