发明内容
(一)要解决的技术问题
本发明所要解决的技术问题是克服普通DMA传输数据分布简单、对多维数据支持不足、冗余读写操作较多的缺点,提出一种新的多维DMA传输方法及装置。
(二)技术方案
本发明提出的多维DMA传输装置包括读Buffer、数据FIFO、写Buffer、读控制器和写控制器,所述读Buffer与数据FIFO相连,用于暂存在读操作过程中新读入的数据;所述数据FIFO用于暂时存储读写操作中积压的数据;所述写Buffer与数据FIFO相连,用于暂存在写操作过程中将要写出的数据;所述读控制器连接于读Buffer和数据FIFO,用于控制读操作过程,发送读请求并对该请求的回复进行处理;所述写控制器连接于写Buffer、数据FIFO和读Buffer,用于控制写操作过程,发送写请求并对该请求的回复进行处理。
所述读Buffer包括读状态寄存器,该读状态寄存器用于存储标志该读Buffer中有效数据的情况的状态信息。
所述写Buffer包括写状态寄存器,该写状态寄存器用于存储标志该写Buffer中有效数据的情况的状态信息。
所述读控制器用于将读取的数据暂存于该读Buffer和数据FIFO中,并修改读Buffer中的读状态寄存器的状态信息。
当写Buffer和数据FIFO中存储的数据之和足够当次写操作所需数据时,所述写控制器用于向外部发送写操作请求,并将写Buffer和数据FIFO中的数据依次写出。
当数据FIFO为空并且已经到达DMA传输末尾时,所述写控制器用于从写Buffer和读Buffer中选取数据进行写出。
本发明还提出一种多维DMA传输方法,用于DMA传输装置中,该DMA传输装置包括读Buffer、数据FIFO和写Buffer,所述方法包括读操作步骤和写操作步骤:在读操作步骤中,发送读请求并对该请求的回复进行处理,并修改该读Buffer和数据FIFO内的数据及状态信息,使DMA存入数据FIFO前进行了对齐操作而形成一个连续的数据块;在写操作步骤中,发送写请求并对该请求的回复进行处理,修改读Buffer、数据FIFO和写Buffer内的数据及状态信息,以便从连续的数据块中截取数据并写出。
在读操作步骤中,当读Buffer中空位足够当次读入操作时,将读入数据进行循环移位后接到读Buffer中最后一个有效数据之后;或者,
当读到的数据数量和读Buffer中的数据数量之和不小于端口位宽W时,将W个数据排好顺序放入数据FIFO中,并剩余数据放入读Buffer中。
在写操作步骤中,当需要写出的数据数量不大于写Buffer中有效数据的数量时,直接从写Buffer读取数据;并且
当需要写出的数据数量大于写Buffer中的有效数据量时,并且数据FIFO不空时,数据FIFO弹出W个数据,将写Buffer中的数据和该W个数据拼接后截取需要写出的数据长度的数据并写出,并将剩余数据放入写Buffer中。
在写操作步骤中,当到达DMA传输结尾时,将写Buffer中的数据和读Buffer中的数据进行组合,并使写Buffer中数据在前,选取需要读取的数据并移位写出,将剩下数据存入写Buffer中。
(三)有益效果
根据本发明的多维DMA传输装置与方法,由于多维数据当读入时在缓存区内自动对齐使数据形成一个连续的数据块,实现了多维数据的无缝连接。而写出操作从连续的数据块中截取数据并进行合适的位移,保证写出操作按多维DMA要求进行操作。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
为了克服普通DMA传输数据分布简单、对多维数据支持不足、冗余读写操作较多的缺点,本发明提出一种多维DMA传输装置与方法,所述多维DMA传输装置与方法可以通过将多块数据拼接成一块数据、一块拆分成多块、或者多块数据重新划分等操作,为接下来的Load/Store操作提供一定的便利。如对于一个大矩阵,本发明可以通过多维DMA传输的方式将它拆成多个小矩阵供给DSP进行处理。
本发明的多维DMA传输可以通过配置多个参数进行简单的数据转换,一般一个多维DMA传输包含多个参数,除了第一维只存在一个Num参数外,其他各维都包含两个参数:Num和Step。Num表示包含多少个数据组,Step表示该维下每个数据组之间的距离。
图1表示三维DMA传输的数据分布结构,如图所示,其中第一维有D1Num个数据,第二维有D2Num个一维数据组,且一维数据组之间的距离为D2Step,第三维有D3Num个二维数据组,且二维数据组之间的距离为D3Step。
本发明的多维DMA传输具有比较灵活的特性,既支持读写同维数下DMA传输的处理,也支持读写不同维数情况下的DMA传输的处理,适用于各种结构的DMA数据直接搬运和简单处理,大大增强了DMA单元的功能。
如图2和图3所示,图2表示了读过程中地址和数据参数的处理的行为级描述示例,图3表示了写过程中地址和数据参数的处理的行为级细节示例,其中均通过嵌套的For语句循环方式表示了DMA传输的具体过程。
读控制器按照图2所示方式读取数据后放入控制器中的数据缓存中,当写控制器发现数据缓存中的数据时则进行该次写操作,地址根据图3所示结构进行细化处理,保证多维DMA传输的正确性。
本发明在多维DMA传输过程中,对于高一维的DMA传输,它是以低一维的DMA传输过程为一个基本子过程,完成Num个起始地址进行等差偏移的子过程,如此反复嵌套直到完成最高维的DMA操作,即完成整个多维DMA传输。
下面将详细描述本发明的具体实施方式,以展示本发明的各个具体构成部分和实现细节。
图4所示为根据本发明的多维DMA传输装置的一个实施例,在该实施例中,该多维DMA传输装置实施为一个DMA控制器,该DMA控制器包括:读Buffer 400、数据FIFO 401、写Buffer 402、读控制器403和写控制器404。其中,读Buffer 400和写Buffer 402均连接于数据FIFO,读控制器403与读Buffer 400、数据FIFO均相连接,写控制器404与写Buffer 402、数据FIFO 401、读Buffer 400均相连接,。
读Buffer 400用于暂存读操作过程中新读入的数据,包括读状态寄存器(未示出),该读状态寄存器用于存储标志该读Buffer 400中有效数据的情况的状态信息。
数据FIFO 401用于存储因读写速度不同而暂时积压下来的数据。
写Buffer 402用于暂存在写操作过程中将要写出的数据,包括写状态寄存器(未示出),该写状态寄存器用于存储标志该写Buffer402中有效数据情况的状态信息。
读控制器403用于控制读操作过程,发送读请求并对该请求的回复进行处理。在进行读操作时,当所请求读取的数据返回时,将读取的数据暂存于该读Buffer 400和数据FIFO中,并修改读Buffer 400中的读状态寄存器的状态信息。
写控制器404用于控制写操作过程,发送写请求并对该请求的回复进行处理。在进行写操作时,根据DMA的实际操作状态进行判断。主要分为两种情况:一种情况是,写数据来自于写Buffer 402和数据FIFO 401,当这两个部件中存储的数据之和足够当次写操作所需数据时,写控制器404向外部发送写操作请求,并将写Buffer 402和数据FIFO 401中的数据依次写出;另一情况是,当数据FIFO 401为空并且已经到达DMA传输末尾时,写控制器404从写Buffer 402和读Buffer 400中选取数据进行写出,以保证剩余数据的传输完成。
以下描述根据本发明的多维DMA传输方法的具体实施方式。
根据本发明,通过在各缓存器(即读Buffer 400、数据FIFO 401和写Buffer 402,之间的数据传输实现多维数据的重组和分割。
在一个具体实施例中,多维DMA的传输方法包括如下步骤:A、读操作控制步骤;B、写操作控制步骤。
在读操作控制步骤A中,读控制器403控制读操作过程,发送读请求并对该请求的回复进行处理,并修改读Buffer 400和数据FIFO 401内的数据及状态信息,使DMA存入数据FIFO 401前进行了对齐操作而形成一个连续的数据块。该步骤可以分为图5和图6两种情况,下面将详细说明。
在写操作控制步骤B中,写控制器404控制写操作过程,发送写请求并对该请求的回复进行处理,修改读Buffer 400、数据FIFO 401和写Buffer 402内的数据及状态信息,以便从连续的数据块中截取数据并写出。该步骤可以分为图7、图8和图9三种情况,也将在下面详细说明。
图5显示了当读Buffer 400中空位足够当次读入操作时的存储区变化情况的一个示例。该读Buffer 400存储数据的模式为循环方式。如图5所示,假设端口位宽W为8个最小数据宽度(最小数据宽度是连续的不可分割的数据,即最小粒度),读入的数据只有4个有效数据,为D2~D5,而读Buffer 400中只有3个有效数据,此时将D2~D5进行循环移位到合适位置,然后将读入数据接到读Buffer 400中最后一个有效数据(B5)之后,于是,读Buffer 400中变为拥有7个有效数据,即从B3所在位置开始,到D5结束。
当读到的数据数量和读Buffer 400中的数据数量之和不小于端口位宽W时,则将W个数据排好顺序放入数据FIFO 401中,剩余数据放入读Buffer 400中。
图6显示了当读Buffer 400中空位不够当次读入操作时的存储区变化情况的一个示例。如图6所示,在此示例中,W仍设为8个最小数据宽度,读入的数据有5个有效数据,为D2~D6,而读Buffer 400中也有5个有效数据,为B1~B5,此时,读Buffer 400中的5个数据和读入数据中的前3个(8-5=3)数据组合起来(由于读Buffer 400中数据为上一次来的数据,因此将读Buffer 400中的数据放在前面,当次读入数据放在后面)后放入数据FIFO 401中,将剩下的读入数据(D5~D6)放入读Buffer 400中。通过这样的读控制,将读入数据存储以便写控制器404使用。
对于写控制器404来说,根据当前DMA所处状态和所有缓冲器(包括读Buffer、数据FIFO和写Buffer)数据状态进行判断,如果有效数据足够当次写出,则发送写出请求,否则不发送写出请求。此处的判断遵循一次传输尽可能多的原则。以端口位宽W为8个最小数据宽度例,当次写出地址为Addr,使用%表示求模操作,则当次最大能传输8-Addr%8个数据;将该结果与最小维度DMA剩余操作数量进行比较,取较小值得出当次应传输多少数据(D)。由此,当次写操作须等待存可用数据不小于D时才进行写数据传输。
如果写控制器404进行写操作,则从所有缓冲器(包括读Buffer、数据FIFO和写Buffer)获取当次写操作所需数据并修改其状态信息以完成该次写操作。写操作基本上分为三种情况。
当需要写出的数据数量不大于写Buffer中有效数据的数量时,直接从写Buffer读取数据,不需要修改其它存储单元。
图7显示了当写Buffer 402中数据足够当次写出操作时的存储区变化情况的一个示例。如图7所示,设端口位宽W仍为8个最小数据宽度,写Buffer 402中有5个有效数据,为B1~B5,需要写出3个数据,此时,直接从写Buffer 402中取3个数据B1~B3(B1为第一个有效数据)并移位到合适位置后写出,并且修改写Buffer 402的状态信息。
当需要写出数据数量大于写Buffer 402中的有效数据量,并且数据FIFO 401不空时,数据FIFO 401弹出W个数据,将写Buffer 402中的数据和这W个数据拼接后截取需要写出的数据长度的数据并写出,并将剩余数据放入写Buffer 402中。
图8显示了当写Buffer 402中的数据不够当次写出操作时的存储区变化情况的一个示例。如图8所示,设W仍为8,写Buffer 402中有5个有效数据,为B1~B5,需要写出7个数据,则从数据FIFO 401中弹出8个数据后将其和写Buffer 402数据组合(写Buffer 402中数据在前),将前7个数据后进行合理的移位写出,将剩下的6个(5+8-7=6)数据存入写Buffer402中。
如果当次DMA传输的所有读操作已完成并且数据FIFO 401为空,则将写Buffer 402中的数据和读Buffer 400中数据拼接后截取需要写出的数据长度的数据并写出,并将剩余数据放入写Buffer 402中。
图9显示了DMA传输结尾时所有缓冲器(包括读Buffer、数据FIFO和写Buffer)可能的变化情况的一个示例。如图9所示,设W仍为8,写Buffer 402中有3个有效数据,为B1~B3,读Buffer 400中有4个有效数据(由于是循环存储,数据顺序为D6、D7、D0、D1),需要写出5个数据,此时,将写Buffer 402中的数据和读Buffer 400中的数据组合(写Buffer402中数据在前),选取前5个数据后进行合理的移位写出,将剩下的2个(3+4-5=2)数据存入写Buffer 402中。
如果在时序要求比较高的设计中,可以修改写控制器404,一般情况下,写出数据扩展为在数据FIFO 401,写Buffer 402和读Buffer 400中进行选择,这样可以提高数据传输时序,保证多维DMA传输性能的进一步提升。但此方法在控制逻辑上较本设计中的实现要复杂许多,综合考虑一般情况下写出数据从数据FIFO 401和写Buffer 402进行选择。
根据本发明,由于多维DMA数据当读入时在存入数据FIFO 401前进行了自动对齐操作,使数据形成一个连续的数据块,实现了多维数据的无缝连接。而写出操作从连续的数据块中截取数据并进行合适的位移,保证写出操作按多维DMA要求进行操作。
本发明的多维DMA传输装置与方法适合于矩阵分割、矩阵重组、矩阵扩展等多种DSP基本操作,计划了DSP核处理过程,将简单的处理过程与复杂处理过程相分离后并行执行,减少了核处理时间。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。