【通信传输协议】SRIO(一)

一、RapidIO 简介

1、总线技术 Rapid IO 的含义

  根据百度百科的介绍:“ Rapid IO 是由 Motorola 和 Mercury 等公司率先倡导的一种高性能低引脚数、 基于数据包交换的互连体系结构,是为满足和未来高性能嵌入式系统需求而设计的一种开放式互连技术标准。RapidIO主要应用于嵌入式系统内部互连,支持芯片到芯片、板到板间的通讯,可作为嵌入式设备的背板(Backplane)连接”。可以得知 Rapid IO 是一种总线技术,常见的总线技术包括:

传统串行总线:UART、SPI、IIC总线等;

         接口简单,硬件设计简单;

         协议较简单

         传输速度慢

传统并行总线:EMIF、UPP、PCI总线等;

         比传统串行总线速度快

         接口引脚多,硬件设计困难

         传输距离短

由此诞生了高速串行总线:USB\PCIE\SRIO总线等;

    速度快,链路速度一般可以在2.5Gbps,3.2 Gbps,5 Gbps,6.25 Gbps;

         低压差分信号(low voltage differential signal, LVDS)

         接口简单,硬件设计简单,但传输协议复杂

有三种带宽能达到10 Gbps的互连技术:以太网,PCIE,SRIO(串行rapidIO):

 

 

  RapidIO 2.0已经支持40Gbps带宽。

 

  Rapid IO 最初规范使用并行总线,8位或16位,但并行总线需要较多信号引脚,比如8位位宽的接口需要40根信号线,16位位宽的接口需要76根,不适用于系统背板间的互联。现在基本上都有串行总线RapidIO,即SRIO。并行和串行只是物理接口的不同,它们具有相同的编程模型,事务处理,寻址机制。

   作为高速串行总线,Rapid IO的特点有:

    系统结构灵活,允许点对点传输;

    带错误检测的鲁棒传输(CRC?

    可扩展的频率和接口宽度

    非软件密集型操作

    低开销的高带宽互联

    低引脚数、低功耗、低延迟

 

深入了解 Rapid IO 互联特性可以看《RapidIO Interconnect Specification 2.1》。

 

2、Rapid IO 协议结构

  三层:逻辑层、传输层和物理层

 

 

         逻辑层(logical layer)定义接口的协议和数据包格式,为端点之间发起和结束事务提供必要的信息,位于最高层;

         传输层(buffer layer)定义了包交换、路由和寻址机制,与互联结构无关,SRIO可以实现多种拓扑结构,最常见的是基于交换机的拓扑结构,有图;

基于交换机的拓扑结构

         物理层(physical layer)定义了电气特性、链路控制和纠错重传等,SRIO的物理层定义了器件间双向差分信号的全双工串行链路,即在一个端口的每个方向上都使用单向差分信号。一个串行差分对作为一个通道,即1X;两个串行差分对作为两个通道,即2X;四个串行差分对作为四个通道,即4X。这就是常说的链路为1X模式,2X模式,4X模式。

 

3、RIO 传输流程

  RIO 协议数据有包和控制符号组成。包是系统中各器件间通信的基本单元;控制符号有两个作用,一是管理RIO物理层互联的事务流,二是用来流量控制和维护等功能。

  RIO 协议的操作过程基于“请求”和“响应”事务,如图所示。

  对于一次操作,发起器件向交换结构发出请求事务,开始一起操作,交换结构收到请求后发起控制符号,确认收到该请求,然后将该请求转发到目标端点,目标接收请求事务并完成操作后,发出响应事务,交换结构收到响应事务后发起控制符号,确认收到响应,并将响应事务转发到发起器件,发起器件收到响应事务后发出控制符号,表明响应包得到确认,至此操作完成。交换结构是指提供系统互连的单个或多个交换器件的集合,通常是一个交换机,一般只在大型系统中使用该结构,在小型系统中直接使用点对点的连接方式。

 

4、RIO 包格式

  RIO 包由包头、可选的载荷数据和 16 bits CRC 校验码组成。包头的长度因为包类型不同可能是十几到二十几个字节;每包的载荷数据长度不超过 256 字节,这有利于减少传输时延,简化硬件实现。

 

 

 

  需要重点关注设备ID:RIO 统一采用设备ID作为区分交换系统中各器件的唯一标示。路由和交换过程是通过每个端点器件的设备ID来实现的。当端点器件产生一个请求包时,会在包头加上自己的设备ID和对方的设备ID,分别作为源ID和目的ID,交换机根据目的ID查找转发端口。每个交换机对自身的每个端口都维护一个交换路由表,需要在系统初始化时进行配置。交换芯片根据所接收到包的ID查找此路由表,进而决定将数据包由哪个端口输出。

  上图蓝色的传输层包的位域格式:

  • tt决定不同大小的设备域,00表示8位的设备ID,10表示16位的设备ID。使用8位的设备ID最多允许256个设备,使用16位设备ID系统中最多允许65536个设备;
  • ftype表示逻辑层包格式类型,代表不同的事务类型,属于逻辑层。

  在交换系统中,端点器件都有ID号,而交换机没有ID号。在大部分情况下,操作的目标不是交换器件,所以不会产生问题;但当RIO操作目标为交换机时,会导致数据无法到达交换机。例如系统正在配置或要读取交换机的寄存器信息时,由于交换机没有ID标示,不能进行典型的读写操作,这种情况下就需要一种特殊的包:维护包。用于交换机的维护和管理。维护包中多了一个跳出字段,该字段定义了网络中交换机的数量,仅供了解。

 

5、RIO 支持的IO操作规范(六种)

  RIO 支持的逻辑层业务主要有直接IO事务和消息传递事务。进行直接IO事务操作的前提是主设备知道被访问端的存储器映射,主设备可以直接读写从设备的存储器,直接IO在被访问端的功能往往完全由硬件实现,被访问的器件无任何软件负担。

  RIO 支持六种基本的IO操作:

 

 

 

  • NREAD:读操作
  • NWRITE:写操作,不要求接收端响应
  • NWRITE_R:带响应的写操作,要求接收端响应
  • SWRITE:streaming-write,流写,数据长度必须是8字节的整数倍,不要求接收端响应
  • ATOMIC:原子操作
  • MAINTENANCE:维护事务

  以 RIO NREAD操作为例介绍 RIO 操作流程:

 

 

 

   图3.1是操作的基本过程,请求端发出NREAD事务请求,得到目标端点某内存区域的内容,目标端点将请求内容嵌入到 response 响应事务,返回给请求端。NREAD事务使用第2类包完成,图2.5是第2类包的格式。无阴影部分是逻辑层字段。表2.3是逻辑层各字段代表意义的详细介绍。

  RIO操作对系统中的地址空间都是可见的,RIO 支持三种地址模式:小地址模式、中地址模式和大地址模式。小地址模式由 rdsize 结合Address、wdptr、xamsbs 位域指出数据的位置、大小和对齐方式,共支持16g字节的寻址空间;中地址模式和大地址模式增加了扩展地址,中地址模式扩展地址为16位,大地址模式扩展地址为32位。目标端点会根据收到的NREAD请求包中地址信息对本地存储器进行寻址,然后将这些存储数据嵌入到response包中,发送给请求端,请求端对response包进行解包,得到请求的数据。

  response 由第13类包完成:

 

 

   第13类包定义了有数据载荷和无数据载荷两类数据类型,由 ttype 位域编码标识。目标事务ID与响应包正在响应的请求事务ID相同,请求端会根据该ID来匹配响应和请求。如果响应包载有数据,数据会在目标事务ID之后出现,需要注意响应中没有用来指示所含数据长度和大小的位域,接收者需要根据包尾符判断。包尾符是控制符号的一种,前文讨论RIO 传输流程时提到过控制符号。第13类包可以完成大部分请求的响应。

 

6、RIO 支持的消息传递逻辑规范

  RIO 除了支持IO操作还支持消息传递。与IO操作不同的是,在消息传递时,消息是由目标端控制,请求端不需要对目标端的地址空间可见,提高了系统安全性。数据在被访问设备中的位置由消息中所携带的邮箱号等信息计算得出,从设备根据计算出的地址,将数据保存到对应的缓冲区中,这一过程一般需要软件的协助。

  RIO 定义了第10类包和第11类包,用于传递消息事务。第10类包是DOORBELL包,包头精简,所能携带的数据载荷只有16位,DOORBELL通常用于处理器之间的中断控制;第11类包用于消息操作,最多可以携带4096字节的数据载荷。一个DOOEBELL操作由DOORBELL和response事务完成,MESSAGE操作也是由MESSAGE和response事务完成,如图所示。

 

 

7、RIO数据对齐和分包

 

  为了简化系统中对数据的寻址,RIO 假设所有的事务都对齐到双词边界,也就是8个字节,64位。若正被发送的数据不以双词边界开始或结束,就用一个特殊的掩码来表明哪些字节包含有效数据。

  RIO 支持的最小数据是一个字节,也就是8位。对于写操作,为了把数据传递到目的端,处理部件会正确地把数据对齐到双词边界,如果没有自然的对齐数据,那么该对齐操作就可能要求将一个数据流分成多个事务来进行传输。

  图3-9展示了一个48字节的数据流,处理部件希望通过互联结构将该数据写往另一部件。图中阴影标注的是将被写入的数据。因为流的开始和结束都没有与双词边界对齐,所以发送部件将事务至少分成三个独立事务。第一个事务发送前三个字节,并指示567字节有效;第二个事务发送中间的5个双词,即40字节;RIO的一个事务最多可携带256个字节,所以这40个字节可以通过一个事务发送完;第三个事务发送剩下的5个字节,并表明有效位。如果数据是对齐双词边界的话,那只需要1个事务就全部发完了。

 

8、RIO常用数据包的具体格式

  RIO 事务是封装在包中的,包是系统内端点器件间通信的基本单元,RIO包包含了物理层、逻辑层和传输层的信息。RIO所有包都是以物理字段开始的(图中黄色),包的类型由逻辑层字段:格式类型Ftype和事务类型字段Ttype唯一确定。

 

posted @ 2021-10-27 01:30  AnchorX  阅读(11845)  评论(1编辑  收藏  举报