具体实施方式
下面将结合附图对本发明的最佳实施例进行描述。只要可能,在整个附图中相同的部件将用使用相同的标号。
图4显示了按照本发明的量化器的方框图。该量化器包括一存贮器,即用于存贮块间量化矩阵和块内量化矩阵的RAM42;一RAM控制器44,用于按照DCT系数的扫描方式来产生锯齿次序的一写地址和一读地址,并按照该读/写地址来控制来自RAM42的量化矩阵的读/写过程;一运算控制器46,用于获得并输出来自RAM42的量化的互易值和相应量化矩阵的互易值;运算单元48,用于利用来自运算控制器46的量化标度值和量化矩阵值来量化扫描的DCT系数。
图5显示了按照第一优选实施例的RAM42和RAM控制器44的方框图。在图5中,RAM42包括用于存贮块间量化矩阵的第一库BANK1和用于存贮块内量化矩阵的第二库BANK2。第一库BANK1包括第一子RAM库BANK1A和第二子RAM库BANK1B,用于存贮相同的块间量化矩阵。第二库BANK2包括第三子RAM BANK2A和第四子RAM BANK2B,用于存贮相同的块内量化矩阵。第一子RAM至第四子RAM BANK1A,BANK1B,BANK2A,BANK2B其大小为16比特×32字。
RAM控制器44包括写地址发生器,第一计数器50,用于产生一写地址以存贮块间量化矩阵和块内量化矩阵到RAM42中;读地址发生器,包括第二计数器51,可编程逻辑阵列(PLA)52,和第一多路复用器53,用于按照DCT系数的扫描方式生成一读地址从RAM42中读取相应量化矩阵;数据组合器,包括第二多路复用器54和打包单元55,用于按照编码模式或扫描次序来组合来自于RAM42的量化矩阵。
在描述上述量化器的各操作之前需要确定并推敲进入/来自每个块的输入/输出信号。
对于RAM控制器44的输入信号中,”CLK”和”RST”分别指示系统时钟和有效低操作的复位信号。在”ID_CD”中,识别符ID代表量化矩阵(即,块间量化矩阵或块内量化矩阵)而CD代表连续的量化矩阵数据。”FLAG_ID”表示当前输入ID_CD有效。例如,如果FLAG_ID为高逻辑电平,以两象素单元即16比特来读取ID_CD和连续的量化矩阵数据CD。”mbs”表示宏块的开始。
在到运算控制器46的输入信号中,”QUANT_SCALE_CODE”和”QUANT_SCALE_TYPE”是表示MPEG-2中量化标度的信号。”DC_PREC”表示MPEG-2中定义的块内DC系数的大小(精确度);例如,如果它为0,该DC系数被表现为8比特,如果它为3,该系数被表现为11比特。
在到运算单元48的输入信号中,”DATA_EVEN”和”DATA_ODD”分别表示由DCT转换的两象素单元的奇和偶数据。在运算单元48的输出信号中”QUANT_EVEN”和”QUANT_ODD”是输入的两象素单元中奇偶数据的已量化输出数据。
参考图5中每个块的操作,块间量化矩阵数据以16比特单元被存贮在RAM42的第一库BANK1的第一和第二子RAM BANK1A,BANK1B中。块内量化矩阵数据以16比特单元被存贮在RAM42的第二库BANK2的第三和第四子RAM BANK2A,BANK2B中。在第一库BANK1的第一子RAM BANK1A和第二子RAM BANK1B中,相同的块间量化矩阵数据以16比特单元被存贮在由写地址WADD0表示的32个区域中。在第二库BANK2的第三和第四子RAM BANK2A,BANE2B中,相同的块内量化矩阵数据以16比特单元被存贮在由写地址WADD0表示的32个区域中。块间和块内量化矩阵数据被从系统控制单元(未示出)提供,它们可以是用户定义的矩阵或在MPEG-2中定义的缺省矩阵。
RAM控制器44由系统时钟CLK和复位信号RST操作。通过ID_CD输入的量化矩阵按照写地址WADD0被存贮在RAM42的相应的库中。当DCT系数以锯齿次序扫描时,RAM42中的量化矩阵通过读地址RADD0被读取,而当DCT系数以交替次序被扫描时,它由读地址RADD1,RADD2读取。该读取的量化矩阵被输出到运算控制器46。即在RAM控制器44中,当FLAG_ID为高逻辑电平时,分析ID_CD以识别量化矩阵,按照写地址WADD0,该分析的输入量化矩阵被存贮在RAM42的库的相应的子RAM中。此外,存贮在子RAM中的量化矩阵被宏块开始信号所同步,并按照对应于扫描方式的读地址RADD0和读地址RADD1,RADD2,将它们读出并输出到运算控制器46。每个子RAM具有用于读和写的控制信号(未显示)和用于确保输出的控制信号(未示出)。在RAM控制器44选择相应的子RAM时这些控制信号被提供。
参考图5,在由复位信号RST清除计数值后,第一计数器50按照时钟信号CLK来计数00H至3FH。产生32个写地址WADD0,以在第一和第二子RAM BANK1A,BANK1B和第三和第四子RAM BANK2A,BANK2B中以16比特单元存贮来自系统控制单元(未示出)的量化矩阵数据。写地址WADD0的例子如下表1所示:
表1:写地址
第一计数器(50)的计数值 |
WADD0地址(数据) |
00 |
00(00,01) |
01 |
01(02,03) |
02 |
02(04,05) |
03 |
03(06,07) |
04 |
04(08,09) |
05 |
05(0A,0B) |
06 |
06 (0C,0D) |
07 |
07(0E,0F) |
08 |
08(10,11) |
09 |
09(12,13) |
0A |
0A(14,15) |
0B |
0B(16,17) |
0C |
0C(18,19) |
0D |
0D(1A,1B) |
0E |
0E(1C,1D) |
0F |
0F(1E,1F) |
10 |
10(20,21) |
11 |
11(22,23) |
12 |
12(24,25) |
13 |
13(26,27) |
14 |
14(28,29) |
15 |
15(2A,2B) |
16 |
16(2C,2D) |
17 |
17(2E,2F) |
18 |
18(30,31) |
19 |
19(32,33) |
1A |
1A(34,35) |
1B |
1B(36,37) |
1C | 1C(38,39) |
1D |
1D(3A,3B) |
1E | 1E(3C,3D) |
1F |
1F(3E,3F) |
上面表1显示了何时块间量化矩阵被存贮在第一和第二子RAM BANK1A,BANK1B中。当计数值为0016时,矩阵数据对(00,01)被存贮在由读地址WADD0指示的区域‘00’中。当计数值为0116时,矩阵数据对(02,03)被存贮在由读地址WADD0指示的区域01中。即每个块间量化矩阵对以锯齿次序顺序地存贮在由写地址指示的区域0016-1F16中。如图3A所示。以相同方式,每个块内量化矩阵对以锯齿次序顺序地存贮在第三和第四子RAMBANK2A,BANK2B的区域0016-1F16中。
在由复位信号RST清除了计数值后,第二计数器51(5比特计数器)按照时钟信号计数00H至1FH,在清除后,宏块开始信号mbs的上升沿在第二计数器51中被检测到,并且32个计数值被输出给PLA52和打包单元55。
如下表2和3所示,在PLA52中,按照DCT系数的锯齿扫描和第二计数器51的计数值,来产生读地址RADD0。另外,在PLA52中,按照DCT系数的交替扫描和第二计数器51的计数值,也产生读地址RADD1,RADD2。
表2:读地址(锯齿扫描)
第二计数器(51)的计数值 |
RADD0地址(数据) |
00 | 00(00,01) |
01 |
01(02,03) |
02 |
02(04,05) |
03 |
03(06,07) |
04 | 04(08,09) |
05 | 05(0A,0B) |
06 |
06(0C,0D) |
07 |
07(0E,0F |
08 |
08(10,11) |
09 |
09(12,13) |
0A |
0A(14,15) |
0B |
0B(16,17) |
0C |
0C(18,19) |
0D |
0D(1A,1B) |
0E | 0E(1C,1D) |
0F |
0F(1E,1F) |
10 | 10(20,21) |
11 |
11(22,23) |
12 |
12(24,25) |
13 |
13(26,27) |
14 |
14(28,29) |
15 |
152A,2B) |
16 |
16(2C,2D) |
17 |
17(2E,2F) |
18 |
18(30,31) |
19 |
19(32,33) |
1A |
1A(34,35) |
1B |
1B(36,37) |
1C |
1C(38,39) |
1D |
1D(3A,3B) |
1E |
1E(3C,3D) |
1F |
1F(3E,3F) |
上面表2显示了从第一和第二子RAM BANK1A,BANK1B中读出的块间量化矩阵的例子。在第一和第二子RAM BANK1A,BANK1B中当计数值为0016时,存贮在区域‘00’中的矩阵数据对(00,01)由读地址RADD0读出。在第一及第二子RAM BANK1A,BANK1B中,当计数值为0116时,存贮在区域‘01’中的矩阵数据对(02,03)由读地址RADD0读出。即存贮在由写地址指示的0016-1F16区域中每个矩阵数据对以锯齿次序被顺序地读出,如图3A所示。以相同方式,存贮在第三和第四子RAM BANK2A,BANK2B的区域0016-1F16中的每个块内量化矩阵数据对以锯齿次序被顺序读出。参考表1和表2,当DCT系数以锯齿方式扫描时,写地址WADD0与读地址RADD0对应。
表3:读地址(交替扫描)
第二计数器(51)的计数值 |
RADD1地址(数据) |
RADD2地址(数据) |
00 |
00(00,01) |
01(02,03) |
01 |
01(02,03) |
04(08,09) |
02 |
02(04,05) |
00(00,01) |
03 |
03(06,07) |
02(04,05) |
04 |
04(08,09) |
05(0A,0B) |
05 |
05(0A,0B) |
0A(14,15) |
06 |
0A(14,15) |
11(22,23) |
07 |
11(22,23) |
12(24,25) |
08 |
0B(16,17) |
09(12,13) |
09 |
09(12,13) |
06(0C,0D) |
0A |
06(0C,0D) |
03(06,07) |
0B |
07(0E,0F) |
08(10,11) |
0C |
08(1C,11) |
0C(18,19) |
0D |
10(20,21) |
0B(16,17) |
0E |
12(24,25) |
18(30,31) |
0F |
13(26,27) |
10(20,21) |
10 |
18(30,31) |
17(2E,2F) |
所得产品经X衍射说明其是以β相为主相的氧化铝。
11 |
0C(18,19) |
0F(1E,1F) |
12 |
0D(1A,1B) |
07(0E,0F) |
13 |
0E(1C,1D) |
0D(1A,1B) |
14 |
0F(1E,1F) |
14(28,29) |
15 |
17(2E,2F) |
I3(26,27) |
16 |
19(32,33) |
1C(38,39) |
17 |
16(2C,2D) |
19(32,33) |
18 |
1C(38,39) |
1D(3A,3B) |
19 |
14(28,29) |
16(2C,2D) |
1A |
15(2A,2B) |
0E(1C,1D) |
1B |
1A(34,35) |
15(2A,2B) |
1C |
1B(36,37) |
1A(34,35) |
1D |
1D(3A,3B) |
1F(3E,3P) |
1E |
1E(3C,3D) |
1B(36,37) |
1F |
1F(3E,3F) |
1E(3C,3D) |
上面表3显示了从第一和第二子RAM BANK1A,BANK1B中读出的块间量化矩阵。当计数值为0016时,存贮在区域‘00’中的矩阵数据对(00,01)由第一子RAM BANK1A中的读地址RADD1读出,并且存贮在区域‘01’中的矩阵数据对(02,03)由第二子RAMBANK1B中的读地址RADD2读出。当计数值为0116时,存贮在区域‘01’中的矩阵数据对(02,03)由第一子RAM BANK1A中的读地址RADD1读出,并且存贮在区域‘04’中的矩阵数据对(08,09)由第二子RAM BANK1B中的读地址RADD2读出。即按照第二计数器51的计数值,存贮在由各读地址RADD1,RADD2指示的第一和第二子RAM BANK1A,BANK1B的区域内的矩阵数据对以如图3B所示的相同的次序被读出。以相同方式,对于块内量化矩阵,存贮在由每个读地址RADD1,RADD2指示的第三和第四子RAM BANK2A,BANK2B的区域中的矩阵数据对以与图3B所示相同的次序,按照第二计数器51的计数值0016-1F16读出。
在多路复用器53中,按照来自系统控制单元(未显示)的扫描方式鉴别信号ZZ/ALTER,选择性地将来自PLA52的锯齿次序的读地址RADD0或交替次序的读地址RADD1,RADD2输出到RAM42。例如,如表2所示,当DCT系数以锯齿方式扫描时,第一多路复用器53选择来自PLA52的锯齿次序的读地址RADD0。所选择的读地址RADD0被提供到RAM42中的相应的库中。同时,如表3所示,当DCT系数以交替方式扫描时,第一多路复用器53选择来自PLA52的交替次序的读地址RADD1,RADD2。所选择的读地址RADD1,RADD2被提供到RAM42中的相应库中。
在第二多路复用器中,按照来自系统控制单元(未显示)的编码模式鉴别信号INTER/INTRA,对于块间模式编码,选择第一和第二子RAM BANK1A,BANK1B的输出数据DATA1A,DATA1B,而对于块内模式编码,则选择第三和第四子RAM BANK2A,BANK2B的输出数据DATA2A,DATA2B。
在打包单元55中,选择性地组合两对16比特矩阵数据的上部和下部比特,作为16比特矩阵对数据。该打包的16比特矩阵对数据与第二计数器51的计数值同步,它们被输出到运算控制器46。下面的表4显示了在DCT系数的编码模式为块内编码而扫描方式为锯齿扫描时数据组合的例子。
表4:数据组合的例子(锯齿扫描)
第二计数器(51)的计数值 |
数据组合(BANK1A§BANK1B) | 输出矩阵数据对 |
00 |
DATA1A(16~8)&DATA1B(7~0) |
(00,01) |
01 |
DATA1A(16~8)&DATA1B(7~0) |
(02,03) |
02 |
DATA1A(16~8)&DATA1B(7~O) |
(04,05) |
03 |
DATA1A(16~8)&DATA1B(7~0) |
(06,07) |
04 | DATA1A(16~8)&DATA1B(7~0) | (08,09) |
05 |
DATA1A(16~8)&DATA1B(7~0) |
(0A,0B) |
06 |
DATA1A(16~8)&DATA1B(7~0) |
(0C,0D) |
07 |
DATA1A(16~8)&DATA1B(7~0) |
(0E,0F) |
08 |
DATA1A(16~8)&DATA1B(7~0) |
(10,11) |
09 |
DATA1A(16~8)&DATA1B(7~0) |
(12,13) |
0A |
DATA1A(16~8)&DATA1B(7~0) |
(14,15) |
0B |
DATA1A(16~8)&DATA1B(7~0) |
(16,17) |
0C |
DATA1A(16~8)&DATA1B(7~0) |
(18,19) |
0D |
DATA1A(16~8)&DATA1B(7~0) |
(1A,1B) |
0E |
DATA1A(16~8)&DATA1B(7~0) |
(1C,1D) |
0F |
DATA1A(16~8)&DATA1B(7~0) |
(1E,1F) |
10 |
DATA1A(16~8)&DATA1B(7~0) |
(20,21) |
11 |
DATA1A(16~8)&DATA1B(7~0) |
(22,23) |
12 |
DATA1A(16~8)&DATA1B(7~0) |
(24,25) |
13 |
DATA1A(16~8)&DATA1B(7~0) |
(26,27) |
14 |
DATA1A(16~8)&DATA1B(7~0) |
(28,29) |
15 |
DATA1A(16~8)&DATA1B(7~0) |
(2A,2B) |
16 |
DATA1A(16~8)&DATA1B(7~0) |
(2C,2D) |
17 |
DATA1A(16~8)&DATA1B(7~0) |
(2E,2F) |
18 |
DATA1A(16~8)&DATA1B(7~0) |
(30,31) |
19 |
DATA1A(16~8)&DATA1B(7~0) |
(32,33) |
1A |
DATA1A(16~8)&DATA1B(7~0) |
(34,35) |
1B |
DATA1A(16~8)&DATA1B(7~0) |
(36,37) |
1C |
DATA1A(26~8)&DATA1B(7~0) |
(38,39) |
1D |
DATA1A(16~8)&DATA1B(7~0) |
(3A,3B) |
1E |
DATA1A(16~8)&DATA1B(7~0) |
(3C,3D) |
1F |
DATA1A(16~8)&DATA1B(7~0) |
(3E,3F) |
另外,下面的表5显示了在DCT系数的编码模式为块内编码而扫描方式为交替扫描时数据组合的例子。
表5:数据组合的例子(交替扫描)
第二计数器(51)的计数值 |
数据组合(BANK1A§BANK1B) | 输出矩阵数据对 |
00 |
DATA1A(16~8)&DATA1B(16~8) |
(00,02) |
01 |
DATA1A(7~0)&DATA1B(7~0) |
(03,09) |
02 |
DATA1B(7~0)&ATA1A(16~8) |
(01,04) |
03 |
DATA1B(7~0)&DATA1A(7~0) |
(05,07) |
04 |
DATA1A(16~8)&DATA1B(7~0) |
(08,0B) |
05 |
DATA1A(16~8)&DATA1B(16~8) |
(0A,14) |
06 |
DATA1A(7~0)&DATA1B(7~0) |
(15,23) |
07 |
DATA1B(16~8)&DATA1A(16~8) |
(24,22) |
08 |
DATA1A(16~8)&DATA1B(7~0) |
(16,13) |
09 |
DATA1A(16~8)&DATA1B(16~8) |
(12,0C) |
0A |
DATA1B(16~8)&DATA1A(7~0) |
(06,0D) |
0B |
DATA1A(16~8)&DATA1B(16~8) |
(0E,10) |
0C |
DATA1A(7~0)&DATA1B(16~8) |
(11,18) |
0D |
DATA1B(7~0)&DATA1A(7~0) |
(17,21) |
0E |
DATA1A(7~0)&DATA1B(16~8) |
(25,30) |
0F |
DATA1B(16~8)&DATA1A(16~8) |
(20,26) |
10 |
DATA1B(7~0)&DATA1A(7~0) |
(2F,31) |
11 |
DATA1A(7~0)&DATA1B(7~0) |
(19,1F) |
12 |
DATA1B(7~0)&DATA1A(16~8) |
(0F,1A) |
13 |
DATA1B(7~0)&DATA1A(7~0) |
(1B,1D) |
14 |
DATA1A(16~8)&DATA1B(16~8) |
(1E,28) |
15 |
DATA1B(7~0)&DATA1A(16~8) |
(27,2E) |
16 |
DATA1A(16~8)&DATA1B(7~0) |
(32,39) |
17 |
DATA1A(7~0)&DATA1B(7~0) |
(2D,33) |
18 |
DATA1A(16~8)&DATA1B(16~8) |
(38,3A) |
19 |
DATA1A(7~0)&DATA1B(16~8) |
(29,2C) |
1A |
DATA1B(16~8)&DATA1A(16~8) |
(1C,2A) |
1B |
DATA1B(7~0)&DATA1A(7~0) |
(2B,35) |
1C |
DATA1B(16~8)&DATA1A(7~0) |
(34,37) |
1D |
DATA1A(7~0)&DATA1B(16~8) |
(3B,3E) |
1E |
DATA1B(16~8)&DATA1A(16~8) |
(36,3C) |
1F |
DATA1B(7~0)&DATA1A(7~0) |
(3D,3F) |
运算控制器46按照系统时钟CLK和复位信号RST工作。来自RAM控制器44的量化矩阵被输入到运算控制器46中,其互易值被计算。此外,来自系统控制单元(未显示)的量化类型QUANT_SCALE_TYPE和量化码QUANT_SCALE_CODE信号从RAM控制器44输入到运算控制器46。量化标度值通过计算量化类型QUANT_SCALE_TYPE和量化码QUANT_SCALE_CODE而获得。因此,获得该量化标度值的互易数。DC值由来自系统控制单元(未显示)的DC_PREC值获得。因此获得DC值的互易数。此时,量化矩阵值,量化标度值和包含互易数的DC值从运算控制器46分别输出到运算单元48。而且,对于16比特矩阵对数据,其互易数以8比特单元获得。
在运算单元48中,2象素的DCT系数DATA_EVEN,DATA_ODD被乘以来自运算控制器46的量化标度值的互易数。该计算的值被乘以量化矩阵值的互易数,并进行该值的循环处理。从其输出2象素的量化数据QUANT_EVEN,QUANT_ODD。此时,运算单元48中的计算以流水线方式进行。因此,可提高处理速度。另外,在量化时DCT系数的输入次序和量化矩阵的次序可按照扫描方式互相匹配。
因此,按照本发明的第一实施例,分别以锯齿扫描方式,相同的块间量化矩阵被存贮在两个子RAM中,相同的块内量化矩阵被存贮在两个子RAM中。因此,按照基于DCT系数的扫描方式的读地址,相应的量化矩阵从存贮器中被读出而没有数据冲突。
图6显示了按照第二优选实施例的RAM42和RAM控制器44的详细方框图。RAM42包括用于存贮块间量化矩阵的第一库BANK1和用于存贮块内量化矩阵的第二库BANK2。第一库BANK1包括具有8比特×22字的第一子RAM BANK1A和第二子RAM BANK1B,以及具有8比特×20字的第三子RAM BANK1C。第二库BANK2包括具有8比特×22字的第四子RAM BANK2A和第五子RAM BANK2B,以及具有8比特×20字的第六子RAMBANK2C。
RAM控制器44包括写地址发生器,第一计数器60和第一PLA61,用于产生一写地址以存贮块间量化矩阵和块内量化矩阵到RAM42中;数据分配器62,用于将ID_CD的矩阵数据分成每个库的相应子RAM;读地址发生器,第二计数器63,第二PLA64,第三PLA65和第一多路复用器66,用于按照DCT系数的扫描方式生成一读地址以从RAM42中读取相应量化矩阵:数据组合器,第二多路复用器67和打包单元68,用于按照编码模式或扫描次序对采自于RAM42的矩阵数据以16比特进行组合。
下面将结合图4和图6来详细描述本发明的第二实施例。由于到每个方框的输入/输出信号与在第一优选实施例中所讨论的相同,下面就省略对它们的叙述。
在RAM42的第一库BANK1中,64个块间量化矩阵数据以8比特单元被分配并分别存贮在第一子RAM BANK1A的22个区域,第二子RAM 1B的22个区域,第三子RAM BANK1C的20个区域。第一至第三子RAM BANK1A,BANK1B,BANK1C的每个区域分别由写地址WADD1,WADD2,WADD3表示。对于第二库BANK2,64个块内量化矩阵数据以8比特单元被分配并分别存贮在第四子RAM BANK2A的22个区域,第五子RAM BANK2B的22个区域,第六子RAM BANK2C的20个区域。第四至第六子RAM BANK2A,BANK2B,BANK2C的每个区域分别由写地址WADD1,WADD2,WADD3表示。块间和块内量化矩阵从系统控制单元(未显示)被提供,它们可以是用户定义的矩阵或由MPEG-2定义的缺省矩阵。
RAM控制器44由系统时钟CLK和复位信号RST操作,使得ID_CD的量化矩阵按照写地址WADD1,WADD2,WADD3被存贮在RAM42的相应的库中。此外,RAM42中的量化矩阵按照DCT系数的扫描方式通过读地址RADD1,RADD2,RADD3被读取,它们被输出到运算控制器46。即在RAM控制器44中,当FLAG_ID为“高”逻辑电平时,分析ID_CD以识别量化矩阵类型。该分析的输入量化矩阵被存贮在RAM42的各库的相应的子RAM中。此外,一旦被宏块开始信号mbs同步,在这些库的每个子RAM中的量化矩阵被读出并输出到运算控制器46。每个子RAM具有用于读和写的控制信号(未显示)和用于确保输出的控制信号(未显示)。在RAM控制器44选择相应的子RAM时提供控制信号。
如图6所示,在由复位信号RST清除计数值后,第一计数器60(5比特计数器)按照时钟信号CLK来计数0011至1F11。当FLAG_ID为“高”逻辑电平时,分析ID_CD以识别块间/块内量化矩阵。一旦ID被识别,就输出32个计数值到第一PLA61和数据分配器62。
在第一PLA61中,按照来自第一计数器60的计数值,来产生写地址WADD1,WADD2,WADD3,以将来自系统控制单元(未显示)的量化矩阵以8比特单元存贮在第一至第三子RAM BANK1A,BANK1B,BANK3或第四至六于RAMBANK2A,BANK2B,BANK2CK。当DCT系数以锯齿次序被扫描时,第一PLA61也产生读地址RADD1,RADD2,RADD3。下表6说明了写地址WADD1,WADD2、WADD3。
表6:写地址
第一计数器(60)的计数值 |
WADD1地址(数据) |
WADD2地址(数据) |
WADD3地址(数据) |
00 |
00(00) |
00(01) |
-- |
01 | -- | 0l(03) | 00(02) |
02 |
01(04) |
02(05) |
-- |
03 |
02(06) |
-- |
01(07) |
04 |
03(08) |
-- |
02(09) |
05 |
-- |
03(0B) |
03(0A) |
06 |
04(0C) |
04(0D) |
-- |
07 |
-- |
05(0F) |
04(0E) |
08 |
05(10) |
06(11) |
-- |
09 |
-- |
07(13) |
05(12) |
0A |
06(14) |
08(15) |
-- |
0B |
07(16) |
-- |
06(17) |
0C |
08(18) |
09(19) |
-- |
0D |
09(1A) |
0A(1B) |
-- |
0E |
0A(1C) |
-- |
07(1D) |
0F |
0B(1E) |
-- |
08(1F) |
10 |
-- |
0B(21) |
09(20) |
11 |
OC(22) |
-- |
0A(23) |
12 |
-- |
0C(25) |
0B(24) |
13 |
0D(26) |
0D(27) |
-- |
14 |
-- |
0E(29) |
0C(28) |
15 |
-- |
0F(2B) |
OD(2A) |
16 |
0E(2C) |
-- |
0E(2D) |
17 |
0F(2E) |
10(2F) |
-- |
18 | 10(30) | -- | 0F(31) |
19 |
11(32) |
ll(33) |
-- |
1A |
12(34) |
-- |
10(35) |
1B |
-- |
12(37) |
11(36) |
1C |
l3(38) |
13(39) |
-- |
1D |
-- |
14(3B) |
12(3A) |
1E | 14(3C) | 15(3D) |
-- |
1F | I5(3E) | -- | 13(3F) |
在数据分配器62中,如图3A所示,锯齿次序的16比特量化矩阵数据按照来自第一计数器60的计数值以8比特单元被分配以存贮在3个子RAM的两个之中。在块间量化矩阵的情况下,该16比特量化矩阵数据被分配以存贮在第一至第三子RAMBANK1A,BANK1B,BANK1C中。在块内量化矩阵的情况下,该16比特量化矩阵数据被分配以存贮在第四至第六子RAM BANK2A,BANK2B,BANK2C中。下面的表7说明了该数据分配。
表7:数据分配(块间量化矩阵)
第一计数器(60)的计数值 |
输入 |
00 |
BANK1A&BANK1B |
01 |
BANK1C&BANK1B |
02 |
BANK1A&BANK1B |
03 |
BANK1A&BANK1C |
04 |
BANK1A&BANK1C |
05 |
BANK1C&BANK1B |
06 |
BANK1A&BANK1B |
07 |
BANK1C&BANK1B |
08 |
BANK1A&BANK1B |
09 |
BANK1C&BANK1B |
0A |
BANK1A&BANK1B |
0B |
BANK1A&BANK1C |
0C |
BANK1A&BANK1B |
0D |
BANK1A&BANK1B |
0E |
BANK1A&BANK1C |
0F |
BANK1A&BANK1C |
10 |
BANK1C&BANK1B |
11 |
BANK1A&BANK1C |
12 |
BANK1C&BANK1B |
13 |
BANK1A&BANK1B |
14 |
BANK1C&BANK1B |
15 |
BANK1C&BANK1B |
16 |
BANK1A&BANK1C |
17 |
BANK1A&BANK1B |
18 |
BANK1A&BANK1C |
19 |
BANK1A&BANK1B |
1A | BANK1A&BANK1C |
1B |
BANK1C&BANK1B |
1C | BANK1A&BANKlB |
1D | BANK1C&BANK13 |
1E |
BANK1A&BANK1B |
1F |
BANK1A&BANK1C |
上面表6和7显示了存贮在第一至第三子RAM BANK1A,BANK1B,BANK1C中的块间量化矩阵。当计数值为0016时,矩阵数据(00)存贮在第一子RAM BANK1A的写地址WADD1‘00’的区域中,矩阵数据(01)存贮在第二子RAM BANK1B的写地址WADD2‘01’的区域中。当计数值为0116时,矩阵数据(03)存贮在第二子RAM BANK1B的写地址WADD2‘01’的区域中,矩阵数据(02)存贮在第三子RAM BANK1C的写地址WADD3‘00’的区域中,即按照写地址WADD1,WADD2,WADD3,16比特单元的锯齿次序的块间量化矩阵数据,如图3A所示,以8比特单元被存贮在第一至第三子RAM的两个之中,如表7所示。类似地,按照写地址WADD1,WADD2,WADD3,16比特单元的锯齿次序的块内量化矩阵数据,如图3A所示,以8比特单元被存贮在第四至第六子RAM的两个之中,如表7所示。此时,当计数值相同时,用于定位表6中地址的子RAM与用于分配表7中数据的子RAM对应。
在由复位信号RST清除计数信号后,第二计数器63(5比特计数器)按照时钟信号CLK来计数00H至1FH。在检测到宏块信号mbs的上升沿后,32个计数值被输出到第二PLA64,第三PLA65和打包单元68。
在第二PLA64中,当DCT系数以锯齿次序被扫描时,产生读地址RADD1,RADD2,RADD3以从RAM42中读取相应的量化矩阵。第二PLA64具有与第一PLA61相同的结构。按照来自第二计数器63的计数值,在第二PLA64中产生象下面表8那样的读地址RADD1,RADD2,RADD3。
表8:读地址(锯齿扫描)
第二汁数器(60)的计数值 |
RADD1地址(数据) |
RADD2地址(数据) |
RADD3地址(数据) |
00 |
00(00) |
00(01) |
-- |
01 |
-- |
O1(03) |
00(02) |
02 |
01(04) |
02(05) |
-- |
03 |
02(06) |
-- |
01(07) |
04 |
03(08) |
-- |
02(09) |
05 |
-- |
03(0B) |
03(0A) |
06 |
04(0C) |
04(0D) |
-- |
07 |
-- |
05(0F) |
04(0E) |
08 |
05(10) |
06(11) |
-- |
09 |
-- |
07(13) |
05(12) |
0A |
06(14) |
08(15) |
-- |
0B |
07(16) |
-- |
06(17) |
0C |
08(18) |
09(19) |
-- |
0D |
09(1A) |
0A(1B) |
-- |
0E |
0A(1C) |
-- |
07(1D) |
0F |
0B(1E) |
-- |
08(1F) |
10 |
-- |
0B(21) |
09(20) |
11 |
0C(22) |
-- |
0A(23) |
12 | -- | 0C(25) | 0B(24) |
13 |
0D(26) |
0D(27) |
-- |
14 |
-- |
0B(29) |
0C(28) |
15 |
-- |
OF(2B) |
0D(2A) |
16 |
0E(2C) |
-- |
0E(2D) |
17 |
0F(2E) |
10(2F) |
-- |
18 |
10(30) |
-- |
0F(31) |
19 |
11(32) |
11(33) |
-- |
1A |
12(34) |
-- |
1O(35) |
1B |
-- |
12(37) |
11(36) |
1C |
13(38) |
13(39) |
-- |
1D | -- | 14(3D) | 12(3A) |
1E | l4(3C) | 15(3D) | -- |
1F |
15(3E) |
-- |
13(3F) |
在第三PLA65中,当DCT系数为交替次序扫描时,产生读地址RADDl,RADD2,RADD3,以从RAM42中读取相应的量化矩阵。按照来自第二计数器63的计数值,在第三PLA65中产生下面表9那样的读地址RADDl,RADD2,RADD3。
表9:读地址(交替扫描)
第二计数器(63)的计数值 |
RADD1地址(数据) |
RADD2地址(数据) |
RADD3地址(数据) |
00 |
00(00) |
-- |
00(02) |
01 |
-- |
0l(03) |
02(09) |
02 |
0l(04) |
00(01) |
-- |
03 |
-- |
02(05) |
01(07) |
04 |
03(08) |
03(0B) |
-- |
05 |
06(14) |
-- |
03(0A) |
06 |
-- |
08(15) |
0A(23) |
07 |
0C(22) |
-- |
0B(24) |
08 |
07(16) |
07(13) |
-- |
09 |
04(0C) |
-- |
05(12) |
0A |
02(06) |
04(0D) |
-- |
0B |
05(10) |
-- |
04(0E) |
0C |
08(18) |
06(11) |
-- |
0D |
-- |
0B(21) |
06(17) |
0E |
10(30) |
0C(25) |
-- |
0F |
0D(26) |
-- |
09(20) |
10 |
-- |
10(2F) |
0F(31) |
11 |
-- |
09(19) |
08(1F) |
12 |
09(1A) |
05(0F) |
-- |
13 |
-- |
0A(1B) |
07(1D) |
14 |
0B(1E) |
-- |
0C(28) |
15 |
0F(2E) |
0D(27) |
-- |
16 |
11(32) |
13(39) |
-- |
17 |
-- |
11(33) |
0E(2D) |
18 |
l3(38) |
-- |
12(3A) |
19 |
0E(2C) |
0E(29) |
-- |
1A |
0A(1C) |
-- |
0D(2A) |
1B |
-- |
0F(2B) |
10(35) |
1C |
12(34) |
12(37) |
-- |
1D |
15(3E) |
14(3B) |
-- |
1E |
14(3C) |
-- |
11(36) |
1F |
-- |
15(3D) |
13(3F) |
上面表9显示了从第一至第三子RAM BANK1A,BANK1B,BANK1C读出的块间量化矩阵数据。当计数值为0016时,产生读地址RADD1以从第一子RAM BANK1A中读出存贮在写地址‘00’中的数据(00),并产生读地址RADD3以从第三子RAM BANK1C中读取存贮在写地址‘00’中的数据(02)。另外,当计数值为0116时,产生读地址RADD2以从第二子RAMBANK1B中读出存贮在写地址‘01’中的数据(03),并产生读地址RADD3以从第三子RAMBANK1C中读取存贮在写地址‘02’中的数据(09)。即存贮在分别由读地址RADD1,RADD2,RADD3指示的第一至第三子RAM BANK1A,BANK1B,BANK1C的区域中的矩阵数据按照计数值0016-1F16以图3B所示次序被读出。以相同方式,在块内量化情况下,存贮在分别由读地址RADD1,RADD2,RADD3指示的第四至第六子RAMBANK2A,BANK2B,BANK2C的区域中的矩阵数据按照计数值0016-1F16以图3B所示次序被读出。如上所述,来自第三PLA65的读地址是不连续的,用以以交替次序来读取3个子RAM中的锯齿次序的矩阵数据。由此,矩阵数据通过第一PLA61中产生的写地址被分布并存贮在3个子RAM的两个之中,以使当用第三PLA65按照扫描方式产生的读地址来读取一对矩阵数据时,不会出现数据冲突现象。
在第一多路复用器66中,按照来自系统控制单元(未显示)的扫描方式鉴别信号ZZ/ALTER,选择性地将锯齿次序的读地址RADD1,RADD2,RADD3或交替次序的读地址RADD1,RADD2,RADD3输出到RAM42。例如,在第一多路复用器66中,如表8所示,当DCT系数以锯齿方式扫描时,来自第二PLA64的锯齿次序的读地址RADD1,RADD2,RADD3被选择提供到RAM42的相应的库中。同时,在第一多路复用器66中,如表9所示,当DCT系数以交替方式扫描时,来自第三PLA65的交替次序的读地址RADD1,RADD2,RADD3被选择提供到RAM42的相应的库中。
在第二多路复用器67中,按照来自系统控制单元(未显示)的码模式鉴别信号INTER/INTRA,对于块间编码模式,选择输出第一至第三子RAMBANK1A,BANK1B,BANK1C的输出数据DATA1A,DATA1B,DATA1C,而对于块内编码模式,则选择输出第四至第六子RAM BANK2A,BANK2B,BANK2C的输出数据DATA2A,DATA2B,DATA2C。
在打包单元68中,组合来自第二多路复用器67的两对8比特矩阵数据作为16比特矩阵对数据。该数据与第二计数器63的计数值同步并被输出到运算控制器46。下面的表10显示了在DCT系数的编码模式为块间编码而扫描方式为锯齿扫描时数据组合的例子。
表10:数据组合的例子(锯齿扫描)
第二计数器(63)的计数值 |
数据组合(BANK1A§BANK1B§BANK1C) |
输出矩阵数据对 |
00 |
DATA1A&DATA1B |
(00,01) |
01 |
DATA1C&DATA1B |
(02,03) |
02 |
DATA1A&DATA1B |
(04,05) |
03 |
DATA1A&DATA1C |
(06,07) |
04 |
DATA1A&DATA1C |
(08,09) |
05 |
DATA1C&DATA1B |
(0A,0B) |
06 |
DATA1A&DATA1B |
(0C,0D) |
07 |
DATA1C&DATA1B |
(0E,0F) |
08 |
DATA1A&DATA1B |
(10,11) |
09 |
DATA1C&DATA1B |
(12,13) |
0A |
DATA1A&DATA1B |
(14,15) |
0B |
DATA1A&DATA1C |
(16,17) |
0C |
DATA1A&DATA1B |
(18,19) |
0D |
DATA1A&DATA1B |
(1A,1B) |
0E |
DATA1A&DATA1C |
(1C,1D) |
0F |
DATA1A&DATA1C |
(1E,1F) |
10 |
DATA1C&DATA1B |
(20,21) |
11 |
DATA1A&DATA1C |
(22,23) |
12 |
DATA1C&DATA1B |
(24,25) |
13 |
DATA1A&DATA1B |
(26,27) |
14 |
DAT1C&DATA1B |
(28,29) |
15 |
DATA1C&DATA1B |
(2A,2B) |
16 |
DATA1A&DATA1C |
(2C,2D) |
17 |
DATA1A&DATA1B |
(2E,2F) |
18 |
DATA1A&DATA1C |
(30,31) |
19 |
DATA1A&DATA1B |
(32,33) |
1A |
DATA1A&DATA1C |
(34,35) |
1B |
DATA1C&DATA1B |
(36,37) |
1C |
DATA1A&DATA1B |
(38,39) |
1D |
DATA1C&DATA1B |
(3A,3B) |
1E |
DATA1A&DATA1B |
(3C,3D) |
1F |
DATA1A&DATA1C |
(3E,3F) |
另外,下面的表11显示了在DCT系数的编码模式为块间编码而扫描方式为交替扫描时数据组合的例子。
表11:数据组合的例子(交替扫描)
第二计数器(63)的计数值 |
数据组合(BANK1A§BANK1B§BANK1C) | 输出矩阵数据对 |
00 |
DATA1A&DATA1C |
(00,02) |
01 |
DATA1B&DATA1C |
(03,09) |
02 |
DATA1B&DATA1A |
(01,04) |
03 |
DATA1B&DATA1C |
(05,07) |
04 |
DATA1A&DATA1B |
(08,0B) |
05 |
DATA1C&DATA1A |
(0A,14) |
06 |
DATA1B&DATA1C |
(15,23) |
07 |
DATA1C&DATA1A |
(24,22) |
08 |
DATA1A&DATA1B |
(16,13) |
09 |
DATA1C&DATA1A |
(12,0C) |
0A |
DATA1A&DATA1B |
(06,0D) |
0B |
DATA1C&DATA1A |
(0E,10) |
0C |
DATA1B&DATA1A |
(11,18) |
0D |
DATA1C&DATA1B |
(17,21) |
0E |
DATA1B&DATA1A |
(25,30) |
0F |
DATA1C&DATA1A |
(20,26) |
10 |
DATA1B&DATA1C |
(2F,31) |
11 |
DA7A1B&DATA1C |
(19,1F) |
12 |
DATA1B&DATA1A |
(0F,1A) |
13 |
DATA1B&DATA1C |
(1B,1D) |
14 |
DATA1A&DATA1C |
(1E,28) |
15 |
DATA1B&DATA1A |
(27,2E) |
16 |
DATA1A&DATA1B |
(32,39) |
17 |
DATA1C&DATA1B |
(2D,33) |
18 |
DATA1A&DATA1C |
(38,3A) |
19 |
DATA1B&DATA1A |
(29,2C) |
1A |
DATA1A&DATA1C |
(1C,2A) |
1B |
DATA1B&DATA1C |
(2B,35) |
1C |
DATA1A&DATA1B |
(34,37) |
1D |
DATA1B&DATA1A |
(3B,3E) |
1E |
DATA1C&DATA1A |
(36,3C) |
1F |
DATA1B&DATA1C |
(3D,3F) |
这儿,省略了对运算控制器46和运算单元48的讨论,因为其操作过程与第一实施例相同。
因此,按照本发明的第二实施例,16比特单元的32个量化矩阵数据以8比特单元按锯齿扫描方式被分布并存贮在3个子RAM的两个子RAM中。因此,按照基于DCT系数的扫描方式的读地址,相应的量化矩阵被从存贮器中读出,而没有数据冲突。
结合目前认为最实用最优秀的实施例,已经对本发明进行了描述,但应该理解本发明并不限制于所讨论的实施例,相反,不脱离本发明的精神和范围,普通专业技术人员可作出各种变化和改型。