公开/公告号CN101196860A
专利类型发明专利
公开/公告日2008-06-11
原文格式PDF
申请/专利权人 深圳艾科创新微电子有限公司;
申请/专利号CN200610157440.3
申请日2006-12-08
分类号G06F13/28(20060101);
代理机构
代理人
地址 518057 广东省深圳市南山区高新区科技中二路软件园一期4栋4楼406室
入库时间 2023-12-17 20:15:19
法律状态公告日
法律状态信息
法律状态
2015-01-21
未缴年费专利权终止 IPC(主分类):G06F13/28 授权公告日:20091021 终止日期:20131208 申请日:20061208
专利权的终止
2012-06-27
专利权的转移 IPC(主分类):G06F13/28 变更前: 变更后: 登记生效日:20120521 申请日:20061208
专利申请权、专利权的转移
2009-10-21
授权
授权
2008-09-10
实质审查的生效
实质审查的生效
2008-06-11
公开
公开
技术领域
本发明涉及一种能够专为在视频通信的硬件MAE(media accelerator engine多媒体加速引擎)上存取图象块优化的二维DMA传输方法。尤其涉及在MAE高速存取具有字节对齐的子图象块数据以及图象的子块数据边界超越图象边界时的一种传输方法。
背景技术
传统的DMA传输中,DMA能够和主处理器并行的处理数据,减轻处理器的负荷,并且由于是直接内存存取,传输速度比CPU存取数据的速度要快,所以一般需要大批量存取数据的时候就采用DMA方式进行传输。
但是,传统的DMA数据传输速度逐渐适应不了高带宽、高传输速率的图象视频数据传输要求,在普通的二维DMA传输下,处理字节对齐的数据传输方法是进行单字节传输,浪费了大量带宽,而且在多媒体应用中,图象视频数据是非常大的一类数据,因为这类图象是二维的。美国专利(US6292853B1)公开了一种二维DMA传输模式,在这种传输模式下,可以通过配置图象的两维的大小,指定要传输的图象,在方便配置的同时,也减少了配置的次数,加快了传输速度。然而在多媒体加速引擎的图象存取中,由于常需要取子图象块来处理,或者将处理好的子图象块存入存储器中,而这些子图象块有些是字节对齐的,若用普通的二维DMA,则会大大降低传输速度,而且在某些处理情况下,子图象块的边界不在原图象的边界内,如用普通的二维DMA传输,则会导致取数错误。
发明内容
本发明的目的在于提供一种专为MAE存取图象块数据优化的二维DMA方法,旨在提高处理字节对齐时的图象块数据传输速度,并自动补齐不在图象边界内的子图象块数据。
一种专为存取图象块优化的二维DMA传输方法,该方法包括如下的步骤:
步骤1:根据存数边和取数边的起始字节地址求得存数边和取数边的实际存数和取数的起始word地址;
步骤2:根据存数边和取数边的起始字节地址以及每一行(一维)传输数据的字节数求得每传一行数据的存数边存数次数以及取数边的取数次数;
步骤3:初始化存数边和取数边的行计数值和列计数值;
步骤4:根据存数边起始word地址和自适应FIFO状态读取存数边数据并写入自适应FIFO中;
步骤5:在步骤(4)向自适应FIFO中写入数据的同时,根据取数边word地址和自适应FIFO状态,且欲读取的有效数据字节数大于或者等于已存有效数据的字节数时,读指针读取自适应FIFO中的数据;
步骤6:存数边存完一行数据后,若自适应FIFO未满,则继续传输下一行的数据,重新开始行传输数计数,并对列计数器计数一次,读数边则继续读数;
该方法步骤(1)中所述的实际存数和取数的起始WORD地址是通过各自的字节地址除去低两位之后得到。
所述步骤3还包括如下的步骤:
根据存数边开始存入的有效数据数目和取数边开始取数需要取的有效数据字节数初始化自适应FIFO的读写指针。
所述步骤4还包括如下的步骤:
每写入一个数据对存数次数记一次数,并更新自适应FIFO写指针。
所述步骤5还包括如下的步骤:
读完数据后更新取数次数和自适应FIFO读指针以及自适应FIFO状态。
所述步骤6还包括如下的步骤:
若读完一行,则重新开始行传输计数,并对列计数器计数一次,直到所有数据传输完成。
MAE在处理图象的时候,需要取其中的子图像块进行处理,然而有的子图像块超出了图像边界,超出图象边界的这部分数据如果按照普通的二维DMA的取数方法只能取到错误的数据。
一种专为存取图象块优化的二维DMA传输方法,其特征在于:所述该方法采用自动补齐技术对超出图像边界的子图像块进行取数,包括如下的具体步骤:
步骤1:使用平面坐标确定一个图象,将图象上的每一个点用平面坐标表示其位置;
步骤2:用起始点坐标和子图象宽度及高度确定所需传输的子图象块;
步骤3:根据子图象块所要传输的点的坐标确定子图象块点所在的区域,再根据子图象块点所在的区域,采用不同的补齐方法;
步骤4:对子图象块所有待传输的点,重复上述步骤(3),每次处理四个点直至取完该子图象块数据。
上述步骤(3)所述的根据子图象块所要传输的点的坐标确定子图象块点所在的区域,再根据子图象块点所在的区域,采用不同的补齐方法,其特征在于:该方法具体为:若子图象块点的坐标不在图象区域内,则取最靠近该点图象边界的四个字节数据;其中,
若子图象块点在图象的左边或者右边区域,则对取过来的四个字节数据只采用一个临近图象边界的字节做为补齐数;
若子图象块点在图象的正上方或者正下方,则取过来的四个字节的数据都作为补齐数,即存入FIFO的四个字节数据就是取到的数。
本发明的显著意义在于:
本发明公开了一种专为MAE高速存取图象块数据的二维DMA传输方法,该方法适应MAE存取数据高速度的要求,使用一种自适应FIFO计数,自动补齐不在图象边界内的子图象块数据,在字节对齐的数据传输时能有效的提高传输速度,最大时可以将传输速度提高四倍。使用在MAE处理中取子图象块参考帧等应用时子图象块点不在图象区域时的自动补齐方法,可以保证处理数据存取的正确性和MAE处理的正确性。
附图说明
图1是一个带有MAE二维DMA的系统框图;
图2是四种不同的字节对齐的块数据在内存中存和取的情况示意图;
图3是自动比较FIFO的示意图,其中左边标志的是写指针,右边标志的是读指针;
图4是在内存中的图象和子图象块的抽象示意图。
具体实施方式
下面结合附图,对本发明所述方法进行更为详细的说明。
图1是本发明所述方法的系统框图,在该系统中,DMA在被配置好寄存器参数后,控制数据经过中间的FIFO存取。
当待传输的数据是字节对齐的时候,也就是其地址的低两位不是0的时候,采用16个字节的自适应FIFO来处理数据的传输。图3就是16字节的自适应FIFO示意图,图2是典型的四种字节对齐的不同情况,具体的字节对齐处理方式如下:
首先假设取数边起始地址的低两位为g,要取的二维数据的行宽低两位为g1,其他高位为g2,取数数目为g3,存数边的起始地址的低两位为s,要存的二维数据的行宽低两位为s1,其他高位为s2,存数数目为s3。使用自适应FIFO处理字节对齐的高速传输包括如下步骤:
步骤1:根据存数边和取数边的起始字节地址求得存数边和取数边的实际存数和取数起始word地址。它们分别是各自的字节地址除去低两位之后得到;
步骤2:根据存数边和取数边的起始字节地址以及每一行(一维)传输数据的字节数求得每传一行数据存数边的存数次数以及取数边的取数次数;其中
存数次数的确定:如果s等于0,s1等于0,则存数次数s3=s2,如果s不等于0,s1不等于0,且s+s1大于4,则存数次数s3=s2+2,其他情况下存数次数s3=s2+1;
取数次数的确定:如果g等于0,g1等于0,则取数次数g3=g2,如果g不等于0,g1不等于0,且g+g1大于4,则取数次数g3=g2+2,其他情况下取数次数g3=g2+1。
附图2是典型的四种字节对齐的不同情况,下面分别说明这四种情况下各自的存数次数和取数次数:
附图2:(a)情况下的存数次数和取数次数都是3次,(b)情况下的存数次数和取数次数都是4次,(c)情况下的存数次数是3,取数次数是4,(d)情况下的存数次数是4,取数次数是3。
步骤3:初始化存数边和取数边的行计数值和列计数值;初始化自适应FIFO的读写指针,如图3所示,读写指针并不是指向同一处,这样可以保证冗余数据不会影响有效数据存取。其中
步骤3.1:存数边和取数边的行计数初始值就等于步骤(2)中的行存数次数和行取数次数,列初始值都等于要传的数据的列数目;
步骤3.2:写指针的初始化:第一次传输之前,写指针指向0000;
步骤3.3:读指针的初始化:如果s大于或等于g,第一次读FIFO数据的时候指针为(g-s),如果s小于g,则为(16+g-s);
下面结合附图2来说明步骤3所述的具体的初始化过程。在图2中:a情况下初始写指针是0000,初始读指针也是0000,第一次存入的数据的第一个字节将是冗余的无效数据,读出的第一个字节也是冗余无效的;b情况下存数边指针是0000,第一次存的数前三个字节都是冗余数据,取数边的指针是0001,这样才能保证第一次取数前两个字节都是冗余数据;c情况下存数边初始指针是0000,读数边初始指针是1110,这样才能保证读到两个有效数据存入需要的word地址;d情况下初始写指针是0000,初始读指针则是0011,这样才能从有效数据开始读取。
步骤4:根据存数边起始word地址和自适应FIFO状态读取存数边数据写入自适应FIFO中,如果FIFO有最少四个字节的空位置,那么就根据存数边起始地址开始读数据写入FIFO,否则,就等待。每写入一个数据对存数次数记一次数,即减去1,并对自适应FIFO写指针更新即增加4。
步骤5:在向自适应FIFO写入数据的同时,根据取数边起始word地址和自适应FIFO状态,在欲读取的有效数据字节数小于或者等于已存有效数据字节数时,再发读使能信号读取数据,读完后更新取数次数和自适应FIFO读指针以及自适应FIFO状态。这时读指针的更新直接增加4就可以。
下面结合附图2来介绍具体该在什么时候才能读,即读使能信号什么时候才能有效,以及读指针怎么变化。在图2中:a情况下,写和读只要同步进行就可以了,因为两边的情况完全一样;b情况下,第一次取数必须要取到两个有效数,而第一次存数只能存入一个有效数,所以必须等存数边存入两个数之后再取数,即必须保证要取的有效数据的字节数小于已经存入的有效数据字节数,而且取下一个数必须等再次写入一个数才能取,直到最后一个数写入,再连发两次读使能,保证读完所有有效数据,当然;c情况下写入一次数据就可以开始读数据了;d情况下则要等存数边存完第二次数才能开始取数,读第二个数必须等三个数存入,直到最后一个数存入,再连发两次读使能信号,保证数据能读完,。
步骤6:存数边存完一行数据后,只要自适应FIFO不是满的,则开始下一行的数据传输,重新开始行传输数计数,并对列计数器计数一次,读数边则继续读数,若读完一行,则重新开始行传输计数,并对列计数器计数一次,直到所有数据传输完成。另外,对自适应FIFO的读写指针必须进行重新定位。具体的重新定位方法是:
如果存数数目s3等于取数数目g3,那么读写指针的重定位都是跟行内数据传输时变化一样,即增加4;如果存数数目s3大于取数数目g3,则取数的读指针重定位的时候需要增加8个字节的单位,而存数边的指针则仍然是增加4;如果存数数目s3小于取数数目g3,则存数的写指针重定位的时候需要增加8,取数的读指针则是增加4。
当传输的子图象的范围超出图象边界的时候,采用自动补齐技术,如附图4所示,具体的步骤如下:
步骤1:使用坐标模式确定一个图象,把图象的第一个点确定为坐标原点,图象的行方向定为x轴,列方向定为y轴,图象上的每一个点都用坐标(x,y)来表示,在图4中,标出了x轴和y轴。
步骤2:对要传输的子图象块,当图象确定下来之后,用起始点坐标和子图象宽度以及高度来确定要传输的子图象块。图4中的区域6就是图象的区域,它的地址是连续的,每一行的行尾地址跟下一行的行首地址是连续的,子图象块则不一定。
步骤3:根据子图象块要传输的点的坐标确定子图象块的点所在的区域,再根据子图象块点所在的区域,采用不同的补齐方法,其中
(a)图象在区域1中时:取图象的左下的点值补齐所有区域1中的点的值,也即是坐标点为(0,0)点的值;
(b)图象在区域2中时:取图象的下边界的点值来补齐相应的值,采用坐标点(x,0),(x+1,0),(x+2,0),(x+3,0)四点的值;
(c)图象在区域3中时:取图象的右下的点值来补齐区域3中的点值,也即是坐标点(x行宽,0)来补齐;
(d)图象在区域4中时:取图象的左边界的点值来补齐区域4中的点值,也即是坐标点(0,y)的点值来补齐;
(e)图象在区域5中时:取图象的左上边界的点值来补齐区域5中的点值,也即是坐标点(0,y方向图象宽度)点值来补齐;
(f)图象在区域6中时:不需要补齐;
(g)图象在区域7中时:取图象的上边界的点值来补齐区域7中的点值,也即是坐标点(x,y图象宽度),(x+1,y图象宽度),(x+2,y图象宽度),(x+3,y图象宽度);
(h)图象在区域8中时:取图象右边界点值来补齐区域8中点值,也即是坐标点(x行宽,y)的点值来补齐;
(i)图象在区域9中时:取图象右上的点值来补齐区域9中的点值,也即是坐标点(x行宽,y图象宽度)来补齐所有区域9的数据点值。
步骤(4)对子图象块的待传输的所有的点,重复3的步骤,每次处理四个点,直到该子图象块数据取完。
本发明所用的实例只是用来对本发明所述方法的一种解释说明,并不代表本发明所要保护的范围仅限于此,凡采用本发明中所提及的方法,或者采用对本发明所述方法中的某些步骤进行替换,均在本发明所要求的保护范围,从事本行业的技术人员对此应予理解。
机译: 一种使用预指令对DMA指令进行预加载的DMA数据传输方法
机译: 信息处理设备,信息处理方法,用于执行该信息处理方法的程序,存储该程序的存储介质,DMA控制器,DMA传输方法,用于执行该DMA传输方法的程序以及存储该程序的存储介质
机译: 信息处理器,信息处理方法,用于实施此信息处理方法的程序,用于记录该程序的介质,DMA控制器,DMA传输方法,用于实施此DMA传输方法的程序以及用于记录该程序的介质