【背景技术】
宽带应用成为了近两年手持设备的应用趋势,基于虚拟显示和实时3D技术的宽带应用已经逐步走进了家庭,网上在线听音乐,视频聊天,在线影视等成为了许多现代人网上娱乐的新宠,网络多媒体应用更加受到网络用户越来越多的关注。同时,越来越多的应用程序对处理器的运算能力以及内存的容量都提出了极高的要求。在这种情况下,以往的32位计算平台在此类复杂应用中已经显得力不从心,许多用户已经在开始抱怨服务器的迟缓。64位数据位宽的硬件平台为这一问题的解决提供了契机,64位技术可以突破这两大限制,不仅使得处理器的计算能力有了更加广阔的发展空间,还将能够彻底解决32位计算系统所遇到的瓶颈现象。利用64位设备,异地的用户可以通过互联网轻松地实现同时观看同一个高清视频,或者登录一座网络博物馆,用3D的形式观看、在线制作和播放视频片段等活动。
64位数据位宽系统中每一次取址都可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。当计算机面临大量的数据流时,32位的数据位宽通常使处理器不能及时进行相应的处理运算。32位处理器一次只能处理32位,也就是4个字节的数据;而64位处理器一次就能处理64位,即8个字节的数据。形象地说,32位好像是一个狭窄的单车道,当车流过多的时候,就无法承载这些负荷,而64位好比一个宽阔的高速公路,所以在多任务,多程序处理的情况下,应用64位计算平台才能随心所欲的加速、把电子设备的应用性能发挥到最好。
在图像处理过程中,通常只需要对原图像中的一部分进行处理.这个时候,需要处理的部分图像的起始点地址很有可能不是64位对齐,并且待处理图像的宽度也是任意的,也很有可能不是64位对齐的;由于64位系统中每次取址只能在64位对齐的地址读取64位数据,这就意味着在读取数据时肯定会读到多余的数据。
在系统中,为了提高数据传输的效率,大数据量的传输通常要使用突发传输(burst),(burst传输是指在存储单元之间连续进行数据传输的方式,连续传输的个数就是突发传输长度)在不对齐时,由于会有冗余的读入数据,如何精确控制突发传输的长度也是一个难题;对图像处理单元来说,如果为了和系统带宽匹配,单元的并行吞吐带宽也会是64位;对于图像处理单元来说,本身并不关心所处理图像是否是起始地址对齐,所以需要得到待处理图像从一开始就64位对齐的数据;所以此时,如何将从存储器读出的带冗余不对齐的数据重新变为图像处理单元所需要的64位对齐的数据也是一个难题。
现有的图像读取方法,会对应用作出限制,需要图像的读取起始地址为64比特对齐而且读取图像的宽度也需要64比特对齐,否则无法保证读取传输的正确性;这种限制的存在,不能实现任意起点任意宽度的图像读取,大大限制了图像处理应用的灵活性。
【发明内容】
本发明要解决的技术问题,在于提供一种读取地址和宽度不对齐图像处理方法和电路结构,它能够在高位宽系统中支持任意起点任意宽度的图像读取。
本发明是这样实现的:
本发明一种读取地址和宽度不对齐图像处理方法,具体包括如下步骤:
步骤10、CPU对图像读取控制器配置与原图像和实取图像相关的配置信息,该配置信息至少包括实取图像的宽度和行起始地址;步骤20、图像读取控制器对上述配置信息中的实取图像的宽度和行起始地址进行64比特对齐判断,并输出判断结果;步骤30、图像读取控制器根据步骤20的判断结果,产生读命令并将读命令传输到存储器,所述存储器根据读命令将对应的数据输出;步骤40、图像读取控制器根据步骤20的判断结果将上述存储器输出的数据拼凑为64比特对齐的数据流传输到图像处理单元;步骤50、每一行不断传输,直至该行结束,开始新一行,重复步骤20-40,直到整个实取图像传输结束。
本发明一种读取地址和宽度不对齐图像处理的电路结构,它包括cpu、图像处理单元,还包括一图像读取控制器,该图像读取控制器进一步包括:配置单元:用于接收CPU的配置信息;图像宽度对齐判断单元:用于对配置信息中的实取图像的宽度进行64比特对齐判断,并输出判断结果;图像行起始地址对齐判断单元:用于对配置信息中的实取图像的行起始地址进行64比特对齐判断,并输出判断结果;读命令产生单元:用于根据上述两个判断结果产生读命令;数据重组单元:用于根据上述两个判断结果将存储器输出的数据,拼凑为64比特对齐的数据流。
所述cpu连接一配置单元,所述配置单元分别连接图像宽度对齐判断单元、图像行起始地址对齐判断单元,所述图像宽度对齐判断单元、图像行起始地址对齐判断单元均分别连接到读命令产生单元、数据重组单元,所述读命令产生单元、数据重组单元均连接到存储器,所述数据重组单元另一端还连接所述图像处理单元。
本发明具有如下优点:
1.本发明通过精确控制突发传输长度来保持高效率的传输;同时通过判断图像起始地址和图像宽度来筛选滤除读取数据中的无效数据;然后再将有效地数据重新拼凑成为64位对齐的数据流传送给图像处理单元;从而解决了在64位系统中如何更加灵活高效的读取并使用图像数据的问题,在64比特系统中支持任意起始点任意宽度的图像读取,大大提高了图像处理应用的灵活性;
2.本发明根据用户配置的信息,电路自动判断突发传输长度和突发传输的起始地址,自动完成读取动作行为,无需用户的干预;
3.本发明根据用户配置的信息,自动完成将非64比特对齐的读取数据流的重新排布为64比特对齐数据流,对图像处理单元来说,屏蔽了非64比特对齐的数据流,大大减少了图像处理单元的处理难度;
4.本发明自动处理各种格式下,实取图像起始地址和视图图像宽度对齐或者不对齐的所有情况。
【具体实施方式】
请参阅图1至图8所示,对本发明的实施例进行详细的说明。
如图1,本发明一种处理方法,具体包括如下步骤:步骤10、CPU对图像读取控制器配置与原图像和实取图像相关的配置信息,所述配置信息包括:传输图像的格式、原图像宽和高、实取图像的宽和高、实取图像的行起始地址;步骤20、图像读取控制器对上述配置信息中的实取图像的宽度和行起始地址进行64比特对齐判断,并输出判断结果,所述判断结果包括:图像宽度是否64比特对齐,其不对齐的偏移量多少;图像行起始地址是否64比特对齐,其不对齐偏移量为多少;步骤30、图像读取控制器根据步骤20的判断结果,产生读命令并将读命令传输到存储器,所述存储器根据读命令将对应的数据输出;步骤40、图像读取控制器根据步骤20的判断结果将上述存储器输出的数据拼凑为64比特对齐的数据流传输到图像处理单元;步骤50、每一行不断传输,直至该行结束,开始新一行,重复步骤20-40,直到整个实取图像传输结束。
所述步骤30中,所述读命令所涉及的对象包括:突发传输长度、突发传输行起始地址。产生读命令过程进一步包括:产生一个累积偏移量,其等于图像行起始地址的非对齐偏移量加上宽度的非对齐偏移量;产生一个原始突发传输长度,其等于实取图像宽度除以每64比特可以描述的该格式像素个数所得的结果;当累积偏移量为0时,突发传输的长度等于原始突发传输长度;当累积偏移量大于0且小于等于8时,突发传输长度等于原始突发传输长度加上1;当累积偏移量大于8时,突发传输长度等于原始突发传输长度加上2;读命令的突发传输的行起始地址为行起始地址对64比特取整。所述步骤40的数据拼凑进一步包括:先建立乒乓缓存一、乒乓缓存二,每个缓存的大小为64比特;当存储器输出的数据到来之后,先将第一个64比特数据从低位开始算,按照起始地址非对齐偏移量的位置为中间点进行高低数据位交换,然后将以中间点划分的高位像素存到缓存一,将以中间点划分的低位像素存到缓存二;在下一个64比特数据到来时,处理方式和前一个64比特数据一样,只是在将高低位数据交换后存入乒乓缓存时,高低位存储的缓存器要与前一个64数据比特相反;当缓存的高低位都填满有效数据后,则将有效地64比特数据送往图像处理单元,数据送出去后,该缓存被清空;当最后一个64比特数据无法凑齐的时候,根据图像宽度非对齐偏移量,在最后一个64比特数据中的低位填充图像宽度非对齐偏移量的无效数据,作为一个64比特有数据送往图像处理单元;如此不断循环,直到整个实取图像数据重新拼凑传输完毕。
如图2,对应上述方法,本发明还提供一种图像处理电路,它包括cpu、图像处理单元,还包括一图像读取控制器,该图像读取控制器进一步包括:配置单元:用于接收CPU的配置信息;图像宽度对齐判断单元:用于对配置信息中的实取图像的宽度进行64比特对齐判断,并输出判断结果;图像行起始地址对齐判断单元:用于对配置信息中的实取图像的行起始地址进行64比特对齐判断,并输出判断结果;读命令产生单元:用于根据上述两个判断结果产生读命令;数据重组单元:用于根据上述两个判断结果将存储器输出的数据,拼凑为64比特对齐的数据流。
所述cpu连接一配置单元,所述配置单元分别连接图像宽度对齐判断单元、图像行起始地址对齐判断单元,所述图像宽度对齐判断单元、图像行起始地址对齐判断单元均分别连接到读命令产生单元、数据重组单元,所述读命令产生单元、数据重组单元均连接到存储器,所述数据重组单元另一端还连接所述图像处理单元。
所述配置单元为接收所述CPU对传输图像的格式、目标原图像宽和高、实取图像宽和高、实取图像的行起始地址进行配置的配置信息的单元。所述图像宽度对齐判断单元、图像行起始地址对齐判断单元,的所述判断结果包括是否64比特对齐,其不对齐的偏移量多少。所述读命令涉及的对象包括:突发传输长度、突发传输行起始地址。
计算实取图像中每行起始地址的方法:
在行起始地址对齐判断时需要用到当前传输行的行起始地址,实取图像第一行的行起始地址直接等于实取图像的起始地址,可以从配置信息得到;当一行图像数据传输完毕后,下一行开始传输,需要对下一行的行起始地址对齐进行判断,此时下一行的行起始地址等于前一行的行起始地址加上原始图像一行的地址偏移量;其中原始图像一行的地址偏移量等于原图像宽度乘以每个像素的比特数。
判断行起始地址64比特对齐的方法:
只有当地址为64比特的整数倍时,被认为是64比特对齐的地址;比如说0x0,0x8,0x10等;此时非对齐地址偏移量为0;如果地址无法被64比特整除,被认为是64比特非对齐的地址,此时非对齐地址偏移量为地址除以8字节(64比特)的余数;比如0x9的非对齐地址偏移量为0x1,0x5的非对齐地址偏移量为0x5。
判断图像宽度64比特对齐的方法:
表示图像像素值的位数叫做图像的像素深度,又称为位/像素(BPP)。这个数值用来表示图像的每个像素值所需要的位数(bits per pixel)。1.先判断得到传输图像格式的像素BPP值,比如RGB565格式为16BPP,YUV422中的Y数据为8BPP;2.然后根据该格式的BPP值,用64除以BPP可以得到64比特数据可以描述该格式几个像素;比如16BPP的RGB565格式,每64比特可以描述的像素个数为64/16=4个;3.将实取图像宽度除以每64比特可以描述的像素个数,如果可以整除则说明该实取图像宽度为64比特对齐;如果不能整除,将余数乘以该格式的BPP可以得到宽度的非对齐偏移量;比如RGB565格式实取图像宽度为17,17除以4的余数为1,说明偏移1个像素,1乘以16BPP得到非对齐偏移量为16比特,换算成字节就是非对齐偏移量0x。
根据行起始地址对齐判断和图像宽度对齐判断产生读命令的方法:
1.在产生读命令时,需要联合考虑行起始地址非对齐和宽度非对齐;2.产生一个变量add_offset(累积偏移量),该变量等于起始地址的非对齐偏移量加上宽度非对齐偏移量;变量的偏移单位为字节;该变量表示传输需要多传的数据量;3.产生一个变量ori_burst_len(原始突发传输长度),该变量等于实取图像宽度除以每64比特可以描述的该格式像素个数所得的结果;比如RGB565的实取图像宽度为17,RGB565格式为16BPP,每64比特可以描述的像素个数为64/16=4个,则ori_burst_len=17/4=4;4.当累积偏移量为0时,突发传输的长度等于原始突发传输长度;当累积偏移量大于0且小于等于8时,突发传输长度等于原始突发传输长度加上1;当累积偏移量大于8时,突发传输长度等于原始突发传输长度加上2;5.读命令的突发传输起始地址为行起始地址对64比特取整;比如行起始地址为0x6043,经取整后变为0x6040。
结合图3至图8对本发明的方法及其结构的读命令处理过程的原理进行说明。假设一个Y数据(8BPP)的原目标图(每64比特可以描述的像素个数为64/8=8),该原图宽度24,高度16,原图起始地址0x0。
如图3,为实取图像起始地址对齐,实取图像宽度对齐的情况。该情况下,实取图像宽度16,实取图像起始地址0x10;起始地址非对齐偏移和图像宽度非对齐偏移都为0,则累积偏移量为0,原始突发传输长度长度为图像宽度16除以每64比特可以描述的像素个数8,等于2;
由于累积偏移量为0,所以突发传输长度等于原始突发传输长度,等于2;突发传输起始地址为行起始地址0x10对64比特取整,仍为0x10。
如图4,为实取图像起始地址对齐,实取图像宽度不对齐的情况。该情况下,实取图像宽度20,实取图像起始地址0x10;起始地址非对齐偏移为0,图像宽度非对齐偏移都为4,则累积偏移量为4,原始突发传输长度为图像宽度20除以每64比特可以描述的像素个数8,等于2;
由于累积偏移量为4,属于大于0且小于等于8,所以突发传输长度等于原始突发传输长度加1,等于2+1=3;突发传输起始地址为行起始地址0x10对64比特取整,仍为0x10。
如图5,为实取图像起始地址不对齐,实取图像宽度对齐的情况。该情况下,实取图像宽度16,实取图像起始地址0x14;起始地址非对齐偏移为4,图像宽度非对齐偏移都为0,则累积偏移量为4,原始突发传输长度长度为图像宽度16除以每64比特可以描述的像素个数8,等于2;由于累积偏移量为4,属于大于0且小于等于8,所以突发传输长度等于原始突发传输长度加1,等于2+1=3;突发传输起始地址为行起始地址0x14对64比特取整,为0x10。
如图6,为实取图像起始地址不对齐,实取图像宽度不对齐,累积偏移量小于等于8的情况。该情况下,实取图像宽度18,实取图像起始地址0x15;起始地址非对齐偏移为5,图像宽度非对齐偏移都为2,则累积偏移量为7,原始突发传输长度长度为图像宽度18除以每64比特可以描述的像素个数8,等于2;
由于累积偏移量为7,属于大于0且小于等于8,所以突发传输长度等于原始突发传输长度加1,等于2+1=3;突发传输起始地址为行起始地址0x15对64比特取整,为0x10。
如图7,为实取图像起始地址不对齐,实取图像宽度不对齐,累积偏移量大于8的情况。该情况下,实取图像宽度15,实取图像起始地址0x13;起始地址非对齐偏移为3,图像宽度非对齐偏移都为7,则累积偏移量为10,原始突发传输长度长度为图像宽度15除以每64比特可以描述的像素个数8,等于1;
由于累积偏移量为10,属于大于8,所以突发传输长度等于原始突发传输长度加2,等于1+2=3;突发传输起始地址为行起始地址0x13对64比特取整,为0x10。
如图8,以起始地址0x15,图像宽度15字节为例(该情况下,突发传输长度为3,突发传输起始地址为0x10),示意数据拼凑的过程。
1.建立乒乓缓存一、乒乓缓存二,每个缓存的大小为64比特;
2.当存储器输出的读入数据到来之后,先将读入数据从低位开始算,按照起始地址非对齐偏移量的位置为中间点进行高低数据位交换,如下图所示的第一个64比特读入数据原始顺序为p0 p1 p2 p3 p4 p5 p6 p7,因为起始地址非对齐偏移量为0x3,则以位置3为中间点进行高低位互换,互换结果变为p3 p4 p5 p6 p7 p0 p1 p2;
3.读入数据按照起始地址非对齐偏移量的位置为中间点进行高低数据位交换后,仍以起始地址非对齐偏移量的位置为中间点来划分,将以中间点划分的高位像素存到缓存一,将以中间点划分的低位像素存到缓存二;(如下图中第一个64比特像素,将无效的p0到p2写到缓存二,将p3到p7写到缓存一);
4.在下一个64比特读数据到来时,处理方式和前一个64比特一样,不一样的地方只有在将高低位数据交换后存入乒乓缓存时,高低位存储的缓存器要与前一个64比特相反,第二个64比特的高位像素存到缓存二,将以中间点划分的低位像素存到缓存一;(如下图中第二个64比特像素,将无效的p8到p10写到缓存一,将p11到p15写到缓存二);
5.当缓存的高低位都填满有效数据后,则将有效地64比特送往图像处理单元,数据送出去后,该缓存被清空;
6.当最后一个64比特无法凑齐的时候,根据图像宽度非对齐偏移量,在最后一个64比特中的低位填充图像宽度非对齐偏移量的无效数据,作为一个64比特有数据送往图像处理单元;(如下图中最后一个64比特数据,图像宽度非对齐偏移量为0x1,则将最低的1个字节填充无效数据后送往图像处理单元);
7.如此不断循环,直到整个实取图像数据重新拼凑传输完毕。
以上所述,仅为本发明较佳实施例而已,故不能依此限定本发明实施的范围,即依本发明专利范围及说明书内容所作的等效变化与修饰,皆应仍属本发明涵盖的范围内。