恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
FMC子卡选型与设计实战:从VITA 57标准到高速I/O布局
首页
资讯中心
/
FMC子卡选型与设计实战:从VITA 57标准到高速I/O布局
FMC子卡选型与设计实战:从VITA 57标准到高速I/O布局
发布时间:2026/8/31 23:39:47
做 FPGA 平台时间久了会有一种感觉真正卡住进度的往往不是 FPGA 本身而是外围 I/O。传感器的电平不匹配、视频接口类型换了、客户临时要加几路同步触发这些需求的共性是全都发生在板级物理接口这一层。FMC 这种 mezzanine 结构FPGA Mezzanine Card能把“I/O 形态”的选择从底板设计中抽离出来这也是它能在工业、通信、测试测量领域存活十几年的原因。最近我评估的一块 FMC 扩展板就把高速串行收发器、宽温并行差分信号、外部时钟和触发接口全部装在一块 VITA 57 子卡上SFP 笼子负责高速链路双排针引出 LVDS 和单端 GPIOSMA 口专门走参考时钟与同步信号。所谓“丰沛而灵活的 I/O 集”在硬件上的具体含义就是这些。下面的内容把这类板子的资源构成、双宽子卡的尺寸约束、载板协同设计和实测中踩过的坑一次性讲透给正在选型或者准备自己画 FMC 的同行做个参考。1. FMC 标准到底规范了什么脚位结构先决定 I/O 上限1.1 VITA 57 解决的核心问题FMC 能成为 FPGA 生态里的事实标准核心原因不是“多了一个连接器”而是它把底板和接口子卡之间的物理机械尺寸、电气定义、电源体系、管理通道全部统一了。底板厂商只需要按标准把 FMC 座子布上去用户根据自己的业务场景插不同的子卡底板不需要因为接口形态变化而重新投板。这个思路和处理器总线标准化很像处理器不变总线协议变了就换接口卡。VITA 57.1 定义了最初的 FMC 标准后来为了适应芯片功耗和 SerDes 速率提升又出了 FMCVITA 57.4。FMC 在连接器机械结构不变的前提下对差分信号完整性、地弹、屏蔽等要求更高主要面向 10Gbps 以上的高速链路。选子卡之前先搞清楚你用的载板支持的是 VITA 57.1 还是 57.4因为高速收发器差分对的要求完全不同。1.2 LPC 与 HPC同一张载板两种 I/O 天花板FMC 连接器按引脚数分成两种这是选型时必须面对的第一个分叉口。对比项LPCLow Pin Count160 脚HPCHigh Pin Count400 脚适用场景低速并行总线、少量 GPIO、简单时钟高速串行链路、宽并行差分接口、ADC/DAC 采集用户可用的差分信号组通常只有 LA 一组几十对以内LA HA HB差分资源翻倍以上高速收发器支持看载板一般只支持少量或者不引最多能到 10 对左右的 Tx/Rx 通道载板复杂度和成本低高注意LPC 和 HPC 的上限是标准定义的“能力上限”不是每块载板都真的把那些引脚全部拉到了 FPGA。有些商用板子标着 HPC实际为了布线方便只接了其中一部分。所以拿到载板原理图或者 pin map 之后第一件事是核对哪些 LA/HA/HB 信号真的连到了 FPGA 的哪些 bank哪些 MGT 通道被占用了千万不要只看连接器外形。1.3 按项目需求倒推脚位选择选 LPC 还是 HPC不是越贵越好而是看信号类型和路数。我的习惯是先列一张接口清单把项目里所有物理链路映射成三类资源高速串行SFP、QSFP、PCIe、SRIO、JESD204B、并行/差分采集LVDS ADC、DAC、Camera Link、低速控制UART、SPI、I2C、CAN、低速 GPIO。然后分别统计差分对数量和 MGT 通道数量再决定 LPC 还是 HPC。如果一个项目里既有 4 路 10G 光口又有一组 16bit250MSPS 的 ADC 并行 LVDS 接口那基本直接锁定 HPC。如果只是想做几个 SPI 隔离输入、一组按键和 LEDLPC 反而更省事载板成本低布线压力也小。2. 这块 FMC 板的 I/O 资源清单高速、并行、时钟各司其职2.1 高速串行通道物理层只负责透明传输这块板子我评估的版本是双宽 HPC 子卡正面放了 4 个 SFP 笼子。SFP 信号通过 FMC 连接器上的 MGT 差分对直接回到载板 FPGA 的高速收发器中间不走协议芯片完全是透传路径。这样做的好处是 FPGA 内部想跑什么协议都行10GbE、自协商 SerDes、CPRI/eCPRI甚至自定义的裸流传输只要逻辑和线速率支持就没有问题。高速收发器路径上要做对几件事AC 耦合电容必须放在靠近发送端一侧具体位置按收发器手册要求一般推荐放在差分走线离开 FPGA 引脚后的 100 到 300 mil 范围内。差分对的等长控制不是越短越好而是要保证收发两端内部的 P/N 相位延迟足够接近通常 P/N 长度差控制在 5 mil 以内。SFP 笼子的外壳地要单独处理用多个过孔连接到母板地平面不要和信号地混成一小块孤岛。载板上如果有多组 SFP 同时跑 10G参考时钟的抖动指标就非常关键。这块子卡用了片内可编程时钟芯片生成 MGT 参考时钟避免载板上的普通时钟源带来的附加抖动。2.2 并行差分与单端 GPIO要能同时伺候 AD/DA 和工业逻辑并行接口部分最容易被低估。很多项目需要的不是一条高速串行线而是几十路 LVDS、单端 TTL 电平的握手信号、数据总线。这块板子在末端留了两个 2.54mm 40pin 双排针每个排针分成电源、地、差分信号区三块。接 AD/DA 子板时用 LVDS 差分对接工业 IO 模块时把 bank 电压切到 3.3V 用单端模式。这里比较关键的是 bank 电压VCCO的切换。FMC 标准里 VADJ 是载板提供的但子卡上的 FPGA bank 电压往往由子卡自己产生或者通过跳线选择。这块板子的做法是每个 GPIO 排针区域单独一个 LDO通过跳线帽在 1.8V、2.5V、3.3V 之间切换同时还有一个电平转换芯片兜底。实际使用时必须注意如果排针外部设备是 5V 逻辑不能直接怼到 3.3V 排针上需要加转换或者选配隔离挡板否则 GPIO 芯片的 ESD 结构会先被击穿。并行接口的阻抗匹配也很影响信号质量。板子上每个差分对附近预留了 100Ω 终端电阻焊盘可以通过 0Ω 电阻选择是否启用。短距离排线连接时终端电阻一般建议启用避免振铃如果走线很长反而要在 FPGA 内部配置 ODT 和输入终端而不是只依赖板端电阻。2.3 时钟与同步口外部参考和触发信号单独走 SMA多板同步是 FMC 板最容易“看起来简单、实际坑很多”的场景。这块板子保留了 4 个 SMA 口两个定义为时钟输入/输出两个定义为通用触发/标志信号。时钟 SMA 进来之后先过射频变压器转差分再经过时钟芯片做扇出和占空比修正最后送到 FPGA 的全局时钟引脚和 MGT 参考时钟输入。外部时钟和板载时钟的切换不是简单用拨码开关就能完事的需要留意切换瞬间可能出现毛刺。常见做法是用时钟芯片的输入选择 MUX先把目标时钟锁存稳定再通过 FPGA IO 控制切换使能。这个板子上把切换逻辑接到了一个本地 MCU上位机可以通过 I2C 下发指令我实测过程中切换后的第一个时钟周期毛刺基本被抑掉了但前提是两边时钟频率必须一致否则必须做异步切换。时钟通路还要考虑参考地的问题。SMA 外壳地和 FMC 连接器的地之间不能是“似连非连”的状态否则高速时钟的共模噪声会直接进到 FPGA引入额外确定性抖动。多板级联时建议在两个 SMA 之间用同轴电缆连接并确保所有板子共地不然会产生地环路电流。3. “双宽”与“单宽”不是随意选的尺寸、孔位、散热一起锁死方案搜“FMC 双宽子卡尺寸”的人多半是已经被尺寸坑过一次了。VITA 57 标准里双宽子卡的宽度是单宽的约两倍但很多工程师第一版画的是“按单宽逻辑布线按双宽角度抄板”结果开孔、螺柱、连接器位置全对不上。3.1 标准尺寸与载板兼容性VITA 57.1 常见的两种尺寸单宽69.0mm x 76.5mm双宽139.0mm x 76.5mm两个方向别看反了。76.5mm 是沿连接器插入方向纵深69mm 和 139mm 是垂直于连接器的宽度方向。很多结构工程师第一次看图纸时会以为双宽是纵深翻倍但实际上双宽多出来的是板卡宽度纵深基本不变。这个差异决定了机箱里子卡沿着导槽推入的空间是否够用。双宽子卡的连接器位置也有讲究。标准允许双宽板正面、背面各放一个连接器实际产品里常见的是一张双宽板只放一个 HPC 连接器空出来的另一侧做接口面板和供电电路。选型时一定要对照载板 FMC 座子的实际位置和周围限高尤其注意连接器旁边有没有大电容、散热器遮挡。3.2 孔位、锁紧和装配顺序FMC 子卡和载板之间通常用 M2.5 铜柱固定孔位坐标在 VITA 57 里有明确规定。市面上一些便宜的“兼容 FMC”子卡孔位和标准并不完全一致拧上去能固定但连接器处受力不均长期振动后可能出现接触不良。另一个容易忽略的是装配顺序先把 FMC 连接器对准载板插座轻轻压合到位再拧四角的固定柱。反过来操作容易造成连接器针脚斜插内部弯曲。拧固定柱时建议对角交替拧不要一颗拧到底再拧下一颗。上电之前用万用表量一下子卡连接器两侧的地和电源是否短路这是成本最低的保障手段。3.3 散热约束往往决定最终能跑多少资源双宽子卡面积大能放的接口模块自然多但散热问题也一起放大。SFP 光模块在跑到 10G 时发热非常明显如果光模块紧贴着 ADC 或者时钟芯片共享一个狭小空间温度会互相传导。这块板子的布局把四个 SFP 集中在面板一侧靠近结构通风口ADC/电源放在另一侧中间用铺铜和地孔做隔热缓冲。功耗预算先粗算再细算。规则是一块自然对流散热的 FMC 子卡整板功耗尽量控制在 10W 以内如果超过 15W建议必须加主动散热或者导风罩。双宽板虽然面积大但并不等于能无限制堆功耗因为载板上的 FMC 供电能力通常也有上限这部分要回头去看载板的电源设计。4. I/O 多了之后供电与上电时序才是真正的隐形瓶颈4.1 FMC 标准里的电源轨FMC 连接器不是只传信号的它也承载了标准定义的几个电源轨。电源轨典型电压用途容易忽略的点VCC3P33.3V子卡逻辑、EEPROM、控制电路电流有限别拿它直接带动多个 SFPVCC1212V子卡 DC/DC 输入负载瞬态波动大电源去耦要足VADJ1.2V2.5VFPGA bank 电压参考电压匹配是硬要求地0V信号回流连接器地脚数量决定回流质量VADJ 这轨最容易出事因为很多载板允许通过跳线或软件配置输出不同电压。子卡上的 FPGA bank 如果和 VADJ 不匹配上电瞬间就可能出现过压轻则 bank 损坏重则把载板 FPGA 也带走。使用前必须确认系统里 VADJ 的实际电压并和子卡的 bank 电压一致。4.2 上电时序和热插拔FMC 标准本身并不强制支持热插拔大部分工业系统都是冷插拔。但工程上为了调试方便很多人会带电插拔子卡这是非常危险的操作。连接器针脚密电源和信号在插拔瞬间顺序不确定极易出现回压电流或者闩锁效应。如果确实需要频繁调试建议从硬件层面做两步载板上的 FMC 电源用负载开关或限流器子卡上的保护二极管和保险丝必须靠近连接器放置。同时子卡上的状态指示 LED 要能单独指示电源是否正常至少让你在插拔前知道系统状态。4.3 电流估算用数字说服自己高速链路的电流不能拍脑袋。举例4 路 SFP 光模块在 10G 模式下每个光模块约消耗 0.5A 到 0.8A3.3V合计接近 3A4 个 MGT 收发器在 FPGA 内部每通道约消耗几十毫安到上百毫安电压 1.8V 左右再加上 GPIO 负载、时钟芯片和 DC/DC 损耗这还没算 ADC 子板整板瞬时功耗很容易超过 10W。电源设计必须按最大负载预留至少 30% 余量而不是按典型功耗算。5. 和载板对接时最容易忽略的引脚映射与时钟协同5.1 引脚约束要从 FMC 定义出发而不是从 FPGA 任意选脚FPGA 引脚是否能接到 FMC 连接器在载板设计阶段就已经固定了。我们自己写约束时必须沿着“FMC 连接器信号名 → 载板原理图网络 → FPGA bank/引脚”这条链路走。以 Xilinx 环境为例一段典型的 FMC LA 差分对约束大概长这样set_property PACKAGE_PIN AV9 [get_ports fmc_la00_p] set_property PACKAGE_PIN AW9 [get_ports fmc_la00_n] set_property IOSTANDARD LVDS [get_ports fmc_la00_p] set_property IOSTANDARD LVDS [get_ports fmc_la00_n] set_property DIFF_TERM TRUE [get_ports fmc_la00_p]注意我这里的 AV9/AW9 只是示例真实引脚必须以载板厂商给的 FMC pin map 为准。很多人直接拿别人工程里的 FMC 约束片段套到自己板子上结果跑了三天发现引脚根本不在指定 bank或者 bank 电压不匹配白白浪费时间。5.2 载板上 FMC 座子的版本差异不同厂商的 FMC 座子外观几乎一样但焊盘和结构锁扣有差异。有些座子支持加高连接器方便子卡背面放更高器件但加高之后信号路径变长高速链路余量会下降。10G 以上的链路一般不建议用加高连接器6G 以下可以看散热需求折衷。载板端还要留意 FMC 座子周围的地孔数量和分布。FMC 连接器中间有大量地脚如果载板设计阶段没有给这些地脚打足够多的过孔到底层地平面高速信号的回流路径会绕远产生额外的串扰和辐射。5.3 时钟芯片的配置与锁定这块子卡上的时钟芯片初始配置是通过 EEPROM 启动时读入还是通过 I2C 在线配置会影响上电后的工作顺序。如果 FPGA 逻辑也需要时钟芯片提供启动时钟那就会出现“鸡生蛋”问题时钟芯片没有配置好FPGA 无法启动FPGA 没启动芯片拿不到 I2C 配置。稳妥做法是让时钟芯片工作在硬件引脚设定的默认频率上确保系统上电后第一时间有基本时钟可用然后应用程序再通过 I2C 微调频率和相位。多板同步时优先使用外部 SMA 时钟作为主参考并设置好时钟芯片的同步输入。所有子板的时钟芯片都要支持同步锁定信号锁定时把 LOCKED 状态接到 FPGA 输入逻辑侧只有看到全部 LOCKED 才能开始采集或输出否则第一包数据一定是错位的。5.4 用脚本生成 FMC 约束减少人工出错FMC 引脚数量多手工敲约束除了慢还容易漏。我后来习惯把载板的 FMC 引脚定义整理成一个 CSV 或者 JSON 文件然后用脚本生成完整的 XDC 约束。收益是换载板时只改引脚映射表约束文件自动更新不会出现手写 typo 导致“以为接上了其实没接”的情况。6. 实测中的几个高发问题和处理办法6.1 HPC 连接器不一定是全高配遇到过一块商用载板外框印着 FMC HPC但打开原理图一看HA/HB 两组信号只连了一部分另外一部分引脚被复用到了板载调试口。如果只按 HPC 规格选子卡插上去某些通道必然静默。这种问题在原理图阶段就能避免把载板 pin map 和子卡 pin map 做一次表格比对所有实际使用的信号逐一勾选。6.2 VADJ 电压不一致板子能上电但 FPGA bank 受损坏曾有一次插上调好的子卡后IO 电平怎么都不对测量发现载板 VADJ 是 1.8V子卡上一路 2.5V bank 跑到 2.5V接口电平不一致。调试时万用表一量实际载板 VADJ 和一个闲置跳线有关出厂默认不是标准 2.5V。之后我再也不信“按默认配置即可”这种话每次换载板都先测量 VADJ 和 12V 是否稳定再插子卡。6.3 高速信号眼图不过先从连接器和终端查起用 FPGA 自带 IBERT 或 GT 眼图扫描功能性验证高速链路时发现 10G 通道眼高偏低。排查过程是先确认 AC 耦合电容在位、容值正确再检查差分走线有没有跨分割最后发现板子上一对 MGT 走线末端多加了一颗 50Ω 对地电阻等于把终端阻抗拉低导致反射严重。这种问题用规范化的原理图审查很容易发现最怕的是靠“别人给的模板”顺手复制把多余的电阻也抄进来了。6.4 插拔时 FMC 连接器针脚弯曲连接器针脚弯曲的问题比想象中高发尤其是双宽子卡比较重的时候。双宽板比单宽板长一倍插拔时如果只用手压一边另一侧会先翘起来连接器针脚受力不均就会弯。正确做法是双手握住子卡两侧水平均匀下压听到连接器锁扣到位的声音后再松手。一旦发现针脚弯曲不要再硬插用放大镜确认弯曲程度轻度的可以用尖嘴钳小心扶正严重的只能换连接器。6.5 子卡温度过高导致传输不稳定高速链路连续跑了几小时偶尔出现链路 down 掉再恢复的情况排查发现子卡 SFP 区域温度已经接近 85 度。光模块本身的温度阈值并不高长期高温会劣化光功率。后来的处理是调整结构风道在 SFP 笼子位置增加一个小型风扇。这也提醒我FMC 功能验证不能只看室温下的短时结果高温老化测试一定要做尤其多通道同时满载时。6.6 模块管理 EEPROM 不带会有什么后果VITA 57 标准里定义了子卡上的管理 EEPROM里面可以存放模块名称、版本、供电需求等信息。很多自制子卡不焊这个 EEPROM实验室环境没问题但一旦进入系统集成载板无法自动识别子卡型号也就无法动态调整 VADJ 和时钟配置只能靠人工设置。我在实际工程中会把 EEPROM 直接列为必焊项哪怕只有最基本的管理字段也能省下大量调试时间。最后分享一个我后来固定的习惯每次拿到新 FMC 子卡先不急着上系统而是