CN103237157A - 一种实时高清视频图像转置器 - Google Patents
一种实时高清视频图像转置器 Download PDFInfo
- Publication number
- CN103237157A CN103237157A CN2013101738545A CN201310173854A CN103237157A CN 103237157 A CN103237157 A CN 103237157A CN 2013101738545 A CN2013101738545 A CN 2013101738545A CN 201310173854 A CN201310173854 A CN 201310173854A CN 103237157 A CN103237157 A CN 103237157A
- Authority
- CN
- China
- Prior art keywords
- data
- read
- 8bit
- view data
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Image Processing (AREA)
Abstract
本发明公开了一种实时高清视频图像转置器通过数据组合模块,首先将n行8bit的图像数据按列组合为一个n×8bit的图像数据,存储时,每存储一次偏移量增加(H/n)×data_width,完成n行后基地址增加data_width,对下n行进行相同的处理,直到整幅图像数据存储完毕;读取时,每读取一次偏移量增加data_width,数据拆分模块将H/n次读取的图像数据都进行拆分,然后依次输出,得到行列转置图像。本发明采用不同的方式,对组合的n×8bit的图像数据进行存储和读取,从而实现了图像的转置。另外通过采用帧级流水以及并行处理方式降低了存储图像的内存需求,有效地减少了内存消耗,达到图像转置实时性的要求。
Description
技术领域
本发明属于视频图像处理技术领域,更为具体地讲,涉及一种实时高清视频图像转置器。
背景技术
通常视频图像采用按行的方式传输,但在二维信号处理以及图像处理应用中需要按列对图像进行处理,因此,图像转置是一个非常重要的组成部分。例如,对于二维小波变换,它可以通过一次行变换和一次列变换来实现,首先需对输入图像先进行行变换,然后对行变换后的图像再进行一次列变换,这样就完成了二维小波变换。另外,在一些复杂的图像算法处理中,要求视频图像以按列的方式传输,以便于对图像进行处理。如三星高级技术研究所的Yong JuJung,Aron Baik等人发表的一篇论文名为《A novel2D-to-3D conversion techniquebased on relative height depth cue》,该论文提出了一种深度估计算法,以应用于2D转3D系统中,最终实现实时的2D转3D功能,该算法要求按列对数据进行处理。然而,对于高清晰度(HD)的视频,例如1280×720(HD720p),图像转置器的资源消耗会显著增加,处理速度也将随之下降。因此,为满足高清视频实时处理的要求,超大规模集成电路(VLSI)的硬件实现是十分必要的。
在以往的研究中,0.Fatemi和S.Panchanathan等人针对小矩阵,例如4x4、8x8,开发出了一种可伸缩的矩阵转置的硬件架构。崔巍等人[5]在20MHz的时钟频率下,实现了对512x512x8bit图像的转置,消耗了4242个逻辑单元以及83406bit的存储单元。在100MHz工作频率下,孙超,杨春玲等人实现了SVGA模式下的图像转置。然而,在高清晰度(HD)的视频越来越普及的今天,需要对高清视频图像进行转置处理,然而采用现有的图像转置器,资源消耗大,实时性不高。
发明内容
本发明的目的在于克服现有技术的不足,提供一种实时高清视频图像转置器,以提高转置的实时性,同时减小资源的消耗。
为实现上述目的,本发明实时高清视频图像转置器,其特征在于,包括:数据组合模块、多口内存控制模块、内存条以及数据拆分模块;
在数据组合模块中,有n片块RAM,每片块RAM用来存储一行8bit的图像数据,所以,数据组合子模块中一次一共可以存储n行8bit的图像数据;
n片块RAM依次对前n行8bit的图像数据进行存储,当存满n行8bit的图像数据时,数据组合子模块将n片块RAM中的数据,即n行8bit的图像数据,依次同时读出并组合为一个个的n×8bit的图像数据即同一列的n个8bit的图像数据组合为一个n×8bit的图像数据送给后面的多口内存控制子模块;多口内存控制模块将数据组合模块传过来的按列组合的n×8bit的图像数据写入到内存条中,其中,写入起始地址采用基地址加偏移量的方式进行计算,偏移量从0开始,每存储一次n×8bit的图像数据,则偏移量增加:
(H/n)×data_width
其中,H为图像的垂直分辨率,data_width为存储一次n×8bit的图像数据所占地址单元的个数;
完成n行8bit的图像数据的存储后,基地址增加data_width,对下n行8bit的图像数据进行相同的处理,这样不断重复,直到整幅图像数据存储完毕;
整幅图像数据存储完毕后,多口内存控制模块读取内存条中存储的n×8bit的图像数据给数据拆分模块,读起始地址采用基地址加偏移量的方式进行计算,偏移量从0开始,每读取一次n×8bit的图像数据,则偏移量增加data_width;数据拆分模块将H/n次读取的n×8bit的图像数据都进行拆分,然后依次输出,得到按列输出的8bit的图像数据,其中拆分是将n×8bit的图像数据拆分为n个8bit的图像数据;数据拆分模块将每H/n次读取的n×8bit的图像数据进行拆分和输出,得到行列转置图像。
本发明的发明目的是这样实现的:
本发明实时高清视频图像转置器通过数据组合模块,首先将n行8bit的图像数据按列组合为一个n×8bit的图像数据,在多口内存控制模块控制下存储到内存条中,每存储一次偏移量增加(H/n)×data_width,完成n行8bit的图像数据后基地址增加data_width,对下n行进行相同的处理,这样不断重复,直到整幅图像数据存储完毕;然后多口内存控制模块读取内存条中存储的n×8bit的图像数据给数据拆分模块,每读取一次偏移量增加data_width,数据拆分模块将H/n次读取的图像数据都进行拆分,然后依次输出,得到按列输出的8bit的图像数据,数据拆分模块将每H/n次读取的图像数据进行拆分和输出,得到行列转置图像。
本发明采用不同的方式,对组合的n×8bit的图像数据进行存储和读取,从而实现了图像的转置。另外通过采用帧级流水以及并行处理方式降低了存储图像的内存需求,有效地减少了内存消耗,达到图像转置实时性的要求。
附图说明
图1是本发明实时高清视频图像转置器一具体实施方式原理框图;
图2是图1所示数据组合模块接口框图;
图3是图1所示数据组合模块的内部结构图;
图4是图1所示数据组合模块中图像数据读取组合示意图;
图5是图1所示数据组合模块接口时序图;
图6是图1所示多口内存控制模块接口框图;
图7是图1所示多口内存控制模块的内部结构图;
图8是Burst存储与读取示意图;
图9是16行8bit图像数据与Burst对应关系图;
图10是写起始地址产生示意图;
图11是DDR2内存条中图像数据和地址对应关系图;
图12是读DDR2示意图;
图13是图1所示多口内存控制模块接口时序图;
图14是图1所示DDR2内存条读写时序图;
图15是图1所示数据拆分模块接口框图;
图16是图1所示数据拆分模块内部结构图;
图17是数据拆分以及存储示意图;
图18是数据拆分模块接口时序图;
图19是图像转置结果图。
具体实施方式
下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
图像转置器完成的功能是将按行输入进来的图像(图像中像素的位宽为8-bit),经过图像转置器后,该图像按列输出,即完成图像的行(按行输入)列(按列输出)转换。
图1是本发明实时高清视频图像转置器一具体实施方式原理框图。
在本实施例中,如图1所示,本发明实时高清视频图像转置器包括数据组合模块(mpmc_data_comb)1、多口内存控制模块2(MPMC即Multi-Port MemoryController)、内存条3以及数据拆分子模块4(mpmc_data_split),其中内存条3为DDR2内存条,多口内存控制子模块2需要与DDR2内存条3进行交互。
实时高清视频图像转置器接收输入接口单元按行传过来的图像数据hdmi_rd_data[7:0]、数据有效信号hdmi_rd_data_valid、行场同步信号hdmi_vsync、hdmi_vsync以及数据使能信号hdmi_de,经过实时高清视频图像转置器后,按列输出图像数据以及数据有效信号img_col_data[7:0]、img_col_data_valid,具体实现过程如下:
数据组合模块1根据数据有效信号hdmi_rd_data_valid,将8bit的图像数据hdmi_rd_data[7:0]存入块RAM中。在数据组合子模块1中,一共有n=16片块RAM,每片块RAM用来存储一行8bit的图像数据,所以,数据组合子模块1中一共可以存储16行8bit的图像数据,当存满16行8bit的图像数据时,数据组合子模块1将16片块RAM中的数据,即16行8bit的图像数据,依次同时读出并组合为一个个的16×8bit的图像数据即同一列的16个8bit的图像数据组合为一个16×8bit的图像数据送给后面的多口内存控制模块2。在本实施例中,输入的高清视频图像的分辨率为1280*720,即水平分辨率W为1280,垂直分辨率H为720,因此组合的16×8bit的图像数据有1280个。
然后,多口内存控制模块2将数据组合子模块mpmc_data_comb传过来的按列组合的128bit(128bit=16×8bit)的图像数据写入到DDR2内存条3中,再从DDR2内存条3中读出图像数据。
此时128bit图像数据是以4列为单位进行写入和读取,即每次存储16×8bit的图像数据存入了四个,每次读取也读取四个即4列图像数据,送给后面的数据拆分模块。需要注意的是,这里将128bit图像数据写入DDR2内存条3和从DDR2内存条3中读出数据,虽然读写起始地址的计算均采用基地址加偏移量的方式,但两者的偏移量是不一样的,这也正是本发明实现图像转置的关键之处,即通过控制写和读DDR2内存条3地址偏移量的不同,实现了图像数据按行写入DDR2内存条3中,而从DDR2内存条3中按列读出图像数据。最后,数据拆分模块4将;多口内存控制模块2传过来的4列图像数据,进行拆分处理后,逐列的输出图像数据。
1、数据组合模块
1.1、结构
如图2、3所示,数据组合模块1的功能是将16行的8bit图像数据逐列组合成128-bit的数据送给多口内存控制模块2。实现方法是:通过采用16片块RAM(块RAM是一种快速存储器),对逐行输入进来的8bit图像数据进行缓存,每缓存完16行就将8bit图像数据组合后输出给多口内存控制模块2,其中组合的方式是,将16个8bit的图像数据捆绑在一起,组成一个128bit(128=16*8)的图像数据。在本实施例中,之所以选用16片块RAM,是因为DDR2的写入数据位宽是128bit,而图像数据位宽是8bit,因而需要16片块RAM。其I/O端口列表如表1所示:
表1
从图4可以看到,数据组合子模块1使用了16片块RAM,每片块RAM输入数据的位宽为8bit,数据深度为1280(即可以存储1280个8-bit的数据),用于缓存16行图像数据。数据组合子模块1输出数据的位宽为128bit,因此,数据组合子模块1实现的功能主要是完成对这16片块RAM的读写控制,实现图像数据按列进行组合。
1.2、工作原理
数据组合子模块1工作原理如下:
(1)、接收到逐行输入的8-bit位宽的图像数据后,在数据有效信号hdmi_rd_data_valid为高时,将每行图像数据hdmi_rd_data逐行缓存到16块RAM中。之所以要缓存16行图像数据,是因为DDR2内存条3写入数据的位宽为128bit,而输入的图像数据位宽为8bit,因此,每一次需要16行图像数据才能组合成128bit(128=16×8)位宽的数据;
(2)、当缓存完16行数据后,即16片块RAM都已存好后,在数据有效信号hdmi_rd_data_valid为低时,同时读取16片块RAM中的数据,并对读取出来的8bit图像数据进行组合,最后,将组合好的128bit图像数据输出给MPMC模块。
这里需要注意以下两点:
1)、图像数据组合的方式。如图4所示,对16片块RAM依次同时读出并组合读取即对16片块RAM相同地址上的数据进行读取组合后128bit图像数据输出。组合时从第1片块RAM bram0读取的8bit图像数据,处于128bit图像数据的低8位,从第2片块RAM bram1读取的8bit图像数据,处于128bit图像数据的次低8位,依次类推,从第16片块RAM bram15读取的8bit图像数据,处于128bit图像数据的高8位。
2)、对块RAM的读操作是分两次进行的。
第1次同时读取16片块RAM的前一半数据,第2次同时读取块RAM的后一半数据,两次读操作间隔时间要长一些,此处设定为800个时钟周期,即4000ns(4000ns=1/200MHz*800)。以1280*720P分辨率的图像为例,在16片块RAM均已存好后,第1次读操作同时读取16片块RAM中地址0~639上的数据,即一行中的前半行数据;第2次读操作同时读取16片块RAM中地址640~1279上的数据,即一行中的后半行数据,并且两次读操作时间间隔为800个时钟周期,即4000ns(4000ns=1/200MHz*800)。这里读操作分成2次,并且间隔时间设为800个时钟周期,这是因为数据组合模块1的输出图像数据输送给多口内存控制模块2后,多口内存控制模块2会将图像数据写入到DDR2内存条3中,写DDR2内存条3是按burst的方式进行操作的,若burst之间的地址间隔太大,会造成写DDR2内存条速度3过于缓慢,最后会由于外部写入DDR2内存条3的数据太多和太快,导致图像数据没有全部写入到DDR2内存条3中,而使得图像数据丢失。数据组合子模块1正是这样一种情况,若一次性将16片块RAM中的数据全部读出来,组合成128bit的图像数据输送给多口内存控制模块2,由于在多口内存控制模块2中,对DDR2内存条3进行写操作时,在每一个burst结束时地址会累加360,这样burst之间的地址间隔比较大,而且跳变很频繁,这将会造成写DDR2内存条3速度过于缓慢,从而导致数据组合子模块1后面传过来的图像数据没有写入到DDR2内存条3中,使得数据丢失。因而,先读一半数据给多口内存控制模块2,等待800个时钟周期,这期间完成数据写入DDR2内存条3中,然后,读剩下的一半数据给多口内存控制模块2,多口内存控制模块2再将数据写入DDR2内存条3中。
1.3、接口时序
数据组合模块的时序分析如图5所示,该模块在每输入16行8bit图像数据即hdmi_rd_data[7:0]后,在第17行数据输入前,输出组合后的128bit图像数据hv_conv_mpmc_data[127:0]以及数据有效信号,送给多口内存控制模块2,将存储深度为1280的128bit图像数据分两次读操作读出并存储到DDR2内存条3中,两次读操作直接间隔4000ns。
2、多口内存控制模块
多口内存控制模块2实现的主要功能是,将数据组合模块1传过来的按列组合的128bit(128bit=16×8bit)的图像数据写入到DDR2内存条3中,再从DDR2内存条3中读出图像数据。不过图像数据是以4列为单位进行读取(每次写入DDR2内存条3中是16行的图像数据),每次从DDR2内存条3中读出来是4列的图像数据,送给后面的数据拆分子模块4。需要注意的是,这里将数据写入DDR2内存条3和从DDR2内存条3中读出数据,虽然读写起始地址的计算均采用基地址加偏移量的方式,但两者的偏移量是不一样的,这也正是本发明实现图像转置的关键之处,即通过控制写和读DDR2地址偏移量的不同,实现了图像数据按行写入DDR2内存条3中,而从DDR2内存条3中以4列为单位读出图像数据。
多口内存控制模块2的接口框图如图6所示,其I/O接口以及宏参数如表2、表3所示。
表2
宏参名 | 默认值 | 描述 |
DDR_DATA_WIDTH | 128 | DDR2内存条的数据位宽 |
DDR_ADDR_WIDTH | 31 | DDR2内存条的地址位宽 |
表3
2.1、结构
如图7所示,在本实施例中,多口内存控制模块2包括四个子模块,分别为DDR2控制器控制信号产生子模块ddr2_cmd、DDR2控制器子模块ddr2_sdram、写信号产生子模块ddr2_mpmc_wr_data、读信号产生子模块ddr2_mpmc_rd_data。
多口内存控制模块2实现过程是这样的,子模块ddr2_mpmc_wr_data产生的写DDR2控制信号和子模块ddr2_mpmc_rd_data产生的读DDR2控制信号均送给子模块ddr2_cmd,子模块ddr2_cmd将读写控制信号送给ddr2_sdram子模块,ddr2_sdram子模块与DDR2交互,从而达到了控制DDR2读写数据的目的。
ddr2_cmd子模块为DDR2控制器控制信号产生子模块,主要与DDR2控制器ddr2_sdram进行交互,实现数据写入或读出DDR2。ddr2_cmd子模块通过DDR2控制器实现对DDR2进行数据的读写控制。然而,DDR2控制器ddr2_sdram的控制信号要满足一定的协议,所以ddr2_cmd子模块的功能就是,通过接收写信号产生子模块ddr2_mpmc_wr_data产生的写DDR2控制信号以及读信号产生子模块ddr2_mpmc_rd_data产生的读DDR2控制信号,输出读写控制信号对ddr2_sdram进行读写控制,从而达到控制DDR2读写数据的目的。
ddr2_sdram子模块为DDR2控制器子模块,直接与底层的DDR2进行交互,是Xilinx公司已经做好的IP核,此处我们调用的是MIG2.1版本的MIG(Memory Interface Generator,即内存接口生成器)。由于直接对DDR2进行控制太过于复杂,而通过DDR2控制器对DDR2进行控制则会简化很多,因此我们调用Xilinx公司已经做好的DDR2控制器IP核ddr2_sdram来对DDR2进行控制,简化设计。DDR2控制器ddr2_sdram子模块接收ddr2_cmd子模块给出的控制信号,对DDR2进行控制。
ddr2_mpmc_wr_data子模块为写信号产生子模块,主要与ddr2_cmd子模块交互。在数据组合子模块mpmc_data_comb传过来的数据以及数据有效信号hv_conv_mpmc_data、hv_conv_mpmc_data_valid、rd_conv_data_valid的作用下,产生满足DDR2控制器ddr2_sdram所需格式的写DDR2信号,并将写DDR2控制信号送给ddr2_cmd子模块。
ddr2_mpmc_rd_data子模块为读信号产生子模块,主要与ddr2_cmd子模块交互。在行场信号hdmi_de、hdmi_vsync的作用下,产生满足DDR2控制器ddr2_sdram所需格式的读DDR2信号,并将读DDR2控制信号送给ddr2_cmd子模块。
2.2、工作原理
需要预先知道的是:
1)、DDR2的读写控制主要通过数据信号app_wdf_data[127:0]、地址信号
app_af_addr[30:0]以及控制信号app_af_wren、app_af_cmd[2:0]、app_wdf_wren实现;
2)、DDR2的写入读出数据位宽为128bit,每128bit占用2个地址(64bit一个地址);
3)、DDR2是按Burst进行读写,每个Burst包含4个128bit数据,占用8个地址单元,即每经过一个Burst读或写操作,就有4个128bit的数据读出或存入到8个地址单元中。
Burst对应的数据以及地址示意图,如下图8所示。
1)、写DDR2内存条时,ddr2_mpmc_wr_data子模块产生满足DDR2控制器ddr2_sdram所需格式的写DDR2信号,如图7所示,控制信号app_wdf_wren连续为高,app_af_wren每4个时钟跳高一次,app_af_cmd[2:0]的值为3’b000;数据信号app_wdf_data[127:0]由数据组合子模块mpmc_data_comb传过来的数据信号hv_conv_mpmc_data[127:0]直接赋值得到;地址信号app_af_addr[30:0]在app_af_wren为高时进行加8操作,其初始值由写起始地址信号mpmc_wr_addr_start得到。
写起始地址信号mpmc_wr_addr_start的计算由以下公式给出:
mpmc_wr_addr_start<=wr_addr_base+wr_addr_temp,
写起始地址的计算采用基地址加偏移量的方式,在本实施例中,输入图像分辨率为720p,且图像中像素的比特数为8bit,则4列数据需要的地址数为360(偏移量根据外部存储器每个地址的比特数、需要存储的图像数据比特数确定,保证存储4列图像数据即可。在本实施例中,DDR2中的每个地址存储64bit的数据,而输入数据经过组合后为128bit,每两个地址表示一个数据,每存储一次16×8bit的图像数据为4个数据,则占用8个地址单元,即存储一次n×8bit的图像数据所占地址单元的个数data_width=8。分辨率为720p的8bit图像数据组合后,需要存储H/n次即720/16=45次,则偏移量=45×8=360,即每4列有4×45=180个128bit数据,故需360个地址)。
对于偏移量wr_addr_temp,每写一个Burst之后,偏移量就需加上360。如下图9所示,由于输入进来的128bit数据是由16行8-bit的数据组合而成,1个写Burst就刚好跨了4列,因此,在写DDR2过程中,每经过一个Burst,偏移量wr_addr_temp就加上360,相应的写起始地址信号mpmc_wr_addr_start也就加了360,因而在写DDR2时,这种加360的操作是非常频繁的。如下图10所示,图10是以输入图像分辨率为720p,且图像中像素的比特数为8bit为例,给出了写DDR2时,相应的地址跳变示意图,从图10可以看到,需要14400(14400=45(垂直方向)*320(水平方向))个Burst才能把整幅图像写入到DDR2内存条3中,在垂直方向有45个Burst,而一个Burst需要8个地址单元,所以,45个Burst占用的地址数是360(360=45*8),这也正是写DDR2时,偏移量wr_addr_temp加上360的原因。
对于写起始地址信号mpmc_wr_addr_start,当16行8-bit的数据写完后,写起始地址信号mpmc_wr_addr_start就加上8即基地址增加data_width,并把值赋给DDR2地址信号app_af_addr,如图10所示。
对于基地址wr_addr_base,它对应图像存储区的起始地址。我们定义了2个图像存储区即可存2帧,所以有2个基地址值,分别为V1_ADDR_BASE和V2_ADDR_BASE,基地址wr_addr_base则是在每遇到一个场同步hdmi_vsync的上升沿才更换另一个基地址值,即交替选择基地址值V1_ADDR_BASE、V2_ADDR_BASE。由此就可以通过修改基地址值来确定往哪个存储区写入图像数据。
在本实施例中,如图11所示,通过控制DDR2地址信号app_af_addr的改变,即使偏移量wr_addr_temp在每个写Burst之后累加360、基地址wr_addr_base在每次写完16行数据之后累加8,原始图像中的数据按列存储在了DDR2内存条3中,这里的按列存储并不是按照通常所说的第1列、第2列、第3列这样的顺序存储方式,而是将4列数据打包存储,即按照存储第1~4列、第5~8列、第9~12列这样的方式顺序存储,在每8个地址单元上同时存有某4列的数据,如0~7地址单元上就存有第1~4列的数据。
2、读DDR2内存条时,ddr2_mpmc_rd_data子模块产生满足DDR2控制器ddr2_sdram所需格式的读DDR2信号,如图15所示,控制信号app_wdf_wren连续为低,app_af_wren连续为高,app_af_cmd[2:0]的值为3’b001;地址信号app_af_addr[30:0]连续加8。
如图11所示,由于读DDR2时,地址是连续加8,所以,从DDR2中读出来的数据是按列的,但这里的按列并不是通常所说的第1列、第2列、第3列这种逐列的方式读取出来,而是每次读取4列数据,以4列为一个单元,从左到右直到读完整幅图像,在读某4列数据的时候,是一段一段的将数据读取出来,如下图12所示,先读取1~4列的前16行数据,接着再读取后面的16行数据,以此类推,直到读取完最后的16行数据;读完1~4列数据后,接着再读5~8列数据,同样也是先读5~8列的前16行数据,接着再读取后面的16行数据,以此类推,直到读取完最后的16行数据。对于其他列,也是类似读取。
2.3、接口时序
在多口内存控制模块2内部形成了帧级流水,即外部输入第i帧的时候,将第i帧数据写入DDR2内存条3中,同时将DDR2内存条3存好的第i-1帧数据读取出来,输出第i-1帧。具体过程如下,读DDR2是在前一帧写完之后,才开始读取该帧,如上图13可知,当第一帧写完之后,在写第二帧的时候,才开始读取第一帧的数据,在写第三帧的时候,才开始读取第二帧的数据,以此类推,这通过修改读写起始地址的基地址值实现即两个基地址值分别用来计算读写起始地址,然后一帧后交替,在计算读写起始地址。
读DDR2内存条3总是滞后于写DDR2内存条3一帧的时间。这样做的原因是因为读DDR2内存条3是按列读取的,需要整列的数据,而数据输入进来即写DDR2内存条3是按行进行的,因此,只有将整帧图像数据都写入DDR2内存条3后,才能将整帧图像数据按列读取出来。
一般情况下,在读DDR2命令产生后,需要等20个时钟周期rd_data_valid信号才会拉高,但rd_data_valid信号有可能不连续,中间偶尔会间断几个时钟,所以需要一定的判别机制,才能完全正确的接收数据,这也正是输出信号ddr2_rd_data_en并且让其持续1100ns,而不是900ns(720(行)*4(列)*8(bit)*5(ns)/128(bit))的原因。
3、数据拆分模块
数据拆分模块4实现的主要功能是将多口内存控制模块2传过来的4列128bit的图像数据进行缓存拆分处理后,逐列的输出图像数据。实现方法是:首先,将输入进来4列图像数据即4个128bit图像数据拆分成单列数据,然后,把拆分后的单列图像数据再拆分为8bit的图像数据分别存入4片块RAM中,最后,顺序读取4片块RAM,使得8bit的图像数据逐列的输出。其结构框图如图15所示,其端口列表、宏参数列表如表4、5所示:
表4
宏参名 | 默认值 | 描述 |
DDR_DATA_WIDTH | 128 | DDR读出的数据位宽 |
IMG_DATA_WIDTH | 8 | 输出的图像数据位宽 |
表5
3.1、结构
从图16可以看到,数据拆分模块4使用了4片块RAM,每片块RAM输入数据的位宽为128-bit,输出数据的位宽为8-bit,数据深度为45(即可以存储45个128-bit的数据,45=720*8-bit/128-bit),用于缓存每一列图像数据。因此,数据拆分模块实现的功能,主要是完成对这4片块RAM的读写控制。
3.2、工作原理
由于多口内存控制模块2输出的图像数据是按读Burst产生的,每个读Burst产生4(列)个128-bit(128-bit=16×8bit)。如图17所示,以1~4列为例,第1个读Burst将1~4列的第1~16行8bit的数据读取出来,第2个读Burst将1~4列的第17~32行8bit的数据读取出来,以此类推,直到最后将1~4列的数据全部读取出来。所以,数据拆分模块4需要将多口内存控制模块2传过来的4(列)个128bit数据进行拆分,并且通过串并转换,将128bit(其实是由某一列的16行8-bit的数据组合而成)数据再拆分为一个个8bit的图像数据输出,最终实现图像按列输出。
以第1个读Burst为例,多口内存控制模块2输出第1~4列的第1~16行数据,输出的数据位宽为128-bit,因此,数据拆分模块4需要将4个128-bit拆开,分别存入4片块RAM中,如将第1个128-bit数据存入bram0中,第2个128-bit数据存入bram1中,第3个128-bit数据存入bram2中,第4个128-bit数据存入bram3中。这样,第1列的前16个8-bit数据就存入了bram0中,第2列的前16个8-bit数据就存入了bram1中,第3列、第4列也是如此。数据拆分子模块对于第2个读Burst读取出来的数据的处理,类似于第1个读Burst,也是将4个128-bit数据拆开并分别存入4片块RAM中。最后,当1~4列数据按Burst方式全部读取出来后,经过数据拆分子模块的处理,4片块RAM中也分别存好了1~4列的数据,即bram0存入了第1列数据,bram1存入了第2列数据,bram2存入了第3列数据,bram3存入了第4列数据,然后,按顺序读取4片块RAM,这样就实现了图像的按列输出。对于图像的其他列,也是采用类似方法处理,这里就不再赘述。
3.3、接口时序
数据拆分模块4的接口时序分析如图18所示,该模块在读DDR2数据有效信号ddr2_rd_data_en为低时,顺序读4片块RAM,顺序输出原图像的4列数据,如输出第1、2、3、4列数据。从图18可以看到,输出4列数据之间间隔了一个hdmi_de即间隔了一行的时间,例如输出第1~4列与输出第5~8列之间就间隔了一行的时间,间隔一行的时间其实是便于后面的模块有充足的时间处理,降低模块在速度上的设计难度。
4、实验结果
4.1、图像转置结果
为了能测试本发明实时高清视频图像转置器的正确性,我们搭建了测试平台,将按行输出的图像数据送给高清视频图像转置器,在Modelsim SE6.5环境下进行了功能测试,并利用MATLAB将测试结果打印显示。
本发明采用分辨率为1280*720的灰度图进行测试,测试结果如下图19所示。转置结果表明,本发明实时高清视频图像转置器可以很好将按行输入进来的图像,经过转置器后,图像按列的输出。相应的转置结果如图19所示。
4.2、硬件实现结果
在65nm CMOS工艺下(开发平台为Xilinx Virtex-5xc5vlx330t-1ff1738)采用Verilog和Xilinx ISE10.1编译实现工具对上述硬件架构进行了实现。本文生成的图像转置器可以在200MHz时钟频率下支持720p分辨率的高清视频。根据Xilinx ISE10.1编译工具给出的综合结果,列出了系统性能分析表,如表7所示,从表6可以看到,当外部输入的视频序列满足分辨率为1280*720、图像像素位宽为8bit时,我们的图像转置器与外部输入的视频序列内容无关,即外部访问没有内容依赖性;整个图像转置器消耗的逻辑资源为3211,占用的片内存储容量为972kbit,在外部存储器即DDR2上占用了1843.2Kbyte,消耗的逻辑资源以及占用的存储量相对来说是比较小的,在一般的集成电路上都可以实现;在处理720P视频时可达到54.98Mpixels/s的吞吐量即59.66f/s。
表6
5、结论
为了满足二维信号处理以及图像处理应用中按列对图像处理的需求,本发明提出了一种实时高清视频图像转置器,该转置器可以有效的解决内存消耗大和转置实时性的问题。通过采用帧级流水的方式降低了存储图像的内存需求,有效的减少了内存消耗,为了能达到实时转置,本发明充分考虑FPGA片内存储资源,通过利用Block RAM和DDR2SDRAM对图像进行拼接和拆分,实现了图像数据的流水存储和并行处理。在开发平台Xilinx Virtex-5xc5vlx330t上,该图像转置器能够在3211逻辑单元、972Kbits片内内存消耗下处理HD720p视频,并达到59.66f/s的系统吞吐量。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
Claims (4)
1.一种实时高清视频图像转置器,其特征在于,包括:数据组合模块、多口内存控制模块、内存条以及数据拆分模块;
在数据组合模块中,有n片块RAM,每片块RAM用来存储一行8bit的图像数据,所以,数据组合子模块中一次一共可以存储n行8bit的图像数据;
n片块RAM依次对前n行8bit的图像数据进行存储,当存满n行8bit的图像数据时,数据组合子模块将n片块RAM中的数据,即n行8bit的图像数据,依次同时读出并组合为一个个的n×8bit的图像数据即同一列的n个8bit的图像数据组合为一个n×8bit的图像数据送给后面的多口内存控制子模块;多口内存控制模块将数据组合模块传过来的按列组合的n×8bit的图像数据写入到内存条中,其中,写入起始地址采用基地址加偏移量的方式进行计算,偏移量从0开始,每存储一次n×8bit的图像数据,则偏移量增加:
(H/n)×data_width;
完成n行8bit的图像数据的存储后,基地址增加data_width,对下n行8bit的图像数据进行相同的处理,这样不断重复,直到整幅图像数据存储完毕;
整幅图像数据存储完毕后,多口内存控制模块读取内存条中存储的n×8bit的图像数据给数据拆分模块,读起始地址采用基地址加偏移量的方式进行计算,偏移量从0开始,每读取一次n×8bit的图像数据,则偏移量增加data_width;数据拆分模块将H/n次读取的n×8bit的图像数据都进行拆分,然后依次输出,得到按列输出的8bit的图像数据,其中拆分是将n×8bit的图像数据拆分为n个8bit的图像数据;数据拆分模块将每H/n次读取的n×8bit的图像数据进行拆分和输出,得到行列转置图像。
2.根据权利要求1所示的图像转置器,其特征在于,所述的内存条为DDR2内存条;
在数据组合模块中有16片块RAM,组合的图像数据为128bit;在多口内存控制模块控制下,该128bit图像数据是以4列为单位进行写入和读取即每次存储到DDR2内存条的128bit图像数据到存入了四个,每次从DDR2内存条读取也读取四个即4列图像数据,送给后面的数据拆分模块,其中存储一次128bit的图像数据所占地址单元的个数为8;
在数据拆分模块中包含有4片块RAM,首先,将输入进来4列图像数据即4个128bit图像数据拆分成单列数据,然后,把拆分后的单列图像数据再拆分为8bit的图像数据分别存入4片块RAM中,最后,顺序读取4片块RAM,使得8bit的图像数据逐列的输出。
3.根据权利要求1所示的图像转置器,其特征在于,对块RAM的读操作是分两次进行的,第1次同时读取16片块RAM的前一半数据,第2次同时读取块RAM的后一半数据,两次读操作间隔4000ns。
4.根据权利要求1所示的图像转置器,其特征在于,所述的基地址有2基地址值,对应两个图像存储区即可存2帧,基地址则是在每遇到一个场同步的上升沿更换为另一个基地址值,通过修改基地址值来确定往哪个存储区写入图像数据;
读DDR2是在前一帧写完之后,才开始读取该帧,当第一帧写完之后,在写第二帧的时候,才开始读取第一帧的数据,在写第三帧的时候,才开始读取第二帧的数据,以此类推,这通过修改读写起始地址的基地址值实现即两个基地址值分别用来计算读写起始地址,然后一帧后交替,在计算读写起始地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310173854.5A CN103237157B (zh) | 2013-05-13 | 2013-05-13 | 一种实时高清视频图像转置器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310173854.5A CN103237157B (zh) | 2013-05-13 | 2013-05-13 | 一种实时高清视频图像转置器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103237157A true CN103237157A (zh) | 2013-08-07 |
CN103237157B CN103237157B (zh) | 2015-12-23 |
Family
ID=48885171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310173854.5A Active CN103237157B (zh) | 2013-05-13 | 2013-05-13 | 一种实时高清视频图像转置器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103237157B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104125424A (zh) * | 2014-08-06 | 2014-10-29 | 中航华东光电(上海)有限公司 | 一种基于fpga的高速、可变帧视频显存设计方法 |
CN105551456A (zh) * | 2015-12-11 | 2016-05-04 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于图像旋转显示的ddr2分块存储方法 |
CN105631888A (zh) * | 2016-01-22 | 2016-06-01 | 上海厚安信息技术有限公司 | 图像数据背景去除处理系统及方法 |
CN110322406A (zh) * | 2019-07-05 | 2019-10-11 | 南京芯驰半导体科技有限公司 | 一种图像转置方法及装置 |
CN110933364A (zh) * | 2019-10-25 | 2020-03-27 | 深圳市道通智能航空技术有限公司 | 全向视觉避障实现方法、系统、装置及存储介质 |
CN111738905A (zh) * | 2020-08-17 | 2020-10-02 | 北京理工大学 | 一种大型人群表演显示屏辅助美术造型生成方法 |
CN113658049A (zh) * | 2021-07-22 | 2021-11-16 | 北京时代奥视科技有限公司 | 一种图像转置的方法、设备和计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6021420A (en) * | 1996-11-26 | 2000-02-01 | Sony Corporation | Matrix transposition device |
CN1832035A (zh) * | 2005-12-27 | 2006-09-13 | 中国科学院计算技术研究所 | 适合矩阵转置的ddr存储控制器及矩阵行列访问方法 |
WO2008103885A2 (en) * | 2007-02-23 | 2008-08-28 | Texas Instruments Incorporated | Parallel architecture for matrix transposition |
CN102567241A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 存储器控制器及存储器访问控制方法 |
WO2013054468A1 (ja) * | 2011-10-14 | 2013-04-18 | パナソニック株式会社 | 転置演算装置とその集積回路、および転置処理方法 |
-
2013
- 2013-05-13 CN CN201310173854.5A patent/CN103237157B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6021420A (en) * | 1996-11-26 | 2000-02-01 | Sony Corporation | Matrix transposition device |
CN1832035A (zh) * | 2005-12-27 | 2006-09-13 | 中国科学院计算技术研究所 | 适合矩阵转置的ddr存储控制器及矩阵行列访问方法 |
WO2008103885A2 (en) * | 2007-02-23 | 2008-08-28 | Texas Instruments Incorporated | Parallel architecture for matrix transposition |
CN102567241A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 存储器控制器及存储器访问控制方法 |
WO2013054468A1 (ja) * | 2011-10-14 | 2013-04-18 | パナソニック株式会社 | 転置演算装置とその集積回路、および転置処理方法 |
Non-Patent Citations (1)
Title |
---|
CHENGFEI GU等: "《Matrix Transposition Based on TMS320C6678》", 《2012 5TH GLOBAL SYMPOSIUM ON MILLIMETER WAVES》, 30 May 2012 (2012-05-30), pages 29 - 32 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104125424A (zh) * | 2014-08-06 | 2014-10-29 | 中航华东光电(上海)有限公司 | 一种基于fpga的高速、可变帧视频显存设计方法 |
CN105551456A (zh) * | 2015-12-11 | 2016-05-04 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于图像旋转显示的ddr2分块存储方法 |
CN105631888A (zh) * | 2016-01-22 | 2016-06-01 | 上海厚安信息技术有限公司 | 图像数据背景去除处理系统及方法 |
CN105631888B (zh) * | 2016-01-22 | 2019-12-13 | 上海厚安信息技术有限公司 | 图像数据背景去除处理系统及方法 |
CN110322406A (zh) * | 2019-07-05 | 2019-10-11 | 南京芯驰半导体科技有限公司 | 一种图像转置方法及装置 |
CN110322406B (zh) * | 2019-07-05 | 2022-11-29 | 南京芯驰半导体科技有限公司 | 一种图像转置方法及装置 |
CN110933364A (zh) * | 2019-10-25 | 2020-03-27 | 深圳市道通智能航空技术有限公司 | 全向视觉避障实现方法、系统、装置及存储介质 |
CN111738905A (zh) * | 2020-08-17 | 2020-10-02 | 北京理工大学 | 一种大型人群表演显示屏辅助美术造型生成方法 |
CN113658049A (zh) * | 2021-07-22 | 2021-11-16 | 北京时代奥视科技有限公司 | 一种图像转置的方法、设备和计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103237157B (zh) | 2015-12-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103237157B (zh) | 一种实时高清视频图像转置器 | |
CN103048644B (zh) | 合成孔径雷达成像系统的矩阵转置方法及转置装置 | |
CN108053855B (zh) | 一种基于sdram芯片的矩阵转置方法 | |
CN102890427B (zh) | 一种直写式光刻系统的fpga中倾斜数据准备的方法 | |
CN102456224A (zh) | 基于fpga实时数字图像增强方法 | |
CN104717485A (zh) | 一种基于fpga的vga接口裸眼3d显示系统 | |
CN106201363B (zh) | 视频流像素级数据随机实时访问的存储器及存储方法 | |
CN104268098B (zh) | 一种用于超高清视频帧率上变换的片上缓存系统 | |
CN100446084C (zh) | 画面数据传送方法、影像数据传送方法以及时序控制模块 | |
CN104469241B (zh) | 一种实现视频帧率变换的装置 | |
Gong et al. | Design of high-speed real-time sensor image processing based on FPGA and DDR3 | |
CN103957402B (zh) | 一种实时全高清2d转3d系统行读写时序设计方法 | |
CN103533327A (zh) | 一种基于硬件实现的dibr系统 | |
CA2802666C (en) | Image processing device | |
US8350865B2 (en) | Method and system for efficiently organizing data in memory | |
JP2007047750A (ja) | Ddrを用いたデータのスキャンシステムおよびその方法 | |
KR102247741B1 (ko) | 이미지 프로세서, 상기 이미지 프로세서의 동작 방법, 및 상기 이미지 프로세서를 포함하는 애플리케이션 프로세서 | |
CN102833541A (zh) | 用于mpeg-2视频解码的sdram存储结构 | |
Belokurov | Implementation of affine transform for image rotation using a HLS language | |
CN102930501A (zh) | 一种控制dibr系统中图像存储的多口内存控制器 | |
CN103236033B (zh) | 基于嵌入式处理器的积分图快速生成方法和装置 | |
CN103236034B (zh) | 基于lsi电路的积分图快速生成方法和装置 | |
KR101337950B1 (ko) | 그래픽 데이터 출력 장치 및 방법 | |
US8675443B2 (en) | Memory architecture for display device and control method thereof | |
CN106483505A (zh) | 一种通用的fpga原位数据转置分块方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |