SpaceFibre总线路由器的设计

2021-04-22 10:06:46赵允齐安军社郑静雅臧文博
计算机工程与设计 2021年4期
关键词:缓冲区路由器仲裁

赵允齐,安军社,郑静雅,祝 平,臧文博

(1.中国科学院国家空间科学中心 复杂航天系统电子信息技术重点实验室,北京 101400;2.中国科学院大学 国家空间科学中心,北京 101400)

0 引 言

在2007年,欧空局提出了SpaceFibre总线协议第一版草案,直到在2018年发布SpaceFibre协议正式版,该协议面向吉比特每秒,具有良好的纠错容错、数据重传等功能。该协议的目的是为了满足日益增长的航天器载荷上的数据传输需求,弥补现有航天总线的不足[1],诸如通信速度、纠错容错能力、传输距离、异常处理、时间确定性等方面。该协议是在2003年SpaceWire总线协议的基础上进行改进的[2],具有SpaceWire协议的所有优点。为了解决SpaceWire虫洞路由带来的数据阻塞问题,SpaceFibre协议采用虚拟通道路由,这种路由机制使得数据传输速率大大提升,根据目前邓迪团队的成品IP核的测试结果,数据传输速度可达2.5 Gbit/s[3],在Microsemi RTG4 FPGA上可达3.125 Gbit/s[4,5]。

本文重点介绍和分析SpaceFibre协议中网络层对于路由器的定义,并提出了一种SpaceFibre路由器实现方法。该方法能够实现5端口虚拟通道路由的基本功能,采用轮询仲裁的算法,并使用虚拟通道控制器控制传输队列。用Verilog代码实现该设计后,通过了仿真验证,仿真波形正常,功能符合设计需求。

1 SpaceFibre总线协议

因为SpaceFibre协议是在SpaceWire协议的基础上提出的,因此也具有低成本、高速度、高容错等优点。SpaceFibre是一种全双工协议,目标是能传输高、低两种通道的所有类型数据,具有时间片、CRC检验等功能,支持故障检测、隔离和恢复(FDIR)。SpaceFibre支持QoS的信息发送,侦测任何帧或控制码丢失或错误,同时提供重发机制和ACK/NACK交互,支持优先级别服务,带宽保留、预约和调度,支持时间窗功能,通过加入伪随机码有效降低电磁辐射和提高抗干扰能力。同时,SpaceFibre定义的多通道层支持多链路,通信距离和数据传输速率都得到了提升。在网络层中,更是引入虚拟通道和虚拟网络的概念,减少数据堵塞。SpaceFibre使用电缆时距离可达5 m,使用光纤时可达100 m[7]。

SpaceFibre定义了5层结构,由下至上为物理层、数据链路层、网络层3个主要层次,通道层和多通道层为两个次要层级,从属于数据链路层。与OSI定义的7层结构相比,如图1所示,可见SpaceFibre只对应了OSI的3层,无法实现传输层等4个层的功能。

图1 OSI模型和SpaceFibre层之间的对应关系

2 SpaceFibre路由机制

2.1 路由机制

SpaceFibre的路由器定义在网络层,用于将多个节点互连在一起,以便节点能够彼此通信,以此传输数据包和广播消息。SpaceFibre的协议规定了router的构成要素,如图2所示。

图2 SpaceFibre中路由的UML图[6]

根据SpaceFibre协议的定义,该设计方案中的SpaceFibre路由包括:端口、开关矩阵(switch matrix)、配置节点、广播机制。端口数量为5个,其中有一个配置端口;开关矩阵用于将输入端口中的虚拟通道连接到输出端口中的虚拟通道;配置节点是端口0,用于配置路由,包括每一个SpaceFibre端口的参数,只有一条虚拟通道[6]。低延迟的广播消息可承载8字节的用户信息,适用于事件分布、错误信号和时间分布[5]。

SpaceWire采用虫洞路由结构,在虫孔交换机制中,每个报文被划分成许多固定大小的微片。报文的路由信息存储在头微片中,其余微片跟随头微片的路径传输。当头微片被阻塞时,该报文的所有微片就地存储,直至阻塞结束[8]。虫孔交换有着通信延时短、缓存小和易实现等优点。但同时虫洞路由也存在问题,要求接收端有一个数据包大小的内存,且当数据包占用通道时其它数据包便无法传输,从而产生数据阻塞。

在虫洞路由的基础上,SpaceFibre采用了虚拟通道,可以有效地解决数据包阻塞的问题,而且还引入了虚拟网络的概念。在每个端口内,一条物理通道上可以拥有多条虚拟通道,最多可以达到32个,且每条虚拟通道都具有一个虚拟通道号。SpaceFibre引入了虚拟网络的概念,再为每条虚拟通道赋予一个虚拟网络号码,使得每一条虚拟通道都映射到一个虚拟网络中,只有同一个虚拟网络中的虚拟通道才能实现通信,以此增加数据吞吐量。这样,每一条虚拟通道都映射到一个虚拟网络当中,SpaceFibre的路由网络就像是多个并行运行的SpaceWire路由网络。

定义在网络层的SpaceFibre路由器需要数据链路层和通道层的功能支持,包括QoS和FDIR等。服务质量(QoS)机制结合了优先级、带宽预留和调度,这些功能提供了“冒泡(babbling idoit)”保护,并确保数据传输的确定性,集成故障检测、隔离和恢复(FDIR)机制提供从虚拟通道和帧的瞬时错误中的恢复[5]。

本课题旨在用FPGA实现SpaceFibre网络层中路由器的功能,实现5个端口、每个端口的链路包含4条虚拟信道的路由器。应用这种4端口的路由,可以与其它设备构成如图3所示的结构。

图3 路由网络结构[5]

2.2 虚拟通道

虚拟通道主要是用于片上网络的一个概念,在片上网络中链路主要有两种方式:非虚拟通道模式和虚拟通道模式。非虚拟通道模式下,一条物理链路对应一条通路,两侧对应两对数据缓冲区。在虚拟通道模式下,一条物理链路对应多条通路,两侧对应多组数据缓冲区。

对于虚拟通道模式,当物理链路上的一条虚拟通道被阻塞时,另一条虚拟通道就可以获得数据包传输的权限,使得一条物理通道可以被复用为多条逻辑通道。由此可见,虚拟通道在一条物理链路上实现了多条通道,能够极大地提高物理通道的利用率,提高数据吞吐量,减少数据阻塞,并避免网络死锁的出现。

路由器的端口包括一个输入端口、一个输出端口和多条虚拟通道,因此在每条虚拟通道的两端都定义了一组缓冲区,分别是输入数据缓冲区(in_buffer)和输出数据缓冲区(out_buffer),缓冲区可以容纳至少256 bits的数据包,该设计中一个端口对应4个缓冲区。

2.3 虚拟网络

为了解决虚拟通道模式中容易出现的数据混乱问题,让虚拟通道的利用率更高,SpaceFibre的协议中引入了虚拟网络的概念,就是将所有的虚拟通道分成几个部分,成为独立通信的网络。通过为每一条虚拟通道赋予虚拟网络号码,并规定只有相同虚拟网络号码的虚拟通道才能进行数据传输,以此将多个虚拟网络分隔开,形成多个独立的数据传输网络。根据协议的规定,虚拟网络包含如图4所示的要素。

图4 虚拟网络的UML[6]

SpaceFibre路由的链路上可以拥有多条虚拟信道,而一个链路上的多条虚拟信道都分别属于不同的虚拟网络,只有相同虚拟网络中的虚拟信道可以传输数据包,不同虚拟网络号的虚拟信道之间无法进行数据传输。虚拟信道的虚拟网络号是可以动态配置的,根据一定的路由算法,每隔一段时间后会重新配置,虚拟网络号码与虚拟通道号码的对应关系存储在一个LUT中。

考虑到动态配置的方法需要路由算法的支持,不然容易出现数据混乱的结果,并且需要数据链路层中QoS服务的支持。为了降低硬件开销并降低路由复杂度,本文主要实现了虚拟通道到虚拟网络的静态映射,根据传输数据包的类型划分虚拟网络,实现了不同类型数据包在相互独立的虚拟网络中进行传输。将数据包分为4种类型:配置信息、数据信息、图像信息和广播消息,在4个独立的虚拟网络中进行数据传输。

3 路由设计

3.1 总体设计

在网络层中,数据以数据包的形式存在,SpaceFibre的数据包没有固定的大小,但是有固定的格式,如图5所示。

图5 SpaceFibre数据包格式[6]

Destination Address是数据包的包头,用于存放数据包的目的地址,在路径寻址中为0-31,在逻辑寻址中为32-255。Cargo就是数据包的主体,是需要进行数据传输的信息。EOP和EEP是包结束符号,EOP是数据包结束标志,EEP是数据包错误标志,当识别到这两个符号后,表明一个数据包结束,下一个数据包开始。

在本文的设计中,根据传输数据包的类型进行虚拟网络号码的分配,在一个数据包到达端口时,为了将其发送到最合适的数据缓冲区中,需要数据包的类型信息。因此,本文对数据包格式增加了一个新的需求,新的数据包格式如图6所示。

图6 本文的SpaceFibre数据包格式

对于调整后的数据包来说,在数据包发送到端口的时候就会根据数据包的类型选择合适的虚拟通道,发送到对应的输入数据缓冲区中,然后通过数据包中的目标地址信息,经由虚拟通道发送到目的端口。由此设计出的总体功能框架如图7所示。

图7 路由器总体功能框架

本文设计的路由器采用4+1端口模式,4个端口为普通端口,1个端口为配置端口。配置端口是端口0,根据SpaceFibre协议的定义只能有一条虚拟通道。4个普通端口端口都是用于数据传输的双向端口,每个端口有4条虚拟通道,分别是VC0、VC1、VC2、VC3。VC0属于虚拟网络0(VN0),发送和接收配置信息;VC1属于虚拟网络1(VN1),发送和接收数据信息;VC2属于虚拟网络2(VN2),发送和接收图像数据信息;VC3属于虚拟网络3(VN3),发送和接收广播消息。

3.2 开关矩阵的设计

SpaceFibre路由器的虚拟通道主要有两种实现方式:第一种方式,允许一个端口的不同虚拟通道同时传输数据。第二种方式,一个端口的多条虚拟通道中只有一条可以传输数据。第一种路由器的网络层结构中,数据流只能在路由器输出端口的一个虚拟信道内相互竞争,在这种情况下,需要有合适的虚拟网络分配原则。然而,这种路由器结构导致了硬件成本较高。第二种路由器的网络层结构的硬件成本基本上比前一种结构的硬件成本低,但通过这种方式,来自不同虚拟通道的数据流共享开关矩阵。

通过分析和比较,为减少数据流之间的干扰,本文选择第一种方式并进行了一些改进。参考文献[5]和文献[10]提出的网络主节点概念并进行修改,为每一条虚拟通道FIFO配备一个虚拟通道控制器,用虚拟通道控制器产生读写信号控制虚拟通道FIFO。目前采用仲裁算法控制虚拟通道控制器,未来的研究中可以用上位机分配算法直接控制虚拟通道控制器,以此为路由网络增添其它的路由算法。

3.3 轮询仲裁算法

对于图7的总体设计,数据传输过程中依然存在出现数据阻塞的可能,譬如,当端口一的VC1和端口二的VC1同时向端口三发送数据包,端口三的缓冲区无法同时接收两个数据包。这时采用轮询仲裁的方法,让开关矩阵只连接一条通道。即同一时刻,端口的一个端点只能向唯一一个端点发送数据,而端口的一个端点也只能唯一接收来自一个端点的数据。

为实现轮询仲裁,开关矩阵由交叉开关矩阵(CrossBar)结构实现[11]。这是一种全连接的开关结构,任意输入端口都能在开关信号的控制下导通到任意输出端口中,从而实现对数据的无阻塞交换,对于每个交叉开关的导通与断开则是通过路由调度算法控制的[9]。由于采用了虚拟网络的概念,该路由器有4个独立运行的网络,也就是有4个如图8所示的交叉开关矩阵结构。

图8 轮询仲裁算法

图8中每个小矩形代表1个交叉开关,这些开关元件为仲裁Cell,上面的数字为“输入端口,输出端口”。每个Cell都通过信号与四周的Cell互连,这种连接方式也体现了不同Cell的优先级次序,即从上至下,从左至右优先级依次降低。Cell的内部结构如图8右侧所示,该Cell仲裁成功时,将该信号返回输入端口,可以建立输入端口到输出端口的传输通路。并将其S和E信号都将变为0,从而使其下方和右侧的仲裁Cell无法被使用。

根据本文的设计,每个端点的虚拟网络已经被配置好,就简化了仲裁结构。若是实现虚拟通道到虚拟网络的动态配置,则需要5×4×4个仲裁Cell,而目前的设计方案只需要5×4个仲裁Cell,降低了数据传输的复杂性,节省了硬件开销。

图8中大小为5×4的矩形实线框表示仲裁使能窗口,根据仲裁Cell的原理,当i行j列的Cell仲裁成功后,仲裁使能窗口的首行将向下滑动至i+1行,在下次仲裁时,第i+1行的请求信号优先级变为最高。由此可见,在使能窗口的控制下,任何输入端口都有机会获得最高优先级,从而实现仲裁轮询。

3.4 模块化设计

根据总体设计,一个数据包会先进行数据包类型的判断,之后发送到对应虚拟通道中,并根据目的地址将数据包选择一条合适的FIFO进行数据传输。在确定接收端有足够的空间后,开关矩阵便使能该条FIFO,这样就可以数据传输。根据数据包传送的过程,一条FIFO对应的结构如图9所示。

图9 一条FIFO对应的模块化结构

当一个数据包准备在端口之间进行数据传输时,首先将数据包类型信息发送给数据包类型识别模块,判断结果发送给虚拟通道FIFO,选择合适的虚拟通道。之后将目的地址信息发送给目的地址仲裁模块,仲裁结果也发送给虚拟通道FIFO,选择虚拟通道上合适的FIFO队列进行传输。当确定了数据唯一的通道后,通过虚拟通道控制器进行空满判断,当对应端口的out_buffer中有足够的空间时,通过虚拟通道控制器控制该FIFO的读写功能,通过开关矩阵使能,才能进行数据包的传输。根据操作流程,该路由器的总体工作流程如图10所示。

图10 路由器总体工作流程

一条虚拟通道是由多条FIFO队列组成的,分别通向不同的目的端口,两侧也对应着不同的数据缓冲区。为了管理路由器内数目众多的FIFO,每一条FIFO都配有一个虚拟通道控制器,用于给虚拟通道FIFO产生读写信号。该虚拟通道控制器接收来自FIFO两侧数据缓冲区的空满信号,也接收开关矩阵的使能信号,同时可以接收上位机的配置信息。

对一条虚拟通道的FIFO来说,其具有一个虚拟通道号码和一个目的端口号码,通过目的端口仲裁模块和数据包类型识别模块发送来的两个标识,可以唯一确定一条用于数据传输的FIFO。虚拟通道控制器通过判断缓冲区的空满状态,产生读写使能信号,使FIFO读写数据。开关矩阵是用于使能传输数据的虚拟通道,作为一个开关的作用,当虚拟通道可以发送数据时使能虚拟通道控制器,以此控制读写信号的产生。

4 实验分析

实验一:数据结果

根据总体设计和模块化设计,用Verilog HDL硬件描述语言实现了SpaceFibre的路由器,资源占用率见表1,最小时钟周期为4.693 ns,即最大时钟频率为213.083 MHz,时延为5.963 ns。36位数据包在100 MHz的同步时钟下,利用率为25%,若是采取异步时钟并进行时钟分配,可以提高利用率。

表1 资源占用率

实验二:数据传输的仿真

用Modelsim工具对该设计进行仿真,当输入端口接收到数据包时,将该数据包进行识别,通过对应的虚拟网络发送到对应的输出端口,仿真图如图11所示。

图11 数据包传输仿真

当虚拟通道的第一个输入口VC_in输入一个数据包时,对数据包的包头进行判别,对应输出端口为第6个输出口VC_out。若输出端口的full标志为0,则表示该虚拟通道输出缓冲区未满,可以接收数据包。通过开关矩阵中仲裁Cell的使能,让虚拟通道FIFO的读使能fifo_rd和输出缓冲区的写使能VC_wr置为1,表示允许FIFO读操作和输出缓冲区写操作,该数据包就能进行传输。通过仿真波形可见,VC_out6输出了数据包。

实验三:进行轮询仲裁的仿真

当一个虚拟网络的两个输入端口同时接收到数据包时,若其对应的输出端口为同一个,则需要用轮询仲裁算法进行仲裁。仿真图如图12所示。

图12 进行轮询仲裁后数据包传输仿真

当输入虚拟通道缓冲区1和输入虚拟通道缓冲区4同时对输出虚拟通道缓冲区6进行输出传输时,通过轮询仲裁,让两个数据包通过VC_in1和VC_in4先后传入虚拟通道FIFO,再先后传入VC_out6。当一个数据包允许传输时,开关矩阵中的仲裁Cell会使能对应FIFO的读使能fifo_rd和输出缓冲区的写使能VC_wr,使数据包顺利传输。

5 结束语

SpaceFibre路由器的研究依然处于初步阶段,国外只有STAR-Dundee实现了8端口路由器IP核,但没有应用在航天器上的相关报道,而国内还没有SpaceFibre路由器方面的研究。本文实现了SpaceFibre路由器的功能,仿真后功能和速率都满足设计需求。

本文参考文献[5]和文献[10]中提出的“网络主节点”概念,提出了一种虚拟通道控制器。网络主节点是一个虚拟网络中具有的设备,为了日后的工作实现虚拟网络的动态映射,需要考虑虚拟网络动态变化的问题,于是为静态的虚拟通道FIFO配置控制器是一种灵活的方案。该虚拟通道控制器用于控制虚拟通道的读写使能,读取缓冲区的空、满标志,并可以由相应的路由算法直接配置。

目前虚拟通道到虚拟网络的映射采用静态方法,通过数据包的类型进行划分,对于虚拟网络的动态分配问题,需要未来的工作找到一种合适的算法。

猜你喜欢
缓冲区路由器仲裁
嵌入式系统环形缓冲区快速读写方法的设计与实现
买千兆路由器看接口参数
科教新报(2022年24期)2022-07-08 02:54:21
一种多通道共享读写SDRAM的仲裁方法
电子制作(2018年19期)2018-11-14 02:36:44
ICSID仲裁中的有效解释原则:溯源、适用及其略比
你所不知道的WIFI路由器使用方法?
关键链技术缓冲区的确定方法研究
两岸四地间相互执行仲裁裁决:过去、现在及将来(上)
仲裁研究(2015年4期)2015-04-17 02:56:33
无线路由器辐射可忽略
地理信息系统绘图缓冲区技术设计与实现
AVS标准中的视频码流缓冲区校验模型分析
电视技术(2012年1期)2012-06-06 08:13:58