一种基于FPGA的PCIEDMA数据传输方法及系统与流程
- 国知局
- 2024-08-19 14:18:26
本发明涉及pcie dma数据传输,具体为一种基于fpga的pcie dma数据传输方法及系统。
背景技术:
1、在现代电子系统和计算领域,高速数据传输技术是提升系统性能的关键因素之一,特别是在高性能计算(hpc)、数据中心、以及需求严苛的工业应用中,数据传输效率直接影响整个系统的响应速度和处理能力,近年来,随着fpga(现场可编程门阵列)技术的快速发展,其在数据传输领域的应用越来越广泛,fpga以其高度的可配置性、并行处理能力和较低的延迟优势,成为提升数据传输效率的理想选择,此外,pcie(外围组件互连快速版)接口作为一种高速串行计算机扩展总线标准,在现代计算机硬件中广泛应用,特别是其dma(直接内存访问)功能,能够在不占用cpu资源的情况下实现数据快速传输。
2、尽管fpga和pcie dma技术各自在数据传输领域已经取得了显著进展,但在将这两种技术结合应用于数据传输系统时,仍面临一些技术挑战和局限性,首先,现有技术在处理复杂数据传输任务时,往往存在数据传输效率不高、系统资源利用率低下的问题,特别是在数据量巨大、传输频繁的应用场景中,现有的数据传输方案难以满足高效率和低延迟的需求,其次,现有技术在dma控制和数据缓存管理方面缺乏灵活性和优化,导致数据传输过程中容易发生拥塞,增加了数据传输的不确定性和不稳定性,此外,现有的数据传输方案在实现上往往较为复杂,增加了系统设计和维护的难度。
技术实现思路
1、鉴于上述存在的问题,提出了本发明。
2、因此,本发明解决的技术问题是:现有的pcie dma数据传输方法存在传输效率低,延迟高,稳定性低,以及如何在主机侧和pcie板卡侧之间实现高效、稳定的数据传输控制和管理的问题。
3、为解决上述技术问题,本发明提供如下技术方案:一种基于fpga的pcie dma数据传输方法,包括初始化配置主机侧的pcie板卡驱动程序和pcie板卡侧的fpga程序;主机侧将数据传输至fpga,主机侧板卡驱动程序检查dma写控制缓存区的状态,将数据写入dma写数据缓存区,向fpga发送dma控制命令,fpga收到命令从指定的dma写数据缓存区读取数据;fpga侧将数据传输至主机,fpga检测dma读缓存区状态存储fifo状态,向主机发起数据写请求,主机侧板卡驱动程序通过监测dma读控制缓存区的状态进行数据读取。
4、作为本发明所述的基于fpga的pcie dma数据传输方法的一种优选方案,其中:所述主机侧的pcie板卡驱动程序包括定义dma控制结构体、申请dma控制缓存区、申请dma数据缓存区、中断服务程序、创建dma控制命令、通过pcie板卡进行交互程序;主机侧的pcie板卡驱动程序的dma控制结构体包括dma长度、dma缓存区编号、dma数据长度、dma状态四个变量共计16字节大小,dma控制缓存区分为dma读控制缓存区和dma写控制缓存区,dma读控制缓存区和dma写控制缓存区相互独立,且分别依次编号,分别将dma读控制缓存区的首地址和dma写控制缓存区的首地址写入pcie板卡bar空间;主机侧的pcie板卡驱动程序的中断服务程序响应pcie板卡的中断,pcie板卡中断分为dma写完成中断和dma读完成中断,两个中断的中断服务程序相互独立;主机侧的pcie板卡驱动程序的dma控制命令为32位宽,低16位存储dma数据长度,高16位存储dma数据缓存区编号。
5、作为本发明所述的基于fpga的pcie dma数据传输方法的一种优选方案,其中:所述pcie板卡侧的fpga程序包括bar空间控制程序、dma数据缓存区地址存储ram、dma控制命令存储fifo、dma写状态存储fifo、dma读缓存区状态存储fifo、中断控制程序、dma调度程序;pcie板卡侧的fpga程序的bar空间控制程序解析主机向bar空间不同地址写入的数据,根据地址进行不同处理,包括存储主机发送的dma控制缓存区首地址,将主机发送的dma数据缓存区首地址写入dma数据缓存区地址存储ram,将主机发送的dma控制命令写入dma控制命令存储fifo,将主机请求中断命令写入中断控制程序;pcie板卡侧的fpga程序的dma数据缓存区地址存储ram存储主机中申请的dma数据缓存区首地址;pcie板卡侧的fpga程序的dma控制命令存储fifo存储主机cpu向pcie板卡写入的dma控制命令;pcie板卡侧的fpga程序的中断控制程序根据dma调度程序状态及主机的中断命令向主机发送中断;驱动加载时,dma控制缓存区结构体申请两块dma内存,并分别初始化为连续多个dma写控制缓存区和dma读控制缓存区,将控制缓存区的dma状态变量初始化为空,将两块dma控制缓存区首地址写入pcie板卡bar空间,依次将dma读控制缓存区的状态变量写入pcie板卡bar空间,基于控制缓存区个数申请相同数量的dma写数据缓存区和dma读数据缓存区,且分别编号,将各dma数据缓存区首地址写入pcie板卡bar空间,pcie板卡fpga将主机写入的dma数据缓存区首地址写入dma数据缓存区地址存储ram中,将主机写入的dma读控制缓存区状态变量写入dma读控制缓存区状态存储fifo。
6、作为本发明所述的基于fpga的pcie dma数据传输方法的一种优选方案,其中:所述所述将数据写入dma写数据缓存区包括主机侧板卡驱动检查dma写控制缓存区的状态,将数据写入写数据缓存区,主机侧pcie板卡驱动向pcie bar空间写入dma控制命令,pcie板卡fpga将dma控制命令写入dma控制命令存储fifo,dma调度程序从dma控制命令存储fifo中读出dma控制命令,并根据dma控制命令信息从dma数据缓存区地址存储ram中读出相应写数据缓存区的首地址,并对主机发起读请求;当主机侧有数据需要从主机内存搬运至pcie板卡的fpga时,主机侧驱动依次查询当前dma写控制缓存区的dma状态变量是否为空,若为空,将数据搬运至当前dma写控制缓存区对应的dma写数据缓存区,将当前dma写控制缓存区的dma状态变量改为满,并向pcie板卡写入dma控制命令,pcie板卡fpga的bar空间控制程序将接收到的dma控制命令写入dma控制命令存储fifo;当dma调度程序检测到dma控制命令存储fifo不为空时,从dma控制命令存储fifo中读取dma控制命令,并根据dma控制命令中的缓存区编号信息从dma数据缓存区地址ram中读出相应的dma写数据缓存区首地址,通过dma控制命令中的dma长度信息对主机发送读请求包。
7、作为本发明所述的基于fpga的pcie dma数据传输方法的一种优选方案,其中:所述fpga收到命令从指定的dma写数据缓存区读取数据包括基于pcie协议,当主机cpu的pcie控制器收到pcie板卡发送的读请求时,回复带数据的完成包,fpga收到主机回复的完成包,将完成包的数据缓存区编号写入dma写状态存储fifo,当dma调度程序检测到dma写状态存储fifo不为空时,从dma写状态存储fifo中读出缓存区编号,基于缓存区编号和dma写控制缓存区首地址计算dma写数据缓存区对应的dma写控制结构体首地址,并对主机发起写请求,更新主机侧dma写控制结构体的dma状态变量为空;主机侧驱动申请dma写控制缓存区和dma写数据缓存区,主机cpu在将dma控制命令写入pcie板卡时,不等待当前dma完成数据搬运,将数据依次写入空闲的dma写数据缓存区,同时将对应dma控制命令写入pcie板卡bar空间,pcie板卡fpga中的dma调度程序通过dma控制命令存储fifo中的dma控制命令进行数据搬运,通过dma写状态fifo中存储的已完成数据搬运的写数据缓存区编号,更新主机侧对应的写控制缓存区中的dma状态变量为空;当主机侧板卡驱动程序向dma写数据缓存区写入数据的速度小于pcie板卡的dma搬运速度时,主机cpu没有任何查询等待时间,也没有pcie板卡中断;当主机侧板卡驱动程序向dma写数据缓存区写入数据的速度高于pcie板卡的dma搬运性能时,所有dma写控制缓存区中的dma状态变量全部为满,主机cpu向pcie板卡写入dma写中断使能命令,fpga中的中断控制程序对主机发送的dma写中断使能指令进行检测,fpga进行主机中dma写数据缓存区的数据搬运,更新dma写控制缓存区的dma状态变量后,向主机发送dma写中断,当主机收到中断,查询到有dma写控制缓存区的状态变量为空,继续向空闲的dma写数据缓存区写入数据。
8、作为本发明所述的基于fpga的pcie dma数据传输方法的一种优选方案,其中:所述向主机发起数据写请求包括数据从pcie板卡fpga搬运至主机,fpga的dma调度程序检测dma读状态fifo状态,从dma读状态fifo中读出相应的空闲dma读数据缓存区编号,通过编号从dma数据缓存区地址存储ram中读出对应的dma读数据缓存区首地址,基于dma读数据缓存区首地址向主机发送带数据的写请求包。
9、作为本发明所述的基于fpga的pcie dma数据传输方法的一种优选方案,其中:所述主机侧板卡驱动程序通过监测dma读控制缓存区的状态进行数据读取包括根据dma读控制缓存区首地址和dma读数据缓存区编号更新主机侧对应的dma读控制缓存区中的dma长度和dma状态变量,主机侧板卡驱动程序通过监测dma读控制缓存区的状态进行数据读取,当dma状态变量为满时,根据dma读控制缓存区的dma长度变量读取相应长度的数据,将当前dma读数据缓存区的编号写入pcie板卡fpga中的dma读缓存区状态存储fifo,完成dma读过程;主机侧的驱动申请dma读控制缓存区和dma读数据缓存区,当fpga中的dma调度程序检测到有数据要搬运到主机内存,且dma读缓存区状态存储fifo不为空时,连续重复dma读过程;当主机侧板卡驱动程序读dma数据缓存区的速度低于fpga从pcie板卡搬运至主机dma读数据缓存区的速度时,主机cpu无轮询等待时间,不被中断;当主机侧板卡驱动程序读dma数据缓存区的速度高于fpga从pcie板卡搬运至主机dma读数据缓存区的速度时,主机中的dma读控制缓存区dma状态变量全为空,主机驱动向pcie板卡发送读中断使能命令,pcie板卡fpga的中断控制程序接收到读中断使能命令,通过调度程序进行向主机dma读数据缓存区的数据搬运,更新dma读控制缓存区的dma状态变量,向主机cpu发送读中断,主机收到中断,若查询到dma读控制缓存区的dma状态变量为满,则继续从dma读数据缓存区读取数据。
10、本发明的另外一个目的是提供一种基于fpga的pcie dma数据传输系统,其能通过主机侧将数据传输至fpga,主机侧板卡驱动程序检查dma写控制缓存区的状态,将数据写入dma写数据缓存区,向fpga发送dma控制命令,fpga收到命令从指定的dma写数据缓存区读取数据,解决了目前的pcie dma数据传输含有效率低的问题。
11、作为本发明所述的基于fpga的pcie dma数据传输系统的一种优选方案,其中:包括初始化配置模块,写数据操作模块,读数据操作模块;所述初始化配置模块用于初始化配置主机侧的pcie板卡驱动程序和pcie板卡侧的fpga程序;所述写数据操作模块用于主机侧将数据传输至fpga,主机侧板卡驱动程序检查dma写控制缓存区的状态,将数据写入dma写数据缓存区,向fpga发送dma控制命令,fpga收到命令从指定的dma写数据缓存区读取数据;所述读数据操作模块用于fpga侧将数据传输至主机,fpga检测dma读缓存区状态存储fifo状态,向主机发起数据写请求,主机侧板卡驱动程序通过监测dma读控制缓存区的状态进行数据读取。
12、一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序是实现基于fpga的pcie dma数据传输方法的步骤。
13、一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现基于fpga的pcie dma数据传输方法的步骤。
14、本发明的有益效果:本发明提供的基于fpga的pcie dma数据传输方法通过精确定义dma控制结构体及合理申请dma控制和数据缓存区,为整个数据传输过程打下了坚实的基础,通过对dma读写控制缓存区进行独立编号和地址映射,实现了对数据传输流程的精确控制,从而提高了数据传输的准确性和效率,通过智能化管理dma写控制缓存区的状态,实现了数据写入的高效性,当数据从主机搬运至pcie板卡fpga时,通过优化dma控制命令的传输和执行,减少了数据等待时间,提高了数据搬运的速度,此外,通过精细调度dma数据缓存区地址存储ram,确保了数据的高效读取,从而大幅提升了数据写入过程的性能和可靠性,通过高效的dma读数据缓存区状态管理和数据写请求机制,实现了从fpga到主机的快速数据传输,通过监测dma读控制缓存区的状态,主机侧板卡驱动程序能够及时读取到传输的数据,从而保证了数据处理流程的连贯性和实时性,该步骤的优化不仅提升了数据传输速度,还确保了数据传输过程的稳定性和可靠性,本发明在效率、等待时间以及可靠性方面都取得更加良好的效果。
本文地址:https://www.jishuxx.com/zhuanli/20240819/274668.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表