CN110990309B - Tte端系统适配卡pcie控制器的高效中断操作方法 - Google Patents

Tte端系统适配卡pcie控制器的高效中断操作方法 Download PDF

Info

Publication number
CN110990309B
CN110990309B CN201911046802.5A CN201911046802A CN110990309B CN 110990309 B CN110990309 B CN 110990309B CN 201911046802 A CN201911046802 A CN 201911046802A CN 110990309 B CN110990309 B CN 110990309B
Authority
CN
China
Prior art keywords
dma
hardware
data
buffer
write
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911046802.5A
Other languages
English (en)
Other versions
CN110990309A (zh
Inventor
潘伟涛
郑圆圆
邱智亮
张仲禹
张冰
郭一然
王媛媛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xidian University
Original Assignee
Xidian University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xidian University filed Critical Xidian University
Priority to CN201911046802.5A priority Critical patent/CN110990309B/zh
Publication of CN110990309A publication Critical patent/CN110990309A/zh
Application granted granted Critical
Publication of CN110990309B publication Critical patent/CN110990309B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bus Control (AREA)

Abstract

本发明属于数据处理技术领域,公开了一种TTE端系统适配卡PCIE控制器的高效中断操作方法,DMA读流程,DMA读缓冲区分为非保障区和保障区,保障区防止某个数据帧的前半部分在DMA读缓冲区的尾部,而数据帧的后半部分在DMA读缓冲区的头部的情况发生;DMA写流程,DMA写缓冲区被分为两个部分,一个是ABuffer另一个是BBuffer;驱动处理A部分的数据时,硬件可以将数据写入B部分,驱动将A部分处理完毕后,开始继续处理B部分的数据。本发明采用更加高效的DMA读交互模式,大幅度提升DMA读的传输速率。采用硬件主动发起DMA写的方式,保证板卡能够及时的将缓存中的数据搬移至DMA写缓冲区中。

Description

TTE端系统适配卡PCIE控制器的高效中断操作方法
技术领域
本发明属于数据处理技术领域,尤其涉及一种TTE端系统适配卡PCIE控制器的高效中断操作方法。
背景技术
目前,最接近的现有技术:高速外围组件互联PCIe是一种高速串行传输总线,具有点对点、双通道和高带宽的传输特性,所连接的设备分配独享通道带宽,不共享总线带宽。在板卡一侧的直接内存访问DMA操作结束后,通过PCIe总线控制器产生读写中断,以告知主机一侧板卡此次DMA操作已经完成,便于启动下次DMA操作。
现有技术TTE端系统适配卡PCIe控制器的中断操作方法,用于解决现有技术因主机发起读中断造成数据因适配卡缓存空间不足而溢出丢失的问题。其技术方案是:1)请求读、写数据;2)周期性地向PCIe总线控制器请求读、写数据;3)PCIe总线控制器产生中断时序并配置读、写缓存寄存器;4)PCIe驱动识别中断类型并决定搬移数据量;5)PCIe驱动配置读、写相关寄存器并启动直接内存访问操作完成数据搬移,结束直接内存访问操作。此方法存在以下不足:1.驱动每次向DMA读缓冲区写入数据时都是从DMA读缓冲区的起始地址开始写入,所以只有DMA读缓冲区中的前面一小部分被使用,而DMA读缓冲区后半部分始终不会被驱动或硬件访问,从而导致系统空间的浪费。2.不论此次DMA读/写传输的数据量的大小,一次DMA读传输都需要两次PIO写操作,一次PIO读操作,一次中断操作。一次DMA写都需要三次PIO写操作,两次PIO读操作,两次中断操作。而这些辅助性操作会增加开销时间在数据传输的有效时间中的占比,从而降低DMA读/写效率。并且频繁的PIO操作会导致CPU占用率较高,如果CPU对中断的处理时间过慢还会造成一次DMA读的结束时间被延长而无法充分利用PCIE带宽。3.驱动和FPGA不能同时访问DMA读/写缓冲区,这就会导致板卡和驱动中一方运行时,另一方必须处于等待状态,极大的降低了DMA读写的效率,而且等待时间过长,也会导致系统实时性降低。4.DMA读/写的交互模式比较低效,只适用于小数据量传输。
综上所述,现有技术存在的问题是:现有的板卡与驱动之间低效的交互模式而导致的DMA读写效率低下、板卡与驱动之间的传输速率无法满足大数据量传输要求、无法充分利用PCIE带宽。
解决上述技术问题的难度:
如果要解决效率低下问题,就需要尽量减少驱动和硬件之间的辅助性操作频率,而减少驱动和硬件之间的辅助性操作可能会降低整个系统的可靠性,所以需要充分考虑驱动与硬件之间的交互模式,此交互模式不仅要简洁而且要让驱动和硬件尽可能的高效运行。
解决上述技术问题的意义:
采用优化后的DMA读写流程,不仅能够提升硬件和驱动的运行效率,提升DMA读写速率,还能够提升系统的稳定性、可靠性、实时性。
发明内容
针对现有技术存在的问题,本发明提供了一种TTE端系统适配卡PCIE控制器的高效中断操作方法。
本发明是这样实现的,一种TTE端系统适配卡PCIE控制器的高效中断操作方法,所述TTE端系统适配卡PCIE控制器的高效中断操作方法包括以下步骤:
第一步,DMA读流程,DMA读缓冲区分为非保障区和保障区,保障区防止某个数据帧的前半部分在DMA读缓冲区的尾部,而数据帧的后半部分在DMA读缓冲区的头部的情况发生;
第二步,DMA写流程,DMA写缓冲区被分为两个部分,一个是ABuffer另一个是BBuffer;驱动处理A部分的数据时,硬件可以将数据写入B部分,驱动将A部分处理完毕后,开始继续处理B部分的数据。
进一步,所述第一步DMA读流程包括:硬件Bar空间中DMA读相关寄存器:
dma_read_buferr_base_addr,32位寄存器,用于存放DMA读缓冲区的基地址;
start_addr,32位寄存器,由硬件维护的头指针;
end_addr,32位寄存器,由驱动维护的尾指针;
round_end_flag,1位寄存器,该标志位为1,表示当前的尾地址是当前轮回的最后一个尾地址,该标志位为0表示,表示当前的尾地址不是当前轮回的最后一个尾地址。
进一步,所述第一步DMA读流程的驱动处理包括:
步骤一,驱动上电初始化时通过PIO写方式配置dma_read_buferr_base_addr寄存器,初始化完成后执行步骤二;
步骤二,驱动等待应用层产生新的数据,若有新的数据产生,驱动立即将应用层下发的数据写入DMA读缓冲区,如果这次写入操作是某个轮回的首次写入,驱动应该将数据以DMA读缓冲区的基地址为起始点写入DMA读缓冲区,否则驱动应该将数据以上一次写入的数据所在的尾地址为起始点写入DMA读缓冲区,写入完毕后执行步骤三;
步骤三,驱动通过PIO写方式将最新写入的数据所在的尾地址写入硬件的end_addr寄存器,PIO操作完毕后,执行步骤四;
步骤四,驱动将最新写入的数据所在的尾地址与警戒线的大小进行对比;若没有超过警戒线,回到步骤二准备开始下一次DMA传输,若超过警戒线,执行步骤五;
步骤五,驱动通过PIO写方式向硬件中的round_end_flag写入1通知硬件最新更新的end_addr是当前轮回中驱动最后一次更新的尾指针,PIO操作完毕后,执行步骤六;
步骤六,驱动处于等待读完成中断的状态,收到中断后,执行步骤七;
步骤七,驱动收到读完成中断后,将DMA读缓冲区清空,并回到步骤二准备开始下一个轮回的首次DMA传输。
进一步,所述第一步DMA读流程的硬件处理包括:
步骤一,硬件检测到驱动配置了Bar空间的dma_read_buferr_base_addr寄存器,执行步骤二;
步骤二,硬件进行初始化操作:硬件自动将dma_read_buferr_base_addr寄存器中的数值写入start_addr寄存器,将Bar空间的round_end_flag寄存器清0;硬件等待驱动进行当前轮回尾指针的首次更新,执行步骤三;
步骤三,硬件检测到驱动更新了尾指针,表示驱动启动了当前轮回的首次DMA传输,执行步骤四;
步骤四,硬件立即启动DMA读,发送读请求包请求DMA读缓冲区中从start_addr到end_addr的数据,读请求包发送完毕后,执行步骤五;
步骤五,RC(RootComplex)将硬件请求的数据封装成读完成包返回给硬件,硬件接收读完成包,解析读完成包,最终将读完成包中的有效数据存入缓存中,当硬件接收到足量的读完成包后,将start_addr寄存器的数值更新为end_addr+1,执行步骤六;
步骤六,硬件检测round_end_flag是否为0,若为0,表示当前轮回的DMA传输还没有结束,执行步骤七,若为1,表示当前轮回的DMA传输已经结束,执行步骤八;
步骤七,硬件实时将start_addr寄存器-1和end_addr的数值进行对比,若相等,表示驱动还未启动新的DMA传输,继续等待;若不相等,表示驱动启动了新的DMA传输,执行步骤四;
步骤八,硬件产生硬线INT中断,并将中断寄存器中的读完成中断标志位置1,回到步骤二准备开始下一个轮回的DMA传输。
进一步,所述第二步DMA写流程的硬件Bar空间中DMA写相关寄存器:
dma_write_buferr_base_addr,32位寄存器,存放DMA写缓冲区的基地址;
A_buffer_flag,1位寄存器,标志位为1,表示允许硬件向ABuffer写入数据,标志位为0,表示不允许硬件向ABuffer写入数据,初始值为1;
B_buffer_flag,1位寄存器,标志位为1表示允许硬件向BBuffer写入数据,标志位为0表示不允许硬件向BBuffer写入数据,初始值为1。
进一步,所述第二步DMA写流程的驱动处理包括:
步骤一,驱动上电初始化通过PIO写方式配置dma_write_buferr_base_addr寄存器,初始化完毕后,执行步骤二;
步骤二,驱动等待写完成A中断或写完成B中断,收到写完成A中断后,执行步骤三,收到写完成B中断后,执行步骤四;
步骤三,驱动收到写完成A中断后,立即解析ABuffer中的数据,解析完毕后,向硬件的A_buffer_flag写入1;
步骤四,驱动收到写完成B中断后,立即解析BBuffer中的数据,解析完毕后,向硬件的B_buffer_flag写入1。
进一步,所述第二步DMA写流程的硬件处理包括:
步骤一,硬件实时监测或定时检测接收FIFO中是否有待发的完整数据帧,若有待发的完整数据帧,执行步骤二;
步骤二,硬件自主启动DMA写,若此次启动是首次启动或上次启动DMA写将数据写入了BBuffer,执行步骤三,否则执行步骤六;
步骤三,硬件将数据封装为写请求包并写入ABuffer,所有数据写完后,判断B_buffer_flag是否为1,若B_buffer_flag是0,执行步骤四,否则执行步骤五;
步骤四,硬件等待驱动向B_buffer_flag写入1,当B_buffer_flag为1后,执行步骤五;
步骤五,硬件产生硬线INT中断,并将中断寄存器中写完成A中断标志位置1,并将A_buffer_flag清0,回到步骤一;
步骤六,硬件将数据封装为写请求包并写入BBuffer,所有数据写完后,判断A_buffer_flag是否为1,若A_buffer_flag是0,执行步骤七,否则执行步骤八;
步骤七,硬件等待驱动向A_buffer_flag写入1,当A_buffer_flag为1后,执行步骤八;
步骤八,硬件产生硬线INT中断,并将中断寄存器中写完成B中断标志位置1,并将B_buffer_flag清0,回到步骤一。
本发明的另一目的在于提供一种应用所述TTE端系统适配卡PCIE控制器的高效中断操作方法的TTE端系统。
本发明不仅仅适用于TTE端系统卡,而是指具有PCIE接口的所有端系统卡,包括并不限于AFDX端系统卡、TTE端系统卡或其它具有收发以太网数据的其它端系统卡。
综上所述,本发明的优点及积极效果为:本发明简化了DMA读写过程中板卡与驱动之间的交互流程。采用更加高效的DMA读交互模式,大幅度提升DMA读的传输速率。采用硬件主动发起DMA写的方式,保证板卡能够及时的将缓存中的数据搬移至DMA写缓冲区中。采用双DMA写缓冲区的方式,很大程度避免因为DMA写启动不及时而导致板卡缓存溢出的问题。用于时间触发以太网TTE端系统适配卡中的中断模块设计,提高DMA读写的传输效率,提高系统实时性。
与现有技术相比,本发明具有以下优势:
(1)64KB的DMA读缓冲区中的绝大部分存储区域都可以被充分的利用,提高了DMA读缓冲区的利用效率。
(2)驱动和硬件之间的PIO配置操作和中断操作的频繁程度降低,优化后的DMA读流程只需要一次PIO写操作就可以启动一次DMA传输,连续进行多次DMA传输后只需要一次中断操作就可以重新开始下一个轮回的DMA传输。优化后的DMA写流程,一次DMA写只需要一次PIO读操作,一次中断操作。这样就能大幅度降低开销时间的占比,降低CPU占用率,提高DMA的效率,充分利用PCIE带宽。
(3)FPGA和驱动可以同时对DMA读缓冲区进行访问,FPGA在从DMA读缓冲区中的某片区域读取数据的同时,驱动可以同时向DMA读缓冲区的另一片区域写入下一次要搬移的数据,这样不仅会提高整个系统的实时性,而且FPGA和驱动同时高效运行的时间更长,FPGA和驱动的等待时间更少,DMA读的效率会得到很大的提升。
(4)DMA写启动的控制权由硬件掌握,这就可以借助硬件的运行速度快的优势,更及时的启动DMA写,从而及时的将硬件缓存中的数据搬移到DMA写缓冲区中,既提高了DMA写的速率,又能很大程度避免因为DMA写不及时而导致硬件缓存溢出的问题。
(5)由于将DMA写缓冲区分为了两部分,驱动在处理ABuffer的数据时,硬件也可以及时将数据写入BBuffer中,在驱动将ABuffer的数据处理完毕后,立即可以继续处理BBuffer的数据,减少了驱动的等待硬件将数据写入DMA写缓冲区的时间。在大数据量交互时,可以让驱动始终有数据可以处理,从而让驱动全速运行。
附图说明
图1是本发明实施例提供的TTE端系统适配卡PCIE控制器的高效中断操作方法流程图。
图2是本发明实施例提供的DMA读缓冲区示意图。
图3是本发明实施例提供的DMA读驱动流程图。
图4是本发明实施例提供的DMA读硬件流程图。
图5是本发明实施例提供的DMA写缓冲区示意图。
图6是本发明实施例提供的DMA写驱动流程图。
图7是本发明实施例提供的DMA写硬件流程图。
图8是本发明实施例提供的一个轮回的DMA读时间线(包括N+1次DMA传输)示意图。
图9是本发明实施例提供的DMA写时间线(2次DMA传输)示意图。
图10是本发明证明部分提供的DMA读优化之前传输4KB的仿真波形示意图。
图11是本发明证明部分提供的DMA读优化之前传输64KB的仿真波形示意图。
图12是本发明证明部分提供的DMA读优化之后传输4KB的仿真波形示意图。
图13是本发明证明部分提供的DMA读优化之后传输64KB的仿真波形示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
针对现有技术存在的问题,本发明提供了一种TTE端系统适配卡PCIE控制器的高效中断操作方法,下面结合附图对本发明作详细的描述。
如图1所示,本发明实施例提供的TTE端系统适配卡PCIE控制器的高效中断操作方法包括以下步骤:
S101:DMA读流程,DMA读缓冲区分为非保障区和保障区,保障区防止某个数据帧的前半部分在DMA读缓冲区的尾部,而数据帧的后半部分在DMA读缓冲区的头部的情况发生。
S102:DMA写流程,DMA写缓冲区被分为两个部分,一个是ABuffer另一个是BBuffer;驱动处理A部分的数据时,硬件可以将数据写入B部分,驱动将A部分处理完毕后,开始继续处理B部分的数据。
下面结合附图对本发明的技术方案作进一步的描述。
本发明实施例提供的TTE端系统适配卡PCIE控制器的高效中断操作方法包括以下步骤:
第一步,DMA读流程,如图2所示,DMA读缓冲区分为蓝色的非保障区和红色的保障区(红色的保障区大小根据驱动每次从应用层搬移的最大数据量而定),之所以设立保障区,主要是为了防止某个数据帧的前半部分在DMA读缓冲区的尾部,而数据帧的后半部分在DMA读缓冲区的头部的情况发生。
硬件Bar空间中DMA读相关寄存器:
dma_read_buferr_base_addr(32位寄存器,用于存放DMA读缓冲区的基地址)。
start_addr(32位寄存器,由硬件维护的头指针)。
end_addr(32位寄存器,由驱动维护的尾指针(尾地址))。
round_end_flag(1位寄存器,该标志位为1,表示当前的尾地址是当前轮回的最后一个尾地址,该标志位为0表示,表示当前的尾地址不是当前轮回的最后一个尾地址)。
DMA读流程(如图3驱动流程图):
步骤一,驱动上电初始化时通过PIO写方式配置dma_read_buferr_base_addr寄存器(只在驱动启动时配置一次)。初始化完成后执行步骤二。
步骤二,驱动等待应用层产生新的数据,若有新的数据产生,驱动立即将应用层下发的数据写入DMA读缓冲区,如果这次写入操作是某个轮回的首次写入,驱动应该将数据以DMA读缓冲区的基地址为起始点写入DMA读缓冲区,否则驱动应该将数据以上一次写入的数据所在的尾地址为起始点写入DMA读缓冲区,写入完毕后执行步骤三。
步骤三,驱动通过PIO写方式将最新写入的数据所在的尾地址写入硬件的end_addr寄存器,PIO操作完毕后,执行步骤四。
步骤四,驱动将最新写入的数据所在的尾地址与警戒线的大小进行对比。若没有超过警戒线,回到步骤二准备开始下一次DMA传输,若超过警戒线,执行步骤五。
步骤五,驱动通过PIO写方式向硬件中的round_end_flag写入1通知硬件最新更新的end_addr是当前轮回中驱动最后一次更新的尾指针,PIO操作完毕后,执行步骤六。
步骤六,驱动处于等待读完成中断的状态,收到中断后,执行步骤七。
步骤七,驱动收到读完成中断后,将DMA读缓冲区清空,并回到步骤二准备开始下一个轮回的首次DMA传输。
DMA读流程(如图4硬件流程图):
步骤一,硬件检测到驱动配置了Bar空间的dma_read_buferr_base_addr寄存器(只在驱动启动时被配置一次)。执行步骤二。
步骤二,硬件进行初始化操作:硬件自动将dma_read_buferr_base_addr寄存器中的数值写入start_addr寄存器,将Bar空间的round_end_flag寄存器清0。硬件等待驱动进行当前轮回尾指针的首次更新。执行步骤三。
步骤三,硬件检测到驱动更新了尾指针,表示驱动启动了当前轮回的首次DMA传输,执行步骤四。
步骤四,硬件立即启动DMA读,发送读请求包请求DMA读缓冲区中从start_addr到end_addr的数据。读请求包发送完毕后,执行步骤五。
步骤五,RC(RootComplex)将硬件请求的数据封装成读完成包返回给硬件,硬件接收读完成包,解析读完成包,最终将读完成包中的有效数据存入缓存中。当硬件接收到足量的读完成包后,将start_addr寄存器的数值更新为end_addr+1。执行步骤六。
步骤六,硬件检测round_end_flag是否为0,若为0,表示当前轮回的DMA传输还没有结束,执行步骤七,若为1,表示当前轮回的DMA传输已经结束,执行步骤八。
步骤七,硬件实时将start_addr寄存器-1和end_addr的数值进行对比,若相等,表示驱动还未启动新的DMA传输,继续等待。若不相等,表示驱动启动了新的DMA传输,执行步骤四。
步骤八,硬件产生硬线INT中断,并将中断寄存器中的读完成中断标志位置1,回到步骤二准备开始下一个轮回的DMA传输。
第二步,DMA写流程
如图5所示,DMA写缓冲区被分为两个部分,一个是ABuffer另一个是BBuffer。由于系统实际运行时,驱动处理DMA写缓冲区的速度比硬件向DMA写缓冲区的速度慢,所以DMA写的速率瓶颈在于驱动处理速率,所以为了尽可能的提升速率,要让处理速率慢的驱动始终有数据可以处理,让驱动始终处于全速运行的状态,所以将DMA写缓冲区分为两个部分,驱动处理A部分的数据时,硬件可以将数据写入B部分,驱动将A部分处理完毕后,立即可以开始继续处理B部分的数据。
硬件Bar空间中DMA写相关寄存器:
dma_write_buferr_base_addr(32位寄存器,存放DMA写缓冲区的基地址)。
A_buffer_flag(1位寄存器,标志位为1,表示允许硬件向ABuffer写入数据,标志位为0,表示不允许硬件向ABuffer写入数据,初始值为1)。
B_buffer_flag(1位寄存器,标志位为1---表示允许硬件向BBuffer写入数据,标志位为0----表示不允许硬件向BBuffer写入数据,初始值为1)。
DMA写流程(如图6驱动流程图):
步骤一,驱动上电初始化通过PIO写方式配置dma_write_buferr_base_addr寄存器(只在驱动启动时配置一次)。初始化完毕后,执行步骤二。
步骤二,驱动等待写完成A中断或写完成B中断,收到写完成A中断后,执行步骤三,收到写完成B中断后,执行步骤四。
步骤三,驱动收到写完成A中断后,立即解析ABuffer中的数据,解析完毕后,向硬件的A_buffer_flag写入1。
步骤四,驱动收到写完成B中断后,立即解析BBuffer中的数据,解析完毕后,向硬件的B_buffer_flag写入1。
DMA写流程(如图7硬件流程图):
步骤一,硬件实时监测或定时检测接收FIFO中是否有待发的完整数据帧。若有待发的完整数据帧,执行步骤二。
步骤二,硬件自主启动DMA写,若此次启动是首次启动或上次启动DMA写将数据写入了BBuffer,执行步骤三,否则执行步骤六。
步骤三,硬件将数据封装为写请求包并写入ABuffer,所有数据写完后,判断B_buffer_flag是否为1,若B_buffer_flag是0,执行步骤四,否则执行步骤五。
步骤四,硬件等待驱动向B_buffer_flag写入1,当B_buffer_flag为1后,执行步骤五。
步骤五,硬件产生硬线INT中断,并将中断寄存器中写完成A中断标志位置1,并将A_buffer_flag清0,回到步骤一。
步骤六,硬件将数据封装为写请求包并写入BBuffer,所有数据写完后,判断A_buffer_flag是否为1,若A_buffer_flag是0,执行步骤七,否则执行步骤八。
步骤七,硬件等待驱动向A_buffer_flag写入1,当A_buffer_flag为1后,执行步骤八。
步骤八,硬件产生硬线INT中断,并将中断寄存器中写完成B中断标志位置1,并将B_buffer_flag清0,回到步骤一。
下面结合具体实施例对本发明的技术方案作进一步的描述。
本发明实施例提供的TTE端系统适配卡PCIE控制器的高效中断操作方法包括以下步骤:
1.DMA读流程
DMA读流程(如图8驱动时间线):
步骤一,驱动上电初始化时通过PIO写方式配置dma_read_buferr_base_addr寄存器(只在驱动启动时配置一次)。初始化完毕后执行步骤二。
步骤二,驱动将应用层下发的数据(Data0)以DMA读缓冲区的起始地址为起始点写入DMA读缓冲区。数据写入完毕后执行步骤三。
步骤三,驱动通过PIO写方式将数据所在的尾地址写入硬件的end_addr寄存器。写入完毕后执行步骤四。
步骤四,驱动将应用层下发的数据(Data1)以上一次的尾地址为起始点写入DMA读缓冲区。数据写入完毕后执行步骤五。
步骤五,驱动通过PIO写方式将数据所在的尾地址写入硬件的end_addr寄存器。以此类推,直到执行步骤六。
步骤六,驱动将应用层下发的数据(DataN)以上一次的尾地址为起始点写入DMA读缓冲区。数据写入完毕后执行步骤七。
步骤七,驱动通过PIO写方式将数据所在的尾地址写入硬件的end_addr寄存器。驱动检测到当前数据所在的尾地址已经超过了保障区的警戒线,所以执行步骤八。
步骤八,驱动通过PIO写方式向硬件中的round_end_flag写入1表示最近更新的尾地址是当前轮回中驱动最后一次刷新的尾地址。写入完毕后,执行步骤九。
步骤九,驱动处于等待中断的状态,不再去搬移应用层下发的数据。收到中断后执行步骤十。
步骤十,驱动收到硬线INT中断,准备进入中断处理函数,进入中断处理函数后执行步骤十一。
步骤十一,驱动通过PIO读方式读取硬件的中断寄存器,直到接收到硬件返回的中断寄存器的数值,并根据中断寄存器的数值判断中断源为读完成中断后,驱动将DMA读缓冲区清空并回到步骤二重新开始下一个轮回。
DMA读流程(如图8硬件时间线):
步骤一,硬件检测到驱动配置了dma_read_buferr_base_addr寄存器(只在驱动启动时被配置一次),硬件进行初始化操作:硬件自动将DMA读缓冲区的基地址写入start_addr寄存器,将round_end_flag寄存器清0。硬件处于等待驱动刷新尾地址的状态。
步骤二,硬件检测到驱动刷新了尾地址,硬件立即启动DMA读并发送读请求包。读请求包发送完毕后执行步骤三。
步骤三,硬件等待RC(RootComplex)将Data0封装为读完成包并返回给硬件,硬件将返回的读完成包进行解析并将有效数据存入FPGA的缓存中。所有读完成包返回完毕后,硬件自动将start_addr寄存器更新,执行步骤四。
步骤四,硬件实时将start_addr寄存器数值-1后与end_addr寄存器的数值进行对比,若相等,说明驱动没有搬移新的数据,继续处于实时对比的状态。若不相同,说明驱动将新的数据搬移进了DMA读缓冲区,硬件应立即启动DMA读。
步骤五,硬件检测到驱动刷新了end_addr寄存器,导致start_addr寄存器数值-1后与end_addr寄存器的数值不同,硬件立即启动DMA读,以此类推,直到执行步骤六。
步骤六,硬件启动DMA读并发送读请求包。读请求包发送完毕后执行步骤七。
步骤七,硬件等待RC(RootComplex)将DataN-1封装为读完成包并返回给硬件,硬件将返回的读完成包进行解析并将有效数据存入FPGA的缓存中。所有读完成包返回完毕后,硬件自动将start_addr寄存器更新,执行步骤八。
步骤八,硬件实时将start_addr寄存器数值-1后与end_addr寄存器的数值进行对比,若相等,说明驱动没有搬移新的数据,继续处于实时对比的状态。若不相同,说明驱动将新的数据搬移进了DMA读缓冲区,硬件应立即启动DMA读。
步骤九,硬件检测到驱动刷新了end_addr寄存器,导致start_addr寄存器数值-1后与end_addr寄存器的数值不同,硬件立即启动DMA读,发送读请求包,所有读请求包发送完毕后执行步骤十。
步骤十,硬件等待RC(RootComplex)将DataN-1封装为读完成包并返回给硬件,硬件将返回的读完成包进行解析并将有效数据存入FPGA的缓存中。所有读完成包返回完毕后,硬件自动将start_addr寄存器更新,执行步骤十一。
步骤十一,硬件检测到round_end_flag标志位为1,硬件产生硬线INT中断,并将中断寄存器中的读完成标志位置1。等待驱动通过PIO读方式读取中断寄存器。当硬件收到驱动读取中断寄存器的请求后执行步骤十二。
步骤十二硬件收到驱动发送的PIO读请求包,硬件将中断寄存器的数值返回给驱动并回到步骤一等待开始下一个轮回。
2.DMA写流程
DMA写流程(如图9驱动时间线):
步骤一,驱动上电初始化时通过PIO写方式配置dma_write_buferr_base_addr寄存器(只在驱动启动时配置一次)。初始化完毕后执行步骤二。
步骤二,驱动等待写完成A中断或写完成B中断,收到中断后执行步骤三。
步骤三,驱动收到硬线INT中断,准备进入中断处理函数,进入中断处理函数后执行步骤四。
步骤四,驱动通过PIO读方式读取硬件的中断寄存器,直到接收到硬件返回的中断寄存器的数值,并根据数值判断中断源为写完成A中断后,执行步骤五。
步骤五,驱动从DMA写缓冲区的ABuffer中读取数据并搬移到应用层,搬移完毕后执行步骤六。
步骤六,驱动通过PIO方式向硬件的A_buffer_flag寄存器中写入1,写入完毕后执行步骤七。
步骤七,驱动收到硬线INT中断,准备进入中断处理函数,进入中断处理函数后执行步骤八。
步骤八,驱动通过PIO读方式读取硬件的中断寄存器,直到接收到硬件返回的中断寄存器的数值,并根据数值判断中断源为写完成B中断后,执行步骤九。
步骤九,驱动从DMA写缓冲区的BBuffer中读取数据并搬移到应用层,搬移完毕后执行步骤十。
步骤十,驱动通过PIO写方式向硬件的B_buffer_flag寄存器中写入1,写入完毕后返回步骤二等待进行下一次DMA传输。
DMA写流程(如图9硬件时间线):
步骤一,硬件检测到驱动配置了dma_write_buferr_base_addr寄存器(只在驱动启动时被配置一次),硬件继续处于等待FPGA中有数据需要上传的状态。当硬件检测到FPGA中有需要上传的数据执行步骤二。
步骤二,硬件自主启动DMA写,通过封装写请求包并发送给RC来将需要上传给应用层的数据Data0写入DMA写缓冲区的ABuffer中。写入完毕后执行步骤三。
步骤三,硬件产生硬线INT中断,同时将中断寄存器中的写完成A中断标志位置1,等待驱动通过PIO读方式读取中断寄存器。当硬件收到驱动读取中断寄存器的请求后执行步骤四。
步骤四,硬件收到驱动发送的PIO读请求包,硬件将中断寄存器的数值返回给驱动,执行步骤五。
步骤五,硬件继续处于等待FPGA中有数据需要上传的状态。当硬件检测到FPGA中有需要上传的数据执行步骤六。
步骤六,硬件自主启动DMA写,通过封装写请求包并发送给RC来将需要上传给应用层的数据Data1写入DMA写缓冲区的B Buffer中。写入完毕后执行步骤七。
步骤七,硬件检测到A_buffer_flag为0,表示驱动还没有将ABuffer的数据处理完毕,所以硬件处于等待驱动向A_buffer_flag写入1。
步骤八,硬件检测到驱动向A_buffer_flag写入1后,硬件产生硬线INT中断,同时将中断寄存器中的写完成B中断标志位置1,等待驱动通过PIO读方式读取中断寄存器。当硬件收到驱动读取中断寄存器的请求后执行步骤九。
步骤九,硬件收到驱动发送的PIO读请求包,硬件将中断寄存器的数值返回给驱动。并回到步骤一等待启动下一次DMA传输。
证明部分(具体实施例/实验/仿真/能够证明本发明创造性的正面实验数据等)
DMA读优化之前传输4KB的仿真波形如图10所示:
第一部分:驱动将应用层下发的4KB的数据写入DMA读缓冲区。
第二部分:驱动通过三次PIO写配置DMA读相关寄存器来启动DMA读。
第三部分:硬件启动DMA读,开始发送读请求TLP。
第四部分:RC将DMA读缓冲区的数据通过读完成包返回给硬件。
第五部分:硬件接收到读完成包,解析读完成包并将数据写入硬件缓冲区中。
第六部分:硬件接收到此次DMA读的最后一个读完成包后,产生读完成中断。
第七部分:CPU收到中断后,进入中断处理函数,读取硬件的中断寄存器确定中断源为读完成中断后,开始从应用层搬移下一个4KB的数据。
DMA读优化之前传输64KB的仿真波形如图11所示:
仿真波形中一共有8组信号:
第一组信号表示驱动将应用层的数据搬移至DMA读缓冲区的过程,当DRIVER_PREPARE_DATA_ING信号为高时表示驱动正在将应用层的数据搬移至DMA读缓冲区。
第二组信号表示驱动通过PIO写操作配置硬件启动DMA读的过程,当DRIVER_START_DMA_READ_ING为高时表示驱动正在通过PIO写配置硬件。
第三组信号表示硬件发送读请求的过程,当HARDERWARE_SEND_MRD_DATA_REQ_ING信号为高时表示硬件正在发送读请求。
第四组信号表示RC从DMA读缓冲区中取出数据封装为读完成包并返回给硬件的过程,当RC_RETURN_CPLD_ING信号为高时表示RC正在向硬件返回读完成包。
第五组信号表示硬件接收到读完成包,解析读完成包并将数据写入硬件缓冲区的过程,当HARDERWARE_PROC_CPLD_ING信号为高时表示硬件正在处理接收到的读完成包。
第六组信号表示硬件产生读完成中断的过程,当HARDERWARE_GEN_INTR_ING信号为高时表示硬件产生读完成中断。
第七组信号表示驱动收到中断后完成中断处理的过程,当DRIVER_PROC_INTR_ING信号为高表示驱动正在处理中断。
从仿真波形图10和图11中可以得出以下结论:
1.驱动在从应用层将数据搬移至DMA读缓冲区的过程中,硬件完全处于空闲状态。
2.硬件在处理RC返回的读完成包的过程中,驱动始终处于等待读完成中断的状态。
3.驱动处理中断的时间在整个DMA传输的有效时间中占比比较大。
4.通过DMA读传输64KB的数据,使用了将近620000ns的仿真时间。
DMA读优化之后传输4KB的仿真波形如图12所示:
第一部分:驱动将应用层产生的4KB的数据写入DMA读缓冲区中。
第二部分:驱动通过一次PIO写刷新结束地址,通知硬件DMA读缓冲区中有新数据等待处理。
第三部分:硬件启动DMA读,开始发送读请求TLP
第四部分:RC将硬件请求的DMA读缓冲区的数据封装为读完成包并返回给硬件。
第五部分:硬件接收到读完成包并解析读完成包,将数据写入硬件缓冲区中。
第六部分:驱动将应用层新产生的4KB数据写入DMA读缓冲区中。
下面结合仿真对本发明的技术效果作详细的描述。
DMA读优化之后传输64KB的仿真波形如图13所示:
仿真波形中一共有8组信号:
第一组信号表示驱动将应用层的数据搬移至DMA读缓冲区的过程,当DRIVER_PREPARE_DATA_ING信号为高时表示驱动正在将应用层的数据搬移至DMA读缓冲区。
第二组信号表示驱动通过PIO写操作刷新结束地址的过程,当DRIVER_START_DMA_READ_ING为高时表示驱动正在通过PIO写刷新结束地址。
第三组信号表示硬件发送读请求的过程,当HARDERWARE_SEND_MRD_DATA_REQ_ING信号为高时表示硬件正在发送读请求。
第四组信号表示RC从DMA读缓冲区中取出数据封装为读完成包并返回给硬件的过程,当RC_RETURN_CPLD_ING信号为高时表示RC正在向硬件返回读完成包。
第五组信号表示硬件接收到读完成包,解析读完成包并将数据写入硬件缓冲区的过程,当HARDERWARE_PROC_CPLD_ING信号为高时表示硬件正在处理接收到的读完成包。
第六组信号表示硬件产生读完成中断的过程,当HARDERWARE_GEN_INTR_ING信号为高时表示硬件产生读完成中断。
第七组信号表示驱动收到中断后完成中断处理的过程,当DRIVER_PROC_INTR_ING信号为高表示驱动正在处理中断。
从仿真波形图12和图13中可以得出以下结论:
1.驱动将应用层产生的数据搬移至DMA读缓冲区的过程中,硬件不会处于等待状态,而是在处理上次请求的数据。
2.硬件在处理RC返回的读完成包的过程中,驱动可以随时将应用层产生的数据搬移至DMA读缓冲区中。
3.连续进行了16次DMA传输后才产生一次中断,极大的降低了处理中断的时间在DMA传输的有效时间中的占比。
4.通过DMA读传输64KB的数据,使用了将近310000ns的仿真时间。
总结:
一次DMA读传输中有效的传输时间主要是由两部分组成:
第一部分是驱动将应用层的数据写入DMA读缓冲区的时间。
第二部分是RC返回读完成包给硬件的时间。
优化后的DMA读流程可以使这两部分的执行时间重叠,从而极大的减少一次DMA读传输所用的时间。
优化之后的DMA读流程连续进行多次DMA传输之后,只需要产生一次中断操作,这样可以极大的降低了CPU处理中断而造成的时间损耗。
优化之前通过DMA读传输64KB的数据,使用了将近620000ns的仿真时间。优化之后通过DMA读传输64KB的数据,使用了将近310000ns的仿真时间。优化之后的DMA读效率提高了一倍。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (4)

1.一种TTE端系统适配卡PCIE控制器的高效中断操作方法,其特征在于,所述TTE端系统适配卡PCIE控制器的高效中断操作方法包括以下步骤:
第一步,DMA读流程,DMA读缓冲区分为非保障区和保障区,保障区防止某个数据帧的前半部分在DMA读缓冲区的尾部,而数据帧的后半部分在DMA读缓冲区的头部的情况发生;
第二步,DMA写流程,DMA写缓冲区被分为两个部分,一个是ABuffer另一个是BBuffer;驱动处理A部分的数据时,硬件可以将数据写入B部分,驱动将A部分处理完毕后,开始继续处理B部分的数据;
所述第一步DMA读流程包括:硬件Bar空间中DMA读相关寄存器:
dma_read_buferr_base_addr,32位寄存器,用于存放DMA读缓冲区的基地址;
start_addr,32位寄存器,由硬件维护的头指针;
end_addr,32位寄存器,由驱动维护的尾指针;
round_end_flag,1位寄存器,标志位为1,表示当前的尾地址是当前轮回的最后一个尾地址,该标志位为0表示,表示当前的尾地址不是当前轮回的最后一个尾地址;
所述第一步DMA读流程的驱动处理包括:
步骤一,驱动上电初始化时通过PIO写方式配置dma_read_buferr_base_addr寄存器,初始化完成后执行步骤二;
步骤二,驱动等待应用层产生新的数据,若有新的数据产生,驱动立即将应用层下发的数据写入DMA读缓冲区,如果这次写入操作是某个轮回的首次写入,驱动应该将数据以DMA读缓冲区的基地址为起始点写入DMA读缓冲区,否则驱动应该将数据以上一次写入的数据所在的尾地址为起始点写入DMA读缓冲区,写入完毕后执行步骤三;
步骤三,驱动通过PIO写方式将最新写入的数据所在的尾地址写入硬件的end_addr寄存器,PIO操作完毕后,执行步骤四;
步骤四,驱动将最新写入的数据所在的尾地址与警戒线的大小进行对比;若没有超过警戒线,回到步骤二准备开始下一次DMA传输,若超过警戒线,执行步骤五;
步骤五,驱动通过PIO写方式向硬件中的round_end_flag写入1通知硬件最新更新的end_addr是当前轮回中驱动最后一次更新的尾指针,PIO操作完毕后,执行步骤六;
步骤六,驱动处于等待读完成中断的状态,收到中断后,执行步骤七;
步骤七,驱动收到读完成中断后,将DMA读缓冲区清空,并回到步骤二准备开始下一个轮回的首次DMA传输;
所述第一步DMA读流程的硬件处理包括:
步骤一,硬件检测到驱动配置了Bar空间的dma_read_buferr_base_addr寄存器,执行步骤二;
步骤二,硬件进行初始化操作:硬件自动将dma_read_buferr_base_addr寄存器中的数值写入start_addr寄存器,将Bar空间的round_end_flag寄存器清0;硬件等待驱动进行当前轮回尾指针的首次更新,执行步骤三;
步骤三,硬件检测到驱动更新了尾指针,表示驱动启动了当前轮回的首次DMA传输,执行步骤四;
步骤四,硬件立即启动DMA读,发送读请求包请求DMA读缓冲区中从start_addr到end_addr的数据,读请求包发送完毕后,执行步骤五;
步骤五,RC(RootComplex)将硬件请求的数据封装成读完成包返回给硬件,硬件接收读完成包,解析读完成包,最终将读完成包中的有效数据存入缓存中,当硬件接收到足量的读完成包后,将start_addr寄存器的数值更新为end_addr+1,执行步骤六;
步骤六,硬件检测round_end_flag是否为0,若为0,表示当前轮回的DMA传输还没有结束,执行步骤七,若为1,表示当前轮回的DMA传输已经结束,执行步骤八;
步骤七,硬件实时将start_addr寄存器-1和end_addr的数值进行对比,若相等,表示驱动还未启动新的DMA传输,继续等待;若不相等,表示驱动启动了新的DMA传输,执行步骤四;
步骤八,硬件产生硬线INT中断,并将中断寄存器中的读完成中断标志位置1,回到步骤二准备开始下一个轮回的DMA传输;
所述第二步DMA写流程的硬件Bar空间中DMA写相关寄存器:
dma_write_buferr_base_addr,32位寄存器,存放DMA写缓冲区的基地址;
A_buffer_flag,1位寄存器,标志位为1表示允许硬件向ABuffer写入数据,标志位为0表示不允许硬件向ABuffer写入数据,初始值为1;
B_buffer_flag,1位寄存器,标志位为1表示允许硬件向BBuffer写入数据,标志位为0表示不允许硬件向BBuffer写入数据,初始值为1;
所述第二步DMA写流程的驱动处理包括:
步骤一,驱动上电初始化通过PIO写方式配置dma_write_buferr_base_addr寄存器,初始化完毕后,执行步骤二;
步骤二,驱动等待写完成A中断或写完成B中断,收到写完成A中断后,执行步骤三,收到写完成B中断后,执行步骤四;
步骤三,驱动收到写完成A中断后,立即解析ABuffer中的数据,解析完毕后,向硬件的A_buffer_flag写入1;
步骤四,驱动收到写完成B中断后,立即解析BBuffer中的数据,解析完毕后,向硬件的B_buffer_flag写入1;
所述第二步DMA写流程的硬件处理包括:
步骤一,硬件实时监测或定时检测接收FIFO中是否有待发的完整数据帧,若有待发的完整数据帧,执行步骤二;
步骤二,硬件自主启动DMA写,若此次启动是首次启动或上次启动DMA写将数据写入了BBuffer,执行步骤三,否则执行步骤六;
步骤三,硬件将数据封装为写请求包并写入ABuffer,所有数据写完后,判断B_buffer_flag是否为1,若B_buffer_flag是0,执行步骤四,否则执行步骤五;
步骤四,硬件等待驱动向B_buffer_flag写入1,当B_buffer_flag为1后,执行步骤五;
步骤五,硬件产生硬线INT中断,并将中断寄存器中写完成A中断标志位置1,并将A_buffer_flag清0,回到步骤一;
步骤六,硬件将数据封装为写请求包并写入BBuffer,所有数据写完后,判断A_buffer_flag是否为1,若A_buffer_flag是0,执行步骤七,否则执行步骤八;
步骤七,硬件等待驱动向A_buffer_flag写入1,当A_buffer_flag为1后,执行步骤八;
步骤八,硬件产生硬线INT中断,并将中断寄存器中写完成B中断标志位置1,并将B_buffer_flag清0,回到步骤一。
2.一种应用权利要求1所述TTE端系统适配卡PCIE控制器的高效中断操作方法的TTE端系统。
3.一种应用权利要求1所述TTE端系统适配卡PCIE控制器的高效中断操作方法的AFDX端系统卡。
4.一种应用权利要求1所述TTE端系统适配卡PCIE控制器的高效中断操作方法的具有收发以太网数据的系统卡。
CN201911046802.5A 2019-10-30 2019-10-30 Tte端系统适配卡pcie控制器的高效中断操作方法 Active CN110990309B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911046802.5A CN110990309B (zh) 2019-10-30 2019-10-30 Tte端系统适配卡pcie控制器的高效中断操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911046802.5A CN110990309B (zh) 2019-10-30 2019-10-30 Tte端系统适配卡pcie控制器的高效中断操作方法

Publications (2)

Publication Number Publication Date
CN110990309A CN110990309A (zh) 2020-04-10
CN110990309B true CN110990309B (zh) 2023-04-28

Family

ID=70082735

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911046802.5A Active CN110990309B (zh) 2019-10-30 2019-10-30 Tte端系统适配卡pcie控制器的高效中断操作方法

Country Status (1)

Country Link
CN (1) CN110990309B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115454900A (zh) * 2022-08-08 2022-12-09 北京阿帕科蓝科技有限公司 数据传输方法、装置、计算机设备、存储介质和程序产品
CN115687200B (zh) * 2022-12-30 2023-06-13 浙江中控研究院有限公司 基于FPGA应用于EPA的PCIe数据传输方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521179A (zh) * 2011-11-28 2012-06-27 曙光信息产业股份有限公司 一种dma读操作的实现装置和方法
CN107943726A (zh) * 2017-11-16 2018-04-20 郑州云海信息技术有限公司 一种基于PCIe接口的数据传输系统及方法
CN107967225A (zh) * 2017-11-21 2018-04-27 深圳市统先科技股份有限公司 数据传输方法、装置、计算机可读存储介质和终端设备
CN108763121A (zh) * 2018-04-28 2018-11-06 西安电子科技大学 TTE端系统适配卡PCIe控制器的中断操作方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9563572B2 (en) * 2014-12-10 2017-02-07 International Business Machines Corporation Migrating buffer for direct memory access in a computer system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521179A (zh) * 2011-11-28 2012-06-27 曙光信息产业股份有限公司 一种dma读操作的实现装置和方法
CN107943726A (zh) * 2017-11-16 2018-04-20 郑州云海信息技术有限公司 一种基于PCIe接口的数据传输系统及方法
CN107967225A (zh) * 2017-11-21 2018-04-27 深圳市统先科技股份有限公司 数据传输方法、装置、计算机可读存储介质和终端设备
CN108763121A (zh) * 2018-04-28 2018-11-06 西安电子科技大学 TTE端系统适配卡PCIe控制器的中断操作方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于PCIe的多路传输系统的DMA控制器设计;李胜蓝等;《计算机应用》;20170310(第03期);全文 *

Also Published As

Publication number Publication date
CN110990309A (zh) 2020-04-10

Similar Documents

Publication Publication Date Title
KR100869675B1 (ko) 디스크립터 배열을 이용한 플래시 메모리 제어 시스템 및방법
CN102156683B (zh) 通用串行总线传输转译器及微帧同步方法
CN109558344B (zh) 一种适用于网络传输的dma传输方法及dma控制器
WO2016127552A1 (zh) 一种直接内存存取dma控制器及数据传输的方法
CN110990309B (zh) Tte端系统适配卡pcie控制器的高效中断操作方法
CN108763121B (zh) TTE端系统适配卡PCIe控制器的中断操作方法
CN105224482A (zh) 一种fpga加速卡高速存储系统
US9734102B2 (en) Data transfer
KR102367359B1 (ko) 직렬 시스템 버스 인터페이스 및 직접메모리액세스 컨트롤러를 갖는 전자 시스템 및 그 동작 방법
US6128674A (en) Method of minimizing host CPU utilization in driving an adapter by residing in system memory a command/status block a soft interrupt block and a status block queue
US9189166B2 (en) Multi-host SATA controller
WO2020177252A1 (zh) 基于pcie协议的dma控制器及dma数据传输方法
EP1820110B1 (en) Multimedia card interface method, computer program product and apparatus
CN102937939A (zh) 基于sata控制器的dma地址对预读取方法
CN116225534B (zh) Dma数据传输控制系统
CN114817965A (zh) 基于多算法ip核实现msi中断处理的高速加解密系统及方法
US9892032B2 (en) Management of random cache read operations
US6721833B2 (en) Arbitration of control chipsets in bus transaction
US6772311B2 (en) ATAPI device unaligned and aligned parallel I/O data transfer controller
US6327636B1 (en) Ordering for pipelined read transfers
CN110825674B (zh) 基于fpga的pcie dma交互系统及交互方法
CN113946527A (zh) 一种基于PCIe总线的多通道DMA交互设计方法
KR101209919B1 (ko) 폴링-구동 장치 드라이버 인터페이스
CN101976230A (zh) 通用序列总线传输转译器及输入请求同步传输方法
CN208077160U (zh) 基于spi模式的sd卡驱动器

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant