RapidIO介绍
传统串行总线(如 UART, SPI, I2C 等)
特点:
- 接口简单:传统的串行总线设计相对简单,通常使用少量的引脚,因此硬件设计较为简洁。
- 协议简单:这些协议设计简单,容易实现,因此常用于低速和中低带宽的通信场景。
- 传输速度慢:由于是串行通信,每次只能传输一个比特,因此速度较慢,通常用于低速通信(如数百 Kbps 到几 Mbps)。
主要类型:
- UART(Universal AsynchIOnous Receiver-Transmitter):
-
- 适用于点对点通信,常用于串口通信。
- 速度通常较慢,适用于低速设备(如传感器、串口调试等)。
- SPI(Serial Peripheral Interface):
-
- 支持全双工通信,比 UART 更适合高速数据传输。
- 常用于微控制器与外围设备之间(如传感器、存储设备)通信。
- 速度通常在几 Mbps 到几十 Mbps 之间。
- I2C(Inter-Integrated Circuit):
-
- 支持多主多从通信,常用于嵌入式系统中设备间的通信。
- 适用于低速、短距离通信,传输速度通常为 100 Kbps 到 1 Mbps。
优缺点:
- 优点:
-
- 简单、易于实现。
- 硬件接口较少,便于集成。
- 协议简单,使用灵活。
- 缺点:
-
- 传输速度慢,不适合需要高带宽的应用。
- 距离有限,通常适用于短距离通信。
- 带宽限制,不能处理大规模数据流。
传统并行总线(如 EMIF 总线、UPP 总线、PCI 总线等)
特点:
- 比串行总线速度快:并行总线一次可以传输多个比特,速度较快,通常适用于中高速数据传输场景。
- 接口引脚多,硬件设计复杂:与串行总线相比,并行总线需要更多的引脚来支持多位数据并行传输,因此硬件设计更为复杂。
- 传输距离短:由于并行总线的信号干扰较大,信号的稳定性随着距离的增加而降低,因此适合短距离的高速数据传输。
主要类型:
- EMIF(External Memory Interface)总线:
-
- 主要用于微处理器与外部存储器(如 SRAM、Flash 等)之间的数据传输。
- 提供高带宽访问外部内存,但带宽通常较低于现代串行总线。
- UPP(Universal Parallel Port)总线:
-
- 用于摄像头等图像处理设备的数据传输。
- 支持较高的数据带宽,但由于并行传输的限制,传输距离通常较短。
- PCI(Peripheral Component Interconnect)总线:
-
- 主要用于计算机内部的高带宽设备通信,如网卡、显卡等。
- 支持高带宽和较长的传输距离,但通常需要更多的硬件设计工作和资源。
优缺点:
- 优点:
-
- 提供更高的带宽,相较于传统串行总线速度更快。
- 支持较高的数据吞吐量,适用于需要大量数据传输的应用。
- 缺点:
-
- 需要更多的引脚和更复杂的硬件设计,增加了设计难度。
- 传输距离有限,随着距离增加,信号的稳定性和完整性会受到影响。
- 信号干扰较大,需要高质量的信号线和屏蔽措施。
高速串行总线(如 USB 总线、PCIe 总线、SRIO 总线等)
特点:
- 高速数据传输:高速串行总线通常工作在几 Gbps 级别,适用于高带宽、高速数据流的应用。
- 低压差分信号(LVDS):许多高速串行总线(如 PCIe、USB 等)使用低压差分信号(LVDS),这可以提高信号传输的抗干扰能力和稳定性。
- 接口简单,硬件设计相对简单:虽然协议较复杂,但物理接口相对简单,只需要较少的引脚和连接。
- 较长传输距离:相较于并行总线,高速串行总线在传输距离方面具有优势,适用于长距离通信。
主要类型:
- USB(Universal Serial Bus)总线:
-
- 支持热插拔和即插即用,广泛应用于外设设备(如存储设备、鼠标、键盘等)的连接。
- 常见的 USB 3.x 支持高达 5-10 Gbps 的数据传输速率。
- PCIe(Peripheral Component Interconnect Express)总线:
-
- 常用于高性能计算机和服务器的内部总线,用于连接显卡、存储设备等高速设备。
- 提供非常高的带宽(例如 PCIe Gen 3 支持最高 8 Gbps 每通道,PCIe Gen 4 支持高达 16 Gbps 每通道)。
- SRIO(Serial RapidIO)总线:
-
- 主要用于高性能嵌入式系统中,如网络设备、通信设备等。
- 支持高带宽,低延迟的通信,适合大规模并行处理和数据密集型应用。
优缺点:
- 优点:
-
- 提供非常高的传输速率,适合高速数据流和高带宽需求的应用。
- 低压差分信号(LVDS)技术提高了信号的稳定性和抗干扰能力。
- 支持较长的传输距离,适用于复杂系统中各模块间的数据传输。
- 缺点:
-
- 协议较复杂,硬件设计要求较高,通常需要更多的协议栈和复杂的控制逻辑。
- 虽然硬件接口较简单,但实现复杂,系统设计和调试可能需要更多时间。
10G级互连技术比较
SRIO软件开销最小,打包效率最高,主要用于嵌入式系统处理器间的互连。千兆网和PCIE都是可以直接和电脑互连的。
RapidIO简介
实际上,RapidIO和SRIO是同一个技术的不同称呼:
- RapidIO:这是最初的技术名称,指的是一种高性能、低延迟的互连技术。
- SRIO:这是Serial RapidIO的缩写,强调了RapidIO技术的串行传输特性。
- DSP6678支持的速率最快为5GHz,以及xlinx7系列的fpga,ip核支持6.25Gbps
RapidIO协议结构
需要注意的是,Rapid IO的传输层。与互联结构无关。Rapid IO可以实现多种拓扑结构。其中最常使用的是基于交换机的拓扑结构。
串行rapid r的物理层定义了器件间双向差分信号的全双工串行链路。记在一个端口的每个方向上都使用单向查分信号。一个串行查分,对作为一个通道。即1差。两个创新差分队作为两个通道,即二叉。4个串行差分队作为4个通道,即四叉,这就是我们通常所说的链路为一查模式、二叉模式或者四叉模式。
RapidIO传输流程
Rapid协议数据由包和控制符号组成。包是系统中各器件间通信的基本单元。控制符号有2个作用。一是用来管理rapid物理层互联的事物流,二是用来确认流量控制和维护等功能。
交换结构是指提供系统互联的单个或多个交换器件的集合,通常是一个交换机。一般在大型系统中使用该结构。而在小型系统中,一般采用直接的点对点的连接方式
Rapid IO数据包格式。Rapid IO数据包有包头可选择在后数据。和16位的CRC校验组成。包头的长度因为包类型的不同,可能是十几到二十几个字节。每包的载荷数据长度不超过256个字节。这有利于减少传输时延,简化硬件实现。这里我们来重点关注一下设备ID rapid IO统一采用设备ID作为区分交换系统中各器件的唯一标识。路由和交换过程是通过每个端点器件的设备ID来实现的。当端点器件产生一个请求包时,会在包头上加上自己的设备ID和对方的设备ID。分别作为原ID和目的ID交换机,根据目的ID查找转发端口。每个交换机对自身的每个端口都维护一个交换路由表。需要在系统初始化时进行配置
交换芯片根据所接收包的ID查找此路由表,进而决定将数据包由哪个端口输出。我们来看一下蓝色的传输层包的卫浴格式。其中T器决定不同大小的设备域。00表示8位的设备ID 10表示16位的设备ID。使用8位的设备ID,最多允许256个设备使用16位的设备ID。系统中最多允许65536个设备。需要注意的是,格式类型f type.表示的是逻辑层的包格式类型代表不同的事物类型是属于逻辑层的。在交换系统中,端点器件都有ID号,而交换机没有ID号。
在大部分情况下。操作的目标并不是交换器件,因此不会产生问题。但当rapid操作的目标变成交换机时。会导致数据无法到达交换机。例如,系统正在配置或者要读取交换机的寄存器信息时,由于交换机没有ID标识,不能进行典型的读写操作,这种情况下就需要一种特殊的包维护包。用于交换机的维护和管理。维护包中多了一个跳数字段,该字段定义了网络中交换机的数量。
RapidIO支持的IO操作规范
外IO支持的逻辑层业务主要有直接IO事务和消息传递事务。进行直接IO事务操作的前提是主设备知道被访问端的存储器,映射主设备可以直接读写存设备的存储器,在RapidIO (RIO) 协议中,直接读/写操作(Read/Write Operations, IO)是一种重要的数据传输方式。这类操作的特点是在被访问端的功能几乎完全由硬件实现,这意味着被访问的设备不需要承担任何软件层面的处理负担。RapidIO 支持六种基本的直接读/写操作,以下是这些操作的简要说明,重点放在读操作上:
- 非响应读操作 (Non-Response Required Read, NR Read):
-
- 这种类型的读操作不要求被访问设备产生响应。发起方发送一个读请求后,不会等待被访问方的确认,而是立即继续执行其他任务。这种操作适用于对结果不敏感或可以容忍不确定性的场景。
- 带响应读操作 (Response Required Read, RR Read):
-
- 相较于非响应读操作,带响应的读操作要求被访问设备在接收到读请求后返回数据。发起方会等待被访问方的响应,直到接收到所需数据或超时。
- 非响应写操作 (Non-Response Required Write, NR Write):
-
- 写操作中的一种,不要求接收端给出响应。发起方发送数据后即认为操作完成,适合于数据传输要求不高或接收端处理能力有限的情况。
- 带响应写操作 (Response Required Write, RR Write):
-
- 此类写操作要求接收端在成功接收到数据后发送确认消息给发起方。这种机制可以提高数据传输的可靠性,确保数据正确到达目的地。
- 流写操作 (Stream Write):
-
- 流写操作的数据长度必须是8字节的整数倍,且不要求接收端响应。它适用于大量连续数据的传输,能够提高传输效率。
- 原子操作 (Atomic Operations):
-
- 原子操作是一类特殊的读/写操作,旨在保证操作的完整性,即使在网络环境中也能避免数据竞争条件。这类操作通常用于同步或状态管理。
- 维护操作 (Maintenance Operations):
-
- 维护操作主要用于系统的诊断、调试和配置等目的。它们可以帮助维护人员检查和修复网络中的问题。
以非响应读操作 (NR Read) 为例,这种操作允许发起方快速请求数据而无需等待响应,从而减少了通信延迟,提高了系统的整体性能。然而,这也意味着发起方无法确认数据是否已被正确读取,因此适用于那些对读取结果不是非常严格的应用场景。
Nread包
response包
目标端点会根据收到的恩瑞的请求包中地址信息对本地存储器进行选址。然后将这些存储数据嵌入到response包中,发送给请求端,请求端对response包进行解包,从而得到请求的数据。由第13类包完成。
响应中没有用来指示所含数据长度和大小的位浴,接收者需要根据包尾符来判断。包尾符是控制符号的一种,我们在前面讲解rapid传输流程时说过控制符号。第13类包可以完成大部分请求的响应。
RapidIO支持的消息传递逻辑规范
Rapid的IO除了支持IO操作啊,支持消息传递。与IO操作不同的是,在消息传递时,消息是由目标端控制。请求端不需要对目标端的地址空间可见,这也就提高了系统的安全性。数据在被访问设备中的位置由消息中所携带的邮箱号等信息计算得出。从设备根据计算出的地址把数据保存到对应的缓冲区中。
Rapid啊,定义了第10类包和第11类包,用于传递消息事物。第10类包是doorbell包,包头精简,所能携带的数据载荷也只有16位。doorbell通常用于处理器之间的中断通知。第11类包用于消息操作,最多可以携带4096字节的数据载荷。
一个刀贝尔操作,由刀贝尔和response事务完成,如图31所示。Message操作也是由message和response事务完成,如图32所示。
RapidIO数据对齐和分包
Rapid IO数据包的对齐和分包为了简化系统中对数据的琼脂,Rapid IO假设所有的事物都对齐到双字边界。也就是8个字节64位。如果正被发送的数据不以双字边界开始或结束,就用一个特殊的掩码来表明哪些字节包含有效数据。Rapid支持的最小数据的大小是一个字节,也就是8位。
对于写操作,为了把数据传送到目的端,处理部件会正确的把数据对齐的双子边界。如果没有自然的对齐数据。那么该对其操作就可能要求将一个数据流分成多个事务来进行传输。
图39展示了一个48字节的数据流处理部件,希望通过互联结构将该数据写往另一部件。图中阴影标出的是将被写入的数据。因为流的开始和结束都没有与双子边界对齐,所以发送部件将事物分成至少3个独立的事物,如图所示。第一个事物发送前三个字节,并指示5、六、七字节有效。第二个事物发送中间的这5个双字及40个字节。Rapid IO的一个事物最多可以携带256个字节的数据,所以这40个字节可以通过一个事物就可以发送完成。第三个事物将发送剩下的5个字节。
RapidIO数据包的具体格式
Rapid的阿乌事物是分装在包中的。包是系统中端点期间进行通讯的基本单元。Rapid包中包含了逻辑层、传输层和物理层的信息。我们可以看到,Rapid IO所有包都是以物理字段开始的。包的类型有逻辑层字段格式类型f type.和事物类型字段t type.唯一确定。
在 RapidIO 协议中,F Type
(Format Type)和 T Type
(Transaction Type)是两个重要的字段,用于确定包的格式和事务类型。以下是一些常见的 F Type
和 T Type
的值及其含义:
F Type(格式类型)
F Type
字段定义了包的格式。常见的 F Type
值包括:
- 0x00:保留
- 0x01:标准包(Standard Packet)
- 0x02:扩展包(Extended Packet)
- 0x03:维护包(Maintenance Packet)
- 0x04 至 0x0F:保留或用于未来扩展
T Type(事务类型)
T Type
字段定义了具体的事务类型。不同的 F Type
可能支持不同的 T Type
值。以下是一些常见的 T Type
值及其含义:
标准包(F Type = 0x01)
- 0x00:保留
- 0x01:读请求(Read Request)
- 0x02:读响应(Read Response)
- 0x03:写请求(Write Request)
- 0x04:写响应(Write Response)
- 0x05:流写请求(Stream Write Request)
- 0x06:流写响应(Stream Write Response)
- 0x07:带响应的写请求(Write Request with Response)
- 0x08:带响应的写响应(Write Response with Data)
- 0x09:原子操作请求(Atomic Operation Request)
- 0x0A:原子操作响应(Atomic Operation Response)
- 0x0B 至 0x0F:保留或用于未来扩展
扩展包(F Type = 0x02)
- 0x00:保留
- 0x01:扩展读请求(Extended Read Request)
- 0x02:扩展读响应(Extended Read Response)
- 0x03:扩展写请求(Extended Write Request)
- 0x04:扩展写响应(Extended Write Response)
- 0x05 至 0x0F:保留或用于未来扩展
维护包(F Type = 0x03)
- 0x00:保留
- 0x01:维护请求(Maintenance Request)
- 0x02:维护响应(Maintenance Response)
- 0x03 至 0x0F:保留或用于未来扩展
示例
假设有一个 RapidIO 包,其 F Type
为 0x01
,T Type
为 0x03
,那么这个包的类型是“标准包中的写请求”。
总结
F Type
和 T Type
的组合决定了 RapidIO 包的具体类型和用途。不同的 F Type
值对应不同的包格式,而 T Type
值则进一步细化了具体的事务类型。这些字段的合理使用有助于确保数据在 RapidIO 网络中的正确传输和处理。