具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
请参考图1,其示出了本申请一个实施例提供的DMA系统的结构示意图,该DMA系统可以包括:DMA子系统110和缓存器120,该DMA子系统110与该缓存器120之间的距离小于预定阈值。
预定阈值是一个数值较小的值,这就使得缓存器120与DMA子系统110较为靠近,所以,缓存器120与DMA子系统110之间的传输路径较短,从而可以节省传输延时。
本实施例中,缓存器120用于缓存描述符,该描述符用于指示存储在内存中的数据。
本实施例中,描述符可以包括内存中待传输的数据的源地址、目的地址、数据的大小和下一个描述符的指针。其中,源地址可以是一个地址区间,目的地址也可以是一个地址区间。其中,内存是系统级内存,用于存放大量数据。
可选的,缓存器120中可以存储链表条目,且每个链表条目就是一个描述符。
DMA子系统110用于从缓存器120中读取描述符,根据该描述符对数据进行传输。
本实施例中,DMA子系统110可以从缓存器120中读取一个描述符,从该描述符中读取源地址、目的地址和数据的大小,再从内存的源地址中取出该大小的数据,将该数据传输至DMA子系统110,再将该数据从DMA子系统110传输至内存的目的地址中,再根据该描述符中的指针读取下一个描述符,按照上述流程进行处理,直至处理完所有的描述符后停止。
综上所述,本申请实施例提供的DMA系统,通过在DMA系统中设置一个缓存器,这样,可以将描述符缓存到该缓存器中,由于该缓存器与DMA子系统之间的距离小于预定阈值,所以,DMA子系统读取描述符的延时较小,从而可以提高数据传输效率。
由于缓存器设置在DMA系统中,所以,DMA子系统可以通过与缓冲器之间的专用传输接口来获取描述符,而无需通过总线向内存获取描述符,这样,获取描述符时不影响DMA子系统通过总线与内存之间的数据传输,从而可以提高数据传输效率。
请参考图2,下面对DMA子系统110的结构进行介绍。
DMA子系统110可以包括链表分配器111、N条通道112和仲裁器113,且N条通道112分别与链表分配器111和仲裁器113相连,N为大于等于2的整数。
本实施例中,链表分配器111用于将缓存器120中的多个描述符分配给不同的通道112。
在分配描述符之前,链表分配器111还可以接收中央处理器发送的配置指令,该配置指令是中央处理器将描述符写入缓存器120后生成的,且配置指令中包含缓存器120中第一个描述符的地址和通道数N。其中,中央处理器是包括ARM(Advanced RISC Machines)、MIPS(Million Instructions Per Second)、MCU(Microcontroller Unit)、X86 这样的CPU内核。
在一个可选的实现方式中,中央处理器可以通过AXI(Advanced eXtensibleInterface,高级可扩展接口)总线将描述符写入缓存器120中,再通过APB(AdvancedPeripheral Bus,高级外围总线)接口向链表分配器111发送配置指令。其中,AXI总线是SOC系统(System-on-a-Chip,片上系统)中的标准AXI总线,符合AMBA(AdvancedMicrocontroller Bus Architecture,高级微控制器总线体系)协议。APB总线是SOC中的标准APB总线,符合AMBA协议。
链表分配器111可以根据第一个描述符的地址读取第一个描述符,将该第一个描述符分配给第一个处于空闲状态的通道112。对于之后的第i(i≥2)个描述符,链表分配器111根据第i-1个描述符中的指针确定第i个描述符的地址,再根据该地址读取第i个描述符,将该第i个描述符分配给第i个处于空闲状态的通道112,直至所有通道112都分配到描述符后停止。后续,当某一个通道112处理完描述符后,可以向链表分配器111指示自身处于空闲状态(即释放通道),之后,链表分配器111会继续将缓存器120中未分配的一个描述符分配该该通道。
本实施例中,由于N个通道112可以并行且互不干扰地获取描述符,相比于相关技术中通过总线串行获取描述符来说,可以提高描述符的获取效率,从而提高数据传输效率。相关技术中的DMA系统需要通过总线串行获取描述符,这样,DMA系统同一时间只能处理一个描述符,从而导致DMA系统中处于空闲状态的多个通道112无法被利用,从而影响通道112和总线的利用率,而本实施例中可以通过并行处理多个描述符来提高通道112和总线的利用率。
缓存器120中缓存的描述符可能相关,也可能不相关。其中,相关的描述符是指一个描述符中的源地址与另一个描述符中的目的地址相重叠,或者,一个描述符中的目的地址与另一个描述符中的目的地址相重叠。
请参考图3,图3中描述符(即链表条目)0的目的地址0与描述符1的源地址1重叠。如果先处理描述符0,该描述符0指示的数据0被传输到目的地址0,由于目的地址0与源地址1重叠,所以,源地址1中重叠区域的数据会被源地址0中的数据覆盖,被覆盖后源地址1中的数据才是处理描述符1时真正要传输的数据。若同时处理描述符0和描述符1,那么,处理描述符1时源地址1中的数据还未被覆盖,此时传输源地址1中的数据是错误的,从而导致数据传输出错的问题。同理,图3中描述符1的目的地址与描述符2的源地址也重叠,若同时处理描述符1和描述符2,也会导致数据传输出错的问题。可见,相关技术中的多个通道112单独获取描述符,也就无法判断这些描述符之间是否相关,会导致相关的描述符在不同的通道112中被同时处理,从而使得数据传输出错的问题。为了解决上述问题,相关的描述符应该要按照先后顺序被处理。
本实施例中,链表分配器111可以将相关的描述符分配到同一条通道112中,从而使相关的描述符被顺序处理,保证数据传输的准确性。请参考图4,链表分配器111可以顺序读取缓存器120中的第i个描述符,i为正整数;检测第i个描述符是否与排列在前的描述符相关;若第i个描述符与排列在前的描述符相关,则在通道112完成对排列在前的描述符的解析后,将第i个描述符分配给通道112;若第i个描述符与排列在前的描述符不相关,则检测是否存在处于空闲状态的通道112,若存在处于空闲状态的通道112,则将第i个描述符分配给通道112,若不存在处于空闲状态的通道112,则在出现处于空闲状态的通道112后将第i个描述符分配给通道112;将i更新为i+1,继续执行顺序读取缓存器120中的第i个描述符的步骤,直至分配完所有的描述符后停止。
为了便于理解,下面以两个实例为例对描述符的分配进行说明。
请参考图5,假设存在描述符(即链表条目)0-4,描述符0-4之间互不相关,且DMA子系统110中包含3条通道112,则中央处理器可以将描述符0-4写入缓存器120中,再向链表分配器111发送配置指令,链表分配器111根据配置指令依次获取描述符,分析这些描述符之间的相关性,最终将描述符0分配给通道0,将描述符1分配给通道1,将描述符2分配给通道3,描述符3和4等待任意通道空闲后再分配。
请参考图6,假设存在描述符(即链表条目)0-4,描述符0、3和4之间相关,且DMA子系统110中包含3条通道112,则中央处理器可以将描述符0-4写入缓存器120中,再向链表分配器111发送配置指令,链表分配器111根据配置指令依次获取描述符,分析这些描述符之间的相关性,最终将描述符0分配给通道0,将描述符1分配给通道1,将描述符2分配给通道3,描述符3等待通道0空闲后再分配,描述符4等待通道0空闲后再分配。
本实施例中,N条通道112中的每条通道112用于对分配到的描述符进行解析,根据解析结果生成总线传输指令,将该总线传输指令发送给仲裁器113,该总线传输指令用于指示传输数据。仲裁器113用于对所有总线传输指令进行仲裁,并分时段分配总线执行所有总线传输指令中的一个总线传输指令。
需要说明的是,当待传输的数据量较大时,通道112可以生成根据一个描述符生成多个总线传输指令,每个总线传输指令用于指示传输待传输的数据中的一个数据段。这样,仲裁器113可以分时段从所有的总线传输指令中选择一个总线传输指令,再通过总线路径选择器控制总线执行该总线传输指令。其中,总线路径选择器用于给AXI总线分时段分配路径,任意一个AXI总线都可以通过总线路径选择器到达其他AXI总线或者APB总线。
比如,仲裁器113先控制总线传输通道0所需求的一个数据段,再控制总线传输通道1所需求的一个数据段,再控制总线传输通道2所需求的一个数据段,再控制总线传输通道0所需求的另一个数据段,依此类推。这样,仲裁器113可以同时响应多个通道的总线传输指令,相比于现有技术中串行响应一个通道的总线传输指令来说,可以提高总线的利用率。
本实施例中,在DMA子系统110附近增加专门用于存储描述符的缓存器120,DMA子系统110可以超低延时获取描述符,并且,中央处理器可以通过外部总线访问写入描述符。另外,DMA子系统110内部闲置的通道112可以并行互不干扰独立执行,一一对应的处理多个描述符,这样DMA系统可以满负荷进行数据传输,避免了总线不必要的等待延时。另外,DMA子系统110内部增加相关性判断机制,这样,不相关的描述符就可以随时在DMA子系统110内部并发执行,从而提高描述符的处理效率。
请参考图7,其示出了本申请一个实施例提供的数据传输方法的方法流程图,该数据传输方法可以应用于上述DMA系统中。该数据传输方法,可以包括:
步骤701,通过DMA子系统从缓存器中读取描述符,该描述符用于指示存储在内存中的数据。
本实施例中,描述符可以包括内存中待传输的数据的源地址、目的地址、数据的大小和下一个描述符的指针。其中,源地址可以是一个地址区间,目的地址也可以是一个地址区间。其中,内存是系统级内存,用于存放大量数据。
步骤702,通过DMA子系统根据描述符对数据进行传输。
本实施例中,DMA子系统可以从缓存器中读取一个描述符,从该描述符中读取源地址、目的地址和数据的大小,再从内存的源地址中取出该大小的数据,将该数据传输至DMA子系统,再将该数据从DMA子系统传输至内存的目的地址中,再根据该描述符中的指针读取下一个描述符,按照上述流程进行处理,直至处理完所有的描述符后停止。
其中,当DMA子系统包括链表分配器、N条通道和仲裁器时,步骤702可以包括以下几个子步骤:
步骤7021,通过链表分配器将缓存器中的多个描述符分配给不同的通道。
在分配描述符之前,链表分配器还可以接收中央处理器发送的配置指令,该配置指令是中央处理器将描述符写入缓存器后生成的,且配置指令中包含缓存器中第一个描述符的地址和通道数N。
链表分配器可以根据第一个描述符的地址读取第一个描述符,将该第一个描述符分配给第一个处于空闲状态的通道。对于之后的第i(i≥2)个描述符,链表分配器根据第i-1个描述符中的指针确定第i个描述符的地址,再根据该地址读取第i个描述符,将该第i个描述符分配给第i个处于空闲状态的通道,直至所有通道都分配到描述符后停止。后续,当某一个通道处理完描述符后,可以向链表分配器指示自身处于空闲状态(即释放通道),之后,链表分配器会继续将缓存器中未分配的一个描述符分配该该通道。
本实施例中,由于N个通道可以并行且互不干扰地获取描述符,相比于相关技术中通过总线串行获取描述符来说,可以提高描述符的获取效率,从而提高数据传输效率。
缓存器中缓存的描述符可能相关,也可能不相关。其中,相关的描述符是指一个描述符中的源地址与另一个描述符中的目的地址相重叠,或者,一个描述符中的目的地址与另一个描述符中的目的地址相重叠。
本实施例中,链表分配器可以将相关的描述符分配到同一条通道中,从而使相关的描述符被顺序处理,保证数据传输的准确性。此时,链表分配器可以顺序读取缓存器中的第i个描述符,i为正整数;检测第i个描述符是否与排列在前的描述符相关;若第i个描述符与排列在前的描述符相关,则在通道完成对排列在前的描述符的解析后,将第i个描述符分配给通道;若第i个描述符与排列在前的描述符不相关,则检测是否存在处于空闲状态的通道,若存在处于空闲状态的通道,则将第i个描述符分配给通道,若不存在处于空闲状态的通道,则在出现处于空闲状态的通道后将第i个描述符分配给通道;将i更新为i+1,继续执行顺序读取缓存器中的第i个描述符的步骤,直至分配完所有的描述符后停止。
步骤7022,通过N条通道中的每条通道对分配到的描述符进行解析,根据解析结果生成总线传输指令,将总线传输指令发送给仲裁器,总线传输指令用于指示传输数据。
步骤7023,通过仲裁器对所有总线传输指令进行仲裁,并分时段分配总线执行所有总线传输指令中的一个总线传输指令。
需要说明的是,当待传输的数据量较大时,通道可以生成根据一个描述符生成多个总线传输指令,每个总线传输指令用于指示传输待传输的数据中的一个数据段。这样,仲裁器可以分时段从所有的总线传输指令中选择一个总线传输指令,再通过总线路径选择器控制总线执行该总线传输指令。
比如,仲裁器先控制总线传输通道0所需求的一个数据段,再控制总线传输通道1所需求的一个数据段,再控制总线传输通道2所需求的一个数据段,再控制总线传输通道0所需求的另一个数据段,依此类推。
本实施例中,在DMA子系统附近增加专门用于存储描述符的缓存器,DMA子系统可以超低延时获取描述符,并且,中央处理器可以通过外部总线访问写入描述符。另外,DMA子系统内部闲置的通道可以并行互不干扰独立执行,一一对应的处理多个描述符,这样DMA系统可以满负荷进行数据传输,避免了总线不必要的等待延时。另外,DMA子系统内部增加相关性判断机制,这样,不相关的描述符就可以随时在DMA子系统内部并发执行,从而提高描述符的处理效率。
综上所述,本申请实施例提供的数据传输方法,通过在DMA系统中设置一个缓存器,这样,可以将描述符缓存到该缓存器中,由于该缓存器与DMA子系统之间的距离小于预定阈值,所以,DMA子系统读取描述符的延时较小,从而可以提高数据传输效率。
由于缓存器设置在DMA系统中,所以,DMA子系统可以通过与缓冲器之间的专用传输接口来获取描述符,而无需通过总线向内存获取描述符,这样,获取描述符时不影响DMA子系统通过总线与内存之间的数据传输,从而可以提高数据传输效率。
需要说明的是:上述实施例提供的DMA系统在进行数据传输时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将DMA系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的DMA系统与数据传输方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。