一种Binary协议数据流的硬件解析方法与流程

文档序号:23418271发布日期:2020-12-25 11:39阅读:289来源:国知局
一种Binary协议数据流的硬件解析方法与流程

本发明涉及一种binary协议数据流的解析方法,尤其涉及一种硬件解析方法。



背景技术:

随着我国经济的发展,证券行业取得了巨大的进步,深圳证券交易所(以下简称“深交所”)作为我国主要的交易场所之一,每天会产生大量的交易数据。这些交易数据,通过binary协议(binary协议把业务需求流程格式化,使之成为一个可用计算机语言描述的功能流程,并在每个业务功能接口上统一交换格式,可参考工程技术标准《深圳证券交易所binary交易数据接口规范(ver1.13)》)进行传输并通过计算机进一步处理,由于交易数据量巨大,因此会带来资源占用严重、延迟较大的问题。



技术实现要素:

本发明要解决的技术问题是:提供一种可以减小计算机资源占用、降低延迟的binary协议数据流解析方法。

为了解决上述技术问题,本发明提出的技术方案是:一种binary协议数据流的硬件解析方法,所述硬件为fpga或aisc,并被配置为具有输入接口缓存、解码模块和输出接口缓存;

所述输入接口缓存用于存储接收的原始的binary协议数据流;

所述解码模块用于将数据流中的每个数据包按照binary协议进行字段匹配,匹配出的字段即为解码输出;

所述输出接口缓存用于缓存解码模块所解码输出的数据;

所述硬件执行以下步骤:所述输入接口缓存接收原始的binary协议数据流,并按fifo策略将数据流发送至解码模块,所述解码模块对数据流中的每个数据包进行解码后发送至输出接口缓存,所述输出接口缓存解码后的数据并按fifo策略输出从而得到解码后的码流;

其中,所述解码模块为一个顺序执行的状态机,其在解码数据流时,执行如下步骤:

s100、idle状态,等待数据流;

s200、message-header状态,将数据流中的数据包剥离包头,并将包头保存,供后续模块使用;

s300、message-length状态,将数据包剥离包数据长度,并将长度保存;

s400、message-analyze状态,根据步骤s200得到的包头数据,将数据包按其协议字段进行匹配从而分为三大类,并分别送入相应的子状态进行解码,即当协议字段为30xx92时,执行步骤s401,当协议字段为30xx91时,执行步骤s402,当协议字段为30xx11时,执行步骤s403;

s401、message-30xx92子状态,处理数据流中后缀为92的相关数据包,按照相应92字段的协议进行解码;

s402、message-30xx91子状态,处理数据流中后缀为91的相关数据包,按照相应91字段的协议进行解码;

s403、message-30xx11子状态,处理数据流中后缀为11的相关数据包,按照相应11字段的协议进行解码;

s500、message-crc状态,计算crc校验,丢弃错误数据包。

本发明的解析方法可以运行在fpga上也可运行在专用aisc上,通过硬件解码,克服了现有技术中的缺陷,大大提升了后续计算机的处理能力,减少了后续计算机的资源占用,并降低了处理延迟。本发明将解码模块配置为一个顺序执行的状态机,从而可以对数据流通过协议字段进行匹配后分类,并按不同的类分别进行处理,进一步提高了解码效率。

附图说明

下面结合附图对本发明作进一步说明。

图1是本发明实施例中的数据流传输示意图。

图2是输入接口缓存的示意图。

图3是解码模块的工作流程示意图。

具体实施方式

实施例

本实施例可以选用的硬件为fpga或专用aisc,本实施例中优选为fpga,fpga器件属于专用集成电路中的一种半定制电路,是可编程的逻辑列阵。在实施时,将相应的执行程序下载到fpga中,并将fpga配置为具有输入接口缓存、解码模块和输出接口缓存,所述输入接口缓存用于存储接收的原始的binary协议数据流,所述解码模块用于将数据流按照binary协议进行字段匹配,所述输出接口缓存用于缓存匹配出的字段。

如图2所示,输入接口缓存采用标准axi-stream接口的fifo存储器,数据速度快,对外可移植性强,可直接对接现有的pci-e设备或以太网设备。输出接口缓存与输入接口缓存的结构类似,也为axi-stream接口的fifo存储器,其接口速度快,移植方便。

本实施例中binary协议数据流的硬件解析方法由所述硬件执行以下步骤:如图1所示,所述输入接口缓存接收原始的binary协议数据流,并按fifo策略将数据流发送至解码模块,所述解码模块对数据流进行解码后发送至输出接口缓存,所述输出接口缓存将解码后的数据按fifo策略输出从而得到解码后的码流。

其中,所述解码模块为一个顺序执行的状态机,其在解码数据流时,如图3所示,执行如下步骤:

s100、idle状态,等待数据流;

s200、message-header状态,将数据流中的数据包剥离包头,并将包头保存,供后续模块使用;

s300、message-length状态,将数据包剥离包数据长度,并将长度保存;

s400、message-analyze状态,根据步骤s200得到的包头数据,将数据包按其协议字段进行匹配从而分为三大类,并分别送入相应的子状态进行解码,即当协议字段为30xx92时,执行步骤s401,当协议字段为30xx91时,执行步骤s402,当协议字段为30xx11时,执行步骤s403;

s401、message-30xx92子状态,处理数据流中后缀为92的相关数据包,按照相应92字段的协议进行解码;

s402、message-30xx91子状态,处理数据流中后缀为91的相关数据包,按照相应91字段的协议进行解码;

s403、message-30xx11子状态,处理数据流中后缀为11的相关数据包,按照相应11字段的协议进行解码;

s500、message-crc状态,计算crc校验,丢弃错误数据包。

执行完上述步骤后,即完成当前数据流的解码,并在缓存后经网络输出至客户端cpu。下一数据流来临后,重新执行步骤s100至步骤s500。

本实施例还可以作以下改进,即所述硬件被配置为还具有包重整模块,所述包重整模块用于将输入接口缓存发送的数据流中的数据包进行与解码模块相对应的位宽修改,然后再发送至解码模块。包重组模块可以对数据流中的数据包进行任意byte重组,即输入为8byte,但输出可以为1到8byte中的任意长度,这样在协议字段不确定的情况下,可任意调节输出长度,从而达到协议包重整效果。

本实施例在具体实施时,将解码程序下载到fpga或者固化到asic(需进行流片)中,深交所服务器发出交易数据流,经过网络接口或者pci-e接口输入至fpga或者asic,缓存在输入接口缓存中,经过包重整模块将每个数据包的长度进行调整,然后进入解码模块,解码模块按照上述步骤进行数据剥离与解码,得到解码数据发送至输出接口缓存,并经网络接口或者pci-e接口输出至客户端cpu,即可得到解码数据,解码速度快,解码延迟小。本实施例通过专用硬件解码,大大提升了解码速度,可减轻计算机负担,有较大的经济效益。

本发明不局限于上述实施例所述的具体技术方案,除上述实施例外,本发明还可以有其他实施方式。对于本领域的技术人员来说,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等形成的技术方案,均应包含在本发明的保护范围之内。

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