郑静雅,安军社
(1.中国科学院国家空间科学中心 中国科学院复杂航天系统电子信息技术重点实验室,北京 100190;2.中国科学院大学 计算机科学与技术学院,北京 100190)
随着空间技术的不断发展,卫星有效载荷数据的数量和速率[1,2]日益增加,欧洲航天局提出SpaceFibre[3]超高速数据通信技术。该技术将端口划分为若干虚拟通道(virtual channel,VC),每条VC被分配唯一的虚拟网络(virtual network,VN)号,协议[3]称这种映射关系为VC-VN映射。
虚拟网络增加了路由器设计的复杂度,目前关于SpaceFibre路由器设计的研究较少。文献[4]设计了路由器原理样机;文献[5]和文献[6]实现了具有基本功能的SpaceFibre路由器;文献[7]公开了一种扩展性较强的交叉开关方案。但上述设计存在组自适应路由功能或多播功能缺省的问题,不能满足部分数据网络的应用需求。文献[8]设计了一种功能完善的路由器并在多种FPGA型号上进行了验证,但该路由器的性能可进一步提升以确保超高速数据的高效交换。
为适应多种航天应用场景、提高数据网络中数据交换的效率,本文设计了一种SpaceFibre路由器结构,该结构采用多模式包头识别状态机以支持组自适应路由和数据包多播功能,利用并行映射降低了VC-VN映射延时,通过可重构混合机制仲裁器增加了仲裁方式的多样性、降低了硬件资源消耗。
SpaceFibre的虚拟通道为双向,用于缓存和传输数据。双向VC分别称为输入VC和输出VC,输入虚拟通道是指到达路由器方向的通路,反之为输出VC。SpaceFibre路由器使用的是基于静态路由表的虫孔交换方式[3],主要用于将数据包和广播消息从输入端口的输入VC传输到输出端口的VC。输入端口的输入虚拟通道,以下简称为输入端口虚拟通道。相应地,输出端口的输出虚拟通道,简称为输出端口虚拟通道。当数据包到达输入端口VC时,该数据包在网络中的虚拟网络号已由该VC确定。在SpaceFibre网络中,数据包只能在具有相同虚拟网络号的VC之间传输,每个VN类独立运行、互不干扰。此外,协议规定同一端口不同虚拟通道的虚拟网络号互不相同。
SpaceFibre协议规定数据包的长度可以为任意大小,其数据包由地址段、数据包内容和数据包结束标志或数据包错误结束字符组成,该数据包格式与SpaceWire相同。
采用路径寻址方式时,输出端口是由数据包的首地址决定的,经过VC-VN映射可直接进行仲裁连接,无需访问路由表。仲裁连接建立后,需要删除数据包的首地址再进行数据发送。
当数据包的地址段为逻辑地址时,需要经过访问路由表获取物理地址、VC-VN映射、仲裁连接和包头删除等操作。若逻辑寻址从路由表获取多个输出端口,则查询该逻辑地址对应多播还是组自适应路由功能。对于具有组自适应路由功能的路由器来说,数据包首先访问路由表获取物理地址,然后查询每个输出端口中处于同一VN的虚拟通道的占用状态,最后在空闲的虚拟通道中建立连接。进行多播操作时,路由器首先从路由表中获取物理地址,然后查询每个输出端口中相应虚拟通道的占用状态,仅当所有端口中相应VC为空闲态时才发送数据。
同一VN中有多个VC同时发出请求时,需要使用仲裁机制来实现请求的筛选。协议中对路由器的仲裁机制没有强制约束,目前产品[5-8]使用轮询仲裁或基于双优先级的轮询仲裁。
图1为SpaceFibre路由器整体架构,该路由器主要由内部配置模块、路由表控制模块、VC-VN并行映射模块、全相连交换矩阵模块、广播控制模块和SpaceFibre编解码器模块构成。m个SpaceFibre编解码器模块在SpaceFibre路由器中被称为端口并被记为Port0~Portm-1。 每个端口包含n条VC。该架构不局限于具体的端口数目和虚拟通道数目,可根据实际应用需求进行数目选择,具有一定的可扩展性。
图1 SpaceFibre路由器整体架构
内部配置模块主要用于路由表、VC-VN映射表和各端口虚拟通道寄存器的存取操作,上位机可通过该模块实时地配置路由参数、映射参数和反馈路由状态。路由表控制模块主要功能是配置、存储和反馈路由信息。VC-VN并行映射模块实现VC-VN映射表的配置、存储和读取操作。路由表和VC-VN映射表的配置都在是内部配置模块的控制下完成的,已配置的路由信息和映射信息分别存储在路由表中和VC-VN映射表中。
全相连交换矩阵模块是一种无阻塞的全相连结构。由于VC-VN映射是可配置的,所以全相连结构不仅包含端口之间,还包含各端口的虚拟通道之间。该模块主要包含若干多模式包头识别模块和可重构仲裁连接模块。包头识别模块对输入端口VC的数据包进行包头解析并发出仲裁请求信号。请求信号传送至仲裁连接模块后,仲裁连接模块按照仲裁机制选择合适的VC进行仲裁响应。包头识别模块接收到仲裁响应信号时,发出仲裁确认信号。仲裁连接模块接收到仲裁确认信号后,建立输出端口VC与输入端口VC之间的连接以进行数据包传输。
SpaceFibre技术在网络层与SpaceWire[9]向后兼容,所以在寻址过程中虚拟网络和虚拟通道的概念对数据包来说是透明的,即数据包地址信息的最小粒度为端口。因此,数据包到达输入端口VC后,需经过VC-VN映射才能在虚拟网络中传输。
在FPGA中寄存器资源比较宝贵,所以采用RAM进行VC-VN映射信息的存储,采用这种方式,无需占用触发器资源即可实现映射表的读写操作。若路由器包含m个端口,每个端口有n条虚拟通道,则所需RAM大小为 (mn)×1, RAM中每一行记录的是本端口各VC对应的VN号。
图2为VC-VN串行映射方式[4-8],该方式的设计原理为:路由器中所有端口的VC-VN映射信息均存储于大小为 (mn)×1的单一RAM块中。该方案,同一时刻至多允许某一端口的单条虚拟通道进行映射表的访问操作,当前映射操作完成后才可进行下一次操作。多个端口请求访问映射表时,各端口按照端口编号递增的顺序依次获取映射表的访问权。同一端口的多条虚拟通道同时请求访问映射表时,编号较小的先于编号较大的VC进行访问。在极端情况下, Portm-1的虚拟通道n-1需要等待mn个时钟周期才能获得VC-VN映射表的访问权。
图2 VC-VN串行映射
VC-VN映射的速度直接影响路由器对到达数据包的响应速度,进而影响有效载荷通信的性能。为降低VC-VN映射延时,本文提出了如图3所示的VC-VN并行映射方案。该方案的设计原理为:按端口编号将整个路由器的VC-VN映射信息进行划分,每个目的端口的VC-VN映射表分别存储在容量为n×1的m个RAM块中;该方案中,每个RAM对应的读信号为相应目的端口各虚拟通道的读请求信号相或;当目的端口映射表的读信号有效时,地址信号不断加1,否则地址信号保持不变。同一时刻不同输入端口可并行访问不同目的端口的映射表,不同目的端口映射表的读取操作互不影响,降低了路由器的响应延时。多个输入端口虚拟通道同时请求访问同一输出端口的映射表时,任一输入端口虚拟通道获得该输出端口映射表的访问权,其它输入端口虚拟通道均可使用该输出端口VC-VN映射表所读出的虚拟网络信息。该方案有效避免了频繁访问映射表的问题,提高了映射表的读取效率。在极端情况下,输入端口VC最大等待时间为n个时钟周期。
图3 VC-VN并行映射
因此,在占用相同RAM资源的基础上,VC-VN并行映射降低了多端口访问映射表的冲突概率,加快了虚拟通道与虚拟网络间的映射速度,降低了SpaceFibre路由器生成仲裁请求信号的延时,提高了路由器的响应速度。
SpaceFibre路由器端口的每条输入虚拟通道都配置了多模式包头识别模块。数据包到达输入端口虚拟通道后,该模块首先识别包头地址类型,然后生成该数据包的仲裁请求信号和优先级信号,输出到相应输出端口虚拟通的仲裁连接模块。在接收到仲裁连接模块的仲裁响应信号后,该模块对仲裁响应信号进行判读,发送仲裁确认信号并选择相应输出端口虚拟通道进行数据传输。传输数据时,该模块将输入端口虚拟通道缓冲区中的数据字依次传输至输出端口的虚拟通道缓冲区。
包头识别模块的主要功能由图4所示的多模式包头识别状态机实现,该态机包含空闲态、包头寻找态、逻辑寻址态、VC-VN映射态、请求生成态、仲裁等待态、仲裁成功态、数据发送态和异常态共9种状态。考虑到可靠性设计因素,该状态机待机情况下处于空闲态,该状态主要用于初始化的处理。当相应输入虚拟通道缓冲区为非空时,该状态机进入包头寻找态。
图4 多模式包头识别状态机
在包头寻找状态,若数据包的首地址为物理地址,则直接进入VC-VN映射态,进行VC-VN映射;若为逻辑寻址,则进入逻辑寻址态。在逻辑寻址态,状态机根据数据包的首地址在路由表中获取相应物理地址和优先级信息。本设计中的路由表存储格式如图5所示,0至m-1比特区间为物理地址信息段。若该比特区间某位为1,则表示相应端口为数据包的输出端口。第m位为多播标志位,若该位为1则表示当前地址支持多播功能,否则表示不支持。 [m+1,m+k] 区间段表示数据包优先级信息,该区间段的数值越大相应的优先级越高。其中,k(k≥1) 为优先级信号的比特数。m+1+k位为保留位,用于路由器功能的扩展。最高位为非法地址标志位,用于指示非法的地址信息。若路由器的端口数目为4且数据包的路由信息为1AH,则该信息表示此数据包需进行目的端口为端口1和3的多播操作。
图5 路由表存储格式
由于存在VC-VN映射态,该状态机仅对处于同一VN的输出端口虚拟通道生成仲裁请求,仲裁连接模块无需对属于非相同虚拟网络的仲裁请求进行屏蔽,避免了仲裁连接模块的二次判断,简化了仲裁连接模块的结构,减少了硬件资源的消耗。
该状态机在请求生成态可直接进入仲裁等待态。在非多播模式下,只要有输出端口生成仲裁响应信号,即可进入仲裁成功态。在多播功能中,仅当所请求的全部输出端口生成仲裁响应信号,包头识别状态机才可以从仲裁等待态进入仲裁成功态。状态机进入仲裁成功态后,进行优先级信号和仲裁请求信号的清除并转入数据发送态。当接受到数据包结束字时,状态机回到空闲态以确保正常运转。
为避免由于设备故障而导致的状态机长期处于仲裁等待状态的情况,多模式包头识别模块中包含虚拟通道超时机制。当仲裁等待状态持续时间到达规定时长,则状态机自动退出该状态进入异常态。状态机进入异常态后,进行删除数据包操作并向上位机记录、反馈错误信息。
相比其它路由器[5-7]中类似功能的模块,多模式包头识别状态机可使用较少的工作状态支持路径寻址、逻辑寻址、组自适应路由功能和数据包多播功能。该状态机仅对相同VN中的输出端口虚拟通道生成仲裁请求,简化了仲裁连接模块的逻辑。VC超时机制的加入,增加了该状态机的可靠性。
可重构仲裁连接模块的主体是一种可重构混合机制仲裁器,每条输出虚拟通道均包含该仲裁器。当检测到包头识别模块发送的仲裁请求信号后,该模块结合输入的优先级信息发起仲裁操作,仲裁结果作为仲裁响应信号返回包头识别模块。当接收到来自包头识别模块的仲裁确认信号后,该模块将相应的输入端口VC和输出端口VC进行连接,直至缓冲区中的数据全部输出。传输结束后,该模块进行输入端口虚拟通道的优先级轮转,为下次的仲裁操作做准备。
若同一虚拟网络中数据源较多且紧急程度各不相同,仅使用轮询仲裁或双优先级仲裁是不能满足应用需求的。因此,该仲裁器采用基于多优先级的轮询仲裁方案。轮询仲裁功能通过仲裁使能窗口实现[10],轮询仲裁机制中编号较小的端口优先获得数据发送权。当请求信号的输入优先级不同时,首先响应高优先级的仲裁请求,待高优先级的数据传输结束后,再响应优先级较低的端口请求。多优先级仲裁机制中共支持2k(k≥1) 个优先级,实现上述功能的仲裁单元如图6所示。requ_in为输入的仲裁请求信号,enable为仲裁窗口使能信号,pri_in为kbit输入端口虚拟通道的优先级信号,pri_h为kbit输出端口的优先级信号。若pri_h的某一位为1且pri_in的相应比特位为0,则该请求信号被屏蔽。当且仅当仲裁窗口使能信号和仲裁请求信号有效,pri_h的每bit位均与pri_in相应比特位相同,请求输出信号grant_out为有效状态。当高优先级数据包发送完成,pri_h的值需要根据当前最高优先级进行更新。若k=2, 则路由器中共存在4个优先级:0、1、2与3,此时pri_h为2比特11。假设优先级为2的端口进入多优先级仲裁单元且requ_in、enable均置位,由于pri_h的最低bit位与pri_in相应比特位相异,此端口请求信号被屏蔽。当具有最高优先级3的相应端口数据发送完毕后,路由器更新pri_h 为2比特10,优先级为2的端口获得仲裁响应信号。
图6 多优先级仲裁单元
由于交叉矩阵是全相连的,每个仲裁器中均需包含 (m-1)mn2个多优先级仲裁单元。若采用传统的仲裁器,则整个路由器共包含 (m-1)m2n3个仲裁单元。当端口数目较大或端口所包含的虚拟通道数目较多时,传统仲裁器[5-7,10]的硬件资源占用率会显著增加。为降低硬件资源的消耗,本设计根据SpaceFibre虚拟网络的特点,提出了一种可重构仲裁器。根据VC-VN映射表,该仲裁器可改变全相连交叉矩阵的内部结构和仲裁单元相互之间的连接关系,仅包含与本仲裁模块处于相同虚拟网络的m个仲裁单元。至多整个交叉开关矩阵仅需包含m2n个仲裁单元,该结构显著降低了仲裁单元的数目,有效简化了仲裁模块的组合逻辑。由于减少了仲裁单元的数目,仲裁器仅需判断至多m个仲裁单元即可产生仲裁响应信号,可有效降低最大仲裁延时。
图7为可重构仲裁器,图中箭头的左侧为仲裁单元构成的全相连交叉矩阵。假设端口1虚拟通道1对应的仲裁模块等待重构,当路由器的VC-VN映射表配置完成后,可重构仲裁器根据映射信息在全相连交叉矩阵中选择与Port1的VC1处于同一VN的仲裁单元。
图7 可重构仲裁器
因此,相比传统仲裁器[5-7,10],可重构混合机制仲裁器中全相连交叉矩阵的仲裁单元数目由 (m-1)m2n3减少至m2n, 有效降低了资源占用率,提高了整个路由器的工作频率。该模块采用基于多优先级的轮询仲裁方式,该仲裁方式实现简单、扩展性强且应用范围较广。
在Vivado 2017.4开发环境中,使用Verilog硬件描述语言对上述路由器进行RTL级描述并建立仿真平台以验证其功能的正确性。验证过程中路由器共支持4个优先级,端口数目和虚拟通道数目均为4。所有端口的VC0均属于VN0,VN1包含所有端口的VC1,任意端口的VC2均属于VN2,所有端口的VC3虚拟网络编号均为3。实验过程中的路由表信息见表1。
表1 虚拟网络参数
图8为VC-VN并行映射仿真结果,仿真过程中输入端口0的VC1和VC3、输入端口2虚拟通道1同时访问目的端口1的映射表,输入端口3的VC2访问目的端口2映射表。图8中组1、组2分别对应端口0的两虚拟通道,组3和组4依次对应端口2和端口3。映射延时是指从映射使能信号en_ram生成到映射成功信号flag_find置位的时间。
图8 VC-VN并行映射仿真结果
观察组1和组3波形图可知:不同输入端口0和端口2同时请求访问目的端口1的映射表时,若端口0的VC1获得输出端口1映射表的访问权,输入端口2可共享输出端口1的VC-VN映射表信息data_ram1,端口2仅需2个时钟周期即可完成VC-VN映射操作,无需等待输入端口0映射完毕后再获得映射表访问权。对比组1和组4可知,不同目的端口的输入端口0和端口3可并行进行VC-VN映射操作且互不影响。观察组2可知,当输入端口的虚拟通道映射信息存储在相应映射表的末尾位置时,VC-VN并行映射方案的映射延时最大,最大映射周期为4个时钟周期。因此,VC-VN并行映射方案可同时进行多个VC-VN映射操作,有效降低各端口的VC-VN映射时间。
图9为仲裁响应仿真结果,仿真过程中输入端口0的VC1、VC2和VC3数据包地址分别为25H、29H和02H,Port3的VC2数据包地址为21H。图9中组1~组4与上述输入端口的虚拟通道一一对应。仲裁延时是指路由器从仲裁请求信号requ_arb生成到仲裁响应信号grant_tx产生的时间间隔。观察图9中各组波形图可知:在组自适应寻址、多播、路径寻址和逻辑寻址中,可重构仲裁机制均可在3个时钟周期内完成仲裁响应。相比传统仲裁器[5-7,10],可重构仲裁器缩短了2~6个时钟周期,有效降低了仲裁延时。
图9 仲裁响应仿真结果
对该路由器的仿真包含以下测试项目:路径寻址、逻辑寻址的单路数据包交换;路径寻址、逻辑寻址多路地址不冲突的数据包交换;路径寻址、逻辑寻址多路地址冲突的交换测试;带优先级的路径寻址、逻辑寻址多路地址冲突的数据包交换测试;带端口占用的、无端口占用的组自适应路由测试;无端口占用的、带端口占用的多播功能测试;逻辑地址错误测试;VC-VN映射错误测试;仲裁等待超时测试;广播帧测试。由于篇幅限制,仅对带优先级的路径寻址多路地址冲突的数据包交换测试和带端口占用的多播功能测试的仿真结果进行分析。
带优先级的路径寻址多路地址冲突测试中,输入端口0的VC3、输入端口2的VC3和输入端口3的VC3均有数据包达到且数据包首地址均指向端口1。端口0的优先级为0,端口2和端口3的优先级分别为2和3。图10为该测试的功能仿真结果,仿真波形自上至下依次为端口0、2、3和输出端口1的相应虚拟通道缓冲区输出数据。从波形图中可以看出,Port1的虚拟通道3按照优先级递减的顺序依次接收来自输入端口3、2和1的数据包。可见,该路由器实现了多优先级仲裁功能且在接收过程中完成了数据包的首地址删除操作。
图10 带优先级的路径寻址多路地址冲突仿真结果
图11为带端口占用的多播测试的功能仿真结果。在该测试中,输入端口0的VC3中到达的数据包向输出端口1和输出端口3进行多播,输入端口2的VC3数据包先于端口0的数据包到达输出端口1。从仿真波形中可看出,输入端口2数据包的首地址为逻辑地址且到达时间早于端口0,输出端口1首先传输来自输入端口2的数据包。输入端口0的数据包在等待输出端口1解除占用后,进行输出端口1和输出端口3的多播操作。因此,该路由器实现了数据包的多播操作。
图11 带端口占用的多播功能仿真结果
在XILINX型号为XC7Z100FFG900-2的FPGA上进行了实现并进行布局布线后时序仿真。仿真结果表明,上述测试项的结果均正确,进一步验证了本设计功能的正确性。与相同平台的相同功能路由器设计方案[8]相比,本设计中的寄存器资源由1.7%下降至0.5%,查找表资源由5.9%降低至2.02%,最高时钟频率由205.3 MHz提升至240.96 MHz。
本文提出了一种功能完备的低延时可重构SpaceFibre路由器设计方案,该方案通过VC-VN映射,提高了映射效率;该方案利用多模式包头识别状态机满足了不同寻址方式的应用需求;该方案采用可重构混合机制仲裁器,简化了硬件逻辑,兼顾了数据传输的公平性与优先性。在型号为XC7Z100FFG900-2的FPGA上对该设计进行了实现,实验结果表明:该设计符合SpaceFibre协议标准;相比具有相同功能和实现平台的其它方案,该方案寄存器资源和查找表资源的占用率显著下降,最大工作频率有所提高,具有良好的高效性、可靠性和工程实用性。