Dma控制器及直接内存存取控制方法

文档序号:6402676阅读:422来源:国知局
专利名称:Dma控制器及直接内存存取控制方法
技术领域
本发明涉及DMA技术,尤其涉及一种DMA控制器及直接内存存取控制方法。
背景技术
直接内存存取(Direct Memory Access,DMA)是现代计算机的重要技术特色,其允许不同速度的硬件装置相互通信,而并不会造成CPU的大量负载。DMA操作将数据从一个地址空间复制到另外一个地址空间,当CPU初始化该传输动作后,传输动作本身是由DMA控制器来实行和完成的,典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。这样的操作并没有让处理器工作拖延,CPU反而可以被重新安排去处理其他的工作。DMA传输对于高效能嵌入式系统、算法和网络系统都是很重要的。现有技术中常规的DMA控制器只是能完成简单的从一个地址到另一个地址指定长度的数据搬运工作。但是,在一些特殊应用场合,常规的DMA控制器很难实现例如数据块拆分、数据块重组、数据结构重排等功能,由CPU来完成这些工作的话会大量浪费CPU资源。

发明内容
本发明要解决的技术问题是提供一种DMA控制器及直接内存存取控制方法,能够扩展DMA控制器的灵活性和应用范围,降低在搬运负载数据结构时CPU的负担。为解决上述技术问题,本发明提供了一种DMA控制器,包括:换行间隔设定模块,用于确定存储在源存储器内的数据块的每一行包含的字节数,作为换行间隔;行内操作单元数量设定模块,用于确定该数据块的每一行包含的操作单元个数,作为行内操作单元数量,所述操作单元包括一个或多个连续的字节;行内起始位置设定模块,用于确定该数据块的每一行中首个操作单元的起始位置,作为行内起始位置;操作单元总数设定模块,用于确定该数据块内包含的操作单元的总数,作为操作单元总数;操作单元突发长度设定模块,用于确定所述操作单元包含的字节数,作为操作单元突发长度;操作单元间隔步长设定模块,用于确定同一行内相邻操作单元的起始位置之间的间隔,作为操作单元间隔步长;数据读写模块,以所述换行间隔、行内操作单元数量、行内起始位置、操作单元总数、操作单元突发长度和操作单元间隔步长为读写参数,读取该源存储器内的数据块包含的多个操作单元并将其写入至DMA写通道。根据本发明的一个实施例,该DMA控制器还包括:操作单元重用次数设定模块,用于确定该数据块内每一操作单元在读写时的重用次数,作为操作单元重用次数,所述数据读写模块采用的读写参数包括该操作单元重用次数,所述数据读写模块根据该操作单元重用次数的指示,将读取的每一操作单元重复写入至所述DMA写通道。根据本发明的一个实施例,该DMA控制器还包括:操作单元有效性设定模块,用于维持操作单元有效性分布图,该操作单元有效性分布图指示该数据块中每一操作单元是否有效,所述数据读写模块仅对有效的操作单元进行读取和写入。根据本发明的一个实施例,该DMA控制器还包括:连续数据抽样模块,控制所述操作单元突发长度设定模块和操作单元间隔步长设定模块将所述操作单元突发长度和操作单元间隔步长设置为相等,以实现连续数据抽样。根据本发明的一个实施例,该DMA控制器还包括:不连续数据抽样模块,控制所述操作单元突发长度设定模块和操作单元间隔步长设定模块将所述操作单元间隔步长设置为大于所述操作单元突发长度,以实现不连续数据抽样。根据本发明的一个实施例,该DMA控制器还包括:交叠数据抽样模块,控制所述操作单元突发长度设定模块和操作单元间隔步长设定模块将所述操作单元间隔步长设置为小于所述操作单元突发长度,以实现交叠数据抽样。本发明还提供了一种直接内存存取控制方法,包括:确定存储在源存储器内的数据块的每一行包含的字节数,作为换行间隔;确定该数据块的每一行包含的操作单元个数,作为行内操作单元数量,所述操作单元包括一个或多个连续的字节;确定该数据块的每一行中首个操作单元的起始位置,作为行内起始位置;确定该数据块内包含的操作单元的总数,作为操作单元总数;确定所述操作单元包含的字节数,作为操作单元突发长度;确定同一行内相邻操作单元的起始位置之间的间隔,作为操作单元间隔步长;以所述换行间隔、行内操作单元数量、行内起始位置、操作单元总数、操作单元突发长度和操作单元间隔步长为读写参数,读取该源存储器内的数据块包含的多个操作单元并将其写入至DMA写通道。根据本发明的一个实施例,该控制方法还包括:确定该数据块内每一操作单元在读写时的重用次数,作为操作单元重用次数,所述读写参数还包括该操作单元重用次数,在对所述数据块包括的操作单元进行读写时,根据该操作单元重用次数的指示,将读取的每一操作单元重复写入至所述DMA写通道。根据本发明的一个实施例,该控制方法还包括:维持操作单元有效性分布图,该操作单元有效性分布图指示该数据块中每一操作单元是否有效,在对所述数据块包括的操作单元进行读写时,仅对有效的操作单元进行读取和写入。根据本发明的一个实施例,该控制方法还包括:将所述操作单元突发长度和操作单元间隔步长设置为相等,以实现连续数据抽样。根据本发明的一个实施例,该控制方法还包括:将所述操作单元间隔步长设置为大于所述操作单元突发长度,以实现不连续数据抽样。根据本发明的一个实施例,该控制方法还包括:将所述操作单元间隔步长设置为小于所述操作单元突发长度,以实现交叠数据抽样。与现有技术相比,本发明具有以下优点:本发明实施例的DMA控制器根据换行间隔、行内操作单元数量、行内起始位置、操作单元总数、操作单元突发长度、操作单元间隔步长等多个读写参数进行数据的搬运,大大扩展了 DMA控制器的灵活性和应用范围,能够针对多种复杂数据结构进行传输,可以实现例如数据抽样、数据重用、有效数据搬运等功能,有利于降低CPU在搬运负载数据结构时的负担,从而大幅度提升整体系统的效率。


图1是本发明实施例的直接内存存取控制方法的流程示意图;图2是本发明第一实施例的数据块及其中的操作单元的结构示意图;图3是本发明第二实施例的数据块及其中的操作单元的结构示意图;图4是本发明第三实施例的数据块及其中的操作单元的结构示意图;图5是本发明第四实施例的数据块及其中的操作单元的结构示意图;图6是本发明第五实施例的数据块及其中的操作单元的结构示意图;图7是本发明第五实施例的操作单元有效性分布图的结构示意图;图8是本发明实施例的DMA控制器的结构示意图。
具体实施例方式下面结合具体实施例和附图对本发明作进一步说明,但不应以此限制本发明的保护范围。参考图1,本实施例的直接内存存取控制方法包括以下步骤:步骤S11,确定存储在源存储器内的数据块的每一行包含的字节数,作为换行间隔;步骤S12,确定该数据块的每一行包含的操作单元个数,作为行内操作单元数量,所述操作单元包括一个或多个连续的字节;步骤S13,确定该数据块的每一行中首个操作单元的起始位置,作为行内起始位置;步骤S14,确定该数据块内包含的操作单元的总数,作为操作单元总数;步骤S15,确定所述操作单元包含的字节数,作为操作单元突发长度;步骤S16,确定同一行内相邻操作单元的起始位置之间的间隔,作为操作单元间隔步长;步骤S17,以所述换行间隔、行内操作单元数量、行内起始位置、操作单元总数、操作单元突发长度和操作单元间隔步长为读写参数,读取该源存储器内的数据块包含的多个操作单元并将其写入至DMA写通道。对于某些应用领域,例如视频应用领域而言,因为在很多时候数据并不是完全连续的,因此需要采用行的概念。在行与行之间通常存在一些无用的数据,因此需要跳过这部分数据进行换行操作。因此,本实施例中引入了换行间隔line_pitch和行内操作单元数量line_active这两个参数,其中换行间隔line_pitch表示源存储器内(例如物理内存)的数据块的每一行包含的字节数,也即实际换行的字节宽度;行内操作单元数量line_actiVe表示每一行中包含的操作单元个数。进一步而言,每次启动DMA操作必然会涉及此次DMA操作何时结束,现有技术通常会以数据块的大小作为衡量标准,也即搬运完成指定字节数的数据后结束此次DMA操作。但是,实际上根据具体应用的不同,相应的算法也不相同,算法在每次计算过程中对数据的需求也并不相同,某些算法的计算过程可能仅需要一个字节,而有些算法的计算过程可能需要几个甚至更多个字节进行处理。因此,以一次计算操作需要的数据量为单位来计数应当更加合理,即DMA操作的计数并非以字节数作为衡量标准,而是以一次计算操作所需要的操作单元的总数(其通常也是硬件模块在一次计算操作中的执行次数)来计数,本实施例中将其记为操作单元总数opt_unm。其中,每一操作单元包括一个或多个连续的字节。另外,本实施例中采用行内起始位置dma_start来标记每一行中第一个操作单元的位置。对于一个操作单元实际包含的字节数,本实施例中记为操作单元突发长度opt_burst_length0另外,对于相邻操作单元之间的间隔,本实施例中记为操作单元间隔步长data_step,其具体指的是同一行内相邻操作单元的起始位置之间的间隔。对于连续数据的DMA搬运传输,操作单元间隔步长data_step和操作单元突发长度opt_burst_length是相同的。在需要抽样或者拆分数据时,可以设定不同的操作单元间隔步长data_step来实现。此外,在某些具体应用领域,需要将操作单元内的数据复制重复多份,因此本实施例引入了操作单元重用次数reusejimes,用于指示每一才做单元的重复次数。在默认情况下,操作单元重用次数reuse_times设置为I。进一步而言,DMA操作通常是对数据作整块的搬运,但是实际上搬运的数据中可能只有部分操作单元中的数据是有用的。因此,本实施例还维持操作单元有效性分布图,例如可以在特定的内存空间存放该操作单元有效性分布图,用于指示整个数据块中的各个操作单元是否有效。在进行DMA操作时,DMA控制器读取参考该操作单元有效性分布图,仅对有效的操作单元进行DMA搬运操作,而无效的操作单元则可以直接跳过。在有效的操作单元所占比例较低的情况下,采用此方式可以节省大量的总线资源。更加具体而言,将当前操作单元的计数记为opt_cnt,将当前操作单元的起始地址记为opt_addr,则当前操作的地址可以采用如下公式来表示:opt_addr=dma_start+(取整(opt_cnt/line_active)) X line_pitch+(取整((取余(opt_cnt/line_active)) /reuse_times)) Xdata_step。通过调整上述参数,可以实现数据抽样(例如连续数据抽样、不连续数据抽样、交叠数据抽样等)、数据重用、有效数据搬运等多种功能。需要说明的是,上述参数不仅在从源存储器读取数据时作用于读通道,还可以同时作用于DMA读通道和DMA写通道,其中DMA读通道和DMA写通道的相应参数可以相互独立,也即二者之间可以存在差异,结合多个DMA读写通道的配合,就可以实现各种更加复杂的功能,例如数据合并、拆分等。下面参考具体实施例进行详细说明。参考图2,其中采用0-31标注的连续小方块代表连续存储空间中的每一个字节数据,下方采用optl-opt6标注的块代表每一次DMA操作传输的数据,也即操作单元。在图2所示的第一实施例中,每一行包含16个字节,因此换行间隔line_pitch=16 ;行内首个操作单元是从第3个字节开始,因此行内起始位置dma_start=3,相应的,第二行的首个操作单元的起始地址就是dma_s t art+line_pitch=19;每一行内执行的DMA操作次数为3,也即行内操作单元数量line_active=3 ;每一个操作单元包含4个连续字节,也即操作单元突发长度opt_burst_length=4 ;相邻操作单元之间的字节间隔是4个字节,也即操作单元间隔步长data_step=4 ;数据块内包含的操作单元的总数为6,也即操作单元总数opt_unm=6。通过以上参数,可以得到图2所示的多个操作单元optl_opt6,其中每个操作单元包含连续的4个字节,各个操作单元彼此连续。在进行DMA操作时,可以将多个操作单元optl-opt6从源存储器中读出,然后写入至DMA写通道内。由此可见,由于引入了行和操作单元的概念,因此就能够顺利地在以16个字节为行的数据块内屏蔽掉每行最前的3个字节和最后的I个字节,实现了对行内连续数据的抽样。连续数据抽样操作例如可以用于图像处理领域。图像处理操作存在数据行的概念,当需要提取图像中的特定矩形区域数据时,就需要用到行操作的概念,可以通过控制即行内操作单元数量line_active等参数,实现一行(其长度为换行间隔line_pitch)内部分数据的抽样,使得抽样所得数据被DMA传输。参考图3,图3所示的第二实施例与图2所示的第一实施例类似,其中,换行间隔line_pitch=16,行内起始位置dma_start=3,行内操作单元数量line_active=3,操作单元突发长度opt_burst_length=3,操作单元间隔步长data_step=4,操作单元总数opt_unm=6ο由于操作单元间隔步长data_step大于操作单元突发长度opt_burst_length,使得各个操作单元不连续,从而可以实现行内不连续数据抽样。此外,数据抽样的DMA操作配合多个通道的DMA操作,就可以非常方便地实现数据的拆分操作。不连续数据抽样或者说是间隔数据抽样例如可以应用于图像处理中的图像缩小操作,对图像做间隔抽样可以减小数据量从而实现图像的缩小。参考图4,图4所示的第三实施例与图2所示的第一实施例类似,其中,换行间隔line_pitch=16,行内起始位置dma_start=3,行内操作单元数量line_active=4,操作单元突发长度opt_burst_length=4,操作单元间隔步长data_step=2,操作单元总数opt_unm=8ο由于操作单元间隔步长data_step小于操作单元突发长度opt_burst_length,使得各个操作单元彼此交叠,从而可以实现数据交叠的DMA操作,也就是实现交叠数据的抽样。参考图5,图5所示的第四实施例中,换行间隔line_pitch=16,行内起始位置dma_start=3,行内操作单元数量line_active=4,操作单元突发长度opt_burst_length=4,操作单元间隔步长data_step=4,操作单元总数opt_unm=8,操作单元重用次数reuse_times=2。由于操作单元重用次数reuse_times设定为2,因此在进行DMA搬运操作时,每一个读取的操作单元都被重复2次传递至DMA写通道内,从而实现了数据的重用。数据重用例如可以用于图像处理中的图像放大操作,对数据进行重用可以将重用的数据插入原始数据中,从而实现图像的放大。参考图6和图7,图6和图7所示的第五实施例中,换行间隔line_pitch=16,行内起始位置dma_start=3,行内操作单元数量line_active=3,操作单元突发长度opt_burst_length=4,操作单元间隔步长data_step=4,操作单元总数opt_unm=6。如图7所示,第五实施例中维持了操作单元有效性分布图,其记录有各个操作单元的有效性。DMA控制器在实际DMA数据传输通道的基础上增加一个有效性DMA读通道,在进行DMA搬运操作时,该有效性DMA读通道可以根据读取的操作单元有效性分布图,判断数据块中的各个操作单元是否有效,从而进行对应的DMA搬运操作。其中,无效的操作单元(图7中用O标出)将被跳过而不进行DMA搬运操作,仅对有效的操作单元(图7中用I标出)进行DMA搬运操作。通过操作单元有效性分布图,能够实现操作单元的选择性搬运,或者说实现了有效数据的搬运。在无效操作单元较多的情况下,利用操作单元有效性分布图的方式可以节省很多DMA操作对总线的吞吐。由上述多个实施例可见,本发明的方案可以非常方便地实现一些较为高级复杂的DMA操作,同时利用本发明的方案再结合多个通道的DMA读操作和写操作,就可以实现更加丰富的DMA应用,例如数据抽样、数据重用、有效数据搬运等。上述操作可以应用于图像缩小、放大等图像处理操作,另外通过对各个参数的配置还可以实现更多复杂的图像算法,例如图像卷积等。参考图8,本实施例还提供了一种DMA控制器31,包括:换行间隔设定模块311、行内操作单元数量设定模块312、行内起始位置设定模块313、操作单元总数设定模块314、操作单元突发长度设定模块315、操作单元间隔步长设定模块316、操作单元重用次数设定模块317、操作单元有效性设定模块318、数据读写模块319。其中,换行间隔设定模块311确定存储在源存储器32内的数据块的每一行包含的字节数,作为换行间隔line_pitch ;行内操作单元数量设定模块312确定该数据块的每一行包含的操作单元个数,作为行内操作单元数量line_active ;行内起始位置设定模块313确定该数据块的每一行中首个操作单元的起始位置,作为行内起始位置dma_start ;操作单元总数设定模块314确定该数据块内包含的操作单元的总数,作为操作单元总数opt_unm=6 ;操作单元突发长度设定模块315确定操作单元包含的字节数,作为操作单元突发长度opt_burst_length ;操作单元间隔步长设定模块316确定同一行内相邻操作单元的起始位置之间的间隔,作为操作单元间隔步长data_step ;操作单元重用次数设定模块317确定该数据块内每一操作单元在读写时的重用次数,作为操作单元重用次数reuse_times ;操作单元有效性设定模块318维持操作单元有效性分布图,该操作单元有效性分布图指示该数据块中每一操作单元是否有效。数据读写模块319以换行间隔line_pitch、行内操作单元数量line_active、行内起始位置dma_start、操作单元总数opt_unm、操作单元突发长度opt_burst_length和操作单元间隔步长data_step、操作单元重用次数reuse_times为读写参数,读取该源存储器32内的数据块包含的多个操作单元并将其写入至DMA写通道,例如可以进一步写入至目的存储器33中。另外,数据读写模块319依据操作单元有效性分布图的指示,仅对有效的操作单元进行读取和写入。进一步而言,该DMA控制器31还可以包括连续数据抽样模块,对操作单元突发长度设定模块315和操作单元间隔步长设定模块316进行控制,将操作单元突发长度opt_burst_length和操作单元间隔步长data_step设置为相等,从而实现连续数据抽样。此外,该DMA控制器31还可以包括不连续数据抽样模块,对操作单元突发长度设定模块315和操作单元间隔步长设定模块316进行控制,将操作单元间隔步长data_step设置为大于操作单元突发长度opt_burst_length,从而实现不连续数据抽样。另外,该DMA控制器31还可以包括交叠数据抽样模块,对操作单元突发长度设定模块315和操作单元间隔步长设定模块316进行控制,将操作单元间隔步长data_step设置为小于操作单元突发长度opt_burst_length,从而实现交叠数据抽样。关于该DMA控制器的更多详细信息,请参见前述先前实施例中直接内存存取控制方法的相关描述。本发明虽然以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以做出可能的变动和修改,因此本发明的保护范围应当以本发明权利要求所界定的范围为准。
权利要求
1.一种DMA控制器,其特征在于,包括: 换行间隔设定模块,用于确定存储在源存储器内的数据块的每一行包含的字节数,作为换行间隔; 行内操作单元数量设定模块,用于确定该数据块的每一行包含的操作单元个数,作为行内操作单元数量,所述操作单元包括一个或多个连续的字节; 行内起始位置设定模块,用于确定该数据块的每一行中首个操作单元的起始位置,作为行内起始位置; 操作单元总数设定模块,用于确定该数据块内包含的操作单元的总数,作为操作单元总数; 操作单元突发长度设定模块,用于确定所述操作单元包含的字节数,作为操作单元突发长度; 操作单元间隔步长设定模块,用于确定同一行内相邻操作单元的起始位置之间的间隔,作为操作单兀间隔步长; 数据读写模块,以所述换行间隔、行内操作单元数量、行内起始位置、操作单元总数、操作单元突发长度和操作单元间隔步长为读写参数,读取该源存储器内的数据块包含的多个操作单元并将其写入至DMA写通道。
2.根据权利要求1所述的DMA控制器,其特征在于,还包括: 操作单元重用次数设定模块,用于确定该数据块内每一操作单元在读写时的重用次数,作为操作单元重用次数,所述数据读写模块采用的读写参数包括该操作单元重用次数,所述数据读写模块根据该操作单元重用次数的指示,将读取的每一操作单元重复写入至所述DMA写通道。
3.根据权利要求1所述的DMA控制器,其特征在于,还包括: 操作单元有效性设定模块,用于维持操作单元有效性分布图,该操作单元有效性分布图指示该数据块中每一操作单元是否有效,所述数据读写模块仅对有效的操作单元进行读取和与入。
4.根据权利要求1所述的DMA控制器,其特征在于,还包括: 连续数据抽样模块,控制所述操作单元突发长度设定模块和操作单元间隔步长设定模块将所述操作单元突发长度和操作单元间隔步长设置为相等,以实现连续数据抽样。
5.根据权利要求1所述的DMA控制器,其特征在于,还包括: 不连续数据抽样模块,控制所述操作单元突发长度设定模块和操作单元间隔步长设定模块将所述操作单元间隔步长设置为大于所述操作单元突发长度,以实现不连续数据抽样。
6.根据权利要求1所述的DMA控制器,其特征在于,还包括: 交叠数据抽样模块,控制所述操作单元突发长度设定模块和操作单元间隔步长设定模块将所述操作单元间隔步长设置为小于所述操作单元突发长度,以实现交叠数据抽样。
7.一种直接内存存取控制方法,其特征在于,包括: 确定存储在源存储器内的数据块的每一行包含的字节数,作为换行间隔; 确定该数据块的每一行包含的操作单元个数,作为行内操作单元数量,所述操作单元包括一个或多个连续的字节;确定该数据块的每一行中首个操作单元的起始位置,作为行内起始位置; 确定该数据块内包含的操作单元的总数,作为操作单元总数; 确定所述操作单元包含的字节数,作为操作单元突发长度; 确定同一行内相邻操作单元的起始位置之间的间隔,作为操作单元间隔步长; 以所述换行间隔、行内操作单元数量、行内起始位置、操作单元总数、操作单元突发长度和操作单元间隔步长为读写参数,读取该源存储器内的数据块包含的多个操作单元并将其写入至DMA写通道。
8.根据权利要求7所述的直接内存存取控制方法,其特征在于,还包括:确定该数据块内每一操作单元在读写时的重用次数,作为操作单元重用次数,所述读写参数还包括该操作单元重用次数,在对所述数据块包括的操作单元进行读写时,根据该操作单元重用次数的指示,将读取的每一操作单元重复写入至所述DMA写通道。
9.根据权利要求7所述的直接内存存取控制方法,其特征在于,还包括:维持操作单元有效性分布图,该操作单元有效性分布图指示该数据块中每一操作单元是否有效,在对所述数据块包括的操作单元进行读写时,仅对有效的操作单元进行读取和写入。
10.根据权利要求7所述的直接内存存取控制方法,其特征在于,还包括:将所述操作单元突发长度和操作单元间隔步长设置为相等,以实现连续数据抽样。
11.根据权利要求7所述的直接内存存取控制方法,其特征在于,还包括:将所述操作单元间隔步长设置为大于所述操作单元突发长度,以实现不连续数据抽样。
12.根据权利要求7所述的直接内存存取控制方法,其特征在于,还包括:将所述操作单元间隔步长设置为 小于所述操作单元突发长度,以实现交叠数据抽样。
全文摘要
本发明提供了一种DMA控制器及直接内存存取控制方法,该DMA控制器包括换行间隔设定模块,确定换行间隔;行内操作单元数量设定模块,确定行内操作单元数量;行内起始位置设定模块,确定行内起始位置;操作单元总数设定模块,确定操作单元总数;操作单元突发长度设定模块,确定操作单元突发长度;操作单元间隔步长设定模块,确定操作单元间隔步长;数据读写模块,以换行间隔、行内操作单元数量、行内起始位置、操作单元总数、操作单元突发长度和操作单元间隔步长为读写参数,读取该源存储器内的数据块包含的多个操作单元并将其写入至DMA写通道。本发明能够扩展DMA控制器的灵活性和应用范围,降低在搬运负载数据结构时CPU的负担。
文档编号G06F13/28GK103207847SQ201310155789
公开日2013年7月17日 申请日期2013年4月27日 优先权日2013年4月27日
发明者赵光焕, 胡红旗, 刘君敏, 胡志卷 申请人:杭州士兰微电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1