浅谈SRIO

时间:2024-04-08 07:04:19


RapidIO技术是由Freescale和Mercury公司率先提出的一种高带宽、低延时的基于包交换的开方式互联技术标准。RapidIO主要应用于嵌入式系统的高速互联,支持芯片到芯片以及板卡到板卡间的高速通讯。
RapidIO技术的主要特点:
灵活的系统结构,允许点对点传输;
带错误检测的鲁棒传输;
可扩展的频率和接口宽度;
非软件密集型操作;
低开销的高带宽互联;
低引脚数、低功耗、低延迟;
支持1x/2x/4x操作;
单个1x支持1.25Gbps,2.5Gbps,3.125Gbps,5.0Gbps,6.25Gbps的传输速率。
RapidIO协议主要由逻辑层(Logic Layer)、传输层(Transport Layer)和物理层(Physical Layer)构成。逻辑层定义接口的协议和数据包格式;传输层定义了包交换、路由和寻址机制,物理层定义了电气特性、链路控制和纠错重传等。

1. 端口概述

1.1逻辑层端口
逻辑层包含三种接口:用户接口(User Interface)、传输接口(Transport Interface)、配置结构接口(Configuration Fabric Interface)。
1.1.1 用户接口User Interface
用户接口是数据包处理和释放的位置,接口数量和传输类型可在生成核时设置。用户接口由一些IO端口和其他一些可操作的端口组成。
I/O port
I/O端口可配置成condensed I/O和Initiator/Target端口两种模式,其端口信号取决于生成核时的选择。
I/O端口是基于AXI4-Stream信道的,有以下两种数据包格式:
(1)HELLO
(2)SRIO Stream
Condensed I/O
Condensed I/O端口共使用两个AXI4-Stream通道,降低了发送和接收数据包的通道。其中1个AXI4-Stream传输所有与iotx相关的信号,1个AXI4-Stream传输所有与iorx相关的信号。其信号列表见手册表2-4。
Initiator/Target
在使用Initiator/Target模式是需要4个AXI4-Stream通道。Initiator Request / Initiator Response / Target Request / Target Response。
本端产生的请求 => Initiator Request
接收远端的相应 => Initiator Response
源于远端的请求 => Target Request
本端产生的相应 => Target Response
信号列表见手册表2-5。
1.2传输层接口
传输层接口包含发送端口和接收端口两部分,这些端口与buffer层或物理层连接。
1.3Buffer Design端口
BUF用于缓存发送和接收数据包,对于保证数据传递和数据流控制是必不可少的。为平衡系统性能和资源需求,Xilinx提供了一种可配置buffer的方案,在生成IP核时buffer空间可配置为8,16,32packets。
发送buffer用于从link interface 到PHY 的顺序传输和包流向控制。
接收buffer可作是一个将数据存储、发送到LOG路径上的FIFO。
1.4 控制和状态端口Constrol and Status Interface
Link_initialized : 指示链路已完成初始化,发送了至少15个状态控制符号,接收到8个无错误控制符号。高有效。
Port_initialized:指示端口已完成初始化。高有效。
其余见表2-20.

2.传输模式和协议

2.1 数据包传输类型
常用的数据包传输类型如下表所示:

其余模式见手册表3-1。
浅谈SRIO

Write类型
浅谈SRIO
FTYPE5-写操作包含有两种常用的写操作模式,NWRITE和NWRITE_R;
NWRITE模式传输时没有反馈,可以传输半字或整字长度信息。接收端应在指定的地址执行写操作。由于不具有反馈操作,传输时可以不含源目标地址。
NWRITE_R操作,有反馈操作,需要源目标地址信息,接收端在指定地址执行写操作之后会发送一个表示OK或ERROR得单节拍信息。

Swrite类型
浅谈SRIO
每次传输2-33个节拍数据(64bits),传输需要有可编码的header,header后有最大32字数据。
Doorbell类型
浅谈SRIO

2.2 HELLO包格式
AXI4-Stream协议使用ready/vaild握手信号进行数据传递。使用last信号指示数据包边界。为简化包结构,RapidIO可以在AXI4-Stream上使用Header Encoded Logical Optimized (HELLO) 格式传输数据。各常用模式下的HELLO包格式如下图所示:
浅谈SRIO
浅谈SRIO
浅谈SRIO
32字节数据传输时序图如下所示:
浅谈SRIO
应注意的是,使用HELLO传输数据时每包数据长度不能超过256字节。
时钟:
物理层中有两个时钟域:Phy_clk和gt_pcs_clk。Phy_clk是基本钟,gt_pcs_clk用于串行传输接口。gt_clk不用于PHY层,但用于串行接口,gt_pcs_clk频率是gt_clk的一半。
Phy_clk = gt_clk * 1x数量/4;
逻辑层(LOG)时钟域是log_clk,其频率至少不低于phy_clk的时钟频率;
BUF层:在log_clk和phy_clk两个时钟域之间传输数据包。
浅谈SRIO

3.软件设计

目前SRIO主要用于FPGA与DSP之间的互联通信,两端IP core设置参数要统一进行。
1.1Serial RapidIO Gen2 IPcore生成及参数设置
浅谈SRIO
a.Mode类型中选择Advanced高级选项,可以设置逻辑层、IO端口类型等参数;
b.Link Width可选1、2、4三种选项,对应SRIO物理层接口的1x、2x、4x三种接口类型。实际选择要根据硬件设计和收发端协议约定确定;
c.Transfer Frequency可选1.25G、2.5G、3.125G、5G、6.25G几种波特率,对应每个1x的差分线上的串行数据速率;
d.Reference Clock Frequency:输入到FPGA GTH/GTX专用时钟管脚的参考时钟频率。常用的参考时钟频率有125MHz和156.25MHz两种,创建IP核时要与硬件设计保持一致;
e.Buffer Configration:设置发送端和接收端的Buffer缓存大小,8、16、32表示协议数据包数量;Buffer深度越大通道吞吐量越大;
f.Device ID:设置当前器件在复位状态下的ID初值,ID可选择8bit/16bit两种位宽参数。
浅谈SRIO
设计逻辑层参数,可选择源端(Initiator)和目的端(Target)的所支持的传输操作;
Enable Arbitration可选择是否允许逻辑层各输入端口执行仲裁机制。
浅谈SRIO
IO端口可配置成Condensed IO模式和Initiator/Target Legacy两种模式。
Condensed IO模式下所有的IO端口只有一个发送和接口AXI4-Stream通道。在此模式下可以选择是否创建独立的用户自定义传输类型。
Initiator/Target Legacy模式下,数据传输将根据可达地址进行分类。源端传输包含读输出、写请求、输入相应。目的端传输包含读请求、写请求和终端发出的此次传输的响应。在此模式下可以选择是否创建独立的用户自定义传输类型。
I/O Format选项可以选择将数据包配置为HELLO包或SRIO流数据包;典型应用下手册建议将数据类型配置为HELLO包。
若要使用Messaging端口和Maintainance端口可进行相应的设置。
浅谈SRIO
Request Reordering:勾选允许发送端Buffer将请求数据包重新排序,此时会先输出高优先级请求。若不勾选将顺序输出请求数据包。默认勾选。
浅谈SRIO
IDLE模式设置:IDLE1模式下仅支持单个lane线速率不大于5Gbps,若要使用6.25Gbps线速率,必须使用IDLE2模式。
浅谈SRIO
浅谈SRIO
浅谈SRIO

Include Shared Logic in Example Design:将MMCM、Reset逻辑和GT Common等模块放在example design中;
Include Shared Logic in Core:将MMCM、Reset逻辑和GT Common等模块放在IP 核中。

4 测试情况

在项目使用时,采用的是Xilinx V7 690T + DSP 6678异构平台,6678外挂2GB DDR2,SRIO设计线速率3.125Gbps,使用SWRITE模式,数据封装成HELLO模式后V7端可将数据写入DDR指定位置。经过大量实际测试数据链路稳定,无误码。