一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种DCT变换方法及DCT变换电路系统与流程

2021-10-24 06:31:00 来源:中国专利 TAG:变换 电路 方法 系统 编码

一种dct变换方法及dct变换电路系统
技术领域
1.本发明涉及视频编码技术领域,具体涉及一种dct变换方法及dct变换电路系统。


背景技术:

2.dct(离散余弦)变换指的是对输入的残差块先进行行变换(列变换),再进行列变换(行变换),两个一维变换的顺序不影响最终的变换结果。可以发现,在行列变换过程中需要一个中间的转置存储buffer来暂存行变换后的数据。
3.在相关技术中,用一个单端口ram进行存储,这样会导致两次变换之间对该ram的读写会浪费大量的cycle(周期),降低了整体电路的吞吐率。


技术实现要素:

4.本发明的目的是针对上述现有技术的不足提出的一种dct变换方法及dct变换电路系统,该目的是通过以下技术方案实现的。
5.本发明的第一方面提出了一种dct变换方法,所述方法包括:
6.将输入的残差块数据按列存储到不同的第一存储单元中;
7.每从各个第一存储单元并行读出一行残差块数据进行行变换后,按照预设的对角读写规则将行变换后数据中的各个数据写入不同的第二存储单元;
8.按照所述对角读写规则每从各个第二存储单元并行读出一列行变换后数据进行列变换后,将得到的一列变换系数中的各个变换系数分别存储到不同的第三存储单元中,以用于后续量化模块每次从各个第三存储单元并行读出一列换系数进行量化操作。
9.本发明的第二方面提出了一种dct变换电路系统,所述系统包括:
10.第一存储器,具有残差块数据的宽度数量个第一存储单元,每个第一存储单元用于存储所述残差块数据中的一列数据;
11.中间转置存储结构,具有多个第二存储单元;
12.行变换电路,用于从各个第一存储单元并行读出一行残差块数据进行行变换后,按照预设的对角读写规则将行变换后数据中的各个数据写入不同的第二存储单元;
13.第二存储器,具有残差块数据的高度数量个第三存储单元,每个第三存储单元用于存储所述残差块数据经dct变换后的变换系数中的一行系数;
14.列变换电路,用于按照所述对角读写规则从各个第二存储单元并行读出一列行变换后数据进行列变换后,将得到的一列变换系数中的各个变换系数分别存储到不同的第三存储单元中,以用于后续量化模块每次从各个第三存储单元并行读出一列变换系数进行量化操作。
15.基于上述第一方面和第二方面所述的dct变换方法及dct变换电路系统,本技术具有如下有益效果或好处:
16.在输入时,通过将残差块数据按列存储到不同第一存储单元,由于分属在不同第一存储单元的数据可以并行读取到,因此可达到同一行数据的同时读取,从而可以从各个
第一存储单元并行读出一行残差块数据进行行变换计算,提高了读数据的效率;
17.在中间转置存储时,采用对角读写规则将行变换后数据中的各个数据写入到不同的第二存储单元,以满足同一列数据同时读取的目的,从而能够从各个第二存储单元并行读出一列行变换后数据进行列变换计算,避免了对中间转置存储结构的多次读写问题,减少了周期的消耗;
18.在变换系数存储时,通过将一列变换系数中的各个变换系数分别存储到不同的第三存储单元中,由于分属在不同第三存储单元的系数可以并行读取到,因此可达到同一列系数的同时读取,便于后续量化模块的数据读取。
附图说明
19.此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
20.图1为本发明根据一示例性实施例示出的一种dct变换方法的实施例流程图;
21.图2为本发明根据一示例性实施例示出的一种采用输入优化与不采用输入优化之间的对比示意图;
22.图3为本发明根据一示例性实施例示出的一种作为中间转置存储结构的物理结构示意图;
23.图4为本发明根据一示例性实施例示出的一种在中间转置存储结构中选取存储区域示意图;
24.图5为本发明根据一示例性实施例示出的一种行列变换电路的处理逻辑优化前和优化后的对比示意图;
25.图6为本发明根据一示例性实施例示出的一种4x8的写入效果示意图;
26.图7为本发明根据一示例性实施例示出的一种8x4的写入效果示意图;
27.图8为本发明根据一示例性实施例示出的一种第三存储单元结构示意图;
28.图9为本发明根据一示例性实施例示出的一种dct变换电路系统结构示意图。
具体实施方式
29.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
30.在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
31.应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
32.目前在视频编解码芯片的设计中,对于dct变换过程中的转置存储问题主要的解决方案是使用位宽合并方法,即使用一个具有很大位宽的ram,将一行的变换数据,一次写入到该ram中,在做列变换时,从ram的不同比特位位置读出一列变换数据送入变换电路进行列变换,从而达到减少对ram的访问cycle数。
33.然而上述方案在编解码芯片设计中主要存在以下两个问题:
34.1、随着视频分辨率的不断提高,所处理的宏块尺寸越来越大,在avs3视频编码标准中最大的块尺寸可以为128x128。如果使用位宽合并方法,在使用fpga进行实现时,一个128x128x8位宽,深度为1的存储结构很难被综合成ram。
35.2、在使用hls进行敏捷开发的过程中,需要用c/c 语言模拟相应的硬件行为,加上对应的综合指令,编译器才能翻译出符合预期的电路。而位宽合并行为在c/c 编程过程中很难实现,增加了软件设计和debug的难度。
36.为解决上述技术问题,本发明提出一种高效的dct变换方法及变换电路系统,通过对行列变换电路以及中间转置存储结构的优化设计,尤其是对中间存储结构的读写规则进行了改进,减少了行列变换电路对中间存储结构的读取cycle,能够在较小的电路面积上实现较大的吞吐率,提高了电路性能。
37.下面以具体实施例对本发明提出的dct变换方法及变换电路系统进行详细阐述。
38.图1为本发明根据一示例性实施例示出的一种dct变换方法的实施例流程图,包括如下步骤:
39.步骤101:将输入的残差块数据按列存储到不同的第一存储单元中。
40.在一些实施例中,在输入残差块数据时,可以根据该残差块数据的高度,将第一存储器划分为多个深度为高度的第一存储单元,第一存储单元的数量与残差块数据的宽度相等,然后将残差块数据按列存储到各个第一存储单元,由于分属在不同存储单元的数据能够在同一个周期内读取到,因此在一个周期内便可从不同存储单元并行读出一行数据,提升了电路吞吐率。
41.可选的,如果使用hls综合时,假设残差块数据为src,可以使用#pragma hls array_partition variable=src complete dim=2优化指令,将一个存储器ram划分成与残差块数据的宽度相对应的多个第一存储单元,且每个第一存储单元的深度为残差块数据的高度,由此来提高读数据的效率。
42.举例来说,如果不使用上述优化指令划分存储器,如图2中的(a)所示,4x4的残差块数据会被直接存储到一个存储器,由于端口的限制,一个周期只能读出一个数据,如果要将这16个数据读出来进行行变换,则需要至少16个周期;而如果使用上述优化指令划分存储器,如图2中的(b)所示,4x4的残差块数据会按列存储到划分出的4个深度均为4的第一存储单元(bank0~bank3),由于分属在不同bank的数据可以在同一个周期内读取到,因此4行数据只需要4个周期,便可以读完所有的残差块数据,提高了电路的吞吐率。
43.步骤102:每从各个第一存储单元并行读出一行残差块数据进行行变换后,按照预设的对角读写规则将行变换后数据中的各个数据写入不同的第二存储单元。
44.在执行步骤102之前,需要准备好用于存储行变换后数据的中间转置存储结构,可选的,具体准备过程包括:根据残差块数据的高度和宽度确定所需要的存储区域大小,然后
基于所述存储区域大小从预设的中间转置存储结构中选取多个第二存储单元。
45.在具体实施时,为了能够支持最大尺寸64x64的dct变换,预先设置64个深度为64的中间转置存储结构(位宽根据行变换后的数据定义),对应的物理结构如图3所示,bank0~bank63为64个中间转置存储结构。
46.可选的,如果使用hls综合,具体设置方式为:假设一个尺寸为64x64的二维数组coef_tmp[64][64],使用综合指令#pragma hls array_partition variable=coef_tmp complete dim=2对其进行优化,便可得到64个深度为64的中间转置存储结构。
[0047]
具体地,为了对于高度大于宽度的残差块数据和高度小于宽度的残差块数据的读写规则能够统一,假设存储区域大小为mxm,m具体取值为残差块数据的高度和宽度中的最大值。
[0048]
举例来说,如图4所示,对于4x8的残差块数据需要的存储区域大小为8x8,那么基于8x8的存储区域需要从预设的中间转置存储结构中选取出8个深度为8的第二存储单元。
[0049]
在一可选实施例中,在行列变换电路的设计中,主要的运算在于对残差块数据的所有行遍历进行一次n点的变换,在兼顾性能的同时,为了节省电路面积,本发明使用一份行变换电路,按照数据的逻辑关系进行流水线处理,即采用第一流水线策略从各个第一存储单元并行读出一行残差块数据进行行变换后,按照预设的对角读写规则将行变换后数据中的各个数据写入不同的第二存储单元,以用较少的周期数完成行变换处理,兼顾了电路面积和性能。
[0050]
其中,所述第一流水线策略是在对上一行残差块数据进行行变换过程中,再从各个第一存储单元并行读出下一行残差块数据。
[0051]
举例来说,以4x4残差块数据为例,如图5所示,如果不使用流水线策略优化处理逻辑,在使用一份行变换电路情况下,需要顺序执行完残差块数据的所有行,速度很慢;而如果使用流水线策略优化处理逻辑,即使使用一份行变换电路情况下,在对上一行残差块数据进行行变换计算过程中,便可以从各个第一存储单元并行读出下一行残差块数据。
[0052]
假设,读、计算、写均需要1个周期来完成,如表1所示,如果不使用流水线策略优化处理逻辑,处理完4行数据需要消耗12个周期,而如果使用流水线策略优化处理逻辑,在对上一行残差块数据计算过程中,便开始读下一行残差块数据,因此下一行的读过程与上一行的计算过程所占的周期重叠,下一行的计算过程与上一行的写过程所占的周期重叠,处理完4行数据需要消耗6个周期。相对优化前的处理逻辑,同样使用一份行变换电路的情况下,将周期数减少一半,进一步提高了电路的吞吐率。
[0053]
策略电路面积/份cycle无112流水线策略16
[0054]
表1
[0055]
在一可选实施例中,为了满足行变换后数据在一个周期内写入同时,列变换电路每次在一个周期内并行读出一列行变换后数据的目的,所采用的对角读写规则具体实现方式如下:
[0056]
coef_tmp[bank’][depth]=coef_tmp[(bank depth)%size][depth]
[0057]
其中,coef_tmp[bank][depth]表示不采用对角读写规则数据原本要写入的位置,
depth为深度值,bank为第二存储单元的编号;coef_tmp[bank’][depth]表示采用对角读写规则后数据要写入的位置,同理,bank’为第二存储单元的编号;size表示第二存储单元的数量或者总深度,即残差块数据的宽度和高度中的最大值。
[0058]
举例来说,以4x8的数据为例,如图6所示,行变换电路第一次进行行变换得到第一行行变换后数据,采用对角读写规则,该行变换后数据中的4个数据从bank0的depth0位置开始沿着对角方向并行写入[bank0][depth0]、[bank1][depth1]、[bank2][depth2]、以及[bank3][depth3]。
[0059]
对于对角读写规则的具体位置计算:以第一行数据的第3个数据为例,不采用对角读写规则数据原本要写入的位置为[bank0][depth2],size=8,采用对角读写规则后数据要写入的位置为[[bank((0 2)%8)][depth2]=[bank2][depth2];再以第二行数据的第3个数据为例,不采用对角读写规则数据原本要写入的位置为[bank1][depth2],size=8,采用对角读写规则后数据要写入的位置为[[bank((1 2)%8)][depth2]=[bank3][depth2]。
[0060]
由图6可以看出,每行所有数据都被写入了不同的第二存储单元,因此可以实现同时并行写入,并且残差块中同一列的行变换后数据均写入了不同第二存储单元的相同深度位置。
[0061]
再以8x4的数据为例,如图7所示,行变换电路第一次进行行变换得到第一行行变换后数据,采用对角读写规则,该行变换后数据中的8个数据从bank0的depth0位置开始沿着对角方向并行写入[bank0][depth0]、[bank1][depth1]、[bank2][depth2]、[bank3][depth3]、[bank4][depth4]、[bank5][depth5]、[bank6][depth6]、[bank7][depth7]。
[0062]
对于对角读写规则的具体位置计算:以第二行数据的第3个数据为例,不采用对角读写规则数据原本要写入的位置为[bank1][depth2],size=8,采用对角读写规则后数据要写入的位置为[[bank((1 2)%8)][depth2]=[bank3][depth2];再以第三行数据的第7个数据为例,不采用对角读写规则数据原本要写入的位置为[bank2][depth6],size=8,采用对角读写规则后数据要写入的位置为[[bank((2 6)%8)][depth6]=[bank0][depth6]。
[0063]
由图7可以看出,每行所有数据都被写入了不同的第二存储单元,因此可以实现同时并行写入,并且残差块中同一列的行变换后数据均写入了不同第二存储单元的相同深度位置。
[0064]
需要说明的是,无论是对称尺寸(例如8x8)的数据,还是非对称尺寸(例如8x4)的数据,均能够采用上述读写规则达到相同的目的。
[0065]
步骤103:按照对角读写规则每从各个第二存储单元并行读出一列行变换后数据进行列变换后,将得到的一列变换系数中的各个变换系数分别存储到不同的第三存储单元中。
[0066]
在执行步骤103之前,一列列行变换后数据经过列变换得到相应的变换系数时,需要将其写入相应的存储器便于后续读取进行量化,因此需要预先准备好第三存储单元。具体的准备过程可以包括:根据所残差块数据的宽度,将第二存储器划分为多个深度为所述宽度的第三存储单元,第三存储单元的数量与残差块数据的高度相等,这样便可以将变换系数按行存储到各个第三存储单元,由于分属在不同存储单元的数据能够在同一周期内并行读取到,因此在进行量化时,在一个周期内便可从不同存储单元并行读出一列数据,提升了电路吞吐率。
[0067]
可选的,如果使用hls综合时,假设得到的变换系数为dst,可以使用#pragma hls array_partition variable=dst complete dim=1优化指令,将一个存储器ram划分成与变换系数的高度相对应的多个第三存储单元,且每个第三存储单元的深度为变换系数的宽度,由此来提高后续读数据的效率。
[0068]
如图8所示,对于4x4的残差块数据,最终会得到4x4的变换系数,每得到一列变换系数并行写入划分出的4个第三存储单元(bank0~bank3),由于分属在不同bank的变换系数可以在同一个周期内读取到,因此在后续量化时,4行变换系数只需要4个周期,便可以读完所有的变换系数,提高了电路的吞吐率。
[0069]
在一可选实施例中,与上述步骤102中所述的行变换过程的同样原理,本发明使用一份列变换电路,按照数据的逻辑关系进行流水线处理,即采用第二流水线策略,按照对角读写规则从各个第二存储单元并行读出一列行变换后数据进行列变换后,将得到的一列变换系数中的各个变换系数分别存储到不同的第三存储单元中,以用较少的周期数完成列变换处理,兼顾了电路面积和性能。
[0070]
其中,所述第二流水线策略为在对上一列行变换后数据进行列变换过程中,再从各个第二存储单元并行读出下一列行变换后数据。
[0071]
需要说明的是,为了保证按照正确的顺序读出列数据,针对按照对角读写规则每从各个第二存储单元并行读出一列行变换后数据进行列变换的过程,可以按照对角读写规则每从各个第二存储单元并行读出一列行变换后数据,根据该列行变换后数据在第二存储单元中的深度位置,对该列行变换后数据向预设方向循环移位,以达到按照正确顺序读出数据的目的,然后再对经过移位的该列行变换后数据进行列变换。
[0072]
举例来说,如上述图6可以看出,从bank0到bank7这8个第二存储单元中,在深度位置depth0上的第一列数据并行读出后的顺序正确,无需循环移位,即移动0位;在深度位置depth1上的第二列数据并行读出后,写入的第8行第2列的数据位于第一位,顺序不正确,需要向左循环移动1位;在深度位置depth2上的第三列数据并行读出后,写入的第7行第3列的数据位于第一位,写入的第8行第3列的数据位于第二位,顺序不正确,需要向左循环移动2位;在深度位置depth3上的第四列数据并行读出后,需要向左循环移动3位。
[0073]
如上述图7可以看出,从bank0到bank7这8个第二存储单元中,在深度位置depth0上的第一列数据并行读出后的顺序正确,无需循环移位,即移动0位;在深度位置depth1上的第二列数据并行读出后,第一位为空,从第二位开始才是第二列数据,因此需要向左循环移动1位,将空位移到后面;在深度位置depth2上的第三列数据并行读出后,前两位均为空,从第三位开始才是第三列数据,需要向左循环移动2位,将前两个空位移到后面;在深度位置depth3上的第四列数据并行读出后,前三位均为空,从第四位开始才是第四列数据,需要向左循环移动3位,以此类推,在深度位置depth7上的第8列数据并行读出后,需要向左循环移动7位后,才能保证第8列数据的正确顺序。
[0074]
由此可见,每读出一列行变换后数据,需要对该列行变换后数据向左循环移位,移动位数是该列行变换后数据在第二存储单元中的深度位置的序号。
[0075]
至此,完成上述图1所示的变换流程,在输入时,通过将残差块数据按列存储到不同第一存储单元,由于分属在不同第一存储单元的数据可以并行读取到,因此可达到同一行数据的同时读取,从而可以从各个第一存储单元并行读出一行残差块数据进行行变换计
算,提高了读数据的效率;
[0076]
在中间转置存储时,采用对角读写规则将行变换后数据中的各个数据写入到不同的第二存储单元,以满足同一列数据同时读取的目的,从而能够从各个第二存储单元并行读出一列行变换后数据进行列变换计算,避免了对中间转置存储结构的多次读写问题,减少了周期的消耗;
[0077]
在变换系数存储时,通过将一列变换系数中的各个变换系数分别存储到不同的第三存储单元中,由于分属在不同第三存储单元的系数可以并行读取到,因此可达到同一列系数的同时读取,便于后续量化模块的数据读取。
[0078]
与前述dct变换方法的实施例相对应,本发明还提供了dct变换电路系统的实施例。
[0079]
图9为本发明根据一示例性实施例示出的一种dct变换电路系统结构示意图,包括:第一存储器910、行变换电路920、中间转置存储结构930、列变换电路940、以及第二存储器950。
[0080]
其中,第一存储器910,具有残差块数据的宽度数量个第一存储单元,每个第一存储单元用于存储所述残差块数据中的一列数据;
[0081]
中间转置存储结构930,具有多个第二存储单元;
[0082]
行变换电路920,用于从各个第一存储单元并行读出一行残差块数据进行行变换后,按照预设的对角读写规则将行变换后数据中的各个数据写入不同的第二存储单元;
[0083]
第二存储器950,具有残差块数据的高度数量个第三存储单元,每个第三存储单元用于存储所述残差块数据经dct变换后的变换系数中的一行系数;
[0084]
列变换电路940,用于按照所述对角读写规则从各个第二存储单元并行读出一列行变换后数据进行列变换后,将得到的一列变换系数中的各个变换系数分别存储到不同的第三存储单元中,以用于后续量化模块每次从各个第三存储单元并行读出一列变换系数进行量化操作。
[0085]
针对上述第一存储器910、行变换电路920、中间转置存储结构930、列变换电路940、以及第二存储器950的相关描述,可以参见上述图1所示实施例的相关描述,本技术在此不再一一赘述。
[0086]
在一可选实施例中,基于上述图1所示实施例中关于行变换过程的相关描述,如图9所示,行变换电路920具体可以包括第一读模块921、第一计算模块922、以及第一写模块923。
[0087]
其中,第一读模块921,用于从各个第一存储单元并行读出一行残差块数据;
[0088]
第一计算模块922,用于对读出的一行残差块数据进行行变换;
[0089]
第一写模块923,用于按照预设的对角读写规则将行变换后数据中的各个数据写入不同的第二存储单元。
[0090]
在一可选实施例中,基于上述图1所示实施例中关于列变换过程的相关描述,如图9所示,所述列变换电路940具体可以包括第二读模块941、第二计算模块942、以及第二写模块943。
[0091]
其中,第二读模块941,用于按照所述对角读写规则从各个第二存储单元并行读出一列行变换后数据;
[0092]
第二计算模块942,用于对读出的一列行变换后数据进行列变换,得到一列变换系数;
[0093]
第二写模块943,用于将得到的一列变换系数中的各个变换系数分别存储到不同的第三存储单元中。
[0094]
基于上述图9所示的电路系统,在输入时,通过将残差块数据按列存储到第一存储器的不同第一存储单元,由于分属在不同第一存储单元的数据可以并行读取到,因此可达到同一行数据的同时读取,从而可以从各个第一存储单元并行读出一行残差块数据进行行变换计算,提高了读数据的效率;
[0095]
在中间转置存储时,采用对角读写规则将行变换后数据中的各个数据写入到中间转置存储结构的不同的第二存储单元,以满足同一列数据同时读取的目的,从而能够从各个第二存储单元并行读出一列行变换后数据进行列变换计算,避免了对中间转置存储结构的多次读写问题,减少了周期的消耗;
[0096]
在变换系数存储时,通过将一列变换系数中的各个变换系数分别存储到第二存储器的不同的第三存储单元中,由于分属在不同第三存储单元的系数可以并行读取到,因此可达到同一列系数的同时读取,便于后续量化模块的数据读取。
[0097]
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
[0098]
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0099]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜