一、概述
SRIO常用于FPGA与DSP、FPGA与FPGA、板间的通信。
二、四种接口区别

(一)哪四种
Xilinx SRIO IP核的ireq、iresp、treq、tresp四个通道是逻辑层用户接口的关键组成部分,它们构成了完整的请求-响应通信模型。你可以通过下表快速了解它们的主要区别:

(二)通道的必要性:取决于IP核配置模式
这四个通道是否全部必须使用,完全取决于你在配置SRIO IP核时选择的 I/O端口类型 :
-
Initiator/Target 模式 :这是分离通道模式。如果你选择了此模式,那么四个通道都是必要的,因为它明确将请求与响应、发起方与目标方的通路分开设计,以实现更灵活的控制。
-
Condensed I/O 模式 :这是精简通道模式。如果你选择了此模式,则只需要一个AXI4-Stream通道来发送所有类型的包,一个通道来接收所有类型的包。这种模式接口更简单,占用的逻辑资源更少,但控制和性能灵活性不如Initiator/Target模式。
因此,通道的必要性并非固定,而是由你的系统架构设计需求决定的。
(三)如何选择与操作建议
在实际操作中,你可以参考以下几点:
-
确认需求 :如果你的设计角色固定(例如FPGA始终作为目标设备接收指令),或者对逻辑资源非常敏感,可以考虑使用Condensed I/O模式以简化设计。
-
使用推荐模式 :对于需要双向通信、角色灵活(设备可同时做发起方和目标方)或对吞吐量、控制粒度有要求的系统,Initiator/Target模式是更通用和推荐的选择。此时,你需要完整实现这四个通道的驱动逻辑。
-
查阅官方手册 :具体配置选项和端口信号定义,应以Xilinx官方文档PG007《Serial RapidIO Gen2 Endpoint v5.6 LogiCORE IP Product Guide》 为准。
总而言之,这四根线是SRIO IP核与你的用户逻辑进行数据和控制流交互的桥梁,理解其方向和作用是进行FPGA侧SRIO通信逻辑开发的基础。
(四)举个栗子
FPGA发生给DSP一组波形数据,DSP对这组波形数据进行滤波处理,处理完之后将这组数据返回给FPGA,这个过程需要用到哪些通道?
这个 "FPGA发送 → DSP处理 → DSP返回" 的完整波形处理流水线,SRIO的全部四个通道(ireq, iresp, treq, tresp)都会被用到。这个过程清晰地展示了FPGA在通信中需要扮演"发起方"和"目标方"两种角色。
-
iresp通道的作用 :在第一阶段,当FPGA作为发起方完成写操作(ireq)后,作为目标的DSP会返回一个事务完成响应包 。这个响应包会通过FPGA的iresp通道送达,告知FPGA"数据已成功送达DSP"。虽然这个响应包不携带实际数据,但对于确保可靠传输和进行错误排查至关重要。 -
tresp通道的作用 :在第二阶段,当FPGA作为目标方通过treq通道收到DSP发来的数据写包后,必须通过tresp通道向DSP(此时的发起方)返回一个确认响应包,以完成此次写事务。没有这个响应,DSP会认为传输失败。
(五)tuser是什么
在 Xilinx SRIO IP 核的 AXI4-Stream 接口中,tuser 信号是一个关键的用户侧信号 ,用于在传输主数据(tdata)的同时,传递与数据包相关的额外控制信息或元数据 。简单来说,tdata 传输的是"有效载荷",而 tuser 传输的是关于这个有效载荷的"说明信息"。tuser 信号的具体含义和位宽会根据它所在的通道(ireq, iresp, treq, tresp)而不同。通常,它用于携带 SRIO 数据包的包头(Packet Header)中的关键字段,以便你的用户逻辑能正确解析和处理数据包。

三、时钟
时钟计算方式如下:
gt_clk = line_rate/20;
gt_pcs_clk = line_rate/40;
phy_clk = (gt_clk*link_width)/4;("4"跟几x无关)
log_clk = phy_clk;
cfg_clk = phy_clk;(7系列芯片)
典型值如下:

上述时钟框架中:phy_clk是主内核时钟,gt_pcs_clk用于GT与PHY通信的时钟信号(usrclk2),gt_clk是GT内PCS与PMA并行数据的时钟信号(usrclk???)。log_clk为SRIO逻辑层的数据、配置等时钟。cfg_clk(7系列芯片)为SRIO配置接口时钟,与log_clk时钟相同。gt_pcs_clk的时钟频率=gt_clk/2 (usrclk2是usrclk频率的一半),phy_clk=(gt_clk *lane数目)/4。为了防止BUFFER溢出,log_clk应不低于phy_clk,且log_clk与phy_clk同步。
IP核执行以下配置:



按照以上IP配置计算结果如下:
sys_clk:156.25MHz;
log_clk_out:312.5MHz;(用户时钟)(line_rate*link_width/64*8/10)(8B10B编码)
gt_pcs_clk_out:156.25MHz;
gt_clk_out:312.5MHz;(未使用)
refclk_out:156.25MHz;
phy_clk_out:312.5MHz;
下图4个接口时钟均为log_clk_out。

时钟架构设计如下:


四、协议
(一)事务类型
事务类型主要有:由Ftype和Ttype字段决定,FPGA中常用的NWRITE、NWRITE_R、DOORBELL、NREAD、RESPONSE(有无数据)。


(二)逻辑层AXI4S接口使用
为了简化数据包构造,用户界面端口可以配置为使用报头编码逻辑层优化(Header Encoded Logical Layer Optimized,HELLO)格式。这种格式允许跨数据包类型的报头字段放置标准化。它还将报头(header,HDR)和数据分割成接口上的单独传输。这导致更简单的控制逻辑,并允许数据与传输边界对齐,以便于数据管理。基于数据包FTYPE的HELLO格式报头的更详细视图如下图所示:

图中每个bit描述如下:


(三)时序
基本的HELLO模式与基本的流模式分别如下:


在上图流模式中,数据包完全按照RapidIO规范中的定义呈现,包括所有逻辑/传输层字段(加上规范定义为物理层字段的优先级)。所有类型的SRIO数据包格式见下图。数据字节在以这种格式呈现给LOG之前必须反转,以符合AXI4流协议。链路接口(BUF和PHY之间)和传输接口(LOG和BUF之间)上的数据包使用SRIO流格式。

对于该数据包每一位代表什么参见下图:

五、工程创建
Open IP Example design..结构如下:

里面包含的文件有很多,有用的只有如下4个

该例程基本数据流如下:

上图中,蓝色虚线表示FPGA作为发起方向远端设备(如:DSP)发送数据,并接收远端设备的响应信息,绿色虚线表示FPGA作为目标方接收远端设备(如:DSP)的数据,并将响应信息发送给远端设备。
六、仿真
