用于向分级运动估计器提供最佳数据的装置及其方法 本发明涉及用于运动估计的数据提供装置和方法,特另涉及用于向分级运动估计器提供最佳数据的装置和方法。
一般地,图象通信系统,如数字电视的运动图象存储装置、运动图象电话会议、或图象电话,发送和接收很多包括实时运动图象的多媒体信息。图象通信系统中的多媒体信息变得复杂,但传送这些信息的通信网络并没有跟上多媒体信息的变化。特别地,运动图象构成很大比例的多媒体信息,而这需要压缩技术。压缩技术的基本思路是消除视频序列中空间和时间上的冗余码。运动补偿预测编码代表一种从多媒体信息中消除冗余的方法。
在运动补偿预测码中,从时间轴观测的图象的运动可通过搜索先前帧(t-1)与当前帧(t)之间的匹配块的位置来进行估计。在现有技术中,全搜索(fullsearch)和分级搜索(hierarchical search)已被推荐为运动估计算法。全搜索需要很大的计算量,并必须有存储器(例如,静态随机存取存储器(SRAM)或同步动态随机存取存储器(SDRAM)),用于存储当前图象的宏块和对应于先前图象的搜索区域地宏块。分级搜索也必须包括可用于全搜索的存储图象的存储器,只是计算量大大地减少了。这样,用于操作传统的运动估计量算法的硬件需要一个大的图象存储器,而只是用于运动估计器,这样增加了芯片的面积。
为解决上述问题,本发明的一个目的是提供只存储上层图象块的大小,而不是整个帧,并为运动估计器提供最佳数据的装置及其方法。
为达到上述目的,本发明提供了一个数据提供装置,包括:判定存储器用途的判定器;存储当前及先前帧的图象数据的SDRAM;存储当前及先前帧的宏块图象数据的SRAM;及产生运动向量和绝对差之和(SAD)的运动估计器,此装置包括:SDRAM地址生成器,用于以宏块为单位,读取存储在SDRAM中的当前和先前帧的图象数据,并在SRAM中存储读取的图象数据,及从SRAM向SDRAM写从运动估计器以宏块为单位产生的运动向量和SAD;FIFO模块单元,用于从SDRAM以脉冲串(burst)为单位读取帧图象数据并在SRAM存储所读取的数据,并从SRAM向SDRAM以脉冲串为单位传送运动向量和SAD;以及SRAM地址生成器,用于根据按照分级搜索电平从SRAM读取当前和先前帧的宏块图象数据中的数据,将读取的图象数据写入运动估计器的内部寄存器,并将运动向量和SAD从运动估计器写入SRAM。
通过参照附图以及优选实施例的详细说明,将会更清楚地理解本发明的上述目的和优点,附图中:
图1为按照本发明,用于分级运动估计器的最佳数据提供装置的方框图;
图2为图1中SDRAM读单元210的详细图;
图3为图2中SDRAM读单元210的时序图;
图4为图1中SDRAM写单元280的详细图;
图5为图4中SDRAM写单元280的时序图;
图6为图1中ME_FIFO单元250的详细图;
图7为图1中MV_FIFO单元270的详细图;
图8为图1中SDRAM读单元230的详细图;以及
图9为图1中MV_FIFO写单元294的详细图。
参考图1,按照本发明的存储器数据提供装置包括:判定器110;用于存储当前帧图象和先前帧图象的SDRAM 120;用于存储当前宏块图象数据和先前宏块图象数据的SRAM 140;用于产生运动向量(MV)和绝对差之和(SAD)的运动估计器(ME)130;及安装于判定器110、SDRAM 120、ME 130和SRAM 140之间用于收发进行运动估计所需要的数据的数据提供单元200。数据提供单元200包括:与寄存器堆单元240对应的数据设定模块;具有SDRAM读单元210和SDRAM写单元280的SDRAM地址发生器模块;具有ME_FIFO单元250和MV_FIFO单元270的FIFO模块;具有SRAM写单元220、SRAM读单元230、MV_SRAM读单元290和MV_SRAM写单元294的SRAM地址发生器模块;以及对应于16-8位转换器260的位转换模块。
数据提供单元200向运动估计器130提供8位数据DO_8用于运动估计,将包括由ME 130产生的一个运动向量、一个最终SAD和四个中间SAD值在内的总共16位数据转换为3个32位数据DO_32,使运动校正器(未示出)和主机读出脉冲串长度为3的数据,并将32位数据存储在SDRAM 120中。
图1的数据提供装置将参考图2至9所示的模块来描述。
寄存器堆单元240为初始数据设定模块,具有提供运动估计的数据所需要的初始地址偏置值和命令,此命令和偏置值由主机设定。在寄存器堆单元240中,期望的启始偏置值或命令由通过32位数据总线D1 32从SDRAM 120接收的数据和从判定器110接收的数据允许或禁止。
SDRAM地址生成模块(210和280)基本上根据脉冲串长度、CIF/QCIF和数据宽度生成SDRAM 120的读/写地址,并与由控制模块(未示出)输出的数据请求信号DATA_REQ、脉冲串长度数据BURST_LENGTH和读/写信号NRW同步地向判定器110输出读/写地址。另外,SDRAM地址生成模块(210和280)以宏块为单位读取存储在SDRAM 120中的当前帧图象信息和先前帧图象信息。这里,SDRAM 120的数据宽度为32位,SRAM 140的数据宽度为16位,由运动估计器130处理的像素数据宽度为8位。因此,为了从SDRAM120读取16×6像素数据,SDRAM地址生成模块(210和280)实际上只需要32位数据,是宏像素(macro pixels)全部数量的四分之一。
当读取脉冲串长度为4的32位数据时,SDRAM地址生成模块(210和280)实际上仅满足16位地址。SDRAM地址生成模块(210和280)读取当前16×6宏数据,然后读取存储在SDRAM 120中的图象帧之中的48×8先前图象数据。这个过程连续操作的次数等于操作单元的数量。当在一个图象帧的操作结束时,新的当前/先前地址启始偏置从主机接收到,并开始一个新的帧的操作。
参考图2,SDRAM读单元210接收复位信号RESET、时钟信号CLK、允许信号ENABLE、偏置更新信号OFFSET_UPDATE、格式分类信号ME_CIF、第一地址启始偏置值ME_PRE_SDRAM_START、和第二地址启始偏置值ME_CURR_SDRAM_START,并产生SDRAM读地址。并且,SDRAM读单元210以宏块为单位连续读取存储在SDRAM 140中的当前帧数据和先前帧数据,其次数等于操作单元的数量。
更具体地说,SDRAM读单元接收用于设定初始地址的先前/当前地址启始偏置值ME_PRE_SDRAM_START/ME_CURR_SDRAM_START,和用于分类CIF/QCIF的格式分类信号ME_CIF。为了防止地址偏置值在复位后被设定在寄存器中,在接收允许信号ENABLE前,接收一个用于装载地址启始偏置值ME_PRE_SDRAM_START或ME_CURR_SDRAM_START的偏置更新信号OFFSET_UPDATE。如图3的时序图所示,SDRAM 120的地址SDRAM_ADDR和数据DATA_32将考虑到几个不同信号的时序而施加到判定器110,这几个信号为时钟信号CLK、读/写控制信号NRW、数据请求信号DATA_REQ、脉冲串长度数据BURST_LENGTH、确认信号ACK、和数据传送信号DATA_IN_TRANS。
参考图4,SDRAM写单元280接收复位信号RESET、时钟信号CLK、允许信号ENABLE、运动向量偏置更新信号MV_OFFSET_UPDATE、格式分类信号ME_CIF、和地址启始偏置值ME_SDRAM_START,并产生SDRAM写地址。
更具体地说,SDRAM写单元280生成用于将由ME 130根据一个宏块从SRAM 140产生的运动向量MV和多个SAD存储到SDRAM 120中的SDRAM写地址SDRAM_WRITE_ADDR。这里,SDRAM写单元280接收地址启始偏置ME_SDRAM_START(即用于存储运动向量MV和SAD的初始地址)和用于分类CIF/Q CIF的格式分类信号ME_CIF。为了防止地址偏置值在复位后被设定在寄存器中,在允许信号ENABLE接收前,接收用于向SDRAM读单元210装载地址启始偏置ME_SDRAM_START的偏置更新信号OFFSET_UPDATE。
如图5所示的时序图,SDRAM 120的地址SDRAM_ADDR和实际上将要被存储的数据DATA_32,将考虑到几个不同信号的时序而施加到判定器110,这几个信号为时钟信号CLK、读/写控制信号NRW、数据请求信号DATA_REQ、脉冲串长度数据BURST_LENGTH、确认信号ACK、和数据传送信号DATA_IN_TRANS。
参考图6和7,具有ME_FIFO单元250和MV_FIFO单元270的FIFO模块以脉冲串为单位从SRAM 140向SDRAM 120传送运动向量和SAD。在FIFO模块向SDRAM 120要求数据及地址之后,直到实际数据被接收到,存在着大约7个时钟的延迟。这里,FIFO模块一次读取一个地址的数据是带宽的很大消耗。这样,为了解决这个问题,FIFO模块从SDRAM 120以脉冲串为单位读取数据以改进系统的整体速度。因此,由于SRAM 140的数据宽度是16而SDRAM 120的数据宽度是32,所以,FIFO模块需要与读取和存储32位图象数据的脉冲串的长度相当的容量。例如,如果脉冲串长度为4,则使用数据宽度为32且数据深度为4的FIFO,而如果脉冲串长度为3,则使用数据宽度为32且数据深度为3的FIFO。施加到FIFO模块的数据DATA_32需要从判定器110接收的数据传送信号DATA_IN_TRANS和确认信号ACK作为结束时序,如图3和5所示。从SDRAM 120利用脉冲串长度4来读取32位图象数据,所以FIFO模块基本上具有数据宽度32和深度4。
参考图6,ME_FIFO单元250由生成读/写信号的ME_FIFO控制器610、和进行实际FIFO操作的ME_FIFO单元620组成。
当接收到允许信号ENABLE时,ME_FIFO控制器610在4个和8个时钟内分别生成写允许信号WE和读允许信号RE,输出写终止信号FIFO_W_END,以在有限状态机(FSM)完成状态转移。ME_FIFO单元620根据在4个时钟内生成的写允许信号WE以脉冲串长度4连续从SDRAM 120读取4个32位图象数据,将读取的数据存储在其内部寄存器中,并根据在8个时钟内生成的读允许信号RE向SRAM 140输出16位数据DATA_16。这里,ME_FIFO单元620需要2个时钟的时长转换32位数据为16位数据。
参考图7,MV_FIFO单元270由生成写允许信号WE和读允许信号RE的MV_FIFO控制器710、和进行实际FIFO操作的MV_FIFO单元720组成。
当接收到允许信号ENABLE时,MV_FIFO控制器710在4个和8个时钟内分别生成写允许信号WE和读允许信号RE,输出写终止信号FIFO_W_END,以在FSM完成状态转移。MV_FIFO单元620基本上顺次在6个时钟内从SRAM 140读取6个16位数据,即一个运动向量(Mvx,Mvy)、一个最终SAD和四个中间SAD,将读取的数据存储在其内部寄存器中,然后在3个时钟内将16位数据转换为32位数据,并以脉冲串长度3输出要写入SDRAM 120的数据DATA_16及从判定器110接收到的确认信号ACK和数据传送信号DATA_IN_TRANS。这里,MV_FIFO单元720需要1个时钟的时长转换16位数据为32位数据。
参考图8和9,SRAM地址生成模块(220+230+290+294)生成一个用于从/向异步SRAM读/写数据的12位SRAM地址。SRAM写单元220从SDRAM120向SRAM 140写入图象数据,简单增加计数器(未示出),当SRAM写单元被允许时,在每个时钟将地址从0到1279加1。这里,地址0到255用于当前图象数据,地址256到1279用于先前图象数据。SRAM读单元230向ME 130提供存储在SRAM 140中的图象数据,在任意需要的时刻,向ME130提供存储于SRAM 140中的当前和先前宏图象数据中的需要的数据,并将同样的数据存储在ME 130的内部寄存器中。
参考图8,SRAM读单元230由SRAM读控制器810和地址生成器820组成,SRAM读控制器810用于响应于复位信号RESET、时钟信号CLK、允许信号ENABLE、请求信号REQ和状态信号STATUS,输出状态控制信号STATE、CNT和V_N_STATE、SRAM读终止信号SDRAM_READ_END和确认信号ACK,地址生成器820响应于复位信号RESET、时钟信号CLK和向量值MVx和Mvy,实际生成地址ADDR。
地址生成器820按照分级搜索的高电平、中间电平和低电平生成不同的地址。就是说,在高电平数据的情况下,最低有效位(LSB)将被从地址ADDR中移去,在任意其他地址,如地址0、2、4、6……,的16位数据被读取。最后,每4个地址输出8位数据。在中间电平数据的情况下,地址ADDR在每个时钟加1,LSB从每个地址中移去,形成对数据进行二次抽样。在低电平数据的情况下,地址ADDR每2个时钟加1,LSB从每个地址中移去,在每个时钟数据顺序读取一个数据项。
参考图9,MV_SRAM写单元294响应于复位信号RESET、时钟信号CLK、允许信号ENABLE、和最大计数值MAX_CNT输出写地址MV_SRAM_WRITE_ADDR,也输出代表状态转换的MV_SRAM写终止信号MV_SRAM_WRITE_END和MV写帧终止信号MV_WRITE_FRAME_END。
当MV_SRAM写单元被允许时,MV_SRAM写单元294在每个时钟,通过简单地将最大计数值MAX_CNT和将写地址MV_SRAM_WRITE_ADDR从1280加1,从ME 130向SRAM 140写最终MV和SAD。这里,因为地址0到1279已经被指定用于图象数据,使用1280或更大的写地址MV_SRAM_WRITE_ADDR。最后的地址值与操作单位有关。例如,如果操作单位为3,3个宏块的运动向量,3个宏块的最终SAD,和12个宏块的中间SAD,必须以3个宏块为基本单位被存储在SRAM 140中3次。因此,最后地址值为1298(1280+18)。这里,操作单位必须为3的倍数。
按照上述本发明述,通过只存储上层图象块的大小而不是全部帧图象,不必使用大小与整个帧相同的用于估计运动的一般专用存储器。并且,可以使用具有小容量的存储器,所以芯片的尺寸可减小。