摘要:本笔记基于 SRIO (Serial RapidIO) 协议文档,重点探讨物理层端口初始化、IDLE 序列机制以及在 FPGA 仿真/调试中的关键观测点。


1. 端口初始化流程 (Port Initialization)

端口初始化是 SRIO 建立通信链路的第一步,主要包含以下核心环节:

  1. 链路对方检测 (Link Partner Discovery):检测链路另一端是否存在有效的 RapidIO 设备。
  2. 位同步与码组对齐 (Bit Sync & Code Group Alignment)
    • 建立 SerDes 层的位同步。
    • 对齐 8B/10B 或 64B/67B 的码组边界。
  3. 模式协商 (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),会导致无法握手。