FPGA ISERDESE/OSERDES 串并转换:普通 IO 上的 LVDS SerDes 怎么做
ADC、CMOS 图像传感器、LVDS 视频链路给出的数据常常是一对差分时钟配若干对差分数据,单线速率在约 100Mbps 到 1.2Gbps 量级。这种速率普通触发器直接收会全线时序违例,上 MGT 千兆收发器又没有随路时钟可接、大材小用。Xilinx 7 系列在普通 IO 里放了一对专用单元——ISERDESE2(串入并出)和 OSERDESE2(并入串出),本篇讲清 FPGA ISERDESE OSERDES 串并转换的机制、BITSLIP 字对齐与时钟结构。MGT 一侧的对照概念见 FPGA 千兆收发器概念,随路时钟的全局组织见 时钟区域与 BUFG/BUFIO/BUFR,逐比特延迟微调见 IDELAY/ODELAY 延迟单元。
本文要回答的问题
- 一两百 Mbps 到 1Gbps 出头的源同步数据,为什么不能让用户逻辑里的触发器直接去收?
- ISERDESE2 的 1:4/1:8 解串和 DDR 双边沿采样具体怎么工作,BITSLIP 为什么能把错位的并行字「滑」对?
- IDELAY、BUFIO、BUFR、MMCM 相移各自在接收链路里承担什么角色?中心对齐和边缘对齐两种采法差在哪?
- 发送方向的 OSERDESE2 怎么做 8:1 并化,三态(1/0/Z)怎么一起序列化?
- 同样是「SerDes」,普通 IO 上的 ISERDESE/OSERDES 与 GTP/GTX 收发器的能力分界到底在哪里?
先用一张对照卡给出全篇的判断骨架:什么时候该留在普通 IO,什么时候必须上 MGT。
读这张卡抓住「随路时钟」这条分界线:左边所有机制都建立在「对方把时钟随数据一起送过来」之上,右边则从数据里自己长时钟。下面五节先展开左边。
一、不要会怎样:普通触发器撞上双边沿高速数据
先看不用专用单元时的困境。一个 7 系列 FPGA 触发器的建立/保持时间在亚纳秒量级, fabric 内普通布线还能靠时序约束、工具自动插缓冲收敛,但数据从焊盘进来要先经过 IO buffer、再走布线到 CLB 里的触发器,这一段传播延迟本身就有皮秒级抖动,再加上同一位周期内要做两次采样,普通结构直接失效:
第一,双边沿数据用单沿触发器收不齐。 DDR(Double Data Rate,双数据速率)源同步接口在时钟的上升沿和下降沿各发一位,用户逻辑若只用一个系统时钟的单边沿采样,等于丢掉一半比特;若让逻辑自己反相时钟再打一拍,两个时钟的偏斜无法保证,时序工具也不认为这是合法的同沿约束。
第二,位周期短于进片延迟加建立时间之和。 单线 800Mbps 时位周期只有 1.25ns 左右(数值为量级示意,具体以器件速度等级数据手册为准),焊盘到 fabric 触发器的路径加上建立时间几乎吃掉整个位周期,时钟偏斜稍大就踩边沿。
第三,位宽一拼多,fabric 做不到确定性对齐。 串行流要在片内拼成 8 位、10 位或 14 位宽的并行字交给后级逻辑,手工用触发器搭移位寄存器意味着解串寄存器离焊盘远近不一、各比特偏斜不同,同一位宽内的比特互相错位。
ISERDESE2 的价值就是把这三件事搬进 IOB(IO Block,紧贴焊盘的 IO 逻辑块) 里用专用硬件做掉:专用 DDR 寄存器双边沿取数、移位寄存器链就在焊盘旁、输出直接是并行宽字。FPGA ISERDESE OSERDES 串并转换因此是源同步接口的标准解法,而不是让用户逻辑硬扛时序。
二、ISERDESE2:串入并出、DDR 采样与并行宽字
ISERDESE2 是放在 IOB 里的专用串入并出单元。7 系列里它支持 1:2、1:3、1:4、1:6、1:7、1:8、1:10、1:14 等串并比(具体可选组合以库指南为准),最常用的是 1:8 和 1:4:串行引脚上每来 8 个(或 4 个)比特,就在低速并行时钟 CLKDIV 的一个周期里向 fabric 输出一个完整宽字。1:10/1:14 这类位宽服务带同步头的视频/显示类接口,单个 ISERDESE2 位宽不够时还可以用主从级联模式,把相邻 IO 上的两个单元接成更宽的移位链。
读这张图抓住数据与时钟两条线:灰色是进出芯片的边界,橙色是纯模拟/IO 通道,紫色 IDELAYE2 负责把比特沿「挪」到合适位置(详见 IDELAY/ODELAY 延迟单元),蓝色 ISERDESE2 负责采样与拼字;两个绿色节点是时钟设施——BUFIO 输出高速串行钟、只驱动同一 I/O 列内的串行寄存器,BUFR 局域缓冲分频出 CLKDIV,既驱动 ISERDESE2 的并行侧,也作为 fabric 侧接收逻辑的工作时钟。时钟资源的全局视角见 时钟区域与 BUFG/BUFIO/BUFR。
下面的波形示意 DDR 模式下串入并出的节拍:串行比特在高速时钟的两个边沿各取一位,填满 8 位后在 CLKDIV 域一次性给出并行字。
读这张波形看两层节拍:BUFIO 快钟每个周期(上升沿加下降沿)收进两位,8 位填满正好对应一个 CLKDIV 周期;并行字在 CLKDIV 域稳定输出,fabric 从此只面对低频宽字,不再接触高速串行节拍。配置上 DATA_RATE 设为 DDR、DATA_WIDTH 设为 8 即得到上述行为;接口类型选 NETWORKING 还是 MEMORY 影响延迟与 CLKDIV 分频约束,照库指南选。需要注意的是,此时拼出来的字比特边界未必正确——移位链从哪一位开始装取决于上电和线路延迟,这正是下一节 BITSLIP 要解决的问题。
三、BITSLIP 字对齐:让并行字逐拍滑动
解串器能把每 8 个比特打成一包,却不知道「一包」应该从流里的哪个比特开始。假设协议规定发送端周期性送出训练字(如视频链路的同步码、LVDS 通信里的逗号/K 字符,下文统称期望字),接收端复位后看到的并行字通常是期望字循环移位后的某个形态。BITSLIP 是 ISERDESE2 的一个控制脉冲:在 CLKDIV 域每有效一次,移位链的装载窗口就滑动一个比特位置——SDR 模式滑一位,DDR 模式一次滑一个比特对,表现为输出并行字相对比特流旋转一拍。训练逻辑反复发脉冲、检查输出,直到并行字等于期望字,锁定完成。
这张流程图的颜色就是训练状态机的语义:红色是入口现象(拿到错位的字),蓝色是反复执行的比对动作,橙色 BITSLIP 是每轮的执行动作,紫色是锁定后的收尾。正常情况下一个 8 位宽接口最多滑动若干次必然命中;若滑完一整圈仍无一次命中,问题不在字边界,而是比特采样位置本身错了(延迟没调对或时钟相位错),应回去调 IDELAY 或时钟相移,而不是继续空转训练机。
逐拍滑动在波形上表现为并行字每次旋转:
读这张波形:每个 BITSLIP 脉冲之后的下一个 CLKDIV 周期,q 的比特图案整体旋转一位(示意值仅表达「旋转」这一动作,不是真实协议码);第四次检查时图案与期望字一致,训练逻辑拉高锁定标志,此后不再发脉冲,链路进入正常接收。训练期间的数据必须丢弃或标记无效,不能让未对齐的字混进后级。
把这套握手补全,用户逻辑与 ISERDESE2 之间的交互如下。

这张时序图强调三个工程细节:BITSLIP 脉冲宽度是一个 CLKDIV 周期、不能拉成电平;滑动结果要等下一个 CLKDIV 周期才在 q 上体现,比对必须打一拍再采;循环要有退出上限,滑满一圈未命中要报错而不是无限训练。多位宽总线(如 8 位数据分 8 对差分线进 8 个 ISERDESE2)时各单元的 BITSLIP 可以先独立训练、再用 FIFO 吸收通道间残余偏斜,也可以由同一个状态机统一调度。
四、时钟结构:中心对齐、边缘对齐与 IDELAY 的角色
随路时钟与数据在板上的相位关系决定采法,常见两种:
| 形态 | 板上相位 | 接收做法 | 典型手段 |
|---|---|---|---|
| 边缘对齐(edge-aligned) | 时钟边沿对准数据边沿 | 先把时钟或数据相移约 90 度,让边沿落在数据眼中央 | MMCM/PLL 相移时钟,或对数据加 IDELAY |
| 中心对齐(center-aligned) | 时钟边沿已在数据眼中央 | 直接用随路钟采,IDELAY 只做小范围修正 | BUFIO 直采,IDELAY 按板级实测微调 |
BUFIO 提供与焊盘同频、低抖动的高速钟给 ISERDESE2 的 CLK/CLKB(CLKB 是反相时钟,供 DDR 另一半边沿使用);BUFR 把它分频成 CLKDIV,分频比必须与串并比匹配(1:8 模式分频 4,因为 DDR 每周期两位,具体约束照库指南与 UG471/UG472 的原语表)。需要相移时,常见做法是让随路时钟先进 MMCM 或 PLL,用其相移后的输出再驱动 BUFIO/BUFR;MMCM 还能做动态相移,配合训练算法自动找眼图中心。时钟设施的层级关系见 时钟区域与 BUFG/BUFIO/BUFR。
IDELAYE2 处在数据通路上,是一个 31 抽头量级的可编程延迟线(抽头数、单抽头分辨率随速度等级和参考时钟而定,约数十皮秒一档,以数据手册为准)。它解决的是「时钟相移粒度不够、板级各 lane 偏斜不一」的问题:逐 lane 微调数据到达 ISERDESE2 的时刻,把采样点放进各自眼图中央。只要用了 IDELAY,同一个 bank(或其管辖区域)必须实例化 IDELAYCTRL 并给它供参考时钟,否则延迟抽头不工作——这是新手最常漏的一颗原语,机制与参考时钟来源见 IDELAY/ODELAY 延迟单元。
五、OSERDESE2:并串发送与三态并化
发送方向是接收的逆过程。OSERDESE2 把 fabric 送来的并行宽字在高速时钟节拍下逐位推出焊盘,支持 8:1、4:1 等并串比(含 DDR 模式下 2 位/时钟周期的推法),并可两片级联做到更宽的 10:1、14:1,与接收侧位宽对应。并行数据在 CLKDIV 域一次性装载,随后按串行节拍先送低位或高位(由位序配置决定)移出,经 ODELAYE2 可再做发送相位微调,最后由 OBUFDS 变成 LVDS 差分对出芯片。
视频类和部分存储接口还有一个特殊需求:三态数据也要序列化。OSERDESE2 除数据输入外还有一组三态控制输入(TRI input),用户逻辑按并行宽度给出一串 1/0/Z 选择(TMARK 通道),它在并化数据的同一条移位链里把三态控制也按相同节拍推出,使输出使能与串行比特逐位对齐——手工逻辑不可能在 1Gbps 下保证使能信号和数据同相,这也是必须用专用原语的原因之一。
接收与发送在工程上常常成对出现:ADC 采集板用 IDELAY+ISERDESE2 收,配置回传或同源的 DAC 控制通道用 OSERDESE2 发,两侧共用同一个 MMCM 产生的时钟树,保证全链路同源。
六、与 MGT 的分界:一张表说尽
ISERDESE/OSERDES 和 GTP/GTX 都叫 SerDes,选型时按下表分界,表中速率均为量级口径,具体数字以目标器件数据手册为准。
| 维度 | ISERDESE2/OSERDESE2 | MGT(GTP/GTX/GTH) |
|---|---|---|
| 速率档(单线) | 约百 Mbps 到 1.2Gbps 量级 | 数 Gbps 到十几 Gbps 及以上 |
| 时钟 | 必须有外部随路时钟,BUFIO/BUFR 接收 | 无随路时钟,CDR 从数据沿恢复,只需 MGTREFCLK 频率锚点 |
| 线路编码 | 不规定,训练字/同步码自定义 | 内置 8B/10B、64B/66B 等成段处理 |
| 对齐手段 | IDELAY 抽头加 BITSLIP 逐拍滑动 | comma 检测、字对齐、通道绑定在 PCS 内完成 |
| 信道补偿 | 无模拟均衡,靠板级等长与短距离 | 内置 CTLE/DFE 均衡与发送预加重 |
| 引脚 | 普通 HR/HP IO,可与普通逻辑混用 | 专用引脚、专用 bank、独立模拟电源 |
| 典型协议/场景 | ADC/CMOS 传感器、Camera Link、自定义 LVDS 视频 | PCIe、SATA、JESD204、万兆以太网、光口、背板 |
一句话收口:随路时钟能在板上稳妥走到 FPGA 的距离和速率内,ISERDESE/OSERDES 简单、便宜、引脚自由;一旦时钟比数据更难传、信道开始涂抹比特、或要对接标准串行协议,就越过了 MGT 的门槛。MGT 内部 PMA/PCS 的完整机制见 FPGA 千兆收发器概念。
七、常见坑
| 坑 | 表现 | 处理 |
|---|---|---|
| BITSLIP 同步/异步行为混淆 | DDR 网络模式下按「滑一位」理解,训练状态机少滑或多滑 | 查库指南中该接口类型的滑动步长(DDR 下为比特对口径),按实际观测旋转量设计循环上限 |
| 漏 IDELAYCTRL | IDELAY 抽头不生效,延迟恒为 0,时序裕量随机 | 每个相关 bank 放 IDELAYCTRL 并接参考钟,复位期间先等它 READY |
| 并行侧直接跨时钟域使用 | q 在 CLKDIV 域,后级处理在系统钟域,偶发错字 | 两级同步只适用于控制信号;数据一律进异步 FIFO 或同源于一个 MMCM |
| 多 lane 各自对齐后通道间仍错位 | 单 lane 训练成功,像素/样本通道间差一拍 | lane 内 BITSLIP 对齐后,再用 FIFO 或公共使能做 lane 间对齐 |
| 仿真里训练永远不收敛,又看不出原因 | testbench 给的数据无训练字、时钟相位理想化 | TB 必须周期性发期望字并模拟板级延迟;分别验证「延迟对但字错位」与「延迟错」两种失败 |
| CLKDIV 分频比与串并比不匹配 | 实现期 DRC 报错或并行字顺序错乱 | 按 DATA_WIDTH 与 DDR/SDR 照原语表设 BUFR 分频,不要凭感觉填 |
这一篇在知识体系里的位置
本篇属于 FPGA 高速接口簇的源同步支线:上一层全景与 MGT 概念读 FPGA 千兆收发器概念,两者合起来覆盖「普通 IO 串并化」与「专用收发器」两个速率世界;逐比特延迟微调与 IDELAYCTRL 参考时钟的细节在 IDELAY/ODELAY 延迟单元,BUFIO/BUFR 与时钟区域、MMCM 相移的组织方式在 时钟区域与 BUFG/BUFIO/BUFR。再往下动手,例化与约束属于 Vivado 原语实操,仿真验证方法与「仿真过、上板挂」的排查思路可参考仿真与板级调试相关篇目。低速控制类外设(普通 SPI 采 ADC 一类)不需要本篇任何机制,不要过度设计。
总结
FPGA ISERDESE OSERDES 串并转换可以收成一句话:在约 100Mbps 到 1.2Gbps 的源同步区间,ISERDESE2 用 IOB 内的 DDR 采样与移位链把串行比特拼成 1:4/1:8 并行宽字,BITSLIP 脉冲让装载窗口逐拍滑动、配合训练字完成字对齐,IDELAY 与 BUFIO/BUFR/MMCM 分别负责逐比特延迟和双速时钟结构,OSERDESE2 则在发送方向做 8:1 并化并把三态控制一并序列化;它依赖外部随路时钟、引脚自由、机制全数字,而无随路时钟、数 Gbps 或标准串行协议的场景属于带 CDR、线路编码与模拟均衡的 MGT——按「有没有随路时钟、速率、协议」这三条分界选型即可。