掌桥专利:专业的专利平台
掌桥专利
首页

数据传输方法和数据传输装置

文献发布时间:2023-06-19 09:55:50


数据传输方法和数据传输装置

技术领域

本公开的实施例涉及一种数据传输方法和数据传输装置。

背景技术

DMA(Direct Memory Access,直接内存存取)传输装置可以将数据从一个地址空间复制到另外一个地址空间。当中央处理单元(CPU)初始化这个传输动作时,传输动作本身是由DMA传输装置来实行和完成,例如,可以由DMA传输装置移动一个外部内存的区块到芯片内部的内存区。这样的操作并没有让CPU工作拖延,反而可以被重新安排去处理其他的工作,因此,DMA传输装置对于高效能嵌入式系统算法和网络是很重要的。

发明内容

本公开至少一实施例提供一种数据传输方法,应用于需要数据交换的系统中,所述数据传输方法包括:获取第一存储单元和第二存储单元的数据交换信息,其中,所述数据交换信息包括所述第一存储单元的数据的第一源起始地址和第一传输数据量以及所述第二存储单元的数据的第二源起始地址和第二传输数据量,所述第一传输数据量的数据包括N个第一数据序列,分为N次传输,所述第二传输数据量的数据包括N个第二数据序列,分为N次传输;基于所述数据交换信息从所述第一存储单元中读取所述N个第一数据序列中的第n个第一数据序列写入至第一缓存单元,从所述第二存储单元中读取所述N个第二数据序列中的第n个第二数据序列写入至所述第一缓存单元;从所述第一缓存单元中将所述第n个第一数据序列传输至所述第二存储单元,从所述第一缓存单元中将所述第n个第二数据序列传输至所述第一存储单元;n为大于等于1且小于等于N的整数,N为大于等于1的整数。

例如,在本公开至少一实施例提供的数据传输方法中,所述第n个第一数据序列包括R个第一子数据序列,分为R次传输,所述第n个第二数据序列包括S个第二子数据序列,分为S次传输;R为大于等于1的整数,S为大于等于1的整数。

例如,在本公开至少一实施例提供的数据传输方法中,所述第一源起始地址对应于第一个第一数据序列的第一个第一子数据序列的第x位数据,所述第二源起始地址对应于第一个第二数据序列的第一个第二子数据序列的第y位数据,基于所述数据交换信息从所述第一存储单元中读取所述N个第一数据序列中的第n个第一数据序列写入至第一缓存单元,从所述第二存储单元中读取所述N个第二数据序列中的第n个第二数据序列写入至所述第一缓存单元,包括:在传输所述第一个第一子数据序列时,仅传输所述第一个第一子数据序列包括的第x至第X-1位数据;在传输所述第一个第二子数据序列时,仅传输所述第一个第二子数据序列包括的第y至第Y-1位数据;x为大于等于0且小于等于X-1的整数,X表示所述第一个第一子数据序列的位宽,为大于等于1的整数;y为大于等于0且小于等于Y-1的整数,Y表示所述第一个第二子数据序列的位宽,为大于等于1的整数。

例如,在本公开至少一实施例提供的数据传输方法中,在获取数据交换信息之后,且从第一存储单元中读取所述第n个第一数据序列和从所述第二存储单元中读取所述第n个第二数据序列之前,所述数据传输方法还包括:向所述第一存储单元顺序发送与所述R个第一子数据序列一一对应的多个第一读取数据请求;向所述第二存储单元顺序发送与所述S个第二子数据序列一一对应的第二读取数据请求。

例如,在本公开至少一实施例提供的数据传输方法中,在向所述第一存储单元发送所述第一读取数据请求时,将读取的第一子数据序列的第一有效起始地址和标记存储单元中用于存储该第一读取数据请求对应的第一标记信息的地址发送给所述第一存储单元,并标记所述第一读取数据请求的顺序,同时将所述第一标记信息存储在所述标记存储单元中;在向所述第二存储单元发送所述第二读取数据请求时,将读取的第二子数据序列的第二有效起始地址和所述标记存储单元中用于存储该第二读取数据请求对应的第二标记信息的地址发送给所述第二存储单元,并标记所述第二读取数据请求的顺序,同时将所述第二标记信息存储在所述标记存储单元中。

例如,在本公开至少一实施例提供的数据传输方法中,基于所述数据交换信息从所述第一存储单元中读取所述N个第一数据序列中的第n个第一数据序列写入至第一缓存单元,从所述第二存储单元中读取所述N个第二数据序列中的第n个第二数据序列写入至所述第一缓存单元,包括:当从所述第一存储单元中返回第r个第一子数据序列至所述第一缓存单元时,会同时返回发送所述第r个第一子数据序列对应的第一读取数据请求时发送给所述第一存储单元的第一标记信息的地址;当从所述第二存储单元中返回第s个第二子数据序列至所述第一缓存单元时,会同时返回发送所述第s个第二子数据序列对应的第二读取数据请求时发送给所述第二存储单元的第二标记信息的地址;根据该所述第一标记信息的地址从所述标记存储单元读取对应的第一标记信息,根据该所述第二标记信息的地址从所述标记存储单元读取对应的第二标记信息,所述第一标记信息的地址对应的信息包括读取的第一子数据序列的第一有效起始地址、所述第一子数据序列的数据量以及第一缓存起始地址,所述第二标记信息的地址对应的信息包括读取的第二子数据序列的第二有效起始地址、所述第二子数据序列的数据量以及第二缓存起始地址;r为大于等于1且小于等于R的整数,s为大于等于1且小于等于S的整数。

例如,在本公开至少一实施例提供的数据传输方法中,所述第一有效起始地址对应于所述第r个第一子数据序列的第p位数据,所述第二有效起始地址对应于所述第s个第二子数据序列的第q位数据,基于所述数据交换信息从所述第一存储单元中读取所述N个第一数据序列中的第n个第一数据序列写入至第一缓存单元,从所述第二存储单元中读取所述N个第二数据序列中的第n个第二数据序列写入至所述第一缓存单元,还包括:将读取的所述第r个第一子数据序列中的第p至第P-1位数据从所述第一有效起始地址处向低位移p位,并写入第二缓存单元,以将所述第0至第p-1位数据移除,若p等于0则不需要移位;将读取的所述第s个第二子数据序列中的第q至第Q-1位数据从所述第二有效起始地址处向低位移q位,并写入所述第二缓存单元,以将所述第0至第q-1位数据移除,若q等于0则不需要移位;p为大于等于0小于等于P-1的整数,P表示所述第r个第一子数据序列的位宽,为大于等于1的整数;q为大于等于0小于等于Q-1的整数,Q表示所述第s个第二子数据序列的位宽,为大于等于1的整数。

例如,在本公开至少一实施例提供的数据传输方法中,响应于顺序发送的所述多个第一读取数据请求从所述第一存储单元中乱序返回所述R个第一数据序列至所述第一缓存单元,同时乱序返回与所述R个第一数据序列一一对应的第一标记信息的地址,响应于顺序发送的所述第二读取数据请求从所述第二存储单元中乱序返回所述S个第二数据序列至所述第一缓存单元,同时乱序返回与所述S个第二数据序列一一对应的第二标记信息的地址;在从所述第一存储单元中乱序返回所述R个第一数据序列后,所述数据传输方法还包括:将乱序返回的所述R个第一子数据序列的有效数据、所述读取的第一子数据序列的数据量以及所述第一缓存起始地址写入所述第二缓存单元,并标记所述第一存储单元响应于所述第一读取数据请求返回的第一子数据序列的返回顺序;在从所述第二存储单元中乱序返回所述S个第二数据序列之后,所述数据传输方法还包括:将乱序返回的所述S个第二子数据序列的有效数据、所述读取的第二子数据序列的数据量以及所述第二缓存起始地址写入所述第二缓存单元,并标记所述第二存储单元响应于所述第二读取数据请求返回的第二子数据序列的返回顺序。

例如,在本公开至少一实施例提供的数据传输方法中,基于所述数据交换信息和所述标记信息从所述第一存储单元中读取所述N个第一数据序列中的第n个第一数据序列写入至第一缓存单元,从所述第二存储单元中读取所述N个第二数据序列中的第n个第二数据序列写入至所述第一缓存单元,还包括:从所述第二缓存单元中读取所述第r个第一子数据序列和所述第s个第二子数据序列,并将所述第r个第一子数据序列和所述第s个第二子数据序列写入至所述第一缓存单元,其中,所述第一缓存起始地址对应所述第r个第一子数据序列的第t位数据存储地址,所述第二缓存起始地址对应所述第s个第二子数据序列的第u位数据存储地址;在将所述第r个第一子数据序列写入至所述第一缓存单元的过程中,将所述第r个第一子数据序列的有效数据向高位移t位,以将所述第r个第一子数据序列的第一有效起始地址处的数据写入所述第一缓存起始地址处,并从所述第一缓存起始地址开始依次写入所述第r个第一子数据序列中的数据;在将所述第s个第二子数据序列写入至所述第一缓存单元的过程中,将所述第s个第二子数据序列的有效数据向高位移u位,以将所述第s个第二子数据序列的第一有效起始地址处的数据写入所述第二缓存起始地址处,并从所述第二缓存起始地址开始依次写入所述第s个第二子数据序列中的数据;u为大于等于1且小于等于P-1的整数,t为大于等于1且小于等于Q-1的整数。

例如,在本公开至少一实施例提供的数据传输方法中,从所述第一缓存单元中将所述第n个第一数据序列传输至所述第二存储单元,从所述第一缓存单元中将所述第n个第二数据序列传输至所述第一存储单元,包括:判断对应于所述第r个第一子数据序列对应的第一读取数据请求的返回顺序的标记是否有效,如果有效,则从所述第一缓存单元中读出所述第r个第一子数据序列;判断对应于所述第s个第二子数据序列对应的第二读取数据请求的返回顺序的标记是否有效,如果有效,则从所述第一缓存单元中读出所述第s个第二子数据序列。

例如,在本公开至少一实施例提供的数据传输方法中,从所述第一缓存单元中将所述第n个第一数据序列传输至所述第二存储单元,从所述第一缓存单元中将所述第n个第二数据序列传输至所述第一存储单元,还包括:将从所述第一缓存单元中读取的所述第a个第一子数据序列中的第v至第V-1位数据从所述第一有效起始地址处向低位移v位,以将所述第0至第v-1位数据移除,并将所述第a个第一子数据序列的数据量和移位后的第a个第一子数据序列的有效数据写入第三缓存单元;以及将从所述第一缓存单元中读取的所述第b个第二子数据序列中的第w至第W-1位数据从所述第二有效起始地址处向低位移w位,以将所述第0至第w-1位数据移除,并将所述第b个第二子数据序列的数据量和移位后的第b个第二子数据序列的有效数据写入所述第三缓存单元;a为大于等于1且小于等于R的整数,b为大于等于1且小于等于S的整数;v为大于等于0小于等于V-1的整数,V表示所述第a个第一子数据序列的位宽,为大于等于1的整数;w为大于等于0小于等于W-1的整数,W表示所述第b个第二子数据序列的位宽,为大于等于1的整数。

例如,在本公开至少一实施例提供的数据传输方法中,从所述第一缓存单元中将所述第n个第一数据序列传输至所述第二存储单元,从所述第一缓存单元中将所述第n个第二数据序列传输至所述第一存储单元,还包括:初始化所述第一存储单元的第一目的写入地址以及所述第二存储单元的第二目的写入地址;从所述第三缓存单元读取所述第n个第一数据序列并移位以写入至所述第二存储单元的第二目的写入地址,从所述第三缓存单元读取所述第n个第二数据序列并移位以写入至所述第一存储单元的第一目的写入地址。

例如,在本公开至少一实施例提供的数据传输方法中,所述R个第一子数据序列和所述S个第二子数据序列的位宽相同。

本公开至少一实施例还提供一种数据传输装置,包括:配置获取单元,配置为获取第一存储单元和第二存储单元的数据交换信息,所述数据交换信息包括所述第一存储单元的数据的第一源起始地址和第一传输数据量以及所述第二存储单元的数据的第二源起始地址和第二传输数据量,所述第一传输数据量的数据包括N个第一数据序列,分为N次传输,所述第二传输数据量的数据包括N个第二数据序列,分为N次传输;数据搬运单元,配置为基于所述数据交换信息从所述第一存储单元中读取所述N个第一数据序列中的第n个第一数据序列写入至第一缓存单元,从所述第二存储单元中读取所述N个第二数据序列中的第n个第二数据序列写入至所述第一缓存单元;数据交换单元,配置为从所述第一缓存单元中将所述第n个第一数据序列传输至所述第二存储单元,从所述第一缓存单元中将所述第n个第二数据序列传输至所述第一存储单元;n为大于等于1且小于等于N的整数,N为大于等于1的整数。

例如,在本公开至少一实施例提供的数据传输装置中,所述数据搬运单元包括:第一缓存单元、第二缓存单元和第三缓存单元;所述第二缓存单元,配置为存储从所述第一存储单元返回的第n个第一数据序列以及从所述第二存储单元返回的第n个第二数据序列;所述第一缓存单元,配置为存储从所述第二缓存单元返回的第n个第一数据序列以及第n个第二数据序列;所述第三缓存单元,配置为存储从所述第一缓存单元返回的第n个第一数据序列以及第n个第二数据序列。

例如,本公开至少一实施例提供的数据传输装置还包括:标记存储单元,配置为存储响应于读取数据请求读取的第一子数据序列的第一有效起始地址、所述第一子数据序列的数据量以及第一缓存起始地址和第二子数据序列的第二有效起始地址、所述第二子数据序列的数据量以及第二缓存起始地址。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。

图1A为本公开至少一实施例提供的一种数据传输方法的流程图;

图1B为DMA数据交换示意图;

图2为本公开至少一实施例提供的另一种数据传输方法的流程图;

图3为本公开至少一实施例提供的一种第一个第一子数据序列和第一个第二子数据序列的传输方法的流程图;

图4为本公开至少一实施例提供的一种数据返回方法的流程图;

图5A为本公开至少一实施例提供的一种数据序列的示意图;

图5B为本公开至少一实施例提供的将数据序列移位后的示意图;

图6为本公开至少一实施例提供的另一种数据返回方法的流程图;

图7为本公开至少一实施例提供的又一种数据返回方法的流程图;

图8为本公开至少一实施例提供的再一种数据返回方法的流程图;

图9为本公开至少一实施例提供的一种数据交换方法的流程图;

图10为本公开至少一实施例提供的另一种数据交换方法的流程图;

图11为本公开至少一实施例提供的又一种数据交换方法的流程图;

图12为本公开至少一实施例提供的一种数据传输方法的系统流程图;

图13为本公开至少一实施例提供的一种数据返回方法的系统流程图;

图14为本公开至少一实施例提供的一种数据交换方法的系统流程图;

图15为本公开至少一实施例提供的一种数据传输装置的示意框图;

图16为本公开至少一实施例提供的另一种数据传输装置的示意图;

图17为本公开至少一实施例提供的又一种数据传输装置的示意图;以及

图18为本公开至少一实施例提供的再一种数据传输装置的数据传输的示意图。

具体实施方式

为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。

为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。

随着信息技术的发展,对设备的要求越来越高,设备的计算能力越来越强,数据量的处理也越来越大,对此,在数据搬运过程中,越来越希望能够将数据从一个空间快速搬运到另一个空间,在这种情况下,DMA便应用而生,并且要求越来越高,功能越来越强。DMA是现代许多计算设备的重要特色,它允许不同速度的硬件装置直接进行数据传输,是一种无需处理器一直参与就可以让外设设备与系统内存之间进行双向数据传输的硬件机制。使用DMA传输装置可以使系统处理器从实际的接口数据传输过程中摆脱出来,从而大大提高系统的吞吐率。当处理器初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。有许多具体应用,例如,移动一个外部内存的区块到芯片内部更快的内存区。DMA传输对于高效能嵌入式系统算法和网络是很重要的。

目前,两个存储单元之间的数据交换方法通常包括如下步骤:1、将第一存储单元的数据搬运到临时缓存;2、将第二存储单元的数据搬运到临时缓存;3、将临时缓存中的第一存储单元的数据搬运到第二存储单元;4、将临时缓存中的第二存储单元的数据搬运到第一存储单元。该方法需要CPU多次参与,发送多次指令,在执行的过程中顺序发送请求,顺序返回数据,耗时比较长,效率低下。另外,在大数据计算的时候需要交换两个存储单元的数据,直接使用DMA可以实现,但是需要多次配置,会占用处理器带宽,效率不高。

本公开至少一实施例提供一种数据传输方法,应用于需要数据交换的系统中,该数据传输方法包括:获取第一存储单元和第二存储单元的数据交换信息,数据交换信息包括第一存储单元的数据的第一源起始地址和第一传输数据量以及第二存储单元的数据的第二源起始地址和第二传输数据量,第一传输数据量的数据包括N个第一数据序列,分为N次传输,第二传输数据量包括N个第二数据序列,分为N次传输;基于数据交换信息从第一存储单元中读取N个第一数据序列中的第n个第一数据序列写入至第一缓存单元,从第二存储单元中读取N个第二数据序列中的第n个第二数据序列写入至第一缓存单元;从第一缓存单元中将第n个第一数据序列传输至第二存储单元,从第一缓存单元中将第n个第二数据序列传输至第一存储单元;其中,n为大于等于1且小于等于N的整数,N为大于等于1的整数。

本公开至少一实施例还提供一种对应于上述数据传输方法的数据传输装置。

本公开实施例提供的数据传输方法可以通过一次配置完成全部数据的交换,并且支持数据乱序返回,从而高效地实现了大量数据交换。

下面结合附图对本公开的实施例及其示例进行详细说明。

本公开至少一实施例提供一种数据传输方法,例如,可以应用于需要数据交换的系统中,例如,该需要数据交换的系统为需要进行大量数据交换的系统,比如计算机系统等,本公开的实施例对此不作限制。例如,在一些示例中,该数据传输方法可以应用于各种类型的处理器中的DMA传输装置以实现数据交换,当然还可以应用于其他领域,该处理器可以是通用处理器或专用处理器,可以是精简指令集(RISC)处理器或复杂指令集(CISC)处理器,可以是X86处理器、ARM处理器等,本公开的实施例对此不作限制。

图1A为本公开至少一实施例提供的一种数据传输方法的一个示例的流程图。例如,该数据传输方法可以以软件、硬件、固件或其任意组合的方式实现,由例如手机、平板电脑、笔记本电脑、桌面电脑、网络服务器等设备中的处理器加载并执行,可以通过一次配置完成全部数据的交换,并且支持数据乱序返回,从而高效地实现了大量数据交换。

例如,该计算机系统中包括具有计算功能的任何电子设备,例如可以为手机、笔记本电脑、平板电脑、台式计算机、网络服务器等,可以加载并执行该数据传输方法,本公开的实施例对此不作限制。例如,在一些示例中,该计算系统可以包括DMA传输装置和中央处理单元(Central Processing Unit,CPU)或图形处理单元(Graphics Processing Unit,GPU)等具有具有数据处理能力和/或指令执行能力的其它形式的处理单元、存储单元等,以通过运行代码或指令的方式实现本公开实施例提供的数据传输方法。

如图1A所示,该数据传输方法包括步骤S110至步骤S130。

步骤S110:获取第一存储单元和第二存储单元的数据交换信息。

步骤S120:基于数据交换信息从第一存储单元中读取N个第一数据序列中的第n个第一数据序列写入至第一缓存单元,从第二存储单元中读取N个第二数据序列中的第n个第二数据序列写入至第一缓存单元。

步骤S130:从第一缓存单元中将第n个第一数据序列传输至第二存储单元,从第一缓存单元中将第n个第二数据序列传输至第一存储单元。

例如,n为大于等于1且小于等于N的整数,N为大于等于1的整数。例如,通过N次上述操作,完成数据交换信息中配置的所有数据在第一存储单元和第二存储单元之间的交换。

对于步骤S110,例如,数据交换信息包括第一存储单元的数据的第一源起始地址和第一传输数据量以及第二存储单元的数据的第二源起始地址和第二传输数据量。例如,第一传输数据量等于第二传输数据量,例如,第一传输数据量的数据包括N个第一数据序列,分为N次传输,第二传输数据量的数据包括N个第二数据序列,分为N次传输。

图1B为DMA数据交换示意图。例如,如图1B所示,将第一存储单元MemA的数据和第二存储单元MemB的数据进行交换,如果交换的数据量比较大,则会进行多次搬运。图中标记的步骤S1.1、步骤S1.2、步骤S1.3、步骤S1.4为第1轮数据交换,标记的步骤S2.1、步骤S2.2、步骤S2.3、步骤S2.4为第2轮数据交换,接着进行第3轮数据交换,依次到第N轮数据交换,直到所有的数据交换完成。图中ROQ Mem(Reorder Queue Memory)为临时缓存,用于存放第一存储单元MemA和第二存储单元MemB的输出数据,当第一存储单元MemA和第二存储单元MemB每轮数据读取完成后,再将ROQ存放的第一存储单元MemA和第二存储单元MemB数据依次写到第二存储单元MemB和第一存储单元MemA中。比如要将第一存储单元MemA起始地址为5的770Bytes(字节)数据和第二存储单元MemB起始地址为8的770字节数据交换,假如ROQ Mem的容量为1024字节,则每轮数据交换最多为ROQ Mem容量的一半,即为512字节,如果设置为每轮交换的数据量为320字节,在每轮交换中响应于每次读取数据请求返回的数据量为64字节,则只需要配置第一源起始地址5和第二源起始地址8,第一传输数据量和第二传输数据量770字节,每轮交换数据量为320字节(即1个第一数据序列或1个第二数据序列的数据量),就可以由DMA完成所有的数据交换。

例如,每轮交换数据量为320字节,即第一传输数据量770字节的数据包括的3个第一数据序列,分为3次传输,第二传输数据量770字节的数据包括3个第二数据序列,分为3次传输。即,在该示例中,N=3。即第一存储单元的770字节和第二存储单元的770字节分三次实现交换,在每轮交换的过程中,第一存储单元和第二存储单元交换的数据量相同,即第一存储单元和第二存储单元在第一轮、第二轮和第三轮交换的数据量分别为320字节、320字节和130字节。基于每轮交换的数据量可以确定第一传输数据量包括的第一数据序列的个数和传输次数以及第二传输数据量包括的第二数据序列的个数和传输次数。

例如,第n个第一数据序列包括R个第一子数据序列,分为R次传输,第n个第二数据序列包括S个第二子数据序列,分为S次传输;R为大于等于1的整数,S为大于等于1的整数。例如,R和S可以相等也可以不相等,本公开的实施例对此不作限制。

例如,第一子数据序列和第二子数据序列为响应于每次读取数据请求返回的数据。

例如,在一些示例中,各个第一子数据序列和各个第二子数据序列的位宽相同,例如,均为32字节或64字节。

下面以第一存储单元响应于读取数据请求返回的第一子数据序列为例进行说明,第二存储单元响应于读取数据请求返回的第二子数据序列同样适应,本公开的实施例对此不作限制。

下面以第一源起始地址为5(即有效数据的起始地址,例如,为第一数据序列的第一源起始地址),第一传输数据量为90字节,由此在第一存储单元中将被获取的数据占据的地址为5~94,读取数据序列的位宽(即每次读取或写入的数据序列的字节数)为32字节为例进行说明,当然,本公开的实施例对此不作限制。例如,在该示例中,第一传输数据量的数据至少包括3个第一子数据序列,即,在该示例中,R=3。例如,该3个第一子数据序列对应的地址分别为0~31(第一个第一子数据序列),32~63(第二个第一子数据序列)以及64~95(第三个第一子数据序列),将该地址表示为十六进制,分别是00~1F,20~3F以及40~5F,即该3个第一子数据序列中的数据分别存储在第一存储单元的上述3个地址段中。

下面,以该3个第一子数据序列的地址表示为十六进制为例进行介绍,本公开的实施例对此不作限制。

例如,每个第一子数据序列的地址均包括首地址、第一源起始地址、第一缓存起始地址和终止地址。例如,第1个第一子数据序列的首地址为00,终止地址为1F,第二个第一子数据序列的首地址为20,终止地址为3F,第三个第一子数据序列的首地址为40,终止地址为5F。例如,各个第一数据序列的第一源起始地址可以和首地址相同,也可以和首地址不同,这样就存在地址不对齐的问题,本公开的实施例对此不作限制。

需要注意的是,在上述实施例中,为了表示清楚、简洁,以第一数据序列的第一传输数据量为90字节为了进行说明,但在图1B所示的示例中,第一数据序列的第一传输数据量分别为320字节、320字节和130字节,可根据上述示例中的第一子数据序列的表示方式依次类推,在此不再赘述。

例如,标记信息包括读取数据序列的有效起始地址、读取数据序列的数据量以及缓存起始地址。例如,读取数据序列为读取的第一子数据序列或第二子数据序列。例如,在上述示例中,该读取的第1个第一子数据序列的有效起始地址为5,读取的数据序列的数据量即为每次读取数据序列的有效数据量,例如上述示例中有效起始地址为5的时候该值为27,缓存起始地址为各个子数据序列要写入的地址。

需要注意的是,上述示例仅是为了清楚而进行的示例性的说明,本公开的实施例对此不作限制。

例如,可以提供配置获取单元,并通过该配置获取单元获取第一存储单元Mem A和第二存储单元Mem B的数据交换信息;例如,可以通过DMA传输装置中的电路结构实现该配置获取单元,本公开的实施例对此不作限制。

例如,在一些示例中,该数据交换信息可以由DMA传输装置中的配置单元400(如图18所示)配置完成,并发送至配置获取单元,以实现数据交换信息的获取,本公开的实施例对此不作限制。

对于步骤S120,例如,本公开实施例提供的数据传输方法主要是为了减少外部控制器的操作次数,并且尽量提高效率。在本公开实施例提供的数据传输方法中,外部控制器只需要配置一次,DMA传输装置本身就可以完成所有的数据交换。在DMA传输装置内部设计了一个较大容量的缓存ROQ Mem,并且使用了标记存储单元(TagRam),这样就能够高效地读取数据,并且通过移位解决地址对齐的问题。标记存储单元解决了数据的高效读取,实现了顺序发送请求,乱序返回的功能。缓存ROQ Mem先接收返回的读取数据,然后从缓存ROQ Mem里面将乱序存放的数据顺序写到目的地,并且根据地址进行移位,能够实现两个任意起始地址的存储空间的数据交换。

图2为本公开至少一实施例提供的另一种数据传输方法的流程图。例如,如图2所示,在图1A所示的示例的基础上,在步骤S120之前,该数据传输方法该包括步骤S141和步骤S142。

步骤S141:向第一存储单元顺序发送与R个第一子数据序列一一对应的多个第一读取数据请求。

例如,第一读取数据请求包括第一存储单元MemA的有效起始地址和数据量。例如,第一存储单元MemA的第一个第一子数据序列的有效起始地址即外部控制器第一次为DMA传输装置给数据获取单元配置的第一源起始地址5。本公开的实施例对此不作限制。

例如,在向第一存储单元MemA发送第一读取数据请求时,将读取的第一子数据序列的第一有效起始地址和标记存储单元(TagRam)中用于存储该第一读取数据请求对应的第一标记信息的地址发送给第一存储单元MemA,并标记第一读取数据请求的顺序,同时将第一标记信息存储在标记存储单元中。

步骤S142:向第二存储单元顺序发送与S个第二子数据序列一一对应的第二读取数据请求。

例如,第二读取数据请求包括第二存储单元MemB的有效起始地址和数据量。例如,第二存储单元MemB的第一个第二子数据序列的有效起始地址即外部控制器第一次为DMA传输装置给数据获取单元配置的第二源起始地址8。本公开的实施例对此不作限制。

例如,在向第二存储单元MemB发送所述第二读取数据请求时,将读取的第二子数据序列的第二有效起始地址和标记存储单元中用于存储该第二读取数据请求对应的第二标记信息的地址发送给所述第二存储单元MemB,并标记第二读取数据请求的顺序,同时将第二标记信息存储在标记存储单元中。

例如,标记存储单元的地址从0开始按照请求的顺序累加,到达标记存储单元的深度后地址返回到0重新开始。发送给第一存储单元MemA和第二存储单元MemB的信息不需要各个子数据序列的数据量信息,因为第一存储单元MemA和第二存储单元MemB每次返回固定的数据量,比如32字节或者64字节,所以发送的地址是对齐的,即一个地址表示32字节或者64字节。

图3为本公开至少一实施例提供的一种第一个第一子数据序列和第一个第二子数据序列的传输方法的流程图。也就是说,图3为图1A中所示的步骤S120的一些示例的流程图。下面,结合图3对本公开至少一实施例提供的第一个第一子数据序列和第一个第二子数据序列的传输方法进行详细地介绍。例如,在图3所示的示例中,该传输方法包括步骤S1211至步骤S1212。

步骤S1211:在传输第一个第一子数据序列时,仅传输第一个第一子数据序列包括的第x至第X-1位数据。

步骤S1212:在传输第一个第二子数据序列时,仅传输第一个第二子数据序列包括的第y至第Y-1位数据。

例如,x为大于等于0且小于等于X-1的整数,X表示第一个第一子数据序列的位宽,为大于等于1的整数;y为大于等于0且小于等于Y-1的整数,Y表示第一个第二子数据序列的位宽,为大于等于1的整数。

对于步骤S1211,例如,第一源起始地址对应于第一个第一数据序列的第一个第一子数据序列的第x位数据,例如,在上面的示例中,第一源起始地址5对应于第一个第一数据序列的第一个第一子数据序列的第40位数据。

对于步骤S1212,例如,第二源起始地址对应于第一个第二数据序列的第一个第二子数据序列的第y位数据,例如,在上面的示例中,第二源起始地址8对应于第一个第二数据序列的第一个第二子数据序列的第64位数据。

例如,在一轮数据交换的过程中,由于带宽的限制,每次请求的最大传输数据量为32字节或者64字节,如果地址就按照每次最大传输数据量对齐,这样方便操作。例如,如果每次请求的最大传输数据量为64字节,第一存储单元MemA的起始地址为5,则第一次请求的数据量就为64减5,即59字节,这样后面读取第一存储单元MemA的起始地址就对齐了,后面每次请求的数据量为64字节,直到最后一次取完剩下的数据量。

例如,第二存储单元MemB与第一存储单元MemA类似,在此不再赘述。

例如,第一存储单元MemA读取数据请求的数据量达到每轮交换的数据量(即第一数据序列,例如,第一轮的320字节)时,这一轮第一存储单元MemA读取数据的请求发送完成,接下去配置第二存储单元MemB的块数据(即第二数据序列,例如320字节)读取信息,开始第二存储单元MemB的读取请求。读取第二存储单元MemB的数据的起始地址和数据量的配置方法同第一存储单元MemA一样,详见上述步骤的描述。第二存储单元MemB的块数据读取信息配置完成后,发送第二存储单元MemB块数据读取请求,如图2中步骤S142所示,详细过程见步骤S142的说明。

第一存储单元MemA的读取数据请求和第二存储单元MemB的读取数据请求发送完成后,等待数据返回。当有第一存储单元MemA的数据返回或第二存储单元MemB的数据返回后,将返回的数据写入第一缓存单元ROQ M中。

图4为本公开至少一实施例提供的一种数据返回方法的流程图。也就是说,图4为图1A中所示的步骤S120的另一些示例的流程图。下面,结合图4对本公开至少一实施例提供的数据返回方法进行详细地介绍。例如,在图4所示的示例中,该步骤S120还包括步骤S1221至步骤S1223。

步骤S1221:当从第一存储单元中返回第r个第一子数据序列至第一缓存单元时,会同时返回发送第r个第一子数据序列对应的第一读取数据请求时发送给第一存储单元的第一标记信息的地址。

例如,第一标记信息的地址对应的信息包括读取的第一子数据序列的第一有效起始地址、第一子数据序列的数据量以及第一缓存起始地址。

步骤S1222:当从第二存储单元中返回第s个第二子数据序列至第一缓存单元时,会同时返回发送第s个第二子数据序列对应的第二读取数据请求时发送给第二存储单元的第二标记信息的地址。

例如,第二标记信息的地址对应的信息包括读取的第二子数据序列的第二有效起始地址、第二子数据序列的数据量以及第二缓存起始地址。

步骤S1223:根据该第一标记信息的地址从标记存储单元读取对应的第一标记信息,根据该第二标记信息的地址从标记存储单元读取对应的第二标记信息。

例如,r为大于等于1且小于等于R的整数,s为大于等于1且小于等于S的整数。

当数据返回时,会同时返回发送请求时发送给第一存储单元MemA或第二存储单元MemB的标记信息的的地址,根据该地址将标记存储单元中对应地址里面的信息(包括读取数据的有效起始地址、子数据序列的数据量和缓存起始地址)读出来。

图6为本公开至少一实施例提供的另一种数据返回方法的流程图。也就是说,图6为图1A中所示的步骤S120的另一些示例的流程图。下面,结合图6对本公开至少一实施例提供的数据返回方法进行详细地介绍。例如,在图6所示的示例中,该步骤S120还包括步骤S1231至步骤S1232。

步骤S1231:将读取的第r个第一子数据序列中的第p至第P-1位数据从第一有效起始地址处向低位移p位,并写入第二缓存单元,以将第0至第p-1位数据移除。

例如,第一有效起始地址对应于第r个第一子数据序列的第p位数据。

步骤S1232:将读取的第s个第二子数据序列中的第q至第Q-1位数据从第二有效起始地址处向低位移q位,并写入第二缓存单元,以将第0至第q-1位数据移除。

例如,第二有效起始地址对应于所述第s个第二子数据序列的第q位数据。

例如,p为大于等于0且小于等于P-1的整数,P表示第r个第一子数据序列的位宽,为大于等于1的整数;q为大于等于0且小于等于Q-1的整数,Q表示第s个第二子数据序列的位宽,为大于等于1的整数。

例如,返回的数据根据从标记存储单元里面读出的取数据的有效起始地址右移该有效起始地址表示的字节数(例如,有效起始地址为3,那么右边低24位无效(即如图5A所示的地址00、01、02对应的位数),则右移24位),这样就将返回的数据低位无效数据(即如图5A所示的地址00、01、02对应的数据)移掉,数据右对齐,得到如图5B所示的有效数据。接着将有效数据、数据量、缓存起始地址写入第二缓存单元(buffer)。

例如,响应于顺序发送的多个第一读取数据请求从第一存储单元中乱序返回R个第一数据序列至第一缓存单元,同时乱序返回与R个第一数据序列一一对应的第一标记信息的地址。

例如,响应于顺序发送的第二读取数据请求从第二存储单元中乱序返回S个第二数据序列至第一缓存单元,同时乱序返回与S个第二数据序列一一对应的第二标记信息的地址。

图7为本公开至少一实施例提供的另一种数据返回方法的流程图。如图7所示,该步骤S120还包括步骤S151至步骤S152。

例如,在从第一存储单元中乱序返回R个第一数据序列后,该数据传输方法还包括:

步骤S151:将乱序返回的R个第一子数据序列的有效数据、所取的第一子数据序列的数据量以及第一缓存起始地址写入第二缓存单元,并标记第一存储单元响应于第一读取数据请求返回的第一子数据序列的返回顺序。

在从第二存储单元中乱序返回S个第二数据序列之后,数据传输方法还包括:

步骤S152:将乱序返回的S个第二子数据序列的有效数据、读取的第二子数据序列的数据量以及第二缓存起始地址写入第二缓存单元,并标记第二存储单元响应于第二读取数据请求返回的第二子数据序列的返回顺序。

例如,读取数据请求是按照第一存储单元MemA或第二存储单元MemB的地址顺序发送,但是返回的顺序可以是乱序的,通过返回的标记信息的地址来读出标记信息单元里面的数据信息,而该信息包含第一缓存单元的写地址(即缓存起始地址),而该缓存起始地址就是返回数据写入第一缓存单元的地址。

图8为本公开至少一实施例提供的另一种数据返回方法的流程图。也就是说,图8为图1A中所示的步骤S120的另一些示例的流程图。下面,结合图8对本公开至少一实施例提供的数据返回方法进行详细地介绍。例如,在图8所示的示例中,该步骤S120还包括步骤S1241至步骤S1242。

步骤S1241:从第二缓存单元中读取第r个第一子数据序列和第s个第二子数据序列,并将第r个第一子数据序列和第s个第二子数据序列写入至第一缓存单元。

例如,第一缓存起始地址对应第r个第一子数据序列的第t位数据存储地址,第二缓存起始地址对应第s个第二子数据序列的第u位数据存储地址。

步骤S1242:在将第r个第一子数据序列写入至第一缓存单元的过程中,将第r个第一子数据序列的有效数据向高位移t位,以将第r个第一子数据序列的第一有效起始地址处的数据写入第一缓存起始地址处,并从第一缓存起始地址开始依次写入第r个第一子数据序列中的数据。

步骤S1243:在将第s个第二子数据序列写入至第一缓存单元的过程中,将第s个第二子数据序列的有效数据向高位移u位,以将第s个第二子数据序列的第一有效起始地址处的数据写入第二缓存起始地址处,并从第二缓存起始地址开始依次写入第s个第二子数据序列中的数据。

例如,u为大于等于1且小于等于P-1的整数,t为大于等于1且小于等于Q-1的整数。

当第二缓存单元非空时,有效数据、数据量、缓存起始地址会从第二缓存单元读出来,然后将有效数据左移,左移的位数为第二缓存单元输出的缓存起始地址低m(M表示地址宽度,为大于等于1的整数,m表示最大数据量的宽度,为大于等于1小于等于M的整数)位表示的字节数(该地址为写第一缓存单元的有效起始地址,该有效起始地址右边的数据是有效数据,写入的有效数据左移将写入数据右边的数据空出来变为无效,例如,0),这样就将有效数据按照第一缓存单元的地址对齐,写到第一缓存单元的数据就会紧接着上一次的地址进行填写,从而使得第一缓存单元的使用率最高,达到百分之百。

例如,上述缓存起始地址包括第一缓存起始地址和第二缓存起始地址。当表示第一存储单元的缓存时,上述缓存起始地址指代第一缓存起始地址;当表示第二存储单元的缓存时,上述缓存起始地址指代第二缓存起始地址,本公开的实施例对此不作限制。

当第一存储单元MemA和第二存储单元MemB的块数据全部返回,并且写入第一缓存单元后,先将第一缓存单元里面从第一存储单元MemA搬运的块数据写到第二存储单元MemB,然后将第一缓存单元里面从第二缓存单元MemB搬运的块数据写到第一缓存单元MemA,从而实现第一存储单元MemA和第二存储单元MemB的数据交换。

图9为本公开至少一实施例提供的一种数据交换方法的流程图。也就是说,图9为图1A中所示的步骤S130的一些示例的流程图。下面,结合图9对本公开至少一实施例提供的数据交换方法进行详细地介绍。例如,在图9所示的示例中,该步骤S130包括步骤S131至步骤S132。

步骤S131:判断对应于第r个第一子数据序列对应的第一读取数据请求的返回顺序的标记是否有效,如果有效,则从第一缓存单元中读出第r个第一子数据序列。

例如,在发送第r个第一读取数据请求的时候,会将第r个第一读取数据请求的顺序记录下来,当第r个第一子数据序列返回回来的时候该第r个第一读取数据请求的顺序标记会返回回来,然后用记事板将该顺序标记置为有效,由于是乱序返回的,记事板乱序有效,但是在从第一缓存单元读取出来的时候是顺序的,首先检查记事板顺序的第r个第一读取数据请求是否返回,如果没有返回则等待,如果返回了才将第r个第一读取数据请求对应的第一缓存单元中的数据序列读出。例如,在从第一缓存单元中读取第一子数据序列时,顺序判断第1个至第r个第一读取数据请求是否有效,以将第1个至第r个第一子数据序列从第一缓存单元中顺序读取出来。

例如,第一缓存单元的读地址初始情况为0,每次读出数据后将该读地址加上读出的数据量得到下一次读地址。

步骤S132:判断对应于第s个第二子数据序列对应的第二读取数据请求的返回顺序的标记是否有效,如果有效,则从第一缓存单元中读出第s个第二子数据序列。

该步骤S132与步骤S131类似,在此不再赘述。

图10为本公开至少一实施例提供的另一种数据交换方法的流程图。也就是说,图10为图1A中所示的步骤S130的另一些示例的流程图。下面,结合图10对本公开至少一实施例提供的数据交换方法进行详细地介绍。例如,在图10所示的示例中,该步骤S130还包括步骤S133至步骤S134。

步骤S133:将从第一缓存单元中读取的第a个第一子数据序列中的第v至第V-1位数据从第一有效起始地址处向低位移v位,以将第0至第v-1位数据移除,并将第a个第一子数据序列的数据量和移位后的第a个第一子数据序列的有效数据写入第三缓存单元。

例如,从第一缓存单元读出的数据右移读地址低n位表示的字节数(该地址表示有效数据的起始地址),将无效数据移掉(具体移位方法与图5A和图5B类似,在此不再赘述),然后将右移得到的数据输给第三缓存单元。同时写数据量的字节数也输给后面第三缓存单元。

例如,该第三缓存单元为先入先出的缓存单元(Fifo)。

步骤S134:将从第一缓存单元中读取的第b个第二子数据序列中的第w至第W-1位数据从第二有效起始地址处向低位移w位,以将第0至第w-1位数据移除,并将第b个第二子数据序列的数据量和移位后的第b个第二子数据序列的有效数据写入第三缓存单元。

该步骤S134与步骤S133类似,具体介绍可参考步骤S133的介绍,在此不再赘述。

例如,a为大于等于1且小于等于R的整数,b为大于等于1且小于等于S的整数;v为大于等于0小于等于V-1的整数,V表示第a个第一子数据序列的位宽,为大于等于1的整数;w为大于等于0小于等于W-1的整数,W表示第b个第二子数据序列的位宽,为大于等于1的整数。

图11为本公开至少一实施例提供的另一种数据交换方法的流程图。也就是说,图11为图1A中所示的步骤S130的另一些示例的流程图。下面,结合图11对本公开至少一实施例提供的数据交换方法进行详细地介绍。例如,在图11所示的示例中,该步骤S130还包括步骤S135至步骤S136。

步骤S135:初始化第一存储单元的第一数据序列的第一目的写入地址以及第二存储单元的第二数据序列的第二目的写入地址。

例如,第一目的写入地址即第二存储单元中的第二数据序列写入至第一存储单元中的起始地址,第二目的写入地址即第一存储单元中的第一数据序列写入至第二存储单元中的起始地址。

步骤S136:从第三缓存单元读取第n个第一数据序列并移位以写入至第二存储单元的第二目的写入地址,从第三缓存单元读取第n个第二数据序列并移位以写入至第一存储单元的第一目的写入地址。

例如,写入第一存储单元MemA或第二存储单元MemB的地址会先初始化为原始配置的地址,然后数据写出去后,加上写出去的数据量得到新的写地址。

例如,第三缓存单元读出来的数据(包括第一子数据序列和第二子数据序列)会根据写地址的低n位左移(写起始地址(即第一目的写入地址或第二目的写入地址)不为0的时候,写起始地址的低n位表示的地址右边的数据是有效的数据,再写进去的数据左移将右边的数据空出来标记为无效,例如,标记为0,这样就紧接着之前的有效数据接着写入),将数据与写起始地址(目的起始地址)对齐。第三缓存单元读出的数据左移之后N字节数据变为2N字节。当第三缓存单元读有效的时候,会将高N字节数据延时一个时钟得到数据,而最终的输出数据根据有效数据标记信号按字节选择是高N字节还是延时一个时钟的高N字节还是低N字节。将最终输出数据送到第一存储单元MemA或第二存储单元MemB,从而实现了第一存储单元MemA与第二存储单元MemB的数据交换。

直到第一缓存单元里面的数据全部写出去后,第一存储单元MemA与第二存储单元MemB一轮数据交换完成,如果所有的数据都交换完成,则停止工作等待下一次操作,否则开始进行下一轮数据交换,直到所有的数据都交换完成。

图12为本公开至少一实施例提供的一种数据传输方法的系统流程图。图18为本公开至少一实施例提供的一种数据传输装置的示意图。下面结合图12和图18详细说明数据交换的控制过程以及数据处理过程。

图12为具体的控制过程。如图12所示,没有操作的时候整个模块处于空闲状态,DMA传输装置不工作。当需要数据交换的时候,外部控制器会通过配置单元400配置相关信息,触发DMA传输装置开始工作,如图12中步骤S1所示。外部配置信息主要有两个起始地址(例如,第一源起始地址和第二源起始地址)、需要交换的总数据量(例如,第一传输数据量和第二传输数据量)、每轮交换的数据量(例如,每轮交换的数据量为320字节,即将第一传输数据量分为N次传输,将第二传输数据量分为N次传输)。

例如,如图12所示,当DMA传输装置开始工作后,首先根据总的交换数据量和每轮交换的数据量,确定发送给数据读取单元(fetcher)的每轮读取第一存储单元MemA的数据的有效起始地址和数据量,也就是块数据读取信息(即第一数据序列的读取信息),如图12中步骤S(N.1)所示。第1轮的有效起始地址为外部控制器配置的第一存储单元MemA的第一源起始地址,后面的有效起始地址依次为前一次的地址加上每轮读取的数据量;而数据量每次为外部控制器配置的每轮交换的数据量(即第一数据序列的数据量,例如,上面提到的320字节),如果总的数据量(例如,上面提到的770字节)小于每轮交换的数据量则为总的数据量,下一轮总的数据量为上一轮总的数据量减去上一轮发送给数据读取单元的数据量。

当数据读取单元需要的信息配置完成后,数据读取单元开始工作,向第一存储单元MemA发送第一子数据序列对应的读取数据请求,例如,可以叫做第一读取数据请求,如图12中步骤S(N.2)所示。数据读取单元发送的读取数据请求包括第一存储单元MemA的第一有效起始地址和数据量,而第一存储单元MemA的第一有效起始地址第一次为DMA传输装置给数据读取单元配置的地址,即第一源起始地址,后面每次为上一次的第一有效起始地址加上上一次第一读取数据请求读取的数据量,而数据量根据第一存储单元MemA的第一源起始地址确定。由于带宽的限制,每次第一读取数据请求的最大数据量一般为32字节或者64字节,如果第一有效起始地址按照每次最大数据量(即64字节)对齐,这样可以方便操作。如果每次第一读取数据请求的最大数据量为64字节,第一存储单元MemA的第一有效起始地址为5,则第一次第一读取数据请求的数据量就为64减5,即59字节,这样后面读取第一存储单元MemA的第一有效起始地址就对齐了,后面每次第一读取数据请求的数据量为64字节,直到最后一次取完剩下的数据量。DMA传输装置得到数据读取单元发送的第一存储单元MemA的第一有效起始地址和数据量后,将第一有效起始地址开始的高M-m(例如,高x至X-1位)数据和作为标记的第一标记信息的地址发送给第一存储单元MemA,同时将低m位(例如,第一有效起始地址)、数据量和第一缓存起始地址存放到标记存储单元里面。其中,M表示地址宽度,为大于等于1的整数,m表示最大数据量的宽度,为大于等于1小于等于M的整数,2的m次方为最大数据量,比如最大数据量为64字节时,m等于6。

第一存储单元MemA的第一读取数据请求的数据量达到每轮交换的数据量时,这一轮第一存储单元MemA读取数据的第一读取数据请求发送完成,接下去配置第二存储单元MemB的块数据读取信息(即第二数据序列的读取信息),如图12中步骤S(N.3)所示。读取第二存储单元MemB的数据的第二起始地址和数据量的配置方法同第一存储单元MemA的一样,详见步骤步骤S(N.1)说明,在此不再赘述。第二存储单元MemB的块数据读取信息配置完成后,发送第二存储单元MemB的块数据读取请求(即第二读取数据请求),如图12中步骤S(N.4)所示,详细过程见步骤步骤S(N.2)说明,在此不再赘述。

例如,标记存储单元的地址从0开始按照第一读取数据请求或第二读取数据请求的顺序累加,到达标记存储单元的深度后地址返回到0重新开始。发送给第一存储单元MemA和第二存储单元MemB的信息不需要数据量信息,因为第一存储单元MemA和第二存储单元MemB每次返回固定的数据量,比如32字节或者64字节,所以发送的地址是对齐的,一个地址表示至少一个字节。

第一存储单元MemA的第一读取数据请求和第二存储单元MemB的第二读取数据请求发送完成后,等待数据返回。当有第一存储单元MemA的数据返回或第二存储单元MemB的数据返回后,将返回的数据写入第一缓存单元,如图12中步骤S(N.5)、步骤S(N.6)、步骤S(N.7)所示。具体的操作参考图13。

图13为本公开至少一实施例提供的一种数据返回方法的系统流程图。如图13所示,当数据返回时,会同时返回发送第一读取数据请求或第二读取数据请求时发送给第一存储单元MemA或第二存储单元MemB的第一标记信息或第二标记信息的地址,根据该地址将标记存储单元中对应地址里面的信息(包括读取数据的有效起始地址、数据量和缓存起始地址)读出来。返回的数据根据从标记存储单元里面读出的取数据的有效起始地址右移该有效起始地址表示的字节数(比如有效起始地址为3,那么右边低24位无效,则右移24位),这样就将返回的数据低位无效数据移掉,数据右对齐,得到有效数据。接着将有效数据、数据量、缓存起始地址写入第二缓存单元(例如,buffer)。

数据读取单元发出的读取数据请求是按照第一存储单元MemA或第二存储单元MemB的地址顺序发送,但是返回的顺序可以是乱序的,通过返回的标记信息的地址来读出标记存储单元里面的数据信息,而该信息包含第一缓存单元的写地址(即缓存起始地址),而该地址就是返回数据写入第一缓存单元的地址。

当第二缓存单元非空时,有效数据、数据量、缓存起始地址会从第二缓存单元读出来,然后将有效数据左移,左移的位数为第二缓存单元输出的缓存起始地址低m位表示的字节数(该地址为写第一缓存单元的有效起始地址,该有效起始地址右边的数据是有效数据,写入的有效数据左移将写入数据右边的数据空出来变为无效,例如,0),这样就将有效数据按照第一缓存单元的地址对齐,写到第一缓存单元的数据就会紧接着上一次的地址进行填写,从而使得第一缓存单元的使用率最高,达到百分之百。

当MemA和MemB数据全部返回,并且写入ROQ Mem后,先将ROQ Mem里面从MemA搬运的块数据写到MemB,如图3中步骤S(N.8)所示,然后将ROQ Mem里面从MemB搬运的块数据写到MemA,如图3中步骤S(N.9)所示。从ROQ Memy里面读出数据写到MemA或MemB的过程具体见图5B。

当第一存储单元MemA和第二存储单元MemB的块数据全部返回,并且写入第一缓存单元后,先将第一缓存单元里面从第一存储单元MemA搬运的块数据写到第二存储单元MemB,如图12中步骤S(N.8)所示,然后将第一缓存单元里面从第二缓存单元MemB搬运的块数据写到第一缓存单元MemA,如图12中步骤S(N.9)所示。从而实现第一存储单元MemA和第二存储单元MemB的数据交换。从第一缓存单元里面读出数据写到第一存储单元MemA或第二存储单元MemB的过程具体见图14。

图14为本公开至少一实施例提供的一种数据交换方法的系统流程图。如图14所示,在发送读取数据请求的时候,会将读取数据请求顺序记录下来,数据返回回来的时候该读取数据请求的顺序标记会返回回来,然后用记事板将该顺序标记置为有效,由于是乱序返回的,记事板乱序有效,但是在读的时候是顺序的,首先检查记事板顺序的读取数据请求是否返回,如果没有返回则等待,如果返回了才将对应的第一缓存单元里面的数据读出。第一缓存单元的读地址初始情况为0,每次读出数据后将该地址加上读出的数据量得到下一次读地址。

第一缓存单元读出的数据右移读地址低m位表示的字节数(该地址表示有效数据的起始地址),将无效数据移掉,然后将右移得到的数据输给后面的第三缓存单元。同时写数据量的字节数也输给第三缓存单元缓存。

写第一存储单元MemA或第二存储单元MemB的地址会先初始化为原始配置的地址,然后数据写出去后,加上写出去的数据量得到新的写地址。第三缓存单元读出来的数据会根据写地址的低m位左移(当写起始地址不为0的时候,例如写地址的低m位表示该第三缓存单元中写地址右边的数据是有效的数据,将要写进去的数据左移以将要写进去的数据序列的右边的数据空出来标记为无效,这样就紧接着之前的有效数据接着写入),将数据与写地址对齐。第三缓存单元读出的数据左移之后N字节数据变为2N字节。当第三缓存单元读有效的时候,会将高N字节数据延时一个时钟得到数据,而最终的输出数据根据有效数据标记信号按字节选择是高N字节还是延时一个时钟的高N字节还是低N字节。将最终输出数据送到第一存储单元MemA或第二存储单元MemB,从而实现了第一存储单元MemA与第二存储单元MemB的数据交换。

例如,直到第一缓存单元里面的数据全部写出去后,第一存储单元MemA与第二存储单元MemB一轮数据交换完成,如果所有的数据都交换完成,则停止工作等待下一次操作,否则从步骤S(N.1)开始进行下一轮数据交换,直到所有的数据都交换完成。

需要注意的是,在上述数据传输方法中还可以将相应的标记信息直接发送给源数据控制端,从而可以省略标记存储单元。

需要说明的是,在本公开的实施例中,本公开上述各个实施例提供的数据传输方法的流程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行。虽然上文描述的数据传输方法的流程包括特定顺序出现的多个操作,但是应该清楚地了解,多个操作的顺序并不受限制。上文描述的数据传输方法可以执行一次,也可以按照预定条件执行多次。

本公开上述实施例提供的数据传输方法,第一,使用内部缓存并且通过内部控制只需要一次配置就可以实现全部数据交换,提高了处理器带宽;第二,采用了标记存储单元,实现了顺序发送请求,乱序返回的功能,大大降低了等待时间;第三,使用第一缓存单元来解决地址对齐的问题,将读写分开。

图15为本公开至少一实施例提供的一种数据传输装置的示意框图。例如,在图15所示的示例中,该数据传输装置100包括配置获取单元110、数据搬运单元120和数据交换单元130。例如,这些单元可以通过硬件(例如电路)模块等实现,例如,通过DMA传输装置中的电路结构实现,本公开的实施例对此不作限制。以下是实施例与此相同,不再赘述。

例如,在一些示例中,这些单元可以实现为寄存器单元,从而实现存储功能,以下实施例与此相同,不再赘述。例如,在一些示例中,该数据传输装置为DMA传输装置,本公开的实施例对此不作限制。

配置获取单元110,配置为获取第一存储单元和第二存储单元的数据交换信息。例如,数据交换信息包括第一存储单元的数据的第一源起始地址和第一传输数据量以及第二存储单元的数据的第二源起始地址和第二传输数据量,第一传输数据量的数据包括N个第一数据序列,分为N次传输,第二传输数据量的数据包括N个第二数据序列,分为N次传输。例如,该配置获取单元110可以实现步骤S110,其具体实现方法可以参考步骤S110的相关描述,在此不再赘述。

数据搬运单元120,配置为基于数据交换信息从第一存储单元中读取N个第一数据序列中的第n个第一数据序列写入至第一缓存单元,从第二存储单元中读取所述N个第二数据序列中的第n个第二数据序列写入至第一缓存单元。例如,该数据搬运单元120可以实现步骤S120,其具体实现方法可以参考步骤S120的相关描述,在此不再赘述。

数据交换单元130,配置为从第一缓存单元中将第n个第一数据序列传输至第二存储单元,从第一缓存单元中将第n个第二数据序列传输至第一存储单元。例如,该数据交换单元130可以实现步骤S130,其具体实现方法可以参考步骤S130的相关描述,在此不再赘述。

图16为本公开至少一实施例提供的另一种数据传输装置的示意图。如图16所示,该数据搬运单元120包括第一缓存单元121、第二缓存单元122和第三缓存单元123。

例如,第二缓存单元122,配置为存储从第一存储单元返回的第n个第一数据序列以及从第二存储单元返回的第n个第二数据序列。例如,第二缓存单元122可以为缓存器buffer,本公开的实施例对此不作限制,具体介绍可参考上面数据传输方法中的描述,在此不再赘述。

例如,第一缓存单元121,配置为存储从第二缓存单元122返回的第n个第一数据序列以及第n个第二数据序列。例如,第一缓存单元121可以实现为ROQ Mem,本公开的实施例对此不作限制,具体介绍可参考上面数据传输方法中的描述,在此不再赘述。

例如,第三缓存单元123,配置为存储从第一缓存单元121返回的第n个第一数据序列以及第n个第二数据序列。例如,第一缓存单元121可以实现为先入先出的Fifo,本公开的实施例对此不作限制,具体介绍可参考上面数据传输方法中的描述,在此不再赘述。

图17为本公开至少一实施例提供的又一种数据传输装置的示意图。例如,如图17所示,在图15所示的示例的基础上,该数据传输装置100还包括标记存储单元140。下面结合图17对本公开至少一实施例提供的数据传输装置进行详细地介绍。

例如,该标记存储单元140,配置为存储响应于读取数据请求读取的第一子数据序列的第一有效起始地址、第一子数据序列的数据量以及第一缓存起始地址和第二子数据序列的第二有效起始地址、第二子数据序列的数据量以及第二缓存起始地址。例如,例如,第一缓存单元121可以实现为ROQ Mem,本公开的实施例对此不作限制,具体介绍可参考上面数据传输方法中的描述,在此不再赘述。

例如,如图18所示,在图17所示的示例的基础上,该数据传输装置100还可以包括配置单元400、控制器180和数据读取单元190。

例如,配置单元400配置为发送数据交换信息。

控制器180配置为控制数据读取单元190发送读取数据请求,以启动数据交换。

关于图18所示的数据传输装置的具体工作过程可参考图12的描述,在此不再赘述。

通过在数据传输装置中设置标记存储单元、第一缓存单元、第二缓存单元等电路结构,可以实现本公开上述任一实施例提供的数据传输方法。

需要注意的是,在本公开的实施例中,该数据传输装置100可以包括更多或更少的电路或单元,并且各个电路或单元之间的连接关系不受限制,可以根据实际需求而定。各个电路的具体构成方式不受限制,可以根据电路原理由模拟器件构成,也可以由数字芯片构成,或者以其他适用的方式构成。

关于数据传输装置100的技术效果可以参考本公开的实施例中提供的数据传输方法的技术效果,这里不再赘述。

有以下几点需要说明:

(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。

(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。

以上所述仅是本公开的示范性实施方式,而非用于限制本公开的保护范围,本公开的保护范围由所附的权利要求确定。

相关技术
  • 数据传输装置、数据接收装置、数据传输系统和数据传输方法
  • 数据传输装置、数据传输方法以及数据传输装置控制程序
技术分类

06120112356761