基于FPGA的SRIO通讯方法、系统及FPGA与流程
未命名
10-18
阅读:151
评论:0
基于fpga的srio通讯方法、系统及fpga
技术领域
1.本发明涉及电子相关技术领域,尤其是涉及基于fpga的srio通讯方法、系统及fpga。
背景技术:
2.srio是面向嵌入式系统开发提出的高可靠、高性能、基于包交换的新一代高速互联技术,是面向串行背板、dsp和相关串行数据平面连接应用的串行rapidio接口。包含一个三层结构的协议,即物理层、传输层、逻辑层。在通信领域除了srio网络之间的互联通信,还有各种基于各种接口转换成srio接口进行数据通信,fpga作为可编程逻辑器件,对于各个接口的协议转换相比较而言是更加便捷的。
3.当前在fpga中实现其他接口和srio通信,是先通过将前端数据转换成srio协议的数据格式,同时添加dma地址,通过srio的控制器,打包成三层结构的数据包格式,再通过srio传输网络将数据写入上位机的内存中。每次在写完固定长度的数据或者一帧数据后,发送一个doorbell中断信号去触发上位机的中断去告知数据到达。但当前端数据源带宽大于srio接口带宽时,设备中的缓存模块数据就会溢出,导致数据丢失,因此,目前在遇到数据源带宽大于srio接口带宽时,通常会考虑降低前端数据源带宽,或者使用其他更快的通信接口,限制了前端数据源带宽,也限制了srio接口的应用广泛性。
技术实现要素:
4.本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种基于fpga的srio通讯方法,采用多路srio接口实现dma通信,能够增加srio数据带宽,且上位机无需进行数据拼接,能够简化上位机操作。
5.本发明还提供了一种基于fpga的srio通讯系统、fpga、控制装置以及计算机可读存储介质。
6.根据本发明的第一方面实施例的基于fpga的srio通讯方法,所述fpga包括数据转发模块、分发模块和多个srio控制器,所述数据转发模块的带宽小于多个所述srio控制器的带宽总和,所述基于fpga的srio通讯方法包括以下步骤:
7.获取缓存模块输出的流控数据;
8.对所述流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对所述流控数据进行分包,得到内存地址连续的多个子数据包,每个所述子数据包的长度皆不超过srio传输最大包载荷;
9.将多个所述子数据包发送给所述分发模块,并在每发送总长度为预设中断长度的多个所述子数据包以及所有所述子数据包发送结束后发送一个分包中断信号给所述分发模块,并通过所述分发模块将所有所述子数据包和所有所述分包中断信号按轮询仲裁的方式分发给多个所述srio控制器,以使得多个所述srio控制器将所有所述子数据包和所有所述分包中断信号进行三层结构数据格式打包后发送至上位机;所述分包中断信号包括对应
的预设中断长度的多个所述子数据包的内存起始地址。
10.根据本发明实施例的基于fpga的srio通讯方法,至少具有如下有益效果:
11.通过对流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对流控数据进行分包,可以将流控数据分成内存地址连续的多个子数据包,并且在每发送总长度为预设中断长度的多个子数据包以及所有子数据包发送结束后生成一个分包中断信号,分包中断信号包括对应的预设中断长度的多个子数据包的内存起始地址,可以用于通知上位机数据已到达内存中,上位机则根据内存起始地址从上位机的内存中读取对应的总长度为预设中断长度的多个子数据包,直至读取完所有所述子数据包,上位机无需进行数据拼接。通过将流控数据分成内存地址连续的多个子数据包,并采用多路srio接口传输单路前端数据,不同的srio接口虽然在srio传输网络中传输的时间不一致,但由于内存地址和子数据包是一一对应的,所以最终到达上位机内存中也是连续的一片内存数据。如果其中一个或几个srio通路出现异常,那么在轮询分发srio控制器时就会跳过异常的srio控制器,不会影响正常通信。本发明实施例的基于fpga的srio通讯方法不仅能够增加srio数据带宽,且上位机无需进行数据拼接,能够简化上位机操作。
12.根据本发明的一些实施例,所述根据srio传输最大包载荷对所述流控数据进行分包,得到内存地址连续的多个子数据包,包括以下步骤:
13.每隔srio传输最大包载荷大小对所述流控数据进行一次分包,得到内存地址连续的大小皆为srio传输最大包载荷的多个固定数据包和一个小于等于srio传输最大包载荷的结束数据包。
14.根据本发明的一些实施例,还包括以下步骤:
15.接收由所述数据转发模块输出的所有所述子数据包和所有所述分包中断信号;
16.根据多个所述srio控制器一一对应分配多个异步fifo缓存块,每个所述异步fifo缓存块的容量皆大于srio传输最大包载荷;
17.将所有所述子数据包和所有所述分包中断信号一一对应写入多个所述异步fifo缓存块,从多个所述异步fifo缓存块异步读出所有所述子数据包和所有所述分包中断信号,并发送至多个所述srio控制器。
18.根据本发明的一些实施例,所述将所有所述子数据包和所有所述分包中断信号一一对应写入多个所述异步fifo缓存块,从多个所述异步fifo缓存块异步读出所有所述子数据包和所有所述分包中断信号,并发送至多个所述srio控制器,包括以下步骤:
19.将所有所述子数据包和所有所述分包中断信号按预设的第一时钟一一对应写入多个所述异步fifo缓存块;
20.从多个所述异步fifo缓存块按预设的第二时钟读出所有所述子数据包和所有所述分包中断信号,并发送至多个所述srio控制器。
21.根据本发明的一些实施例,还包括以下步骤:
22.接收由所述分发模块输出的所有所述子数据包和所有所述分包中断信号;
23.对所有所述子数据包进行三层结构数据格式打包,得到多个srio接口数据;
24.对所有所述分包中断信号进行三层结构数据格式打包,得到多个srio中断信号;
25.通过srio传输网络将多个所述srio接口数据和多个所述srio中断信号发送至所述上位机,其中,每个所述srio接口数据依据对应的内存地址存入所述上位机对应的内存
中,每个所述srio中断信号发送至所述上位机的处理器中。
26.根据本发明的一些实施例,还包括以下步骤:
27.接收由多个所述srio控制器输出的多个所述srio中断信号;
28.根据每个所述srio中断信号的内存起始地址从所述上位机的内存中读取对应的总长度为预设中断长度的多个所述srio接口数据,直至读取完所有所述srio接口数据。
29.根据本发明的一些实施例,所述流控数据由以下步骤得到:
30.获取有效数据,所述有效数据为原始非srio接口对应的前端数据进行解码后得到;
31.将所述有效数据转换为流控接口的所述流控数据,所述流控接口为所述srio控制器传输数据所支持的数据接口类型。
32.根据本发明的第二方面实施例的基于fpga的srio通讯系统,所述fpga包括数据转发模块、分发模块和多个srio控制器,所述数据转发模块的带宽小于多个所述srio控制器的带宽总和,所述基于fpga的srio通讯系统包括:
33.流控数据获取单元,用于获取缓存模块输出的流控数据;
34.数据处理单元,用于对所述流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对所述流控数据进行分包,得到内存地址连续的多个子数据包,每个所述子数据包的长度皆不超过srio传输最大包载荷;
35.数据分发单元,用于将多个所述子数据包发送给所述分发模块,并在每发送总长度为预设中断长度的多个所述子数据包以及所有所述子数据包发送结束后发送一个分包中断信号给所述分发模块,并通过所述分发模块将所有所述子数据包和所有所述分包中断信号按轮询仲裁的方式分发给多个所述srio控制器,以使得多个所述srio控制器将所有所述子数据包和所有所述分包中断信号进行三层结构数据格式打包后发送至上位机;所述分包中断信号包括对应的预设中断长度的多个所述子数据包的内存起始地址。
36.根据本发明实施例的基于fpga的srio通讯系统,至少具有如下有益效果:
37.通过对流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对流控数据进行分包,可以将流控数据分成内存地址连续的多个子数据包,并且在每发送总长度为预设中断长度的多个子数据包以及所有子数据包发送结束后生成一个分包中断信号,分包中断信号包括对应的预设中断长度的多个子数据包的内存起始地址,可以用于通知上位机数据已到达内存中,上位机则根据内存起始地址从上位机的内存中读取对应的总长度为预设中断长度的多个子数据包,直至读取完所有所述子数据包,上位机无需进行数据拼接。通过将流控数据分成内存地址连续的多个子数据包,并采用多路srio接口传输单路前端数据,不同的srio接口虽然在srio传输网络中传输的时间不一致,但由于内存地址和子数据包是一一对应的,所以最终到达上位机内存中也是连续的一片内存数据。如果其中一个或几个srio通路出现异常,那么在轮询分发srio控制器时就会跳过异常的srio控制器,不会影响正常通信。本发明实施例的基于fpga的srio通讯系统不仅能够增加srio数据带宽,且上位机无需进行数据拼接,能够简化上位机操作。
38.根据本发明的第三方面实施例的fpga,包括:
39.数据转发模块,用于执行如上述第一方面实施例所述的基于fpga的srio通讯方法;
40.分发模块,用于接收由所述数据转发模块输出的所有所述子数据包和所有所述分包中断信号,并按轮询仲裁的方式将所有所述子数据包和所有所述分包中断信号分发出去;
41.多个srio控制器,用于接收由所述分发模块输出的所有所述子数据包和所有所述分包中断信号,并将所有所述子数据包和所有所述分包中断信号进行三层结构数据格式打包后发送至上位机;多个所述srio控制器的带宽总和大于所述数据转发模块的带宽。
42.根据本发明实施例的fpga,至少具有如下有益效果:
43.通过对流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对流控数据进行分包,可以将流控数据分成内存地址连续的多个子数据包,并且在每发送总长度为预设中断长度的多个子数据包以及所有子数据包发送结束后生成一个分包中断信号,分包中断信号包括对应的预设中断长度的多个子数据包的内存起始地址,可以用于通知上位机数据已到达内存中,上位机则根据内存起始地址从上位机的内存中读取对应的总长度为预设中断长度的多个子数据包,直至读取完所有所述子数据包,上位机无需进行数据拼接。通过将流控数据分成内存地址连续的多个子数据包,并采用多路srio接口传输单路前端数据,不同的srio接口虽然在srio传输网络中传输的时间不一致,但由于内存地址和子数据包是一一对应的,所以最终到达上位机内存中也是连续的一片内存数据。如果其中一个或几个srio通路出现异常,那么在轮询分发srio控制器时就会跳过异常的srio控制器,不会影响正常通信。本发明实施例的fpga不仅能够增加srio数据带宽,且上位机无需进行数据拼接,能够简化上位机操作。
44.根据本发明的第四方面实施例的控制装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面实施例所述的基于fpga的srio通讯方法。由于控制装置采用了上述实施例的基于fpga的srio通讯方法的全部技术方案,因此至少具有上述实施例的技术方案所带来的所有有益效果。
45.根据本发明的第五方面实施例的计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行如上述第一方面实施例所述的基于fpga的srio通讯方法。由于计算机可读存储介质采用了上述实施例的基于fpga的srio通讯方法的全部技术方案,因此至少具有上述实施例的技术方案所带来的所有有益效果。
46.本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
附图说明
47.本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
48.图1是本发明一实施例的fpga的系统框图;
49.图2是本发明一实施例的基于fpga的srio通讯方法的流程图。
50.附图标记:
51.数据转发模块100;
52.分发模块200;
53.srio控制器300;
54.上位机400;
55.缓存模块500。
具体实施方式
56.下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
57.在本发明的描述中,如果有描述到第一、第二等只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
58.在本发明的描述中,需要理解的是,涉及到方位描述,例如上、下等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
59.本发明的描述中,需要说明的是,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。
60.下面将结合图1和图2对本发明实施例的基于fpga的srio通讯方法进行清楚、完整的描述,显然,以下所描述的实施例是本发明一部分实施例,并非全部实施例。
61.根据本发明的第一方面实施例的基于fpga的srio通讯方法,fpga包括数据转发模块100、分发模块200和多个srio控制器300,数据转发模块100的带宽小于多个srio控制器300的带宽总和,基于fpga的srio通讯方法包括以下步骤:
62.获取缓存模块500输出的流控数据;
63.对流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对流控数据进行分包,得到内存地址连续的多个子数据包,每个子数据包的长度皆不超过srio传输最大包载荷;
64.将多个子数据包发送给分发模块200,并在每发送总长度为预设中断长度的多个子数据包以及所有子数据包发送结束后发送一个分包中断信号给分发模块200,并通过分发模块200将所有子数据包和所有分包中断信号按轮询仲裁的方式分发给多个srio控制器300,以使得多个srio控制器300将所有子数据包和所有分包中断信号进行三层结构数据格式打包后发送至上位机400;分包中断信号包括对应的预设中断长度的多个子数据包的内存起始地址。
65.原始非srio接口对应的前端数据进行解码后得到有效数据,有效数据经过缓存模块500转换为流控接口的流控数据,流控数据的带宽大于单个srio接口的带宽,此时采用单个srio接口可能会导致数据丢失。在本发明的一些实施例中,流控接口为axis接口。本发明实施例的数据转发模块100、分发模块200和多个srio控制器300皆采用带握手协议的数据流接口,即axis接口。srio控制器300只能通过axis接口传输数据。
66.需要说明的是,流控接口不仅可以为axis接口,也可以为其他的带流量控制的接
口,具体的接口类型根据实际选择的fpga的相关数据决定,不能看作是对本发明的限定。
67.此外,还需要说明的是,缓存模块500可以是本发明实施例的fpga中的一部分,也可以是外部设备的一部分,不能看作是对本发明的限定。
68.srio传输最大包载荷为256byte,所以数据转发模块100每隔256byte或者当前数据帧结束进行一次分包,这样能保证传输的最大效率。
69.每发送总长度为预设中断长度的多个子数据包以及所有子数据包发送结束后发送一个分包中断信号给分发模块200,是因为每传输一定长度的数据包,需要发送中断提醒上位机400数据到达,以便上位机400根据分包中断信号的内存起始地址从上位机400的内存中读取对应的总长度为预设中断长度的多个srio接口数据,直至读取完所有srio接口数据,上位机400无需进行数据拼接,可以简化上位机400操作。数据帧结束也会发一个分包中断信号,这是为了防止其中一个帧出现错误而导致错误积累。当帧结束时就会跳转到下一个预设中断长度起始位置,而不会继续当前地址,导致错误积累。
70.需要说明的是,预设中断长度可以根据实际情况进行调整,在此不作具体限定。在一些实施例中,如果一帧流控数据为512kb,预设中断长度为1mb,那么在帧结束也会触发分包中断信号,同时会清空预设中断长度,进入下一个预设中断长度的起始地址。比如说,流控数据的长度为0.5m时,该0.5m的流控数据结尾会触发分包中断信号,并且下一帧流控数据内存起始地址会跳转到第二个1m的起始位置,也就是说每一帧的开始都和预设中断长度对齐。
71.中断触发机制是到达预设中断长度或者数据帧结束,如果正好重叠,那么只取一个。如果担心中断太快处理不过来,由于中断上的携带内存起始地址是以预设中断长度为间隔的,只需要观察收到的分包中断信号是否连续,就可以判断出是否丢失中断,如果丢失中断,那么就根据差值去前面的内存地址补读取数据。如果担心小数据帧的传输过程中,中断先于数据到达,那么可以使用n_write_r这种带回复的传输类型(大数据帧使用n_write),确保数据已经送达再传输分包中断信号。需要说明的是,n_write_r、n_write为本领域技术人员可知的现有技术,在此不再进行赘述。
72.分发模块200将所有子数据包和所有分包中断信号按轮询仲裁的方式分发给多个srio控制器300,可以采用异步fifo缓存块实现。具体包括以下步骤:
73.接收由数据转发模块100输出的所有子数据包和所有分包中断信号;
74.根据多个srio控制器300一一对应分配多个异步fifo缓存块,每个异步fifo缓存块的容量皆大于srio传输最大包载荷;
75.将所有子数据包和所有分包中断信号按预设的第一时钟一一对应写入多个异步fifo缓存块;
76.从多个异步fifo缓存块按预设的第二时钟读出所有子数据包和所有分包中断信号,并发送至多个srio控制器300。
77.在一些实施例中,假设有两路srio接口,那么就有两路srio控制器300(以下用srio_ctrl表示),其中srio_ctrl_0和srio_ctrl_1的位宽和时钟都是64bit和125mhz,分发模块200中的两个异步fifo缓存块,写入时是64bit*250mhz,读出时是64bit*125mhz,这样在写完一个子数据包给第一个异步fifo缓存块,转向第二个异步fifo缓存块时,第一个异步fifo缓存块还没读完,等到第二个异步fifo缓存块写完时,第一个异步fifo缓存块才读
完,又可以接着写,不会溢出。从异步fifo缓存块读出的数据直接到对应的srio_ctrl。且由于子数据包的内存地址是连续的,当某个srio_ctrl不工作时,轮询分包将会跳过那个异步fifo缓存块,不会发生丢包。
78.需要说明的是,第一时钟和第二时钟的具体值需要根据流控数据的数据带宽确定,不能看作是对本发明的限定。
79.多个srio控制器300将所有子数据包和所有分包中断信号进行三层结构数据格式打包后通过srio传输网络发送至上位机400,其中,每个子数据包依据对应的内存地址存入上位机400对应的内存中,每个分包中断信号发送至上位机400的处理器中。上位机400的处理器接收由多个srio控制器300输出的多个分包中断信号后,根据每个分包中断信号的内存起始地址从上位机400的内存中读取对应的总长度为预设中断长度的多个子数据包,直至读取完所有子数据包。
80.本发明实施例的基于fpga的srio通讯方法通过将流控数据分成内存地址连续的多个子数据包,并采用多路srio接口传输单路前端数据,不同的srio接口虽然在srio传输网络中传输的时间不一致,但由于内存地址和子数据包是一一对应的,所以最终到达上位机400内存中也是连续的一片内存数据。不仅能够增加srio数据带宽,且上位机400无需进行数据拼接,能够简化上位机400操作。另外,如果其中一个或几个srio通路出现异常,那么在轮询分发srio控制器时就会跳过异常的srio控制器,不会影响正常通信。
81.根据本发明实施例的基于fpga的srio通讯方法,通过对流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对流控数据进行分包,可以将流控数据分成内存地址连续的多个子数据包,并且在每发送总长度为预设中断长度的多个子数据包以及所有子数据包发送结束后生成一个分包中断信号,分包中断信号包括对应的预设中断长度的多个子数据包的内存起始地址,可以用于通知上位机400数据已到达内存中,上位机400则根据内存起始地址从上位机400的内存中读取对应的总长度为预设中断长度的多个子数据包,直至读取完所有子数据包,上位机400无需进行数据拼接。通过将流控数据分成内存地址连续的多个子数据包,并采用多路srio接口传输单路前端数据,不同的srio接口虽然在srio传输网络中传输的时间不一致,但由于内存地址和子数据包是一一对应的,所以最终到达上位机400内存中也是连续的一片内存数据。如果其中一个或几个srio通路出现异常,那么在轮询分发srio控制器时就会跳过异常的srio控制器,不会影响正常通信。本发明实施例的基于fpga的srio通讯方法不仅能够增加srio数据带宽,且上位机400无需进行数据拼接,能够简化上位机400操作。
82.在本发明的一些实施例中,参考图1和图2,根据srio传输最大包载荷对流控数据进行分包,得到内存地址连续的多个子数据包,包括以下步骤:每隔srio传输最大包载荷大小对流控数据进行一次分包,得到内存地址连续的大小皆为srio传输最大包载荷的多个固定数据包和一个小于等于srio传输最大包载荷的结束数据包。srio传输最大包载荷为256byte,所以数据转发模块100每隔256byte或者当前数据帧结束进行一次分包,这样能保证传输的最大效率。
83.在本发明的一些实施例中,还包括以下步骤:
84.接收由分发模块200输出的所有子数据包和所有分包中断信号;
85.对所有子数据包进行三层结构数据格式打包,得到多个srio接口数据;
86.对所有分包中断信号进行三层结构数据格式打包,得到多个srio中断信号;
87.通过srio传输网络将多个srio接口数据和多个srio中断信号发送至上位机400,其中,每个srio接口数据依据对应的内存地址存入上位机400对应的内存中,每个srio中断信号发送至上位机400的处理器中。
88.上位机400的处理器执行以下步骤:
89.接收由多个srio控制器300输出的多个srio中断信号;
90.根据每个srio中断信号的内存起始地址从上位机400的内存中读取对应的总长度为预设中断长度的多个srio接口数据,直至读取完所有srio接口数据。
91.三层结构数据格式,即物理层、传输层、逻辑层。多个srio接口数据内存地址连续,采用多路srio接口传输单路前端数据,不同的srio接口虽然在srio传输网络中传输的时间不一致,但由于内存地址和srio接口数据是一一对应的,所以最终到达上位机400内存中也是连续的一片内存数据。不仅能够增加srio数据带宽,且上位机400只要根据每个srio中断信号的内存起始地址从上位机400的内存中读取对应的总长度为预设中断长度的多个srio接口数据,直至读取完所有srio接口数据,无需进行数据拼接,能够简化上位机400操作。
92.需要说明的是,三层结构数据格式打包,以及通过srio传输网络传输数据的工作原理皆为本领域技术人员可知的现有技术,在此不再进行赘述。
93.在本发明的一些实施例中,流控数据由以下步骤得到:
94.获取有效数据,有效数据为原始非srio接口对应的前端数据进行解码后得到;
95.将有效数据转换为流控接口的流控数据,流控接口为srio控制器300传输数据所支持的数据接口类型。
96.原始非srio接口对应的前端数据进行解码后得到有效数据,有效数据经过缓存模块500转换为流控接口的流控数据,流控数据的带宽大于单个srio接口的带宽,此时采用单个srio接口可能会导致数据丢失。在本发明的一些实施例中,流控接口为axis接口。本发明实施例的数据转发模块100、分发模块200和多个srio控制器300皆采用带握手协议的数据流接口,即axis接口。srio控制器300只能通过axis接口传输数据。
97.为了更好地体现本发明实施例的基于fpga的srio通讯方法的优势,接下来以一个具体实施例进行详细说明。以下示例中数据转发模块100表示为srio_dma,分发模块200表示为srio_seg,srio控制器300表示为srio_ctrl。
98.假设前端数据当前想要传输一帧数据包,该帧数据包长度为5.5mb,解码后得到5.5mb的有效数据,该有效数据经过缓存模块500(一般是使用ddr作为缓存模块500)转换为5.5mb的流控数据。有效数据位宽为64bit,时钟为250mhz,经过缓存模块500后的流控数据的位宽和时钟不变。
99.缓存模块500输出5.5mb的流控数据至srio_dma,在srio_dma中添加路由信息及内存地址,并根据srio传输最大包载荷对流控数据进行分包。比如cpu上的设备id为0x10,那么就添加0x10的设备id信息,传输的类型为nwrite,就添加nwrite的传输信息。srio传输最大包载荷为256byte,传输的长度最大不超过256byte,内存地址就从0x00一直顺序到cpu上分配的最大内存空间,然后重复,其中基地址可以提前约定,偏移地址可以以0x100为单位递增。这样就将5.5mb的流控数据分包成最大有效载荷不超过256byte的多个子数据包,其中位宽和时钟不变,然后在每分包1mb数据,即多个子数据包的总长度到1mb,就发送一次
doorbell数据包,即分包中断信号,以及在5.5mb的流控数据结尾发送一次分包中断信号,分包中断信号中含有该1mb数据在内存中开始的地址。
100.srio_dma输出所有子数据包和所有分包中断信号至srio_seg。本发明采用多路srio接口,假设有两路srio接口,那么就有两路srio_ctrl,其中srio_ctrl_0和srio_ctrl_1的位宽和时钟都是64bit和125mhz,srio_seg中的两个异步fifo缓存块,写入时是64bit*250mhz,读出时是64bit*125mhz,这样在写完一个子数据包给第一个异步fifo缓存块,转向第二个异步fifo缓存块时,第一个异步fifo缓存块还没读完,等到第二个异步fifo缓存块写完时,第一个异步fifo缓存块才读完,又可以接着写,不会溢出。从异步fifo缓存块读出的数据直接到对应的srio_ctrl。且由于子数据包的内存地址是连续的,当某个srio_ctrl不工作时,轮询分包将会跳过那个异步fifo缓存块,不会发生丢包。
101.srio_seg输出所有子数据包和所有分包中断信号至多个srio_ctrl后,就转为srio的高速串行数据,经过物理信道传到上位机400的srio接口,写到上位机400的内存中,上位机400在收到分包中断信号后,就根据每个srio中断信号的内存起始地址从上位机400的内存中读取对应的1mb数据,直至读取完所有srio接口数据,由此便实现了多路srio传输单路前端数据,不同的srio接口虽然在srio传输网络中传输的时间不一致,但由于内存地址和子数据包是一一对应的,所以最终到达上位机400内存中也是连续的一片内存数据。
102.本发明实施例的基于fpga的srio通讯系统不仅能够增加srio数据带宽,且上位机400无需进行数据拼接,能够简化上位机400操作。
103.根据本发明的第二方面实施例的基于fpga的srio通讯系统,fpga包括数据转发模块100、分发模块200和多个srio控制器300,数据转发模块100的带宽小于多个srio控制器300的带宽总和,基于fpga的srio通讯系统包括流控数据获取单元、数据处理单元和数据分发单元。
104.流控数据获取单元,用于获取缓存模块500输出的流控数据;
105.数据处理单元,用于对流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对流控数据进行分包,得到内存地址连续的多个子数据包,每个子数据包的长度皆不超过srio传输最大包载荷;
106.数据分发单元,用于将多个子数据包发送给分发模块200,并在每发送总长度为预设中断长度的多个子数据包以及所有子数据包发送结束后发送一个分包中断信号给分发模块200,并通过分发模块200将所有子数据包和所有分包中断信号按轮询仲裁的方式分发给多个srio控制器300,以使得多个srio控制器300将所有子数据包和所有分包中断信号进行三层结构数据格式打包后发送至上位机400;分包中断信号包括对应的预设中断长度的多个子数据包的内存起始地址,预设中断长度小于所有子数据包的总长度。
107.本发明实施例的基于fpga的srio通讯系统采用了上述第一方面实施例的基于fpga的srio通讯方法的全部技术方案,具体细节在此不再进行赘述。
108.根据本发明实施例的基于fpga的srio通讯系统,通过对流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对流控数据进行分包,可以将流控数据分成内存地址连续的多个子数据包,并且在每发送总长度为预设中断长度的多个子数据包以及所有子数据包发送结束后生成一个分包中断信号,分包中断信号包括对应的预设中断长度的多个子数据包的内存起始地址,可以用于通知上位机400数据已到达内存中,上位机400则根据
内存起始地址从上位机400的内存中读取对应的总长度为预设中断长度的多个子数据包,直至读取完所有子数据包,上位机400无需进行数据拼接。通过将流控数据分成内存地址连续的多个子数据包,并采用多路srio接口传输单路前端数据,不同的srio接口虽然在srio传输网络中传输的时间不一致,但由于内存地址和子数据包是一一对应的,所以最终到达上位机400内存中也是连续的一片内存数据。如果其中一个或几个srio通路出现异常,那么在轮询分发srio控制器时就会跳过异常的srio控制器,不会影响正常通信。本发明实施例的基于fpga的srio通讯系统不仅能够增加srio数据带宽,且上位机400无需进行数据拼接,能够简化上位机400操作。
109.根据本发明的第三方面实施例的fpga,包括数据转发模块100、分发模块200和多个srio控制器300。
110.数据转发模块100,用于执行如上述第一方面实施例的基于fpga的srio通讯方法;
111.分发模块200,用于接收由数据转发模块100输出的所有子数据包和所有分包中断信号,并按轮询仲裁的方式将所有子数据包和所有分包中断信号分发出去;
112.多个srio控制器300,用于接收由分发模块200输出的所有子数据包和所有分包中断信号,并将所有子数据包和所有分包中断信号进行三层结构数据格式打包后发送至上位机400;多个srio控制器300的带宽总和大于数据转发模块100的带宽。
113.本发明实施例的fpga采用了上述第一方面实施例的基于fpga的srio通讯方法的全部技术方案,具体细节在此不再进行赘述。另外,fpga的电路结构和工作原理皆为本领域技术人员可知的现有技术,在此不再进行赘述。
114.根据本发明实施例的fpga,通过对流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对流控数据进行分包,可以将流控数据分成内存地址连续的多个子数据包,并且在每发送总长度为预设中断长度的多个子数据包以及所有子数据包发送结束后生成一个分包中断信号,分包中断信号包括对应的预设中断长度的多个子数据包的内存起始地址,可以用于通知上位机400数据已到达内存中,上位机400则根据内存起始地址从上位机400的内存中读取对应的总长度为预设中断长度的多个子数据包,直至读取完所有子数据包,上位机400无需进行数据拼接。通过将流控数据分成内存地址连续的多个子数据包,并采用多路srio接口传输单路前端数据,不同的srio接口虽然在srio传输网络中传输的时间不一致,但由于内存地址和子数据包是一一对应的,所以最终到达上位机400内存中也是连续的一片内存数据。如果其中一个或几个srio通路出现异常,那么在轮询分发srio控制器时就会跳过异常的srio控制器,不会影响正常通信。本发明实施例的fpga不仅能够增加srio数据带宽,且上位机400无需进行数据拼接,能够简化上位机400操作。
115.另外,本发明第四方面实施例还提供了一种控制装置,该控制装置包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序。处理器和存储器可以通过总线或者其他方式连接。
116.存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网
及其组合。
117.实现上述实施例的基于fpga的srio通讯方法所需的非暂态软件程序以及指令存储在存储器中,当被处理器执行时,执行上述实施例中的基于fpga的srio通讯方法。
118.以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
119.此外,本发明第五方面实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个处理器或控制器执行,例如,被上述控制装置的一个处理器执行,可使得上述处理器执行上述实施例中的基于fpga的srio通讯方法。
120.本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
121.上面结合附图对本发明实施例作了详细说明,但本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
技术特征:
1.一种基于fpga的srio通讯方法,其特征在于,所述fpga包括数据转发模块、分发模块和多个srio控制器,所述数据转发模块的带宽小于多个所述srio控制器的带宽总和,所述基于fpga的srio通讯方法包括以下步骤:获取缓存模块输出的流控数据;对所述流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对所述流控数据进行分包,得到内存地址连续的多个子数据包,每个所述子数据包的长度皆不超过srio传输最大包载荷;将多个所述子数据包发送给所述分发模块,并在每发送总长度为预设中断长度的多个所述子数据包以及所有所述子数据包发送结束后发送一个分包中断信号给所述分发模块,并通过所述分发模块将所有所述子数据包和所有所述分包中断信号按轮询仲裁的方式分发给多个所述srio控制器,以使得多个所述srio控制器将所有所述子数据包和所有所述分包中断信号进行三层结构数据格式打包后发送至上位机;所述分包中断信号包括对应的预设中断长度的多个所述子数据包的内存起始地址。2.根据权利要求1所述的基于fpga的srio通讯方法,其特征在于,所述根据srio传输最大包载荷对所述流控数据进行分包,得到内存地址连续的多个子数据包,包括以下步骤:每隔srio传输最大包载荷大小对所述流控数据进行一次分包,得到内存地址连续的大小皆为srio传输最大包载荷的多个固定数据包和一个小于等于srio传输最大包载荷的结束数据包。3.根据权利要求1所述的基于fpga的srio通讯方法,其特征在于,还包括以下步骤:接收由所述数据转发模块输出的所有所述子数据包和所有所述分包中断信号;根据多个所述srio控制器一一对应分配多个异步fifo缓存块,每个所述异步fifo缓存块的容量皆大于srio传输最大包载荷;将所有所述子数据包和所有所述分包中断信号一一对应写入多个所述异步fifo缓存块,从多个所述异步fifo缓存块异步读出所有所述子数据包和所有所述分包中断信号,并发送至多个所述srio控制器。4.根据权利要求3所述的基于fpga的srio通讯方法,其特征在于,所述将所有所述子数据包和所有所述分包中断信号一一对应写入多个所述异步fifo缓存块,从多个所述异步fifo缓存块异步读出所有所述子数据包和所有所述分包中断信号,并发送至多个所述srio控制器,包括以下步骤:将所有所述子数据包和所有所述分包中断信号按预设的第一时钟一一对应写入多个所述异步fifo缓存块;从多个所述异步fifo缓存块按预设的第二时钟读出所有所述子数据包和所有所述分包中断信号,并发送至多个所述srio控制器。5.根据权利要求1所述的基于fpga的srio通讯方法,其特征在于,还包括以下步骤:接收由所述分发模块输出的所有所述子数据包和所有所述分包中断信号;对所有所述子数据包进行三层结构数据格式打包,得到多个srio接口数据;对所有所述分包中断信号进行三层结构数据格式打包,得到多个srio中断信号;通过srio传输网络将多个所述srio接口数据和多个所述srio中断信号发送至所述上位机,其中,每个所述srio接口数据依据对应的内存地址存入所述上位机对应的内存中,每
个所述srio中断信号发送至所述上位机的处理器中。6.根据权利要求5所述的基于fpga的srio通讯方法,其特征在于,还包括以下步骤:接收由多个所述srio控制器输出的多个所述srio中断信号;根据每个所述srio中断信号的内存起始地址从所述上位机的内存中读取对应的总长度为预设中断长度的多个所述srio接口数据,直至读取完所有所述srio接口数据。7.根据权利要求1所述的基于fpga的srio通讯方法,其特征在于,所述流控数据由以下步骤得到:获取有效数据,所述有效数据为原始非srio接口对应的前端数据进行解码后得到;将所述有效数据转换为流控接口的所述流控数据,所述流控接口为所述srio控制器传输数据所支持的数据接口类型。8.一种基于fpga的srio通讯系统,其特征在于,所述fpga包括数据转发模块、分发模块和多个srio控制器,所述数据转发模块的带宽小于多个所述srio控制器的带宽总和,所述基于fpga的srio通讯系统包括:流控数据获取单元,用于获取缓存模块输出的流控数据;数据处理单元,用于对所述流控数据添加路由信息及内存地址,并根据srio传输最大包载荷对所述流控数据进行分包,得到内存地址连续的多个子数据包,每个所述子数据包的长度皆不超过srio传输最大包载荷;数据分发单元,用于将多个所述子数据包发送给所述分发模块,并在每发送总长度为预设中断长度的多个所述子数据包以及所有所述子数据包发送结束后发送一个分包中断信号给所述分发模块,并通过所述分发模块将所有所述子数据包和所有所述分包中断信号按轮询仲裁的方式分发给多个所述srio控制器,以使得多个所述srio控制器将所有所述子数据包和所有所述分包中断信号进行三层结构数据格式打包后发送至上位机;所述分包中断信号包括对应的预设中断长度的多个所述子数据包的内存起始地址。9.一种fpga,其特征在于,包括:数据转发模块,用于执行如权利要求1至7中任意一项所述的基于fpga的srio通讯方法;分发模块,用于接收由所述数据转发模块输出的所有所述子数据包和所有所述分包中断信号,并按轮询仲裁的方式将所有所述子数据包和所有所述分包中断信号分发出去;多个srio控制器,用于接收由所述分发模块输出的所有所述子数据包和所有所述分包中断信号,并将所有所述子数据包和所有所述分包中断信号进行三层结构数据格式打包后发送至上位机;多个所述srio控制器的带宽总和大于所述数据转发模块的带宽。10.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令用于执行如权利要求1至7中任意一项所述的基于fpga的srio通讯方法。
技术总结
本发明公开了基于FPGA的SRIO通讯方法、系统及FPGA,方法包括:获取流控数据;对流控数据添加路由信息及内存地址,并根据SRIO传输最大包载荷对流控数据进行分包,得到内存地址连续的多个子数据包;将多个子数据包发送给分发模块,并在每发送总长度为预设中断长度的多个子数据包后发送一个分包中断信号给分发模块,分发模块将所有子数据包和所有分包中断信号分发给多个SRIO控制器,多个SRIO控制器将所有子数据包和所有分包中断信号进行三层结构数据格式打包后发送至上位机。本发明实施例的基于FPGA的SRIO通讯方法不仅能够增加SRIO数据带宽,且上位机无需进行数据拼接,能够简化上位机操作。机操作。机操作。
技术研发人员:刘建德 郑林雕 付红明 朱亮
受保护的技术使用者:深圳市科思科技股份有限公司
技术研发日:2023.06.29
技术公布日:2023/10/11
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种高压互锁回路故障检测装置的制作方法 下一篇:一种油浸式变压器故障诊断方法
