一、RapidIO背景介绍(3)

简介: 一、RapidIO背景介绍(3)

五、消息操作与包格式


5.1 引言


 分布式处理系统的一般方法是使用连接到分布式存储器部件的紧耦合处理器。这些处理器可能运行在一个単独的操作系统下。例如,,一个单Linux系统可以在最多数十个处理器上有效地运行。通常一个单操作系统的任务是管理处理器组和存储器组。多数情况下,处理器可以高效地计算出通用硬件维护的一致性存储器空间。这允许处理器通过使用信号量(semaphores )、自旋锁(spin lock)和处理器间中断来解决任务的初始化和完成的通信问题。操作系统使用页保护方案集中管理存储器。这种多处理技术十分成熟,已经使用了几十年。


 在其他分布式系统中,处理器和存储器的耦合度可能松一些。若干操作系统或者内核可能在同一系统中共存,每个内核负责整个系统的一小部分。这些内核可能来自不同的软件供应商,可能运行在不同的处理器体系结构上。在这些系统中使用简单的通信机制是十分有用的;内核可以使用该机制与系统内的其他内核通信。例如,运行Linux的PowerPC处理器可能与运行QNX的TigerSHARC数字信号处理器通信。对于一个给定的应用,可能没有理由在这些器件间共享存储器空间。在这种类型的系统中,需要一种在所有器件上可用的通用硬件和软件接口机制来简单、经济地完成高性能通信。在这些系统中,处理器之间通过消息传递进行通信。


 在这些消息传递系统中,经常使用两种机制将命令或数据从一个器件移动到另一个器件, 第一种机制称为直接存储器访问(DMA),第二种称为消息(Message)。这两种模型的主要差别是,DMA事务由源端操纵,而消息由目标端操纵。这意味着DMA源端不仅需要访问目标,还必须具有对目标的地址空间的可见性。消息的源端仅需访问目标,而不需要对目标地址空间的可见性。在分布式系统中,通常DMA和消息机制是结合使用的。


 RapidIO体系结构包括一种可以用于消息的包传输机制。RapidIO消息模型应满足下列目标:


 1、消息由一个或多个事务组成,这些事务可以通过无序的互连发送和接收。

 2、发送者可以有多个正在排队等待发送的未完成的消息。

 3、发送者可以在低优先级消息前发送高优先级消息,也可以为了发送一个高优先级消息而抢占低优先级消息,并在高优先级消息完成后恢复低优先级消息(基于优先级的并发性)。

 4、发送者无需了解接收者的内部结构或存储器映射。

 5、消息接收者控制它本身的本地地址空间。

 6、如果需要,接收者可以有多个未完成的正在排队等待服务的消息。

 7、如果需要,接收者可以接收多个并发的多事务(multiple-transaction)消息。


 RapidIO消息传递逻辑规范定义了两种不同的包格式用于消息事务。第10类包格式用来发送非常短的16位数据载荷,第10类包也称为门铃(DOORBELL)事务,门铃事务很适合发送处理器间的中断。多事务消息用第11类包发送最多4096字节的数据载荷。下面将分别介绍两种事务,


5.2 门铃事务(DOORBELL)


 第10类包格式是门铃事务格式。它没有数据载荷。门铃事务的请求包格式如下图所示


微信图片_20230117113944.png


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


 一个完整的门铃操作由DOORBELL事务和RESPONSE事务(通常是DONE响应)组成。处理单元用这个操作将非常短的消息通过互连结构发送到另一个处理器部件。门铃事务包括用于保持事务信息的信息字段。该事务没有数据载荷。它的信息字段是由软件定义的,可以用子任何目的。通常,运行在处理器上的操作系统会定义门铃事务使用的信息字段的意义。收到门铃事务的处理器部件将包放进处理器部件中的门铃消息队列,该队列可以在硬件或者本地存储器中实现。一个完整的门铃操作如下图所示


微信图片_20230117114035.png


5.3 消息事务


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


微信图片_20230117114209.png


 图中逻辑层各个字段的含义如下表所示

字段

含义

Ftype

11

Ftype=11表示这是一个MESSAGE事务

Msglen


消息长度(Message Length):指的是组成该消息的包的总数。值为0时表明该包是一个单包消息,值为15(4’b1111)时,表明这是一个由16个包组成的消息。

Ssize


标准消息包数据大小(Stardard message packet data size)。该字段告诉消息接收者一个单独消息操作除消息中最后一个包外组成消息的所有包的数据载荷大小。这样可以防止发送者过度延长最后一个包的数据字段并允许接收者正确的将包放入本地存储器


4’b0000~4’b1000

保留(Reserved)

4’b1001

8字节(byte)

4’b1010

16字节(byte)

4’b1011

32字节(byte)

4’b1100

64字节(byte)

4’b1101

128字节(byte)

4’b1110

256字节(byte)

4’b1111

保留(Reserved)

Letter


信件。该字段用来识别信箱(MailBox)中的一个槽(SLOT)。该字段允许发送方同时发送最多4个消息到接收方的同一个信箱中

Mbox


信箱(MailBox)。该字段用来指定目标处理部件中的接收信箱

Msgseg


消息段(Message Segment)。该字段用来表明该包是组成消息的包中的第几个包。值为0表明该包是消息的第一个包。值为15(4’b1111)表明该包是消息的第16个包。

Xmbox


对于单包数据消息事务,该字段用来指明目标信箱的高四位。该字段与Msgseg占用相同的字段。Xmbox字段和mbox字段组合使用的定义如下:

xmbox || mbox : mailbox number

0000 00      : mailbox 0

0000 01      : mailbox 1

0000 10      : mailbox 2

0000 11      : mailbox 3

0001 00      : mailbox 4

……

1111 11      : mailbox 63

尽管RapidIO规范使用信箱(MailBox)、信件(Letter)和消息分段(Message Segment)之类的术语,但是这些字段在逻辑上指的是一个8位的消息标识符信息。消息标识符信息可以用来惟一的标识和管理任意两个处理部件之间最多256个不同的消息流。接收处理部件的消息传递硬件会根据该信息计算应该把事务数据存放在本地存储器的什么位置。


 例如,假设接受处理部件的信箱0、信箱1、信箱2和信箱3的起始地址分别为地址0x1000、0x2000、0x3000和0x4000,处理部件接收到的消息事务带有下列字段:


 A、消息长度为6个包(msglen = 4’b0110)

 B、消息段是第3个包(msgseg = 4’b0011)

 C、信箱为信箱2(mbox = 2’b10)

 D、信件为1(letter = 2’b01)

 E、标准大小为32字节(ssize = 4’b1011)

 F、数据载荷为32字节(由于这不是最后一个事务, 所以数据载荷应该是32字节)


 处理部件的消息传递硬件使用这些信息来决定将这部分数据消息所含32字节数据存放到本地存储器地址0x3040。


 目标地址 = 信箱2基地址(Mailbox_2_base) + (消息分段x标准长度)


 0x3040  =    0x3000                   + (0x0002 x 0x0020)


 这个简单的寻址结构使得接收处理部件很容易计算存储消息数据的目标存储结构的地址。不仅计算起来容易,而且接收者的目标存储器结构的位置对发送者也是不可见的。这允许仅在处理器部件间提供基于消息通信的安全系统研发工作。


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


微信图片_20230117115423.png


其中消息响应包中逻辑层Ftype字段,Ttype字段,Status字段以及Data Payload字段的含义与普通响应包中各字段的含义完全相同, Target_info字段由letter,mbox和msgseg三个字段组成,这三个字段的含义与消息请求包中这三个字段的含义完全相同,这里不再赘述。


 由消息和响应(一般是DONE响应)事务组成的数据消息操作如下图所示,处理部件的支持消息传递的硬件用它向另一个处理部件发送数据消息。完成一次数据消息操作最多需要16个单独的消息事务。消息事务数据载荷的大小是双字长度(8个字节)的整数倍。最大的消息操作载荷是4096字节,该载荷由16个消息事务组成,每个事务携带256字节的数据载荷。信件( letter),信箱(mbox)和消息段(msgseg)组合在一起,惟一地标识系统中每个请求和响应部件对的消息包,与其他请求类型使用的事务 ID的作用一样。


微信图片_20230117115524.png


六、总结


      RapidIO的事务大致就上面几种,下图把所有的事务都放在一起以便于大家更快的查看相关的包格式与各个字段的位置。


微信图片_20230117115620.png


   这里有几点值得注意的是:


 1、 每个包的逻辑层字段与上文所讲的各个包的逻辑层字段定义完全相同


 2、 上图物理层字段的前10位所代表的字段ackID,rsvd,crf以及prio与正文中包格式的物理层字段有所出入,这是因为正文所讲解的包都是并行物理层的包格式,而上图中是串行物理层的包格式,所以物理层字段会有一点点区别,具体的内容请阅读下一篇博客。


 3、 上图每个包CRC字段的后面还有一些字段是正文中包格式所没有讲到的。这里特地解释一下:由于RapidIO包的总长度大于80个字节以后,RapidIO包会对前80个字节生成一个2字节CRC码并补0使字节边界对齐。然后80字节以上的数据放在处理完毕以后的数据后面继续发送,发送完毕以后生成第二个CRC码并补0使字节边界再次对齐,其中第二个CRC校验码是第一个CRC校验码的延续。因此上图中会出现后面的那些字段。后面我会写一篇博客教大家怎么使用RapidIO核,到时候看完这种大于80字节传输的时序图就能明白这个过程了。


七、参考资料


 1、RapidIO™ Interconnect Specification,下载链接 https://pan.baidu.com/s/1ek-3AAhetLAcxTuOE2IyMg

 2、RapidIO嵌入式系统互连,电子工业出版社

 3、Xilinx的pg007_srio_gen2,下载地址 https://china.xilinx.com/support/documentation/ip_documentation/srio_gen2/v4_0/pg007_srio_gen2.pdf

目录
相关文章
|
1月前
|
前端开发
背景
背景
16 4
|
消息中间件 缓存 算法
一、RapidIO背景介绍(1)
一、RapidIO背景介绍(1)
316 0
一、RapidIO背景介绍(1)
一、RapidIO背景介绍(2)
一、RapidIO背景介绍(2)
120 0
一、RapidIO背景介绍(2)
|
人工智能 达摩院 物联网
|
存储 SQL 大数据
背景介绍 | 学习笔记
快速学习 背景介绍
93 0
背景介绍 | 学习笔记
|
数据采集 监控 大数据
项目背景介绍|学习笔记
快速学习项目背景介绍
144 0
|
开发者 微服务
项目背景介绍 | 学习笔记
快速学习 项目背景介绍
89 0
|
编解码 前端开发 开发者
图像的背景 | 学习笔记
快速学习图像的背景
71 0
图像的背景 | 学习笔记
html+css实战74-背景-背景平铺
html+css实战74-背景-背景平铺
105 0
html+css实战74-背景-背景平铺