CN101276315A - 动态调整传输数据宽度的直接存储器存取控制器与方法 - Google Patents
动态调整传输数据宽度的直接存储器存取控制器与方法 Download PDFInfo
- Publication number
- CN101276315A CN101276315A CNA2007100919069A CN200710091906A CN101276315A CN 101276315 A CN101276315 A CN 101276315A CN A2007100919069 A CNA2007100919069 A CN A2007100919069A CN 200710091906 A CN200710091906 A CN 200710091906A CN 101276315 A CN101276315 A CN 101276315A
- Authority
- CN
- China
- Prior art keywords
- data
- transmission
- width
- address
- transmission mode
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Communication Control (AREA)
- Bus Control (AREA)
Abstract
一种动态调整传输数据宽度的方法,包括下列步骤。首先,检测传输数据的数据笔数。依据传输数据的数据地址,以决定数据宽度传输模式。其中,数据宽度传输模式可以包括字符传输模式、半字符传输模式以及字节传输模式至少其中之一。依据传输数据的数据地址、数据宽度传输模式与数据笔数以传输数据。
Description
技术领域
本发明涉及一种直接存储器存取控制器,且特别涉及一种具有动态调整传输数据宽度的直接存储器存取控制器。
背景技术
新世代电子产品以轻、薄、短、小以及低功耗为设计趋势,使得系统芯片(System-on-Chip,SoC)成为近年来热门的研究焦点之一。其中,电子装置在数字信号处理与多媒体处理的应用中,逐渐成为整体作业负载的重心。而数据传输的速率更是多媒体应用重要的关键。
目前,直接存储器存取控制器(direct memory access controller,DMAC)广泛地应用在数据传输。这是因为直接存储器存取控制器能够独立地在周边装置与存储器之间直接传输数据,而处理器不需全程直接参与数据传输的工作。此外,当有大量数据要传输时,只需通过直接存储器存取控制器的参数设定,就可以由直接存储器存取控制器完成数据的传输。此时,处理器能够平行地执行其它的运算。因此,直接存储器存取控制器除了节省处理器需额外传输数据的时间之外,也提升系统效能的目标。
目前多媒体应用,例如MPEG-4和H.264标准,包含动态估测(MotionEstimation)及动态补偿(Motion Compensation)等算法。在实际运作上,这些算法不但须要大量的数据传输,且传输数据的数据地址(Address)还经常呈现不连续的分布。
现有的数据宽度传输模式是字符传输模式(word mode)、半字符传输模式(half-word mode)以及字节传输模式(byte mode)。现有的数据传输方式是采用一般宽度固定的传输模式(Aligned Mode)。此种传输模式必须在数据传输之前,就要决定使用何种数据宽度传输模式。在数据传输的过程中,无法转换数据宽度传输模式。例如,若一开始选择以字符传输模式作为数据宽度传输模式,则在数据传输的过程中,都是以字符传输模式传输数据。
图1为现有数据的传输方式。图中每一个方格表示一字节数据。在现有传输数据A1-A7的方式中,一开始就要决定数据宽度传输模式。若以字符传输模式(即每次以四个字节做为传输单位)作为数据宽度传输模式,则完成数据A1-A7的传输需要3个步骤(即分成3次传送),分别是S101、S102以及S103。在图1中,可以明显看出,当数据A1-A7完成传输后,还必须舍弃多余的数据B1-B5,会造成时间的浪费。若使用者要减化传输方式,则会采用字节模式(即每次以一个字节做为传输单位)作为数据宽度传输模式。但是以字节模式作为数据宽度传输模式,则完成数据A1-A7的传输需要7个步骤(即分成7次传送)。虽然以字节模式作为数据宽度传输模式最简单,但这却不是最有效率的做法。
在美国专利公告第5,628,026号专利所公开的技术,利用计数器电路实现可执行多维度数据搬运的直接存储器存取控制器。在此专利中,数据搬运的总数据长度必须刚好是DCOH x DCOM x DCOL,其中DCOL、DCOM、DCOH分别是第一维度、第二维度及第三维度的数据长度。然而,在实际应用上,并非所有的数据长度皆满足此一条件。
发明内容
本发明提供一种动态调整传输数据宽度的方法,可以提高数据传输的效率。
本发明提供一种计算机可读取存储媒体,可执行上述的作业流程的时程控管方法的各个步骤。
本发明提供一种具有动态调整传输数据宽度的直接存储器存取控制器,可以动态选择最佳数据宽度作为数据宽度传输模式。
为解决上述问题,本发明提出一种动态调整传输数据宽度的方法。首先,检测传输数据的数据笔数。依据传输数据的数据地址,以决定传输数据的数据宽度传输模式。该数据宽度传输模式包括一第一传输模式以及一第二传输模式。依据传输数据的数据地址、数据宽度传输模式与数据笔数以传输数据。
本发明提出一种计算机可读取存储媒体,用于存储一计算机程序。计算机程序用于加载至一计算机系统中并且使得计算机系统执行上述作业流程的时程控管方法的任一步骤。
本发明提出一种具有动态调整传输数据宽度的直接存储器存取控制器,包括来源地址与宽度产生器、目的地地址与宽度产生器和先进先出缓冲器。其中,来源地址与宽度产生器用于传送包括一传输数据的来源数据地址和来源数据宽度。目的地地址与宽度产生器用于传送包括一传输数据的目的地数据地址和目的地数据宽度。先进先出缓冲器耦接至来源地址与宽度产生器以及目的地地址与宽度产生器,以暂时存放该传输数据。此外,传输数据的传输方式为依据传输数据的数据地址,以决定传输数据的一数据宽度传输模式,其中数据宽度传输模式包括一第一传输模式以及一第二传输模式。
在本发明的一实施例中,上述的数据宽度传输模式更包括一第三传输模式。其中,假设数据总线最大宽度为一字符,则该第一传输模式、该第二传输模式与该第三传输模式可以是字符传输模式、半字符传输模式以及字节传输模式。
综上所述,本发明依据传输数据的数据地址,以决定传输数据的数据宽度传输模式。因此,本发明的动态调整传输数据宽度的方法与其直接存储器存取控制器,可以使用最佳的数据宽度传输。藉此,不仅可以提高传输效率,更可以符合实际上的需求。
为让本发明的上述特征和优点能更明显易懂,下文特举较佳实施例,并配合附图,作详细说明如下。
附图说明
图1为现有数据的传输方式。
图2为本发明一实施例的具有动态调整传输数据宽度的直接存储器存取控制器的电路图。
图3为本发明一实施例的先进先出缓冲器的有限状态机图。
图4为本发明一实施例的动态调整传输数据宽度的方法的步骤流程图。
图5为依据本发明实施例说明的数据的传输方式。
附图符号说明
103、501、503:传输数据
200:直接存储器存取控制器
210:信号控制模块
212:来源地址与宽度产生器
214:目的地地址与宽度产生器
216:先进先出缓冲器
220:来源端
222:目的地端
S401、S405、S410、S412、S415、S420、S425、S430、S435、S437、S440、S443、S450、S452:步骤
具体实施方式
图2为本发明一实施例的具有动态调整传输数据宽度的直接存储器存取控制器的电路图。请参照图2,本实施例的具有动态调整传输数据宽度的直接存储器存取控制器200包括来源地址与宽度产生器(source address andsize generator,SASG)212、目的地地址与宽度产生器(destination addressand size generator,DASG)214、信号控制模块210以及先进先出(first infirst out,FIFO)缓冲器216。其中,信号控制模块210耦接至来源地址与宽度产生器212和目的地地址与宽度产生器214。而来源地址与宽度产生器212和目的地地址与宽度产生器214则分别耦接至先进先出缓冲器216。
当信号控制模块210接收到前一级的控制信号CS时,例如是中央处理单元(未绘示)的控制信号,则表示要传输数据。此时,信号控制模块210会将多数个参数设定值传送至来源地址与宽度产生器212和目的地地址与宽度产生器214。在本实施例中,来源地址与宽度产生器212包括数个寄存器,用于存储信号控制模块210所提供的多数个参数设定值。该些参数设定值包括总传输数据笔数p_bsz1、一连续数据段的数据笔数p_count1、传输数据的起始数据地址p_saddrl以及相邻连续数据段起始地址之间的距离p_offsetl等参数。
来源地址与宽度产生器212用于将来源数据地址Sra传送给来源端220,并将来源数据宽度Srs传送给来源端220和先进先出缓冲器216。此时,来源端所提供的输入数据Din可以暂时存放至先进先出缓冲器216。另外,先进先出缓冲器216也可以依据目的地地址与宽度产生器214的控制而调整传输给目的地端222的输出数据Dout的数据宽度。例如,当先进先出缓冲器216依据目的地地址与宽度产生器214的控制而要输出一字符(即四个字节)数据给目的地端222,此时若先进先出缓冲器216所暂存的输入数据只剩一个字节,则先进先出缓冲器216会等待下一笔输入数据Din写入,且直到暂存的数据量足够时,即可输出数据宽度为字符的数据Dout给目的地端222。
请继续参照图2,类似地,在本实施例中,目的地地址与宽度产生器214包括数个寄存器,用于存储信号控制模块210所提供的总传输数据笔数p_bsz2、一连续数据段的数据笔数p_count2、传输数据的起始数据地址p_saddr2以及相邻连续数据段起始地址之间的距离p_offset2等参数设定值。此外,目的地地址与宽度产生器214用于将目的地数据地址Dwa传送给目的地端222,并将目的地数据宽度Dws传送给目的地端222和先进先出缓冲器216。
值得注意的是,在本实施例中,来源地址与宽度产生器212和目的地地址与宽度产生器214是以不定边界模式(nonaligned mode)来传输数据。不定边界模式为依据传输数据的数据地址而动态决定传输数据的数据宽度传输模式。此数据宽度传输模式可能包括第一传输模式与第二传输模式,也可能更包括第三传输模式,甚至包括更多种传输模式。例如,动态决定的数据宽度传输模式可能为字符传输模式(即每次以四个字节做为传输单位)、半字符传输模式(即每次以二个字节做为传输单位)以及字节传输模式(即每次以一个字节做为传输单位)其中一者或多者。在本实施例中将假设数据总线最大宽度为一字符,则其中数据宽度传输模式包括字符传输模式、半字符传输模式以及字节传输模式。
动态决定传输数据的数据宽度传输模式的优先级为字符传输模式,其次为半字符传输模式,最后是字节传输模式。若总线的最大宽度为32bits,当传输数据的数据地址位于字符边界,例如是0x0、0x4、0x8、...等,则是以字符传输模式为数据宽度传输模式。当传输数据的数据地址位于半字符边界,例如是0x2、0x6、0xa等,则是以半字符传输模式为数据宽度传输模式。当传输数据的数据地址位于字节边界,例如是0x1,0x3,0x5等,则是以字节传输模式为数据宽度传输模式。
图3为本发明一实施例的先进先出缓冲器的有限状态机图。请合并参照图2和图3,本实施例的先进先出缓冲器216包括三种状态S1、S2以及S3。一开始先进先出缓冲器216尚未存储任何数据,因此缓冲器216操作于状态S1而设定信号Swr=1(表示先进先出缓冲器216具有足够的空间可以写入数据)。另外,由于缓冲器216目前还没有数据可供输出,因此设定信号Srr=0(表示先进先出缓冲器中并无足够的数据)。
在来源地址与宽度产生器212发出写入请求而将来源端220的数据Din写入缓冲器216后,缓冲器216便依其所剩存储空间而决定切换至状态S2或状态S 3。若缓冲器216尚有足够的未使用存储空间,则缓冲器216操作于状态S2而设定信号Swr=1以及信号Srr=1(表示先进先出缓冲器216中有足够的暂存数据可以写入或读取)。在状态S2中,来源端220的输入数据Di n可以写入先进先出缓冲器216,而先进先出缓冲器216亦可以因应目的地地址与宽度产生器214的读取请求而将数据Dout输出给目的地端222。理想上,若来源地址与宽度产生器212发出写入请求以及目的地地址与宽度产生器214发出读取请求二者供需平衡,则缓冲器216将会保持操作在状态S2。
若输出数据Dout的量大于输入数据Din的量,则缓冲器216便可能会因为无法满足目的地地址与宽度产生器214的读取请求而切换至状态S1。若输入数据Din的量大于输出数据Dout的量,则缓冲器216便可能会因为存储空间不足而切换至状态S3。
在状态S3中,缓冲器216操作设定信号Swr=0(表示先进先出缓冲器216没具有足够的空间可以写入数据)以及信号Srr=1。一直到目的地地址与宽度产生器214发出读取请求而将缓冲器216内的数据读出,缓冲器216才会改操作在状态S2(或S1)。若信号Srr=1,则表示先进先出缓冲器216中,有足够的暂存数据可以读取。
以下将依本发明提供一种作业流程的时程控管方法的实施例。此领域具有通常知识者可以计算机程序的形式实现下述诸实施例,并利用计算机可读取存储媒体存储此一计算机程序,以利计算机执行之,让动态调整传输数据宽度的方法以电子自动化的方式完成。在下述诸实施例中,将以直接存储器存取控制器做为本发明的实施范例,而前述配置图例为具有动态调整传输数据宽度的直接存储器存取控制器的电路图。
图4为本发明一实施例的动态调整传输数据宽度的方法的步骤流程图。以下就本实施例的动态调整传输数据宽度的方法所进行的步骤作详尽说明。本发明的动态调整传输数据宽度的方法,适用于来源地址与宽度产生器212和目的地地址与宽度产生器214,在此以来源地址与宽度产生器212为例说明。请参照图4,如步骤S401所述,依据信号控制模块210所提供的总传输数据笔数p_bsz1、一连续数据段的数据笔数p_count1、以及传输数据的起始数据地址p_saddr1等参数而设定各个寄存器的参数起始值:
r_bsz←p_bsz1
r_count←p_count1
r_saddr←p_saddr1
r_addr←p_saddr1
亦即,将总传输数据笔数p_bsz1写入寄存器r_bsz,将连续数据段的数量p_count1写入寄存器r_count,以及将起始数据地址p_saddr1写入寄存器r_saddr与寄存器r_addr。
再来进行步骤S405,判断寄存器r_bsz的内容是否大于0。若寄存器r_bsz=0,表示已完成数据传输,则结束此次PMA操作。若寄存器r_bsz>0,则进行步骤S410。
步骤S410说明,若寄存器r_bsz的值大于寄存器r_count的值,则表示目前还没有处理到最后一段连续数据段。此时,设定X=r_count。若寄存器r_bsz的值小于或等于寄存器r_count的值,则表示目前所处理的连续数据段是最后一个连续数据段。此时,步骤S410设定X=r_bsz。
接下来的步骤,是要决定传输数据的数据宽度传输模式。步骤S412判断是否要使用一般模式(aligned mode)。若要使用一般模式,则进行步骤S415。若要使用不定边界模式(nonaligned mode),则进行步骤S420。其中,不定边界模式为本发明提出的一种数据传输模式,可以提高数据传输的效率,以下将以实施例作更详尽的说明。
步骤S420判断X是否大于等于4。若X大于等于4(表示目前连续数据段中尚未处理的数据量足够使用字符传输模式进行数据传输),则进行步骤S425,否则进行步骤S430。步骤S425会去判断寄存器r_addr的值(表示目前要处理的地址)是落在字符边界(word boundary)、半字符边界(half-wordboundary)、或是字节边界(byte boundary)。在此假设数据总线最大宽度为一字符(即4个字节),以下将配合图1说明边界的定义。以选择最大的数据传输量为优先考量,若目前要处理的地址为0x00(或是0x04、0x08、...),则一次存取4笔数据B1、B2、A1、A2将是比较有效率的处理方式。因此,地址为0x00、0x04、0x08、...等处便选择字符边界。若目前要处理的地址为0x02(或是0x06、0x0a、...),则一次存取2笔数据A1、A2将是比较好的处理方式。因此,地址为0x02、0x06、0x0a、...等处便选择半字符边界。另外,其余地址皆选择字节边界。
在本实施例中,步骤S425可以检查寄存器r_addr的值的最后2个位是否为「00b」,便可以判断寄存器r_addr的值是否落在字符边界。若寄存器r_addr的值落在字符边界,则来源地址与宽度产生器212便在步骤S425设定寄存器r_size=W(在此W的值可以为4),以便后续步骤进行字符传输模式。若步骤S425检查寄存器r_addr的值的最后2个位为「10b」,则可以判断寄存器r_addr的值落在半字符边界。若寄存器r_addr的值落在半字符边界,则来源地址与宽度产生器212便在步骤S425设定寄存器r_size=HW(在此HW的值可以为2),以便后续步骤进行半字符传输模式。若步骤S425检查寄存器r_addr的值的最后2个位为「01b」或「11b」,则可以判断寄存器r_addr的值落在字节边界。若寄存器r_addr的值落在字节边界,则来源地址与宽度产生器212便在步骤S425设定寄存器r_size=B(在此B的值可以为1),以便后续步骤进行字节传输模式。
步骤S430判断X是否大于等于2。若X大于等于2(表示目前连续数据段中尚未处理的数据量足够使用半字符传输模式进行数据传输),则进行步骤S435,否则进行步骤S437。步骤S435会去判断寄存器r_addr的值是落在半字符边界、或是字节边界。在本实施例中,步骤S435可以检查寄存器r_addr的值的最后2个位是否为「00b」或「10b」,便可以判断寄存器r_addr的值落在半字符边界;否则,判断寄存器r_addr的值落在字节边界。若寄存器r_addr的值落在半字符边界,则来源地址与宽度产生器212便在步骤S435设定寄存器r_size=HW,以便后续步骤进行半字符传输模式。若寄存器r_addr的值落在字节边界,则来源地址与宽度产生器212便在步骤S435设定寄存器r_size=B,以便后续步骤进行字节传输模式。
当进行步骤S437时,表示此时X=1(表示目前连续数据段中尚未处理的数据量不足以使用字符/半字符传输模式进行数据传输)。因此,来源地址与宽度产生器212便在步骤S437设定寄存器r_size=B,以便后续步骤进行字节传输模式。
当完成寄存器r_size的设定后,便进行步骤S440。步骤S440依据寄存器r_addr(即目前要处理的地址)与寄存器r_size(表示一次存取的数据笔数,也代表目前采取的数据宽度传输模式)的内容来传输数据。接着,来源地址与宽度产生器212进行步骤S443以判断寄存器r_count-r_size的值是否大于0。
若此时寄存器r_count-r_size的值等于0,则表示目前连续数据段已传输完成,因此接下来来源地址与宽度产生器212可以进行步骤S452。在步骤S452中,来源地址与宽度产生器212会将寄存器p_offset1的值加入寄存器r_saddr中,使起始数据地址指向下一个连续数据段。除此之外,来源地址与宽度产生器212更重置寄存器r_addr与r_count(即r_count←p_count1以及r_addr←r_saddr),以便处理起始数据地址r_saddr所指的连续数据段。由于在步骤S440中已经依据寄存器r_size完成指定数量的数据传输,因此必需将代表目前未处理数据总笔数的r_bsz值减去r_size值,以更新目前未处理数据的总笔数纪录。
另外,若寄存器r_count-r_size的值大于0,则表示目前连续数据段还没完成传输,因此接下来来源地址与宽度产生器212可以进行步骤S450。由于在步骤S440中已经依据寄存器r_size完成指定数量的数据传输,因此,在步骤S450中,必需将代表一次存取数据笔数的r_size值加入r_addr值中(即r_addr ←r_addr+r_size),以更新目前欲处理数据的地址。来源地址与宽度产生器212亦会在步骤S450中将寄存器r_count的值减去r_size值(即r_count←r_count-r_size),以更新目前连续数据段中尚未处理的数据笔数。除此之外,来源地址与宽度产生器212亦会在步骤S450中将代表目前未处理数据总笔数的r_bsz值减去r_size值(即r_bsz←r_bsz-r_size),以更新目前未处理数据的总笔数纪录。
另外,若信号控制模块210依据控制信号CS而决定使用一般模式(即步骤S412判断要使用一般模式),则来源地址与宽度产生器212进行步骤S415。来源地址与宽度产生器212依据信号控制模块210所指定的数据宽度传输模式而进行S415。前述决定的数据宽度传输模式的手段可以任何现有技术来加以实现,在此不再赘述。在步骤S415中,来源地址与宽度产生器212依据信号控制模块210的控制而选择字符传输模式、半字符传输模式、位传输模式其中一种数据宽度传输模式,并依据此一预定的数据宽度传输模式而将r_size的值设定为W、HW或B。需注意的是,在一般模式(即步骤S415)中,一旦在初始传输之时(例如在步骤S401之时)决定了数据宽度传输模式,则在DMA的操作过程必须使用同一种数据宽度传输模式完成数据传输而无法动态切换传输模式。
图5为依据本发明实施例说明数据的传输方式。在本实施例中,共有11笔数据(分为两个连续数据段)要进行存取,而第一笔数据(即数据A1)的地址为0x02。此两个连续数据段分别为数据A1-A7和数据A8-A11。两个连续数据段之间的距离为5,而连续数据段的最大数据笔数是7。请合并参照图4和图5,如步骤S401所述,设定寄存器的参数起始值为r_bsz=11、r_count=7、r_s addr=0x02、r_addr=0x02、p_offset1=11。接着,进行步骤S405,判断总传输数据笔数r_bsz是否大于0(此时r_bsz=11)。因此,进行步骤S410。在步骤S410中,(r_bsz=11)>(r_count=7),因此设定X=r_count=7。接着,进行步骤S412。在本实施例中假设使用不定边界模式来传输数据,因此不再说明步骤S415。
由于目前X=r_count=7,因此进行步骤S425。步骤S425检查寄存器r_addr的值(此时为0x02)的最后2个位为「10b」,因此判断寄存器r_addr的值落在半字符边界,则来源地址与宽度产生器212便在步骤S425设定寄存器r_size=HW=2。步骤S440依据寄存器r_addr(此时为0x02)与寄存器r_size(此时为2)来存取数据A1~A2。完成步骤S440后,由于连续数据段A1~A7尚有未处理的数据,因此进行步骤S450。
由于在步骤S440中已经依据寄存器r_size完成指定数量的数据传输,因此在步骤S450必需将r_size值(目前为2)加入r_addr值中,以更新目前欲处理数据的地址r_addr=0x04;将寄存器r_count的值减去r_size值,以更新目前连续数据段中尚未处理的数据笔数r_count=5;将r_bsz值减去r_size值,以更新目前未处理数据的总笔数纪录r_bsz=9。
接下来进行步骤S405,判断总传输数据笔数r_bsz是否大于0(此时r_bsz=9)。因此,进行步骤S410。在步骤S410中,(r_bsz=9)>(r_count=5),因此设定X=r_count=5。由于目前X=r_count=5,因此进行步骤S425。
步骤S425检查寄存器r_addr的值(此时为0x04)的最后2个位为「00b」,因此判断寄存器r_addr的值落在字符边界,则来源地址与宽度产生器212便在步骤S425设定寄存器r_size=W=4。步骤S440依据寄存器r_addr=0x04与寄存器r_size=4来存取数据A3~A6。完成步骤S440后,由于连续数据段A1~A7尚有未处理的数据,因此进行步骤S450。
步骤S450将r_size=4加入r_addr值中,以更新目前欲处理数据的地址r_addr=0x04+4=0x08;将寄存器r_count的值减去r_size值,以更新目前连续数据段中尚未处理的数据笔数r_count=5-4=1;将r_bsz值减去r_size值,以更新目前未处理数据的总笔数纪录r_bsz=9-4=5。
接下来进行步骤S405,判断总传输数据笔数r_bsz是否大于0(此时r_bsz=5)。因此,进行步骤S410。在步骤S410中,(r_bsz=5)>(r_count=1),因此设定X=r_count=1。由于目前X=r_count=1,因此进行步骤S437。步骤S437设定寄存器r_size=B=1。
步骤S440依据寄存器r_addr=0x08与寄存器r_size=1来存取数据A7。完成步骤S440后,由于连续数据段A1~A7全部处理完毕,因此进行步骤S452。
步骤S452将寄存器p_offset 1的值加入寄存器r_saddr中(即r_saddr=0x02+11=0x 0d),使起始数据地址指向下一个连续数据段A8-A11;重置寄存器r_addr与r_count,使r_addr=r_saddr=0x0d以及r_count=p_count=7;将r_bsz值减去r_size值,以更新目前未处理数据的总笔数纪录r_bsz=5-1=4。
接下来进行步骤S405,判断总传输数据笔数r_bsz是否大于0(此时r_bsz=4)。因此,进行步骤S410。在步骤S410中,(r_bsz=4)<(r_count=7),因此设定X=r_bsz=4。由于目前X=4,因此进行步骤S425。
步骤S425检查寄存器r_addr的值(此时为0x0d)的最后2个位为「01b」,因此判断寄存器r_addr的值落在字节边界,则来源地址与宽度产生器212便在步骤S425设定寄存器r_size=B=1。步骤S440依据寄存器r_addr=0x0d与寄存器r_size=1来存取数据A8。完成步骤S440后,由于连续数据段A8~A11尚有未处理的数据,因此进行步骤S450。
步骤S450将r_size=1加入r_addr值中,以更新目前欲处理数据的地址r_addr=0x0d+1=0x0e;将寄存器r_count的值减去r_size值,以更新目前连续数据段中尚未处理的数据笔数r_count=7-1=6;将r_bsz值减去r_size值,以更新目前未处理数据的总笔数纪录r_bsz=4-1=3。
接下来进行步骤S405,判断总传输数据笔数r_bsz是否大于0(此时r_bsz=3)。因此,进行步骤S410。在步骤S410中,(r_bsz=3)<(r_count=6),因此设定X=r_bsz=3。由于目前X=3,因此进行步骤S435。
步骤S435检查寄存器r_addr的值(此时为0x0e)的最后2个位为「10b」,因此判断寄存器r_addr的值落在半字符边界,则来源地址与宽度产生器212便在步骤S435设定寄存器r_size=HW=2。步骤S440依据寄存器r_addr=0x0e与寄存器r_size=2来存取数据A9-A10。完成步骤S440后,由于连续数据段A8~A11尚有未处理的数据,因此进行步骤S450。
步骤S450将r_size=2加入r_addr值中,以更新目前欲处理数据的地址r_addr=0x0e+2=0x10;将寄存器r_count的值减去r_size值,以更新目前连续数据段中尚未处理的数据笔数r_count=6-2=4;将r_bsz值减去r_size值,以更新目前未处理数据的总笔数纪录r_bsz=3-2=1。
接下来进行步骤S405,判断总传输数据笔数r_bsz是否大于0(此时r_bsz=1)。因此,进行步骤S410。在步骤S410中,(r_bsz=1)<(r_count=4),因此设定X=r_bsz=1。由于目前X=1,因此进行步骤S437。步骤S437设定寄存器r_size=B=1。
步骤S440依据寄存器r_addr=0x10与寄存器r_size=1来存取数据A11。由于最后r_bsz会等于0,因此经步骤S405判断后会结束此次DMA操作。
此外,若有数据要写入存储器。在现有的技术中,若要使用于字符传输模式写入,则必须写入字符边界上。但在实际操作上,并非所有的数据皆位于字符边界。因此,为避免数据被覆写,通常都是采用字节传输模式写入。然而,以字节传输模式写入,则会浪费许多时间。
若藉由本发明的不定边界模式写入存储器,则可以依照数据地址选择适当的数据宽度传输模式,不仅可以提高写入效率,也可以避免覆写的问题。应用本发明者可以其它实施方式来实现本发明。例如,以下便是修改上述实施例所获得的另一实施例。藉由修改上述实施例在不定边界模式(nonalignedmode)读取来源端的方式来做加强,使得在实施上可以更进一步加快传输效率。
请参照图2,以不定边界模式来说,对存储器作读取的动作并不会改变存储器内容。依据现今标准,在总线中必须选择「字节读取」、「半字符读取」以及「字符读取」三种之一。以图1为例,若想读取来源端220的数据A1-A7与数据B3-B4,直接存储器存取控制器200可以用三次「字符读取」来读取来源端220的数据。亦即,来源端220发送出的来源数据地址Sra与宽度Srs分别为(0x00,word)、(0x04,word)、(0x08,word)。实际在来源地址与宽度产生器212中所传递的数据地址与宽度是(0x02,halfword)、(0x04,word)、(0x08,3bytes)。其中3bytes是较先前增加的另一种数据宽度传输模式,即每次以三个字节做为传输单位。
因此,来源地址与宽度产生器212必需将其内部所传递地址的最后两个位更改为00b以输出给来源端220,也就是全部对齐到字符边界(所以0x02->0x00,0x04->0x04,0x08->0x08)。然后,来源端220与直接存储器存取控制器200之间一律以「字符读取」来传递数据,结果就会是(0x00,word)、(0x04,word)、(0x08,word)。而在来源地址与宽度产生器212中实际传递的是(0x02,halfword)、(0x04,word)、(0x08,3bytes)。
再以图5读取A8-A11为例,在来源地址与宽度产生器212中所传递的是(0x0d,3bytes)、(0x10,byte),然而在来源端总线220上所传递的来源数据地址Sra与宽度Srs却是(0x0c,word)、(0x10,word)。因此,这种实施例是由来源地址与宽度产生器212丢出一个调整过后的来源数据地址Sra与宽度Srs到来源端220中取得数据,然后在来源地址与宽度产生器212内部根据真正的地址与宽度将真正需要的数据暂存到先进先出缓冲器216中。此种方法只有在读取的时候使用,在写入数据至目的地端222时还是依据先前所述实施例的动态调整方式来进行数据写入。
综上所述,本发明依据传输数据的数据地址,以决定传输数据的数据宽度传输模式。因此,本发明的动态调整传输数据宽度的方法与直接存储器存取控制器,可以使用最佳的数据宽度传输。藉此,不仅可以节省提高传输效率,更可以符合实际上的需求。
虽然本发明已以较佳实施例揭露如上,然其并非用于限定本发明,任何熟习此技艺者,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,因此本发明的保护范围当视本发明的申请专利范围所界定者为准。
Claims (15)
1. 一种动态调整传输数据宽度的方法,包括:
检测一传输数据的一数据笔数;
依据该传输数据的数据地址,以决定该传输数据的一数据宽度传输模式,其中,该数据宽度传输模式包括一第一传输模式以及一第二传输模式;以及
依据该传输数据的数据地址、该数据宽度传输模式与该数据笔数以传输数据。
2. 如权利要求1所述的动态调整传输数据宽度的方法,其中,该数据笔数至少包括一连续数据笔数。
3. 如权利要求1所述的动态调整传输数据宽度的方法,其中,该数据笔数等于0,则表示该传输数据已完成传输。
4. 如权利要求1所述的动态调整传输数据宽度的方法,更包括设定多数个参数的起始值,其中,该些参数包括该总数据笔数、连续数据笔数、相邻连续数据段起始地址之间的距离、一传输数据的起始数据地址以及一传输数据的目的地数据地址。
5. 如权利要求1所述的动态调整传输数据宽度的方法,其中,该数据宽度传输模式更包括一第三传输模式。
6. 如权利要求5所述的动态调整传输数据宽度的方法,其中,该第一传输模式、该第二传输模式与该第三传输模式分别为字符传输模式、半字符传输模式以及字节传输模式。
7. 如权利要求6所述的动态调整传输数据宽度的方法,其中,决定该传输数据的数据宽度传输模式包括下列步骤:
当该传输数据的数据地址位于字符边界,则以字符传输模式为该数据宽度传输模式;
当该传输数据的数据地址位于半字符边界,则以半字符传输模式为该数据宽度传输模式;以及
当该传输数据的数据地址位于字节边界,则以字节传输模式为该数据宽度传输模式。
8. 如权利要求1所述的动态调整传输数据宽度的方法,更包括检测该连续数据是否已完成传输。
9. 如权利要求8所述的动态调整传输数据宽度的方法,其中,
若该连续数据还没完成传输,则该传输数据的数据地址加上上一笔已传输数据宽度;以及
若该连续数据还没完成传输,则该连续数据笔数和该总数据笔数分别减去已传输数据宽度。
10. 如权利要求8所述的动态调整传输数据宽度的方法,其中,
若该连续数据已完成传输,则该传输数据的起始数据地址加上一相邻连续数据段起始地址之间的距离,以传输下一连续数据段;
若该连续数据已完成传输,则该传输数据的起始数据地址写入传输数据的数据地址,并重新设定连续数据笔数;以及
若该连续数据已完成传输,则该总数据笔数减去已传输数据宽度。
11. 一种计算机可读取存储媒体,用于存储一计算机程序,该计算机程序用于加载至一计算机系统中并且使得该计算机系统执行如权利要求1所述的方法。
12. 一种具有动态调整传输数据宽度的直接存储器存取控制器,包括:
一来源地址与宽度产生器,用于传送包括一传输数据的来源数据地址和来源数据宽度;以及
一目的地地址与宽度产生器,用于传送包括一传输数据的目的地数据地址和目的地数据宽度;以及
一先进先出缓冲器,耦接至该来源地址与宽度产生器以及目的地地址与宽度产生器,以暂时存放该传输数据;
其中,该传输数据的传输方式为依据该传输数据的数据地址,以决定该传输数据的一数据宽度传输模式,其中,该数据宽度传输模式包括一第一传输模式以及一第二传输模式。
13. 如权利要求12所述的具有动态调整传输数据宽度的直接存储器存取控制器,更包括一信号控制模块,耦接至该来源地址与宽度产生器和该目的地地址与宽度产生器,用于将该传输数据的信息传送至设定该来源地址与宽度产生器和该目的地地址与宽度产生器。
14. 如权利要求12所述的具有动态调整传输数据宽度的直接存储器存取控制器,其中,该数据宽度传输模式更包括一第三传输模式。
15. 如权利要求14所述的具有动态调整传输数据宽度的直接存储器存取控制器,其中,该第一传输模式、该第二传输模式与该第三传输模式分别为字符传输模式、半字符传输模式以及字节传输模式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100919069A CN101276315B (zh) | 2007-03-30 | 2007-03-30 | 动态调整传输数据宽度的直接存储器存取控制器与方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100919069A CN101276315B (zh) | 2007-03-30 | 2007-03-30 | 动态调整传输数据宽度的直接存储器存取控制器与方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101276315A true CN101276315A (zh) | 2008-10-01 |
CN101276315B CN101276315B (zh) | 2011-06-22 |
Family
ID=39995772
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007100919069A Active CN101276315B (zh) | 2007-03-30 | 2007-03-30 | 动态调整传输数据宽度的直接存储器存取控制器与方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101276315B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937330A (zh) * | 2010-09-03 | 2011-01-05 | 钰创科技股份有限公司 | 数据处理电路 |
CN113032301A (zh) * | 2021-03-23 | 2021-06-25 | 安谋科技(中国)有限公司 | 存储控制器及其片上系统以及电子设备 |
CN113360423A (zh) * | 2020-03-03 | 2021-09-07 | 瑞昱半导体股份有限公司 | 数据储存系统及操作数据储存系统的方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5524265A (en) * | 1994-03-08 | 1996-06-04 | Texas Instruments Incorporated | Architecture of transfer processor |
US5628026A (en) * | 1994-12-05 | 1997-05-06 | Motorola, Inc. | Multi-dimensional data transfer in a data processing system and method therefor |
JP3206568B2 (ja) * | 1998-10-28 | 2001-09-10 | 日本電気株式会社 | Dma制御方法及び装置 |
KR100622945B1 (ko) * | 2004-07-27 | 2006-09-19 | 재단법인서울대학교산학협력재단 | 복수 로드 스토어 명령어를 통한 코드 크기 감소 방법 |
CN100342359C (zh) * | 2004-12-24 | 2007-10-10 | 华为技术有限公司 | 采用直接存储器访问方式进行数据交换的方法 |
-
2007
- 2007-03-30 CN CN2007100919069A patent/CN101276315B/zh active Active
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937330A (zh) * | 2010-09-03 | 2011-01-05 | 钰创科技股份有限公司 | 数据处理电路 |
CN101937330B (zh) * | 2010-09-03 | 2013-01-02 | 钰创科技股份有限公司 | 数据处理电路 |
CN113360423A (zh) * | 2020-03-03 | 2021-09-07 | 瑞昱半导体股份有限公司 | 数据储存系统及操作数据储存系统的方法 |
CN113032301A (zh) * | 2021-03-23 | 2021-06-25 | 安谋科技(中国)有限公司 | 存储控制器及其片上系统以及电子设备 |
CN113032301B (zh) * | 2021-03-23 | 2023-12-29 | 安谋科技(中国)有限公司 | 存储控制器及其片上系统以及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN101276315B (zh) | 2011-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10877766B2 (en) | Embedded scheduling of hardware resources for hardware acceleration | |
EP1782218B1 (en) | Processing apparatus with burst read and write operations | |
US5727227A (en) | Interrupt coprocessor configured to process interrupts in a computer system | |
CN102053930A (zh) | 用于外围组件的命令队列 | |
US20120137090A1 (en) | Programmable Interleave Select in Memory Controller | |
KR20100053593A (ko) | 컴퓨터 시스템에서 다른 프로세서들에 대한 시스템 관리 인터럽트들을 방송하기 위한 메커니즘 | |
CN113900974B (zh) | 一种存储装置、数据存储方法及相关设备 | |
WO2023216629A1 (zh) | 异构计算中多进程管理方法及计算设备 | |
CN101276315B (zh) | 动态调整传输数据宽度的直接存储器存取控制器与方法 | |
CN101710309B (zh) | 一种基于海量数据传输的dma控制器 | |
CN114579188A (zh) | 一种risc-v向量访存处理系统及处理方法 | |
US7698475B2 (en) | DMA transfer control apparatus for performing direct memory access transfer from a transfer source to a transfer destination | |
US8458406B2 (en) | Multiple critical word bypassing in a memory controller | |
JP4855864B2 (ja) | ダイレクトメモリアクセスコントローラ | |
US7076578B2 (en) | Race free data transfer algorithm using hardware based polling | |
JP5058116B2 (ja) | ストリーミングidメソッドによるdmac発行メカニズム | |
US7818476B2 (en) | Direct memory access controller with dynamic data transfer width adjustment, method thereof, and computer accessible storage media | |
JP2009059276A (ja) | 情報処理装置およびプログラム | |
US20030177291A1 (en) | Direct access controller | |
US7272680B2 (en) | Method of transferring data between computer peripherals | |
CN109558076A (zh) | 一种可配置的虚拟spi-flash | |
CN117591468A (zh) | 一种基于分布式通用寄存器的SoC系统设计 | |
JP2002278753A (ja) | データ処理システム | |
JPS59218558A (ja) | 情報処理装置 | |
JP2011008430A (ja) | メモリ制御回路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |