摘要:本笔记基于 SRIO (Serial RapidIO) 协议文档,重点探讨物理层端口初始化、IDLE 序列机制以及在 FPGA 仿真/调试中的关键观测点。
1. 端口初始化流程 (Port Initialization)
端口初始化是 SRIO 建立通信链路的第一步,主要包含以下核心环节:
- 链路对方检测 (Link Partner Discovery):检测链路另一端是否存在有效的 RapidIO 设备。
- 位同步与码组对齐 (Bit Sync & Code Group Alignment):
- 建立 SerDes 层的位同步。
- 对齐 8B/10B 或 64B/67B 的码组边界。
- 模式协商 (1x/Nx Discovery & Negotiation):
- 在支持多通道(如 1x/4x)的端口上,尝试以最高速率/最大通道数(4x)建立连接。
- 若 4x 失败,则降级回退到 1x 模式。
2. IDLE 序列机制 (IDLE Sequences)
SRIO 协议定义了 IDLE1 和 IDLE2 两种空闲序列,其复杂度和功能有所不同:
2.1 IDLE1 vs IDLE2
- IDLE1:相对简单,主要用于 Gen1 速率或低速链接。
- IDLE2:用于 Gen2 及以上速率。
- 加扰 (Scrambling):数据被加扰处理,使得波形分析变得困难(无法直接通过物理层观测出规律数据)。
- 随机字符嵌入:包含 5 字符随机数域及 /K28.5/ 引导字符。
2.2 时钟补偿 (Clock Compensation)
- IDLE2 序列允许端口注入特定的控制字符来进行补偿。
- 典型的时钟补偿序列为
/K/R/R/R/(对应十六进制:0xBCFDFDFD)。
3. 控制符号 (Control Symbols, CS)
控制符号是 SRIO 物理层交换状态信息的核心:
- CS 标记域:包含 32 个字符,由特定的编码字符(如 D7.3, D24.3 等)组成,表示 2bit 信息。
- 校验保护:[32:63] 位通常作为校验数据,是前面数据的补码,确控制信息的可靠性。
- 状态同步:通过 CS 域提供对端发送加重设置及本地状态(port_initialized 等)。
4. FPGA 仿真与调试观测点
在进行 SRIO IP 核调试时,应重点关注以下信号和状态:
| 观测点 | 描述 | 预期行为 |
|---|---|---|
| PLL Lock | 时钟锁定 | 稳定拉高,是所有逻辑运行的前提 |
| Reset | 复位释放 | 等待 PLL 锁定后,复位信号应正常释放 |
| port_initialized | 端口初始化完成 | 表征物理层建链成功,应稳定拉高 |
| link_initialized | 链路层初始化完成 | 表征协议层握手完成 |
| SerDes IDLE | 物理层码流 | 电平翻转正常,发送端周期性发送 IDLE 码及 CS 符号 |
常见异常排查
- Lane 异常:若
port_initialized未拉高,需检查 SerDes 每一通道的状态。例如 Lane0/Lane1 若无法同步,通常涉及硬件 PCB 质量、参考时钟频差或 GT 收发器配置。 - 速率不匹配:若 IP 勾选了 IDLE1 但对端工作在 Gen2 (IDLE2),会导致无法握手。