CN112181887A - 数据传输方法及装置 - Google Patents

数据传输方法及装置 Download PDF

Info

Publication number
CN112181887A
CN112181887A CN201910604919.4A CN201910604919A CN112181887A CN 112181887 A CN112181887 A CN 112181887A CN 201910604919 A CN201910604919 A CN 201910604919A CN 112181887 A CN112181887 A CN 112181887A
Authority
CN
China
Prior art keywords
sending
tlp
engine
packet
bds
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.)
Granted
Application number
CN201910604919.4A
Other languages
English (en)
Other versions
CN112181887B (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.)
Maipu Communication Technology Co Ltd
Original Assignee
Maipu Communication 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 Maipu Communication Technology Co Ltd filed Critical Maipu Communication Technology Co Ltd
Priority to CN201910604919.4A priority Critical patent/CN112181887B/zh
Publication of CN112181887A publication Critical patent/CN112181887A/zh
Application granted granted Critical
Publication of CN112181887B publication Critical patent/CN112181887B/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/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

本申请实施例提供了一种数据传输方法及装置,方法包括:发送BD表读取模块中的传输层包TLP发送引擎与发送仲裁单元相通信,经PCIE总线发出第一BD读取指令;发送BD表读取模块中的TLP接收引擎接收并经PCIE总线返回的连续多个BD,并存入第一FIFO队列;发送报文读取模块中的TLP发送引擎从第一FIFO队列获得连续多个BD的每个BD,并根据BD与发送仲裁单元相通信,经PCIE总线发出数据读取指令;发送报文读取模块中的TLP接收引擎接收经PCIE总线返回的数据,并将数据存入发送缓冲区。第一BD读取指令和数据读取指令是事先生成的,在经过与发送仲裁单元的通信之后便可以经PCIE总线发出,与现有技术相比,省去了切换通道后进行准备工作耗费的时间,提高了PCIE总线的带宽利用率。

Description

数据传输方法及装置
技术领域
本申请涉及通信技术领域,具体而言,涉及一种数据传输方法及装置。
背景技术
现有技术在利用高速串行计算机扩展总线标准(Peripheral ComponentInterconnect-express,简称PCIE)总线的多通道直接内存访问(Direct Memory Access,简称DMA)进行数据传输时,往往是通过DMA控制器对多通道进行控制,当多通道中的一个通道正在工作时,其它通道就得等这个通道完成工作任务后才可能得到使用总线的机会。多通道DMA进行通道的切换时,切换后新通道DMA的一些必要准备工作需要等待时间,上述的等待时间会造成PCIE总线带宽利用率的下降。
发明内容
有鉴于此,本申请实施例提供了一种数据传输方法及装置,以改善现有技术中PCIE总线带宽利用率下降的问题。
第一方面,本申请实施例提供了一种数据传输方法,应用于PCIE总线多通道的每条通道,所述每条通道均有对应的发送直接内存访问DMA单元,发送DMA单元包括发送BD表读取模块和发送报文读取模块,所述发送BD表读取模块与所述发送报文读取模块连接,且所述发送BD表读取模块以及所述发送报文读取模块均与发送仲裁单元连接,所述发送BD表读取模块包括TLP发送引擎和TLP接收引擎,所述发送报文读取模块也包括TLP发送引擎和TLP接收引擎;所述方法包括:所述发送BD表读取模块中的传输层包TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第一BD读取指令;所述发送BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第一FIFO队列,其中,所述连续多个BD中的每个BD均包括数据指针信息和数据长度信息;所述发送报文读取模块中的TLP发送引擎从所述第一FIFO队列获得所述连续多个BD的每个BD,并根据所述BD与所述发送仲裁单元相通信,经所述PCIE总线发出数据读取指令;所述发送报文读取模块中的TLP接收引擎接收经所述PCIE总线返回的数据,并将所述数据存入发送缓冲区。
发送BD表读取模块通过TLP发送引擎以及TLP接收引擎与发送仲裁单元通信,经PCIE总线发出第一BD读取指令,获取经PCIE总线返回的连续多个BD并将连续多个BD存入第一FIFO队列。发送报文读取模块从第一FIFO队列中获得连续多个BD中的每个BD,并根据BD与发送仲裁单元通信,经PCIE总线发出数据读取指令,接收经PCIE总线返回的数据,并将数据存放的发送缓冲区。第一BD读取指令和数据读取指令分别是发送BD表读取模块和发送报文读取模块事先生成的,在经过与发送仲裁单元的通信之后便可以经PCIE总线发出,与现有技术相比,省去了切换通道后进行准备工作耗费的时间,提高了PCIE总线的带宽利用率。
在一个可能的设计中,所述发送BD表读取模块中的传输层包TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第一BD读取指令,包括:所述发送BD表读取模块中的传输层包TLP发送引擎根据BD基地址完成第一内存读指令TLP的组帧;所述发送BD表读取模块中的TLP发送引擎向所述发送仲裁单元传递第一发送请求,并在接收到所述发送仲裁单元返回的第一发送确认指令后,经所述PCIE总线发出所述第一内存读指令TLP;
所述发送BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第一FIFO队列,其中,所述连续多个BD中的每个BD均包括数据指针信息和数据长度信息,包括:所述发送BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的第一CPLD包,并将所述第一CPLD包中的连续多个BD存入第一FIFO队列,其中,所述第一CPLD包包括发送BD表的连续多个BD,所述发送BD表的连续多个BD中的每个BD均包括数据指针信息和数据长度信息;
所述发送报文读取模块中的TLP发送引擎从所述第一FIFO队列获得所述连续多个BD的每个BD,并根据所述BD与所述发送仲裁单元相通信,经所述PCIE总线发出数据读取指令,包括:所述发送报文读取模块中的TLP发送引擎从所述第一FIFO队列中获得所述连续多个BD的每个BD,并根据所述每个BD的数据指针信息和数据长度信息完成第二内存读指令TLP的组帧;所述发送报文读取模块中的TLP发送引擎向所述发送仲裁单元传递第二发送请求,并在接收到所述发送仲裁单元返回的第二发送确认指令后,经所述PCIE总线发出所述第二内存读指令TLP;
所述发送报文读取模块中的TLP接收引擎接收经所述PCIE总线返回的数据,并将所述数据存入发送缓冲区,包括:所述发送报文读取模块中的TLP接收引擎接收经所述PCIE总线返回的第二CPLD包,并将所述第二CPLD包中的数据存入发送缓冲区。
在一个可能的设计中,所述发送报文读取模块配置有多个互不相同的顺序标号;所述发送报文读取模块中的TLP发送引擎从所述第一FIFO队列中获得所述连续多个BD的每个BD,并根据所述每个BD的数据指针信息和数据长度信息完成第二内存读指令TLP的组帧,包括:所述发送报文读取模块中的TLP发送引擎从所述第一FIFO队列中获得所述连续多个BD的每个BD时,从所述多个互不相同的顺序标号选取顺序标号;根据所述每个BD的数据指针信息和数据长度信息完成第二内存读指令TLP的组帧,并将所述顺序标号添加进所述第二内存读指令TLP中。
按照一定的顺序对每个BD对应的第二内存读指令TLP进行编号,每个第二内存读指令TLP经PCIE总线发出后会获得相应的数据段,而数据段返回的顺序不一定与经PCIE总线发出的顺序一致,因此,可以按照顺序标号来为发送顺序进行编号,并根据编号的顺序对返回的数据段进行排序,保证了报文的有序性。其中,顺序标号可以存储在第二内存读指令TLP的8bit的TAG区间内。
在一个可能的设计中,所述第二CPLD包中包括与所述第二内存读指令TLP对应的顺序标号,所述将所述第二CPLD包中的数据存入发送缓冲区,包括:根据携带有所述顺序标号的多个所述第二内存读指令的发出顺序得到所述顺序标号的排序;将多个所述第二CPLD包中的数据按照所述顺序标号的排序存入所述发送缓冲区。
由于返回的第二CPLD包携带有与发出的第二内存读指令对应的顺序标号,因此,即使返回的第二CPLD包的顺序为乱序,也可以根据其携带的顺序标号对第二CPLD包的顺序进行重新排列,从而保证了第二CPLD包中数据的顺序性,提高了通信的可靠性。其中,顺序标号可以存储在第二CPLD包中的8bit的TAG区间内。
在一个可能的设计中,所述发送BD表读取模块中的传输层包TLP发送引擎根据BD基地址完成第一内存读指令TLP的组帧之前,所述方法还包括:所述发送BD表读取模块接收控制器的BD有效提示信息,其中,所述控制器每构建一个新的BD,便向所述发送BD表读取模块发送所述BD有效提示信息。
发送BD表读取模块可以将控制器的BD有效提示信息作为依据来决定是否发出第一BD读取指令去读取BD,避免了内存中无BD时发送BD表读取模块频繁地读取BD无果,造成总线资源的浪费。
在一个可能的设计中,所述每条通道均有对应的接收DMA单元,所述接收DMA单元包括接收BD表读取模块和接收报文写入模块,所述接收BD表读取模块与所述接收报文写入模块连接,且所述接收BD表读取模块以及所述接收报文写入模块均与所述发送仲裁单元连接;所述方法还包括:所述接收BD表读取模块中的TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第二BD读取指令;所述接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二FIFO队列,其中,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间;所述接收报文写入模块的TLP发送引擎从所述第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存。
第二BD读取指令是接收BD表读取模块事先生成的,在经过与发送仲裁单元的通信之后便可以经PCIE总线发出,与现有技术相比,省去了切换通道后进行准备工作耗费的时间,提高了PCIE总线的带宽利用率。
在一个可能的设计中,所述接收BD表读取模块中的TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第二BD读取指令,包括:所述接收BD表读取模块中的TLP发送引擎根据BD基地址完成第三内存读指令TLP的组帧;所述接收BD表读取模块中的TLP发送引擎向所述发送仲裁单元传递第三发送请求,并在接收到所述发送仲裁单元返回的第三发送确认指令后,经所述PCIE总线发出所述第三内存读指令TLP;
所述接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二FIFO队列,其中,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间,包括:所述接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的第三CPLD包,并将所述第三CPLD包中的连续多个BD存入第二FIFO队列,其中,所述第三CPLD包包括接收BD表的连续多个BD,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间;
所述接收报文写入模块的TLP发送引擎从所述第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存,包括:所述接收报文写入模块从接收缓冲区获取报文;所述接收报文写入模块中的TLP发送引擎从所述第二FIFO队列中获得所述多个BD中的一个BD,根据所述BD的指针以及从所述接收缓冲区获取的报文构建内存写指令TLP的组帧;所述接收报文写入模块中的TLP发送引擎向所述发送仲裁单元传递第四发送请求,并在接收到所述发送仲裁单元返回的第四发送确认指令后,经所述PCIE总线发出所述内存写指令TLP。
第二方面,本申请实施例提供了一种通信传输方法,所述每条通道均有对应的接收DMA单元,所述接收DMA单元包括接收BD表读取模块和接收报文写入模块,所述接收BD表读取模块与所述接收报文写入模块连接,且所述接收BD表读取模块以及所述接收报文写入模块均与所述发送仲裁单元连接;所述方法还包括:所述接收BD表读取模块中的TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第二BD读取指令;所述接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二FIFO队列,其中,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间;所述接收报文写入模块的TLP发送引擎从所述第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存。
与现有技术相比,省去了切换通道后进行准备工作耗费的时间,提高了PCIE总线的带宽利用率。
第三方面,本申请实施例提供了一种数据传输装置,应用于PCIE总线多通道的每条通道,所述装置包括发送直接内存访问DMA单元以及发送仲裁单元,发送DMA单元包括发送BD表读取模块和发送报文读取模块,所述发送BD表读取模块与所述发送报文读取模块连接,且所述发送BD表读取模块以及所述发送报文读取模块均与发送仲裁单元连接,所述发送BD表读取模块包括TLP发送引擎和TLP接收引擎,所述发送报文读取模块也包括TLP发送引擎和TLP接收引擎;所述发送BD表读取模块中的传输层包TLP发送引擎用于与所述发送仲裁单元相通信,经所述PCIE总线发出第一BD读取指令;所述发送BD表读取模块中的TLP接收引擎用于接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第一FIFO队列,其中,所述连续多个BD中的每个BD均包括数据指针信息和数据长度信息;所述发送报文读取模块中的TLP发送引擎用于从所述第一FIFO队列获得所述连续多个BD的每个BD,并根据所述BD与所述发送仲裁单元相通信,经所述PCIE总线发出数据读取指令;所述发送报文读取模块中的TLP接收引擎用于接收经所述PCIE总线返回的数据,并将所述数据存入发送缓冲区。
第四方面,本申请实施例提供了一种数据传输装置,应用于PCIE总线多通道的每条通道,所述装置包括接收DMA单元以及发送仲裁单元,所述接收DMA单元包括接收BD表读取模块和接收报文写入模块,所述接收BD表读取模块与所述接收报文写入模块连接,且所述接收BD表读取模块以及所述接收报文写入模块均与所述发送仲裁单元连接,所述接收BD表读取模块包括TLP发送引擎和TLP接收引擎,所述接收报文写入模块包括TLP发送引擎;所述接收BD表读取模块中的TLP发送引擎用于与所述发送仲裁单元相通信,经所述PCIE总线发出第二BD读取指令;所述接收BD表读取模块中的TLP接收引擎用于接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二FIFO队列,其中,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间;所述接收报文写入模块的TLP发送引擎用于从所述第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存。
上述的数据传输装置可以为现场可编程门阵列(Field-Programmable GateArray,简称FPGA)器件。
为使本申请实施例所要实现的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚的说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的数据传输装置的应用场景的结构示意图;
图2是本申请实施例提供的数据传输方法的流程示意图;
图3是本申请实施例提供的数据传输方法的一种具体实施方式的流程示意图;
图4是接收DMA单元对应的数据传输方法的流程示意图;
图5是接收DMA单元对应的数据传输方法的一种具体实施方式的流程示意图。
具体实施方式
在介绍本申请实施例之前,先对本申请实施例的应用场景进行描述,本申请实施例利用如图1示出的通信设备中的数据传输装置进行数据传输,通信设备为可以收发报文的设备,例如路由器、网卡和无线网桥等。
该装置应用于PCIE总线多通道的每条通道,每条通道均有对应的发送DMA单元和接收DMA单元120。每条通道的发送DMA单元110和接收DMA单元120均与发送仲裁单元130连接。发送仲裁单元130与PCIE总线连接,PCIE总线的另一侧与通信设备的系统内存连接。发送DMA单元110还与发送缓冲区140连接,发送缓冲区140用于缓存从发送DMA获得的报文数据,并在缓存得到足够的报文数据后通过对应的通道将报文发出给对端的通信设备。接收DMA单元120还与接收缓冲区150连接,接收缓冲区150用于接收对端的通信设备发送的报文数据,并在缓存得到一定数量的报文数据后,将报文数据传递至接收DMA单元120。
每个发送DMA单元110均包括发送缓存描述符(Buffer Description,简称BD)表读取模块111和发送报文读取模块112,发送BD表读取模块111与发送报文读取模块112连接,且发送BD表读取模块111以及发送报文读取模块112均与发送仲裁单元130连接。发送BD表读取模块111包括传输层包(Transport Layer Packages,简称TLP)发送引擎(图未示)和TLP接收引擎(图未示),发送报文读取模块112也包括TLP发送引擎(图未示)和TLP接收引擎(图未示)。
每个接收DMA单元120均包括接收BD表读取模块121和接收报文写入模块122,接收BD表读取模块121与接收报文写入模块122连接,且接收BD表读取模块121以及接收报文写入模块122均与发送仲裁单元130连接。接收BD表读取模块121包括TLP发送引擎(图未示)和TLP接收引擎(图未示),接收报文写入模块122也包括TLP发送引擎(图未示)。
该装置还包括寄存器配置单元160,寄存器配置单元160可接收通信设备的中央处理器(Central Processing Unit,简称CPU)发送的控制命令,并将控制命令填入设计人员自定义的地址以供发送DMA单元110或接收DMA单元120使用。
下面将结合附图,对本申请实施例中的数据传输方法及装置进行详细介绍。
实施例
请参见图2,图2示出了本申请第一实施例提供的数据传输方法的流程示意图,具体包括如下步骤:
步骤S110,发送BD表读取模块中的传输层包TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第一BD读取指令。
发送BD表读取模块的TLP发送引擎通过与发送仲裁单元通信来确定第一BD读取指令的发送时机,并在确定的发送时机经PCIE总线发出第一BD读取指令,第一BD读取指令用于从通信设备的内存中读取连续多个BD。
可选地,请参见图3,步骤S110可以包括步骤S210至步骤S220:
步骤S210,发送BD表读取模块中的TLP发送引擎根据BD基地址完成第一内存读指令TLP的组帧。
发送BD表读取模块可以通过寄存器配置单元获得BD基地址。通信设备可以为PCIE分配一定的待配置空间,设计人员可以在待配置空间中自定义地址以便利用自定义的地址实现接收数据的功能。例如,通信设备的CPU可以向上述自定义的地址发送BD基地址。可选地,通信设备的CPU在向自定义的地址发送包含BD基地址的命令时,存储器配置单元可以接收CPU发送的包含BD基地址的命令,并把BD基地址填到上述自定义的地址中,以便发送DMA单元获得BD基地址。多个BD在通信设备的内存中能以连续地址存储的,BD基地址为连续多个BD中第一个BD在内存的位置。多个BD在内存中以连续地址存储,存储多个BD的内存构成的链表可看作BD表。
发送BD表读取模块中的TLP发送引擎可以根据BD基地址来完成第一内存读指令TLP的组帧。其中,第一内存读指令TLP用于根据BD基地址读取连续多个BD。
步骤S220,发送BD表读取模块中的TLP发送引擎向所述发送仲裁单元传递第一发送请求,并在接收到所述发送仲裁单元返回的第一发送确认指令后,经所述PCIE总线发出所述第一内存读指令TLP。
第一发送请求为请求发送第一内存读指令TLP的请求。第一发送确认指令为准许第一内存读指令TLP发送的确认指令。
第一发送请求被发送给发送仲裁单元之后,等待发送仲裁单元的轮询。在等待到发送仲裁单元的轮询以后,接收发送仲裁单元返回的第一发送确认指令。随后,第一内存读指令TLP被发送BD表读取模块发送到PCIE总线上,并经PCIE总线从发送(Transmit,简称tx)方向发出。
步骤S120,发送BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第一先进先出(First Input First Output,简称FIFO)队列。
由于BD是在通信设备的地址相邻的连续内存中存储,因此在获得BD时,按照内存的地址顺序读取获得的连续多个BD的顺序与连续多个BD在内存的存储顺序一致。连续多个BD存入第一FIFO队列,在需要从第一FIFO队列取出时,依然也会按照连续多个BD在内存的存储顺序取出。
可选地,请参见图3,步骤S120包括:
步骤S230,所述发送BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的第一CPLD包,并将所述第一CPLD包中的连续多个BD存入第一FIFO队列,其中,所述第一CPLD包包括发送BD表的连续多个BD,所述发送BD表的连续多个BD中的每个BD均包括数据指针信息和数据长度信息。
在步骤S220中,第一内存读指令TLP经PCIE总线从tx方向发出后,被第一内存读指令对应的目标系统(即系统DDR控制器)接收,第一内存读指令对应的目标系统根据BD基地址读取到连续多个BD后,通过带数据的完成报文(Completion with data,简称CPLD)包的形式将上述的连续多个BD从接收(Receive,简称rx)方向返回,即可以将第一CPLD包发送到PCIE总线上,然后经PCIE总线从rx方向返回到发送BD表读取模块的TLP接收引擎。发送BD表读取模块的TLP接收引擎解析第一CPLD包,并将解析出的连续多个BD依次存入第一FIFO队列中。发送BD表指的是与待发送报文相关的BD对应的连续多个内存地址构成的表。发送BD表的连续多个BD中的每个BD的数据指针信息均指向待发送报文在通信设备中对应的内存地址,数据长度信息指的是每个BD对应的待发送报文的报文数据的长度。
可选地,第一CPLD包中可以包含对应的发送BD表读取模块的身份标识,该身份标识用于标识于发送BD表读取模块对应的通道,该身份标识可以是发送BD表读取模块的TLP发送引擎在发送第一内存读指令TLP时便携带在第一内存读指令TLP中。其中,身份标识可以存储在第一CPLD包中的8bit的TAG区间内。
在将第一CPLD包返回到发送BD表读取模块的TLP接收引擎时,可以将第一CPLD包群发给多通道中每个通道的TLP接收引擎,可以发给每个通道中的发送BD表读取模块的TLP接收引擎,发送报文读取模块的TLP接收引擎,接收BD表读取模块的TLP接收引擎以及接收报文写入模块的TLP接收引擎。每个通道的TLP接收引擎获得第一CPLD包中的身份标识,并将该身份标识与自身的身份标识进行比对,若比对结果一致,则比对结果一致的通道对应的发送BD表读取模块的TLP接收引擎才接收第一CPLD包。
对于长度较短的报文,可能一个BD对应一个报文,例如,BD1对应报文A,BD2对应报文B;对于长度较长的报文,可能一个BD只对应报文的部分内容,多个BD对应一个报文,例如,BD3对应报文数据C1,BD4对应报文数据C2,BD5对应报文数据C3,报文数据C1、报文数据C2、报文数据C3共同组成报文C,则BD3、BD4、BD5对应报文C。
在一种具体实施方式中,BD除了包括数据指针信息和数据长度信息,还可以包括报文结束标记、BD有效标记以及wrap标记。其中,报文结束标记可以用来表示拥有报文结束标记的BD指向的是报文的最后一部分内容。BD有效标记可以由通信设备的CPU置位,在待发送的报文从该通信设备发出后,DMA可以通过回写BD的方式清空内存中的与发出的报文对应的BD。wrap标记用于表示BD表的结尾,若某BD中包括wrap标记,表示从BD表的第一个BD在内存中的地址开始读取BD表。
步骤S130,发送报文读取模块中的TLP发送引擎从所述第一FIFO队列获得所述连续多个BD的每个BD,并根据所述BD与所述发送仲裁单元相通信,经所述PCIE总线发出数据读取指令。
发送报文读取模块中的TLP发送引擎通过与发送仲裁单元通信来确定数据读取指令的发送时机,并在确定的发送时机经PCIE总线发出数据读取指令,数据读取指令可根据BD中存储的数据指针信息和数据长度信息从通信设备的内存中读取报文数据。
可选地,请参见图3,步骤S130可以包括步骤S240至步骤S250:
步骤S240,发送报文读取模块中的TLP发送引擎从所述第一FIFO队列中获得所述连续多个BD的每个BD,并根据所述每个BD的数据指针信息和数据长度信息完成第二内存读指令TLP的组帧。
第二内存读指令TLP用于根据BD的数据指针信息和数据长度信息从通信设备的内存中读取对应的报文数据。
在一种具体实施方式中,步骤S240包括:
发送报文读取模块中的TLP发送引擎从所述第一FIFO队列中获得所述连续多个BD的每个BD时,从所述多个互不相同的顺序标号选取顺序标号。
根据所述每个BD的数据指针信息和数据长度信息完成第二内存读指令TLP的组帧,并将所述顺序标号添加进所述第二内存读指令TLP中。
例如,不妨设第一FIFO队列中按照存储顺序存储有3个BD:BD1、BD2、BD3,当发送报文读取模块从第一FIFO队列中获得BD1时,可以从多个顺序标号里随机选取一个顺序标号,例如,不妨设选择顺序标号tag_00。此时,根据BD1对应的数据指针信息和数据长度信息以及顺序标号tag_00,完成BD1对应的第二内存读指令TLP的组帧。
当发送报文读取模块从第一FIFO队列中获得BD2时,可以从多个顺序标号里随机选取一个顺序标号,例如,不妨设选择顺序标号tag_01。此时,根据BD2对应的数据指针信息和数据长度信息以及顺序标号tag_01,完成BD2对应的第二内存读指令TLP的组帧。
当发送报文读取模块从第一FIFO队列中获得BD3时,可以从多个顺序标号里随机选取一个顺序标号,例如,不妨设选择顺序标号tag_02。此时,根据BD3对应的数据指针信息和数据长度信息以及顺序标号tag_02,完成BD3对应的第二内存读指令TLP的组帧。顺序标号tag_00、tag_01、tag_02的顺序反映了第一FIFO队列中BD的存入顺序以及BD的取出顺序。
由于一个BD的长度通常为1500byte,内存读指令TLP的长度通常为256byte,因此,可能一个BD对应多个内存读指令TLP。在本申请的一种具体实施方式中,由于内存读指令有最大长度限制,当发送报文读取模块从第一FIFO队列中获得BD1时,可以从多个顺序标号里随机选取多个顺序标号,例如,不妨设选择顺序标号tag_00、tag_01,tag_02。此时,根据BD1对应的数据指针信息和数据长度信息以及顺序标号tag_00、tag_01,tag_02,可以连续完成BD1对应的三个第二内存读指令TLP的组帧。
步骤S250,发送报文读取模块中的TLP发送引擎向所述发送仲裁单元传递第二发送请求,并在接收到所述发送仲裁单元返回的第二发送确认指令后,经所述PCIE总线发出所述第二内存读指令TLP。
第二发送请求为请求发送第二内存读指令TLP的请求。第二发送确认指令为准许第二内存读指令TLP发送的确认指令。
第二发送请求被发送给发送仲裁单元之后,等待发送仲裁单元的轮询。在等待到发送仲裁单元的轮询以后,接收发送仲裁单元返回的第二发送确认指令。随后,第二内存读指令TLP被发送BD表读取模块发送到PCIE总线上,并经PCIE总线从tx方向发出。
步骤S140,发送报文读取模块中的TLP接收引擎接收经所述PCIE总线返回的数据,并将所述数据存入发送缓冲区。
可选地,请参见图3,步骤S140可以包括:
步骤S260,发送报文读取模块中的TLP接收引擎接收经所述PCIE总线返回的第二CPLD包,并将所述第二CPLD包中的数据存入发送缓冲区。
在步骤S250中,第二内存读指令TLP经PCIE总线从tx方向发出后,被第二内存读指令的目标系统(即系统DDR控制器)接收,目标系统根据第二内存读指令中的数据指针信息和数据长度信息读取到报文数据后,通过第二CPLD包的形式将该报文数据从rx方向返回,即可以将第二CPLD包发送到PCIE总线上,然后经PCIE总线从rx方向返回到发送报文读取模块的TLP接收引擎。
可选地,第二CPLD包中可以包含对应的发送报文读取模块的身份标识,该身份标识反映与发送报文读取模块对应的通道,该身份标识可以是发送报文读取模块的TLP发送引擎在发送第二内存读指令TLP时便携带在第二内存读指令TLP中。在将第二CPLD包经PCIE总线从rx方向返回到发送报文读取模块的TLP接收引擎时,可以将第二CPLD包群发给多通道中每个通道的TLP接收引擎。每个通道的TLP接收引擎获得第二CPLD包中的身份标识,并将该身份标识与自身的身份标识进行比对,若比对结果一致,则比对结果一致的通道对应的发送报文读取模块的TLP接收引擎才接收第二CPLD包。
在一种具体实施方式中,步骤S260包括:根据携带有所述顺序标号的多个所述第二内存读指令的发出顺序得到所述顺序标号的排序;将多个所述第二CPLD包中的数据按照所述顺序标号的排序存入所述发送缓冲区。
接上文举得例子继续进行说明,每个第二CPLD包中均可以有与对应的第二内存读指令相同的顺序标号。在上文中,每个第二内存读指令TLP中均有顺序标号,若每个BD对应一个第二内存读指令,顺序标号反映了第二内存读指令中的BD从第一FIFO队列取出的顺序;若每个BD对应多个第二内存读指令,顺序标号反映了报文数据存放顺序。
因此,在发送报文读取模块的TLP接收引擎接收到第二CPLD包后,可以对第二CPLD包进行解析获得第二CPLD包中包含的报文数据以及顺序标号。然后按照反映了第一FIFO队列中BD的取出顺序的顺序标号的顺序或报文数据存放顺序来排列从第二CPLD包解析出的报文数据,并把完成排列的报文数据存入发送缓冲区。
例如,对先后接收到的三个第二CPLD包进行解析,分别获得了报文数据1以及与报文数据1在同一个CPLD包的顺序标号tag_01,报文数据2以及与报文数据2在同一个CPLD包的顺序标号tag_00,报文数据3以及与报文数据3在同一个CPLD包的顺序标号tag_02。可以按照上文中从第一FIFO队列取出BD的顺序:tag_00、tag_01、tag_02对报文数据重新排序为:报文数据2、报文数据1、报文数据3。然后按照报文数据2、报文数据1、报文数据3的顺序把报文数据存入发送缓冲区。或者三个CPLD包都是同一个BD对应的报文,按照上文中的报文数据存放顺序,重新排序为:报文数据2、报文数据1、报文数据3。然后按照报文数据2、报文数据1、报文数据3的顺序把报文数据存入发送缓冲区。
可以理解,每次为从第一FIFO队列取出的BD分配顺序标号时,均可以从未被使用的顺序标号中随机选择一个顺序标号。其中,若顺序标号被分配给BD,并被组合成第二内存读指令发出,则表示该顺序标号进入使用状态;当该顺序标号从返回的一个CPLD包中解析时,则表示该顺序标号被释放,重新处于未被使用的状态,从而可以对一组顺序标号进行循环使用。通常情况下,返回的CPLD包的返回顺序可能与第二内存读指令的发出顺序不同,但通过顺序标号的顺序依然可以按照第二内存读指令的发出顺序来对返回的CPLD包中包含的报文数据进行排序,保证了报文数据的有序性。同样,当报文数据较长时,同一个BD的数据也可使用多个顺序标号,甚至循环使用多个顺序标号,以便达到最大的性能。
可选地,顺序标号的个数可以设置的尽量多,例如,若某个PCIEIP核最大支持64个标签tag号,对于8通道的DMA控制器,每个通道可分配64/8=8个tag号。对于每个通道而言,在发送BD表读取模块和接收BD表读取模块各使用一个tag号的情况下,剩下的6个tag号可以分配给发送报文读取模块用作顺序标号。
在报文数据从发送缓冲区发送到对端的通信设备之后,发送报文读取模块可以回写BD,即发送报文读取模块可清除BD的有效位,以便CPU装填后续的报文信息。其中,回写BD的内存写指令也可以由发送报文读取模块的TLP发送引擎完成TLP组帧。然后发送报文读取模块的TLP发送引擎向发送仲裁单元发出请求发送内存写指令的发送请求,在接收到发送仲裁单元返回的发送确认指令以后,发送报文读取模块的TLP发送引擎将内存写指令从PCIE总线发出。
在一种具体实施方式中,在步骤S210之前,还包括:发送BD表读取模块接收CPU的BD有效提示信息,其中,所述CPU每构建一个新的BD,便向所述发送BD表读取模块发送所述BD有效提示信息。
在步骤S210之前,通信设备的CPU可以进行如下的动作:通信设备的CPU接收到报文,将报文存储在多个第一内存中,并构建指向多个第一内存中的每个第一内存的BD,从而获得多个BD,多个BD存储在连续的多个第二内存中。CPU每构建一个新的BD,会发送一个BD有效提示消息给发送BD表读取模块。在本发明实施例中,CPU每收到一个需要转发的报文,即构建一个新的BD,此时会发送一个BD有效提示消息给发送BD表读取模块。
若发送BD表读取模块在接收到BD有效提示消息时处于空闲状态,则可以通过寄存器配置单元获得BD基地址,从而完成第一内存读指令的组帧。若发送BD表读取模块在接收到BD有效提示消息时处于正在进行第一内存读指令的组帧状态,则可以忽略BD有效提示消息,因为通常情况下,第一内存读指令可连续读取BD表中的BD,直到读回无效的BD才停止BD的读取。
可选地,CPU发送的BD有效提示消息可以通过设置通道的启动寄存器的方式来触发发送BD表读取模块。其中,发送BD表读取模块在进行第一内存读指令的组帧之前,也可以先查看第一FIFO队列是否还有空余空间,若第一FIFO无空余空间,则可以暂不进行第一内存读指令的组帧;若第一FIFO有空余空间,可根据第一FIFO空余空间的数量来确定欲读取的BD的数量。
请参见图4,图4示出了接收DMA单元执行的步骤流程图,包括如下步骤:
步骤S310,接收BD表读取模块中的TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第二BD读取指令。
接收BD表读取模块中的TLP发送引擎与发送仲裁单元通信来确定第二BD读取指令的发送时机,并在确定的发送时机经PCIE总线发出第二BD读取指令,第二BD读取指令用于从通信设备的另一区域的内存中读取连续多个BD。
可选地,请参见图5,步骤S310可以包括步骤S410至步骤S420:
步骤S410,接收BD表读取模块中的TLP发送引擎根据BD基地址完成第三内存读指令TLP的组帧。
接收BD表读取模块可以通过寄存器配置单元获得BD基地址。例如,通信设备的CPU可以向自定义的地址发送BD基地址。通信设备的CPU在向自定义的地址发送包含BD基地址的命令时,寄存器配置单元可以接收CPU发送的包含BD基地址的命令,并把BD基地址填到自定义的地址中,以便接收DMA单元获得BD基地址。
接收BD表读取模块中的TLP发送引擎可以根据BD基地址来完成第三内存读指令TLP的组帧。
步骤S420,接收BD表读取模块中的TLP发送引擎向所述发送仲裁单元传递第三发送请求,并在接收到所述发送仲裁单元返回的第三发送确认指令后,经所述PCIE总线发出所述第三内存读指令TLP。
第三发送请求为请求发送第三内存读指令TLP的请求。第三发送确认指令为准许第三内存读指令TLP发送的确认指令。
第三发送请求被发送给发送仲裁单元之后,等待发送仲裁单元的轮询。在等待到发送仲裁单元的轮询以后,接收发送仲裁单元返回的第三发送确认指令。随后,第三内存读指令TLP被接收BD表读取模块发送到PCIE总线上,并经PCIE总线从tx方向发出。
步骤S320,接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二FIFO队列。
由于BD是在通信设备的地址相邻的连续内存中存储,因此在获得BD时,按照内存的地址顺序读取获得的连续多个BD的顺序与连续多个BD在内存的存储顺序一致。连续多个BD可以存入第二FIFO队列,在需要从第二FIFO队列取出时,依然也会按照连续多个BD在内存的存储顺序取出。
可选地,请参见图5,步骤S320可以包括:
步骤S430,接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的第三CPLD包,并将所述第三CPLD包中的连续多个BD存入第二FIFO队列,其中,所述第三CPLD包包括接收BD表的连续多个BD,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间。
在步骤S420中,第三内存读指令TLP经PCIE总线从tx方向发出后,被第三内存读指令对应的目标系统(即系统DDR控制器)接收,第三内存读指令对应的目标系统根据BD基地址读取到连续多个BD后,通过第三CPLD包的形式将上述的连续多个BD从rx方向返回,即可以将第三CPLD包发送到PCIE总线上,然后经PCIE总线从rx方向返回到接收BD表读取模块的TLP接收引擎。接收BD表读取模块的TLP接收引擎解析第三CPLD包,并将解析出的连续多个BD存入第二FIFO队列中。接收BD表指的是与等待从对端的通信设备接收的报文相关的BD对应的连续多个内存地址构成的表。接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间,以便存入对端的通信设备发来的报文。
可选地,第三CPLD包中可以包含对应的接收BD表读取模块的身份标识,该身份标识表示与接收BD表读取模块对应的通道,该身份标识可以是接收BD表读取模块的TLP发送引擎在发送第三内存读指令TLP时便携带在第三内存读指令TLP中的。在将第三CPLD包返回到接收BD表读取模块的TLP接收引擎时,可以将第三CPLD包群发给多通道中每个通道的TLP接收引擎。每个通道的TLP接收引擎获得第三CPLD包中的身份标识,并将该身份标识与自身的身份标识进行比对,若比对结果一致,则比对结果一致的接收BD表读取模块的TLP接收引擎才接收第三CPLD包。
在一种具体实施方式中,在从接收BD表读取BD之前,接收BD表读取模块中的TLP接收引擎也可以先查看第二FIFO队列是否还有空余空间,若第二FIFO无空余空间,则可以暂不进行第三内存读指令TLP的组帧;若第二FIFO有空余空间,可根据第二FIFO空余空间的数量来确定欲读取的BD的数量。
步骤S330,接收报文写入模块的TLP发送引擎从所述第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存。
接收报文写入模块与发送仲裁单元通信确定将获取到的报文写入BD的指针指向内存的时机。
可选地,请参见图5,步骤S330可以包括步骤S440至步骤S460:
步骤S440,接收报文写入模块从接收缓冲区获取报文。
报文可以从对端的通信设备发送到该通信设备的接收缓冲区,当接收缓冲区存储了一定数量的报文数据时,接收报文写入模块从接收缓冲区获取报文。
步骤S450,接收报文写入模块中的TLP发送引擎从所述第二FIFO队列中获得所述多个BD中的一个BD,根据所述BD的指针以及从所述接收缓冲区获取的报文构建内存写指令TLP的组帧。
接收报文写入模块的TLP发送引擎从第二FIFO队列中获得BD,并根据BD和报文构建内存写指令TLP的组帧。内存写指令TLP用于将从接收缓冲区获取到的报文填入BD的指针指向的内存中。
可选地,通信设备有最大写长度的限制,故通常需要多个内存写指令来完成接收缓冲区的报文的写入。因此,每当接收缓冲区内收到的报文数据超过最大写长度时,接收报文写入模块的TLP发送引擎就可以进行一个内存写指令的组帧。
可选地,在一个BD的指针指向的内存区域被写满或全部报文数据被搬移完成后,接收报文写入模块可以执行回写BD的动作,回写BD的内存写指令的组帧也可以由接收报文写入模块的TLP发送引擎进行。
步骤S460,接收报文写入模块中的TLP发送引擎向所述发送仲裁单元传递第四发送请求,并在接收到所述发送仲裁单元返回的第四发送确认指令后,经所述PCIE总线发出所述内存写指令TLP。
第四发送请求为请求发送内存写指令TLP的请求。第四发送确认指令为准许内存写指令TLP发送的确认指令。
第四发送请求被发送给发送仲裁单元之后,等待发送仲裁单元的轮询。在等待到发送仲裁单元的轮询以后,接收发送仲裁单元返回的第四发送确认指令。随后,内存写指令TLP被接收报文写入模块中的TLP发送引擎发送到PCIE总线上,并经PCIE总线从tx方向发出。
在一种具体实施方式中,对于多通道中的每个通道,发送仲裁单元均要接收在tx方向的四个发送请求。不妨设多通道的数量为8,则发送仲裁单元需要接收8个通道的一共4*8=32个发送请求。请参见图1,发送仲裁单元除了上述的32个发送请求外,还需要接收寄存器配置单元对状态寄存器的应答CPLD包的发送请求tx_cfg。寄存器配置单元的应答CPLD包是作为状态寄存器的应答,使用频率较小,因此可以被置为最高优先级不参与轮询。
对于剩下的32个发送请求,可以采用round robin的方式进行轮询。具体的方法可以如下:
为32个发送请求中的每个发送请求设置一个相应的计数器,当相应的发送请求有效时,计数器开始对系统时钟计数。发送仲裁单元中的轮询状态机工作时,获得轮询到的数值最大的计数器和数值第二大的计数器,并将数值最大的计数器对应的发送请求存入一个寄存器,将数值第二大的计数器对应的发送请求存入另一个寄存器。随后,发送仲裁单元对数值最大的计数器对应的发送请求返回发送确认指令,然后将数值第二大的计数器对应的发送请求作为数值最大的计数器对应的发送请求,并继续执行轮询,从而保证每次被返回发送确认指令的发送请求为等待时长最久的,以达到公平轮询的目的。另外,发送仲裁单元还可以根据PCIE的流控规范对发送信用进行计算,在信用不够时暂停内存读指令的命令或内存写指令的命令的发送。
本申请实施例通过对每个模块内置TLP发送引擎或TLP接收引擎,节省了切换通道后进行准备工作耗费的时间;利用发送仲裁单元对几十个发送请求的有效仲裁节省了切换通道造成的时间上的花销,从而提高了多通道DMA在报文转发上的性能;利用BD表,使得报文的收发具有稳定性和连续性。
本申请实施例还提供了一种数据传输装置,请参见图1,该装置包括发送直接内存访问DMA单元以及发送仲裁单元,发送DMA单元包括发送BD表读取模块和发送报文读取模块,所述发送BD表读取模块与所述发送报文读取模块连接,且所述发送BD表读取模块以及所述发送报文读取模块均与发送仲裁单元连接,所述发送BD表读取模块包括TLP发送引擎和TLP接收引擎,所述发送报文读取模块也包括TLP发送引擎和TLP接收引擎。
所述发送BD表读取模块中的传输层包TLP发送引擎用于与所述发送仲裁单元相通信,经所述PCIE总线发出第一BD读取指令。
所述发送BD表读取模块中的TLP接收引擎用于接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第一FIFO队列,其中,所述连续多个BD中的每个BD均包括数据指针信息和数据长度信息。
所述发送报文读取模块中的TLP发送引擎用于从所述第一FIFO队列获得所述连续多个BD的每个BD,并根据所述BD与所述发送仲裁单元相通信,经所述PCIE总线发出数据读取指令。
所述发送报文读取模块中的TLP接收引擎用于接收经所述PCIE总线返回的数据,并将所述数据存入发送缓冲区。
在一种具体实施方式中,本申请实施例又提供了一种数据传输装置,请参见图1,该装置包括接收DMA单元以及发送仲裁单元,所述接收DMA单元包括接收BD表读取模块和接收报文写入模块,所述接收BD表读取模块与所述接收报文写入模块连接,且所述接收BD表读取模块以及所述接收报文写入模块均与所述发送仲裁单元连接,所述接收BD表读取模块包括TLP发送引擎和TLP接收引擎,所述接收报文写入模块包括TLP发送引擎。
所述接收BD表读取模块中的TLP发送引擎用于与所述发送仲裁单元相通信,经所述PCIE总线发出第二BD读取指令。
所述接收BD表读取模块中的TLP接收引擎用于接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二FIFO队列,其中,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间。
所述接收报文写入模块的TLP发送引擎用于从所述第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法中的对应过程,在此不再过多赘述。
上述的数据传输装置均可以为FPGA器件。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统的具体工作过程,可以参考前述方法中的对应过程,在此不再过多赘述。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

Claims (10)

1.一种数据传输方法,其特征在于,应用于高速串行计算机扩展总线标准PCIE总线多通道的每条通道,所述每条通道均有对应的发送直接内存访问DMA单元,发送DMA单元包括发送缓存描述符BD表读取模块和发送报文读取模块,发送BD表读取模块与所述发送报文读取模块连接,且所述发送BD表读取模块以及所述发送报文读取模块均与发送仲裁单元连接,所述发送BD表读取模块包括传输层包TLP发送引擎和TLP接收引擎,所述发送报文读取模块也包括TLP发送引擎和TLP接收引擎;
所述方法包括:
所述发送BD表读取模块中的TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第一BD读取指令;
所述发送BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第一先进先出FIFO队列,其中,所述连续多个BD中的每个BD均包括数据指针信息和数据长度信息;
所述发送报文读取模块中的TLP发送引擎从第一FIFO队列获得所述连续多个BD的每个BD,并根据所述BD与所述发送仲裁单元相通信,经所述PCIE总线发出数据读取指令;
所述发送报文读取模块中的TLP接收引擎接收经所述PCIE总线返回的数据,并将所述数据存入发送缓冲区。
2.根据权利要求1所述的方法,其特征在于,
所述发送BD表读取模块中的TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第一BD读取指令,包括:
所述发送BD表读取模块中的TLP发送引擎根据BD基地址完成第一内存读指令TLP的组帧;
所述发送BD表读取模块中的TLP发送引擎向所述发送仲裁单元传递第一发送请求,并在接收到所述发送仲裁单元返回的第一发送确认指令后,经所述PCIE总线发出所述第一内存读指令TLP;
所述发送BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第一FIFO队列,其中,所述连续多个BD中的每个BD均包括数据指针信息和数据长度信息,包括:
所述发送BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的第一带数据的完成报文CPLD包,并将第一CPLD包中的连续多个BD存入第一FIFO队列,其中,所述第一CPLD包包括发送BD表的连续多个BD,所述发送BD表的连续多个BD中的每个BD均包括数据指针信息和数据长度信息;
所述发送报文读取模块中的TLP发送引擎从所述第一FIFO队列获得所述连续多个BD的每个BD,并根据所述BD与所述发送仲裁单元相通信,经所述PCIE总线发出数据读取指令,包括:
所述发送报文读取模块中的TLP发送引擎从所述第一FIFO队列中获得所述连续多个BD的每个BD,并根据所述每个BD的数据指针信息和数据长度信息完成第二内存读指令TLP的组帧;
所述发送报文读取模块中的TLP发送引擎向所述发送仲裁单元传递第二发送请求,并在接收到所述发送仲裁单元返回的第二发送确认指令后,经所述PCIE总线发出所述第二内存读指令TLP;
所述发送报文读取模块中的TLP接收引擎接收经所述PCIE总线返回的数据,并将所述数据存入发送缓冲区,包括:
所述发送报文读取模块中的TLP接收引擎接收经所述PCIE总线返回的第二CPLD包,并将所述第二CPLD包中的数据存入发送缓冲区。
3.根据权利要求2所述的方法,其特征在于,所述发送报文读取模块配置有多个互不相同的顺序标号;
所述发送报文读取模块中的TLP发送引擎从所述第一FIFO队列中获得所述连续多个BD的每个BD,并根据所述每个BD的数据指针信息和数据长度信息完成第二内存读指令TLP的组帧,包括:
所述发送报文读取模块中的TLP发送引擎从所述第一FIFO队列中获得所述连续多个BD的每个BD时,从所述多个互不相同的顺序标号选取顺序标号;
根据所述每个BD的数据指针信息和数据长度信息完成第二内存读指令TLP的组帧,并将所述顺序标号添加进所述第二内存读指令TLP中。
4.根据权利要求3所述的方法,其特征在于,所述第二CPLD包中包括与所述第二内存读指令TLP对应的顺序标号,所述将所述第二CPLD包中的数据存入发送缓冲区,包括:
根据携带有所述顺序标号的多个所述第二内存读指令TLP的发出顺序得到所述顺序标号的排序;
将多个所述第二CPLD包中的数据按照所述顺序标号的排序存入所述发送缓冲区。
5.根据权利要求1所述的方法,其特征在于,所述发送BD表读取模块中的TLP发送引擎根据BD基地址完成第一内存读指令TLP的组帧之前,所述方法还包括:
所述发送BD表读取模块接收控制器的BD有效提示信息,其中,所述控制器每构建一个新的BD,便向所述发送BD表读取模块发送所述BD有效提示信息。
6.根据权利要求1所述的方法,其特征在于,所述每条通道均有对应的接收DMA单元,所述接收DMA单元包括接收BD表读取模块和接收报文写入模块,所述接收BD表读取模块与所述接收报文写入模块连接,且所述接收BD表读取模块以及所述接收报文写入模块均与所述发送仲裁单元连接;
所述方法还包括:
所述接收BD表读取模块中的TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第二BD读取指令;
所述接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二FIFO队列,其中,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间;
所述接收报文写入模块的TLP发送引擎从所述第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存。
7.根据权利要求6所述的方法,其特征在于,
所述接收BD表读取模块中的TLP发送引擎与所述发送仲裁单元相通信,经所述PCIE总线发出第二BD读取指令,包括:
所述接收BD表读取模块中的TLP发送引擎根据BD基地址完成第三内存读指令TLP的组帧;
所述接收BD表读取模块中的TLP发送引擎向所述发送仲裁单元传递第三发送请求,并在接收到所述发送仲裁单元返回的第三发送确认指令后,经所述PCIE总线发出所述第三内存读指令TLP;
所述接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二FIFO队列,其中,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间,包括:
所述接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的第三CPLD包,并将所述第三CPLD包中的连续多个BD存入第二FIFO队列,其中,所述第三CPLD包包括接收BD表的连续多个BD,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间;
所述接收报文写入模块的TLP发送引擎从所述第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存,包括:
所述接收报文写入模块从接收缓冲区获取报文;
所述接收报文写入模块中的TLP发送引擎从所述第二FIFO队列中获得所述多个BD中的一个BD,根据所述BD的指针以及从所述接收缓冲区获取的报文构建内存写指令TLP的组帧;
所述接收报文写入模块中的TLP发送引擎向所述发送仲裁单元传递第四发送请求,并在接收到所述发送仲裁单元返回的第四发送确认指令后,经所述PCIE总线发出所述内存写指令TLP。
8.一种数据传输方法,其特征在于,每条通道均有对应的接收直接内存访问DMA单元,所述接收DMA单元包括接收缓存描述符BD表读取模块和接收报文写入模块,所述接收BD表读取模块与所述接收报文写入模块连接,且所述接收BD表读取模块以及所述接收报文写入模块均与发送仲裁单元连接;
所述方法包括:
所述接收BD表读取模块中的传输层包TLP发送引擎与所述发送仲裁单元相通信,经高速串行计算机扩展总线标准PCIE总线发出第二BD读取指令;
所述接收BD表读取模块中的TLP接收引擎接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二先进先出FIFO队列,其中,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间;
所述接收报文写入模块的TLP发送引擎从第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存。
9.一种数据传输装置,其特征在于,应用于高速串行计算机扩展总线标准PCIE总线多通道的每条通道,所述装置包括发送直接内存访问DMA单元以及发送仲裁单元,发送DMA单元包括发送缓存描述符BD表读取模块和发送报文读取模块,发送BD表读取模块与所述发送报文读取模块连接,且所述发送BD表读取模块以及所述发送报文读取模块均与发送仲裁单元连接,所述发送BD表读取模块包括传输层包TLP发送引擎和TLP接收引擎,所述发送报文读取模块也包括TLP发送引擎和TLP接收引擎;
所述发送BD表读取模块中的传输层包TLP发送引擎用于与所述发送仲裁单元相通信,经所述PCIE总线发出第一BD读取指令;
所述发送BD表读取模块中的TLP接收引擎用于接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第一先进先出FIFO队列,其中,所述连续多个BD中的每个BD均包括数据指针信息和数据长度信息;
所述发送报文读取模块中的TLP发送引擎用于从第一FIFO队列获得所述连续多个BD的每个BD,并根据所述BD与所述发送仲裁单元相通信,经所述PCIE总线发出数据读取指令;
所述发送报文读取模块中的TLP接收引擎用于接收经所述PCIE总线返回的数据,并将所述数据存入发送缓冲区。
10.一种数据传输装置,其特征在于,应用于高速串行计算机扩展总线标准PCIE总线多通道的每条通道,所述装置包括接收直接内存访问DMA单元以及发送仲裁单元,所述接收DMA单元包括接收缓存描述符BD表读取模块和接收报文写入模块,所述接收BD表读取模块与所述接收报文写入模块连接,且所述接收BD表读取模块以及所述接收报文写入模块均与所述发送仲裁单元连接,所述接收BD表读取模块包括传输层包TLP发送引擎和TLP接收引擎,所述接收报文写入模块包括TLP发送引擎;
所述接收BD表读取模块中的TLP发送引擎用于与所述发送仲裁单元相通信,经所述PCIE总线发出第二BD读取指令;
所述接收BD表读取模块中的TLP接收引擎用于接收经所述PCIE总线返回的连续多个BD,并将所述连续多个BD存入第二先进先出FIFO队列,其中,所述接收BD表的连续多个BD中的每个BD内的指针所指向的内存空间均为有效的可写空间;
所述接收报文写入模块的TLP发送引擎用于从第二FIFO队列获得所述多个BD中的一个BD,并根据所述BD以及从接收缓冲区获取的报文与所述发送仲裁单元相通信,从而将所述接收缓冲区获取的报文写入所述BD的指针指向的内存。
CN201910604919.4A 2019-07-05 2019-07-05 数据传输方法及装置 Active CN112181887B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910604919.4A CN112181887B (zh) 2019-07-05 2019-07-05 数据传输方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910604919.4A CN112181887B (zh) 2019-07-05 2019-07-05 数据传输方法及装置

Publications (2)

Publication Number Publication Date
CN112181887A true CN112181887A (zh) 2021-01-05
CN112181887B CN112181887B (zh) 2023-05-26

Family

ID=73915995

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910604919.4A Active CN112181887B (zh) 2019-07-05 2019-07-05 数据传输方法及装置

Country Status (1)

Country Link
CN (1) CN112181887B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113204515A (zh) * 2021-06-02 2021-08-03 郑州信大捷安信息技术股份有限公司 Pcie应用层数据接收过程中的流控系统及方法
CN114553776A (zh) * 2022-02-28 2022-05-27 深圳市风云实业有限公司 一种信号乱序控制与速率自适应的传输装置及其传输方法
CN115277407A (zh) * 2022-07-25 2022-11-01 北京天融信网络安全技术有限公司 网口配置处理方法、装置、电子设备和存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101976229A (zh) * 2010-11-09 2011-02-16 北京星网锐捷网络技术有限公司 一种系统中外部设备的数据读取方法、系统及装置
CN102184151A (zh) * 2011-04-29 2011-09-14 杭州华三通信技术有限公司 Pci-e转pci桥装置及其主动预取数据的方法
US20120250480A1 (en) * 2010-01-20 2012-10-04 Takahiro Kurokawa Method for adjusting recording condition, optical disc device, and information recording method
CN103064807A (zh) * 2012-12-17 2013-04-24 福建星网锐捷网络有限公司 多通道直接存储器存取控制器
CN103218313A (zh) * 2013-04-02 2013-07-24 杭州华三通信技术有限公司 用于实现缓存描述符交互的方法和电子设备
US20140122768A1 (en) * 2012-10-27 2014-05-01 Huawei Technologies Co., Ltd. Method, device, system and storage medium for implementing packet transmission in pcie switching network
CN109471816A (zh) * 2018-11-06 2019-03-15 西安微电子技术研究所 一种基于描述符的pcie总线dma控制器及数据传输控制方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120250480A1 (en) * 2010-01-20 2012-10-04 Takahiro Kurokawa Method for adjusting recording condition, optical disc device, and information recording method
CN101976229A (zh) * 2010-11-09 2011-02-16 北京星网锐捷网络技术有限公司 一种系统中外部设备的数据读取方法、系统及装置
CN102184151A (zh) * 2011-04-29 2011-09-14 杭州华三通信技术有限公司 Pci-e转pci桥装置及其主动预取数据的方法
US20140122768A1 (en) * 2012-10-27 2014-05-01 Huawei Technologies Co., Ltd. Method, device, system and storage medium for implementing packet transmission in pcie switching network
CN103064807A (zh) * 2012-12-17 2013-04-24 福建星网锐捷网络有限公司 多通道直接存储器存取控制器
CN103218313A (zh) * 2013-04-02 2013-07-24 杭州华三通信技术有限公司 用于实现缓存描述符交互的方法和电子设备
CN109471816A (zh) * 2018-11-06 2019-03-15 西安微电子技术研究所 一种基于描述符的pcie总线dma控制器及数据传输控制方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
JAKE WILTGEN: "Bus Master DMA Performance Demonstration Reference Design for the Xilinx Endpoint PCI Express@Solutions", 《XILINX》 *
郑凯: "基于PCI+EXPRESS 2.0的高速网卡中DMA设计", 《软件》 *
陈沛伟: "一种基于PCIE总线的改进分散集聚DMA的设计", 《雷达科学与技术》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113204515A (zh) * 2021-06-02 2021-08-03 郑州信大捷安信息技术股份有限公司 Pcie应用层数据接收过程中的流控系统及方法
CN113204515B (zh) * 2021-06-02 2022-02-22 郑州信大捷安信息技术股份有限公司 Pcie应用层数据接收过程中的流控系统及方法
CN114553776A (zh) * 2022-02-28 2022-05-27 深圳市风云实业有限公司 一种信号乱序控制与速率自适应的传输装置及其传输方法
CN114553776B (zh) * 2022-02-28 2023-10-10 深圳市风云实业有限公司 一种信号乱序控制与速率自适应的传输装置及其传输方法
CN115277407A (zh) * 2022-07-25 2022-11-01 北京天融信网络安全技术有限公司 网口配置处理方法、装置、电子设备和存储介质
CN115277407B (zh) * 2022-07-25 2024-01-23 北京天融信网络安全技术有限公司 网口配置处理方法、装置、电子设备和存储介质

Also Published As

Publication number Publication date
CN112181887B (zh) 2023-05-26

Similar Documents

Publication Publication Date Title
EP0391583B1 (en) Dual-path computer interconnect system with four-ported packet memory control
CN1552028B (zh) 片上系统和其分布式直接存储器访问的方法和控制系统
CN112181887B (zh) 数据传输方法及装置
US5187780A (en) Dual-path computer interconnect system with zone manager for packet memory
KR100775406B1 (ko) Dma 데이터 전송 장치 및 dma 데이터 전송 방법
CN100461146C (zh) 支持地址信息、数据、及传送合格号的双通道总线结构
US5515523A (en) Method and apparatus for arbitrating conflicts by monitoring number of access requests per unit of time in multiport memory systems
CN101877666B (zh) 基于零拷贝方式的多应用程序报文接收方法和装置
CN103353851A (zh) 一种管理任务的方法和设备
CN105630424A (zh) 数据处理方法、装置及系统
CN112328520B (zh) 一种pcie设备、基于pcie设备的数据传输方法和系统
CN112256624B (zh) 用于高速互连网络接口芯片的dma通信装置、芯片、设备及方法
CN111290983A (zh) Usb传输设备及传输方法
US10095643B2 (en) Direct memory access control device for at least one computing unit having a working memory
CN101534259B (zh) 异步通信控制器及其控制方法
CN112328519B (zh) 一种pcie设备、基于sr-iov的数据包有序传输方法和系统
CN102857443B (zh) 一种数据写入的方法、装置及系统
CN116009770A (zh) 读响应电路、方法、数据传输系统及相关设备
KR20110134465A (ko) 데이터 전송 시스템 및 그 데이터 판독 방법
CN115563038A (zh) 基于dma控制器的数据处理系统、方法和数据处理设备
CN107729140B (zh) 一种并行实现多个eMMC主机接口命令排队功能的装置及方法
CN112948298A (zh) 一种报文处理方法及装置
CN114297107B (zh) 一种标签Tag的管理方法、设备及介质
CN104503928A (zh) 一种基于队列管理的可随机存储电路
CN111124987B (zh) 一种基于pcie的数据传输控制系统和方法

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