APP下载

基于RapidIO的星载交换机的设计与实现*

2019-05-31孟繁成乔庐峰陈庆华

通信技术 2019年3期
关键词:存储器交换机数据包

孟繁成,乔庐峰,陈庆华

(陆军工程大学 通信工程学院,江苏 南京 210007)

0 引 言

卫星通信因其覆盖广、通信容量大、不受地理环境限制等优点,成为现代通信网的重要组成部分。星载交换机作为卫星网中的关键节点设备,其性能将直接影响卫星通信网的时延、带宽、Qos等重要参数和指标[1]。目前,星载交换机在结构上通常借鉴地面网中的高性能交换机的一些关键技术,同时增强其容错能力,提高其可靠性以适应星载需求。由于目前的卫星通信网络通常采用专用的技术体制,星载交换机硬件平台标准化水平较低,妨碍了星载交换机关键硬件平台技术的发展。RapidIO是目前使用较为广泛的高性能串行总线技术,通常应用于分布式处理单元之间进行高速数据传输。RapidIO技术支持多种类型的操作模式,既有高可靠的传输模式,又有快速传输大量数据的传输模式;互连带宽大,目前最大可以支持20 Gb/s的互联带宽[2];支持高可靠传输,物理层具有错误检测、流量控制和差错重传的机制;标准化的水平高,有利于硬件平台的统一设计,可满足未来需求。RapidIO接口目前被各类数字信号处理器、嵌入式处理器和FPGA等广泛支持,芯片之间可以通过RapidIO交换芯片互联,形成一个完整的高性能分布式处理平台。目前,该技术在地面通信网络中被大量应用于移动通信基站的标准平台设计,用于实现分布式处理单元之间的控制和业务数据传输。星载交换机可以被看作一个更加复杂的、特殊的无线通信节点,可以借鉴地面网基站平台的标准化设计方法,提高其硬件平台的性能和标准化水平。

1 基于RapidIO的星载交换机

传统星载交换机的结构如图1所示。它由多个线卡、管理控制器、路由控制器和交换结构组成。线卡是数据进出交换机的入口和出口,其中的收发器模块可进行光-电和电-光信号变换[3]。成帧器模块可以将接收的数据包封装成数据帧。网络处理器模块主要进行路由表的查找和包分类。流量管理器作为网络处理器与交换结构的连接桥梁,将来自网络处理器中不同协议下的多个数据流在进入交换结构之前进行处理,从而解决拥塞问题。

图1 传统交换机

本文研究的基于RapidIO的星载交换机平台结构如图2所示。基带处理单元在完成信号接收后,将接收的数据帧发往链路层处理模块。链路层处理模块对接收的数据帧校验检查后,根据帧的类型进行不同处理;在IP层处理单元,业务数据帧承载的IP包被提取出来进行IP层路由查找,形成本地使用的转发信息,并等待进入交换结构。交换结构负责接收到来的数据包,然后根据每个包携带的转发信息将其交换到对应的输出端口。图2的各模块使用RapidIO技术进行互连。不同处理单元内部不同类型的数据帧/包根据预先确定的封装形式进行格式转换和封装操作。

图2 基于RapidIO的星载交换机

星载交换机各模块间的数据传输不仅有大容量的业务流,还有容量相对较小、种类较多的控制流[2]。业务流需要高速的传输模式。在RapidIO中,流写操作模式可以提供高效的数据迁移,传输效率高达95%,可以用来传输业务流。控制流则需要较高的可靠性,可以通过RapidIO中的NWRITE_R(需要返回相应的写操作)操作模式进行传输[4]。

相较于传统的交换机,基于RapidIO的星载交换机具有更高的带宽,各模块间通过RapidIO技术互连,提升了传输的可靠性,降低了传输时延。它的核心是带有RapidIO接口的大容量交换矩阵。

与传统的交换矩阵相比,基于RapidIO的大容量交换矩阵同样要支持单播、组播和广播,支持无阻塞交换。除了端口支持RapidIO规范外,内部电路可以采用不同类型的大容量交换矩阵的设计方法。本文采用的是大容量三级Clos结构。与传统交换矩阵不同的是,RapidIO的最大帧长为256 B[4],远小于以太网等地面网络的最大帧长,在前级需要对长包进行第一次分割。在交换结构内部,RapidIO接收的数据包需要根据大容量交换矩阵的要求将其分割为内部信元,然后按照变长调度的方法将内部信元交换到各个输出端口,然后在端口处进行重组,输出RapidIO数据包。

2 交换矩阵的接口处理电路设计

交换矩阵的RapidIO端口电路结构如图3所示,主要包含RapidIO IP核和接口处理电路两个模块。接口处理电路与RapidIO IP核和三级Clos交换结构相连,主要包括以下两个模块。

(1)发送模块:将三级Clos交换结构的数据格式转化为RapidIO IP核支持的帧格式,并将数据发送到RapidIO IP核内。

(2)接收模块:将RapidIO IP核从远端设备中接收到的数据进行存储,并将其转换为可在交换结构中使用的包格式,然后将其发送到三级Clos交换结构的输入级中。

图3 RapidIO端口的结构

2.1 Xilinx FPGA中的RapidIO IP核

本设计通过在ISE上例化IP核的方式实现RapidIO的点对点通信功能。Xilinx FPGA中RapidIO IP核结构如图4所示,包括逻辑层(LOG)、缓存层(BUF)和物理层(PHY)。逻辑层主要定义了I/O端口、包格式,提供了事务在器件之间传输所需要的信息[5]。缓存层主要为物理层提供数据存储的缓冲区,用于实现高速、可靠的数据传输和流量控制功能。物理层规范包括了器件的接口细节,如包的传输机制、包传输错误时的处理方式、流量控制和CRC校验等。此外,还有独立的时钟模块、复位模块和FPGA中的GTX(RapidIO_gt_wrapper)[6]。

图4 xilinx FPGA中RapidIO IP核的结构

2.2 接口处理电路

接口处理电路收到来自RapidIO内核发送的数据包后,需要完成转发表查找、本地头生成和分割形成内部信元等操作。

RapidIO的流写事务帧格式如图5所示。包头所包含的信息为发送序号(tid)、事务类型(ftype)、优先级(prio)、帧的长度(size)、源地址和目的地址(addr),这些信息是交换矩阵的前级电路生成的。RapidIO接口处理电路通过查询RapidIO包头信息中的目的地址,确定数据要发往的端口号(port)、端口映射(portmap)、数据是否为多播(multicast)业务。目前,实现的三级Clos交换结构通常针对64 B的定长信元进行交换(如图6所示),而RapidIO发送来的数据包长度介于8~256 B,所以RapidIO接口处理电路需要将长度大于64 B的数据包切割成64 B的定长信元。对于长度小于64 B的数据包,需要将其长度补足至64 B。接口处理电路在完成上面的操作后,将转换后的数据发送到三级Clos交换结构的输入级中。

图5 RapidIO的流写事务帧格式

图6 交换机中定长信元的帧格式

2.3 接口处理电路的电路结构

图7 为接口处理电路在接收方向的工作流程图。接口处理电路的发送模块会不断对RapidIO IP核进行检测,在检测到RapidIO IP核发送的数据有效时,接口处理电路会将接收到的数据包存储至存储器A(如图3所示),并启用计数器对数据包的包长进行计数。同时,接口电路的接收模块将从RapidIO IP核接收到的数据包中的包头信息(如图5所示)提取得到其优先级和目的地址。然后,接口处理电路的发送模块根据其目的地址查找本地的转发表,得到其在内部交换结构的输出端口号和端口映射,并将得到的信息封装到本地头(如图6所示)。之后,接口处理电路的发送模块将封装好的本地头存储至存储器C中。接口电路的接收模块会不断判断接收到的数据,当接收到的数据为数据包的最后一个数据时,完成对数据包包长的计数,并将数据包的包长信息存储至存储器B中。当存储器B非空时,接口处理电路分别读取存储器A和存储器C,得到添加了本地头后的数据包(如图8所示),然后接口处理电路对添加了本地头后的数据包的包长进行判断。当数据包的包长大于64 B时,电路会将数据包分割成定长的64 B,当数据包的包长小于64 B时,电路会将数据包补足至64 B。最后,电路将处理后的数据包发送到三级Clos交换结构中。

图7 接口处理电路在接收方向的流程

图8 添加本地头后的数据包

接口处理电路的发送模块在接收到由三级Clos交换结构发送过来的信元后,对其是否为数据帧的首信元进行判断。只有当其为数据帧的首信元时,才会对该信元进行存储。信元存储完成后,电路不断检测RapidIO IP核的状态,以确定其是否可以接收数据。只有RapidIO IP核可以接收数据时,电路才会读出存储器中的信元,将去掉本地头的该信元发送至RapidIO IP核中。当检测到所发送的信元为数据帧的最后一个信元时,发送模块生成一个指示信号至RapidIO IP核,用于表示完成了一个数据帧的传输。

3 三级Clos交换结构

本设计的交换结构采用中间级无缓存的存储-空分-存储(Memory-Space-Memory,MSM)三级Clos交换结构,如图9所示。它包含4个输入级模块(Input Module,IM)、1个中间级模块(Central Module,CM)和4个输出级模块(Output Module,OM)。

图9 星载RapidIO交换机的整体结构

输入级模块包含4个RapidIO端口、4个队列控制器(Queue Controller,QC)和输入级调度器。来自于RapidIO接口处理电路的内部信元,对目的端口可能有16个不同的选择。为了减少队头阻塞以提高交换结构的吞吐量,本设计在输入端采用虚拟输出队列(Virtual output queuing,VOQ)对输入数据进行排队。每个VOQ中包含8个不同优先级的队列,可为用户提供8个不同优先级的服务。每个IM中使用4个队列控制器(QC0、QC1、QC2、QC3),分别维护与4个不同OM对应的VOQ,即QC0维护与OM0中4个输出端口对应的4个VOQ,QC1维护与OM1中4个输出端口对应的4个VOQ,以此类推。在每个QC中,使用一个存储器存放这32个队列,并采用链表的形式实现对这些逻辑队列的控制。输入级调度器主要用于16个输入级队列与4条输出链路之间的迭代匹配。

CM中含有16条输入链路和输出链路、1个中间级调度器和1个无缓存的16×16交叉开关矩阵(Crossbar)。其中,中间级调度器的工作是协助在各个IM中共4个输入级调度器完成链路的有效分配并避免发生冲突。16×16的无缓存Crossbar用于提供从输入级模块到输出级模块的无阻塞连接,可以直接将到达的数据转发出去。在中间级采用无缓存的Crossbar方案,可以避免信元乱序,简化控制逻辑的设计。

输出级模块与输入级模块结构相同。

4 仿真结果与分析

基于RapidIO的星载交换机的实现选用Xilinx的xc6vlx240T FPGA,开发环境为ISE14.7,电路模块采用Verilog HDL编程,并用Modelsim 10.2c进行仿真分析。

4.1 接口处理电路接收模块仿真

图10为接口处理电路接收模块从RapidIO IP核中接收数据的过程。接口处理电路的接收模块在从RapidIO IP核内接收到数据包后,加入交换结构中进行交换所需的信息。图10中的val_treq_tdata为流写事务的包格式,前64 bit为包头信息。接收模块根据流写事务的包头信息来确定数据的输出端口号(i_cell_port)是否为多播(i_cell_multicast)、优先级(i_cell_prio)等信息,并将这些信息封装成一个适用于交换结构的本地头,然后将新的包头作为输入(data_fifo_din)存储到存储器C中。

图10 接口处理电路接收模块的仿真结果

4.2 接口处理电路发送模块仿真

图11 显示了接口处理电路发送模块在接收到数据后进行存储并发送到RapidIO IP核的过程。输出级输出的数据位宽为64 bit,电路会判断到来的数据是否为数据帧的首个数据。当它为首个数据时,将到来的数据进行存储,并将此时cell_fifo_din_的值赋给cell_fifo_din,同时将cell_fifo_wr置为高电平完成数据的存储。发送模块将输出级发送来的数据存储到存储器后,需要再把数据发送到RapidIO IP核内。当信号cell_fifo_rd为1时,表示电路的发送模块开始从存储器中读取数据。发送模块在读取出数据后发送给RapidIO IP核,完成与RapidIO IP核之间的通信。

图11 接口处理电路发送模块的仿真结果

4.3 三级Clos交换结构输入级和输出级的仿真图

如图12所示,接口处理电路将数据发送至三级Clos交换结构的输入级。同时,发送到三级Clos交换结构中的还有信元的包头信息,其中的i_cell_dlp表示数据的优先级,i_cell_portmap表示端口映射,i_cell_first表示信元是否为数据帧的首个信元,i_cell_port表示信元的输出端口。从图12可以看出,到来的信元为数据帧的首个信元,优先级为0,端口映射为1,输出端口为0。

图12中的数据在经过存储转发、排队调度后,发往其对应的输出端口。图13为输出端口0的仿真图,其中的data为三级Clos交换结构发往接口处理电路的数据。可以看到,图12中输入级中的数据i_cell_fifo_din与图13中输出端口0的数据data为同一数据,表明交换结构完成了数据交换,将其从对应的目的端口输出到了接口处理电路中。

图12 三级clos交换结构输入级的仿真结果

图13 三级clos输出级端口0的仿真结果

5 结 语

本文对基于RapidIO的星载交换机关键硬件平台技术进行了研究,给出了基于RapidIO的星载交换机的硬件平台结构,分析了RapidIO的典型总线事务与交换机设计需求之间的映射关系。在此基础上,重点设计和分析了RapidIO交换机中的接口处理电路及其收发操作流程,给出了作为交换核心的3级Clos交换结构的具体组成。交换机具有16个端口,单端口最大速率为5 Gb/s,交换容量为80 Gb/s。交换机采用Verilog硬件描述语言设计完成,采用modelsim10.2c进行仿真分析,给出了关键电路的典型仿真结果。交换机在Xilinx xc6vlx240t上进行了具体的综合实现,验证了设计的可行性。

猜你喜欢

存储器交换机数据包
面向未来网络的白盒交换机体系综述
二维隐蔽时间信道构建的研究*
静态随机存储器在轨自检算法
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
局域网交换机管理IP的规划与配置方案的探讨
更换汇聚交换机遇到的问题
基于地铁交换机电源设计思考
C#串口高效可靠的接收方案设计
存储器——安格尔(墨西哥)▲
测试小型存储器阵列的新方法