DSP

Rapid IO接口

2019-07-13 20:10发布

在过去的30多年时间内,处理器的主频和性能呈现指数上升的趋势,而与之相对应的处理器总线传送能力的增长却相对缓慢的多,这就导致了由时钟频率表征的CPU的性能和由总线频率表征的CPU可用的总线带宽之间的差距不断在变大,互连总线成为高速运算和处理系统的瓶颈。现代的高性能计算系统和网络存储系统需要更高速率的数据传送。高带宽、低延迟,高可靠性成为衡量一个总线技术的基本要求。
一、 传统总线的问题:
       传统总线多采用并线总线的工作方式,这类总线一般分为三组:数据线,地址线和控制线。实现此类总线互连的器件所需引脚数较多,例如对于64位数据宽的总线,一般由64根数据线,32-40根地址线以及30根左右的控制线,另外由于半导体制造工艺的限制还要加上一定数量的电源引线和地线,总共会有约200根左右的引线,这给器件封装、测试、焊接都带来了一些问题,如果要将这种总线用于系统之间的通过背板的互连,由此带来的困难就可想而知。
        为了提高总线的传输能力,传统总线多采用增加数据总线的宽度或是增加总线的频率的方式来实现。如PCI总线支持25M、33M、50M、66M的工作频率,PCI-X总线是在PCI总线结构的基础上进得到的一种总线结构,在硬件和软件上兼容PCI总线,PCI-X总线可以支持32bit、64bit的总线,其工作频率为66M、133M,对于64bit的PCI-X,如果其总线工作频率为133MHz,其峰值传送带宽可达到133×64bit=8.512Gbps。目前PCI-X也有一些版本定义了总线频率为266MHz或者533MHz的总线,另外也有一些总线定义了数据宽度为128bit 或是256bit的总线,但很少有人会选用这样的总线,因为增加总线频率和数据带宽虽然一定程度上满足了人们对高速数据传送的需求,但同时也带来了一些新的问题。更宽的总线导致器件引脚数的增加,从而增加封装尺寸,当然带来成本上的增加。
        另一个问题是当总线的工作频率超过133MHz时,很难在一条总线上支持超过两个外部设备,在总线上增加器件相当于增加容性负载,而容性负载的增加意味着装载或排空电荷使总线达到所需的额定电平的时间增长,信号的上升和下降时间的增长会限制总线的工作频率。对于并线总线的另一个问题是时钟与信号的偏移容限的问题,对于这样一组并行信号线的集合,信号的采样是取决于时钟信号的上升沿或是下降沿,这样对于信号的跳变和时钟的跳变时刻的时间差就有一个上限值,随着速率的升高,布线长度、器件门电路自身的翻转时间都会影响总线的速率。
       用于处理器之间互连以及背板互连的另一个主要技术是以太网,近些年来,以太网在存储、电信、通讯、无线、工业应用以及嵌入式应用中得到大量的应用,现有的成熟的硬件和协议栈降低了开发的复杂性和产品的开发成本。但是在局域网和广域网中得到很好应用的以太网用于这种芯片级或是板极的系统互连显示出了低效率、高延时的特性,QOS需要高层软件的参与,造成软件模块化结构不清晰。尤其是当背板的传输速率从1Gbps增加到10Gbps时,增加的处理要求已经超出了以太网的能力。
二、什么是Rapid IO?
       Rapid IO技术最初是由Freescale 和Mercury 共同研发的一项互连技术,其研发初衷是作为处理器的前端总线,用于处理器之间的互连,但在标准制定之初,其创建者就意识到了RapidIO还可以做为系统级互连的高效前端总线而使用。1999年完成第一个标准的制定,2003 年5月,Mercury Computer Systems公司首次推出使用Rapid IO技术的多处理器系统ImpactRT 3100, 表明Rapid IO已由一个标准制定阶段进展到产品阶段,到目前为止,Rapid IO已经成为电信,通迅以及嵌入式系统内的芯片与芯片之间,板与板之间的背板互连技术的生力军。
       Rapid IO 是针对嵌入式系统的独特互连需求而提出的,那么我们首先来说明嵌入式系统互连的一些基本需求:嵌入式系统需要的是一种标准化的互连设计,要满足以下几个基本的特点:高效率、低系统成本,点对点或是点对多点的通信,支持DMA操作,支持消息传递模式交换数据,支持分散处理和多主控系统,支持多种拓朴结构;另外,高稳定性和QOS也是选择嵌入式系统总线的基本原则。而这些恰是Rapid IO期望满足的方向。所以Rapid IO在制定之初即确定了以下几个基本原则:一是轻量型的传输协议,使协议尽量简单;二是对软件的制约要少,层次结构清晰;三是专注于机箱内部芯片与芯片之间,板与板之间的互连。
Rapid IO采用三层分级的体系结构,分级结构图如下图所示:        由此图可见,Rapid IO协议由逻辑层、传输层和物理层构成。最明显的一个特点就是Rapid IO采用了单一的公用传输层规范来相容、会聚不同的逻辑层和物理层,单一的逻辑层实体增强了Rapid IO的适应性。
       物理层定义了串行和并行两个实体,得到广泛应用的只有串行方式,尤其是用在背板互连的场合,串行方式可以在两个连接器之间允许80-100cm的连线,单链路传输带宽可达10Gbps。目前Rapid IO的标准是Version1.3,在未来的Version2.0规范中定义了更高的传输速率,可以得到更高的传输带宽。
物理层: 
        Rapid IO规范中定义的最低层是物理层,最初定义的是并行总线,之后定义了串行总线,并线总线可以选择8位或16位的宽度,传输电平采用LVDS方式,时钟信息在一对单独的差分线上传送,不在数据流中编码,频率在250M-1.0G之间。相比串行总线而言,无多少优点可言,所以只是在最初有支持这种总线的芯片出现,目前几乎所有的物理层均采用了串行方式。         串行物理层定义了器件间的全双工串行链路,在每个方向上支持1个串行差分对称为1个通道(1x),或同时支持4个并行的串行差分对称为4通道(4x),接口的电气特性采用成熟的XAUI(10GbE Attachment Unit Interface)接口,编码方式采用的是8B/10B编码,对链路的管理,包括流量控制,包定界和错误报告等使用专用的8B/10B码(即K码),接收端从链路上提取时钟信息,无需独立的时钟线。每一个通道支持三种不同的传送波特率1.25G,2.5G,3.125G(与之相对应的数据速率分别是1.0G,2.0G,2.5Gbps)。                                                           图:Control symbol 包的结构
       Rapid IO是一种基于可靠传送的协议,每一个数据据包的传送均要求对端在物理层上响应一个控制符号包,此包是一个4个字节的数据包,表明了数据包的传送状态,数据包是否被对方接方,还是要求重新发送或是包未被接收。发送方和接收方均可以使用控制符号包来获得对方的状态。                                                         图:Rapid IO包结构及物理层组成 Ack ID被接收方用作发送响应包的ID号,表明此包是否被接收端接收,或是需要重传。Rapid IO协议定义了两个bit位用于表示包的优先级,所以共有4个优先等级,0是最低的,3是最高的,优先级高的包将被交换器优先传送。
        每一个数据包都会被物理层附加上一个或两个16bit的CRC字段,用于接收方判断接收到的数据包的完整性,小于80个字节的数据包只有一个CRC,大于80个字节的数据包除了在第80个字节后有第一个CRC字段后,还会在包的末尾再加上一个CRC字段,实现数据包的检错,自动纠错和自动重传的功能,保证数据包被对端完整正确的接收。第一个CRC字段可用于对大数据包包头的验证,这样就可以在整个数据包被接收下来之前就可以进行对数据包的处理,交换器的直通模式就是利用了这个特性,这样可以有效减少传送时延。ACKID并不包括在CRC的计算范围内,这几个bit位在计算CRC时用0代替,这样就保证了在每一个链路上CRC无须被重新计算,当然如果HOP_COUNT字节有变化时,CRC还是需要重新计算的。 传输层:
       Rapid IO的第二层是传输层,实现Rapid IO数据包的路由、传送。所有的逻辑层协议均使用单一的传输层实体来实现,这样无论逻辑层怎么变化,或是采用何种方式来封装应用,都可以用单一的传输层实体来实现,即使有新的逻辑层规范出现,也可以用这个单一的传输层来实现。        Rapid IO的路由和交换是通过每个终端设备的ID号来实现的。每一个终端都会分配一个唯一的ID号,当一个终端发出一个数据包时,在它的包头中包含有目的终端的ID号和发送源端的ID号。每一个交换器在它的每一个端口上都有一个交换路由表,根据此表就可以决定此数据包由那一个端口送出。每个端口的路由表需要在系统初始化时进行配置,这与以太网相比,显得不是非常的灵活和智能,但正是如此,使得系统的路由实现变得非常简单。同样对于组播功能的实现也变得简单,只是由单一的传输层就可以实现了。         Rapid IO系统构成如左图,包括两类器件,一个是终端,产生数据包和接收数据包;另一类是交换器,实现数据包在各个端点间的路由和传送,且不对数据包做解释。
        Rapid IO的传输层包头中的另一个字节是HOP_COUNT,是用来实现终端对交换器的初始化和路由配置,Rapid IO交换器的配置可以用任一个与之相连的终端进行配置,当交换器收到一个数据包时,它会首先判断收到包的HOP_COUNT值,如果此值是0则由此交换器终结此数据包,交换器利用此数据包的数据进行读写操作;如果此值不是0,则交换器将此值减一,然后按照目的ID值查路由表进行转发。如果是要对级连的多个交换器进行配置,可以在发送这些维护包时设置HOP_COUNT为0,1,2等对与之相连的第一个交换器,第二个交换器以及第三个交换器,以此类推。 逻辑层:
         在Rapid IO的体系结构中定义了6种基本操作,用来执行相应操作的事务和对操作的描述。这6种操作包括:NREAD(读),NWRITE(写),NWRITE_R(写操作,但操作结束前需要等等一个响应);SWRITE(流写,面向大数据量DMA传送);Atomic(原子操作:读-修改-写);Maintenance(维护包,以Rapid IO专用寄存器为目标的事务,如:系统发现,初始化、配置以及系统维护)。         在消息传递系统中,经常使用两种机制将命令或数据从一个器件到另一个器件,一个是DMA(直接内存访问),另一个是messaging(消息)。使用消息传送时,发送端只须访问目标,而不需要象DMA方式那样,还需对目标的地址空间的可见性。          Rapid IO定义了两种不同的包格式用于消息事务,第10类包格式(door bell)和第11类包格式,doorbell非常适合传送8bit或16bit短信息,可以用于处理器的中断等。第11类消息数据所最大的载荷是4096字节,可以由16个消息事务组成,每个最大载荷是256字节。Rapid IO可以支持4个讯息信箱(mailbox),每个信箱可以最多装入4个信件,这样发送方可以同时发送4个信件到同一个目标信箱。
         除此,Rapid IO也具备Data Streaming的逻辑层协议,为封装和传输通过Rapid IO交换器的数据流提供一种标准方法。支持独立流事务,通过SAR功能支持长度可变的PDU,且与内部的PDU协议无关,提供对虚拟流识别功能;Rapid IO流是由源ID、目的ID与传送链路组成的逻辑结构,为了支持固定、较小的包长,必须对较长PDU分段处理,数据流支持分段传输以及重组还原操作,在段落类型上主要有:开始(Start)、继续(Continuation)和结束(End), 当然可能会有多个继续段。虚拟流被定义为协议数据单元定序集,可以对各个数据流进行识别,在输入输出器件对之间可以只存在一个单独的流,系统也可以为每一用户和流量类型的组合分配一个单独的流,使用虚拟流标识最多可标识四百万个流,特定的流量级别可以提供基于优先级、延迟和吞吐率等因素的流量商定,可以根据中最高位的优先次序处理交换结构中的流量。
        流量控制是任何互连技术的重要内容,Rapid IO提供了链路级的流量控制和端到端的流量控制两种方式,由于业务流与物理连接和系统拓朴结构相关,规定流量控制为Rapid IO物理层规范的内容,同时定义了重传、限速和基于信用三种流控方式,保证Rapid IO数据流的正确传送。除了链路级的流量控制处,同时Rapid IO也定义了端到端的流量控制机制,链路级流控管理紧相连的两个器件,但对于来自多个源,发往同一个或多个目的地的流量会很大程度上降低系统的性能,端到端的流量控制使用由交换或是端点器件产生的特殊拥塞包来控制流量,通过交换器件将拥塞控制包传回到源端,源端可根据收到的控制包暂停发送数据包一定时间,通过限制源头流量来达到流量控制的目的。单一的Rapid IO传输层结构使得拥塞数据控制包的传送变得非常简单,交换结构只是把他当作普通数据包进行传送,但包的优先级可能不同。
三、 Rapid IO在高速系统设计中的应用
       目前,Rapid IO在无线基站系统中已经得到了广泛的应用,同样在视频处理,语音处理,高性能计算机及存储领域也会得到越来越多的应用。在实现芯片到芯片之间、板与板之间的高速互连上,Rapid IO所能带来的好处也越来越直观,对于简化系统设计、高带宽、低延时等特点也被开发人员广泛接受。
       下一代的Rapid IO在应用上也要向机箱与机箱间的高速互连方向上发展,同时也会提供更高的传输速率,2.0规范中已经可以实现40Gbps的带宽。我们相信,随着越来越多的处理器支持Rapid IO接口,Rapid IO的应用前景会越来越光明。