接上一篇 SRIO RapidIO (SRIO)协议介绍(一)

1     说明

查看协议手册时会发现,逻辑层的操作分成了IO和Message 2类动作,那么为什么要分成2类操作?从原理和应用角度来看IO和message的区别是什么呢?

1、 分成2类是为了应对不同的互联类型,IO操作主要为了应对远端的内存访问,设备间可以访问彼此的物理内存;

2、 Message操作提供了一个基于消息的通用、安全的数据传输方式,设备间无法访问对方的物理内存,但是又需要进行数据的场景Messages and doorbells are port based operations that allow devices to communicate with each other without visibility to each other’s address space. The packet contains an identification value pertaining to the message, and the receiver defines the memory location for the message to be buffered.

A doorbell is a simple sixteen bit message sent to a target device, which is useful for generating an interrupt.

A message provides inter-device communication through explicit messages instead of direct memory access. It can consist of up to sixteen packets, where each packet can contain up to 256 bytes, enabling messages up to a maximum of four kilobytes.

3、 RapidoIO是基于请求、相应的传输机制,其中IO请求操作占据了FTYPE(frame type包类型)的0-8(主要为FTYPE2 - Request Class,FTYPE5 - Write Class,FTYPE6 - Streaming Write Class),Message请求操作占据了FTYPE的10-11(主要为FTYPE10 - Doorbell Class,FTYPE11 - Message Class);

1.1    包格式说明

参考 https://blog.csdn.net/m0_52840978/article/details/121666138?spm=1001.2014.3001.5501 (该链接内容参考自 《RapidIO: The Next Generation Communication Fabric For Embedded Application》)

RapidIO包由代表3级规范体系结构的多个字段组成。下图显示了典型的请求包和响应包的格式,这些包的格式属于并行物理层包格式,串行物理层包的格式与此稍有不同。某些字段是依赖于具体的上下文的, 并不会在所有的包中出现。

  请求包以物理层字段开始, S位指示这是一个包还是一个控制符号(S=0表示是一个包,S=1表示是控制符号), AckID表明交换结构器件将用控制符号来确认哪一个包。PRIO字段指示用于流量控制的包优先级。TT、目标地址( Target Address)和源地址( Source Address)字段指示传输地址的机制类型、包应被传送到的器件的地址和产生包的器件的地址。Ftype和事务(Transation)指示正被请求的事务。长度(Size)字段等于编码后事务的长度, RapidIO事务数据的有效裁荷(Payload)长度从1到256字节不等。SrcTID(源事务ID)指示事务ID, RapidIO器件在两个端点器件间最多允许有256个未完成的事务。对于存储器映射事务,跟随在srcTID后面的是器件偏移地址 (Device Offset Address ) 字段。写事务必须附带数据的有效裁荷,所有包以16位(2个字节)循环冗余校验码(CRC)结束。

响应包与请求包类似。状态(Status)字段指示是否成功完成了事务。目标TID(目标事务ID)字段的值与请求包中源事务 ID字段的值相等。下图是请求包与响应包的包格式示意图

图 1‑1 请求包与回应包格式

对于用户来说,最需要关注的就是逻辑层(上图中蓝色部分)各个字段的含义,逻辑层中Ftype与Ttype(Ttype字段和上图中的Transaction字段是同一个字段,只不过叫法不同而已)两个字段唯一的确定了这个请求包的功能。下表列出了Ftype与Ttype所确定的包含义

表 1‑1 Ftype与Ttype说明

Ftype

(Format Type)

Ttype

(Transaction Type)

包类型

功能

0~1

——

Reserve

2

4’b0100

NREAD

读指定的地址

4’b1100

ATOMIC increment

先往指定的地址中传递数据,在把传递的数据加1,此操作为原子操作,不可打断

4’b1101

ATOMIC decrement

先往指定的地址中传递数据,在把传递的数据减1,此操作为原子操作,不可打断

4’b1110

ATOMIC set

把指定地址中的数据每个bit全部写1

4’b1111

ATOMIC clear

把指定地址中的数据清0(每个bit全部清零)

3~4

——

Reserve

5

4’b0100

NWRITE

往指定的地址写数据

4’b0101

NWRITE_R

往指定的地址写数据,写完成以后接收目标器件(Target)的响应

4’b1101

ATOMIC test/swap

对指定地址中的数据进行测试并交换,此操作为原子操作,不可打断

6

4’bxxxx

SWRITE

以流写方式写指定的地址,与NWRITE以及NWRITE_R相比,此方式效率最高

7

——

Reserve

8

4’b0000

MAINTENANCE read request

发起读配置,控制,状态寄存器请求

4’b0001

MAINTENANCE write request

发起写配置,控制,状态寄存器请求

4’b0010

MAINTENANCE read response

产生读配置,控制,状态寄存器响应

4’b0011

MAINTENANCE write response

产生写配置,控制,状态寄存器响应

4’b0100

MAINTENANCE write resquest

端口写请求

9

——

Reserve

10

4’bxxxx

DOORBELL

门铃

11

4’bxxxx

MESSAGE

消息

12

——

Reserve

13

4’b0000

RESPONSE

no data

不带有效数据的响应包

4’b1000

RESPONSE

with data

带有效数据的响应包

14~15

——

Reserve

2     IO操作

2.1    IO操作的目的

先看看spec的说法:

The operations described in this section are used for I/O accesses to physical addresses in the target of the operation. Examples are accesses to non-coherent memory, ROM boot code, or to configuration registers that do not participate in any globally shared system memory protocol. These accesses may be of any specifiable size allowed by the system.

为了访问Target设备的物理内存,比如非连续的内存、ROM配置代码、非全局系统共享内存的配置寄存器(简单理解为寄存器即可);

2.2    IO操作的类型

Spec中列出的类型如下:

本文不对各个类型的包格式做详细说明,请参考Spec即可

2.3    请求包格式

RapidIO处理器发起一个请求包给目标器件(Target),目标器件收到这个请求包以后给一个响应包到处理器(前提是这个请求包需要目标器件的响应),比如存储器读操作。一个典型的请求包的格式如下图所示

图 2‑1 请求包格式,只需要关注logic layer

图 2‑2 header各个字段的含义

2.4    响应包格式

当一个RapidIO端点完成由另一个RapidIO端点发起的请求时,该端点就会发送一个响应事务。响应事务包总是以与请求事务包相同的方式被发送和路由。从广义上说,第12、13、14 和15类格式(Ftype=12表示的就是第12类格式)是响应类事务的格式。通常,第 12和14类是保留的,第15类由具体应用定义, 第13类才是主要的响应类事务。第13类包格式返回状态,数据(如果需要)和请求者的事务ID。带有“ERROR”状态或没有预期的数据裁荷的响应的RESPONSE包没有数据载荷。响应包使用第13类格式来响应除维护和无响应写之外的所有请求包。维护响应包响应维护请求。一个典型的响应包的格式如下图所示

图 2‑3 响应包格式 ,只关注逻辑层即可

图 2‑4 响应包中逻辑层各个字段的定义(Ftype是固定的,没有标出)

图 2‑5 Spec中描述的Ftype13对应的响应格式

3     Message操作

3.1    Message操作的目的

消息是一种编程模型,常用于分布式内存的计算系统,在这个模型中,计算单元只运行访问自己的本地内存,那么多个计算单元之间的数据交互就可以通过消息这样的安全传输机制,发送者无需访问接收方的物料内存,而是把消息字段固定发送到接收者的某块本地内存中即可,然后接收方通过中断通知本地逻辑将内存的消息字段读走进行处理。

Message passing is a programming model commonly used in distributed memory system machines. In this model, processing elements are only allowed to access memory that is local to themselves, and communication between processing elements is handled through specialized hardware manipulated through application or OS software. For two processors to communicate, the sending processor writes to a local message passing device that reads a section of the sender’s local memory and moves that information to the receiving processor’s local message passing device. The recipient message passing device then stores that information in local memory and informs the recipient processor that a message has arrived, usually via an interrupt. The recipient processor then accesses its local memory to read the message.

3.2    Message操作的类型

3.2.1     Data Message

一个消息源可以生成一个最多由16个独立包组成的4096字节长度的消息。实际上,会由不同长度的需求,这种机制也允许更小的包长。

A source may generate a single message operation of up to 16 individual packets containing as much as 256 data bytes per packet. A variety of data payload sizes exist, allowing a source to choose a smaller size data payload if needed for an application. RapidIO defines all data message packets as containing the same amount of data with the exception of the last one, which can contain a smaller data payload if desired. The packets are formatted with three fields: • One field specifies the size of the data payload for all except

第11类包为消息事务格式包。第11类包总有数据载荷,并且数据载荷长度总是双字(64-bits或8-bytes)长度的整数倍。没有规定子双字(sub-double-word)消息,如果需要的话,可以由软件管理子双字消息。

消息的响应事务也是由第13类包产生,与NREAD事务和NWRITE_R事务响应包不同的是,消息事务的响应包中的target_info字段占用了普通响应包中的target ID字段的位置,具体的响应包格式见下图

图 3‑1 消息响应

3.2.2     Doorbell Message

第10类包格式是门铃事务格式。它没有数据载荷。

The doorbell operation, consisting of the DOORBELL and RESPONSE transactions (typically a DONE response) as shown in Figure 3-1, is used by a processing element to send a very short message to another processing element through the interconnect fabric. The DOORBELL transaction contains the info field to hold information and does not have a data payload. This field is software-defined and can be used for any desired purpose

图 3‑2 门铃包格式

上图中Ftype字段固定为10,表示这是一个门铃事务,8位的Reserved字段应该置0,Source TID指的是请求方的事务ID, info(msb)表示的是发送信息的高8位,info(lsb)表示的是发送信息的低8位。如果信息是用数字表示的,而且长度大于8位,那么数据符合低地址存放高字节(big-endian)的格式。比特流中先到达的是高字节。门铃事务适合向处理器递送中断信息,在这种情况下,信息字段用来向接收者传递中断级别和目标信息,除此以外,还可以在处理器件间发送信号量。

4     总结

用Spec的图进行说明,我们还是只关注逻辑层即可,这个图只是为了方便我们区别各类传输格式。

RapidIO 逻辑层IO操作与Message操作的原理和区别的更多相关文章

  1. 小程序视图层(xx.xml)和逻辑层(xx.js)

    整个系统分为两块视图层(View)和逻辑层(App Service) 框架可以让数据与视图非常简单地保持同步.当做数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新. 通过这个简单的例子来 ...

  2. C# .NET 逻辑层的框架设计

    前述:在我的了解中,一个大项目的逻辑层是不可捉摸的,对于不同项目或场景都是不同的逻辑.先说明,我的想法是对逻辑层类结构,以及如何操作逻辑的方法进行抽象的封装.并且考虑将不同类,或者不同程序集中的逻辑方 ...

  3. 通过对DAO层的封装减少数据库操作的代码量

     在学框架之前,写项目时总是要花大量的时间去写数据库操作层代码,这样会大大降低我们的效率,为了解决这个问题,我花了两天时间利用反射机制和泛型将DAO层进行了封装,这样我们只需要写sql语句,不需要再写 ...

  4. 八:SpringBoot-集成JPA持久层框架,简化数据库操作

    SpringBoot-集成JPA持久层框架,简化数据库操作 1.JPA框架简介 1.1 JPA与Hibernate的关系: 2.SpringBoot整合JPA Spring Data JPA概述: S ...

  5. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  6. linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例

    转自:truemylife.linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例 基本概念: 磁盘.分区.物理卷[物理部分] 卷组[中间部分] 逻辑卷.文件系统[虚拟化后可控制部分] 磁 ...

  7. JAVA的IO操作:内存操作流

    掌握内存操作流 输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream ByteArrayInpu ...

  8. 【C#|.NET】从细节出发(三) 逻辑层事务和page object模式

    一. 业务逻辑层的事务问题 如果你的程序分层清晰并且系统禁用复杂存储过程,那么在DA中的职责比较单一.程序的逻辑通过BLL调用各种不同模块的DA来实现数据操作.如果当需要不同模块在一个事务的时候,问题 ...

  9. 微信小程序-06-详解介绍.js 逻辑层文件-注册页面

    上一篇介绍的是 app.js 逻辑层文件中注册程序,对应的每个分页面都会有的 js 文件中 page() 函数注册页面 微信小程序-06-详解介绍.js 逻辑层文件-注册页面 宝典官方文档: http ...

随机推荐

  1. 『现学现忘』Docker基础 — 37、ONBUILD指令介绍

    目录 1.ONBUILD指令说明 2.演示ONBUILD指令的使用 3.补充:crul命令解释 1.ONBUILD指令说明 ONBUILD是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COP ...

  2. C++“拷贝构造函数”和“等号重载”有什么区别?

    CTypeA(const CTypeB& b)CTypeA& operator=(const CTypeB& b)一直没弄懂这两个有什么区别.只知道,重载了=号,下面复制的时候 ...

  3. L298N双H桥集成电路板的双H桥是什么意思?为什么要叫双H桥?L298N工作原理

    H桥是一个典型的直流电机控制电路,因为它的电路形状酷似字母H,故得名与"H桥".4个三极管组成H的4条垂直腿,而电机就是H中的横杠. 控制两个三极管的导通来控制电流方向,从而实现电 ...

  4. js 获取和设置css3 属性值的实现方法

    众多周知 CSS3 增加了很多属性,在读写的时候就没有原先那么方便了. 如:<div style="left:100px"></div> 只考虑行间样式的话 ...

  5. 体验js之美第八课-面向对象创建和继承终结篇

    概述 到这里我们讲说js面向对象的系列部分的最后一个课程,面向对象必须掌握两个东西一个是对象的创建一个是继承.这节课我们重点说说这两个问题最后我们说下在ES6里面面向对象怎么玩. 1对象的创建 我们第 ...

  6. mysql基本操作1

    数据库的分类 --1.关系型数据库-----用"表"保存数据,相关数据存入一张表中   --2.非关系型数据库-----键值数据库-----对象数据库 ###主流关系型数据库-Or ...

  7. <wx-open-launch-weapp>详解

    demo图, h5跳转小程序 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  8. springboot+springsecurity+mybatis plus之用户认证

    一.权限管理的概念 另一个安全框架shiro:shiro之权限管理的描述 导入常用坐标 <dependency> <groupId>org.springframework.bo ...

  9. spring原始注解开发-01

    我们使用xml-Bean标签的配置方式和注解做对比理解 1.创建UserDao接口以及UserDao的实现类UserDaoImpl(接口代码省略) public class UserDaoImpl i ...

  10. 论文翻译:2021_Performance optimizations on deep noise suppression models

    论文地址:深度噪声抑制模型的性能优化 引用格式:Chee J, Braun S, Gopal V, et al. Performance optimizations on deep noise sup ...