提高去块效应滤波模块重构数据存储速度的方法转让专利

申请号 : CN201510930646.4

文献号 : CN105681815B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 卢俊田泽许宏杰陈威宇杜斐陈佳

申请人 : 中国航空工业集团公司西安航空计算技术研究所

摘要 :

本发明涉及提高去块效应滤波模块重构数据存储速度的方法。为了确保H.264高清视频编码去块效应滤波模块的大量数据能可靠高速地写入外部DDR2存储器,有别于传统的二维地址映射存储方式,本发明提出一种基于宏块的线性地址映射方法。响应编码核发出的写操作请求;将数据连续线性的写入缓存中;计算要访问的外部存储器基地址;拼接数据、计算行列地址;当片外存储器空闲时将数据写入片外存储器中,从而满足高清实时编码所需DBF数据的存储速度需求。

权利要求 :

1.提高去块效应滤波模块重构数据存储速度的方法,其特征在于:包括以下步骤:

1)将编码核发出的一帧图像的去块效应滤波数据连续线性写入缓存;

2)将去块效应滤波数据拼接成片外存储器需要的格式:

2.1)将拼接去块效应滤波数据从缓存中读出;

2.2)在第一个宏块行的数据写入结束后预留4行亮度、2行色度的空位;

2.3)判断下一个宏块行是否为20行,如果是,转入步骤2.4;如果否,将该宏块行的数据要分成4行亮度2行色度以及12行亮度6行色度的数据,然后将4行亮度2行色度的数据写入上个宏块行对应宏块的预留位置处,将12行亮度6行色度写入本宏块行对应的宏块位置,同时预留空位以供下一个宏块行写入;重复步骤2.3;

2.4)对该宏块行的亮度数据先写4行用于填充上个宏块行对应宏块的预留位置,再将剩余的12行和下次请求的4行数据合并入最后一个宏块行的对应位置;

3)计算该帧图像在片外存储器的起始地址;

4)进行片外存储器的地址映射:

4.1)在片外存储器中,根据顶底场判断信号来区分顶场、底场,然后将该帧图像的亮度数据按照一维方式连续存储,其中的顶场数据放在由该帧图像的起始地址起的亮度帧空间的上半部分,底场数据放在该帧空间的二分之一高度对应的地址起的亮度帧空间的下半部分;

4.2)在片外存储器中,根据顶底场判断信号来区分顶场、底场,然后将该帧图像的色度数据按照一维方式连续存储,其中的顶场数据放在跨过该帧亮度空间的起始地址起的色度帧空间的上半部分,底场数据放在色度帧空间的二分之一高度对应的地址起的色度帧空间的下半部分;所述亮度帧空间的高度为色度帧空间的二倍;

4.3)计算编码核到片外存储器的地址映射new_addr,将new_addr映射成片外存储器所识别的物理地址,再将DBF模块的重构数据按照“顶场亮度—底场亮度—顶场色度—底场色度”的顺序依次连续写入片外存储器中;

所述计算编码核到片外存储器的地址映射new_addr如下式:mc_width_mbs×mb_rows_cnt÷32+wxloc÷2×32+(new_yloc×2–mb_rows_cnt×32);

mc_width_mbs:以宏块为单位的图像宽度;

mb_rows_cnt:宏块行计数;

wxloc:以像素为单位每个宏块的横坐标;

new_yloc:以像素为单位每个宏块的纵坐标。

2.根据权利要求1所述的提高去块效应滤波模块重构数据存储速度的方法,其特征在于:所述步骤1将编码核发出的一帧图像的去块效应滤波数据连续线性写入缓存的具体步骤为:将每个宏块按宏块行内从左至右顺序写入,然后写下一个宏块行的数据,直至最后一个宏块行的所有数据全部从编码核中读完为止。

3.根据权利要求1或2所述的提高去块效应滤波模块重构数据存储速度的方法,其特征在于:所述步骤3计算该帧图像在片外存储器的起始地址的具体步骤为:当新的请求到来时,DBF模块区分重构数据和下采样数据,对于重构数据,DBF模块根据固件给出的当前帧地址和本次操作的二维坐标,计算该模块映射到片外存储器输入端的起始地址。

说明书 :

提高去块效应滤波模块重构数据存储速度的方法

技术领域

[0001] 本发明属于集成电路设计技术,涉及提高去块效应滤波模块重构数据存储速度的方法。

背景技术

[0002] 由于H.264高清视频编码的DBF模块的重构写操作数据量巨大,并且写操作是基于宏块的(每个宏块有16行2列数据),因此按照二维地址写入DDR2SDRAM时每写一个宏块要进行16次行操作,这极大地降低了写操作的速度和效率。为了不改变固件(firmware)对外存地址空间分配,提高去块效应滤波模块的重构数据写入效率,实现高清实时编码,提出提高去块效应滤波模块(简称DBF模块)重构数据存储速度的方法。

发明内容

[0003] 本发明的目的是提供一种提高去块效应滤波模块重构数据存储速度的方法,在不改变片外存储器的连接方式和固件地址空间分配的情况下,能够有效地提高DBF模块重构数据的高速写操作速度和效率。
[0004] 本发明的技术解决方案是:
[0005] 提高去块效应滤波模块重构数据存储速度的方法,包括以下步骤:
[0006] 1)将编码核发出的一帧图像的去块效应滤波数据连续线性写入缓存;
[0007] 2)将去块效应滤波数据拼接成片外存储器需要的格式:
[0008] 2.1)将拼接去块效应滤波数据从缓存中读出;
[0009] 2.2)在第一个宏块行的数据写入结束后预留4行亮度、2行色度的空位;
[0010] 2.3)判断下一个宏块行是否为20行,如果是,转入步骤2.4;如果否,将该宏块行的数据要分成4行亮度2行色度以及12行亮度6行色度的数据,然后将4行亮度2行色度的数据写入上个宏块行对应宏块的预留位置处,将12行亮度6行色度写入本宏块行对应的宏块位置,同时预留空位以供下一个宏块行写入;重复步骤2.3;
[0011] 2.4)对该宏块行的亮度数据先写4行用于填充上个宏块行对应宏块的预留位置,再将剩余的12行和下次请求的4行数据合并入最后一个宏块行的对应位置;
[0012] 3)计算该帧图像在片外存储器的起始地址;
[0013] 4)进行片外存储器的地址映射:
[0014] 4.1)在片外存储器中,根据顶底场判断信号来区分顶场、底场,然后将该帧图像的亮度数据按照一维方式连续存储,其中的顶场数据放在由该帧图像的起始地址起的亮度帧空间的上半部分,底场数据放在该帧空间的二分之一高度对应的地址起的亮度帧空间的下半部分;
[0015] 4.2)在片外存储器中,根据顶底场判断信号来区分顶场、底场,然后将该帧图像的色度数据按照一维方式连续存储,其中的顶场数据放在跨过该帧亮度空间的起始地址起的色度帧空间的上半部分,底场数据放在色度帧空间的二分之一高度对应的地址起的色度帧空间的下半部分;所述亮度帧空间的高度为色度帧空间的二倍;
[0016] 4.3)计算编码核到片外存储器的地址映射new_addr,将new_addr映射成片外存储器所识别的物理地址,再将DBF模块的重构数据按照“顶场亮度—底场亮度—顶场色度—底场色度”的顺序依次连续写入片外存储器中;
[0017] 所述计算编码核到片外存储器的地址映射new_addr如下式:
[0018] mc_width_mbs×mb_rows_cnt÷32+wxloc÷2×32+(new_yloc×2–mb_rows_cnt×32);
[0019] mc_width_mbs:以宏块为单位的图像宽度;
[0020] mb_rows_cnt:宏块行计数;
[0021] wxloc:以像素为单位每个宏块的横坐标;
[0022] new_yloc:以像素为单位每个宏块的纵坐标。
[0023] 上述步骤1将编码核发出的一帧图像的去块效应滤波数据连续线性写入缓存的具体步骤为:
[0024] 将每个宏块按宏块行内从左至右顺序写入,然后写下一个宏块行的数据,直至最后一个宏块行的所有数据全部从编码核中读完为止。
[0025] 上述步骤3计算该帧图像在片外存储器的起始地址的具体步骤为:
[0026] 当新的请求到来时,DBF模块区分重构数据和下采样数据,对于重构数据,DBF模块根据固件给出的当前帧地址和本次操作的二维坐标,计算该模块映射到片外存储器输入端的起始地址。
[0027] 本发明的有益效果:
[0028] 本发明为了确保H.264高清视频编码去块效应滤波模块的大量数据能可靠高速地写入外部DDR2存储器,在不改变片外存储器的连接方式和固件地址空间分配的情况下,提出一种有别于传统的二维地址映射存储方式,即基于宏块的线性地址映射方法。该方法首先响应编码核发出的写操作请求,将数据连续线性的写入缓存中,然后计算要访问的外部存储器基地址;再拼接数据、计算行列地址;当片外存储器空闲时才将数据写入片外存储器中。因此,本发明能够有效地提高DBF模块重构数据的高速写操作速度和效率,从而满足高清实时编码所需DBF数据的存储速度需求

附图说明

[0029] 图1是本发明所用模块体系架构图;
[0030] 图2是本发明数据拼接方式;
[0031] 图3是本发明片外存储器中的存储方式;
[0032] 图4是本发明控制模块状态机;
[0033] 图5是本发明DBF写操作的数据流走向图;
[0034] 图6是本发明的流程框图。

具体实施方式

[0035] 本发明提高去块效应滤波模块重构数据存储速度的方法(去块效应滤波模块以下简称DBF模块),参见图6,具有以下步骤:
[0036] 步骤1,将编码核发出的数据连续线性写入缓存;
[0037] 步骤2,将去块效应滤波数据从缓存中读出并拼接成片外存储器需要的格式:对于一帧图像开头和结尾的宏块行数据行数不是16(亮度)、8(色度),因此第一个宏块行的数据应该在每个宏块写入结束后预留4行亮度、2行色度的空位;
[0038] 对于行数为16的宏块行的数据要分成两部分(4行亮度2行色度,12行亮度6行色度)数据,并将4行亮度2行色度的数据写入上个宏块行对应宏块的预留位置处,然后将剩余的12行亮度6行色度写入本宏块行对应的宏块位置,同时仍预留空位以供后面的宏块行写入;
[0039] 当写至最后一个宏块行时,对于亮度数据:每个宏块分三次操作,先写4行用于填充上个宏块行对应宏块的预留位置,再将剩余的12行和下次请求的4行数据合并入最后一个宏块行的对应位置;
[0040] 步骤3,计算一帧图像在片外存储器的起始地址;
[0041] 步骤4,去块效应滤波数据在片外存储器中的地址映射:在片外存储器中,图像按照一维方式存储,亮度数据按照一帧图像的起始地址连续存储。顶场数据放在一帧空间的上半部分(起始地址),底场数据放在下半部分(一帧的二分之一高度对应的地址);
[0042] 色度的写操作与亮度设计方法相同,只是色度的起始地址需要跨过一帧亮度的空间。场模式的写操作处理方式与帧模式类似,只是需要根据顶底场判断信号来区分顶场、底场。DBF模块的重构数据依次连续按照“顶场亮度—底场亮度—顶场色度—底场色度”的顺序写入片外存储器中;
[0043] 从编码核到片外存储器的地址映射如下所示:
[0044] new_addr:mc_width_mbs*mb_rows_cnt*32+wxloc/2*32+(new_yloc*2–mb_rows_cnt*32);
[0045] mc_width_mbs:以宏块为单位的图像宽度;
[0046] mb_rows_cnt:宏块行计数;
[0047] wxloc:以像素为单位每个宏块的横坐标;
[0048] new_yloc:以像素为单位每个宏块的纵坐标;
[0049] 将new_addr映射成片外存储器所识别的物理地址(分时复用二维地址)。
[0050] 上述步骤1中,不分别考虑每个宏块的起始地址,而将各宏块中的数据按顺序线性写入(即,将每个宏块按宏块行内从左至右顺序写入,然后写下一个宏块行的数据,直至最后一个宏块行的数据写完成);这种写操作可以将数据看做是一维连续存储,写操作时只需要锁存每个亮度和色度宏块的起始地址即可。每个宏块有16行2列个数据,而每次写操作都是先逐行,在行末再转至下一行头,直至所有的32个被写入的数据全部从编码核中读完为止。
[0051] 上述步骤3中,
[0052] 区分数据类型:DBF模块的地址计算单元会用于区分重构数据和下采样数据,当DBF新的写操作请求到来时,根据type信号来判断数据类型,当一次请求的数据写入片外存储器中,地址计算模块的状态机就会转入IDLE状态,等待下次请求;
[0053] 步骤3计算起始地址:DBF模块的地址计算单元用于产生去块效应滤波写操作的起始地址,该模块会根据固件(firmware)给出的DBF空间起始地址和本次操作的二维坐标,计算该模块映射到片外存储器输入端的起始地址。
[0054] 本发明的模块体系架构图如图1所示。
[0055] 1、去块效应滤波模块的握手操作:
[0056] 编码核发出写操作请求信号,写请求模块判断写入的数据是重构还是下采样数据,同时判断DBF写缓冲模块是否变成满,然后响应请求信号,并发出grant信号;下一个周期再发出strobe信号,在strobe信号发出的同一个周期编码核给后端DBF模块写入的数据。根据req—grant—strobe这样的握手交互来实现数据的写入操作。将每个宏块按宏块行内从左至右顺序写入,再写下一个宏块行的数据,直至最后一个宏块行的数据写完成。
[0057] 每个宏块有16行2列,而每次写操作都是逐行进行,在行末再转至下一行头,直至所有的32个数据全部从缓存中读出为止。
[0058] 2、去块效应滤波重构数据的写操作起始地址计算:
[0059] 当编码核的写操作请求发出时,根据type信号来判断数据类型。DBF地址计算模块区分重构数据和下采样数据。当数据类型为重构数据时,DBF地址模块会根据固件给出的DBF空间起始地址和本次操作的二维坐标{x、y},计算出DBF模块映射到片外存储器的起始地址。
[0060] 3、DBF模块的数据拼接方式:
[0061] 如图2所示。第一个宏块行的数据行数为12,拼接成16行的宏块,在一个宏块内是连续地址存储,则每次起始地址都应该是32个数据对齐。因此每个宏块写入结束后预留4行亮度、2行色度的空位。
[0062] 第二个宏块行的数据要分成两部分(4行亮度2行色度,12行亮度6行色度)数据,然后将4行亮度(8个连续数据)或2行色度(4个连续数据)写入上个宏块行中每个宏块的预留位置处。每个宏块前4行亮度2行色度的写操作起始地址为上一个宏块行对应的起始地址。
[0063] 对于第二个宏块行剩余的12行亮度或6行色度,则写入本宏块行对应的起始地址位置,同时仍预留空4行亮度或2行色度以供后面的宏块行使用。以此类推,对于除第一个和最后一个以外的宏块行,均采用该方法拼接数据。
[0064] 当写至最后一个宏块行时,以亮度为例:每个宏块分三次操作,先写4行用于填充上个宏块行对应宏块的预留位置,再将剩余的12行和下次请求的4行数据合并入最后一个宏块行的对应位置。
[0065] 4、DBF重构数据在片外存储器中的地址映射方式:
[0066] DBF重构数据在片外存储器中的地址映射方式如图3所示。
[0067] 在片外存储器中,图像按照一维方式存储,亮度数据按照一帧图像的起始地址连续存储。顶场数据放在一帧空间的上半部分(起始地址),底场数据放在下半部分(一帧的二分之一高度对应的地址)。
[0068] 色度的写操作与亮度设计方法相同,只是色度的起始地址需要跨过一帧亮度的空间。场模式的写操作处理方式与帧模式类似,只是需要根据顶底场判断信号来区分顶场、底场。DBF模块的重构数据依次连续按照“顶场亮度—底场亮度—顶场色度—底场色度”的顺序写入片外存储器中。
[0069] 从编码核到片外存储器的地址映射如下所示:
[0070] new_addr:mc_width_mbs*mb_rows_cnt*32+wxloc/2*32+(new_yloc*2–mb_rows_cnt*32)
[0071] 最后将new_addr映射成片外存储器所识别的分时复用二维地址。
[0072] 5、状态机控制及数据流:
[0073] 图4是本发明控制模块状态机;
[0074] 系统复位后状态机进入DBF_IDLE状态;当FIFO缓存了一次DBF重构的写请求数据,则buffer_ready!=0同时状态机跳转到DBF_REQ,表明DBF模块可以向DDR2发出写请求了;若buffer_ready!=0条件不满足,则状态机保持在DBF_IDLE状态;
[0075] 在DBF_REQ状态中,当wr_ddr2_gnt==1’b1时,进入DBF_RDDATA状态,此时片外存储器准备好了,可以开始写DBF重构数据了;若wr_ddr2_gnt==1’b1不满足,说明有其它模块占用片外存储器,需等待,并保持请求写DDR2的状态;
[0076] 在DBF_RDDTA状态中,当wr_ddr2_end==1’b1时,进入DBF_IDLE状态,此时后端逻辑DBF模块已经完成了数据向DDR2中的写操作,并转到DBF_IDLE状态,响应下一次编码核的写操作请求;若wr_ddr2_end==1’b1不满足,说明数据还未向DDR2中写完成,仍保持在DBF_RDDATA状态中。
[0077] DBF写操作模块可以简单地根据数据流走向分为若干子操作,具体见图5所示。