CN116719763A - PCIe总线多通道DMA读传输系统 - Google Patents

PCIe总线多通道DMA读传输系统 Download PDF

Info

Publication number
CN116719763A
CN116719763A CN202310715144.4A CN202310715144A CN116719763A CN 116719763 A CN116719763 A CN 116719763A CN 202310715144 A CN202310715144 A CN 202310715144A CN 116719763 A CN116719763 A CN 116719763A
Authority
CN
China
Prior art keywords
read request
dma
data
channel
packet
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.)
Pending
Application number
CN202310715144.4A
Other languages
English (en)
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.)
Shanghai Anlu Information Technology Co ltd
Original Assignee
Shanghai Anlu Information Technology Co ltd
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 Shanghai Anlu Information Technology Co ltd filed Critical Shanghai Anlu Information Technology Co ltd
Priority to CN202310715144.4A priority Critical patent/CN116719763A/zh
Publication of CN116719763A publication Critical patent/CN116719763A/zh
Pending legal-status Critical Current

Links

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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • 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

本发明公开了一种PCIe总线多通道DMA读传输系统,包括:读取模块、写入模块、分离模块、时序模块、H2C多通道模块和C2H多通道模块;其中,所述读取模块与所述C2H多通道模块连接、所述C2H多通道模块与所述时序模块连接、所述时序模块通过PCIe核与所述分离模块连接、所述分离模块与所述H2C多通道模块连接,所述H2C多通道模块与所述写入模块连接。本发明所设计的C2H多通道模块和H2C多通道模块在处理数据时,每个通道互相独立,互不影响,可直接在多通道模块中调整通道数,有利于DMA读传输的通道拓展,能够应用于不同数据量的DMA读传输的场景。

Description

PCIe总线多通道DMA读传输系统
技术领域
本发明涉及数据交换网络技术领域,尤其涉及一种PCIe总线多通道DMA读传输系统。
背景技术
高速串行计算机扩展总线标准(Peripheral Component Interconnect Express,简称PCIe),具有高性能和高带宽的优点。DMA是一种快速传送数据的机制,由DMA控制器实现,DMA的应用能够有效减轻处理器的负担,可以大大提高速度传输的效率,从而提高系统性能。随着PCIe数据通信网络越来越复杂,对高效的多通道DMA使用需求越来越频繁,如监控领域的多视频图像拼接融合,汽车电子领域的多传感器数据融合,AI加速器领域的多个加速核数据转运等。
当前可知的在FPGA内实现PCIe总线DMA读传输的实现方案:一、DMA读请求一侧使用固定数量的Tag资源,返回侧开启同样数量的Buffer,当一个完整的返回包释放后,才产生一个新的读请求,同时把返回的混乱顺序小包按照Tag不同顺序写入Buffer,然后当一个包写完后通知后续模块读出;二、新建一个单向循环队列tag_queue,在其中设置头尾指针分别为tag_front和tag_rear,使用8位寄存器存放这两个指针,队列中的每个entry对应一个Tag资源,发起一次读请求tag_rear加1并置entry为used,释放一个完整的包tag_front也加1并置unused,只有tag_rear加1之后的entry为unused才使能产生新的读请求,初始时所有entry为unused;但方案一和方案二都没有涉及在DMA读请求中如何处理多通道,导致多通道DMA难以兼容性设计。
因此,亟需PCIe总线多通道DMA读传输系统,从而解决多通道DMA难以兼容性设计的问题。
发明内容
本发明实施例提供PCIe总线多通道DMA读传输系统,以解决多通道DMA难以兼容性设计的问题。
为了解决上述问题,本发明一实施例提供一种PCIe总线多通道DMA读传输系统,包括:读取模块、写入模块、分离模块、时序模块、H2C多通道模块和C2H多通道模块;其中,所述读取模块与所述C2H多通道模块连接、所述C2H多通道模块与所述时序模块连接、所述时序模块通过PCIe核与所述分离模块连接、所述分离模块与所述H2C多通道模块连接,所述H2C多通道模块与所述写入模块连接;
所述读取模块,用于获取APP传输的各DMA读请求,并将每一所述DMA读请求分别传输给所述C2H多通道模块的每一C2H通道中;
所述C2H多通道模块,用于确定每一C2H通道中DMA读请求对应的DMA有效读请求包,并通过轮询选择输出,将所有C2H通道对应的DMA有效读请求包传输给所述时序模块;其中,所述DMA有效读请求包,包括:Tag值和DMA有效读请求的包头参数;
所述时序模块,用于根据每一C2H通道所确定的DMA有效读请求包,生成TLP时序,并将TLP时序传输给所述PCIe核;其中,所述PCIe核根据所述TLP时序、以及每一DMA有效读请求包对应的Tag值和DMA有效读请求的包头参数,调取每一DMA有效读请求包对应的DMA读请求数据,并将各DMA有效请求包和各DMA读请求数据传输给分离模块;
所述分离模块,用于接收PCIe核传输的各DMA有效请求包和各DMA读请求数据,并将各DMA有效请求包和各DMA读请求数据组合成读请求返回数据,根据各DMA有效读请求包对应的Tag值,将读请求返回数据分离成若干个DMA读请求小包数据,并将每个DMA读请求小包数据传输至所述H2C多通道模块的一H2C通道中;其中,每一所述DMA读请求小包数据包括:Tag值、DMA读请求数据和DMA有效读请求的包头参数;
所述H2C多通道模块,用于在每一H2C通道中,根据DMA读请求小包数据对应的Tag值、DMA读请求数据和DMA有效读请求的包头参数,进行Buffer写入操作,获得Buffer数据,并根据预设的读时序和目标整包的Buffer数据,获得若干组目标DMA读请求大包数据;
所述写入模块,用于接收若干组目标DMA读请求大包数据,并根据预设的通用总线时序,将若干组目标DMA读请求大包数据进行拼接操作,获得DMA读请求目标整包数据,将DMA读请求目标整包数据写入APP,完成DMA读数据的传输。
作为上述方案的改进,所述DMA读请求包括:C2H描述符读请求、H2C描述符读请求和H2C数据读请求;所述C2H多通道模块,包括:若干通道读请求调控单元、若干DMA读仲裁单元和轮询选择单元;
所述通道读请求调控单元,用于根据当前C2H通道中的DMA读请求、以及H2C通道反馈的Buffer指针和H2C通道反馈的请求包释放数据,确定当前C2H通道对应的DMA有效请求的包头参数,并将当前C2H通道对应的DMA有效请求的包头参数传输给当前C2H通道对应的DMA读仲裁单元;
所述DMA读仲裁单元,用于对当前C2H通道中的DMA有效请求的包头参数进行有效判断,从而确定当前C2H通道对应的Tag值,并将当前C2H通道的DMA有效请求的包头参数和Tag值合成DMA有效读请求包,将DMA有效读请求包传输给所述轮询选择单元;
所述轮询选择单元,用于将所有C2H通道对应的DMA有效读请求包轮询传输至所述时序模块。
作为上述方案的改进,所述通道读请求调控单元,包括:重复执行以下步骤,在DMA引擎运行结束后停止:H2C通道复位信号有效判断、H2C通道数据量差值计算、可用Tag个数计算和有效读请求生成;
所述H2C通道复位信号有效判断,包括:判断H2C通道复位信号是否有效:若是,则对H2C通道中的数据进行清零,在清零后执行所述通道数据量差值计算和Tag个数计算;若否,则执行所述H2C通道数据量差值计算和Tag个数计算;其中,所述路上数据,具体为:从C2H多通道模块发出且未由PCIe核处理的DMA有效读请求包;所述PCIe核处理,具体为:所述PCIe核根据DMA有效读请求包所反馈的DMA读请求数据;
所述H2C通道数据量差值计算,包括:判断H2C通道中的Buffer写使能和当前DMA读请求调控模块对应的DMA读请求是否有效:若H2C通道中的Buffer写使能和当前DMA读请求调控模块对应的DMA读请求同时有效,则根据路上数据量、当前DMA有效读请求包数据量和下一DMA读请求调控模块对应的DMA读请求包长度,计算H2C通道容量,并结合H2C通道容量和H2C通道Buffer,计算空间差值;若H2C通道中的Buffer写使能无效或当前DMA读请求调控模块对应的DMA读请求无效时,则重新判断H2C通道中的Buffer写使能和当前DMA读请求调控模块对应的DMA读请求是否有效;其中,所述H2C通道Buffer根据Buffer深度和Buffer已用空间计算获得;
所述可用Tag个数计算,包括:根据写入模块中的DMA读请求整包数据、当前C2H通道的DMA有效请求包和Tag个数算法,计算可用Tag个数;其中,所述Tag个数算法,具体为:在识别到写入模块中新增一个DMA读请求整包数据时,则Tag个数减一;在识别到当前C2H通道新增一个DMA有效请求包时,则Tag个数加一;
所述有效读请求生成,包括:在计算获得空间差值和可用Tag个数后,同时判断空间差值是否大于空间阈值,可用Tag个数是否小于Tag阈值;若空间差值大于空间阈值且可用Tag个数小于Tag阈值,则生成H2C数据有效读请求;否则,重新判断空间差值是否大于空间阈值、可用Tag个数是否小于Tag阈值。
作为上述方案的改进,所述DMA读仲裁单元,包括:依次执行以下步骤,在DMA引擎运行结束后停止:C2H通道复位信号有效判断、DMA读请求种类判断、Tag释放判断和DMA有效请求包发送检测;
所述C2H通道复位信号有效判断,包括:判断当前C2H通道中C2H通道复位信号是否有效:若是,则对C2H通道中等待的读请求进行清除,在清除后执行所述DMA读请求种类判断;若否,则执行所述DMA读请求种类判断;
所述DMA读请求种类判断,包括:判断当前C2H通道中H2C描述符读请求、C2H描述符读请求和H2C数据读请求是否有效:若H2C描述符读请求有效,则选择H2C描述符读请求作为备选项;若H2C描述符读请求无效、且C2H描述符读请求有效,则选择C2H描述符读请求作为备选项;若H2C描述符读请求无效、C2H描述符读请求无效、且H2C数据读请求有效,则选择H2C数据读请求作为备选项;若H2C描述符读请求无效、C2H描述符读请求无效、且H2C数据读请求无效,则重新判断H2C描述符读请求、C2H描述符读请求和H2C数据读请求是否有效;
所述Tag释放判断,包括:在当前C2H通道确定备选项后,判断备选项对应的Tag值是否返回:若是,则将当前C2H通道的DMA有效请求的包头参数和Tag值合成DMA有效读请求包,并将DMA有效读请求包发送给所述轮询选择单元;若否,则重新判断备选项对应的Tag值是否返回;
所述DMA有效请求包发送检测,包括:在将DMA有效读请求包发送给所述轮询选择单元后,判断DMA有效请求包是否全部发送:若是,则重新执行C2H通道复位信号有效判断;若否,则重新判断DMA有效请求包是否全部发送。
作为上述方案的改进,所述Tag值包括:已使用Tag值和未使用Tag值;所述Tag值的生成方法,具体为:
对确定为备选项的目标DMA读请求进行整包数据判断:
若路上数据存在与目标DMA读请求相同整包的目标DMA有效读请求包,且所述时序模块生成目标DMA有效读请求包对应的读请求返回数据,则将目标DMA有效读请求包对应的已使用Tag值返回给确定为备选项的目标DMA读请求;
若路上数据不存在与目标DMA读请求相同整包的目标DMA有效读请求包,则在未使用Tag值中确定一目标Tag值,将目标Tag值返回给确定为备选项的目标DMA读请求;
若目标DMA读请求为一整包的最后一个读请求,则在目标DMA读请求根据返回的已使用Tag值生成读请求返回数据后,将目标DMA读请求的已使用Tag值更新为未使用Tag值。
作为上述方案的改进,所述分离模块,包括:数据分离单元、数据拼接单元和包长度数据计算单元;
所述数据分离单元,用于根据各DMA有效读请求包对应的Tag值,将所述TLP时序分离为若干DMA读请求小包数据;
所述数据拼接单元,用于根据确定每一DMA读请求小包数据的TLP包头字段,并根据每一TLP包头字段和预设的移位拼接方式进行数据拼接;其中,DMA读请求小包数据,包括:TLP包头字段、包长度和有效读请求数据;
所述包长度数据计算单元,用于判断每一DMA读请求小包数据是否为目标整包的最后一个小包:若是,则包长度为当前包长度;若否,若否,则根据数据长度和下地址确定包长度。
作为上述方案的改进,所述H2C多通道模块,包括:若干通道数据排序单元和若干通道数据组通用时序总线单元;
所述通道数据排序单元,用于在当前H2C通道中,根据当前DMA读请求小包数据和与当前DMA读请求小包数据对应的Tag值,进行Buffer写入操作,并在Buffer中提取Buffer数据;其中,Buffer数据包括:读地址和包长度;
所述通道数据组通用时序总线单元,用于根据预设的读时序以及目标整包的读地址和包长度,从Buffer中读取属于目标整包的若干组目标DMA读请求小包数据,并对若干组目标DMA读请求小包数据进行无效数据转移操作和相邻数据拼接操作,获得若干组目标DMA读请求大包数据。
作为上述方案的改进,所所述对若干组目标DMA读请求小包数据进行无效数据转移操作和相邻数据拼接操作,获得若干组目标DMA读请求大包数据,具体为:
所述通道数据组通用时序总线单元对若干组DMA读请求小包数据进行无效数据转移操作,并在无效数据转移后,对每组Tag值相邻的目标DMA读请求小包数据进行拼接,汇总获得若干做目标DMA读请求大包数据。
由上可见,本发明具有如下有益效果:
本发明提供了一种PCIe总线多通道DMA读传输系统,包括:读取模块、写入模块、分离模块、时序模块、H2C多通道模块和C2H多通道模块;其中,所述读取模块与所述C2H多通道模块连接、所述C2H多通道模块与所述时序模块连接、所述时序模块通过PCIe核与所述分离模块连接、所述分离模块与所述H2C多通道模块连接,所述H2C多通道模块与所述写入模块连接;本发明在读取模块获取到DMA读请求后,根据DMA读请求分配给C2H多通道模块中;在每个C2H通道中确定DMA有效读请求包,并进行轮询选择输出,进而将所有C2H通道确定的DMA有效读请求包传输给时序模块;时序模块基于DMA有效读请求包,生成TLP时序,并将TLP时序传输给PCIe核进行读请求返回数据的生成;通过分离模块接收PCIe核反馈的读请求返回数据,并进行分离,获得若干组DMA读请求小包数据,并按照Tag值传输给H2C多通道模块的一个H2C通道中;而在H2C多通道模块的每个H2C通道中,根据DMA读请求小包数据和对应的Tag值进行Buffer的写入操作,获得Buffer数据,并根据预设的读时序和目标整包Buffer,生成若干组目标DMA读请求大包数据;最后通过写入模块根据预设的通用总线时序将生成的目标DMA读请求大包数据进行拼接操作,获得DMA读请求目标整包数据,将DMA读请求目标整包数据写入APP,完成DMA读数据的传输。本发明所设计的C2H多通道模块和H2C多通道模块在处理数据时,每个通道互相独立,互不影响,可直接在多通道模块中调整通道数,有利于DMA读传输的通道拓展,能够应用于不同数据量的DMA读传输的场景。
进一步地,本发明在C2H多通道模块输出DMA有效读请求包时,需要对H2C通道数据量差值和Tag个数进行判断,综合考虑DMA有效读请求包生成后是否能够及时处理,从而保证DMA有效读请求生成时不会出现处理空档期,减小了DMA有效读请求包处理时间间隔。
附图说明
图1是本发明一实施例提供的PCIe总线多通道DMA读传输系统的结构示意图;
图2是本发明一实施例提供的分离模块、时序模块、H2C多通道模块和C2H多通道模块的结构示意图;
图3是本发明一实施例提供的通道读请求调控单元所对应的控制流程示意图;
图4是本发明一实施例提供的DMA读仲裁单元所对应的控制流程示意图;
图5是本发明一实施例提供的包参数存取的流程示意图;
图6是本发明一实施例提供的BRAM读时序的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
参见图1,图1是本发明一实施例提供的一种PCIe总线多通道DMA读传输装置的结构示意图,包括:读取模块101、写入模块102、分离模块103、时序模块104、H2C多通道模块105和C2H多通道模块106;其中,所述读取模块与所述C2H多通道模块连接、所述C2H多通道模块与所述时序模块连接、所述时序模块通过PCIe核与所述分离模块连接、所述分离模块与所述H2C多通道模块连接,所述H2C多通道模块与所述写入模块连接;
所述读取模块,用于获取APP传输的各DMA读请求,并将每一所述DMA读请求分别传输给所述C2H多通道模块的每一C2H通道中;
所述C2H多通道模块,用于确定每一C2H通道中DMA读请求对应的DMA有效读请求包,并通过轮询选择输出,将所有C2H通道对应的DMA有效读请求包传输给所述时序模块;其中,所述DMA有效读请求包,包括:Tag值和DMA有效读请求的包头参数;
所述时序模块,用于根据每一C2H通道所确定的DMA有效读请求包,生成TLP时序,并将TLP时序传输给所述PCIe核;其中,所述PCIe核根据所述TLP时序、以及每一DMA有效读请求包对应的Tag值和DMA有效读请求的包头参数,调取每一DMA有效读请求包对应的DMA读请求数据,并将各DMA有效请求包和各DMA读请求数据传输给分离模块;
所述分离模块,用于接收PCIe核传输的各DMA有效请求包和各DMA读请求数据,并将各DMA有效请求包和各DMA读请求数据组合成读请求返回数据,根据各DMA有效读请求包对应的Tag值,将读请求返回数据分离成若干个DMA读请求小包数据,并将每个DMA读请求小包数据传输至所述H2C多通道模块的一H2C通道中;其中,每一所述DMA读请求小包数据包括:Tag值、DMA读请求数据和DMA有效读请求的包头参数;
所述H2C多通道模块,用于在每一H2C通道中,根据DMA读请求小包数据对应的Tag值、DMA读请求数据和DMA有效读请求的包头参数,进行Buffer写入操作,获得Buffer数据,并根据预设的读时序和目标整包的Buffer数据,获得若干组目标DMA读请求大包数据;
所述写入模块,用于接收若干组目标DMA读请求大包数据,并根据预设的通用总线时序,将若干组目标DMA读请求大包数据进行拼接操作,获得DMA读请求目标整包数据,将DMA读请求目标整包数据写入APP,完成DMA读数据的传输。
在一具体的实施例中,每路DMA读请求中都可能包括C2H描述符(对应DMA写的描述符)读请求、H2C描述符(对应DMA读的描述符)读请求和H2C数据读请求中的一种或多种。
在一具体的实施例中,请参见图2,图2为分离模块、时序模块、H2C多通道模块和C2H多通道模块的结构示意图。
在一具体的实施例中,轮询选择模块,此模块的实现较简单,每个通道的优先级一样,把C2H通道0到通道N的DMA有效读请求包依次选择一遍(如果轮询到的读请求无效则跳过),再连同每个通道DMA有效读请求包对应的包头参数一起送到读请求时序模块。
在一具体的实施例中,读请求时序模块(即本发明所述的时序模块),虽然PCIe协议是一样的,但各大IP厂家留给用户的接口不一样,如Synopsys公司会提供Native(xali0、xali1、radm_trgt1,radm_bypass等接口)和AXI4-MM两种总线,而PLDA公司只提供自定义的多套tl总线,但是最低层的TLP包格式都一样,此处不做介绍,只需把上一模块的包头封装成各自总线时序,然后与各自PCIe-Core对接。
作为上述方案的改进,所述DMA读请求包括:C2H描述符读请求、H2C描述符读请求和H2C数据读请求;所述C2H多通道模块,包括:若干通道读请求调控单元、若干DMA读仲裁单元和轮询选择单元;
所述通道读请求调控单元,用于根据当前C2H通道中的DMA读请求、以及H2C通道反馈的Buffer指针和H2C通道反馈的请求包释放数据,确定当前C2H通道对应的DMA有效请求的包头参数,并将当前C2H通道对应的DMA有效请求的包头参数传输给当前C2H通道对应的DMA读仲裁单元;
所述DMA读仲裁单元,用于对当前C2H通道中的DMA有效请求的包头参数进行有效判断,从而确定当前C2H通道对应的Tag值,并将当前C2H通道的DMA有效请求的包头参数和Tag值合成DMA有效读请求包,将DMA有效读请求包传输给所述轮询选择单元;
所述轮询选择单元,用于将所有C2H通道对应的DMA有效读请求包轮询传输至所述时序模块。
在一具体的实施例中,由于H2C数据读请求比较频繁,为了提高它的性能,添加读请求调控模块保证返回的数据包尽可能连续。
作为上述方案的改进,所述通道读请求调控单元,包括:重复执行以下步骤,在DMA引擎运行结束后停止:H2C通道复位信号有效判断、H2C通道数据量差值计算、可用Tag个数计算和有效读请求生成;
所述H2C通道复位信号有效判断,包括:判断H2C通道复位信号是否有效:若是,则对H2C通道中的路上数据进行清零,在清零后执行所述通道数据量差值计算和Tag个数计算;若否,则执行所述H2C通道数据量差值计算和Tag个数计算;其中,所述路上数据,具体为:从C2H多通道模块发出且未由PCIe核处理的DMA有效读请求包;所述PCIe核处理,具体为:所述PCIe核根据DMA有效读请求包所反馈的DMA读请求数据;
所述H2C通道数据量差值计算,包括:判断H2C通道中的Buffer写使能和当前DMA读请求调控模块对应的DMA读请求是否有效:若H2C通道中的Buffer写使能和当前DMA读请求调控模块对应的DMA读请求同时有效,则根据路上数据量、当前DMA有效读请求包数据量和下一DMA读请求调控模块对应的DMA读请求包长度,计算H2C通道容量,并结合H2C通道容量和H2C通道Buffer,计算空间差值;若H2C通道中的Buffer写使能无效或当前DMA读请求调控模块对应的DMA读请求无效时,则重新判断H2C通道中的Buffer写使能和当前DMA读请求调控模块对应的DMA读请求是否有效;其中,所述H2C通道Buffer根据Buffer深度和Buffer已用空间计算获得;
所述可用Tag个数计算,包括:根据写入模块中的DMA读请求整包数据、当前C2H通道的DMA有效请求包和Tag个数算法,计算可用Tag个数;其中,所述Tag个数算法,具体为:在识别到写入模块中新增一个DMA读请求整包数据时,则Tag个数减一;在识别到当前C2H通道新增一个DMA有效请求包时,则Tag个数加一;
所述有效读请求生成,包括:在计算获得空间差值和可用Tag个数后,同时判断空间差值是否大于空间阈值,可用Tag个数是否小于Tag阈值;若空间差值大于空间阈值且可用Tag个数小于Tag阈值,则生成H2C数据有效读请求;否则,重新判断空间差值是否大于空间阈值、可用Tag个数是否小于Tag阈值。
在一具体的实施例中,空间阈值和Tag阈值根据用户的DMA读传输系统所涉及的数据量来确定。
作为优选的,空间阈值可以为0。
在一具体的实施例中,首先通道n(n代表上述0~N中的一个)读请求调控模块(即本发明所述的通道读请求调控单元),它接收DMA读请求n中的H2C数据读请求,然后结合H2C通道n反馈的数据Buffer指针和请求包释放情况控制H2C数据读请求的发出,具体的调控流程如图3所示:
图3中,“通道n复位信号”在每次DMA引擎运行结束后产生一次,保证上一次DMA传输的错误不影响下一次DMA工作;所提及的“长度”单位都为byte,FIFO剩余空间的单位也转换成byte;Tag的“预设值”一般通过宏定义来配置,假设为32,当消耗的Tag个数为32(也就是读请求比返回多32个),到达了预设值,如果此时继续产生一个新的读请求会出现没有释放的Tag再次使用,导致PCIe-Core内部出错;最后一行“两者同时满足”,指当FIFO的剩余空间可以再装下一个包,且下一个读请求包Tag也释放了,即可产生一个有效的读请求(即本发明所述的H2C数据有效读请求),FIFO深度即本发明所述的Buffer深度,FIFO已用空间即本发明所述的Buffer已用空间,FIFO剩余空间即本发明所述的H2C通道Buffer。
作为上述方案的改进,所述DMA读仲裁单元,包括:依次执行以下步骤,在DMA引擎运行结束后停止:C2H通道复位信号有效判断、DMA读请求种类判断、Tag释放判断和DMA有效请求包发送检测;
所述C2H通道复位信号有效判断,包括:判断当前C2H通道中C2H通道复位信号是否有效:若是,则对C2H通道中等待的读请求进行清除,在清除后执行所述DMA读请求种类判断;若否,则执行所述DMA读请求种类判断;
所述DMA读请求种类判断,包括:判断当前C2H通道中H2C描述符读请求、C2H描述符读请求和H2C数据读请求是否有效:若H2C描述符读请求有效,则选择H2C描述符读请求作为备选项;若H2C描述符读请求无效、且C2H描述符读请求有效,则选择C2H描述符读请求作为备选项;若H2C描述符读请求无效、C2H描述符读请求无效、且H2C数据读请求有效,则选择H2C数据读请求作为备选项;若H2C描述符读请求无效、C2H描述符读请求无效、且H2C数据读请求无效,则重新判断H2C描述符读请求、C2H描述符读请求和H2C数据读请求是否有效;
所述Tag释放判断,包括:在当前C2H通道确定备选项后,判断备选项对应的Tag值是否返回:若是,则将当前C2H通道的DMA有效请求的包头参数和Tag值合成DMA有效读请求包,并将DMA有效读请求包发送给所述轮询选择单元;若否,则重新判断备选项对应的Tag值是否返回;
所述DMA有效请求包发送检测,包括:在将DMA有效读请求包发送给所述轮询选择单元后,判断DMA有效请求包是否全部发送:若是,则重新执行C2H通道复位信号有效判断;若否,则重新判断DMA有效请求包是否全部发送。
在本实施例中,所述Tag值包括:已使用Tag值和未使用Tag值;所述Tag值的生成方法,具体为:
对确定为备选项的目标DMA读请求进行整包数据判断:
若路上数据存在与目标DMA读请求相同整包的目标DMA有效读请求包,且所述时序模块生成目标DMA有效读请求包对应的读请求返回数据,则将目标DMA有效读请求包对应的已使用Tag值返回给确定为备选项的目标DMA读请求;
若路上数据不存在与目标DMA读请求相同整包的目标DMA有效读请求包,则在未使用Tag值中确定一目标Tag值,将目标Tag值返回给确定为备选项的目标DMA读请求;
若目标DMA读请求为一整包的最后一个读请求,则在目标DMA读请求根据返回的已使用Tag值生成读请求返回数据后,将目标DMA读请求的已使用Tag值更新为未使用Tag值。
在一具体的实施例中,接着DMA读仲裁模块n(即本发明所述的DMA读仲裁单元),前文提到它的输入可能有三种类型,这些类型根据优先级选择一种作为备选项,然后检测此备选项对应的Tag是否已经释放,如果是则选择此类型作为输出,详细的流程如下图4所示:
图4中,本发明所涉及的优先级不会导致某个读请求因为优先级低而饿死,其实不会。原因是:H2C描述符读请求和C2H描述符读请求虽然优先级高,但是它请求一次包含的数据空间足够大,H2C数据读请求可以用很久,而长时间的描述符读请求会导致存它们的Buffer填满而不得不停下来让位给低优先级的读请求。同通道读请求调控流程图一样,每次DMA初始时也会检测当前通道n是否有复位信号,从而保证每次DMA都是一次新的开始。
作为上述方案的改进,所述分离模块,包括:数据分离单元、数据拼接单元和包长度数据计算单元;
所述数据分离单元,用于根据各DMA有效读请求包对应的Tag值,将所述TLP时序分离为若干DMA读请求小包数据;
所述数据拼接单元,用于根据确定每一DMA读请求小包数据的TLP包头字段,并根据每一TLP包头字段和预设的移位拼接方式进行数据拼接;其中,DMA读请求小包数据,包括:TLP包头字段、包长度和有效读请求数据;
所述包长度数据计算单元,用于判断每一DMA读请求小包数据是否为目标整包的最后一个小包:若是,则包长度为当前包长度;若否,则根据数据长度和下地址确定包长度。
在一具体的实施例中,读请求返回数据分离模块(即本发明所述的分离模块),上文提到读请求有3个类型N个通道,总共3N种情况,如果有限的Tag(有些PCIe-Core只提供64个Tag)等分到如此多类别的读请求显然是不合适的,也会影响读请求的效率。为此,读请求一侧把Tag和上述的3N种情况做了一个映射关系,请求侧(即读取模块、时序模块和C2H多通道模块)只管发送Tag连续的读请求,返回侧(即写入模块、分离模块和H2C多通道模块)按照映射关系分离出各类型和通道的数据。由于分离出的各通道数据处理一致,所以后续只详细介绍其中一个通道编号为n且类型为数据的处理。
返回的数据由于真实地址不一定是DW对齐,所以数据会出现无效byte位;再由于请求的一个整包可能分拆成多个小包返回,包长度也不一定是length(TLP包头中的字段,单位DW)或ByteCount(TLP包头中的字段,整包中剩下的byte数,包括当前包)。为此,排序之前先把它移位成连续有效的数据(即本发明所述的若干组DMA读请求小包数据),并确定每个小包的长度。移位方式根据LowerAddress(同样TLP包头中的字段)的低2bit来确定,具体移位拼接方式见下表1(即本发明所述的预设的移位拼接方式)。表1中的radm_bypass_data为返回包中的数据,cpld_data_d1为radm_bypass_data打一拍之后的数据。小包的长度与length(即本发明所述的数据长度)、ByteCount(即本发明所述的当前包长度)、LowerAddress(即本发明所述的下地址)(返回包地址的低7bit)和radm_cpl_last(指示整包的最后一个小包)有关,当radm_cpl_last为1,ByteCount即为当前包长度,否则当前包长度为({length,2'b00}-{10'd0,LowerAddress[1:0]})。
LowerAddress[1:0] 移位方式(*_data_d1为下面*_data打一拍,`WD为数据位宽)
2'b00 cpld_data_d1
2'b01 {radm_bypass_data[7:0],radm_bypass_data_d1[`WD-1:8]}
2'b10 {radm_bypass_data[15:0],radm_bypass_data_d1[`WD-1:16]}
2'b11 {radm_bypass_data[23:0],radm_bypass_data_d1[`WD-1:24]}
表一
作为上述方案的改进,所述H2C多通道模块,包括:若干通道数据排序单元和若干通道数据组通用时序总线单元;
所述通道数据排序单元,用于在当前H2C通道中,根据当前DMA读请求小包数据和与当前DMA读请求小包数据对应的Tag值,进行Buffer写入操作,并在Buffer中提取Buffer数据;其中,Buffer数据包括:读地址和包长度;
所述通道数据组通用时序总线单元,用于根据预设的读时序以及目标整包的读地址和包长度,从Buffer中读取属于目标整包的若干组目标DMA读请求小包数据,并对若干组目标DMA读请求小包数据进行无效数据转移操作和相邻数据拼接操作,获得若干组目标DMA读请求大包数据。
在一具体的实施例中,得到的连续数据和包长度等参数送到通道n数据排序模块(即本发明所述的通道数据排序单元),排序涉及到当前DMA读请求小包数据和DMA读请求小包长度等参数的存取,两者的实现差距很大,下面分别详细介绍两者的存取。当前DMA读请求小包数据存储到Buffer中只需把上个模块送来的连续数据直接写入Buffer即可,数据读由DMA读请求小包长度等参数存取部分提供读取的地址和长度,然后数据通道n组通用时序总线模块(即本发明所述的通道数据组通用时序总线单元)提供读使能信号,读出顺序的数据送到后续模块。包长度等参数的存取较为复杂,它的流程如下图5所示:
在图5中,“rd0_ltlp”为整包最后一个小包的标志位;第六行并置符{}里面的“flag”为写入到Buffer的标志位,通过此bit位判定某一地址被写过,等读出它之后,在下一个周期向此地址写0清除;“根据Tag号计算出当前小包的偏移地址”,因为混乱顺序与拆包的存在,会出现Tag00、Tag01、Tag20、Tag02、Tag21、Tag10……等排序的情况,每种Tag要分别计算偏移地址锁存(Tag号后面第一个数字为Tag序号,第二个数字为小包的序号);“根据Tag号获得对应的基地址”,经测试一个DMA读请求返回的混乱顺序的小包最多为5个,为此专利中为每个Tag预留了8个存储空间,也就能知道每个Tag对应的基地址;当“参数Buffer写使能”有效后,写入一串参数进Buffer,接着返回到初始状态等待下一个包结尾标志;“基地址加预设长度”中的基地址初始为0,每读出一个整包加一次预设长度,预设长度即为每个Tag预留的参数存储空间,也就是上文提到的8;“偏移地址加1”是因为包参数是按照Tag号存储的,读完一个小包加1,直到整包的最后一个小包清0;“读出的flag位为1”如前文所述代表此地址写过数据;“从数据中分离出rd0_strt_addr和rd0_dlen”即为上文提到的数据Buffer的读地址和长度。
在一具体的实施例中,再接着,根据上文给出的地址和长度读出数据,送到通道n组通用时序总线模块。此模块需要把一个整包中各个连续的小包拼接成一个连续的大包(连续的小包最后一个数据可能有些byte无效,需要挤掉其中的气泡),并输出通用的总线时序,如AXI4-Stream(即本发明所述的预设的通用总线时序)。由于前面数据Buffer中的数据是混乱顺序的而又要顺序读出,所以Buffer只能选BRAM读时序(即本发明所述预设的读时序),而不能用Showahead FIFO,这为后续生成有反压信号的AXI4-Stream时序带来不便,此时采用了如下图6所示的BRAM读时序:
图6中,m_axis_rx_tvalid和m_axis_rx_tready一起组成AXI4-Stream总线的握手信号,h2c0_tlast为一个小包的tlast信号(只有整包的最后一个小包,h2c0_tlast才会和m_axis_rx_tlast一致,其它时候不作为输出),h2c0_drden为BRAM的读使能信号,usr_h2c0_data_i为BRAM的输出数据,h2c0_cnt_drden为读使能计数,读完一个包的数据清0,usr_h2c0_data_i为读使能对应的输出数据。由于BRAM收到读信号使能时要下一拍出数据,所以采用先预读两个数据,然后检测到握手信号有效时再读下一个数据,同时对读使能进行计数,当计数到包长度后读使能清0。从图中也可以看出h2c0_tlast为1时握手信号有效但读使能为0,因为一个小包的数据已经读完。
作为上述方案的改进,所述对若干组目标DMA读请求小包数据进行无效数据转移操作和相邻数据拼接操作,获得若干组目标DMA读请求大包数据,具体为:
所述通道数据组通用时序总线单元对若干组DMA读请求小包数据进行无效数据转移操作,并在无效数据转移后,对每组Tag值相邻的目标DMA读请求小包数据进行拼接,汇总获得若干做目标DMA读请求大包数据。
在一具体的实施例中,无效数据转移操作是将每组目标DMA读请求小包数据中的结尾无效数据转至整包数据的末端,可以称作是挤气泡,从而确保拼接后的数据不会因为这些无效数据导致数据不连贯。
在一具体的实施例中,通过写入模块进行拼接,保证一个整包数据是连续的,也即只有最后一个数据可能不是全部byte有效,用AXI4-Stream总线的m_axis_rx_tkeep指示。下面以64bit数据为例介绍它的拼接方式,如下表2所示:
h2c0_len_ext 数据拼接方式(拼接后赋值给h2c0_tdata_x1) 拼接后的数据m0_axis_rx_tdata
'd7 {m0_axis_rx_tdata[55:0],8'd0} {h2c0_tdata_x[7:0],h2c0_tdata_x1[`WD-1:8]}
'd6 {m0_axis_rx_tdata[47:0],16'd0} {h2c0_tdata_x[15:0],h2c0_tdata_x1[`WD-1:16]}
'd5 {m0_axis_rx_tdata[39:0],24'd0} {h2c0_tdata_x[23:0],h2c0_tdata_x1[`WD-1:24]}
'd4 {m0_axis_rx_tdata[31:0],32'd0} {h2c0_tdata_x[31:0],h2c0_tdata_x1[`WD-1:32]}
'd3 {m0_axis_rx_tdata[23:0],40'd0} {h2c0_tdata_x[39:0],h2c0_tdata_x1[`WD-1:40]}
'd2 {m0_axis_rx_tdata[15:0],48'd0} {h2c0_tdata_x[47:0],h2c0_tdata_x1[`WD-1:48]}
'd1 {m0_axis_rx_tdata[15:0],48'd0} {h2c0_tdata_x[55:0],h2c0_tdata_x1[`WD-1:56]}
'd0 {m0_axis_rx_tdata[7:0],56'd0} h2c0_tdata_x
表2
表2中h2c0_len_ext为偏移字节数3bit(此处的3bit与数据位宽有关,Verilog头文件中定义成$clog2(`WD/4d'8)),通道n复位信号有效时清0,每个小包结束时加上包长度的低3bit,整包结束后也清0。至此,AXI4-Stream总线时序的所有信号都产生完成,并输出到后级模块。
本实施例包括:读取模块、写入模块、分离模块、时序模块、H2C多通道模块和C2H多通道模块;其中,所述读取模块与所述C2H多通道模块连接、所述C2H多通道模块与所述时序模块连接、所述时序模块通过PCIe核与所述分离模块连接、所述分离模块与所述H2C多通道模块连接,所述H2C多通道模块与所述写入模块连接。本发明所设计的C2H多通道模块和H2C多通道模块在处理数据时,每个通道互相独立,互不影响,可直接在多通道模块中调整通道数,有利于DMA读传输的通道拓展,能够应用于不同数据量的DMA读传输的场景。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

Claims (8)

1.一种PCIe总线多通道DMA读传输系统,其特征在于,包括:读取模块、写入模块、分离模块、时序模块、H2C多通道模块和C2H多通道模块;其中,所述读取模块与所述C2H多通道模块连接、所述C2H多通道模块与所述时序模块连接、所述时序模块通过PCIe核与所述分离模块连接、所述分离模块与所述H2C多通道模块连接,所述H2C多通道模块与所述写入模块连接;
所述读取模块,用于获取APP传输的各DMA读请求,并将每一所述DMA读请求分别传输给所述C2H多通道模块的每一C2H通道中;
所述C2H多通道模块,用于确定每一C2H通道中DMA读请求对应的DMA有效读请求包,并通过轮询选择输出,将所有C2H通道对应的DMA有效读请求包传输给所述时序模块;其中,所述DMA有效读请求包,包括:Tag值和DMA有效读请求的包头参数;
所述时序模块,用于根据每一C2H通道所确定的DMA有效读请求包,生成TLP时序,并将TLP时序传输给所述PCIe核;其中,所述PCIe核根据所述TLP时序、以及每一DMA有效读请求包对应的Tag值和DMA有效读请求的包头参数,调取每一DMA有效读请求包对应的DMA读请求数据,并将各DMA有效请求包和各DMA读请求数据传输给分离模块;
所述分离模块,用于接收PCIe核传输的各DMA有效请求包和各DMA读请求数据,并将各DMA有效请求包和各DMA读请求数据组合成读请求返回数据,根据各DMA有效读请求包对应的Tag值,将读请求返回数据分离成若干个DMA读请求小包数据,并将每个DMA读请求小包数据传输至所述H2C多通道模块的一H2C通道中;其中,每一所述DMA读请求小包数据包括:Tag值、DMA读请求数据和DMA有效读请求的包头参数;
所述H2C多通道模块,用于在每一H2C通道中,根据DMA读请求小包数据对应的Tag值、DMA读请求数据和DMA有效读请求的包头参数,进行Buffer写入操作,获得Buffer数据,并根据预设的读时序和目标整包的Buffer数据,获得若干组目标DMA读请求大包数据;
所述写入模块,用于接收若干组目标DMA读请求大包数据,并根据预设的通用总线时序,将若干组目标DMA读请求大包数据进行拼接操作,获得DMA读请求目标整包数据,将DMA读请求目标整包数据写入APP,完成DMA读数据的传输。
2.根据权利要求1所述的PCIe总线多通道DMA读传输系统,其特征在于,所述DMA读请求包括:C2H描述符读请求、H2C描述符读请求和H2C数据读请求;所述C2H多通道模块,包括:若干通道读请求调控单元、若干DMA读仲裁单元和轮询选择单元;
所述通道读请求调控单元,用于根据当前C2H通道中的DMA读请求、以及H2C通道反馈的Buffer指针和H2C通道反馈的请求包释放数据,确定当前C2H通道对应的DMA有效请求的包头参数,并将当前C2H通道对应的DMA有效请求的包头参数传输给当前C2H通道对应的DMA读仲裁单元;
所述DMA读仲裁单元,用于对当前C2H通道中的DMA有效请求的包头参数进行有效判断,从而确定当前C2H通道对应的Tag值,并将当前C2H通道的DMA有效请求的包头参数和Tag值合成DMA有效读请求包,将DMA有效读请求包传输给所述轮询选择单元;
所述轮询选择单元,用于将所有C2H通道对应的DMA有效读请求包轮询传输至所述时序模块。
3.根据权利要求2所述的PCIe总线多通道DMA读传输系统,其特征在于,所述通道读请求调控单元,包括:重复执行以下步骤,在DMA引擎运行结束后停止:H2C通道复位信号有效判断、H2C通道数据量差值计算、可用Tag个数计算和有效读请求生成;
所述H2C通道复位信号有效判断,包括:判断H2C通道复位信号是否有效:若是,则对H2C通道中的路上数据进行清零,在清零后执行所述通道数据量差值计算和Tag个数计算;若否,则执行所述H2C通道数据量差值计算和Tag个数计算;其中,所述路上数据,具体为:从C2H多通道模块发出且未由PCIe核处理的DMA有效读请求包;所述PCIe核处理,具体为:所述PCIe核根据DMA有效读请求包所反馈的DMA读请求数据;
所述H2C通道数据量差值计算,包括:判断H2C通道中的Buffer写使能和当前DMA读请求调控模块对应的DMA读请求是否有效:若H2C通道中的Buffer写使能和当前DMA读请求调控模块对应的DMA读请求同时有效,则根据路上数据量、当前DMA有效读请求包数据量和下一DMA读请求调控模块对应的DMA读请求包长度,计算H2C通道容量,并结合H2C通道容量和H2C通道Buffer,计算空间差值;若H2C通道中的Buffer写使能无效或当前DMA读请求调控模块对应的DMA读请求无效时,则重新判断H2C通道中的Buffer写使能和当前DMA读请求调控模块对应的DMA读请求是否有效;其中,所述H2C通道Buffer根据Buffer深度和Buffer已用空间计算获得;
所述可用Tag个数计算,包括:根据写入模块中的DMA读请求整包数据、当前C2H通道的DMA有效请求包和Tag个数算法,计算可用Tag个数;其中,所述Tag个数算法,具体为:在识别到写入模块中新增一个DMA读请求整包数据时,则Tag个数减一;在识别到当前C2H通道新增一个DMA有效请求包时,则Tag个数加一;
所述有效读请求生成,包括:在计算获得空间差值和可用Tag个数后,同时判断空间差值是否大于空间阈值,可用Tag个数是否小于Tag阈值;若空间差值大于空间阈值且可用Tag个数小于Tag阈值,则生成H2C数据有效读请求;否则,重新判断空间差值是否大于空间阈值、可用Tag个数是否小于Tag阈值。
4.根据权利要求3所述的PCIe总线多通道DMA读传输系统,其特征在于,所述DMA读仲裁单元,包括:依次执行以下步骤,在DMA引擎运行结束后停止:C2H通道复位信号有效判断、DMA读请求种类判断、Tag释放判断和DMA有效请求包发送检测;
所述C2H通道复位信号有效判断,包括:判断当前C2H通道中C2H通道复位信号是否有效:若是,则对C2H通道中等待的读请求进行清除,在清除后执行所述DMA读请求种类判断;若否,则执行所述DMA读请求种类判断;
所述DMA读请求种类判断,包括:判断当前C2H通道中H2C描述符读请求、C2H描述符读请求和H2C数据读请求是否有效:若H2C描述符读请求有效,则选择H2C描述符读请求作为备选项;若H2C描述符读请求无效、且C2H描述符读请求有效,则选择C2H描述符读请求作为备选项;若H2C描述符读请求无效、C2H描述符读请求无效、且H2C数据读请求有效,则选择H2C数据读请求作为备选项;若H2C描述符读请求无效、C2H描述符读请求无效、且H2C数据读请求无效,则重新判断H2C描述符读请求、C2H描述符读请求和H2C数据读请求是否有效;
所述Tag释放判断,包括:在当前C2H通道确定备选项后,判断备选项对应的Tag值是否返回:若是,则将当前C2H通道的DMA有效请求的包头参数和Tag值合成DMA有效读请求包,并将DMA有效读请求包发送给所述轮询选择单元;若否,则重新判断备选项对应的Tag值是否返回;
所述DMA有效请求包发送检测,包括:在将DMA有效读请求包发送给所述轮询选择单元后,判断DMA有效请求包是否全部发送:若是,则重新执行C2H通道复位信号有效判断;若否,则重新判断DMA有效请求包是否全部发送。
5.根据权利要求4所述的PCIe总线多通道DMA读传输系统,其特征在于,所述Tag值包括:已使用Tag值和未使用Tag值;所述Tag值的生成方法,具体为:
对确定为备选项的目标DMA读请求进行整包数据判断:
若路上数据存在与目标DMA读请求相同整包的目标DMA有效读请求包,且所述时序模块生成目标DMA有效读请求包对应的读请求返回数据,则将目标DMA有效读请求包对应的已使用Tag值返回给确定为备选项的目标DMA读请求;
若路上数据不存在与目标DMA读请求相同整包的目标DMA有效读请求包,则在未使用Tag值中确定一目标Tag值,将目标Tag值返回给确定为备选项的目标DMA读请求;
若目标DMA读请求为一整包的最后一个读请求,则在目标DMA读请求根据返回的已使用Tag值生成读请求返回数据后,将目标DMA读请求的已使用Tag值更新为未使用Tag值。
6.根据权利要求1所述的PCIe总线多通道DMA读传输系统,其特征在于,所述分离模块,包括:数据分离单元、数据拼接单元和包长度数据计算单元;
所述数据分离单元,用于根据各DMA有效读请求包对应的Tag值,将所述TLP时序分离为若干DMA读请求小包数据;
所述数据拼接单元,用于根据确定每一DMA读请求小包数据的TLP包头字段,并根据每一TLP包头字段和预设的移位拼接方式进行数据拼接;其中,DMA读请求小包数据,包括:TLP包头字段、包长度和有效读请求数据;
所述包长度数据计算单元,用于判断每一DMA读请求小包数据是否为目标整包的最后一个小包:若是,则包长度为当前包长度;若否,则根据数据长度和下地址确定包长度。
7.根据权利要求6所述的PCIe总线多通道DMA读传输系统,其特征在于,所述H2C多通道模块,包括:若干通道数据排序单元和若干通道数据组通用时序总线单元;
所述通道数据排序单元,用于在当前H2C通道中,根据当前DMA读请求小包数据和与当前DMA读请求小包数据对应的Tag值,进行Buffer写入操作,并在Buffer中提取Buffer数据;其中,Buffer数据包括:读地址和包长度;
所述通道数据组通用时序总线单元,用于根据预设的读时序以及目标整包的读地址和包长度,从Buffer中读取属于目标整包的若干组目标DMA读请求小包数据,并对若干组目标DMA读请求小包数据进行无效数据转移操作和相邻数据拼接操作,获得若干组目标DMA读请求大包数据。
8.根据权利要求7所述的PCIe总线多通道DMA读传输系统,其特征在于,所述对若干组目标DMA读请求小包数据进行无效数据转移操作和相邻数据拼接操作,获得若干组目标DMA读请求大包数据,具体为:
所述通道数据组通用时序总线单元对若干组DMA读请求小包数据进行无效数据转移操作,并在无效数据转移后,对每组Tag值相邻的目标DMA读请求小包数据进行拼接,汇总获得若干做目标DMA读请求大包数据。
CN202310715144.4A 2023-06-15 2023-06-15 PCIe总线多通道DMA读传输系统 Pending CN116719763A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310715144.4A CN116719763A (zh) 2023-06-15 2023-06-15 PCIe总线多通道DMA读传输系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310715144.4A CN116719763A (zh) 2023-06-15 2023-06-15 PCIe总线多通道DMA读传输系统

Publications (1)

Publication Number Publication Date
CN116719763A true CN116719763A (zh) 2023-09-08

Family

ID=87874832

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310715144.4A Pending CN116719763A (zh) 2023-06-15 2023-06-15 PCIe总线多通道DMA读传输系统

Country Status (1)

Country Link
CN (1) CN116719763A (zh)

Similar Documents

Publication Publication Date Title
EP1159813B1 (en) Method and apparatus for dynamic packet batching with a network interface
KR101298862B1 (ko) Pci 익스프레스를 통해 ⅰd 기반 스트림을 가능하게 하는 방법 및 장치
EP1750202A1 (en) Combining packets for a packetized bus
CN101634975B (zh) 一种实现dma数据传输的方法及装置
EP1093252A2 (en) Access control device for IEEE 1394 Bus
CN110851371B (zh) 报文处理方法及相关设备
CN113297112B (zh) PCIe总线的数据传输方法、系统及电子设备
CN112637080B (zh) 一种基于fpga的负载均衡处理系统
JP3584789B2 (ja) データ転送制御装置及び電子機器
CN113452591B (zh) 基于can总线连续数据帧的回路控制方法及装置
CN110995507B (zh) 一种网络加速控制器及方法
CN113961494A (zh) 一种pcie总线与axi总线的桥接系统
KR100478112B1 (ko) 패킷 제어 시스템 및 통신 방법
EP1970815A1 (en) Data transfering apparatus and information processing system
US20090304017A1 (en) Apparatus and method for high-speed packet routing system
CN112328520B (zh) 一种pcie设备、基于pcie设备的数据传输方法和系统
CN113852533A (zh) 一种多通道数据通信系统、方法及电子设备
CN116303221B (zh) 一种多核处理器片上网络系统的数据传输方法
CN116719763A (zh) PCIe总线多通道DMA读传输系统
CN106294225A (zh) 一种数据读取方法、对端设备及控制器
CN113204515B (zh) Pcie应用层数据接收过程中的流控系统及方法
CN112328519B (zh) 一种pcie设备、基于sr-iov的数据包有序传输方法和系统
CN113609041A (zh) 一种数据传输方法及系统
CN117041186B (zh) 数据传输方法、芯片系统、计算设备及存储介质
CN116684506B (zh) 数据处理方法、系统、电子设备及计算机可读存储介质

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