LTPI协议 v0.9 帧结构解析:3种运行帧与2种协商帧的字段详解
LTPI协议v0.9帧结构深度解析:从链路协商到数据隧道的技术实现
在服务器硬件设计与FPGA开发领域,LVDS隧道协议接口(LTPI)正逐渐成为连接基板管理控制器(BMC)与主机处理器模块(HPM)的关键基础设施。本文将深入剖析LTPI v0.9协议中定义的5种核心帧结构,揭示其二进制字段设计哲学与交互时序逻辑。
1. LTPI协议架构与帧分类体系
LTPI协议作为OCP DC-SCM 2.0规范的核心组件,通过高速LVDS链路实现了多协议隧道的创新设计。其帧系统按照功能划分为三大类五小种:
协议帧分类矩阵
| 阶段类型 | 帧名称 | 功能定位 | 交互方向性 |
|---|---|---|---|
| 链路训练阶段 | Link Detect Frame | 能力发现与速率探测 | 双向广播 |
| Link Speed Frame | 速率协商确认 | 双向点对点 | |
| 能力协商阶段 | Advertise Frame | 功能特性通告 | 双向广播 |
| Configure Frame | 参数配置请求 | SCM→HPM | |
| Accept Frame | 配置确认响应 | HPM→SCM | |
| 运行阶段 | Default I/O Frame | 实时I/O隧道传输 | 主从双向 |
| Default Data Frame | 存储器映射数据交换 | 主从双向 |
从底层实现看,LTPI采用时分复用(TDM)机制,将每个LVDS时隙划分为固定周期,不同帧类型根据当前链路状态动态占用时隙资源。这种设计使得单个物理链路可同时承载GPIO状态、I2C事务、UART数据等多种信号。
注:AMD官方测试数据显示,在Kintex UltraScale+器件上实现时,LTPI v0.9的LVDS数据速率最高可达1.2Gbps(DDR模式),为传统SGPIO接口的40倍带宽。
2. 链路训练阶段帧结构详解
2.1 Link Detect Frame:能力发现握手
作为链路初始化首帧,其二进制结构包含关键的能力标识字段:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Frame Type | Version |R| Speed Capabilities Bitmask | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CRC-16 | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+字段解码手册:
- Speed Capabilities(16bit):
该字段采用位掩码设计,允许设备声明多速率支持能力。Lattice IP实现中,该字段必须包含至少一个双方共有的速率模式。# 典型值解析示例 def decode_speed_capabilities(bits): speeds = [] if bits & 0x0001: speeds.append("25Mbps SDR") if bits & 0x0002: speeds.append("50Mbps DDR") if bits & 0x0004: speeds.append("100Mbps DDR") return speeds
2.2 Link Speed Frame:速率锁定确认
在交换Link Detect帧后,双方通过Link Speed帧确认最终速率:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Frame Type | Version |R| Speed Select | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CRC-16 | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+关键差异点:
- Speed Select(4bit):采用枚举值而非位掩码,例如:
协议规定必须选择双方支持的最高速率,若协商失败则触发链路复位。#define LTPI_SPEED_25M_SDR 0x1 #define LTPI_SPEED_400M_DDR 0x8 // UltraScale+专用模式
3. 能力协商阶段帧设计
3.1 Advertise Frame:能力广播通告
进入本阶段后,双方通过Advertise帧交换硬件特性:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Frame Type | Chans Mask | Platform Type | UART Max Baud | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | GPIO Count | I2C Count | OEM Cap | Flow Control |Rsv| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CRC-16 | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+核心参数解析:
- GPIO Count(12bit):
分低延迟(≤5μs)和常规延迟两组,例如:// Xilinx实现示例 localparam LL_GPIO = 16; // 低延迟GPIO数量 localparam NL_GPIO = 992; // 常规GPIO总数 - UART Max Baud(8bit):
采用公式计算:实际波特率 = 值 × 9600,允许最高244800bps
3.2 Configure/Accept帧交互流程
SCM发出的Configure帧包含具体资源配置请求:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Frame Type | Req Chan Mask | GPIO Map Ver | I2C Mode Sel | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OEM Config | Data Chan Config | Timeout | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CRC-16 | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+HPM通过Accept帧回应配置可行性:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Frame Type | Ack Chan Mask | GPIO Map Ack | I2C Mode Ack | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OEM Ack | Data Chan Ack | Timeout Ack | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CRC-16 | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+关键交互逻辑:
- SCM在Configure帧中设置
I2C Mode Sel字段,定义每个I2C通道的主从模式 - HPM必须在Accept帧中明确回应每个配置项的接受/拒绝状态
- 出现任何拒绝项都会触发重新协商流程
4. 运行阶段帧机制
4.1 Default I/O Frame:实时信号隧道
运行阶段的基础帧结构承载GPIO/UART等实时信号:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Frame Type | Seq Num |LL GPIO|NL GPIO | UART Ch1 Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | UART Ch2 Data | I2C Ch1-3 Events |OEM Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CRC-16 | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+技术亮点:
- LL GPIO(16bit):采用直接映射,每个bit对应一个低延迟GPIO状态
- I2C Events(24bit):编码I2C事务关键事件:
# I2C事件编码示例 def encode_i2c_event(sda, scl, start, stop): return (stop << 3) | (start << 2) | (scl << 1) | sda - UART Data(16bit/channel):采用双缓冲设计,支持波特率自适应
4.2 Default Data Frame:高效数据通道
存储器映射数据传输采用AXI4-Lite兼容格式:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Frame Type | Seq Num | Cmd | Addr[31:16] | Addr[15:0] | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data[31:0] (for Write) | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CRC-16 | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+操作码定义:
| Cmd | 指令类型 | 延迟周期 | 描述 |
|---|---|---|---|
| 0x1 | 读请求 | 4-8 | 触发HPM侧寄存器读取 |
| 0x2 | 写请求 | 2 | 向HPM写入数据 |
| 0x4 | 读响应 | - | HPM返回读取数据 |
5. 典型链路初始化时序分析
完整链路建立包含三个状态机转换过程:
链路检测阶段(约50μs)
sequenceDiagram SCM->>HPM: Link Detect (Speed Cap=0x000F) HPM->>SCM: Link Detect (Speed Cap=0x0007) SCM->>HPM: Link Speed (Select=0x0003) HPM->>SCM: Link Speed (Ack=0x0003)能力协商阶段(典型值120μs)
sequenceDiagram SCM->>HPM: Advertise (GPIO=128, I2C=3) HPM->>SCM: Advertise (GPIO=64, I2C=2) SCM->>HPM: Configure (Req I2C0=Master) HPM->>SCM: Accept (Ack I2C0=Master)运行阶段(持续)
sequenceDiagram loop 每1ms SCM->>HPM: Default I/O Frame HPM->>SCM: Default I/O Frame end SCM->>HPM: Data Frame (Read 0x1000) HPM->>SCM: Data Frame (Read Data=0x1234)
在实际FPGA实现中,建议采用双缓冲机制处理帧数据,同时为每个通道配置独立的超时计数器。AMD测试数据显示,完整链路初始化通常在200μs内完成,满足服务器快速启动需求。
