xilinx srio ip学习笔记之再识srio

news2024/10/6 8:34:20

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

xilinx srio ip学习笔记之再识srio

  • 前言
  • SRIO的理解
  • IP核的理解


前言

这段时间,随着对SRIO的学习,又有了更深的一点认识,不像一开始这么慌张了

SRIO的协议有一千来页,一个初学者是不可能一开始就去读协议的,那得学到猴年马月呀,为了避免从入门到放弃,得快速的学习才行,不仅要看明白官方的例程,同时还要自己动手改改才行,这样才能建立信心。

这里要特别感谢这几个博主,对我学习SRIO起到了非常大的作用。
1、https://www.cnblogs.com/liujinggang/p/ 这位大佬对SRIO估计已经玩转的非常深刻了,他的系列文章实在是太详细了
2、https://blog.csdn.net/m0_52840978/article/details/121618190?spm=1001.2014.3001.5502 这位大哥的系列文章也还不错

SRIO的理解

RapidIO采用三层分级体系结构:
1、逻辑层
2、传输层
3、物理层

Rapid IO分为并行Rapid IO标准和串行Rapid IO标准,现在一般来说我们都是用串行Rapid IO,使用FPGA的Serdes,因此是SRIO

RapidIO操作是基于请求和响应事务的。

系统中的发起器件(Initiator)通过产生一个请求事务(Request)开始一次操作。该请求包传送至交换结构器件(Fabric),通常是一个交换机,交换结构器件发出控制符号确认收到了该请求包,然后交换结构将该包转发至目标器件(Target),这就完成了此次操作的请求过程。目标器件(Target)完成要求的操作,产生响应事务(Response)。通过交换结构(Fabric)将承载该事务的响应包传送回发起器件(Initiator).传送时使用控制符号对每一跳(hop)进行确认。一旦响应包到达发起器件(Initiator)并得到确认,就可认为此次操作已经完成。
在这里插入图片描述
RapidIO 传递信息又是以包的形式

逻辑层、传输层、物理层会对信息进行层层封装,最终形成一个物理层包。
其请求包和响应包的物理层包格式如下:
在这里插入图片描述
如果是使用IP核的话,与用户的接口就是逻辑层,因此我们只要对逻辑层的内容进行填写。

包的类型有很多,是通过逻辑层中Ftype与Ttype(Ttype字段和上图中的Transaction字段是同一个字段,只不过叫法不同而已)两个字段。
以下是所有包的定义:
在这里插入图片描述
在这里插入图片描述
大部分情况下,我们都是用于I/O逻辑操作,在 RapidIO体系结构中定义了6种基本的I/O操作, 下表给出了这6种基本的I/O操作、用来执行相应操作的事务和对操作的描述,
在这里插入图片描述
这些操作,有些是没有响应的,有些是有响应的,这点在后面需要慢慢理解

RapidIO的协议已经在这个系列的前面几篇文章中做了很多介绍了,这里仅仅做一个总结。
第2类事务(FTYPE=2)为请求类事务,根据TTYPE字段的不同值,它包括NREAD事务(TTYPE=4’b0100),ATOMIC Increment事务(TTYPE=4’b1100),ATOMIC Decrement事务(TTYPE=4’b1101),ATOMIC Set事务(TTYPE=4’b1110),ATOMIC Clear事务(TTYPE=4’b1111)这几种。
第5类事务(FTYPE=5)为写类事务,根据TTYPE字段的不同值,它包括NWRITE事务(TTYPE=4’b0100),NWRITE_R事务(TTYPE=4’b0101),ATOMIC Swap事务(TTYPE=4’b1100),ATOMIC Compare-and-Swap事务(TTYPE=4’b1101),ATOMIC Test-and-Swap事务(TTYPE=4’b1110)这几种。
  第6类事务(FTYPE=6)为SWRITE事务(流写事务),请求方可以利用流写事务往目标方的存储空间写入大块数据。与NWRITE相比,流写事务具备以下两个特点:1、流写事务传输数据的最小单位为双字(Double Word);2、流写事务的包格式相对于NWRITE包格式具有更少的头部开销。
  第10类事务(FTYPE=10)为DOORBELL事务(门铃事务),门铃事务不包含数据负载,它只能用来传输16-bit的信息,所以DOORBELL事务适合传输中断或者信号量。
  第11类事务(FTYPE=11)为MESSAGE事务(消息事务),消息事务必须携带数据负载,完成一次数据消息操作最多需要16个单独的消息事务,其中每个消息事务携带的数据负载最大仍为256字节,所以消息操作的最大数据载荷为4096字节(16*256 Bytes)。
  第13类事务(FTYPE=13)为响应类事务,根据TTYPE字段的不同值,它包括不带数据响应事务(TTYPE=4’b0000),消息响应事务(TTYPE=4’b0001)和携带数据响应事务(TTYPE=4’b1000)。
  第9类事务(FTYPE=9)为Data Streaming事务,在标准的RapidIO协议中第9类事务为保留事务,所以第9类事务是一种自定义的事务。关于第9类事务的详细内容请查看pg007_srio_gen2.pdf的第106页。

RapidIO协议中只有NREAD、DOORBELL、MESSAGE以及NWRITE_R这几种事务有响应事务。

IP核的理解

RapidIO核的设计标准来源于RapidIO Interconnect Specification rev2.2,它支持1x,2x和4x三种模式,每通道的速度支持1.25Gbaud,2.5Gbaud,3.125Gbaud,5.0Gbaud和6.25Gbaud五种。

RapidIO核分为逻辑层(Logical Layer),缓冲(Buffer)和物理层(Physical Layer)三个部分。其中逻辑层(Logical Layer)支持发起方(Initiator)和目标方(Target)同时操作;支持门铃事务(DOORBELL)和消息事务(MESSAGE),为维护事务(MAINTENANCE)设计了专用的端口;采用AXI4-Lite接口和AXI4-Stream接口,支持简单的握手机制去控制数据流;支持可编程的Source ID,支持16-bit的device IDs(可选)。缓冲层(Buffer)支持8,16和32包的独立可配置的TX和RX Buffer深度;支持独立的时钟,支持可选的发送数据流控制。物理层(Physical Layer)支持可配置的空闲序列1和空闲序列2;支持关键请求流(Critical Request Flow);支持多播事件。

IP核中罗列出来了这些操作,我想,只要把这些类型的操作都熟悉了,这个IP核也就能玩转了
在这里插入图片描述
Port I/O Style:I/O接口可以配置为Condensed I/O和Initiator/Target两种类型。其中Condensed I/O接收和发送均使用一个AXI4-Stream通道。Initiator/Target接收和发送采用不同的AXI4-Stream通道。
  I/O Format:I/O端口能被配置使用HELLO格式包或SRIO Stream格式包,一般情况下,强烈推荐使用HELLO格式
    Messaging:用来选择消息事务的端口,可选的参数有Combined with IO和Separate Messaging Port两种。Combined with IO选项表明消息事务和I/O写事务采用相同的IO端口,Separate Messaging Port选项表明消息事务采用一个独立的端口传输,选中这个选项以后IP核会出现消息事务的AXI4-Stream通道。
  Maintainance:用来选择维护端口类型,维护端口类型只能为AXI4-Lite类型。
在这里插入图片描述
在这里插入图片描述

   本地设备(Local Device)生成的请求(Requests)通过ireq通道发送,远程设备(Remote Device)产生的响应包通过iresp通道接收来完成整个事务的交互过程。
   远程设备(Remote Device)生成的请求(Requests)通过treq通道接收,本地设备(Local Device)产生的响应包通过tresp通道发送来完成整个事务的交互过程。

在顶层模块中,变量名与通道的对应关系如下:
  s_axis_ireq* 对应于ireq通道
  m_axis_iresp* 对应于iresp通道
  m_axis_treq* 对应于treq通道
  s_axis_tresp* 对应于tresp通道

请求和响应的信号流示意图,因为对于我这个初学者而言,这几个端口总是有点搞混,因此需要下面这个示意图,每次搞不清楚信号流从哪个端口到哪个端口的时候,就可以找出来看看
在这里插入图片描述
例如 如果是一个只有请求没有响应的事物的话,信号流就是:
ireq --------> treq
如果是一个需要响应的请求事物的话,信号流就是:
ireq --------> treq ,然后构造 tresp --------> iresp

HELLO包格式(重点)
  为了简化RapidIO包的构建过程,RapidIO核的事务传输接口(ireq,treq,iresp,tresp)可以配置为HELLO(Header Encoded Logical Layer Optimized)格式。这种格式把包的包头(Header)域进行标准化,而且把包头和数据在接口上分开传输,这将简化控制逻辑并且允许数据与发送边界对齐,有助于数据的管理。
  HELLO格式的包如下图所示

在这里插入图片描述

整片文章的重点只有一个,就是设计指南那一节所提到的HELLO格式与HELLO格式的时序,强烈建议对照pg007_srio_gen2.pdf文档多读几遍。 事实上,在编写Verilog代码时,就是先根据事务类型组装对应的HELLO格式的包头(Header),然后按照HELLO格式的时序,在第一个有效时钟周期类把包头(Header)发出去,后面几个有效的时钟周期发送你的数据。在这个过程中,RapidIO核会自动把HELLO格式的包转化为标准的RapidIO串行物理层的包,并添加控制符号,空闲序列等必要信息发出去,接收过程则正好相反,RapidIO核接收到标准的RapidIO串行物理层的包,控制符号,空闲序列等信息后以后,会把接收的信息转化为HELLO格式的包给用户做后续处理。所以对用户来说只需要理解HELLO格式包的组成与HELLO格式的时序就可以利用RapidIO核实现数据的高速传输,而不需要关注RapidIO协议的过多细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

年终汇报工作,如何用项目管理工具展现成果

据报道,2022年11月20日的一次京东内部会议上,刘强东痛批京东中高层管理人员,表示部分高管醉心于 PPT 和奇妙词汇,或吹得天花乱坠但是执行一塌糊涂。 不可否认,刘强东提到的现象,的确是当今众多互联网大厂和…

基于frp实现外网访问个人本地服务器

适用对象想要通过frp实现内网服务被外网访问的人。关键词描述内网:内网指的是局域网,几台或者几十台电脑之间互访,也叫私网。外网:指的是我们上的Internet网络,也叫公网。需要具备的知识基础和条件1:外网服…

Java异常分类常见使用场景

今天在自己实现RxJava框架时,发现一些参数异常、流关闭异常等,Rxjava框架是会抛出相应的异常的,所以自己编写实现这块源码的时候,渐渐的也需要使用到这些知识,这里对这块做一下回顾总结。 使用 我们代码编写实现中&am…

开年喜讯!知道创宇一连斩获2022年度“IT168技术卓越奖”三项大奖

近日,业界知名IT垂直门户媒体IT168发布“2022年度IT168技术卓越奖”获奖名单,知道创宇凭借强大的技术优势与出色的产品能力脱颖而出,一举斩获网络安全领域三项大奖: 知道创宇创始人、CEO赵伟获评“数字化转型领军人物” ScanV-互…

【C++】优先级队列priority_queue/仿函数(函数对象)

这里写目录标题一.优先级队列1.优先级队列的介绍2.priority_queue的定义与使用二.仿函数/函数对象三.优先级队列的模拟实现一.优先级队列 1.优先级队列的介绍 1)注意优先级队列和队列不是一个东西,队列是容器,优先级队列是一种容器适配器&am…

服务监控之promethues+grafana,直接送你上大师,这还不上热门吗

最近的项目需要上监控,虽然之前也是使用这个方案,但是作为使用者一直没有太关注细节,也没有真正的去部署过,刚好凑着这次机会,彻底掌握下这套监控系统 1、监控系统架构 监控的架构这个图几乎每个文章都有&#xff0c…

学习JS,实现自动打字机动效

前几天遇到一个需求,产品告诉我说,希望这些字可以像自动打字那样,一个一个的出来,于是在完成需求的同时,顺便把这个方法记录出来,看大家是否也需要。 目录 1、实现思路 2、html布局和css样式 3、预定义…

【数据库】什么是关系型数据库和非关系型数据库

数据库分类关系型数据库非关系型数据库键值对存储数据库列存储数据库搜索引擎数据库面向文档数据库图形数据库数据库优缺点应用程序都离不开数据库,那不同的数据结构,就会存放在不同的数据数据库中,所以数据库按数据结构分为关系型数据库和非…

spring事务失效的一些场景

1、 Transactional 只能作用在public修饰的方法上 spring事务的实现AbstractFallbackTransactionAttributeSource类的computeTransactionAttribute方法中有个判断,如果目标方法不是public,则TransactionAttribute返回null,即不支持事务。 2…

ORB-SLAM3算法和代码学习——跟踪参考关键帧TrackReferenceKeyFrame

0总述 无论是跟踪恒速运动模型还是跟踪参考关键帧,本质上都是基于帧间匹配跟踪。 跟踪恒速模型是当前帧和上一帧之间的匹配,使用基于恒速模型计算得到的位姿作为优化的初始位姿,基于网格和搜索半径寻找匹配关系。 跟踪参考关键帧是当前帧和…

SpringCloudAlibabaSentinel实现网关动态限流

目录 1.SpringCloudAlibabaSentinel实现网关动态限流 1.概念和来历 2.概览及控制台搭建 3.控制台有哪些能力 4.功能及设计理念 5.限流的几种方法 2.SpringCloud Alibaba Sentinel 的降级功能 1.yml中添加配置 2.编写配置类 3.编写兜底工具类 3.Sentinel还对Feigin实…

代码整洁之道,好的代码就是为了更美好的生活

概述 美国童子军有一条简单的军规:让营地比你来时更干净。当梳理代码时,坚守此军规:每次 review 代码,让代码比你发现它时更整洁。 一位大神说过:“衡量代码质量的唯一有效标准:WTF/min”,并配…

14.Isaac教程--Jetbot应用示例

Jetbot应用示例 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 本节介绍如何将 Isaac SDK 与 NVIDIA 新的高性能模拟平台 Omniverse 集成,以让 Jetbot 在模拟中跟随球。 本节作为使用三个 Jetbot 应用程序进入 Omniverse 和 Isaac …

国产的蓝光存储设备能算信创产品吗?

这个问题是客户前几天问我的,笔者只能实事求是的告诉他:目前还不能算!首先蓝光存储产品暂时未被列入信创名录,其次蓝光存储中最核心的读写设备(蓝光光驱)的技术专利和生产工艺基本被日本企业(索…

LeetCode 101. 对称二叉树

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 101. 对称二叉树,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 LeetCode 1…

高端运动耳机哪个品牌最好、公认最好的跑步耳机品牌排名

在健身、运动的时候,过程往往是很枯燥的,这时候,如果能有动感的音乐在旁,调动我们的积极性,就再好不过了,所以很多人在运动的时候都会选择佩戴一款运动蓝牙耳机。不过适合运动的蓝牙耳机少之又少&#xff0…

七、MySQL 多表查询详解(附练习题及答案----超详细)

文章目录一、笛卡尔积(或交叉连接)的理解二、多表查询分类讲解2.1 分类1:等值连接 vs 非等值连接2.2 分类2:自连接 vs 非自连接2.3 分类3:内连接 vs 外连接2.4 SQL99语法实现多表查询2.4.1 内连接2.4.2 左连接2.4.3 右…

System Description 步骤

纲要: 在有了Composition以后,下一步就是把它分配到ECU里面。 1. Create System Description Import DBC file, select ECUs and CAN Frames under the DBC. Then it will create "SystemDescription.arxml" file. [1] 2. Check the content…

地图下载器代码结构设计及功能实现

jcef包引入表结构设计后台关键代码结构前端关键代码结构功能展示启动页底图切换绘制选择下载区域行政区划切换选择下载区域下载关键代码import { InnerMqClient } from ../../rx/inner-mq.service;import { SubmitService } from ../../service/submit.service;import { MapBas…

马蹄集 字符判断

字符判断 难度:白银 时间限制:1秒 巴占用内存:64M 输入一个字符,判断是数字字符、大写字母、小写字母、算术运算符、 关系运算符、逻辑运算符,还是其他字符,分别输出Number?”, "Capital letter?”,…