存储器的存取方法

文档序号:6463677阅读:208来源:国知局

专利名称::存储器的存取方法
技术领域
:本发明涉及一种存储器的存取方法,尤其涉及一种将以数据流方式输入数据、以数据块方式输出数据的存取方法。
背景技术
:图像数据是以逐行扫描形成的数据流的形式来表示的,但是大多数图像处理的标准算法(如JPEG,M-JPEG,DV,MPEG2orMPEG4,H.261orH.263)都是采用以数据块为单位的编码技术。在图像处理的过程中,要先把数据流形式的图像数据存储起来,然后再以数据块为单位输出到编码器中,因此,就需要先以数据流方式将数据输入存储器中,再以数据块方式从存储器中输出数据。现有的存取方法一般是采用包括两块相同大小缓存的存储器,该两块缓存交替用于写入、读取数据。以JPEG标准格式的数据为例,根据JPEG的协议,编码时要求数据以8X8的数据块为单位进行前向离散余弦变换(ForwardDiscreteCosineTransformation),—般就需要每块缓存8行,共16行(第0到15行)的存储器,具体的存取顺序如下1)以逐行逐列方式在07行依次写入数据;2)以逐行逐列方式在815行依次写入数据,从07行以8X8的数据块为单位逐行逐列读取数据,即先读取{0~7;0~7}(行;列)数据块,然后依次读取{0~7;8~15}数据块、{0~7;16~23}数据块......,将0~7行数据全部读取完毕;由于写入数据和读取数据的速度是相同的,在读完07行的数据时,也刚好写完815行的数据。3)以逐行逐列方式在0~7行依次写入数据,从8~15行以8X8的数据块为单位逐行逐列读取数据,即先读取{815;07}(行;列)数据块,然后依次读取{8~15;8~15}数据块、{8~15;16~23}数据块......,将8~15行数据全部读取完毕,回到步骤2)。其中,由于每个像素的数据需要两个字节来表示,为了便于说明,就把存储器中行列中的每个单元的数据定义为两个字节,而不是一个字节。以VGA图像为例,像素值为640X480,就需要16行,每行640个像素的存储器,而每个像素需要两个字节,因此需要640X16X2=20480个字节。图1A-1F为现有的存取方法的具体步骤的示意图。为了便于说明,图1A-1F中每一个小格都代表两个字节,代表一个像素的数据。图1A是初始写入的状态,从第0行、第O列开始,沿着第O行写入。图1B是07行快写完的状态。图1C是开始写第8行,与此同时,开始进行数据的读取,读取是以8X8个像素组成的数据块为单位逐行逐列进行读取,即先读取{0~7;0~7}(行;列)数据块,再读取{07;8~15}数据块。图1D是8-15行快写完的状态,此时,0~7行也快读完了,读到最后的{0~7;632~639}数据块。图1E是又重新从第0行、第O列开始写入,与此同时,从第8~15行以8X8数据块为单位逐行逐列进行读取,先读{8~15;0~7}(行;列)数据块,再读{815;8~15}数据块。图1F是07行快写完、同时8~15行也快读完的状态,读到最后的{8~15;632~639}数据块。从上面的步骤可以看出,现有的存取方法是对两块缓存进行轮流读写,因此需要占用的缓存比较大。随着图像技术的发展,图像分辨率也越来越高,所需要的缓存的字节数也越来越多,这样在一些存储器容量不太够的情况下就无法实现图像数据的存取,而且为了实现高分辨率图像数据的存取,硬件成本也相对比较高。表1是几种常见的图像大小与所需的存储器的字节数的数据。<table>tableseeoriginaldocumentpage5</column></row><table>从表1的数据可以看出,对于分辨率比较高的图像,存取所需要的存储器的字节数还是相当可观的。因此对于分辨率比较高的图像,就需要一种更有效地利用缓存的存取方法,能够节省缓存字节。
发明内容本发明的目的在于,提供一种能够更有效地利用缓存的存取方法,使对于同样分辨率的图像,所需要的存储器的字节数能减少一半。本发明提供了一种存储器的存储方法,用于以数据流方式输入数据,以nXn的数据块方式输出数据,存储器的大小为n行XA列(0~n-l;0~A-1),其中n为图像处理算法所能处理的数据块的每行/每列的数据数,A大于等于图像水平分辨率值B,且A为nXn的整数倍,其中,将存储器分为n行Xn区,每个区包含A/n列,并按以下步骤进行存取1)以逐行逐列方式在第0~n-2行依次在所有区的前B/n列写入数据;2)在第n-l行逐列在所有区的前B/n列写入数据,以每次逐行依序读取n列数据的方式读取第0区的前B/n列的数据,读取的数据构成nXn的数据块;3)以逐区逐行方式在第0n-2区的前B/n列依次写入数据,以每次逐行依序读取n列数据的方式逐区读取第1n-l区的前B/n列的数据,读取的数据构成nXn的数据块,在第k区写数据,在k+l区读数据,k=0~n-2;4)在第n-l区的前B/n列逐行写入数据,以每次逐区依序读取n列数据的方式读取第0行中各区的前B/n列的数据,读取的数据构成nXn的数据块;5)以逐行逐列方式在第0~n-2行依次在所有区的前B/n列写入数据,以每次逐区依序读取ii列数据的方式逐行读取第ln-l行中各区的前B/n列的数据,读取的数据构成nXn的数据块,在第k行写数据,在k+l行读数据,k=0~n-2,回到步骤2)。本发明还提供了一种存储器的存取方法,用于以数据流方式输入数据,以nXn的数据块方式输出数据,存储器的大小为n行XA列(0~n-l;0~A-1),其中n为图像处理算法所能处理的数据块的每行/每列的数据数,A大于等于图像水平分辨率值B,且A为nXn的整数倍,其中,将存储器分为n行Xn区,每个区包含A/n列,并按以下步骤进行存取1)以逐区逐行方式在第0n-2区的前B/n列依次写入数据;2)在第n-l区的前B/n列逐行写入数据,以每次逐区依序读取n列数据的方式读取第0行中各区的前B/n列的数据,读取的数据构成nXn的数据块;3)以逐行逐列方式在第0~n-2行依次在所有区的前B/n列写入数据,以每次逐区依序读取n列数据的方式逐行读取第1n-l行中各区的前B/n列的数据,读取的数据构成nXn的数据块,在第k行写数据,在k+l行读数据,k=0~n-2;4)在第n-l行逐列在所有区的前B/n列写入数据,以每次逐行依序读取n列数据的方式读取第0区的前B/n列的数据,读取的数据构成nXn的数据块;5)以逐区逐行方式在第0n-2区的前B/n列依次写入数据,以每次逐行依序读取n列数据的方式逐区读取第1n-l区的前B/n列的数据,读取的数据构成nXn的数据块,在第k区写数据,在k+l区读数据,k=0~n-2,回到步骤2)。通过合理设计读取的顺序,就不需要对两块同样大小的缓存进行轮流读取,就可以在一块缓存上进行读取,有效地利用了缓存,节省了所需要的字节数。图lA-图1F是现有的存取方法具体步骤的示意图2是本发明的一个实施方式的存取方法的流程图3A-图3I是本发明的存取方法的具体实施例的步骤的示意图4是本发明的另一个实施方式的存取方法的流程图。具体实施例方式现结合附图和实施例对本发明作进一步的描述。现以将VGA图像数据存入,输出要以JPEG算法进行处理的数据为例,说明本发明的存取方法的具体步骤。JPEG数据编码时要求数据以8X8的数据块为单位进行前向离散余弦变换(ForwardDiscreteCosineTransformation),就需要每次输出8X8的数据块。按照现有的存取方法,对于VGA图像(640X480),就需要两块8X640X2个字节的缓存,而用本发明的存取方法,就只需要一块8X640X2个字节的缓存。存储器大小为n行XA列,其中n为图像处理算法的所能处理的数据块的每行/每列的像素数,JPEG处理方法所能处理的为8X8的数据块,即n二8。A大于等于图像格式中水平分辨率值B(水平像素数),VGA数据为640X480,即B二640。在该实施例中存储器的大小为8行X640列,即A二640,其中,由于每个像素的数据需要两个字节来表示,为了便于说明,就把存储器中两个字节称为一个单元,而不是一个字节称为一个单元。图2是本发明的一个实施方式的存取方法的流程图。图3A-图31是该具体实施方式的存取方法的步骤的示意图。下面将结合图2、图3A-图31具体说明本发明的一个实施方式的存取方法。本发明的一个实施方式的存取方法将存储器分为n行Xn区,在该实施例中即为8行X8区,每个区包含80列,并按以下步骤进行存取1)以逐行逐列方式在第0n-2行依次在所有区的前B/n列写入数据(步骤201),即如图3A、图3B所示以逐行逐列的方式在第0~6行依次写入第0~7区的前640/8=80列的数据。如A〉B,即如果存储器的列数超过640,那么06行每个区中第79列以后的单元就不写入数据。2)在第n-l行逐列在所有区的前B/n列写入数据,以每次逐行依序读取n列数据的方7式读取第0区的前B/n列的数据,读取的数据构成nXn的数据块(步骤202),即如图3C所示,在第7行所有区的前80列写入数据,如果存储器的列数超过640,那么第7行每个区中第79列以后的单元就不写入数据。并且开始在第O区读取数据,从图3D可以看出,在第O区读取数据时,先逐行读取07列的数据,构成{0-7;0-7}(行;歹U)数据块,然后逐行读取8~15列的数据,构成{0~7;8~15}数据块...,直到72~79歹ij,构成{07;72~79}数据块。如果存储器的列数超过640,那么第0区中每行第79列以后的单元中并没有数据写入,在读取时也不从这些单元读取数据。3)以逐区逐行方式在第0n-2区的前B/n列依次写入数据,以每次逐行依序读取n列数据的方式逐区读取第1n-l区的前B/n列的数据,读取的数据构成nXn的数据块,在第k区写数据,在k+l区读数据,k=0~n-2(步骤203),即如图3E所示,从第0区开始,逐区逐行在第06区的前80列写入数据,第0区第0行,第0区第1行....第0区第7行,然后第1区第0行,第l区第l行...依次写入,直到第6区第7行。如果存储器的列数超过640,那么每个区每行的第79列以后的单元就不写入数据。如图3F所示,在第O区写入数据,在第1区,以每次逐行依序读取8列数据的方式逐区读取第17区前80列的数据,每次读取的数据构成8X8的数据块,读取数据的具体方式与步骤2)中的相似。在第l区写入数据,在第2区,读取数据....在第6区写入数据,在第7区读取数据。如果存储器的列数超过640,那么17区每行第79列以后的单元并没有数据写入,在读取时也不从这些单元读取数据。4)在第n-l区的前B/n列逐行写入数据,以每次逐区依序读取n列数据的方式读取第0行中各区的前B/n列的数据,读取的数据构成nXn的数据块(步骤204),如图3G所示,第7区的前80列逐行写入数据,写入数据的具体方式与步骤3)中类似,如果存储器的列数超过640,在第7区的每行第79列以后的单元就不写入数据。并且在第O行读取数据,如图3H所示,第O行读取数据的方式为每次在第0-第7区依序取8列数据,构成8X8的数据块,即第一次在第0第7区分别取第0-7列的数据,构成8X8的数据块,第二次在第0~第7区依序取第8-15列的数据,构成8X8的数据块...第十次在第0-第7区分别取第72-79列的数据,构成8X8的数据块。如果存储器的列数超过640,那么第O行中每区第79列以后的单元中并没有数据写入,在读取时也不从这些单元读取数据。5)以逐行逐列方式在第0~n-2行依次在所有区的前B/n列写入数据,以每次逐区依序读取n列数据的方式逐行读取第1n-l行中各区的前B/n列的数据,读取的数据构成nXn的数据块,在第k行写数据,在k+l行读数据,k=0~n-2,回到步骤2)(步骤205)。如图3I所示,在第06行依次在07区的前80列写入数据,如果存储器的列数超过640,那么每行每个区中第79列以后的单元就不写入数据。在17行以每次逐区依序读取8列数据的方式逐行读取第17行中各区前80列的数据,每次读取的数据构成8X8的数据块,在各行中读取数据的方式与步骤4)中的类似。如果存储器的列数超过640,那么第l7行中各区第79列以后的单元中并没有数据写入,在读取时也不从这些单元读取数据。在第6行数据写完以后,回到图3C的状态,开始往复循环。由于读取数据和写入数据的速度是相同的,上述各步骤中的读取数据和写入数据的动作一般都是同时完成的。当数据写入有延迟时,数据读取也相应延迟,另外,由于在数据输入时,每写入一行就会有一个间隙,因此数据输出如有一定延迟,也不会影响数据的输入。也就是说,步骤2)、3)、4)、5)中的读取数据的动作可以分别与各自步骤的写入数据的动作同步,也可以分别滞后于各自步骤的写入数据的动作,只要不会在同一单元同时进行数据的读取和写入即可。从上面的具体实施例可以看出,通过合理设计存取顺序,能只用一块8X640X2个字节的缓存,就实现VGA图像数据的存取,有效地利用了缓存,节省了所需要的字节数。另外,从上面的说明可以看出,本发明的存取方法只适用于水平分辨率值为nXn的整数倍的图像格式,对于水平分辨率值不是nXn的整数倍的图像格式,分辨率一般都比较低,即使用现有的存取方法,也不需要很多存储器的字节数,对于分辨率比较高的图像格式,一般都是nXn的整数倍,使用了本发明的存取方法后,使存储器的字节数能比用现有的方法减少一半。从上面的说明可以看出,本发明的思路在于读写各有两种状态,通过循环采用这两种读写状态,实现了有效利用缓存,节省了存储器成本的发明目的。从上述的步骤可以看出,上述步骤2)、3)表示一种读写状态,4)5)表示另一种读写状态,步骤2)、3)、4)、5)构成一个循环。上面的实施例是从逐行逐列写的状态开始循环,本领域的技术人员很容易想到,本发明的步骤还可以从逐区逐行写的方式开始循环。图4是本发明的另一个实施方式的存取方法的流程图,下面结合图4具体说明本发明的另一个实施方式的存取方法的步骤1)以逐区逐行方式在第0n-2区的前B/n列依次写入数据(步骤401),如图3E所示,从第0区开始,逐区逐行在第06区的前80列写入数据,第0区第0行,第0区第l行….第0区第7行,然后第1区第0行,第l区第l行...依次写入,直到第6区第7行。如果存储器的列数超过640,那么每个区每行的第79列以后的单元就不写入数据。92)在第n-l区的前B/ii列逐行写入数据,以每次逐区依序读取n列数据的方式读取第0行中各区的前B/n列的数据,读取的数据构成nXn的数据块(步骤402),如图3G所示,第7区的前80列逐行写入数据,写入数据的具体方式与步骤l)中类似。请求在第O行读取数据,如图3H所示,第O行读取数据的方式为每次在第0-第7区依序取8列数据,构成8X8的数据块,即第一次在第0第7区分别取第07列的数据,构成8X8的数据块,第二次在第0第7区依序取第8-15列的数据,构成8乂8的数据块...第十次在第0-第7区分别取第7279列的数据,构成8X8的数据块。如果存储器的列数超过640,那么第0行中每区第79列以后的单元中并没有数据写入,在读取时也没有从这些单元读取数据。3)以逐行逐列方式在第0n-2行依次在所有区的前B/n列写入数据,以每次逐区依序读取n列数据的方式逐行读取第1n-l行中各区的前B/n列的数据,读取的数据构成nXn的数据块,在第k行写数据,在k+l行读数据,k=0~n-2(步骤403)。如图3I所示,在第06行依次在07区的前80列写入数据,如果存储器的列数超过640,那么每行每个区中第79列以后的单元就不写入数据。在17行以每次逐区依序读取8列数据的方式逐行读取第17行中各区前80列的数据,每次读取的数据构成8X8的数据块,在各行中读取数据的方式与步骤2)中的类似。如果存储器的列数超过640,那么第17行中各区第79列以后的单元中并没有数据写入,在读取时也不从这些单元读取数据。4)在第n-l行逐列在所有区的前B/n列写入数据,以每次逐行依序读取n列数据的方式读取第0区的前B/n列的数据,读取的数据构成nXn的数据块(步骤404),即如图3C所示,在第7行所有区的前80列写入数据,如果存储器的列数超过640,那么第7行每个区中第79列以后的单元就不写入数据。并且开始在第O区读取数据,从图3D可以看出,在第O区读取数据时,先逐行读取07行的数据,构成{0~7;0~7}(行;歹ij)数据块,然后逐行读取8~15行的数据,构成{0~7;8~15}数据块...,直到72~79列,构成{0~7;72~79}数据块。如果存储器的列数超过640,那么第0区中每行第79列以后的单元中并没有数据写入,在读取时也没有从这些单元读取数据。5)以逐区逐行方式在第0n-2区的前B/n列依次写入数据,以每次逐行依序读取n列数据的方式逐区读取第1n-l区的前B/n列的数据,读取的数据构成nXn的数据块,在第k区写数据,在k+l区读数据,k=0~n-2,回到步骤2)(步骤405),即如图3E所示,从第0区开始,逐区逐行在第06区的前80列写入数据,第0区第0行,第0区第1行....第0区第7行,然后第1区第0行,第l区第l行...依次写入,直到第6区第7行。如果存储器的列数超过640,那么第06区每行的第79列以后的单元就不写入数据。如图3F所示,在第0区写入数据,在第1区,以每次逐行依序读取8列数据的方式逐区读取第l7区前80列的数据,每次读取的数据构成8X8的数据块,读取数据的具体方式与步骤4)中的相似。在第l区写入数据,在第2区,读取数据.…在第6区写入数据,在第7区读取数据。如果存储器的列数超过640,那么17区每行第79列以后的单元并没有数据写入,在读取时也不从这些单元读取数据。写完第6区以后,就回到图3G的状态,往复循环。由于读取写数据和写入数据的速度是相伺的,上述各步骤中的读取数据和写入数据的动作一般都是同时完成的。当数据写入有延迟时,数据读取也相应延迟,另外,由于在数据输入时,每写入一行就会有一个间隙,因此数据输出如有一定延迟,也不会影响数据的输入。也就是说,步骤2)、3)、4)、5)中的读取数据的动作可以分别与各自步骤的写入数据的动作同步,也可以分别滞后于各自步骤的写入数据的动作,只要不会在同一单元同时进行数据的读取和写入即可。上述仅为本发明的较佳实施例,并非用来限定本发明的保护范围。本发明应由所附权利要求加以限定。权利要求1.一种存储器的存取方法,用于以数据流方式输入数据,以n×n的数据块方式输出数据,存储器的大小为n行×A列(0~n-1;0~A-1),其中n为图像处理算法所能处理的数据块的每行/每列的数据数,A大于等于图像水平分辨率值B,且A为n×n的整数倍,其特征在于,将存储器分为n行×n区,每个区包含A/n列,并按以下步骤进行存取1)以逐行逐列方式在第0~n-2行依次在所有区的前B/n列写入数据;2)在第n-1行逐列在所有区的前B/n列写入数据,以每次逐行依序读取n列数据的方式读取第0区的前B/n列的数据,读取的数据构成n×n的数据块;3)以逐区逐行方式在第0~n-2区的前B/n列依次写入数据,以每次逐行依序读取n列数据的方式逐区读取第1~n-1区的前B/n列的数据,读取的数据构成n×n的数据块,在第k区写数据,在k+1区读数据,k=0~n-2;4)在第n-1区的前B/n列逐行写入数据,以每次逐区依序读取n列数据的方式读取第0行中各区的前B/n列的数据,读取的数据构成n×n的数据块;5)以逐行逐列方式在第0~n-2行依次在所有区的前B/n列写入数据,以每次逐区依序读取n列数据的方式逐行读取第1~n-1行中各区的前B/n列的数据,读取的数据构成n×n的数据块,在第k行写数据,在k+1行读数据,k=0~n-2,回到步骤2)。2.—种存储器的存取方法,用于以数据流方式输入数据,以nXn的数据块方式输出数据,存储器的大小为n行XA列(0n-l;0~A-O,其中n为图像处理算法所能处理的数据块的每行/每列的数据数,A大于等于图像水平分辨率值B,且A为nXn的整数倍,其特征在于,将存储器分为n行Xn区,每个区包含A/n列,并按以下步骤进行存取1)以逐区逐行方式在第0n-2区的前B/n列依次写入数据;2)在第n-l区的前B/n列逐行写入数据,以每次逐区依序读取n列数据的方式读取第0行中各区的前B/n列的数据,读取的数据构成nXn的数据块;3)以逐行逐列方式在第0~n-2行依次在所有区的前B/n列写入数据,以每次逐区依序读取n列数据的方式逐行读取第1n-l行中各区的前B/n列的数据,读取的数据构成nXn的数据块,在第k行写数据,在k+l行读数据,k=0~n-2;4)在第n-l行逐列在所有区的前B/n列写入数据,以每次逐行依序读取n列数据的方式读取第0区的前B/n列的数据,读取的数据构成nXn的数据块;5)以逐区逐行方式在第0n-2区的前B/n列依次写入数据,以每次逐行依序读取n列数据的方式逐区读取第1n-l区的前B/n列的数据,读取的数据构成nXn的数据块,在第k区写数据,在k+l区读数据,k=0~n-2,回到步骤2)。3.如权利要求1或2所述的存储器的存取方法,其特征在于,其中n二8。4.如权利要求1或2所述的存储器的存取方法,其特征在于,在数据输入有延迟时,数据输出也有延迟。5.如权利要求1或2所述的存储器的存取方法,其特征在于,其中步骤2)、3)、4)、5)中的读取数据的动作分别与各自步骤的写入数据的动作同步或分别滞后于各自步骤的写入数据的动作。全文摘要本发明提供了一种存储器的存取方法,包括1)以逐行逐列方式在第0~n-2行依次在所有区的前B/n列写入数据;2)在第n-1行逐列在所有区的前B/n列写入数据,以每次逐行依序读取n列数据的方式读取第0区的前B/n列的数据;3)以逐区逐行方式在第0~n-2区的前B/n列依次写入数据,以每次逐行依序读取n列数据的方式逐区读取第1~n-1区的前B/n列的数据;4)在第n-1区的前B/n列逐行写入数据,以每次逐区依序读取n列数据的方式读取第0行各区的前B/n列的数据;5)以逐行逐列方式在第0~n-2行的前B/n列依次在所有区写入数据,以每次逐区依序读取n列数据的方式逐行读取第1~n-1行各区的前B/n列的数据,回到步骤2)。通过这种方法,提供一种有效地利用缓存的存取方法。文档编号G06T1/60GK101599167SQ200810109420公开日2009年12月9日申请日期2008年6月3日优先权日2008年6月3日发明者余纯杰,叶文韬,小田口宏史,森本刚申请人:株式会社理光
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1