JESD204B链路建立,很多工程师在ILAS阶段就放弃了

发布时间:2026/7/2 7:06:29
JESD204B链路建立,很多工程师在ILAS阶段就放弃了 你第一次接手JESD204B项目打开Xilinx的PG文档看到这坨状态机RESET → CGS → ILAS → DATA心想就4个状态能有多难两周后你的链路还在CGS阶段反复复位ILA里K28.5满天飞但就是进不了ILAS。你开始怀疑Xilinx的IP核是不是有bug。它没有bug。你只是漏掉了几个不起眼但致命的细节。先搞懂JESD204B的四个状态JESD204B的链路建立分四个阶段每个阶段有明确的退出条件阶段全称做什么退出条件RESET复位初始化所有计数器和状态机硬件稳定接收端准备就绪CGS通道同步Code Group Sync接收端拉低SYNC~发送端回复K28.5接收端完成字节对齐与字符锁定后释放SYNC~发送端检测到SYNC~拉高所有lane完成字符锁定且发送端检测到SYNC~拉高ILAS初始通道对齐序列Initial Lane Alignment Sequence发送端连续发送4个多帧的ILAS数据配置参数、测试序列、PRBS接收端校验全部通过DATA正常数据传输有效采样数据持续运行 / 误码超限回退关键理解接收端发起同步请求拉低SYNC~发送端响应。两端参数一致、时序对齐后共同完成链路建立不是某一方单方面主导。阶段1→2RESET到CGS——复位后不能立刻拉低SYNC~症状verilog// ❌ 复位后立刻拉低SYNC~always (posedge clk or negedge rst_n) beginif (!rst_n) beginsync_n_out 1b0; // 太早了endend根因高速SerDesGT需要时间完成PLL锁定、寄存器初始化、校准。复位立刻拉低SYNC~时发送端可能还没准备好导致同步失败或链路反复复位。修复verilog// ✅ 复位后等待硬件稳定localparam WAIT_CYCLES 1000; // 等待1000个时钟周期reg [9:0] wait_cnt;always (posedge clk or negedge rst_n) beginif (!rst_n) beginwait_cnt 0;sync_n_out 1b1;end else if (wait_cnt WAIT_CYCLES) beginwait_cnt wait_cnt 1;sync_n_out 1b1;end else beginsync_n_out 1b0; // 稳定后再请求同步endend阶段2→3CGS到ILAS——K28.5收到了但SYNC~没释放症状CGS阶段发送端持续发送K28.5/K/ 8hBC接收端在所有lane上都收到了K28.5但迟迟不进入ILAS。根因只收K28.5不够。JESD204B标准要求接收端完成字节对齐和通道字符锁定接收端主动释放SYNC~拉高发送端检测到SYNC~拉高后才停止发送K28.5切入ILAS如果接收端没有释放SYNC~例如因为CDR未锁定、复位状态机卡住发送端会永远发K28.5。修复检查接收端IP核的sync_n输出逻辑确保在锁定后自动拉高。同时检查发送端是否正确检测到SYNC~拉高通常用边沿检测。verilog// 发送端检测SYNC~拉高reg sync_rise;always (posedge clk) beginsync_rise ~sync_n_sampled sync_n_sampled_prev;if (sync_rise)cgs_done 1b1;end⚠️PCB等长要求同组Lane SYNC~走线等长误差应≤50mil约1.27mm2.5mm偏宽松高速率下可能对齐失败。阶段2→3K参数的取值范围JESD204B规范明确规定**K取值范围1~32**禁止为0。多帧长度 F × K octetsK0无意义。阶段3→4ILAS到DATA——ILAS校验失败的四种原因ILAS阶段发送4个多帧的校验数据接收端做三项校验多帧序号内容校验方式第1个多帧链路配置参数F/K/M/L/CS/NP等与本地配置比对第2个多帧链路配置参数重复再次比对增强可靠性第3个多帧用户定义测试序列通常为斜坡或固定值自定义校验第4个多帧PRBS伪随机序列接收端PRBS校验器检测误码原因1第1/2多帧参数不匹配接收端解析出的F/K/M/S值和自己配置的不一致。90%是因为IP核配置GUI里漏改了一个参数。特别注意除了F/K/M/S还容易漏掉CS转换器位数和NP每转换器打包的位数。这两个参数配错ILAS必挂。排查方法ILA抓接收端解析出的参数值和你的IP核配置逐项对比。原因2第3/4多帧PRBS校验失败数据通路在ILAS阶段就已经有误码了。说明物理层有问题。排查清单□ 眼图是否满足要求眼张开度60%抖动UI的20%□ 信号幅度是否在800~1200mVCML标准□ PCB差分阻抗是否100Ω±10%□ 接收端均衡器CTLE/DFE参数是否调好□SerDes收发极性是否反了极性反时CGS可能正常但ILAS必挂□发送端和接收端IP核的扰码scrambler开关是否一致一端开一端关ILAS校验直接失败原因3Lane对齐失败多lane场景下各lane到达接收端的时间差超过1个多帧时钟周期。接收端无法对齐lane间的数据。修复在发送端对每条lane做延迟补偿TX延迟tap让所有lane同时到达接收端。提示Xilinx JESD204B IP 核内置了自动 Lane 对齐功能大多数情况下不需要手动实现延迟补偿只有当 Lane 间 Skew 超过 IP 核内置对齐范围时才需要手动校准。原因4Subclass配置错误最隐蔽的坑Subclass确定性延迟实现方式常见误用0不支持无需要确定性延迟却选了0 → 每次复位后延迟不同多板同步失败1支持高精度SYSREF脉冲所有器件以SYSREF为时间基准对齐SYSREF时序没算对2支持通过SYNC~在LMFC边界的断言时刻来对齐两端的多帧计数器不依赖SYSREF。精度低于Subclass 1适合不需要纳秒级同步的场景❌ 原文错误描述为“依靠SYNC指针”或“与SYNC~无关”这是不准确的⚠️Subclass 2 的正确理解接收端在本地多帧时钟LMFC边界处拉低SYNC~发送端检测到此边沿后将自己的LMFC相位与接收端对齐。因此SYNC~在Subclass 2中参与定时只是不像Subclass 1那样需要额外的SYSREF信号。如果你需要确定性延迟但配成了Subclass 0链路能建立数据看起来也正常——但每次复位后延迟都不同多通道同步会随机失败。这种bug最阴因为单通道测试永远抓不到。一个更严谨的链路建立状态机带稳定等待veriloglocalparam ST_RESET 3d0;localparam ST_WAIT_STABLE 3d1;localparam ST_CGS 3d2;localparam ST_ILAS 3d3;localparam ST_DATA 3d4;localparam ST_ERROR 3d5;reg [2:0] link_state;reg [15:0] wait_cnt;reg [15:0] timeout_cnt;reg [1:0] ilas_mf_cnt;always (posedge device_clk or negedge rst_n) beginif (!rst_n) beginlink_state ST_RESET;wait_cnt 0;sync_n_out 1b1;// ... 其他初始化end else begincase (link_state)ST_RESET: beginwait_cnt 0;sync_n_out 1b1;link_state ST_WAIT_STABLE;endST_WAIT_STABLE: beginwait_cnt wait_cnt 1;if (wait_cnt WAIT_STABLE_CYCLES) beginsync_n_out 1b0; // 请求同步link_state ST_CGS;endendST_CGS: beginif (all_lanes_synced sync_n_released) begin // 接收端释放SYNC~且发送端检测到link_state ST_ILAS;timeout_cnt 0;end else begintimeout_cnt timeout_cnt 1;if (timeout_cnt CGS_TIMEOUT) link_state ST_ERROR;endendST_ILAS: beginif (ilas_valid) beginilas_mf_cnt ilas_mf_cnt 1;if (ilas_mf_cnt 3) begindata_valid_out 1b1;link_state ST_DATA;endend else begintimeout_cnt timeout_cnt 1;if (timeout_cnt ILAS_TIMEOUT) link_state ST_ERROR;endendST_DATA: beginif (link_error) link_state ST_ERROR;endST_ERROR: beginsync_n_out 1b1;link_state ST_RESET;enddefault: link_state ST_RESET;endcaseendend自检表□复位后等待至少1000个时钟周期再拉低SYNC~确保GT稳定□SYNC~信号接收端用ODDR输出发送端用IDDR采样□PCB等长同组LaneSYNC~等长误差≤50mil约1.27mm□参数一致F/K/M/S/CS/NP两端完全一致K范围1~32□Subclass正确需要确定性延迟必须用Subclass 1或2不要误用0□Subclass 2理解SYNC~在LMFC边界断言处参与对齐不是完全无关□扰码开关发送端和接收端必须一致都开或都关□极性检查SerDes P/N没有接反□时钟架构设备时钟、多帧时钟、SYSREF如用Subclass 1的分频关系正确□多lane校准优先依赖IP核自动对齐超出范围时才手动补偿