当前位置: 首页 > news >正文

完整教程: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(有无数据)。

其中:

NREAD:基本读取请求事务。请求没有素材有效负载。结果是素材响应。

NWRITE:主要写入执行。请求具有数据有效负载。不会导致响应。

NWRITE_R:基本写入操控。请求具有数据实用负载。结果为无数据的响应。

SWRITE:流式写入操作(使用的标头字段比NWRITE少)。请求具有信息有效负载。不会导致响应。

DOORBELL:处理元件之间的消息非常短。请求没有内容有效负载。结果为无数据的响应。

RESPONSE without data:没有材料负载的响应事务。

RESPONSE with data:有数据负载的响应事务。

(二)逻辑层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核例程详解

http://www.jsqmd.com/news/358834/

相关文章:

  • 探索风力发电MPPT并网模型:策略模块的奇妙世界
  • 思考是用来解决问题和总结经验的,而不是用来制造障碍的:不为打翻的牛奶哭泣底层逻辑是,哭泣仅仅是情绪表达,不是在解决问题,我们应该想的是尽快打扫不要扎到脚
  • USACO历年黄金组真题解析 | 2006年1月
  • 完整教程:【无标题】六边形拓扑量子计算:NP完全问题的统一解决框架
  • 【小程序毕设全套源码+文档】基于Android的陪诊护理系统APP的设计与实现(丰富项目+远程调试+讲解+定制)
  • 手把手撸一个VRPTW求解器(附MATLAB源码)
  • 热销之后:招商林屿缦岛如何将市场热度转化为持久价值
  • python Alembic库,深度解析
  • python-dotenv库,深度解析
  • USACO历年黄金组真题解析 | 2006年10月
  • Python-docx库,深度解析
  • 2026第三次周报
  • USACO历年黄金组真题解析 | 2007年10月
  • 基于扩展卡尔曼滤波的车辆状态估计
  • 2026年2月酒泉租车公司电话推荐:酒泉豪车租车、酒泉包车、酒泉皮卡出租、酒泉商务车出租、酒泉商务车租赁、酒泉旅游包车、酒泉嘉合兴汽车租赁、酒泉旅游租车、酒泉包车便捷出行服务优选 - 海棠依旧大
  • python celery库,深度解析
  • 量子力学-测量
  • 深入解析:Leetcode 30
  • 基于FOC、SMO与PLL融合技术的Simlink仿真模型研究
  • Spring Boot与MyBatis - 详解
  • 北京高端老酒回收首选,京城亚南一站式上门服务覆盖全城 - 品牌排行榜单
  • 2026年酒泉汽车租赁服务商TOP5推荐:酒泉大巴出租、酒泉自驾租车、酒泉接待用车、酒泉婚庆租车、酒泉汽车租赁、酒泉租车平台、酒泉私家车出租、适配各类出行场景的务实之选 - 海棠依旧大
  • 告别 plist 制作繁琐咕噜分发在线工具iOS 开发一键搞定Plist文件生成
  • 深度测评:软件选型决策工具,是导航仪还是新迷宫?
  • 零基础入门 RabbitMQ:从消息队列是什么到 Spring Boot 实战收发消息
  • 微服务负载均衡
  • 面试-Torch函数
  • 2025 AI 变局:大模型“退烧”,Agent“上位” —— 深度复盘 DeepSeek、GPT-4o 与 Llama 3 的三国杀
  • 升鲜宝生鲜配送供应链管理系统 仓储式收银系统(多公司多门店 POS+会员+钱包+权益+门店WMS+库存成本+离线同步)
  • PostgreSQL 性能优化: I/O 瓶颈分析,以及如何提高数据库的 I/O 性能?