本发明涉及pcie接口领域,特别涉及一种pcie-srio数据交互处理方法。
背景技术:
国产cpu对外提供的高速总线接口多为pcie接口,在实际的工程项目应用中还需要使用srio等高速总线,目前国内还没有成熟的高速pcie-srio接口转换芯片能够完全满足工程项目需求,公司将采用国产fpga实现高速pcie-srio桥,满足国产cpu的工程应用中多种高速总线接口的特殊需求,使用国产化的硬件平台,确保信息安全。
常用的国外专用pcie-srio桥芯片,如idt公司的tsi721芯片,通常采用dma(directmemoryaccess,直接存储器访问)的形式进行数据交互,该方式虽然可以有效降低处理器的负担,但是在使用过程中并不能有效降低程序的开发难度和复杂度(如链表指针的维护)。
技术实现要素:
本发明提供了一种pcie-srio数据交互处理方法,以解决至少一个上述技术问题。
为解决上述问题,作为本发明的一个方面,提供了一种pcie-srio数据交互处理方法,包括:在处理器的内存空间划分容量为128mb的空间用于数据,为nwrite/nread/message/swrite各划分16mb的空间;
其中,nwrite为srio协议中的写事务,其作用是向目标设备的存储器指定地址中写入数据;
nread为srio协议中的读事务,其作用是从目标设备的存储器指定地址中读出数据;
message为srio协议中的消息事务,在某些情况下,本地设备不具备访问目标设备的存储器的能力,通过消息(message)可以实现数据从本地设备到目标设备的传递;
swrite为srio协议中的大数据流写事务,其作用是通过类dma操作的方式来实现高效的大数据量迁移。
优选地,nwrite操作时,其内部16mb空间以1024字节为单位划分为16384个存储单元,包括以下操作步骤:
步骤11,处理器写入需要发送的数据目标地址、数据包大小和数据内容写入到nwrite内存的第n个存储单元;
步骤12,处理器通过控制与状态处理单元通知系统有nwrite类型的操作需要处理;
步骤13,系统通过axi_mm主接口单元从nwrite内存的第n个存储单元中读取数据并发送给nwrite处理单元;
步骤14,nwrite处理单元对数据进行解析,按照srio协议所要求的格式进行打包并发送给srio接口;
步骤15,数据发送成功,通过控制与状态处理单元通知处理器;数据发送失败,通过控制与状态处理单元通知处理器;
步骤16,无论nwrite发送数据成功/失败,系统内部的nwrite操作计数器自动完成加1操作,以便于下次进行nwrite操作时自动从第n+1个存储单元获取数据(当当前处理的nwrite存储单元为16384时,则下一次处理的存储单元为1)。
优选地,nread操作时,其内部16mb空间以1024字节为单位划分为16384个存储单元,包括以下操作步骤:
步骤21,处理器写入需要读取的数据目标地址、数据包大小和数据内容写入到nread内存的第n个存储单元;
步骤22,处理器通过控制与状态处理单元通知系统有nread类型的srio操作需要处理;
步骤23,系统通过axi_mm主接口单元从nread内存的第n个存储单元中读取数据并发送给nread处理单元;
步骤24,nread处理单元对数据进行解析,按照srio协议所要求的格式进行打包并发送给srio接口;
步骤25,远端设备通过srio接口将读取的数据结果发送给nread处理单元;
步骤26,nread处理单元将数据按照nread存储单元的数据存储结构进行打包处理;
步骤27,通过axi_mm主接口处理单元将nread处理单元打包好的数据写回到nread的第n个存储单元;
步骤28,通过控制与状态处理单元通知处理器nread操作完成;
步骤29,如果在超时时间内未接收到远端设备所返回的nread数据,通过控制与状态处理单元通知处理器nread操作超时;
步骤210,无论nread操作成功/失败,系统内部的nread操作计数器自动完成加1操作,以便于下次进行nread操作时自动从第n+1个存储单元获取数据(当当前处理的nread存储单元为16384时,则下一次处理的存储单元为1)。
优选地,message操作时,其内部16mb空间以8192字节为单位划分为2048个存储单元,包括以下操作步骤:
步骤31,处理器写入message的邮箱号、优先级和数据内容写入到message内存的第n个存储单元;
步骤32,处理器通过控制与状态处理单元通知系统有message类型的srio操作需要处理;
步骤33,系统通过axi_mm主接口单元从message内存的第n个存储单元中读取数据并发送给message处理单元;
步骤34,message处理单元对数据进行解析,按照srio协议所要求的格式进行打包并发送给srio接口;
步骤35,远端设备通过srio接口将message接收应答发送给message处理单元;
步骤36,当所有message分段发送并得到响应后,message处理单元通过控制与状态处理单元通知处理器message操作完成;
步骤37,如果在超时时间内未接收到远端设备所返回的message应答,通过控制与状态处理单元通知处理器message操作超时;
步骤38,无论message操作成功/失败,系统内部的message操作计数器自动完成加1操作,以便于下次进行message操作时自动从第n+1个存储单元获取数据(当当前发送的message存储单元为2048时,则下一次处理的存储单元为1)。
优选地,swrite操作时,其内部16mb空间以1m字节为单位划分为16个存储单元,包括以下操作步骤:
步骤41,处理器写入swrite的目标地址、优先级和数据内容写入到swrite内存的第n个存储单元;
步骤42,处理器通过控制与状态处理单元通知系统有swrite类型的srio操作需要处理;
步骤43,系统通过axi_mm主接口单元从swrite内存的第n个存储单元中读取数据并发送给swrite处理单元;
步骤44,swrite处理单元对数据进行解析,按照srio协议所要求的格式进行打包并发送给srio接口;
步骤45,数据发送成功,通过控制与状态处理单元通知处理器;数据发送失败,通过控制与状态处理单元通知处理器;
步骤46,无论swrite发送数据成功/失败,系统内部的swrite操作计数器自动完成加1操作,以便于下次进行swrite操作时自动从第n+1个存储单元获取数据(当当前处理的swrite存储单元为8时,则下一次处理的存储单元为1)。
由于采用了上述技术方案,本发明在不增加处理器负担的同时,可有效的降低程序的开发难度和复杂度。
附图说明
图1示意性地示出了pcie-srio内部实现框图;
图2示意性地示出了128mb存储空间划分示意图。
具体实施方式
以下对本发明的实施例进行详细说明,但是本发明可以由权利要求限定和覆盖的多种不同方式实施。
本文提出了一种pcie-srio数据交互处理方式,在不增加处理器负担的同时,可有效的降低程序的开发难度和复杂度。
其中,nwrite/nread/message/swrite/maintenance/doorbell是srio总线的协议类型。
nwrite,srio协议中的写事务,其作用是向目标设备的存储器指定地址中写入数据;
nread,srio协议中的读事务,其作用是从目标设备的存储器指定地址中读出数据;
swrite,srio协议中的大数据流写事务,其作用是通过类dma操作的方式来实现高效的大数据量迁移;
message,srio协议中的消息事务,在某些情况下,本地设备不具备访问目标设备的存储器的能力,通过消息(message)可以实现数据从本地设备到目标设备的传递;
maintenacne,srio协议中的维护事务,用于配置/读取目标设备的维护寄存器的维护寄存器;
doorbell,srio协议中的门铃事务,本地设备用该事务将非常短的消息发送到目标设备,类似中处理器中的中断。
在处理器的内存空间划分容量为128mb的空间用于数据,为nwrite/nread/message/swrite各划分16mb的空间。
nwrite操作时,其内部16mb空间以1024字节为单位划分为16384个存储单元,nwrite的具体操作步骤:
1)处理器写入需要发送的数据目标地址、数据包大小和数据内容写入到nwrite内存的第n个存储单元;
2)处理器通过控制与状态处理单元通知系统有nwrite类型的操作需要处理;
3)系统通过axi_mm主接口单元从nwrite内存的第n个存储单元中读取数据并发送给nwrite处理单元;
4)nwrite处理单元对数据进行解析,按照srio协议所要求的格式进行打包并发送给srio接口;
5)数据发送成功,通过控制与状态处理单元通知处理器;数据发送失败,通过控制与状态处理单元通知处理器;
6)无论nwrite发送数据成功/失败,系统内部的nwrite操作计数器自动完成加1操作,以便于下次进行nwrite操作时自动从第n+1个存储单元获取数据(当当前处理的nwrite存储单元为16384时,则下一次处理的存储单元为1)。
nread操作时,其内部16mb空间以1024字节为单位划分为16384个存储单元,nread的具体操作步骤:
1)处理器写入需要读取的数据目标地址、数据包大小和数据内容写入到nread内存的第n个存储单元;
2)处理器通过控制与状态处理单元通知系统有nread类型的srio操作需要处理;
3)系统通过axi_mm主接口单元从nread内存的第n个存储单元中读取数据并发送给nread处理单元;
4)nread处理单元对数据进行解析,按照srio协议所要求的格式进行打包并发送给srio接口;
5)远端设备通过srio接口将读取的数据结果发送给nread处理单元;
6)nread处理单元将数据按照nread存储单元的数据存储结构进行打包处理;
7)通过axi_mm主接口处理单元将nread处理单元打包好的数据写回到nread的第n个存储单元;
8)通过控制与状态处理单元通知处理器nread操作完成;
9)如果在超时时间内未接收到远端设备所返回的nread数据,通过控制与状态处理单元通知处理器nread操作超时;
10)无论nread操作成功/失败,系统内部的nread操作计数器自动完成加1操作,以便于下次进行nread操作时自动从第n+1个存储单元获取数据(当当前处理的nread存储单元为16384时,则下一次处理的存储单元为1)。
message操作时,其内部16mb空间以8192字节为单位划分为2048个存储单元,message的具体操作步骤:
1)处理器写入message的邮箱号、优先级和数据内容写入到message内存的第n个存储单元;
2)处理器通过控制与状态处理单元通知系统有message类型的srio操作需要处理;
3)系统通过axi_mm主接口单元从message内存的第n个存储单元中读取数据并发送给message处理单元;
4)message处理单元对数据进行解析,按照srio协议所要求的格式进行打包并发送给srio接口;
5)远端设备通过srio接口将message接收应答发送给message处理单元;
6)当所有message分段发送并得到响应后,message处理单元通过控制与状态处理单元通知处理器message操作完成;
7)如果在超时时间内未接收到远端设备所返回的message应答,通过控制与状态处理单元通知处理器message操作超时;
8)无论message操作成功/失败,系统内部的message操作计数器自动完成加1操作,以便于下次进行message操作时自动从第n+1个存储单元获取数据(当当前发送的message存储单元为2048时,则下一次处理的存储单元为1)。
swrite操作时,其内部16mb空间以1m字节为单位划分为16个存储单元,swrite的具体操作步骤:
1)处理器写入swrite的目标地址、优先级和数据内容写入到swrite内存的第n个存储单元;
2)处理器通过控制与状态处理单元通知系统有swrite类型的srio操作需要处理;
3)系统通过axi_mm主接口单元从swrite内存的第n个存储单元中读取数据并发送给swrite处理单元;
4)swrite处理单元对数据进行解析,按照srio协议所要求的格式进行打包并发送给srio接口;
5)数据发送成功,通过控制与状态处理单元通知处理器;数据发送失败,通过控制与状态处理单元通知处理器;
6)无论swrite发送数据成功/失败,系统内部的swrite操作计数器自动完成加1操作,以便于下次进行swrite操作时自动从第n+1个存储单元获取数据(当当前处理的swrite存储单元为8时,则下一次处理的存储单元为1)。
由于采用了上述技术方案,本发明在不增加处理器负担的同时,可有效的降低程序的开发难度和复杂度。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。