一种WTB链路层接口适配器及其实现方法
技术领域
本发明涉及基于总线连接的远程调用接口的装置,尤其涉及一种WTB 链路层接口适配器及其实现方法。
背景技术
目前,WTB(绞线式列车总线)网络是一种用于机车车辆的通讯总线网络,它是一种串行数据通信总线,目前在国内外大量用于经常相互连挂和解连的重联车辆上,具备高可靠性和灵活性,是IEC61375-1标准的一个重要组成部分。IEC61375-1标准对WTB链路层的功能接口做出了详细规定,WTB链路层的功能接口包括监视数据接口,过程数据接口和消息数据接口。WTB链路层的这些功能接口均暴露在ARM处理器上。WTB网卡的功能是用户通过调用WTB链路层所暴露的各个功能接口所实现。
通常情况下,运行应用程序的CPU设备板与WTB设备板是分离的,用户所使用的上位机程序与实际的WTB链路层并不在同一平台上,因此上位机所暴露的用户接口实际上并不能直接调用WTB链路层功能接口的功能。
发明内容
本发明的目的是针对现有技术存在的问题,提供一种WTB链路层接口适配器,其能够协助用户完成从上位机的用户接口调用真正WTB链路层功能接口的工作。
本发明的目的通过如下技术方案实现:
本发明提供一种WTB链路层接口适配器,其包括:
上位机适配模块和WTB网卡适配模块;
所述WTB网卡适配模块包括三层架构,分别为:WTB链路接口层、适配器Adapter层与FPGA逻辑层;所述WTB网卡适配模块的WTB链路接口层提供WTB功能接口;所述WTB网卡适配模块的适配器Adapter层向上为WTB功能接口提供相关的调用参数,向下与FPGA逻辑层进行交互来获取相关数据;所述FPGA逻辑层向上与所述WTB网卡适配模块的适配器Adapter层进行交互来获取相关数据,向下驱动并行总线与上位机适配模块交互、缓冲数据;
上位机适配模块包括二层架构:WTB链路接口层和适配器Adapter层;所述上位机适配模块的WTB链路接口层提供上位机用户虚拟接口;所述上位机适配模块的适配器Adapter层向上对所述上位机适配模块的WTB链路接口层用户提供参数传送功能,向下则跟所述WTB网卡适配模块的FPGA 逻辑层的相关接口进行数据交互。
更优选地,所述WTB网卡适配模块的适配器Adapter层的功能由负责逻辑运算的ARM芯片完成。
更优选地,所述WTB网卡适配模块的FPGA逻辑层的功能由负责控制物理和机械信号的现场可编程门阵列FPGA芯片来完成。
本发明还提供一种WTB链路层接口适配器的实现方法,其包括:
当用户通过上位机适配模块所在的CPU设备交互数据时,上位机适配模块通过用户虚拟接口分别主动发起传输数据包和接收数据包;并通过链路层接口向下跟所述WTB网卡适配模块的FPGA逻辑层的相关接口进行数据交互;
所述WTB网卡适配模块通过FPGA逻辑层向上与所述WTB网卡适配模块的适配器Adapter层进行交互来获取相关数据,向下驱动并行总线与上位机适配模块交互、缓冲数据;所述WTB网卡适配模块的适配器Adapter 层向下与FPGA逻辑层进行交互来获取相关数据,向上为WTB链路接口层的WTB功能接口提供相关的参数。
更优选地,上位机适配模块在用户调用WTB的链路层功能接口请求传输数据后,当上位机适配模块自动调用接口请求传输数据给WTB网卡适配模块时,所述实现方法包括:
步骤S101,上位机适配模块通过用户虚拟接口获取用户调用WTB的链路层功能接口的数据,通过其适配器Adapter层将该数据进行封装;
步骤S102,上位机适配模块的适配器Adapter层采用分包传输机制,将封装好的数据缓冲区的数据分割成固定长度的数据包;
步骤S103,上位机适配模块的适配器Adapter层将分割后的所有数据包,依次通过FPGA接口发送到WTB网卡适配模块的FPGA层,并根据WTB网卡适配模块的反馈结果进行发送结果的确认;
步骤S104,WTB网卡适配模块的适配器Adapter层基于适配器状态机对WTB网卡适配模块的FPGA层中的数据包进行接收;
步骤S105,当WTB网卡适配模块接收完所有的数据包后,WTB网卡适配模块的WTB链路接口层执行WTB链路层接口功能;
步骤S106,上位机适配模块等待调用结果的返回,并当接收到返回结果后,将返回结果输出。
更优选地,所述步骤S103的过程包括:
针对每个数据包,上位机适配模块的适配器Adapter层通过FPGA接口将该数据包发送给WTB网卡适配模块;
上位机适配模块通过FPGA接口收到WTB网卡适配模块发送的RST 确认数据后,上位机适配模块的适配器Adapter层根据该RST确认数据的内容判断本次发包是否成功,并将结果返回给上位机适配模块的WTB链路接口层。
更优选地,所述步骤S103中,上位机适配模块通过FPGA接口发送每个数据包到WTB网卡适配模块的过程包括:
上位机适配模块的适配器层检查是否可向FPGA接口写入数据,若不可写,则反复查询,直到当查询次数到达某上限值时,则认为超时错误发生,上位机适配器模块直接返回错误;若可写,首先发送一个写数据命令,之后写入数据长度并将数据按字节依次通过FPGA接收寄存器写入位于 WTB网卡适配模块的FPGA逻辑层的FPGA芯片中;FPGA芯片获取到数据后,将其写入共享内存的特定位置中,并发出一个上位机适配模块发送数据中断给WTB网卡适配模块的适配器Adapter层的ARM芯片,通知ARM 芯片已经有新数据包到达;ARM芯片处理完中断后,在主循环中访问共享内存,并将数据读出。
更优选地,所述步骤S104中的适配器状态机有如下三个状态:
RECV_ARG_HEAD状态,RECV_ARG状态以及SEND_RESULT状态;
RECV_ARG_HEAD状态:默认情况下适配器状态机处于该状态下,并且不停轮询FPGA中上位机有无发数据包;若轮询错误err则表示无数据包;若有数据包且数据包为非头包,或者数据包本身格式有误,则仍按err条件回到该状态下重新轮询;仅当轮询到正确的头包时,状态机按ok条件进入 RECV_ARG状态,继续接收其它可能的数据包;
RECV_ARG状态:在该状态下,适配器状态机判断是否已经将所有数据接收完毕;若当前接收正确并且没有接收完毕,则继续在此状态下接收其它的数据包;若任意一次数据包接收发生错误,则按err条件返回到 RECV_ARG_HEAD状态重新开始等待下一次的接口调用;若正确接收完毕,则使用收到的参数调用相对应的链路层接口函数;执行完毕并获取执行结果后,进入到SEND_RESULT状态将执行结果返回;
SEND_RESULT状态:在该状态下,适配器状态机将封装后的执行结果分割成数据包,并按次序依次发送给上位机适配模块;若某次发送错误或者发送完毕,则回到RECV_ARG_HEAD状态重新开始;否则继续在此状态下发送。
更优选地,上位机适配模块在用户调用WTB的链路层功能接口请求传输数据后,当上位机适配模块自动调用接口请求接收WTB网卡适配模块执行结果返回数据时,所述实现方法包括:
步骤S201,上位机适配模块发送接收数据请求,通过其适配器Adapter 层构造接收数据请求传输包,经过FPGA接口发送给WTB网卡适配模块;
步骤S202,WTB网卡适配模块收到上位机适配模块的接收数据请求后,将有效的结果数据封装到数据包中,按照分包传输机制通过FPGA逻辑层将所有数据包依次返回给上位机适配模块;
步骤S203,上位机适配模块从FPGA层中获取WTB网卡适配模块返回的数据包,并解析后获得结果数据,将该结果数据传输给上层的WTB链路接口层。
更优选地,步骤S202中WTB网卡适配模块通过FPGA逻辑层发送每个数据包的过程包括:
上位机适配模块通过轮询FPGA接口状态是否可读方式来检查是否有数据;WTB网卡适配模块的适配层的ARM芯片准备好数据后,将其写入共享内存的数据区特定位置,然后向命令区的特定位置写入“设置可读”的Request命令和对应参数值;WTB网卡适配模块的FPGA逻辑层的FPGA 芯片查询到命令后,将FPGA接口置为可读和可写;上位机适配模块轮询时获知有效数据,则写入读命令字;之后上位机适配模块读出数据长度,并按长度依次读出数据的每个字节;当上位机适配模块读取完该数据包中的所有数据后,FPGA芯片将上位机适配模块的FPGA接口置为不可读,完成该数据包的从WTB网卡适配模块到上位机适配模块的传输。
由上述本发明的技术方案可以看出,本发明具有如下技术效果:
1、由于本发明包括CPU板卡所在的上位机适配模块和WTB板卡所在的WTB网卡适配模块,使得用户可以通过上位机所在CPU设备直接调用 WTB的链路层功能接口,实现了对WTB链路层接口的远程调用(RPC) 功能,并且对用户程序完全透明。
2、由于本发明在WTB网卡适配模块端运行着一个适配器状态机,该状态机保证了无论哪一方发生错误,数据收发均不会陷入忙等待而造成程序假死,极大地保证了本发明的WTB链路层接口适配器的可用性和稳定性。
附图说明
图1为本发明WTB链路层适配器的结构图;
图2为上位机适配模块向WTB网卡适配模块请求发送数据后本发明的 WTB链路层适配器的实现方法的时序图;
图3为上位机适配模块向WTB网卡适配模块请求发送数据后本发明的 WTB链路层适配器的实现方法的实施流程图;
图4为本发明中适配器通信协议的分包传输机制的流程图;
图5为本发明头包的格式图;
图6为本发明非头包的格式图;
图7为上位机适配模块向WTB网卡适配模块发送每个数据包时遵循的数据传输机制流程图;
图8为上位机适配模块向WTB网卡适配模块请求接收数据后本发明的 WTB链路层接口适配器的实现方法的时序图;
图9为上位机适配模块向WTB网卡适配模块请求接收数据后本发明的 WTB链路层适配器的实现方法的实施流程图;
图10为上位机适配模块向WTB网卡适配模块请求接收数据后本发明的WTB网卡适配模块向上位机适配模块发送每个数据包时遵循的数据传输机制流程图。
具体实施方式
以下将结合附图对本发明的技术方案做进一步详细说明。
实施例一
本发明提供一种WTB网卡链路层接口适配器,该WTB网卡链路层接口适配器的结构如图1所示,可以看出:
该WTB网卡链路层接口适配器横向主要分为两个部分:CPU板卡所在的上位机适配模块和WTB板卡所在的WTB网卡适配模块。
其中WTB网卡适配模块包括三层架构,分别为:WTB链路接口层、适配器Adapter层与FPGA逻辑层。WTB链路接口层提供WTB功能接口。适配器Adapter层的功能是:向上为WTB功能接口提供相关的参数,向下需要与FPGA逻辑层进行交互来获取相关数据;适配器Adapter层的功能由负责复杂逻辑运算的ARM芯片完成。FPGA逻辑层的功能是:向上需要与适配器Adapter层的进行交互来获取相关数据;向下驱动并行总线与上位机交互、缓冲数据。FPGA逻辑层的这些功能由负责控制物理和机械信号的 FPGA(Field-Programmable GateArray,现场可编程门阵列)芯片来完成。 FPGA芯片与ARM芯片之间可以通过并行总线接口连接。
上位机适配模块包括二层架构:WTB链路接口层和适配器Adapter层。 WTB链路接口层提供上位机用户虚拟接口;适配器Adapter层向上对WTB 链路接口层的用户提供链路层接口,而向下则需要跟FPGA芯片的相关接口进行数据交互。上位机适配模块与WTB网卡适配模块的FPGA芯片通过并行总线直接相连,因此FPGA芯片中有一块FPGA接口逻辑,与上位机的适配器底层传输逻辑相对应。而FPGA与ARM之间的程序交互通过 FPGA芯片的一块共享内存和中断来实现。同时,FPGA接口逻辑和ARM 芯片的通信逻辑相互作用,用来实现上位机适配模块和WTB网卡适配模块的通信协议的相关功能。
上位机适配模块和WTB网卡适配模块之间通过FPGA逻辑层进行物理信号和数据的传输。二者之间共同使用一个适配器通信协议,该适配器的通信协议分为三个层次,分别是数据封装和解析层、数据分包和收包层、数据包(字节流)发送和接收层。为了实现RPC功能,该适配器通信协议需要将调用接口的接口编号、RPC相关参数等进行封装,并在另一端正确解析出来。在接口调用之后,还需要对调用结果进行封装,并传输给调用方解析。
实施例二
本发明还提供一种上述WTB链路层接口适配器的实现方法,该实现方法中,用户通过上位机适配模块所在的CPU设备调用WTB的链路层功能接***互数据的过程包括两种情况:其一是请求数据传输的情况,其二是请求数据接收的情况。而无论哪种情况,上位机适配模块始终为通信的主动方,通过向FPGA芯片发送命令来控制FPGA芯片完成数据收发功能。当上位机适配模块主动发起通信请求后,经过适配器Adapter层的处理,最终到达底层与WTB网卡适配模块的FPGA芯片收发数据的阶段。上位机适配模块主动发起通信请求时,上位机适配模块会通过一次接口调用产生两个阶段,即发送阶段和接收阶段。在发送阶段,上位机适配模块的适配器 Adapter层负责将调用参数等封装好,并分割成若干个数据包,并将其依次发送给WTB网卡适配模块;在接收阶段,上位机的适配器Adapter层负责将WTB网卡适配模块返回的执行结果重新拼装成正确的数据,并将解析后的数据返回给WTB链路接口层。可见,本发明提供的WTB链路层接口适配器的实现方法包括如下两种处理过程:在用户调用WTB的链路层功能接口请求传输数据后,上位机适配模块向WTB网卡适配模块请求传输数据的处理过程;以及,在用户调用WTB的链路层功能接口请求接收数据后,上位机适配模块向WTB网卡适配模块请求接收数据的处理过程的处理过程。而且每种处理过程中上位机适配模块都会出现发送阶段和接收阶段。
下面分别结合图2-图10,对这两种处理过程进行详细说明:
一、上位机适配模块向WTB网卡适配模块请求传输数据的处理过程
上位机适配模块在用户调用WTB的链路层功能接口请求传输数据后,执行上位机适配模块向ATM平台发送数据的过程。上位机发送数据的过程由Send阶段和Recv阶段这两个阶段来完成,分别完成数据发送和发送结果确认。发送数据请求由上位机主动发起,上位机适配模块发起发送数据请求后,首先进入发送Send阶段,进行数据封装、分包和发送;当ATM 返回执行结果后,进入Recv阶段。该情况下本发明的一种WTB链路层接口适配器的实现方法的时序图如图2所示:
在Send阶段,上位机适配模块封装好的数据被分割成数据包后,交予数据包(字节流)来发送。数据包(字节流)发送层将分割后的所有数据包依次发送到WTB网卡适配模块。在发送每个数据包前,首先要进行数据封装,然后上位机适配模块传输包,将数据包发送给WTB网卡适配模块端。
在WTB网卡适配模块端收完包后,WTB网卡适配模块需要用一个字节的确认数据(如RST确认)通知上位机端该包是否发送成功。如,当包内容出现错误时,确认数据RST为0xFF。而当包成功接收处理后,则确认数据RST为0x01。
在Recv阶段,上位机收到确认数据后,根据其内容判断本次发包是否成功,并将结果返回给上层。至此一个数据包发送完毕,可进行其它数据包发送等操作。
该情况下本发明的一种WTB链路层接口适配器的实现方法的具体执行过程如图3所示,包括如下步骤S101至步骤S105的过程:
步骤S101,上位机适配模块进行数据封装。
上位机适配模块在用户调用WTB的链路层功能接口请求传输数据时,上位机适配模块获取用户调用WTB的链路层功能接口的接口编号以及参数,将该接口编号以及参数进行封装。
在上位机适配模块一端,当用户调用链路层接口时,上位机适配模块的适配器Adapter层需要接受并获取到用户调用的WTB的链路层功能接口的接口编号以及参数,并将其封装。数据封装时,首先向参数缓冲区放入4 个字节的接口编号(函数序列号);然后对于各个接口参数值,按照其在接口声明中的顺序依次封装到参数缓冲区中;最后加入4个字节的CRC校验值,通过调用trans_Send()接口发送给下一层。
步骤S102,数据分包。
在此步骤,上位机适配模块负责将封装好的数据缓冲区的数据分割成固定长度的数据包,以便后续将其全部发送给WTB网卡适配模块。
对于一些链路层接口调用,其调用参数和返回值数据长度会达到千字节的量级。该量级的封装数据如果一次性通过硬件传输容易出现错误,并且FPGA也很难划分出足够的缓冲区来存储数据。另外,如果在数据传输过程中发送中断,那么需要有一种分包传输机制来保证适配器两端都会回到正常状态重新开始,同时保证避免中断后再次调用其它接口时发生数据串扰的问题。
该分包传输机制如图4所示,图4中,左侧为上位机适配模块的数据分包和收包层,右侧为WTB网卡适配模块的数据分包和收包层。通过该分包传输机制,将上层封装后的数据分割成固定长度的数据包而后再依次发送。
数据分包时,上位机适配模块将数据包分成头包和非头包两种格式,第一个数据包为头包格式,而其它数据包则符合非头包的格式。然后调用 gp_command_p()接口将每一个数据包发送给下一层次进行传输。
头包格式如图5所示,非头包格式如图6所示。头包和非头包这两种数据包的长度最长均为122字节。对于头包和非头包,其第一个字节分为三部分,即最高位的头包标志、次高位的回调标志和其余六位组成的序列号SN字段。
头包标志为1表示该数据包是头包,为0表示非头包。
回调标志若为1表示WTB链路层发生了某些事件,需要通知上位机端进行回调。
序列号SN字段则表示该数据包的序列号,在一次适配器接口调用的过程中,发送参数和接收结果的数据包的SN是一致的。一旦发生不一致,则适配器可知上一次传输已经中断,应当开始新的SN的接口调用,这样避免了调用中断而发生数据串扰。执行完一次调用后,SN会加1,开始准备下一次的调用。当到达最大值63时,SN回到0值继续使用。
头包的一个特殊字段是在首字节后的4个字节表示数据总长度,该长度就是本次接口调用所要传输的数据总长度,并且以大端形式存储。而非头包则无此字段,直接在首字节后添加数据部分。因此,头包的数据部分最长为117字节,而非头包数据部分最长为121字节。若需要发送的总数据长度不超过117字节,则一个头包即可发送完毕。否则在头包发送完之后,根据余下的数据长度发送若干非头包即可。
步骤S103,数据包(字节流)发送。
数据包(字节流)发送层负责将分割后的所有数据包依次发送到WTB 网卡适配模块,上位机适配模块封装好的数据被分割成若干个数据包后,交予数据包(字节流)发送层来发送。数据包(字节流)发送层将分割后的所有数据包依次发送到WTB网卡适配模块。上位机通过FPGA接口将数据包发送给WTB网卡适配模块端。上位机适配模块收到WTB网卡适配模块端的确认数据后,根据其内容判断本次发包是否成功,并将结果返回给上层。至此一个数据包发送完毕,可进行其它数据包发送等操作。
针对每一个数据包的发送,上位机适配模块向WTB网卡适配模块发送时遵循一个数据传输机制,如图7所示,图中箭头方向表示数据方向。图7中可以看出,每个数据包的发送都要经过6个步骤:
首先上位机适配模块的适配器检查是否可向FPGA接口写入数据,若不可写,则反复查询,直到当查询次数到达某上限值时,则认为超时错误发生,上位机适配器直接返回错误;若可写,首先发送一个写数据命令,之后写入数据长度并将数据按字节依次通过FPGA接收寄存器写入FPGA 芯片中。FPGA芯片获取到数据后,将其写入共享内存的特定位置中,并发出一个上位机发送数据中断给ARM芯片,通知ARM芯片已经有新数据包到达。此时ARM芯片处理完中断后,在主循环中访问共享内存,并将数据读出即可。
步骤S104,WTB网卡适配模块数据包接收。
如图4右侧所示,WTB网卡适配模块适配器端运行着一个通信协议的状态机,该状态机有三个状态:即RECV_ARG_HEAD状态,RECV_ARG 状态以及SEND_RESULT状态,分别实现了WTB网卡适配模块的数据包的接收和发送。
首先该状态机在默认的RECV_ARG_HEAD状态,接收到正确的头包后,进入RECV_ARG状态;在RECV_ARG状态下,接收其它的非头包数据。ARM端此时解析该数据包,并获取包头的长度和命令字信息。之后 ARM将这两个字段和包数据交予协议上层数据封装和解析层处理,该层首先判断长度是否合法,然后检查命令字是否为‘P’,并对数据包内容进行解析,获取头包与SN信息,共同判断该包是否有效。
下面对WTB网卡适配模块运行的通信协议状态机的三个状态下所执行的任务以及迁移条件进行说明。
RECV_ARG_HEAD状态:默认情况下状态机处于该状态下,并且不停轮询FPGA中上位机有无发数据包。若轮询错误err则表示无数据包;若有数据包,但是数据包为非头包,或者数据包本身格式有误,则仍按err条件回到该状态下重新轮询。因此仅当轮询到正确的头包时,状态机按ok条件进入RECV_ARG状态,继续接收其它可能的数据包。该状态的目的主要是用来拦截错误数据包造成的影响。保证每次都是一个正确的适配器接口调用。
RECV_ARG状态:在该状态下,状态机会判断是否已经将所有数据接收完毕。若当前接收正确并且没有接收完毕,则按ok AND NOT fin条件继续在此状态下接收其它的数据包。若任意一次数据包接收发生错误,则按 err条件返回到RECV_ARG_HEAD状态重新开始等待下一次的接口调用。若正确接收完毕,则使用收到的参数调用相对应的链路层接口函数。执行完毕并获取执行结果后,按ok AND fin条件进入到SEND_RESULT状态将执行结果返回。
SEND_RESULT状态:在该状态下,状态机同样将封装后的执行结果分割成数据包,并按次序依次发送给上位机端。若某次发送错误或者发送完毕,则按err OR fin回到RECV_ARG_HEAD状态重新开始。否则按ok AND NOT fin条件继续在此状态下发送。
步骤S105,当WTB网卡适配模块接收完所有的数据包后,WTB网卡适配模块执行WTB链路层接口功能。
在状态机RECV_ARG状态,当接收完所有的数据包后,在WTB网卡适配模块的适配器Adapter层进行数据解析,检查crc校验是否正确。然后获取接口编号和参数,并调用WTB链路层接口执行的真实接口的功能。执行完毕后,进入到SEND_RESULT状态等待将执行结果封装发送给上位机适配模块即可。
步骤S106,上位机适配模块等待调用结果的返回,并当接收到返回结果后,将返回结果输出。
当上位机适配模块将所有的数据包发送完毕后进入接收Recv阶段,上位机适配模块的适配器Adapter层等待调用结果的返回,并当接收到返回结果后,上位机适配模块将返回结果输出。
至此,实现了WTB链路层接口功能的远程调用执行。
二、上位机适配模块向WTB网卡适配模块请求接收数据的处理过程
上位机适配模块在用户调用WTB的链路层功能接口请求接收数据后,上位机接收一个数据包的过程同样由Send阶段和Recv阶段这两个阶段来完成,分别对应接收数据请求及数据包回复阶段。接收数据请求同样由上位机主动发起,上位机适配模块发起接收数据请求后,首先进入发送Send 阶段,进行数据封装、分包和发送;当ATM返回执行结果后,进入Recv 阶段。该情况下本发明的一种WTB链路层接口适配器的实现方法的时序图如图8所示:
左侧为上位机适配模块,右侧为WTB网卡适配模块。上位机进入Send 阶段,发送接收数据请求命令的数据包过程与上面步骤S101中的Send阶段的过程类似,不同的是通过调用gp_command_g()接口来发送数据包。当上位机进入recv阶段后,针对WTB网卡适配模块反馈的数据,首先构造一个传输包头,其格式与上面Send阶段描述的相同,同样是两个字节。第一个字节为0,表示无数据传输。第二个字节为命令字符‘g’,表示该次数据传输是从ARM获取数据,包头后无其它数据。之后上位机适配模块将数据传输出去。
该情况下本发明的一种WTB链路层接口适配器的实现方法的具体执行过程如图9所示,包括如下步骤S201至步骤S203的过程:
步骤S201,上位机适配模块发送接收数据请求。
上位机主动发起接收数据请求,通过其适配器Adapter层构造接收数据请求数据包,并进行数据封装、分包,并经过FPGA接口发送给WTB网卡适配模块此过程与上面步骤S101中的Send阶段的过程相同,不同的是通过调用gp_command_g()接口来主动发起接收数据请求。
步骤S202,WTB网卡适配模块返回执行的结果数据。
WTB网卡适配模块收到上位机适配模块的接收数据请求后,通过 FPGA层将有效的执行结果返回给上位机适配模块。此步骤的详细过程: WTB网卡适配模块将收到的数据进行解析,判断长度是否合法,然后检查命令字符是否为‘g’,来判断数据包是否有效。若无效则不回复任何数据,有效则将结果数据也同样经过数据封装、分包、传输,通过WTB网卡适配模块适配器协议中的状态机中SEND_RESULT状态将执行结果通过FPGA 层传回上位机适配模块。
针对每个数据包的发送,WTB网卡适配模块向上位机适配模块采用如图10所示的数据传输机制,图中箭头表示了数据的传输方向。
可以看出,WTB网卡适配模块向上位机适配模块发送数据的过程所使用的数据传输机制中,由于FPGA芯片无法直接通知上位机有新数据到达,因此上位机适配模块通过轮询FPGA接口状态是否可读方式来检查是否有数据;ARM芯片准备好数据后,将其写入共享内存的数据区特定位置,然后向命令区的特定位置写入“设置可读”的Request命令和对应参数值。 FPGA芯片查询到命令后,将FPGA接口置为可读和可写。此时上位机适配模块轮询时获知有效数据,则写入读命令字。之后上位机适配模块读出数据长度,并按长度依次读出数据的每个字节。当上位机适配模块读取完该数据包中的所有数据后,FPGA芯片将上位机适配模块的FPGA接口置为不可读,至此完成该数据包的从WTB网卡适配模块到上位机适配模块的传输。
步骤S203,上位机适配模块接收结果数据,将该结果数据传输出去。
上位机适配模块在步骤S201中调用gp_command_g()接口的同时可从 FPGA层中获取WTB网卡适配模块返回的数据包。首先获取头包,计算出整个数据的大小,然后不断的收取非头包的数据。所有的数据包接收完毕后,进行结果解析,解析4个字节的crc校验码,然后是1个字节的执行结果标号,之后是若干字节的返回数据,将该结果数据传输给上层。
至此,完成了一次WTB链路层接口功能的远程调用并返回执行结果。
由上述本发明的技术方案可以看出,通过发送阶段和接收阶段中每个数据包的处理,即可保证数据包能够正确地传输,并且双方均可知一次数据包发送的结果,从而可以通知上层进行相应处理。另外上位机适配模块发送和接收数据包的逻辑实际上是统一的,即发送命令和参数、获取返回结果两个阶段,这样简化了FPGA逻辑处理的复杂性,并且方便实现。
虽然本发明已以较佳实施例公开如上,但实施例并不限定本发明。在不脱离本发明之精神和范围内,所做的任何等效变化或润饰,同样属于本发明之保护范围。因此本发明的保护范围应当以本申请的权利要求所界定的内容为标准。