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

文档序号:851594 发布日期:2021-03-16 浏览:10次 >En<

阅读说明:本技术 数据传输方法和数据传输装置 (Data transmission method and data transmission device ) 是由 沈祥 卢一帆 李凯 于 2020-11-27 设计创作,主要内容包括:一种数据传输方法和数据传输装置。该数据传输方法包括:获取第一存储单元和第二存储单元的数据交换信息,数据交换信息包括第一存储单元的数据的第一源起始地址和第一传输数据量以及第二存储单元的数据的第二源起始地址和第二传输数据量,第一传输数据量的数据包括N个第一数据序列,第二传输数据量的数据包括M个第二数据序列;基于数据交换信息,从第一存储单元中读取N个第一数据序列至第一缓存单元,从第二存储单元中读取M个第二数据序列至第二缓存单元,在从第一存储单元中依次读取N个第一数据序列的过程中,从第二存储单元中依次读取M个第二数据序列;N和M为大于等于1的整数。该数据传输方法可以提高数据交换的效率。(A data transmission method and a data transmission device. The data transmission method comprises the following steps: acquiring data exchange information of a first storage unit and a second storage unit, wherein the data exchange information comprises a first source starting address and a first transmission data volume of data of the first storage unit and a second source starting address and a second transmission data volume of data of the second storage unit, the data of the first transmission data volume comprises N first data sequences, and the data of the second transmission data volume comprises M second data sequences; based on the data exchange information, reading N first data sequences from a first storage unit to a first cache unit, reading M second data sequences from a second storage unit to a second cache unit, and sequentially reading M second data sequences from the second storage unit in the process of sequentially reading N first data sequences from the first storage unit; n and M are integers of 1 or more. The data transmission method can improve the efficiency of data exchange.)

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

技术领域

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

背景技术

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

发明内容

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

例如,在本公开至少一实施例提供的数据传输方法中,基于所述数据交换信息,从所述第一存储单元中读取所述N个第一数据序列至第一缓存单元,从所述第二存储单元中读取所述M个第二数据序列至所述第二缓存单元,包括:判断是否有从所述第一存储单元中读取所述N个第一数据序列的第一读取数据请求;如果是,则发送所述第一读取数据请求至所述第一存储单元以从所述第一存储单元读取与所述第一读取数据请求对应的第一数据序列;如果否,则判断是否有从所述第二存储单元中读取所述M个第二数据序列的第二读取数据请求;如果是,则发送所述第二读取数据请求至所述第二存储单元以从所述第二存储单元读取与所述第二读取数据请求对应的第二数据序列;如果否,则继续判断是否有从所述第一存储单元中读取所述N个第一数据序列的第一读取数据请求,直至所述N个第一数据序列和所述M个第二数据序列全部读取完成。

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

例如,本公开至少一实施例提供的数据传输方法,还包括:在从所述第一存储单元中读取所述N个第一数据序列至第一缓存单元,从所述第二存储单元中读取所述M个第二数据序列至所述第二缓存单元过程中,从所述第一缓存单元中将所述N个第一数据序列依次写入至所述第二存储单元,从所述第二缓存单元中将所述M个第二数据序列依次写入至所述第一存储单元。

例如,在本公开至少一实施例提供的数据传输方法中,从所述第一缓存单元中将所述N个第一数据序列依次写入至所述第二存储单元,从所述第二缓存单元中将所述M个第二数据序列依次写入至所述第一存储单元,包括:判断是否有所述第一存储单元的第一写数据请求;如果是,则发送所述第一存储单元的第一写数据请求,并响应于所述第一写数据请求将所述第二数据序列中与所述第一写数据请求对应的第m个第二数据序列写入所述第一存储单元;如果否,则判断是否有所述第二存储单元的第二写数据请求;如果是,则发送所述第二存储单元的第二写数据请求,并响应于所述第二写数据请求将所述第一数据序列中与所述第二写数据请求对应的第n个第一数据序列写入所述第二存储单元;如果否,则判断是否有所述第一存储单元的第一写取数据请求,直至所述第一存储单元的第一写数据请求和所述第二存储单元的第二写数据请求全部发送完成;n为大于等于1且小于等于N的整数,m为大于等于1且小于等于M的整数。

例如,在本公开至少一实施例提供的数据传输方法中,当所述第一缓存单元和所述第二缓存单元中顺序存储的数据量均大于一次写操作的数据量时,从所述第一缓存单元中读取所述第n个第一数据序列以写入所述第二存储单元,从所述第二缓存单元中读取所述第m个第二数据序列以写入所述第一存储单元。

例如,在本公开至少一实施例提供的数据传输方法中,当所述第一缓存单元和所述第二缓存单元中顺序存储的数据量均大于一次写操作的数据量时,从所述第一缓存单元中读取所述第n个第一数据序列以写入所述第二存储单元,从所述第二缓存单元中读取所述第m个第二数据序列以写入所述第一存储单元,包括:获取所述第一缓存单元中顺序返回的第一累加数据量以及所述第二缓存单元中顺序返回的第二累加数据量;判断所述第n个第一数据序列对应的第一读取数据请求的返回顺序的标记和所述第m个第二数据序列对应的第二读取数据请求的返回顺序是否有效;如果所述标记有效且所述第一累加数据量和所述第二累加数据量均大于一次写操作的数据量,则从所述第一缓存单元中读取所述第n个第一数据序列,从所述第二缓存单元中读取所述第m个第二数据序列。

例如,在本公开至少一实施例提供的数据传输方法中,从所述第一缓存单元中读取所述第n个第一数据序列,从所述第二缓存单元中读取所述第m个第二数据序列后,在所述第一累加数据量中减去所述第n个第一数据序列的数据量;在所述第二累加数据量中减去所述第m个第二数据序列的数据量。

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

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

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

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

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

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

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

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

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

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

例如,本公开至少一实施例提供的数据的数据传输装置还包括:数据交换单元,配置为在从所述第一存储单元中读取所述N个第一数据序列至第一缓存单元,从所述第二存储单元中读取所述M个第二数据序列至所述第二缓存单元过程中,从所述第一缓存单元中将所述N个第一数据序列依次写入至所述第二存储单元,从所述第二缓存单元中将所述M个第二数据序列依次写入至所述第一存储单元。

例如,在本公开至少一实施例提供的数据的数据传输装置中,所述数据搬运单元包括:所述第一缓存单元、所述第二缓存单元、第三缓存单元、第四缓存单元、第五缓存单元和第六缓存单元;所述第三缓存单元,配置为存储从所述第一存储单元返回的第n个第一数据序列;所述第四缓存单元,配置为存储从所述第二存储单元返回的第m个第二数据序列;所述第一缓存单元,配置为存储从所述第三缓存单元返回的第n个第一数据序列;所述第二缓存单元,配置为存储从所述第四缓存单元返回的第m个第二数据序列;所述第五缓存单元,配置为存储从所述第一缓存单元返回的第n个第一数据序列;所述第六缓存单元,配置为存储从所述第二缓存单元返回的第m个第二数据序列,n为大于等于1且小于等于N的整数,m为大于等于1且小于等于M的整数。

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

附图说明

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

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

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

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

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

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

图4为本公开至少一实施例提供的一种第一存储单元和第二存储单元的读取数据仲裁的流程图;

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

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

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

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

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

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

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

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

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

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

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

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

图16为本公开至少一实施例提供的一种第一存储单元和第二存储单元的写数据仲裁的流程图;

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

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

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

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

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

具体实施方式

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

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

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

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

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

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

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

本公开实施例提供的数据传输方法可以通过一次配置完成全部数据的交换,支持第一存储单元的数据搬运和第二存储单元的数据搬运同时进行,从而极大地提高了大量数据交换的效率。

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

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

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

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

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

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

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

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

对于步骤S110,例如,数据交换信息包括第一存储单元的数据的第一源起始地址和第一传输数据量以及第二存储单元的数据的第二源起始地址和第二传输数据量。例如,第一传输数据量等于第二传输数据量,例如,第一传输数据量的数据包括N个第一数据序列,分为N次传输,第二传输数据量的数据包括M个第二数据序列,分为M次传输。例如,N和M可以相等,也可以不相等,本公开的实施例对此不作限制。

下面以第一传输数据量和第二传输数据量均等于770字节,第一源起始地址为5,第二源起始地址为8为例进行介绍,本公开的实施例对此不作限制。

图1B为DMA数据交换示意图。例如,如图1B所示,将第一存储单元MemA的数据和第二存储单元MemB的数据进行交换。

图1B中第一缓存单元RQM(Reorder Queue Memory)A和第二缓存单元RQMB例如为临时缓存,存放第一存储单元MemA和第二存储单元MemB的输出数据,通过控制器180的控制,将第一存储单元MemA中的数据搬运到第二存储单元MemB中,同时将第二存储单元MemB中的数据搬运到第一存储单元MemA中,从而完成数据交换。

例如,如图1B所示,数据交换的过程大致分为5个步骤:

在步骤S1.A和步骤S1.B中,向第一存储单元MemA和第二存储单元MemA发送读取数据请求;

在步骤S2.A和步骤S2.B中,第一存储单元MemA和第二存储单元MemA返回数据;

在步骤S3.A和步骤S3.B中,第一存储单元MemA和第二存储单元MemA返回的数据写到第一缓存单元RQMA和第二缓存单元RQMB中;

在步骤S4.A和步骤S4.B中,从第一缓存单元RQMA和第二缓存单元RQMB中读出数据;

在步骤S5.A和步骤S5.B中,将数据写到第二存储单元MemB和第一存储单元MemA中。

例如,如图1B所示,使用第一缓存单元RQMA和第二缓存单元RQMB,通过控制,可以顺序发送读取数据请求,乱序返回数据,并且可以是任意地址的数据交换,提高了数据交换的效率。比如要将第一存储单元MemA的第一源起始地址为5(地址从0开始,一个地址表示1字节)的770字节(即第一传输数据量)的数据和第二存储单元MemB第二源起始地址为8(地址从0开始,一个地址表示1字节)的770字节(即第二传输数据量)的数据交换,假如第一缓存单元RQMA和第二缓存单元RQMB的容量分别为512字节,受硬件带宽的限制,假设每次读取的数据量最大为64字节,则对第一存储单元MemA每次发送的读请求数据量依次为59字节(64字节减去5字节)、64字节、64字节、……、7字节,即第一传输数据量(770字节)包括的多个第一数据序列的数据量分别为59字节、64字节、64字节、……、7字节,而对第二存储单元MemB每次发送的读请求数据量依次为56字节(64字节减去8字节)、64字节、64字节、……、10字节,即第二传输数据量(770字节)包括的多个第二数据序列的数据量分别为56字节、64字节、64字节、……、10字节,在写数据的时候,对第一存储单元MemA每次发送的写请求数据量依次为59字节(64字节减去5字节)、64字节、64字节、……、7字节,而对第二存储单元MemB每次发送的写请求数据量依次为56字节(64字节s减去8字节)、64字节、64字节、……、10字节,当第一存储单元MemA和第二存储单元MemB都写完成后,整个DMA就完成了所有的数据交换。

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

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

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

为了表示清楚、简洁,下面以第一源起始地址为5(即有效数据的起始地址,例如,为第一个第一数据序列的第一源起始地址),第一传输数据量为90字节,由此在第一存储单元中将被获取的数据占据的地址为5~94,读取数据序列的位宽(即每次读取或写入的第一数据序列的字节数)为32字节为例进行说明,当然,本公开的实施例对此不作限制。例如,在该示例中,第一传输数据量的数据至少包括3个第一数据序列,即,在该示例中,N=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所示的示例中,第一数据序列的第一传输数据量为770字节,可根据上述示例中的第一数据序列的表示方式类推,在此不再赘述。

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

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

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

对于步骤S120,例如,本设计主要是通过仲裁实现了对第一存储单元MemA和第二存储单元MemB的同时读和同时写,并且使用第一缓存单元RQMA和第二缓存单元RQMB为临时缓存,读写也可以同时进行,从而大大提高了数据交换的效率。在DMA内部设计了两个容量有限的缓存:第一缓存单元RQMA和第二缓存单元RQMB,并且使用了第一标记存储单元TagRamA和第二标记存储单元TagRamB,这样就能够高效地读取数据,并且通过移位解决地址对齐的问题。第一标记存储单元TagRamA和第二标记存储单元TagRamB解决了数据的高效读取,实现了顺序发送请求,乱序返回的功能。第一缓存单元RQMA和第二缓存单元RQMB先接收返回的读取数据,然后从第一缓存单元RQMA和第二缓存单元RQMB里面将乱序存放的数据顺序写到目的地,在写数据的时候不需要第一存储单元MemA和第二存储单元MemB的数据全部返回,只需要返回数据达到一次写操作,并且保证写到第一存储单元MemA和第二存储单元MemB的数据不会覆盖掉第一存储单元MemA和第二存储单元MemB中需要交换但是还没有读出的数据,并且根据地址进行移位,能够实现两个任意源起始地址的存储单元的数据交换。

图1C为本公开至少一实施例提供的一种数据传输方法的系统流程图。例如,图1C所示的系统流程图为图21中的控制器180的具体控制过程。下面结合图1C至图16对本公开至少一实施例提供的数据传输方法进行详细地介绍。

例如,如图1C所示,没有操作的时候整个系统(例如,图21所示的系统)处于空闲状态,DMA不工作。当需要数据交换的时候,外部控制器会配置相关信息,触发DMA开始工作。DMA配置第一存储单元MemA和第二存储单元MemB数据读取信息,主要包括第一源起始地址、第二源起始地址、需要交换的总数据量等。

当第一数据读取单元191(如图21所示)和第二数据读取单元192(如图21所示)需要的信息配置完成后,第一数据读取单元191和第二数据读取单元192开始工作,第一数据读取单元191发送MemA读取数据请求(即第一存储单元MemA的第一读取数据请求),第二数据读取单元192发送MemB读取数据请求(即第二存储单元MemB的第二读取数据请求)。

图2为本公开至少一实施例提供的另一种数据传输方法的流程图。即图2示出了响应于第一读取数据请求和第二读取数据请求进行数据传输的流程图。例如,如图2所示,在图1A所示的示例的基础上,在步骤S120之前,该数据传输方法该包括步骤S141和步骤S142。

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

例如,第一数据读取单元191向第一存储单元顺序发送与N个第一数据序列一一对应的多个第一读取数据请求。

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

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

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

例如,第二数据读取单元192向第二存储单元顺序发送与M个第二数据序列一一对应的第二读取数据请求。

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

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

例如,第一标记存储单元和第二标记存储单元的地址从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位数据。

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

例如,第二数据读取单元192发送第二存储单元MemB的第二读取数据请求的过程同第一数据读取单元191发送第一存储单元MemA的第一读取数据请求的过程一致类似,在此不再赘述。并且,在第一数据读取单元191在工作的同时第二数据读取单元192也在工作。

由于受到硬件限制,对第一存储单元MemA和第二存储单元MemB的读取数据通道只有一个,也就是在读取第一存储单元MemA的数据的时候,不能读取第二存储单元MemB的数据,那对第一存储单元MemA和第二存储单元MemB的读访问需要仲裁,来决定是读取第一存储单元MemA的数据还是读取第二存储单元MemB的数据,仲裁如图21中的第二部分part2。

图4为本公开至少一实施例提供的一种第一存储单元和第二存储单元的读取数据仲裁的流程图。也就是说,图4为图1A中所示的步骤S120的一些示例的流程图。下面,结合图4对本公开至少一实施例提供的第一存储单元和第二存储单元的读取数据仲裁方法进行详细地介绍。例如,在图4所示的示例中,该传输方法包括步骤S1250至步骤S1255。

步骤S1250:空闲状态。

例如,在DMA没有工作或者第一存储单元MemA的第一读取数据请求和第二存储单元MemB的第二读取数据请求全部发送完成(即步骤S1255)的时候,仲裁处于空闲状态。

步骤S1251:判断是否有从第一存储单元中读取N个第一数据序列的第一读取数据请求;如果是,则执行步骤S1252;如果否,则执行步骤S1253。

例如,判断第一存储单元MemA是否有第一读取数据请求。

步骤S1252:发送第一读取数据请求至第一存储单元以从第一存储单元读取与第一读取数据请求对应的第一数据序列。

例如,当有第一存储单元MemA的第一读取数据请求的时候,发送1次第一存储单元的MemA第一读取数据请求,以在后续过程中响应于该第一读取数据请求从第一存储单元读取与第一读取数据请求对应的第一数据序列。当执行完步骤S1252时,继续执行步骤S1253。

步骤S1253:判断是否有从第二存储单元中读取M个第二数据序列的第二读取数据请求,如果是,则执行步骤S1254;如果否,则执行步骤S1255。

例如,当没有第一存储单元MemA的第一读取数据请求或执行完步骤S1252后,判断是否有第二存储单元MemB的第二读取数据请求。

步骤S1254:发送第二读取数据请求至第二存储单元以从第二存储单元读取与第二读取数据请求对应的第二数据序列。

例如,当有第二存储单元MemB的第二读取数据请求的时候,则发送1次第二存储单元MemB的第二读取数据请求,以在后续过程中响应于该第二读取数据请求从第二存储单元读取与第二读取数据请求对应的第二数据序列。当执行完步骤S1254时,继续执行步骤S1255。

步骤S1255:判断第一存储单元和第二存储单元中的读取数据请求是否全部完成。

例如,如果没有第二存储单元MemB的第二读取数据请求或执行完步骤S1254后,继续判断是否有第一存储单元MemA的第一读取数据请求,如果有,则发送1次第一存储单元MemA的第一读取数据请求(即执行步骤S1252),如果没有则判断是否有第二存储单元MemB的第二读取数据请求,在判断是否有第二存储单元MemB的第二读取数据请求的时候,如果没有则继续判断是否有第一存储单元MemA的第一读取数据请求,如此循环判断是否有第一存储单元MemA的第一读取数据请求和是否有第二存储单元MemB的第二读取数据请求,直到完成所有的第一存储单元MemA和第二存储单元MemB的读取数据请求(即步骤S1255),则返回空闲状态,即返回步骤S1250。

在本公开的实施例中,通过上述仲裁可以实现第一存储单元和第二存储单元同时读的功能,从而可以提高数据交换的效率。

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

图5为本公开至少一实施例提供的一种数据返回的流程图。下面结合图5至图10对本公开至少一实施例提供的数据返回方法进行详细地介绍。

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

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

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

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

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

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

例如,n为大于等于1且小于等于N的整数,m为大于等于1且小于等于M的整数。

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

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

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

例如,若p等于0则不需要移位。

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

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

例如,若q等于0则不需要移位。

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

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

例如,下面以第一存储单元MemA的数据返回为例进行说明,第二存储单元MemB的数据返回方法与第一存储单元MemA的数据返回方法类似,不再赘述。

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

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

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

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

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

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

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

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

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

例如,第二数据序列的乱序返回方法与步骤S151中的第一数据序列的乱序返回方法类似,在此不再赘述。

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

步骤S1241:从第三缓存单元中读取第n个第一数据序列并将第n个第一数据序列写入至第一缓存单元,从第四缓存单元中读取第m个第二数据序列并将第m个第二数据序列写入至第二缓存单元。

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

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

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

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

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

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

图11为本公开至少一实施例提供的另一中数据传输方法的流程图。例如,如图11所示,在图1A所示的示例的基础上,该数据传输方法还包括步骤S130。

步骤S130:从第一缓存单元中将N个第一数据序列依次写入至第二存储单元,从第二缓存单元中将M个第二数据序列依次写入至第一存储单元。

例如,在从第一存储单元中读取N个第一数据序列至第一缓存单元RQMA,从第二存储单元中读取M个第二数据序列至第二缓存单元RQMB过程中,实现上述步骤S130从而实现了对第一存储单元和第二存储单元的同时读和同时写。

例如,当第一缓存单元和第二缓存单元中顺序存储的数据量均大于一次写操作的数据量时,从第一缓存单元中读取第n个第一数据序列以写入第二存储单元,从第二缓存单元中读取第m个第二数据序列以写入第一存储单元。

例如,在发送N个第一读取数据请求和M个第二读取数据请求的时候,会将N个第一读取数据请求和M个第二读取数据请求的顺序记录下来,数据返回回来的时候该N个第一读取数据请求和M个第二读取数据请求的顺序标记会返回回来,然后用记事板将该顺序标记置为有效,由于是乱序返回的,记事板乱序有效,但是在从第一缓存单元RQMA和第二缓存单元RQMB中读取第一数据序列和第二数据序列的时候是顺序的。并且第一缓存单元RQMA和第二缓存单元RQMB里面顺序存放的数据量要同时大于一次写操作的数据量,才能对第一缓存单元RQMA和第二缓存单元RQMB进行读操作。

图12为步骤S130的一个示例的流程图。例如,在图12所示的示例中,该步骤S130包括步骤S161至步骤S163。

步骤S161:获取第一缓存单元中顺序返回的第一累加数据量以及第二缓存单元中顺序返回的第二累加数据量。

例如,第一累加数据量和第二累加数据量为第一缓存单元RQMA和第二缓存单元RQMB中分别存储的数据量。

步骤S162:判断第n个第一数据序列对应的第一读取数据请求的返回顺序的标记和第m个第二数据序列对应的第二读取数据请求的返回顺序是否有效。

例如,首先检查记事板顺序的读取数据请求(第一读取数据请求或第二读取数据请求)是否返回,如果没有返回则等待,如果返回了则将该次顺序返回的数据有效的数据量累加从而得到第一累加数据量或第二累加数据量,然后判断第一缓存单元RQMA和第二缓存单元RQMB里面顺序累加的数据量是否都大于一次写操作的数据量。

步骤S163:如果标记有效且第一累加数据量和第二累加数据量均大于一次写操作的数据量,则从第一缓存单元中读取第n个第一数据序列,从第二缓存单元中读取第m个第二数据序列。

例如,从第一缓存单元中读取第n个第一数据序列,从第二缓存单元中读取第m个第二数据序列后,在第一累加数据量中减去第n个第一数据序列的数据量;在第二累加数据量中减去第m个第二数据序列的数据量。

具体地,例如,如果标记有效且第一累加数据量和第二累加数据量均大于一次写操作的数据量,才对第一缓存单元RQMA和第二缓存单元RQMB进行一次读数据操作,同时将累加数据量减去该次读出的有效数据量,如此进行下一次读取数据判断。第一缓存单元RQMA和第二缓存单元RQMB的读地址初始情况为0,每次读出数据后将该地址加上读出的数据量得到下一次读地址。

例如,当第一缓存单元RQMA和第二缓存单元RQMB满足读取条件时,将里面的数据读出,即图21中的第四部分part4,以第一缓存单元RQMA为例,读出后的数据处理过程如图13所示。

图13为本公开至少一实施例提供的另一种数据处理方法的流程图。下面结合图13至图15对本公开至少一实施例提供的数据交换方法进行详细地介绍。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在发送写第二存储单元MemB的第二写数据请求的同时,也有可能发送写第一存储单元MemA的第一写数据请求,而写数据通道只有一个,则需要仲裁发送写第二存储单元MemB的请求(即第二写数据请求)还是写第一存储单元MemA的请求(即第一写数据请求),如图21中的第五部分part5,具体过程如下图16所示。

图16为本公开至少一实施例提供的一种第一存储单元和第二存储单元的写数据仲裁的流程图。也就是说,图16为图1A中所示的步骤S120的一些示例的流程图。下面,结合图16对本公开至少一实施例提供的第一存储单元和第二存储单元的写数据仲裁方法进行详细地介绍。例如,在图16所示的示例中,该传输方法包括步骤S1350至步骤S1355。

步骤S1350:空闲状态。

例如,在DMA没有工作或者第一存储单元MemA的第一写数据请求和第二存储单元MemB的第二写数据请求全部发送完成(即步骤S1355)的时候,仲裁处于空闲状态。

步骤S1351:判断是否有第一存储单元的第一写数据请求;如果是,则执行步骤S1352;如果否,则执行步骤S1353。

例如,判断第一存储单元MemA是否有第一写数据请求。

步骤S1352:发送第一存储单元的第一写数据请求,并响应于第一写数据请求将第二数据序列中与第一写数据请求对应的第m个第二数据序列写入第一存储单元。

例如,当有第一存储单元MemA的数据写请求(即第一写数据请求)的时候,发送1次第一存储单元的MemA写数据请求,以在后续过程中响应于该写数据请求将与第一写数据请求对应的第二数据序列写入第一存储单元。当执行完步骤S1352时,继续执行步骤S1353。

步骤S1353:判断是否有第二存储单元的第二写数据请求,如果是,则执行步骤S1354;如果否,则执行步骤S1355。

例如,当没有第一存储单元MemA的第一写数据请求或执行完步骤S1352后,判断是否有第二存储单元MemB的第二写数据请求。

步骤S1354:发送第二存储单元的第二写数据请求,并响应于第二写数据请求将第一数据序列中与第二写数据请求对应的第n个第一数据序列写入第二存储单元。

例如,当有第二存储单元MemB的第二写数据请求的时候,则发送1次第二存储单元MemB的第二写数据请求,以在后续过程中响应于该第二写数据请求将与第二写数据请求对应的第一数据序列写入第二存储单元。当执行完步骤S1354时,继续执行步骤S1355。

步骤S1355:判断第一存储单元和第二存储单元中的写数据请求是否全部完成。

例如,如果没有第二存储单元MemB的第二写数据请求或执行完步骤S1354后,继续判断是否有第一存储单元MemA的第一写数据请求,如果有,则发送1次第一存储单元MemA的第一写数据请求(即执行步骤S1352),如果没有则判断是否有第二存储单元MemB的第二写数据请求,在判断是否有第二存储单元MemB的第二写数据请求的时候,如果没有则继续判断是否有第一存储单元MemA的第一写数据请求,如此循环判断是否有第一存储单元MemA的第一写数据请求和是否有第二存储单元MemB的第二写数据请求,直到完成所有的第一存储单元MemA和第二存储单元MemB的写数据请求(即步骤S1355),则返回空闲状态,即返回步骤S1350。

直到第一缓存单元RQMA和第二缓存单元RQMB里面的数据全部写出去后,第一存储单元MemA与第二存储单元MemB数据交换完成,从而实现了第一存储单元MemA与第二存储MemB的数据交换。

在本公开的实施例中,通过上述仲裁可以实现第一存储单元和第二存储单元同时读和写的功能,从而可以提高数据交换的效率。

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

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

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

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

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

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

数据搬运单元120,配置为基于数据交换信息,从第一存储单元中读取N个第一数据序列至第一缓存单元,从第二存储单元中读取M个第二数据序列至第二缓存单元。例如,该数据搬运单元120可以实现步骤S120,其具体实现方法可以参考步骤S120的相关描述,在此不再赘述。例如,通过图4中所示的仲裁方法实现在从第一存储单元中依次读取N个第一数据序列的过程中,从第二存储单元中依次读取M个第二数据序列,从而可以实现第一存储单元和第二存储单元的同时读,从而大大提高了数据交换的效率。

图18为本公开至少一实施例提供的另一种数据传输装置的示意图。例如,如图18所示,在图17所示的示例的基础上,该数据传输装置100还包括数据交换单元130。

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

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

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

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

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

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

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

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

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

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

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

图21为本公开至少一实施例提供的以中数据传输系统的示意图。例如,如图21所示,在图21所示的示例的基础上,该数据传输装置100还可以包括配置单元400、控制器180、第一数据读取单元191、第二数据读取单元192、读仲裁单元201和写仲裁单元202。

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

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

例如,读仲裁单元201可以实现上述图4所示的仲裁过程,具体仲裁方法可参考图4的介绍,在此不再赘述。

例如,写仲裁单元202可以实现上述图16所示的仲裁过程,具体仲裁方法可参考图16的介绍,在此不再赘述。

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

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

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

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

有以下几点需要说明:

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

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

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

40页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:配置信息解析方法和装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类