一种支持FDIR功能的错误恢复系统的制作方法

文档序号:23425890发布日期:2020-12-25 11:55阅读:122来源:国知局
一种支持FDIR功能的错误恢复系统的制作方法

本发明涉及航天工程领域,具体涉及应用于航天总线网络中spacefibre节点的fdir功能,特别涉及一种支持fdir功能的错误恢复系统。



背景技术:

随着航天技术的不断发展,航天任务复杂性的提升,航天数据向大规模、多样性、和高速的方向发展。传统的互联总线如1553b总线、can总线、rs485总线越来越难以满足现在和未来的航天数据处理的需求。esa提出了新型的spacefibre互联网络总线协议,支持点对点传输和路由组网,串行传输速率最高可达6.25gbps。同时spacefibre提供虚拟通道机制,可以分类传输不同传输需求的数据;提供qos(qualityofservice,质量服务)机制,为不同类型的数据提供不同优先级的调度服务;提供fdir(faultdetection,isolationandrecovery,错误检测、隔离和重发)机制,能够对发送的数据及时地进行错误恢复,为数据的发送提供可靠的保障。由于spacefibre的上述特点,能为数据传输提供定制qos服务和可靠传输保障,spacefibre互联总线成为了研究热点。

其中,fdir是作为spacefibre节点至关重要的一个功能,使用错误恢复缓存对发送的数据进行备份,同时在对方数据接收正确时清除备份,在对方数据接收错误时对备份数据进行重发,为数据传输提供可靠的保障。spacefibre需要保障的数据有三类:广播数据(bc)、流量控制字(fct)、普通数据(data),三类数据的发送优先级为:bc>fct>data。这三类数据在发送的时候会按照发送顺序被依次编号,并按照对应的数据格式产生crc校验和,再进行组帧。当对方接收节点接收数据后,向本地节点发送一个确认:若对方节点接收正确,向本地节点发送正确确认ack,ack携带着对方节点已成功接收的数据序列号seq,则本地节点对小于等于seq的数据备份进行清零;若对方节点接收错误,向本地节点发送错误确认nack,nack携带着对方节点已经成功接收的数据列号seq,则本地先对小于等于seq的各类数据备份进行清零,然后再对本缓存中大于seq的数据备份进行重发。在重发的时候,需要对各类数据按照数据的优先级进行重发,即先重发完所有的广播数据bc,然后重发所有的fct数据,最后重发所有的普通数据data。同时,重发的时候,需要对序列号重新排序,重新校验和组帧。

在整个错误重发流程中,存储数据类型较多,重发规则较位复杂。错误恢复缓存结构的设计影响着重发的效率,而重发的控制算法是实现fdir功能的关键。合理的错误恢复系统和重发能够提供高效的fdir的重发恢复效率。目前缺乏相应的技术方案。



技术实现要素:

本发明的目的在于克服上述缺陷,提供了一种支持fdir功能的错误恢复系统,设置在每个spacefibre节点数据链路层中;所述系统包括主控状态机、广播错误恢复通道、数据错误恢复通道和fct错误恢复通道;

所述主控状态机,用于对广播错误恢复通道、数据错误恢复通道和fct错误恢复通道进行状态控制;

所述广播错误恢复通道,用于根据主控状态机的状态,对广播数据进行正常发数备份、正确确认清除、以及错误确认清除和重发;

所述数据错误恢复通道,用于根据主控状态机的状态,对普通数据的正常发数备份、正确确认清除、以及错误确认清除和重发;

所述fct错误恢复通道,用于根据主控状态机的状态,对fct数据的正常发数备份、正确确认清除、以及错误确认清除和重发。

作为上述系统的一种改进,当本地节点的数据备份和数据发送并行执行且无延迟;则主控状态机处于正常发数备份状态;

当本地节点收到ack,主控状态机进入ack处理状态;则各个错误恢复通道能够同时独立清除各自备份中小于等于seq的数据备份,其中,seq为ack中所携带已成功接收的序列号;

当本地节点收到nack,主控状态机进入nack处理状态;则各个错误恢复通道首先进入数据清除状态,各个错误恢复通道能够同时地清除各自备份中小于等于seq的数据备份,其中,seq为nack中所携带已成功接收的序列号;然后进入数据重发状态,首先重发广播信息,重发结束后产生广播重发结束信号bc_resend_done,然后重发fct控制字,重发结束后产生fct重发结束信号fct_resend_done,最后重发数据控制字,重发结束后产生数据重发结束信号data_resend_done;当各路错误恢复通道数据重发都结束后,主控状态机恢复到正常发数备份状态,重发操作结束。

作为上述系统的一种改进,所述广播错误恢复通道包括:双端口的广播缓存ram、广播地址fifo和广播重发控制状态机;广播地址fifo为fwft型;

广播缓存ram,用于存储广播组帧模块发送的原有的广播帧备份数据,以及重发的广播帧备份数据;

广播地址fifo,用于对原有的广播帧备份数据进行地址标识记录,以及对重发的广播帧备份数据进行地址标识记录;所述广播地址fifo对原有的广播帧备份数据进行地址标识记录的具体过程为:

当广播缓存ram每写入一个字,写指针wr_ptr加1;当写到广播帧帧尾ebf时,对该帧存储位置进行标识;由于广播帧尾由4个字节组成,从低位到高位依次为ebf字符、状态status、广播帧的序列号bc_seq和校验码crc;构建一个广播帧的地址标识addr={alter,wr_ptr,bc_seq},在广播帧帧尾写入ram的同时,对应的地址标识被写入广播地址fifo;alter作为重发控制标识符,初始化为0,每重发一次alter进行一次翻转;

广播重发控制状态机,用于当主控状态机进入ack状态时对已确认的广播帧备份数据进行清除,当主控状态机进入nack状态时,先对已确认的广播帧备份数据进行清除,再对未确认广播帧备份数据采用重发控制算法进行重发。

作为上述系统的一种改进,当主控状态机进入ack状态,所述广播重发控制状态机的具体处理过程包括:

步骤101)广播错误恢复通道由等待状态进入广播备份清除状态,读取广播地址fifo的地址标识,获取广播缓存ram中未被确认广播帧的最小序列号bc_seq=addr[7:0],以及该广播帧的帧尾的ram写入地址ebf_wr_ptr=addr[wr_ptr];

步骤102)比较ack中携带的seq和广播地址fifo输出端口的bc_seq,bc_seq为未被恢复的首个广播帧的序列号,当bc_seq<=seq时,读出广播地址fifo中的地址标识,同时更新读指针,令rd_ptr=ebf_wr_ptr+1,即读指针指到下一广播帧的帧头,则该广播帧数据及其备份同时被清除;广播缓存ram正常接收正在发送的广播帧;

步骤103)转入步骤102),直至bc_seq>seq,即清除完广播缓存ram中剩余未被确认的广播帧,清除完毕后广播错误恢复通道返回等待状态。

作为上述系统的一种改进,当主控状态机进入nack状态,所述广播重发控制状态机的具体处理过程包括:

步骤201)广播错误恢复通道由等待状态进入广播备份清除状态,读取广播地址fifo的地址标识,获取广播缓存ram中未被确认广播帧的最小序列号bc_seq=addr[7:0],以及该广播帧的帧尾的ram写入地址ebf_wr_ptr=addr[wr_ptr];

步骤202)比较nack中携带的seq和广播地址fifo输出端口的bc_seq,bc_seq为未被恢复的首个广播帧的序列号,当bc_seq<=seq时,读出广播地址fifo中的地址标识,同时更新读指针,令rd_ptr=ebf_wr_ptr+1,即读指针指到下一广播帧的帧头,备份完正在发送的广播帧后,广播缓存ram不再接收正常的广播备份;

步骤203)转入步骤202),直至bc_seq>seq,即清除完广播缓存ram中剩余未被确认的广播帧,然后广播错误恢复通道进入重发状态,对alter重发控制符取反;

步骤204)向广播组帧模块提出重发申请,当收到广播组帧模块的使能信号后,对广播缓存ram进行读取,rd_ptr=rd_ptr+1,并发送到广播组帧模块进行重新组帧,直到读到广播帧帧尾;同时对广播组帧模块重新组帧的广播帧进行备份,重发的广播帧写入广播缓存ram,同时在写到广播帧帧尾的时候,构建新的地址标识addr={alter,wr_ptr,bc_seq},并写入广播地址fifo;

步骤205)读取广播地址fifo的输出addr,若addr的最高位和现在的alter重发控制符相同,则说明广播缓存ram中全为重发的广播帧备份数据,原有的广播帧备份数据已全部被重发,重发过程结束则广播错误恢复通道返回到等待状态,并产生bc_resend_done指示信号;否则说明广播缓存ram中仍有未被重发的广播帧备份,则广播错误恢复通道跳到重发状态,进入步骤204)。

作为上述系统的一种改进,所述数据错误恢复通道包括:双端口的数据缓存ram、数据地址fifo和数据重发控制状态机;数据地址fifo为fwft型;

数据缓存ram,用于存储数据组帧模块发送的原有的数据帧备份数据,以及重发的数据帧备份数据;

数据地址fifo,用于对原有的数据帧备份数据进行地址标识记录,以及对重发的数据帧备份数据进行地址标识记录;所述数据地址fifo对原有的数据帧备份数据进行地址标识记录的具体过程为:

当数据缓存ram每写入一个字,写指针wr_ptr加1;当写到数据帧帧尾edf时,对该帧存储位置进行标识;由于帧尾edf由4个字节组成,从低位到高位依次为edf字符、数据帧的序列号data_seq以及16位的校验码crc;构建一个数据帧的地址标识addr={alter,wr_ptr,data_seq},在数据帧帧尾写入ram的同时,对应的地址标识被写入数据地址fifo;alter作为重发控制标识符,初始化为0,每重发一次alter进行一次翻转;

数据重发控制状态机,用于当主控状态机进入ack状态时对已确认的数据帧备份数据进行清除,当主控状态机进入nack状态时,先对已确认的数据帧备份数据进行清除,再对未确认的数据帧备份数据采用重发控制算法进行重发。

作为上述系统的一种改进,当主控状态机进入ack状态,所述数据重发控制状态机的具体处理过程为:

步骤301)数据错误恢复通道由等待状态进入数据备份清除状态,读取数据地址fifo的地址标识,获取当前数据错误恢复缓存中未被确认数据帧的最小序列号data_seq=addr[7:0],以及该数据帧帧尾的ram写入地址edf_wr_ptr=addr[wr_ptr];

步骤302)比较ack中携带的seq和数据地址fifo输出端口的data_seq,data_seq即为未被恢复的首个数据帧的序列号,当data_seq<=seq时,读出数据地址fifo中的地址标识,同时更新读指针,令rd_ptr=edf_wr_ptr+1,即读指针指到下一数据帧的帧头,则该数据帧数据及其备份同时被清除;数据缓存ram正常接收正在发送的数据帧;

步骤303)转入步骤302),直至data_seq>seq,即数据缓存ram中剩余未被确认的数据帧;然后数据错误恢复通道返回等待状态。

作为上述系统的一种改进,当主控状态机进入nack状态,所述数据重发控制状态机的具体处理过程为:

步骤401)数据错误恢复通道由等待状态进入数据备份清除状态,读取数据地址fifo的地址标识,获取当前数据错误恢复缓存中未被确认数据帧的最小序列号data_seq=addr[7:0],以及该数据帧帧尾的ram写入地址edf_wr_ptr=addr[wr_ptr];

步骤402)比较nack中携带的seq和数据地址fifo输出端口的data_seq,data_seq即为未被恢复的首个数据帧的序列号,当data_seq<=seq时,读出数据地址fifo中的地址标识,同时更新读指针,令rd_ptr=edf_wr_ptr+1,即读指针指到下一数据帧的帧头,则该数据帧数据及其备份同时被清除;备份完正在发送的数据帧后,数据缓存ram不再接收正常的数据备份;

步骤403)转入步骤402),直至data_seq>seq,即数据缓存ram中剩余未被确认的数据帧,数据错误恢复通道进入重发状态,并对alter重发控制符取反;

步骤404)若广播帧和fct控制字重发均结束,向数据组帧模块提出重发申请,当收到数据组帧模块的使能信号后,对数据缓存ram进行读取,rd_ptr=rd_ptr+1,并发送到数据组帧模块进行重新组帧,直到读到数据帧帧尾;同时对数据组帧模块重新组帧的数据帧进行备份,重发的数据帧写入数据缓存ram,同时在写到数据帧帧尾的时候,构建新的地址标识addr={alter,wr_ptr,data_seq},并写入数据地址fifo;

步骤405)读取数据地址fifo的输出addr,若addr的最高位和现在的alter重发控制符相同,则说明数据缓存ram中全为重发的数据帧备份数据,原有的数据帧备份数据已全部被重发,重发过程结束数据错误恢复通道返回到等待状态,并产生data_resend_done指示信号;否则说明数据缓存ram中仍有未被重发的数据帧备份,则数据错误恢复通道跳回重发状态,进入步骤404)。

作为上述系统的一种改进,fct错误恢复通道包括:fct错误恢复缓存fifo和fct重发控制状态机;fct错误恢复缓存fifo为fwft型;

fct错误恢复缓存fifo,用于对fct生成模块发送的原有的fct备份数据进行存储,以及对重发的fct备份数据进行存储,其中根据fct控制字格式可得fct_seq=fct[23:16];fct重发控制中需要一个alter重发控制符,当有效的fct数据备份时,构造新的fct格式:new_fct={alter,fct};alter重发控制符初始化为0,每重发一次alter进行一次翻转;

fct重发控制状态机,用于当主控状态机进入ack状态时对已确认的fct备份数据进行清除,当主控状态机进入nack状态时,先对已确认的fct备份数据进行清除后,再对未确认fct备份采用重发控制算法进行重发。

作为上述系统的一种改进,当主控状态机进入ack状态,所述fct重发控制状态机的具体实现过程为:

步骤501)fct错误恢复通道由等待状态进入fct备份清除状态,读取fct错误恢复缓存fifo的输出端口,获取当前fct错误恢复缓存fifo中未被确认fct的最小序列号fct_seq=fifo_out[23:16];

步骤502)比较ack中的seq和fct错误恢复缓存输出端口的fct_seq,当fct_seq<=seq时,说明fct错误恢复缓存fifo中仍有已成功确认的fct需要被清除,使能fifo_rd=1,读出使fct_seq<=seq的所有fct并丢弃,则原有的fct备份数据被清除,fct缓存正常接收正在发送的fct;

步骤503)转入步骤502),直至fct_seq>seq,即fct错误恢复缓存fifo中剩余未被确认的fct,清除完毕后则fct错误恢复通道返回等待状态。

作为上述系统的一种改进,当主控状态机进入nack状态,所述fct重发控制状态机的具体实现过程为:

步骤601)fct错误恢复通道由等待状态进入fct备份清除状态,读取fct错误恢复缓存fifo的输出端口,获取当前fct错误恢复缓存fifo中未被确认fct的最小序列号fct_seq=fifo_out[23:16];

步骤602)比较nack中的seq和fct错误恢复缓存输出端口的fct_seq,当fct_seq<=seq时,说明fct错误恢复缓存fifo中仍有已成功确认的fct需要被清除,使能fifo_rd=1,读出使fct_seq<=seq的所有fct并丢弃,则原有的fct备份数据被清除;备份完正在发送的fct后,fct错误恢复缓存fifo不再接收正常的数据备份;

步骤603)转入步骤602),直至fct_seq>seq,即fct错误恢复缓存fifo中剩余未被确认的fct,则fct错误恢复通道进入重发状态,并对alter重发控制符取反;

步骤604)若广播帧重发结束,向fct生成模块提出重发申请,当收到fct生成模块的使能信号后,对fct错误恢复缓存fifo进行读取,并发送到fct生成模块进行重新生成;同时对fct生成模块重新生成的fct数据进行备份,构建新的fct备份格式new_fct={alter,fct},并写入fct错误恢复缓存fifo;

步骤605)当fct错误恢复缓存fifo输出端口输出的数据最高位和现在的alter重发控制符相同,则说明fct错误恢复缓存fifo中全为重发的fct备份,原有的fct已全部被重发,重发过程结束则fct错误恢复通道返回等待状态,并产生fct_resend_done指示信号;否则说明fct错误恢复缓存fifo中仍有未被重发的fct备份,则fct错误恢复通道跳到重发状态,进入步骤604)。

本发明的优势在于:

1、本发明的错误恢复系统具有缓存占用资源小的优点;

2、本发明的系统针对各类数据类型进行架构设计,处理时延迟低;在数据发送的时候同时备份,能够无延迟地备份数据;在接收正确确认ack时,能够快速地清除备份,并且不影响新数据的发送备份;在接收错误确认nack时,能够快速清除已接收备份,同时自动地按照数据优先级迅速重发备份;

3、本发明的系统的重发算法控制简单,通过控制重发控制符转变,可以进行多轮重发,能够有效识别原数据和重发数据。

附图说明

图1为本发明的支持fdir功能的错误恢复系统的框架图;

图2为本发明的主控状态机main_state的三种状态切换的示意图;

图3为广播帧的格式;

图4为本发明的广播错误恢复通道的框架图;

图5为本发明的广播重发控制状态机的重发流程图;

图6为数据帧的格式;

图7为本发明的数据错误恢复通道的框架图;

图8为本发明的数据重发控制状态机的重发流程图;

图9为fct帧的格式;

图10为本发明的fct错误恢复通道的框架图;

图11为本发明的fct重发控制状态机的重发流程图。

具体实施方式

下面结合附图对本发明的技术方案进行详细的说明。

本发明设计了一种在spacefibre节点数据链路层中支持fdir功能的错误恢复系统。错误恢复包括错误恢复缓存结构和错误恢复算法;该系统包括主控状态机main_state和3个错误恢复通道;主控状态机主要用于实现对错误恢复缓存的控制,如图1所示;3个错误恢复通道分别用于备份spacefibre中的重要数据:广播数据(bc)、流量控制字(fct)和普通数据(data)。3个错误恢复通道包括:广播错误恢复通道、数据错误恢复通道和fct错误恢复通道。

错误恢复的操作流程如下所述:

当各类数据发送的时候,同时对发送数据进行备份,数据备份和数据发送并行执行,无延迟。此时,主控状态机main_state处于正常发数状态(wait)。

当接收节点数据正确接收时,按照协议规定,接收节点会发送来数据确认信号ack(seq),其中seq代表接收方已经成功接收的数据序列号。本地节点收到ack(seq)后,主控状态机main_state进入ack处理状态(ack)。各个错误恢复通道能够同时地清除各自备份中小于等于seq的数据备份。清除操作在各错误恢复通道内并行执行,互不影响。在清除的同时,可以正常地接收和备份数据,对数据发送无影响,无延迟。由于高效的错误恢复通道内部结构,清除操作简单迅速,无需冗余的数据备份读出操作,具体说明详见图2说明。

当接收节点数据接收错误时,按照协议规定,接收节点会发送来数据错误确认信号nack(seq),其中seq代表接收方已经成功接收的数据序列号。本地节点收到nack(seq)后,主控状态机main_state进入nack处理状态(nack)。各路错误恢复通道首先进入数据清除状态,各路错误恢复通道能够同时地清除各自备份中小于等于seq的数据备份;然后进入数据重发状态,按照各缓存数据的优先级展开重发操作:首先重发广播信息,重发结束后产生广播重发结束信号bc_resend_done,然后重发fct控制字,重发结束后产生fct重发结束信号fct_resend_done,最后重发数据控制字,重发结束后产生数据重发结束信号data_resend_done;当各路错误恢复缓存通道数据重发都结束后,主控状态机main_state恢复到正常发数状态(wait),重发操作结束。

主控状态机main_state主要用于错误恢复通道的状态控制,告知错误恢复通道目前是处于正常发数备份状态(wait)、ack处理状态(ack)、nack处理状态(nack)中的哪一个状态,以便进行处理。当收到ack(seq)后,进入ack处理状态,当错误恢复通道中的备份都清除完毕,即各个备份中剩余的备份序列号都大于seq时,回到数据正常发数状态(wait);当收到nack(seq)后,进入nack处理状态,当错误恢复通道中的备份都重发完毕,即回到数据正常发数状态(wait)。

广播错误恢复通道主要用于对广播数据的正常发数备份、正确确认清除、以及错误确认清除和重发。

当主控状态机处于正常发数状态时,广播错误恢复通道正常进行数据备份。备份的数据是经过组帧的广播帧模块,广播帧格式如下:包括广播帧帧头、广播信息以及广播帧帧尾,帧格式如图3所示。

为了便于对备份数据的清除和重发,本申请提出一种高效的错误恢复缓存架构:备份的数据采用简单的双端口ram结构进行存储,同时采用fwft型的fifo结构对备份数据进行地址标识记录,缓存架构如图4所示:

广播错误恢复通道包括:双端口的广播缓存ram、广播地址fifo和广播重发控制状态机;广播地址fifo为fwft型;

广播缓存ram,用于存储广播组帧模块发送的原有广播帧备份数据,以及重发的广播帧备份数据;广播组帧模块为本地节点自带的功能模块,用于对接收到的广播数据进行组帧;

广播地址fifo,用于对原有广播帧备份数据进行地址标识记录,以及对重发的广播帧备份数据进行地址标识记录;

广播地址fifo对原有广播帧备份数据进行地址标识记录的具体过程为:

当广播缓存ram每写入一个字,写指针wr_ptr加1;当写到广播帧帧尾ebf时,对该帧存储位置进行标识;由于广播帧尾由4个字节组成,从低位到高位依次为ebf字符、状态status、广播帧的序列号bc_seq(ebf[23:16])、校验码crc;为标识广播缓存ram中广播帧的位置,并且及时地获取序列号bc_seq,构建一个广播帧的地址标识addr={alter,wr_ptr,bc_seq},在广播帧帧尾写入ram的同时,对应的地址标识被写入广播地址fifo;alter作为重发控制标识符,初始化为0,每重发一次alter进行一次翻转。由于被重发的数据也重新备份入广播缓存ram中,原有数据重发结束时,此时广播地址fifo中的地址标识的最高位已不同于未重发前的的alter标识,故此可以对原有广播帧和重发广播帧进行区分。

广播重发控制状态机,用于当主控状态机进入ack状态时对已确认的广播帧备份进行清除,当主控状态机进入nack状态时,先对已确认的广播帧备份进行清除后,再对未确认广播帧备份采用重发控制算法进行重发。如图5所示,算法流程如下:

(1).主控状态机main_state进入nack或ack后,由等待状态(wait)进入数据备份清除状态(clear),读取地址fifo的地址标识,获取当前广播错误恢复缓存中未被确认广播帧的最小序列号bc_seq=addr[7:0],以及该广播帧的帧尾的ram写入地址ebf_wr_ptr=addr[wr_ptr];

(2).比较nack或ack中携带的seq(已成功接收序号)和广播地址fifo输出端口的bc_seq,读出地址fifo中的地址标识,同时更新读指针,令rd_ptr=ebf_wr_ptr+1,即读指针指到下一广播帧的帧头,则该广播帧记录和备份同时被清除。若main_state为nack处理状态时备份完正在发送的广播帧后,广播缓存不再接收正常的广播备份;若main_state为ack处理状态时,广播缓存正常接收正在发送的广播帧,对广播帧的发送无影响;

(3).重复上述清除操作,直至bc_seq>seq,即广播缓存ram中剩余未被确认的广播帧,若main_state为nack处理状态则进入重发状态(resend),并对alter重发控制符取反;若main_state为ack处理状态,则清除完毕,则返回等待状态(wait);

(4).进入重发状态(resend),向广播组帧模块提出重发申请,当收到广播组帧模块的使能信号后,对广播缓存ram进行读取,rd_ptr=rd_ptr+1,并发送到广播组帧模块进行重新组帧,直到读到广播帧帧尾,进入读取地址状态(read)。重发的同时,对广播组帧模块重新组帧的新广播帧进行备份,重发的广播帧写入广播缓存ram,同时在写到广播帧帧尾的时候,构建新的地址标识addr={alter,wr_ptr,bc_seq},并写入地址fifo;

(5)在读取地址状态(read)读取地址fifo的输出addr后进入判别状态(judge);

(6).在判别状态(judge),若addr的最高位和现在的alter重发控制符相同,则说明广播缓存ram中全为重发的广播帧备份,原有的广播帧已全部被重发,重发过程结束跳回到等待状态(wait),并产生bc_resend_done指示信号;反之,则说明广播缓存ram中仍有未被重发的广播帧备份,则跳到重发状态(resend)继续进行重发。

数据错误恢复通道主要用于对普通数据的正常发数备份、正确确认清除、以及错误确认清除和重发。

当主控状态机处于正常发数状态时,数据错误恢复通道正常进行数据备份。备份的数据是经过组帧的数据帧模块,数据帧格式如下:包括数据帧帧头、数据信息以及数据帧帧尾,帧格式如图6所示。

数据帧格式和广播帧相似,不同的地方是数据帧的长度不固定,最长的数据帧包括64个32bit的数据信息,同样采用ram+fifo的高效错误恢复缓存架构,缓存架构如图7所示:

数据错误恢复通道包括:双端口的数据缓存ram、数据地址fifo和数据重发控制状态机;数据地址fifo为fwft型;

数据缓存ram,用于存储数据组帧模块(本地节点自带的功能模块,用于对普通数据进行组帧)发送的原有数据帧备份数据,以及重发的数据帧备份数据;

数据地址fifo,用于对数据帧备份数据进行地址标识记录,以及对重发的数据帧备份数据进行地址标识记录;

数据地址fifo对数据帧备份数据进行地址标识记录的具体过程为:

当数据缓存ram每写入一个字,写指针wr_ptr加1;当写到数据帧帧尾edf时,对该帧存储位置进行标识;由于帧尾edf由4个字节组成,从低位到高位依次为edf字符、数据帧的序列号data_seq(edf[15:8])以及16位的校验码crc;为标识ram中数据帧的位置,并且及时地获取序列号data_seq,构建一个数据帧的地址标识addr={alter,wr_ptr,data_seq},在数据帧帧尾写入ram的同时,对应的地址标识被写入数据地址fifo;alter作为重发控制标识符,初始化为0,每重发一次alter进行一次翻转。由于被重发的数据也重新备份入数据缓存ram中,原有数据重发结束时,此时数据地址fifo中的地址标识的最高位已不同于未重发前的alter标识,故此可以对原有数据帧和重发数据帧进行区分。

数据重发控制状态机,用于当主控状态机进入ack状态时对已确认的数据帧备份进行清除,当主控状态机进入nack状态时,先对已确认的数据帧备份进行清除后,再对未确认数据帧备份采用重发控制算法进行重发。如图8所示,算法流程如下:

(1).主控状态机main_state进入nack或ack后,由等待状态(wait)进入数据备份清除状态(clear),读取地址fifo的地址标识,获取当前数据错误恢复缓存中未被确认数据帧的最小序列号data_seq=addr[7:0],以及该数据帧帧尾的ram写入地址edf_wr_ptr=addr[wr_ptr];

(2).比较nack或ack中携带的seq和数据地址fifo输出端口的data_seq,data_seq即为未被恢复的首个数据帧的序列号,当data_seq<=seq时,读出地址fifo中的地址标识,同时更新读指针,令rd_ptr=edf_wr_ptr+1,即读指针指到下一数据帧的帧头,则该数据帧记录和备份同时被清除。若main_state为nack处理状态时备份完正在发送的数据帧后,数据缓存不再接收正常的数据备份;若main_state为ack处理状态时,数据缓存正常接收正在发送的数据帧,对数据帧的发送无影响;

(3).重复上述清除操作,直至data_seq>seq,即数据缓存ram中剩余未被确认的数据帧,若main_state为nack处理状态则进入重发状态(resend),并对alter重发控制符取反;若main_state为ack处理状态,则清除完毕,则返回等待状态(wait);

(4).进入重发状态(resend),若广播帧和fct控制字都重发结束,向数据组帧模块提出重发申请,当收到数据组帧模块的使能信号后,对数据缓存ram进行读取,rd_ptr=rd_ptr+1,并发送到数据组帧模块进行重新组帧,直到读到数据帧帧尾,进入读取地址状态(read)。重发的同时,对数据组帧模块重新组帧的新数据帧进行备份,重发的数据帧写入数据缓存ram,同时在写到数据帧帧尾的时候,构建新的地址标识addr={alter,wr_ptr,data_seq},并写入地址fifo;

(5)在读取地址状态(read)读取地址fifo的输出addr后进入判别状态(judge);

(6).在判别状态(judge),读取地址fifo的输出addr,若addr的最高位和现在的alter重发控制符相同,则说明数据缓存ram中全为重发的数据帧备份,原有的数据帧已全部被重发,重发过程结束跳回到等待状态(wait),并产生data_resend_done指示信号;反之,则说明数据缓存ram中仍有未被重发的数据帧备份,则跳到重发状态(resend)继续进行重发。

由于fct控制字由于不同于广播帧和数据帧的格式,仅由一个32bit的字组成,数据格式如9所示。如图10所示,fct错误恢复通道包括:fct错误恢复缓存fifo和fct重发控制状态机;fct错误恢复缓存fifo为fwft型;

fct错误恢复缓存fifo,用于对fct生成模块(本节点自带的功能模块,用于生成fct控制字)发送的原有的fct备份数据进行存储和地址标识记录,以及对重发的fct备份数据进行存储和地址标识记录;fct重发控制中需要一个alter重发控制符,当有效的fct数据备份时,构造新的fct格式:new_fct={alter,fct};alter重发控制符初始化为0,每重发一次alter进行一次翻转;由于被重发的fct也需要重新备份入fct错误恢复缓存fifo中,当原有数据重发结束时,此时fct错误恢复缓存fifo中的地址标识的最高位已不同于未重发前的alter标识,故此可以对原有fct和重发fct进行区分。

fct重发控制状态机,用于当主控状态机进入ack状态时对已确认的fct备份进行清除,当主控状态机进入nack状态时,先对已确认的fct备份进行清除后,再对未确认fct备份采用重发控制算法进行重发。如图11所示,算法流程如下:

(1).主控状态机main_state进入nack或ack后,由等待状态(wait)进入数据备份清除状态(clear),读取fct错误恢复缓存fifo的输出端口,获取当前fct错误恢复缓存中未被确认fct的最小序列号data_seq=fifo_out[7:0];

(2).比较nack或ack中携带的seq和fct错误恢复缓存fifo输出端口的fct_seq,当fct_seq<=seq时,即说明fct错误恢复缓存fifo中仍有已成功确认的fct需要被清除,使能fifo_rd=1,读出使fct_seq<=seq的所有fct并丢弃,则fct备份被清除。若main_state为nack处理状态时,备份完正在发送的fct后,fct缓存不再接收正常的数据备份;若main_state为ack处理状态时,fct缓存正常接收正在发送的fct,对fct的发送无影响;

(3).重复上述清除操作,直至fct_seq>seq,即fct错误恢复缓存fifo中剩余未被确认的fct,若main_state为nack处理状态,则进入重发状态(resend),并对alter重发控制符取反;若main_state为ack处理状态,则清除完毕,返回等待状态(wait);

(4).进入重发状态(resend),若广播帧重发结束,fct生成模块提出重发申请,当收到fct生成模块的使能信号后,对fct错误恢复缓存fifo进行读取,并发送到fct生成模块进行重新生成。重发的同时,对fct生成模块重新生成的新fct进行备份,构建新的fct备份格式new_fct={alter,fct},并写入fct错误恢复缓存fifo;

(6).当fct错误恢复缓存fifo输出端口输出的数据最高位和现在的alter重发控制符相同,则说明fct错误恢复缓存fifo中全为重发的fct备份,原有的fct已全部被重发,重发过程结束跳回到等待状态(wait),并产生fct_resend_done指示信号;反之,则说明fct错误恢复缓存fifo中仍有未被重发的fct备份,则跳到重发状态(resend)继续进行重发。

最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1