XILINX SRIOIP核详解、FPGA实现及仿真全流程(Serial RapidIO Gen2 Endpoint v4.1)

一、概述

SRIO常用于FPGA与DSP、FPGA与FPGA、板间的通信。

二、四种接口区别

(一)哪四种

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

(二)通道的必要性:取决于IP核配置模式

这四个通道是否全部必须使用,完全取决于你在配置SRIO IP核时选择的 I/O端口类型

  1. Initiator/Target 模式 :这是分离通道模式。如果你选择了此模式,那么四个通道都是必要的,因为它明确将请求与响应、发起方与目标方的通路分开设计,以实现更灵活的控制。

  2. 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在通信中需要扮演"发起方"和"目标方"两种角色。

  1. iresp 通道的作用 :在第一阶段,当FPGA作为发起方完成写操作(ireq)后,作为目标的DSP会返回一个事务完成响应包 。这个响应包会通过FPGA的 iresp 通道送达,告知FPGA"数据已成功送达DSP"。虽然这个响应包不携带实际数据,但对于确保可靠传输和进行错误排查至关重要。

  2. 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)的数据,并将响应信息发送给远端设备。

六、仿真

参考

Serial RapidIO Gen2 Endpoint v4.1 Product Guide (PG007)

FPGA实现SRIO通信(Nwrite+Doorbell)

SRIO学习笔记之SRIO简介与Xilinx SRIO ip核例程详解

相关推荐
仲南音1 天前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner2 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20202 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子3 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun4 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun4 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议