硬件解码器中参考帧数据的读取方法及其装置的制作方法

文档序号:7651547阅读:183来源:国知局
专利名称:硬件解码器中参考帧数据的读取方法及其装置的制作方法
技术领域
本发明涉及一种视频编解码的数据读取方法,具体涉及一种硬件解 码器中参考帧数据的读取方法。本发明还涉及一种上述方法使用的装置。
技术背景H.264是由国际电信联盟(ITU)和国际标准化组织(ISO)于2003 年联合发布的新一代视频压縮编码标准,其凭借优异的性能得到了广泛的 重视和应用。为了提高性能,H. 264对帧间预测的亮度部分采用最小为4x4 的分块和1/4像素精度,对色度部分采用最小为2x2的分块和1/8像素精 度,非整数样点通过对整数样点进行内插而得到。在对4x4亮度块内插过 程中,最多可能需要9x9的整像素点阵列;在对2x2色度块内插过程中, 最多可能需要3x3的整像素点阵列;这些阵列中的整像素点都是参考帧数 据。"参考帧数据的读取",就是从存储器中将需要的参考帧数据取回。 由于存储器的带宽有限,所以读取的参考帧数据尽量不要浪费;而且,数 据在存储器中的地址可能连续,应该尽量连续取数,提高存储器的效率。关于参考帧数据的读取,长期以来,未引起足够的重视,但随着高 清实时解码的流行,情况正迅速发生着变化,因为对参考帧数据的读取已 成为解码器满足高清实时要求的瓶颈之一。在硬件解码器的设计中,现行的主要有三种方法实现对参考帧数据
的读取。第一种是"直接读取"的方法,即以4x4块为单位,需要哪些数 据,直接去存储器中取,请参照图1所示;图1中的阴影部分表示重复读 取的数据。这种方法的优点是面积小,实现简单,遗憾的是由于存在 重复读取数据的问题,存储器带宽占用太高,导致性能不高,很难满足高 清实时解码的要求。第二种方法是"采用高速缓存(cache)来暂存数据",该方法基本 没有重复取数;但是,高速缓存所占用的面积很大,功耗高,这导致解码 器的生产成本上升。第三种方法是"根据参数'宏块类型,(mb—type),来取数",该方法 依照"宏块类型"的值来判断,可以在一个宏块的范围内连续且不重复取 数,比第一种方法灵活很多,请参照图2所示。它可以满足高清实时的解 码要求;但是,在产生地址和取回数据的过程中,至少需要判断两次"宏 块类型"(产生地址一次,取回数据一次);而且,"宏块类型"种类繁多, 判断过程比较烦杂,控制较难;硬件实现比较困难。发明内容本发明所要解决的技术问题是提供一种硬件解码器中参考帧数据的 读取方法,它可以使参考帧数据读取模块的面积有较大幅度的减少,功耗 有显著下降,且适合H.264硬件高清实时解码器。为此,本发明还要提供 一种与该方法相匹配的硬件解码器中参考帧数据的读取装置。为了解决以上技术问题,本发明提供了一种硬件解码器中参考帧数据 的读取方法,包括如下步骤(1)计算一个宏块的各个最小分块单元的特征参数,包括起始逻辑 地址、长度、宽度、及X轴方向的偏移;(2 )将各个最小分块单元的逻辑地址串按所述的起始逻辑地址进行 从小到大的排序,得到最小分块单元的逻辑地址串列;(3) 将所述的逻辑地址串列进行合并,然后发送访存指令;(4) 从存储器中读取参考帧数据列,并选出各个最小分块单元对应 的参考帧数据,依序写入到内插模块中。本发明还提供了一种上述方法所使用的参考帧数据的读取装置,包括 依次连接的输入参数模块、发送指令模块、存储器模块、取回数据模块 及内插模块;其中发送指令模块又包括依次连接的计算逻辑地址模块、 比较器模块、并联的地址移位寄存器模块和参数移位寄存器模块、合并地址模块、产生指令模块、和指令FIFO模块,以及计算起始序号和结束序号模块,其输入端连接所述并联的地址移位寄存器模块和参数移位寄存器模块的输出端;取回数据模块又包括依次连接的位选择模块、RAM模块、 输出FIFO模块;RAM模块的输入端又分别连接计算起始序号和结束序号 模块和参数移位寄存器模块。采用本方法后,参考帧数据读取模块的面积有较大幅度的减少,功 耗有显著下降,且本发明适用于H. 264硬件高清实时解码器。


下面结合附图和具体实施方式
对本发明作进一步详细说明。 图1是一种现有参考帧数据的读取方法; 图2是另一种现有参考帧数据的读取方法;
图3是本发明的参考帧数据读取方法的示意图;图4是本发明的系统结构图;图5是本发明的时序图。
具体实施方式
本方法的主要指导思想是利用数据的连续性,尽量连续取数,不重复取数,而且要避免判断宏块类型(mb—type)。由于数据是否连续的标志 就是其地址是否连续,所以,采用"合并地址"的方法来实现上述目标, 即将一个宏块划分为多个最小分块单元,取得每个最小分块单元的地址, 先对地址进行从小到大的排序,然后将排序后的连续的地址合并起来;由 于数据相同时,其地址也相同,所以不会重复取数;由于数据连续时,其 地址也连续,所以可以连续取数。地址合并后,得到首地址和连续取数的 长度,将其作为"指令"发送,对读取回的数据按最小分块单元的对应顺 序排列后送入内插模块中。如图3所示,本发明的硬件解码器中参考帧数据的读取方法主要分为 两个阶段, 一是发送指令阶段,将参考帧数据在存储器中的首地址和存储 范围一起发送至存储器,图中的实线箭头所示;另一个是取回数据阶段, 将参考帧数据取回,并排列成内插需要的格式,图中的虚线箭头所示。本发明的硬件解码器中参考帧数据的读取方法分为四个步骤 (1)计算一个宏块的各个最小分块单元的特征参数,包括起始逻辑 地址、长度、宽度、及X轴方向的偏移;(2 )将各个最小分块单元的逻辑地址串按所述的起始逻辑地址进行 从小到大的排序,得到最小分块单元的逻辑地址串列;(3) 将所述的逻辑地址串列进行合并,然后发送访存指令;(4) 从存储器中读取参考帧数据列,并选出各个最小分块单元对应 的参考帧数据,依序写入到内插模块中。如图4所示是本发明的硬件解码器中参考帧数据的读取装置的系统 结构图,包括输入参数模块、发送指令模块、存储器模块、取回数据模 块及内插模块。其中发送指令模块又包括:依次连接的计算逻辑地址模块、 比较器模块、并联的地址移位寄存器模块和参数移位寄存器模块、合并地 址模块、产生指令模块、和指令FIFO模块;以及计算起始序号和结束序 号模块,其输入端连接所述并联的地址移位寄存器模块和参数移位寄存器 模块的输出端。发送指令模块用于实现图3中实线箭头所示的发送指令阶 段的功能。另外取回数据模块又包括依次连接的位选择模块、RAM模块、输出FIFO模块,用于实现图3中虚线所示的取回数据阶段的功能。由于参数移位寄存器模块和计算每个块的起始序号和结束序号模块所得到的值在取回数据阶段也有用到,所以,要另外寄存这些参数,需将RAM 模块的输入端分别连接计算起始序号和结束序号模块、参数移位寄存器模 块。本发明的硬件解码器中参考帧数据的读取方法中,步骤(1)主要由 计算逻辑地址模块所完成。以H. 264标准中亮度数据为例,首先将一个宏块切分成16个4x4亮 度最小分块单元,计算各个最小分块单元的特征参数,包括起始逻辑地址、 长度及宽度等。且前向参考帧和后向参考帧是分开计算的。一个亮度最小分块单元最多需要9x9的参考帧数据块,一个宏块最多 需要多少个逻辑地址,取决于存储器中数据的排列形式。逻辑地址、块的 长度、块的宽度、及X方向的偏移,可以唯一的表示一个块。逻辑地址由参考帧号、x坐标、y坐标三部分组成,大小为25位。块的长度是指参考 阵列的长度(4行还是9行),块的宽度是指参考阵列的宽度(4列还是 9歹U) , x方向的偏移指的是起始的x方向的坐标。块的宽度、x方向的偏移可以重新组织成一个新的参数,即偏移参数, 该参数用于指明哪些数据才是真正有用的。该参数用5位来表示,其中, 前两位是标识位,后三位是x方向的偏移。块号(4位)、偏移参数(用于标识哪些数据真正有用,5位)和块 的长度(l位)均为最小分块单元一级的参数。本发明的硬件解码器中参考帧数据的读取方法中,步骤(2)主要是 由比较器模块、地址移位寄存器模块、和参数移位寄存器模块完成的。将地址进行排序包括两个过程比较和移位;比较器是比较逻辑地址(当前的地址和已存储的地址)的大小,是为地址排序作准备。从整个排 序过程上看,先判断当前的地址和已存储的地址谁更大,如果已存储的大, 则前移一位,如果当前的大,保持不动。每个周期只输入一个新地址,需 要与已存储的所有的数据比较,为了减少面积,可以复用一个比较器。每进行一次排序,需要5次比较和1次移位,在H. 264中,需要192个周期。 地址移位寄存器的作用是实现地址排序的过程,是由多个25位的寄 存器串成链路实现的。比较器己经判断出当前的地址和已存储的地址谁更 大,如果已存储的大,则前移一位,如果当前的大,保持不动。地址排序后,逻辑地址的排列顺序发生了更改,参数移位寄存器是为
了使参数保持与逻辑地址的排列同步变化。可以认为,地址和参数是一同 进行排序的。参数移位寄存器的控制和地址移位寄存器的控制是完全一样的,参数移位寄存器是由多个io位的寄存器串成链路实现的。本发明的硬件解码器中参考帧数据的读取方法中,步骤(3)主要是由合并地址模块、计算起始序号和结束序号模块、产生指令模块、及指令FIFO模块完成的。具体又分为4个过程a、 计算各个参考帧数据块的起始序号和结束序号。 从外部存储器中回来的数据是按照地址排序后的顺序来的,而不是按照块号的顺序,而且,由于地址合并, 一个数据可能被多个块利用。每个 块的起始序号和结束序号用于标识从外部存储器中回来的数据属于哪个 块,在合并发生的同时,就要计算出各个块的起始序号和结束序号。每个 块的起始序号和结束序号需要另存,因为这些参数会在第二阶段用到。设第一个地址对应的起始序号为零,如果发生合并,起始序号为当前 地址减去前一个地址,如果不发生合并,当前的起始序号则为前一个结束 序号加一。结束序号是起始序号加上块的长度。b、 若所述逻辑地址串列中的各个逻辑地址串之间有交叠,则将有交 叠的逻辑地址串进行合并,得到多个无重复的连续逻辑地址串,形成连续 逻辑地址串列,计算所述的各个连续逻辑地址串的起始地址和串长度。合并地址的直接目的是减少指令的数目。经过地址排序之后,可以方 便的进行地址合并,合并后,形成多个无重复的连续逻辑地址串,可以用 一个地址表示一个连续逻辑地址串;该地址由两部分组成, 一个是基址,表示连续逻辑地址串的起始地址,另一个是偏移,表示串的长度。
合并时,按照排序后的顺序,从小到大,依次进行,只有当基址加上 偏移大于等于当前已存储的地址(地址移位寄存器中)时,才可以合并; 合并后,基址不变,偏移等于当前己存储的地址加上块的长度减去基址; 下次合并运算时,需要用新的偏移参加运算。如果合并发生,地址的数目 将减少,产生的指令数目也减少。如果不发生合并,则设定当前已存储的 地址为基址,设定块的长度为偏移。C、将所述各个连续逻辑地址串的起始地址和串长度变换为访存指 令,将访存指令依次存储至指令FIFO模块;合并后把当前的基址和偏移输出到产生指令模块中,产生适应存储器 格式的访存指令,并将这些访存指令依次存储在指令FIFO模块中。d、由指令FIFO模块将所述的访存指令依次发送至存储器模块。 指令FIFO拟存储两个宏块的指令,宽度是指令的长度,FIF0需要向外部存储器发出一个可读信号,此信号表示外部存储器可以从指令FIFO中读取指令,可读信号不仅受控于FIFO内数据的深度,而且必须满足RAM模块中的各个RAM是空的。本发明的硬件解码器中参考帧数据的读取方法中,步骤(4)主要是由位选择器模块、RAM模块、及输出FIFO模块完成的。具体又分为3个过程a、存储器模块依照所述访存指令,读出参考帧数据列。 从外部存储器中读取回来的数据有一定的宽度,这些数据有些是有用 的,有些是没有用的,有些对某些块有用,有些对另外一些块有用,这就 需要依照参数移位寄存器中的"偏移参数"来进行位选择,选择有用的数 据放入RAM模块中。由于取回的数据每次可能小于9字节,所以,对一个块的一行而言,需要由两次读入的数据拼接而成,位数的指定均由位选择器来确定,拼接时, 一边的数据是来自RAM模块(己存储), 一边的数据来自外部存储器。b、 根据所述的各个最小分块单元的起始序号和结束序号,从参考帧 数据列中取出各个最小分块单元对应的参考帧数据。如图4所示,RAM模块中,包含有n个RAM子模块。以H. 264标准为 例, 一个宏块有16个4x4亮度块,对应为16个RAM子模块,每个RAM 的大小为9x9字节。由于从外部存储器读入的数据不是以块号的顺序,而 输出却需要以块号为顺序,所以,需要RAM模块来存储不能立即输出的数 据。9x9字节为一个4x4参考帧最小分块单元需要的最大的存储容量,其 数据需要分为两批到达,前一批到达的数据是暂时存储在RAM模块中的, 故前一批到达的数据无需拼接,而后一批到达的数据则需要进行拼接,且 有时参考帧数据在位宽上部分有效,需通过位选择模块,选出有效的部分, 并进行拼接。依照每个块的起始序号和结束序号来标识从外部存储器中回来的数 据属于哪个块,即采用一个计数器对从外部存储器回来的数据计数,只 要当前的计数值位于某个块的起始序号和结束序号的区间之内,则将数据 存入该块相应的RAM子模块中。c、 将所述的各个最小分块单元对应的参考帧数据发送至输出FIFO 模块,依次写入到内插模块中。输出FIFO模块的功能就是将数据以块号的顺序进行存放,等待内插 模块读取。在实际中,比较常见的情况是块0和块2是同一批次到达的,块1和块3是同一批次到达的,假设块0和块2先到,需要等到块1到达 后,块2才可以输入到FIF0。而16个RAM之间是并行的,是没有必要等 到块1到达后,块2才输入到FIF0的。将"输出FIFO"分为两个, 一个用于存储奇数块的数据, 一个用于 存储偶数块的数据。整个系统的输出需要再增加一个二选一开关来进行选 择。在H.264标准下,采用本发明的硬件解码器中参考帧数据的读取方 法,相应的系统时序示意图请参照图5所示,地址移位寄存器需要192 个周期,合并地址需要32个周期,产生指令需要32个周期;读入数据需 要288个周期。"第一阶段"和"第二阶段"之间是流水线的形式,处理 一个宏块最多需要576个周期。图中的周期数指的是单向预测时的情况, 如果是双向预测,周期数需要加倍。本方法采用HDL (硬件描述语言)实 现后,综合频率可达200M,满足高清实时解码的要求。
权利要求
1、一种硬件解码器中参考帧数据的读取方法;其特征在于,包括如下步骤(1)计算一个宏块的各个最小分块单元的特征参数,包括起始逻辑地址、长度、宽度、及x轴方向的偏移;(2)将各个最小分块单元的逻辑地址串按所述的起始逻辑地址进行从小到大的排序,得到最小分块单元的逻辑地址串列;(3)将所述的逻辑地址串列进行合并,然后发送访存指令;(4)从存储器中读取参考帧数据列,并选出各个最小分块单元对应的参考帧数据,依序写入到内插模块中。
2、 如权利要求1所述的硬件解码器中参考帧数据的读取方法,其特 征在于,步骤(3)所述的将所述的逻辑地址串列进行合并,然后发送访 存指令,包括(1) 计算各个最小分块单元的起始序号和结束序号;(2) 若所述逻辑地址串列中的各个逻辑地址串之间有交叠,则将有 交叠的逻辑地址串进行合并,得到多个无重复的连续逻辑地址串,形成连 续逻辑地址串列,计算所述的各个连续逻辑地址串的起始地址和串长度;(3 )将所述的各个连续逻辑地址串的起始地址和串长度变换为访存 指令,将访存指令依次存储至指令FIFO模块;(4)由指令FIFO模块将所述的访存指令依次发送至存储器模块。
3、 如权利要求1所述的硬件解码器中参考帧数据的读取方法,其特 征在于,步骤(4)所述的从存储器中读取参考帧数据列,并选出各个最小分块单元对应的参考帧数据,依序写入到内插模块中包括如下步骤(1) 存储器模块依照所述访存指令,读出参考帧数据列;(2) 根据所述的各个最小分块单元的起始序号和结束序号,从参考 帧数据列中取出各个最小分块单元对应的参考帧数据(3) 将所述的各个最小分块单元对应的参考帧数据发送至输出FIFO 模块,依次写入到内插模块中。
4、 如权利要求3所述的硬件解码器中参考帧数据的读取方法,其特 征在于,所述的参考帧数据在位宽上部分有效,通过位选择模块,选出有 效的部分,并进行拼接。
5、 一种硬件解码器中参考帧数据的读取装置;其特征在于,包括依 次连接的输入参数模块、发送指令模块、存储器模块、取回数据模块及 内插模块;所述的发送指令模块又包括依次连接的计算逻辑地址模块、比较 器模块、并联的地址移位寄存器模块和参数移位寄存器模块、合并地址模 块、产生指令模块、和指令FIFO模块;以及计算起始序号和结束序号模块,其输入端连接所述并联的地址移位寄存器模块和参数移位寄存器模块的输出端;所述的取回数据模块又包括依次连接的位选择模块、RAM模块、输 出FIF0模块;所述的RAM模块的输入端又分别连接所述的计算起始序号和结束序 号模块和参数移位寄存器模块。
6、 如权利要求5所述的硬件解码器中参考帧数据的读取装置;其特征在于,所述的RAM模块包括多个RAM子模块。
7、如权利要求5所述的硬件解码器中参考帧数据的读取装置;其特 征在于,所述的输出FIFO模块包括 一个为存储奇数块数据的输出模块, 一个为存储偶数块数据的输出模块,及一个二选一的开关。
全文摘要
本发明公开了一种硬件解码器中参考帧数据的读取方法计算一个宏块的各个最小分块单元的特征参数,将各个最小分块单元的起始逻辑地址进行从小到大的排序;将排序后的有序起始逻辑地址列进行合并,然后发送访存指令;从存储器中读取参考帧数据列,并选出各个最小分块单元对应的参考帧数据,依序写入到内插模块中。本发明还公开了一种硬件解码器中参考帧数据的读取装置,包括依次连接的输入参数模块、发送指令模块、存储器模块、取回数据模块及内插模块,其中发送指令模块和取回数据模块又包括若干个功能模块。采用本发明可使参考帧数据读取模块的面积有较大幅度的减少,功耗有显著下降,且本发明适用于H.264硬件高清实时解码器。
文档编号H04N7/26GK101399978SQ20071009411
公开日2009年4月1日 申请日期2007年9月28日 优先权日2007年9月28日
发明者巡 仲, 欧阳合, 侃 肖, 黄小振 申请人:上海杰得微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1