光纤通道中固定帧长度的一种高效差错重传与存取机制的制作方法

文档序号:11147256阅读:434来源:国知局
光纤通道中固定帧长度的一种高效差错重传与存取机制的制造方法与工艺

本发明涉及计算机通信系统,特别是一种基于FPGA平台实现的光纤通道中CRC出错重传和存取方法具有低延时的新方法。



背景技术:

光纤通道是为在像服务器这样的多硬盘系统环境而设计,能满足高端工作站、服务器和海量存储子网络等系统对高数据传输率的要求。光纤通道广泛用于通信接口,并成为传统I/O接口与网络技术相结合趋势的一部分。

光纤通道技术适用于需要远距离传输大型数据文件的场景。光纤通道可以将传统的并行低速数据转变成高速串行数据,通常的运行速率有2Gbps、4Gbps、8Gbps和16Gbps,因此需要提供大量信息的高速传输。除了速度增长以外,光纤通道也需要支持公里级的距离。尽管被称为光纤通道,但其信号也能在光纤之外的双绞线上运行,但双绞线传输距离短且易受电磁干扰。

光纤通道传输误码率低于1e-12,误码率低。光纤通道误码率会受光收发模块的稳定性,比如接触不良、线路老化等原因,不能满足技术指标。若不检查这些指标,在运行过程中,由于接触不良、接头有灰尘和温度老化更降低通道指标,会造成误码率增大。在误码率容忍度低的场合,就需要数据重传机制来保障数据可靠传输。

目前在数据通信中有三种基本的ARQ重传机制,分别是停等式、后退N步式和选择重传式。停等式ARQ协议的传输系统中,发送端每发送一个数据帧就暂停下来,等待接收端的确认消息,若接受正确,返回ACK信号,否则返回NACK信号。在等待确认信息期间,信道是空闲的,不发送任何数据;后退N步式即若出现错误,重发当前分组和之前相关联的所有分组;选择重发式只重传出现差错的数据帧,这样就提高了信道的利用率。选择重发式的信道利用率最高,但接收端不再按序接收数据帧信息,在接收端需要相当容量的缓存空间来存储已经成功解码但还没按序输出的帧,接收端在接收帧数据包前需要知道其序列号,因此增加了对信令的要求。

基于上述提到的选择重传式,在帧数固定为N时,在接收端解码的CRC与接收端不符时,反馈给发送端NACK,发送端在接收到反馈信息后,选择出错的帧重新发送,接收端将重新接收的帧放在备用的双口RAM缓存里,当接收端帧计数器为N时,包传输完成。因为这个包数据存放在两个空间里,所以需要额外的信息缓存存储帧在包中的位置和存储位置。帧数据的读控制信号通过两个帧信息缓存产生,这样,无需对帧数据进行排序可以快速取出数据。



技术实现要素:

本发明基于选择重传机制,在包中每个帧长度固定时,提供了一种在FPGA平台上实现的可以快速重传与数据存取的新方法。该方法改进之处在于不需要对接收到的帧进行排序就可以实现快速存取,从而节约了FPGA宝贵的存储资源,同时加快了处理速度。

发送端在发送数据时,要同时发送信息告诉接收端这个包中一共有多少帧,帧要标明在整个传送数据中的位置,用于接收端完整接收整个包和帧数据重组。接收端每接收一个帧就向发送端反馈信息,若接受的CRC正确,返回ACK信号,否则返回NACK信号。

发送端发送帧数据时要发送帧信息和包信息,同时要标记是否是错误重新发送的数据。若是重新发送,则带有标记1,否则带有标记0。发送端接收到ACK时不予处理,当接收到带有包和帧信息的NACK时,说明传输错误,则重新发送相应的带有帧和包信息的帧,同时在发送时带有标记1,说明是出错重传的数据。

接收端每接收到一个帧,若带有相应标记0,则帧数据实时保存到数据缓存FIFO A1,此帧若CRC校验正确,则将包信息和帧信息组合保存到信息缓存B1,同时向发送端发送带有包信息和帧信息的ACK信息;若CRC校验错误,帧数据实时保存到数据缓存A1,但要向发送端发送带有包和帧信息的NACK信息,同时此时包信息和帧信息不予保存。

接收端若接收到一个带有标记1的帧,则帧数据实时保存到数据缓存双口RAM A2,同时记录当前帧在双口RAM写入的基地址,下次写入的基地址为此次基地址加上帧长度。若此帧CRC校验正确,将包信息、帧信息和当前帧的基地址组合保存到信息缓存寄存器组B2,向发送端发送带有包信息和帧信息的ACK信息,将基地址加上帧长度作为下次RAM写入的基地址;若CRC校验错误,要向发送端发送带有包和帧信息的NACK信息,此时包信息和帧信息亦不予保存,同时,当前帧的基地址作为下一帧的基地址。A2用双口RAM是因为可以寻址读取,而FIFO无法寻址读取,实现不了这样的功能。

发送端若发送一个帧长度为N=8的包,若只有第3帧数据出错,发送第三帧后向发送端发送带有包信息和帧信息为3的NACK。若重传第3帧后,数据传输正确,那么各个缓存的存储如下:数据缓存A1存储有关于此包的8帧数据,其中第3帧数据错误;信息缓存B1包含除去第3帧的其他帧的帧信息和相应包信息;数据缓存A2存储有第3帧的正确数据;信息缓存B2含有第3帧的帧信息、包信息和帧在A2存储的基地址。

在帧数据读取时,A1中既有正确的帧数据,也有错误的帧数据,A2在B2存储的地址范围内只包含有正确的帧数据。需要由B1和B2得到控制信号,从A1和A2中选择正确的帧信息。通过计数器和比较器控制读取的缓存,并选择输出的帧数据。若要读取某个包数据,首先将帧计数器置位为1,代表将要读取此包的第一帧数据.读取缓存B1和B2,与帧计数器比较。若B1里对应的帧信息为1,则数据缓存A1读取信号有效,A2读取信号无效,即可从A1得到第一帧正确数据;若B1里没有相应的帧信息,则匹配寄存器组B2里所有的包信息和帧信息,如匹配上,则数据缓存A1和A2的读取信号均有效,但A1输出的帧要丢弃,以B2里存储的基地址读取A2,得到固定长度的帧作为正确的输出。若当前发送帧B1里的帧信息匹配上,则下一帧匹配时缓存B1读取使能有效,缓存B2读取使能无效;若当前发送帧B2里的帧信息匹配上,则下一帧匹配时缓存B1读取使能无效,缓存B2读取使能有效。当传送完一帧,帧计数器加一,按上述原则继续匹配。每读取一帧,将B2里相应的空间复位。当帧计数器为N,且这一帧发送完成时,此包读取完毕。

附图说明

图1为本发明方法的接收端存储与反馈示意框图;

图2为本发明方法的接收端帧信息匹配取帧数据示意框图。

具体实施方式

为了使本发明更便于理解,以下结合附图和具体实施方式来对本发明做进一步说明。

发送端在接收到带有帧信息和包信息的反馈ACK时,不处理,在接收到NACK时,从中提取帧信息和包信息,从上层重新读取相应数据,在链路空闲时,将帧数据、帧信息、包信息、CRC和重发标记1打包,传送至链路。若数据是第一次发送,则与重发标记0打包。

接收端将发送端发送的数据解包,得到帧数据、帧信息、包信息和CRC,并得到重发标记。

接收端判断重发标记:若为1,说明是重发后的数据;若为0,说明是首次发送。

若检测到重发标记为0,FIFO读写地址不可自定义,所以帧数据实时保存到FIFO A1。进行CRC检测匹配,校验正确,则将帧信息、包信息缓存至信息FIFO B1,向发送端反馈带有帧信息和包信息的ACK;若CRC不匹配,则向发送端反馈带有帧信息和包信息的NACK,请求重传。

若检测到重发标记为1,说明是发送端重传过来的帧这时帧数据缓存在双口RAM里。用双口RAM代替FIFO,是因为双口RAM读写地址可以自定义。双口RAM控制器记录当前帧的基地址,并计算下次帧写入的基地址。每写入一帧,若CRC校验正确,则下次RAM写入的基地址要加上帧的长度,作为下次写入的基地址,并将帧信息、包信息和此帧在RAM的基地址缓存在寄存器组B2,向发送端发送带有帧信息和包信息的ACK;若CRC校验错误,则向发送端反馈带有帧信息和包信息的NACK。此处缓存B2用寄存器组实现是因为寄存器组可以同时查看多组数据,并行操作,节省时间。

在帧读取时,首先将帧计数器置位为1,然后读取帧信息缓存FIFO B1,若缓存B1取出的数据能匹配上,则从帧数据缓存A1读取帧数据作为帧输出。若缓存B1取出的数据不匹配,则匹配缓存寄存器组B2,若B2里有数据能匹配上帧信息,则从B2里取出此帧在双口RAM A2存储的基地址,从双口RAM逐个取出数据,数据长度等于帧长度时,停止取数据。在B2匹配上时,同时也要读取帧数据FIFO A1的数据,但A1的数据要丢弃,即只要B1或B2有匹配上就要读取A1的数据,A1和A2哪个作为输出要看匹配的是B1还是B2。若B2里不能匹配数据,则等待B2里有更新时,再次匹配B2,直到B2里存在与帧信息匹配的数据。

信息缓存B2匹配上帧信息并从双口RAM A2里取出数据后,要将B2里匹配的数据复位,给下次使用留出空间。

在将帧信息、包信息和地址信息写入B2时,要查看B2里是否有复位空闲的位置,用比较器实现。

经过比较,若有空闲位置,则将最低位的空闲位置作为信息存储空间。否则,说明信息缓存B2空间不足,接收的重传数据过多,取出的速度慢,这时候需要等待。用比较器查看B2的变化,若B2有数据变化,说明有新的一组重传数据到达,再次匹配要读取的帧信息与B2里的帧信息,知道匹配上为止。

计算双口RAM的帧写入地址,在帧长度固定时,只计算要写入的帧的基地址。每写入一帧,下次写入的基地址自增帧长度,然后判断这个地址是否在寄存器组缓存B2里存在。若B2里没有相应地址,可以直接写入;若B2里存在与即将写入地址匹配的地址,再次写入将覆盖之前的数据,要将基地址再自增帧长度,循环,直到有空白的空间可供此帧写入。

要根据发送端的传送速率和接收端FIFO的读取速率,以及传送过程的误码率,来适当设定信息缓存B2和帧数据缓存A2的大小,减小因为重传过多导致的缓存不够而造成链路阻塞的概率。

帧长度固定时,硬件电路容易处理。帧长度同时与发送效率相关,帧长度越长,则链路空闲时间占比可以小一些,效率越高。同时发送效率与误码率有关,在误码率很高时,帧越长,若一个帧出错,需要重传帧的时间花销大。所以帧长度要权衡设定。

数据缓存A2使用双口RAM,而A1使用FIFO,是因为双口RAM可以寻址读写。因为CRC是在帧最后才检验的,而数据流是实时保存到缓存里,这样错误的帧也会保存。在A1里的帧无法跳跃读取,而A2的帧可以跳跃读取。所以第一次传输帧时,不论帧正确与否都缓存在A1。不排除重传一次后,数据仍然出错的可能,所以缓存A2用双口RAM实现,这样即使出错后,也能把相应的帧剔除。

帧信息缓存B1使用FIFO实现,缓存B2使用寄存器组实现。B1存储有包信息和帧信息,而B2还另外存储了与帧相应的双口RAM基地址。每一帧长度固定时,B2里存储的基地址间隔只能是帧长度的整数倍,方便读写RAM。因为重传后也有出错的可能,所以B2里的帧顺序可能与首次发送的帧顺序不同,这样就需要查找寄存器组B2里所有的帧信息,并与待读取的信息匹配。B2若用FIFO,不能实现乱序读取的功能。在B2里进行查找时,为了加快比对速度,要根据B2的大小,将B2分成若干组,分组并行比较。B2匹配上,读取完相应数据后要将B2里相应空间复位,否则随着时间积累,空间一定会占满。

只对其中的关键帧信息和包信息进行匹配,辅以可寻址读写的双口RAM,这种实现方法可以省去对大规模帧的数据进行排序,节省了大量数据排序所需要的空间和时间成本。

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