近年来,随着SpaceWire总线技术在航天航空领域的不断应用,SpaceWire路由器在理论和技术应用方面也得到了飞速发展。国外,欧洲航天局(ESA)已经将速度为200 Mb/s抗辐射的SpaceWire路由器应用到ESA的航天任务中。国内,目前对SpaceWire路由器的研究还处于初级阶段,设计的SpaceWire路由器速度也只能达到100 Mb/s。为了提高路由器的传输速度,这里提出了一种基于流水线技术的SpaceWire路由器。
1 SpaceWire路由器概述
SpaceWire路由器由一定数量链接接口单元和路由单元构成。接口单元主要负责连接各SpaceWire接点,路由单元负责数据的路由交换。
1.1 SpaceWire数据链路层接口单元
SpaceWire数据链路接口主要由连接器、LVDS驱动器、编码器、译码器、状态机、收发FIFO以及主机接口组成,其结构如图1所示。
发送器接收来自发送FIFO的数据,使用DS编码技术编码这些数据并且进行发送。接收器负责解码DS(Din和Sin)信号产生N—Chars字符序列(data,EOP,EEP),这些字符序列通过接收FIFO传送给主机系统。
FIFO的使用简化了数据链路与主机系统之间的接口。在系统复位以后,发送和接收FIFO都是空的。在链路连接建立以后,如果接收到FCT表明链路另一端允许向它发送数据,那么被写入发送FIFO的数据将被发送。当接收FIFO内仍然有可用空间时,接收FIFO能够接收数据。主机系统从接收FIFO中读取数据。在FIFO全空或全满以前,FIFO的半空或半满标志会触发处理器干预对FIFO的读写操作。这种机制能够控制通过链路的数据流,使数据链路接口保持高速数据吞吐。
状态机用来负责控制接口单元的整体操作,它会提供链路初始化,普通操作和错误服务。
1.2 SpaceWire路由器单元
为了简化基于SpaceWire的通讯系统的复杂度,很重要的就是对SpaceWire路由单元的设计。如图2所示,在图中所设计的SpaceWire路由器中包括8个SpaceWire端口,即2个外部端口、1个内部配置端口、路由表、控制寄存器、状态/错误寄存器、控制逻辑、无阻塞交互开关等。
低延迟、虫洞路由和无阻塞交换开关使数据包能够到达任意一个SpaceWire端口和外部端口,或者也可以由配置端口直接访问任意一个SpaceWire端口和外部端口。所设计SpaceWire端口完全支持SpaceWire标准,提供高速的、双向的通讯。每个外部端口包括一个发送FIFO和一个接收FIFO,可以发送接收字符和包结束标志。
Time—code端口会和计数器一起被提供用来方便Time—code的传播。当一个有效的Time—code到达一个路由端口时,它也会被发送到其他Spacewire端口,一个TICK_OUT信号会在Time—code端口被产生。路由器可以用Time—code端口提供的TICK_IN信号做为Time—code的操作管理。
配置端口可以配置任何SpaceWire端口和外部端口。它包括可以控制SpaceWire端口、外部端口和交换开关的寄存器。配置端口为各种端口和交换开关都设置了状态寄存器。用配置端口的读命令可以读这些寄存器,从而来读出路由器的状态和错误信息,而且一些状态引脚上的状态和错误信息可以被选择输出。
路由表可以通过配置端口来访问。逻辑地址端口映射和优先位都可以在路由表中进行设置,路由表常常用来控制组适应路由和交互开关中的优先仲裁。
1.3 虫洞路由
SpaceWire路由器是基于虫洞路由上进行设计的。虫洞路由是包路由的一种形式。每一个包的包头包含着目的地的地址信息。每当有一个包到达路由器时,它就立即检测这个包的目的地址,然后按照该地址转发这个包到相应的输出端口。如果要求的输出端口是“空闲”(free)状态,则这个包会被立即转发到这个输出端口。这时,该端口就会被打上“忙”(blasy)状态标记,直到这个包的一个字符即“包尾”(EOP)通过路由器转发出去。
虫洞路由如图3所示,图中一个包从一个节点发出,通过路由器到达另外一个节点。包头标记为黑色,其余部分为灰色。路由器负责在输入端口和空闲的输出端口之间建立连接,当检测到EOP或EEP时,断开连接,释放输出端口为空闲状态,准备接收其他端口来的包。输出端口忙时,输入端口阻塞输入包,直到其空闲。通过输入端口相远节点发送FCT来实现,直到输出端口空闲时,路由器才取消阻塞。以上是虫洞路由和流量控制之间的关系。
2 基于流水线的SpaceWire路由器
SpaceWire路由器将数据从输入端传递到输出端的过程一般需要进过三个阶段:首先,从输入端读数据,将数据包中包头所包含的目标地址发送给路由查找表;再次,由路由查找表对目标地址进行查找,确定该数据包所要发送的输出端;,将数据包发送到目标地址所指的输出端。具体结构如图4所示。
如果路由器中有两个以上输入端向同一个输出端发送数据时,就会对路由器内部的读写操作产生争夺。这时,路由器应提供仲裁机制进行发送优先级的确定。仲裁后,得到发送权的输入端向输出端口发送一个包。也就是说,在同一时间内,路由器中只能有一个输入端进行数据的发送。当这个输入端发送完毕后,其他输入端再进行数据的发送。这样极大地降低了路由器的工作效率。
为了改善路由器的传输速度,研究设计了一种基于流水线技术的Spacewire路由器。关键技术是设计一个基于流水线技术的无阻塞的并行交换开关(如图5)。
对于SpaceWire路由器内部数据流包头的检测和数据重排电路的设计复杂、规模较大。为了简化电路设计的复杂度、降低电路功耗、提高系统工作可靠性,针对输入数据流的包头检测及数据重排电路,采用事务处理流水线技术实现电路方案设计。图6为采用事务处理流水线技术实现包头检测及数据重排电路方案框图。采用此设计方案进行电路设计的实验结果表明,采用流水线设计技术实现的电路其规模比原来电路减少了50%。
图6所示的为并行交换体系结构,设计用FPGA实现K个M×M的无缓存的交叉开关作为交换模块。这个体系结构是由M个输入共享存储器模块、K个交叉开关和M个输出共享存储模块组成。每个输入/输出共享存储器模块有V个外部线路接口,同时与所有交叉开关相连接。
输入共享存储器模块包含(M*V)个VOQ(虚拟输出队列),保存输出到不同目的端口的信元。输出共享存储器模块包含V个输出队列,保存等待输出的信元。在每个仲裁周期,输入端口从(M*V)个VOQ队列中随机选择M个队列,向交换开关提交调度请求。交换开关以轮询方式为各队列提供服务,根据调度结果将授权信息反馈给输入端口。授权信息指定的VOQ队列头信元通过交换开关直接到达输出队列,完成报文重组等处理后,发送到外部链路。为了避免输出端发生缓冲区溢出,可采用反压机制及时阻止输入端发送过量信元。
在多个输入端向一个输出端发送数据时,在交换开关中利用流水线技术让多个输入端分时向输出端发送数据。也可以在每个输入端都复制一个路由查找表,这样在就不需要仲裁机制了。当数据流进入输入端后,根据包头地址查找路由表,确定要发送的输出端,然后进行发送,当多个输入端进行传送时,就会给每个输入端分配一个时间令牌,当自己的时间令牌有效时,就进行传输,当时间令牌失效时,停止传输,直到将所有数据传输完毕。而时间令牌的分配,由路由算法来控制。基本思想是利用流水线将时间令牌轮流分给每个输入节点,还可根据具体的一些情况对路由算法进行优化。此项工作目前正在进行中。基于这种流水线技术设计的SpaceWire路由器,速度将会达到200 Mb/s。从而使SpaceWire网络的数据传输更加快速,也会实现各输入端到输出端的同时访问。
3 结 语
介绍了SpaceWire路由器的基本原理,重点阐述了一种基于流水线技术的SpaceWire路由器的研究,关键技术是用FPGA设计一种基于流水线技术的交换开关。SpaceWire路由器符合未来航天航空领域的发展需求,所以spaceWire路由器速度是非常关键的指标。本文就是介绍了一种改善Spacewire路由器的速度的方法,具有很高的研究价值。目前此项研究正在实现过程中。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。