首页 / 可动态重构的DMA阵列

可动态重构的DMA阵列有效专利 发明

技术领域

[0001] 本发明属于磁盘阵列领域,特别涉及一种可动态重构的DMA阵列。

相关背景技术

[0002] 在多种芯片开发设计的过程中,对于数据流的处理往往是一个非常棘手的问题。为了降低CPU在数据流的调度和搬移上占用的过多时间,DMA应运而生,帮助CPU进行数据流调度和搬移,从而释放CPU时间,使得CPU专注于其他事务处理。但DMA的调度和控制依然是一个无法回避的难题。
[0003] 通常DMA的工作方式主要有两种:一种为普通DMA模式,即DMA在预先配置的控制下,通过软件或硬件触发之后开始工作,在给定配置模式下的操作执行完毕之后结束;另一种为链表DMA模式(通常也叫Scatter‑Gather DMA或Descriptor Based DMA或Linked List DMA),工作方式由预先配置的操作描述符链组成,首先获得操作描述符链的首地址,依靠该首地址获得操作描述符,在解析操作描述符之后执行该次操作,在确保该次描述符没有结束的情况下,依照描述符定义的方法获取剩下的描述符。但两种工作方式下DMA的工作效率都是较低的,因为在预先设定的方式结束之后总是需要再次配置并重新启动。即使在链表方式下,由于DMA本身进行可能是复杂数据流处理,数据流在各个阶段的相关性各不相同,所以DMA事实上无法以单一链表完成所有操作,而必须在节拍不停被打断并检查特定条件满足的情况下,重新配置之后或重新构造指定链表之后开始工作,从而降低效率,而且每次重新启动需要再次配置,即意味着占用了CPU的额外时间。
[0004] 此外,在真实场景下,不得不依赖CPU或MCU与DMA之间的交互,帮助DMA完成所有操作。尽管利用DMA来进行数据流调度和搬移,但由于DMA没有进行信息交换和协同工作的能力,CPU或MCU实际上依然主导整个流控过程,在一些复杂场景下,甚至不得不考虑为专门的DMA搭配CPU或MCU进行有效调度。

具体实施方式

[0038] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0039] 为有效解决以上提出的数据流的调度问题,提高DMA的效率,实现自我控制和调节,本发明引入信息共享池的概念和重构控制逻辑,利用DMA阵列在操作过程中动态改变信息共享池的内容并基于该内容动态改变DMA阵列的行为,从而实现DMA阵列的动态重构,控制DMA阵列按照所需要的方式完成整个数据流的处理过程。
[0040] 本发明的可动态重构的DMA阵列预先利用软件或预定义的数据格式来构造DMA阵列的控制链表,根据DMA阵列的状态信息以及在特定过程中执行的操作写入的信息组成DMA阵列之间的信息共享池,利用信息共享池中的结果进一步产生对DMA阵列进行过程控制的信息,从而利用DMA阵列在工作过程中加入动态控制信息来改变信息共享池的内容,控制并影响DMA阵列的执行过程,使得DMA阵列在执行控制链表的过程中实现动态调度和自我控制。
[0041] 本发明的可动态重构的DMA阵列的具体实现方式如图1所示。可动态重构的DMA阵列包括:
[0042] 控制CPU C0。所述控制CPU(或MCU)主要进行DMA阵列的配置和启动。DMA阵列的配置和启动可以认为是以一种初始化的方式进行,即按需构造DMA的重构及控制过程。在重构控制信息被CPU构造完成之后,DMA阵列在启动之后的执行过程中,即可主动输出或改写信息共享池,同时配置并改写重构控制信息,使DMA阵列可以接受重构之后的控制信息,重构并改变DMA阵列的执行过程。控制CPU可通过总线C1来配置总线系统C16中的各种资源,包括对DMA的初始配置及启动;
[0043] DMA阵列中的多个DMA实例C2.0,C2.1,C2.2,…,C2.n,其中每个DMA通过自身的总线C3.0,C3.1,C3.2,…,C3.n与所述总线系统C16相连接,可以访问阵列中的其他各个模块;其中,DMA阵列中的每个DMA实例C2.0,C2.1,C2.2,…,C2.n对应的状态信息C4.0,C4.1,C4.2,…,C4.n被连接到信息共享池,形成控制信息或控制反馈的一部分;DMA对应的控制信息C5.0,C5.1,C5.2,…,C5.n连接到每个DMA实例C2.0,C2.1,C2.2,…,C2.n,用于对相应DMA进行控制,在信息共享池的内容改变或重构控制逻辑改变时,获得的控制信息也会相应改变,从而达到改变重构DMA阵列的目的;
[0044] 信息共享池C7,用于被动地改变或收集DMA阵列中各个DMA的状态信息,并同时提供和维护可由各DMA访问和共享的信息,各个DMA可以基于信息共享池的内容进行决策和判断,执行不同的操作。DMA或控制CPU通过信息共享池对应的访问总线C6对信息共享池进行访问,达到获取信息或改变信息共享池内的内容的目的。
[0045] 重构控制逻辑C10,用于对DMA阵列的控制信息进行动态修改,同时所述重构控制逻辑既可以由信息共享池获取对DMA阵列的控制,也可以通过自身的总线接口被动态修改后改变对DMA阵列的控制,达到实时动态调整DMA阵列中的每个DMA的操作过程。信息共享池和重构控制逻辑之间通过信息交互通道来传输交互信息C9。重构控制逻辑在获取信息共享池的内容之后,通过对应的重构控制端口对DMA阵列中的各个DMA进行重构控制,即不仅信息共享池中的信息改变之后可以改变DMA的行为,重构控制逻辑的控制方式和控制对象的改变也能够直接改变DMA阵列中的各个DMA的行为;DMA阵列中的每个DMA或控制CPU可以通过总线系统C16经过重构控制逻辑的访问总线C11访问和配置重构控制逻辑,达到改变DMA阵列重构的目的。
[0046] 其中所述可动态重构的DMA阵列的总线系统C16用于提供系统中各个master和slave之间互联互通,支持从各个master到各个slave之间的访问。
[0047] 作为进一步优选的实施例,所述可动态重构的DMA阵列还包括各个不同位置和形式的存储器实体C12.0,C12.1,…,C12.m为系统提供各种数据,包括为DMA阵列的每个DMA提供链表。每个DMA或控制CPU可通过总线系统经过存储器实体相应的总线C13.0,C13.1,…,C13.m来访问各个存储器实体。
[0048] 作为进一步优选的实施例,所述可动态重构的DMA阵列还包括各个不同位置和形式的外设实体C14.0,C14.1,…,C14.k可由DMA阵列或CPU通过总线系统经过相应的总线C15.0,C15.1,…,C15.k进行访问。
[0049] 根据本发明上述实施例,通过DMA阵列之间的状态改变以及DMA在执行过程中对信息共享池的修改获得动态控制和改变DMA执行方式的信息,同时DMA阵列在执行过程中控制并修改对阵列中的每个DMA的控制方式,达到动态重构和改变DMA阵列的执行方式。本发明可以根据DMA阵列的自我调节和改变,实现任意组合方式的DMA重构和执行。
[0050] 而且,如果控制DMA的链表可以采用灵活的方式构造于芯片之外的存储器,如可擦除ROM,flash,即意味着DMA阵列的控制方式可以根据需要通过片外存储器灵活修改,同时如果DMA阵列可以通过给定的初始条件触发开始工作,则本发明中的DMA阵列实际上并不依赖于CPU的控制。
[0051] 图2为根据本发明优选实施例的可重构DMA阵列的工作流程图,该流程主要包括以下步骤:
[0052] 步骤S0:开始;
[0053] 步骤S1:所述控制CPU构造DMA阵列的链表,通过构造该链表,DMA阵列中的每个DMA的执行过程将由每个DMA在执行链表的过程中互相改变或重构;
[0054] 步骤S2:CPU启动DMA阵列;
[0055] 步骤S3:DMA阵列中的部分DMA或全部DMA将开始执行链表;
[0056] 步骤S4:根据所述部分DMA或全部DMA的状态,判断是否满足条件P0至条件P3中之一:
[0057] 条件P0:在执行过程中,DMA阵列中的部分DMA或全部DMA进入暂停状态,等待接收对应的控制信息或被重构;
[0058] 条件P1:在执行过程中,DMA阵列中的部分DMA或全部DMA发生状态改变;
[0059] 条件P2:在执行过程中,DMA阵列中的部分DMA或全部DMA通过执行链表对信息共享池的内容进行改写;
[0060] 条件P3:在执行过程中,DMA阵列中的部分DMA或全部DMA通过执行链表对重构控制逻辑进行改写;
[0061] 步骤S5:判断DMA阵列是否被重构,即判断在满足条件P0,P1,P2或P3的情况下,DMA阵列的执行过程是否已被改变。如果被改变,DMA阵列继续执行步骤S3,开始执行重构后的链表;如果未被改变,DMA阵列执行步骤S6;
[0062] 步骤S6:判断DMA阵列的所有操作是否结束。如果未结束,DMA阵列继续执行步骤S3,继续执行先前的链表;如果已结束,执行步骤S7;
[0063] 步骤S7:流程结束。
[0064] 从图1和2所示的结果可以看出,事实上,DMA的操作和重构并不依赖于CPU的控制,只要硬件的设计能够给定足够的信息,DMA阵列就可以根据设定的初始条件启动,并完成自我控制和重构过程,也就是说,DMA阵列本身就可以根据给定的信息完成自我控制和重构,不需要任何CPU参与的控制过程和操作,而是可以按照给定的方式自我重构。
[0065] 此外,本领域技术人员可以理解,图1所示的可动态重构的DMA阵列架构示意图并不构成对本发明的硬件结构的限定,而是可以包括现有技术中更多或更少的部件,或某些部件的组合。例如,DMA工作方式不限于链表形式,而是可以采用其他任何常规的存储结构。此外,本发明的技术方案不限于芯片领域,例如也可用于例如FPGA,CPLD等其它领域的设计。尽管图1描述了DMA阵列的控制信息来自DMA阵列本身,但本领域技术人员可以理解,所述控制信息还可以来自任何其它部件。
[0066] 图3和图4分别为可重构DMA阵列的非限制性实现说明和执行示例,图3的实现示例中的主要组件和控制过程说明如下。
[0067] DMA0,DMA1和DMA2(标记为C0,C1,C2)为可重构DMA阵列中的3个DMA实例,参考图4所述,在依次执行的步骤S0‑S8中分别执行各自的描述符,每个步骤包括对应DMA对指定描述符实施的多次执行过程;
[0068] 描述符D0.0,D0.1,…,D0.n‑1是DMA0在步骤S0中执行的n条描述符;
[0069] 描述符D1.0,D1.1,…,D1.n‑1是DMA1在步骤S1中执行的n条描述符;
[0070] 描述符D2.0,D2.1,…,D2.n‑1是DMA2在步骤S2中执行的n条描述符;
[0071] 描述符D0.n,D0.n+1,…,D0.2n‑1是DMA0在步骤S3中执行的n条描述符;
[0072] 描述符D1.n,D1.n+1,…,D1.2n‑1是DMA1在步骤S4中执行的n条描述符;
[0073] 描述符D2.n,D2.n+1,…,D2.2n‑1是DMA2在步骤S5中执行的n条描述符;
[0074] 描述符D0.2n,D0.2n+1,…,D0.3n‑1是DMA0在步骤S6中执行的n条描述符;
[0075] 描述符D1.2n,D1.2n+1,…,D1.3n‑1是DMA1在步骤S7中执行的n条描述符;
[0076] 描述符D2.2n,D2.2n+1,…,D2.3n‑1是DMA2在步骤S8中执行的n条描述符;
[0077] 多个DMA之间的执行过程具有关联性,在每个DMA状态的改变之后将影响相关DMA的执行过程。与图3相对应的执行流程如图4所示。图4中的DMA阵列执行过程说明如下:
[0078] 步骤S0:开始;
[0079] 步骤S1.0:根据启动状况,DMA0执行图3中阵列指定链表的步骤S0的操作;
[0080] 步骤S1.1:根据启动状况,DMA1进入等待DMA0执行完成针对图3中指定链表的步骤S0的操作;
[0081] 步骤S1.2:根据启动状况,DMA2进入等待DMA1执行完成针对图3中指定链表的步骤S1的操作;
[0082] 步骤S2:DMA0执行完成针对指定链表的步骤S0的操作,并进入等待DMA2执行完成针对图3中指定链表的步骤S2的操作;
[0083] 步骤S3:DMA1获取DMA0执行指定链表的步骤S0的状态,如果DMA0已经结束针对图3中指定链表的步骤S0的操作,则执行步骤S4;
[0084] 步骤S4:DMA1执行图3中阵列指定链表的步骤S1的操作;
[0085] 步骤S5:DMA1执行完成针对指定链表的步骤S1的操作,并进入等待DMA0执行完成针对图3中指定链表的步骤S3的操作;
[0086] 步骤S6:DMA2获取DMA1执行图3中指定链表的步骤S1的状态,如果DMA1已经结束针对图3中指定链表的步骤S1的操作,则执行步骤S7;
[0087] 步骤S7:DMA2执行图3中阵列指定链表的步骤S2的操作;
[0088] 步骤S8:DMA2执行完成针对图3中指定链表的步骤S2的操作,并进入等待DMA1执行完成针对图3中指定链表的步骤S4的操作;
[0089] 步骤S9:DMA0获取DMA2执行图3中指定链表的步骤S2的状态,如果DMA2已经结束针对图3中指定链表的步骤S2的操作,则执行步骤S10;
[0090] 步骤S10:DMA0执行图3中阵列指定链表的步骤S3的操作;
[0091] 步骤S11:DMA0执行完成针对图3中指定链表的步骤S3的操作,并进入等待DMA2执行完成针对图3中指定链表的步骤S5的操作;
[0092] 步骤S12:DMA1获取DMA0执行图3中指定链表的步骤S3的状态,如果DMA1已经结束针对图3中指定链表的步骤S3的操作,则执行步骤S13;
[0093] 步骤S13:DMA1执行图3中阵列指定链表的步骤S4的操作;
[0094] 步骤S14:DMA1执行完成针对图3中指定链表的步骤S4的操作,并进入等待DMA0执行完成针对图3中指定链表的步骤S6的操作;
[0095] 步骤S15:DMA2获取DMA1执行图3中指定链表的步骤S4的状态,如果DMA1已经结束针对图3中指定链表的步骤S4的操作,则执行步骤S16;
[0096] 步骤S16:DMA2执行图3中阵列指定链表的步骤S5的操作;
[0097] 步骤S17:DMA2执行完成针对图3中指定链表的步骤S5的操作,并进入等待DMA1执行完成针对图3中指定链表的步骤S7的操作;
[0098] 步骤S18:DMA0获取DMA2执行图3中指定链表的步骤S5的状态,如果DMA2已经结束针对图3中指定链表的步骤S5的操作,则执行步骤S19;
[0099] 步骤S19:DMA0执行图3中阵列指定链表的步骤S6的操作;
[0100] 步骤S20:DMA0执行完成针对图3中指定链表的步骤S6的操作,并进入等待DMA2执行完成针对图3中指定链表的步骤S8的操作;
[0101] 步骤S21:DMA1获取DMA0执行图3中指定链表的步骤S6的状态,如果DMA0已经结束针对图3中指定链表的步骤S6的操作,则执行步骤S22;
[0102] 步骤S22:DMA1执行图3中阵列指定链表的步骤S7的操作;
[0103] 步骤S23:DMA1执行完成针对图3中指定链表的步骤S7的操作,并进入等待DMA2执行完成针对图3中指定链表的步骤S8的操作;
[0104] 步骤S24:DMA2获取DMA1执行图3中指定链表的步骤S7的状态,如果DMA1已经结束针对图3中指定链表的步骤S7的操作,则执行步骤S25;
[0105] 步骤S25:DMA2执行图3中阵列指定链表的步骤S8的操作;
[0106] 步骤S26:DMA2执行完成针对图3中指定链表的步骤S8的操作,结束操作;
[0107] 步骤S27:DMA0获取DMA2执行图3中指定链表的步骤S8的状态,如果DMA2已经结束针对图3中指定链表的步骤S8的操作,则结束操作;
[0108] 步骤S28:DMA1获取DMA2执行图3中指定链表的步骤S8的状态,如果DMA2已经结束针对图3中指定链表的步骤S8的操作,则流程结束。
[0109] 图4中的DMA阵列执行过程仅为可动态重构DMA阵列的一个执行实例,由于DMA阵列可以动态输出状态信息或改变DMA之间的共享信息,同时改变重构控制逻辑,所以理论上DMA阵列的控制方式和实现结果可以任意变化。
[0110] 需要说明的是,图1所示的可动态重构的DMA阵列架构仅用于说明而非限定本发明的技术方案。本领域技术人员应当理解,在本发明的基础上可以根据实际需要对DMA数量、阵列间的交互方式和载体、DMA启动方式、链表数据格式等做出任意的调整,而不应将本发明限于上述示例的具体结构和参数。
[0111] 可以看出,本发明提供了一种高效快速的DMA阵列架构,同时给出了DMA阵列在获取到链表信息之后执行该信息过程中如何进行操作和重构的过程。利用本发明给出的方法,可以完成DMA阵列的任意控制和重构,并可以将本发明的可动态重构DMA阵列应用于各种场景之中,实现各种不同需求。本发明的可动态重构DMA阵列根据统一设计的硬件结构,在更新不同的阵列操作链表之后,获得对DMA阵列的工作方式,工作过程及工作流程的完全重构,使得DMA甚至在不需要CPU参与的情况下依然保证其便利性类似于CPU控制模式,而且效率可以大幅提高。此外还可以基于本发明的DMA阵列来搭建不依赖于CPU的SOC系统。
[0112] 尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解,其依然可以对前述各实施例所记载的技术方案进行修改,或对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页 第1页 第2页 第3页