一种基于BINARY的数据流转换方法与流程

未命名 08-03 阅读:113 评论:0

一种基于binary的数据流转换方法
技术领域
1.本发明涉及数据转换技术领域,尤其涉及一种基于binary的数据流转换方法。


背景技术:

2.binary数据格式是上海证券交易所行情网关数据接口规范其中之一,即上海证券交易所行情网关binary数据接口规范;通过binary协议接入上海证券交易所行情网关mdgw进行行情数据传输的机制和相关数据交换格式。
3.binary所有数值型字段采用高字节序(big_endian)编码,每条binary消息由消息头、消息体和消息尾组成,消息最大长度为8k字节。但是binary消息中消息头、消息体和消息尾,它们的数据类型不一致,而上游硬件解码发过来的数据对应到binary的每个字段的长度都是固定长度16b(128bit),若直接发送这些固定长度的数据流,存在两个问题:
4.一是下游端接收数据需要修改格式,不利于系统的兼容性;
5.二是就会造成数据长度冗余,从而降低数据传输的效率和增加数据接收延时。
6.因此,急需一种新的技术方案来解决该问题。


技术实现要素:

7.本发明的目的在于克服上述现有技术的问题,提供了一种基于binary的数据流转换方法,用以解决传统技术方案中存在的下游端接收数据需要修改格式,不利于系统的兼容性;以及易造成数据长度冗余,从而降低数据传输的效率和增加数据接收延时的随机数问题。
8.上述目的是通过以下技术方案来实现:
9.一种基于binary的数据流转换方法,包括如下步骤:
10.步骤(1)fid以及相关参数的生成通过fid模块根据binary数据格式的每个字段长度和bram储存模块的位宽给每个字段生成一个fid,并产生一一对应的三个参数,这三个参数用于将原始数据流按照binary数据格式存储在bram储存模块中;
11.步骤(2)数据的接收通过数据输入模块接收上游fast硬件解码系统发过来的fast数据流,并将接收的所述fast数据流分别发送到数据格式模块和数据转换和存储模块进行后续的处理;所述数据格式模块还可以接收上游step硬件解码系统发过来的step数据流;
12.步骤(3)数据格式的头尾字段的生成所述数据格式模块根据所述step数据流填充binary头部字段,通过计算所述fast数据流中数据的个数完成头部长度字段,同时将所述fast数据流中的数据按照8bit累加的方式计算校验和,完成尾部字段的生成;
13.步骤(4)数据的转换和存储通过数据转换和存储模块将步骤(3)中所述fast数据流与步骤(1)中的所述fid一一对应,再根据与所述fid对应的存储的地址(addr_offset)、位置(byte_ptr)以及字段的字节数(byte_cnt)转换成binary数据格式中每个字段的数据,并且产生we(bram读写信号)、addr_offset(bram写地址)、din(8b)(8b数据);
14.步骤(5)数据的输出待整个所述fast数据流存储完全后,数据输出模块根据axis4
握手机制按照地址依次将bram存储模块中的数据输出。
15.进一步地,步骤(1)中所述通过fid生成模块根据binary数据格式规则,给格式中的每个字段生成一个唯一的字段id,记作fid;fid转换模块根据所述fid以及binary数据格式中每个字段的位置和位宽,产生每个字段在barm存储模块一一对应的存储的地址、位置以及字段的字节数。
16.进一步地,步骤(2)中所述fast数据流接收的握手协议是axis4,根据valid、ready信号都是高电平来握手,达到接收数据的操作,通过判断last信号的值来判断单个fast数据包是否结束;计算出每个fast数据流的个数,再根据这个计算出bodylength的值。
17.进一步地,步骤(3)中所述数据格式模块包括格式头部生成模块和格式尾部生成模块,所述格式头部生成模块根据binary接口规范生成binary格式的头部字段,所述头部字段包括msgtype字段、sendingtime字段和msgseqnum字段,其中,所述msgtype字段为固定值m102,所述sendingtime字段和所述msgseqnum字段从所述step数据流中获取,设定bodylength表示消息体长度,该消息体长度不包括消息头部和尾部;所述格式尾部生成模块根据binary接口规范来生成binary格式的尾部字段,根据binary接口规范规定,尾部字段(32bit)的值就是校验和(8bit),校验和的计算不是每个字段相加,而是每个字段以8bit即一个字节分割,然后依次累加,当last拉高,fast数据流最后一个数据到来,此时将校验和的累加值赋给尾部字段。
18.进一步地,步骤(4)中所述数据转换和存储模块包括数据流转换模块和barm存储模块,通过所述数据流转换模块根据生成的所述fid和与之一一对应的地址(addr_offset)、位置(byte_ptr)以及字段的字节数(byte_cnt),再结合所述fast数据流采用的模板提取出binary数据格式所需要的字段,把数据头部数据、尾部数据以及从fast中获取的数据转换成binary数据格式数据流,以便后续将数据存储到bram;通过所述barm存储模块把数据流转换模块出的头部字段、尾部字段、从fast中获取的binary数据格式数据流,按照binary数据格式按顺序存入barm存储模块中。
19.进一步地,所述步骤(5)具体为:通过所述数据输出模块将存储在所述bram存储模块中的binary数据格式数据流输出,按照地址顺序64bit依次以axis4协议输出。
20.进一步地,所述binary数据格式数据流的最后一个数据由于未满64位,因此将axis4协议的keep信号修改为8’h0000_0111,并且同时输出last信号,表示这是数据流的最后一位。
21.进一步地,所述数据输入模块、所述数据格式模块、所述fid模块、所述数据转换和存储模块、和所述数据输出模块设置于fpga或aisc中。
22.有益效果
23.本发明所提供的一种基于binary的数据流转换方法,可作为一个独立的模块应用于上游step/fast硬件解码系统和下游mds软件系统这两个不同规约之间,使得这两个不同规约的系统之间可以不进行任何修改而实现正常通信;通过将上游端每个字段都是原始固定位数输出的数据流转成binary数据格式输出数据流,使得硬件解码后数据流能够符合binary数据格式输出,下游端能够直接不做修改接收解码数据,兼容性更高,本方法可提高整个数据链路的兼容性和规范性。
附图说明
24.图1为本发明所述一种基于binary的数据流转换方法的流程图;
25.图2为本发明所述一种基于binary的数据流转换方法的binary数据格式中每个字段与fid的对应图;
26.图3为本发明所述一种基于binary的数据流转换方法的binary数据格式中每个字段在bram存储模块中存储位置示意图。
具体实施方式
27.下面根据附图和实施例对本发明作进一步详细说明。所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
28.如图1所示,一种基于binary的数据流转换方法,通过将上游端每个字段都是原始固定位数输出的数据流转成binary数据格式输出数据流,使得硬件解码后数据流能够符合binary数据格式输出,包括如下步骤:
29.步骤(1)fid以及相关参数的生成通过fid模块根据binary数据格式的每个字段长度和bram储存模块的位宽给每个字段生成一个fid,并产生一一对应的三个参数,这三个参数用于将原始数据流按照binary数据格式存储在bram储存模块中;
30.步骤(2)数据的接收通过数据输入模块接收上游fast硬件解码系统发过来的fast数据流,并将接收的所述fast数据流分别发送到数据格式模块和数据转换和存储模块进行后续的处理;所述数据格式模块还可以接收上游step硬件解码系统发过来的step数据流;
31.步骤(3)数据格式的头尾字段的生成所述数据格式模块根据所述step数据流填充binary头部字段,通过计算所述fast数据流中数据的个数完成头部长度字段,同时将所述fast数据流中的数据按照8bit累加的方式计算校验和,完成尾部字段的生成;
32.步骤(4)数据的转换和存储通过数据转换和存储模块将步骤(3)中所述fast数据流与步骤(1)中的所述fid一一对应,再根据与所述fid对应的存储的地址(addr_offset)、位置(byte_ptr)以及字段的字节数(byte_cnt)转换成binary数据格式中每个字段的数据,并且产生we(bram读写信号)、addr_offset(bram写地址)、din(8b)(8b数据);
33.步骤(5)数据的输出待整个所述fast数据流存储完全后,数据输出模块根据axis4握手机制按照地址依次将bram存储模块中的数据输出。
34.本实施例的步骤(1)中所述通过fid生成模块根据binary数据格式规则,给格式中的每个字段生成一个唯一的字段id,记作fid;fid转换模块根据所述fid以及binary数据格式中每个字段的位置和位宽,产生每个字段在barm存储模块一一对应的存储的地址、位置以及字段的字节数。
35.具体的,如图2和3所示,一开始当fid=1,即fid1,此时存储地址(addr_offset)、位置(byte_ptr)以及字段的字节数(byte_cnt)分别是addr_offset1=8’d0,byte_ptr1=3’d0,byte_cnt1=4;
36.当fid=2,即fid2,此时存储地址(addr_offset)、位置(byte_ptr)以及字段的字节数(byte_cnt)分别是addr_offset2=8’d0,byte_ptr2=3’d4,byte_cnt2=8;
37.以此类推,完成整个binary格式在bram存储的映射。
38.本实施例的步骤(2)中所述fast数据流接收的握手协议是axis4,根据valid、ready信号都是高电平来握手,达到接收数据的操作,通过判断last信号的值来判断单个fast数据包是否结束;计算出每个fast数据流的个数,再根据这个计算出bodylength的值。
39.本实施例的步骤(3)中所述数据格式模块包括格式头部生成模块和格式尾部生成模块,所述格式头部生成模块根据binary接口规范生成binary格式的头部字段,所述头部字段包括msgtype字段、sendingtime字段和msgseqnum字段,其中,所述msgtype字段为固定值m102,所述sendingtime字段和所述msgseqnum字段从所述step数据流中获取,设定bodylength表示消息体长度,该消息体长度不包括消息头部和尾部;所述格式尾部生成模块根据binary接口规范来生成binary格式的尾部字段,根据binary接口规范规定,尾部字段(32bit)的值就是校验和(8bit),校验和的计算不是每个字段相加,而是每个字段以8bit即一个字节分割,然后依次累加,当last拉高,fast数据流最后一个数据到来,此时将校验和的累加值赋给尾部字段。
40.具体的,头部数据长度binary_len的计算——每次axis4握手,接收到了一个128bit数据fast_data[127:0],表示有一个fast字段输入,根据binary格式定义中的该字段的长度leni(单位是字节-btye),此时binary_len增加leni,最终直到整个fast数据流结束即last信号拉高;
[0041]
整体公式可以:binary
len
=∑
i(last=1)
leni[0042]
示例8bit累加代码如下(使用8bit累加检验和就是为了兼容不同的数据长度,无论字段是否多少个字节都能够满足检验和)
[0043]
以下为计算校验和的代码段:
[0044][0045]
校验和check_sum的计算:流程和上述头部数据长度binary_len的计算一致,每次axis4握手,接收到了一个128bit数据fast_datai[127:0],表示有一个fast字段输入,根据binary格式定义中的该字段的长度leni(单位是字节
‑‑
byte),然后从本次数据fast_datai[127:0]中提取出低leni位数据fast_datai[len
i-1:0],此时本字段的check_sumi按8bit累加,最终直到整个fast数据流结束即last信号拉高后将check_sumi累加:
[0046]
其中li=leni/8;
[0047]
最后有:check_sum=∑
i(last=1)
check_sumi。
[0048]
本实施例的步骤(4)中所述数据转换和存储模块包括数据流转换模块和barm存储模块,通过所述数据流转换模块根据生成的所述fid和与之一一对应的地址(addr_offset)、位置(byte_ptr)以及字段的字节数(byte_cnt),再结合所述fast数据流采用的模
板提取出binary数据格式所需要的字段,把数据头部数据、尾部数据以及从fast中获取的数据转换成binary数据格式数据流,以便后续将数据存储到bram;通过所述barm存储模块把数据流转换模块出的头部字段、尾部字段、从fast中获取的binary数据格式数据流,按照binary数据格式按顺序存入barm存储模块中。
[0049]
具体的,每次axis4握手,接收到了一个128bit数据fast_datai[127:0],表示有一个fast字段输入,根据该字段binary格式中的位置得到一个步骤(1)中的所述fid值fidi,在根据binary格式定义中的该字段的长度len

(单位是字节
‑‑
byte),然后从本次数据fast_datai[127:0]中提取出低leni位数据fast_datai[len
i-1:0],根据fidi可以找到这个字段在barm存储器一一对应的存储的地址、位置以及字段的字节数,然后将fast_datai[len
i-1:0]存入barm存储模块中。
[0050]
本实施例的所述步骤(5)具体为:通过所述数据输出模块将存储在所述bram存储模块中的binary数据格式数据流输出,按照地址顺序64bit依次以axis4协议输出。
[0051]
其中,所述binary数据格式数据流的最后一个数据由于未满64位,因此将axis4协议的keep信号修改为8’h00000111,并且同时输出last信号,表示这是数据流的最后一位。
[0052]
本实施例中所述数据输入模块、所述数据格式模块、所述fid模块、所述数据转换和存储模块、和所述数据输出模块设置于fpga或aisc中。
[0053]
以上所述仅为说明本发明的实施方式,并不用于限制本发明,对于本领域的技术人员来说,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.一种基于binary的数据流转换方法,其特征在于,包括如下步骤:步骤(1)fid以及相关参数的生成通过fid模块根据binary数据格式的每个字段长度和bram储存模块的位宽给每个字段生成一个fid,并产生一一对应的三个参数,这三个参数用于将原始数据流按照binary数据格式存储在bram储存模块中;步骤(2)数据的接收通过数据输入模块接收上游fast硬件解码系统发过来的fast数据流,并将接收的所述fast数据流分别发送到数据格式模块和数据转换和存储模块进行后续的处理;所述数据格式模块还可以接收上游step硬件解码系统发过来的step数据流;步骤(3)数据格式的头尾字段的生成所述数据格式模块根据所述step数据流填充binary头部字段,通过计算所述fast数据流中数据的个数完成头部长度字段,同时将所述fast数据流中的数据按照8bit累加的方式计算校验和,完成尾部字段的生成;步骤(4)数据的转换和存储通过数据转换和存储模块将步骤(3)中所述fast数据流与步骤(1)中的所述fid一一对应,再根据与所述fid对应的存储的地址、位置以及字段的字节数转换成binary数据格式中每个字段的数据,并且产生bram读写信号、bram写地址和8b数据;步骤(5)数据的输出待整个所述fast数据流存储完全后,数据输出模块根据axis4握手机制按照地址依次将bram存储模块中的数据输出。2.根据权利要求1所述的一种基于binary的数据流转换方法,其特征在于,步骤(1)中所述通过fid生成模块根据binary数据格式规则,给格式中的每个字段生成一个唯一的字段id,记作fid;fid转换模块根据所述fid以及binary数据格式中每个字段的位置和位宽,产生每个字段在barm存储模块一一对应的存储的地址、位置以及字段的字节数。3.根据权利要求1所述的一种基于binary的数据流转换方法,其特征在于,步骤(2)中所述fast数据流接收的握手协议是axis4,根据valid、ready信号都是高电平来握手,达到接收数据的操作,通过判断last信号的值来判断单个fast数据包是否结束;计算出每个fast数据流的个数,再根据这个计算出bodylength的值。4.根据权利要求3所述的一种基于binary的数据流转换方法,其特征在于,步骤(3)中所述数据格式模块包括格式头部生成模块和格式尾部生成模块,所述格式头部生成模块根据binary接口规范生成binary格式的头部字段,所述头部字段包括msgtype字段、sendingtime字段和msgseqnum字段,其中,所述msgtype字段为固定值m102,所述sendingtime字段和所述msgseqnum字段从所述step数据流中获取,设定bodylength表示消息体长度,该消息体长度不包括消息头部和尾部;所述格式尾部生成模块根据binary接口规范来生成binary格式的尾部字段,根据binary接口规范规定,尾部字段(32bit)的值就是校验和(8bit),校验和的计算不是每个字段相加,而是每个字段以8bit即一个字节分割,然后依次累加,当last拉高,fast数据流最后一个数据到来,此时将校验和的累加值赋给尾部字段。5.根据权利要求1所述的一种基于binary的数据流转换方法,其特征在于,步骤(4)中所述数据转换和存储模块包括数据流转换模块和barm存储模块,通过所述数据流转换模块根据生成的所述fid和与之一一对应的地址(addt_offset)、位置(byte_ptr)以及字段的字节数(byte_cnt),再结合所述fast数据流采用的模板提取出binary数据格式所需要的字段,把数据头部数据、尾部数据以及从fast中获取的数据转换成binary数据格式数据流,以
便后续将数据存储到bram;通过所述barm存储模块把数据流转换模块出的头部字段、尾部字段、从fast中获取的binary数据格式数据流,按照binary数据格式按顺序存入barm存储模块中。6.根据权利要求5所述的一种基于binary的数据流转换方法,其特征在于,所述步骤(5)具体为:通过所述数据输出模块将存储在所述bram存储模块中的binary数据格式数据流输出,按照地址顺序64bit依次以axis4协议输出。7.根据权利要求6所述的一种基于binary的数据流转换方法,其特征在于,所述binary数据格式数据流的最后一个数据由于未满64位,因此将axis4协议的keep信号修改为8’h0000_0111,并且同时输出last信号,表示这是数据流的最后一位。8.根据权利要求1所述的一种基于binary的数据流转换方法,其特征在于,所述数据输入模块、所述数据格式模块、所述fid模块、所述数据转换和存储模块、和所述数据输出模块设置于fpga或aisc中。

技术总结
本发明涉及数据转换技术领域,具体是一种基于BINARY的数据流转换方法,包括(1)FID以及相关参数的生成;(2)数据的接收;(3)数据格式的头尾字段的生成;(4)数据的转换和存储;(5)数据的输出。本方法通过将上游端每个字段都是原始固定位数输出的数据流转成BINARY数据格式输出数据流,使得硬件解码后数据流能够符合BINARY数据格式输出,下游端能够直接不做修改接收解码数据,兼容性更高,本方法可提高整个数据链路的兼容性和规范性。数据链路的兼容性和规范性。数据链路的兼容性和规范性。


技术研发人员:甘磊晶 崔建军 郑立荣 邹卓
受保护的技术使用者:上海特高信息技术有限公司
技术研发日:2023.05.30
技术公布日:2023/8/1
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐