发明内容
本发明要解决的技术问题是提供一种离散余弦变换的整数反变换装置及其方法,可以使用较少的硬件资源,实现较快的运算速度。
为了解决上述问题,本发明提供了一种离散余弦变换的整数反变换装置,用于依照下式对一组4个输入值A、B,C和D进行离散余弦变换的整数反变换运算,得到4个输出值a′,b′,c′和d′,其中的系数P0,P1,P2为整数:
a′=P0A+P1B+P0C+P2D
b′=P0A+P2B-P0C-P1D
c′=P0A-P2B-P0C+P1D
d′=P0A-P1B+P0C-P2D
其特征在于,该装置包括第一级、第二级、第三级和第四级反变换单元,采用流水线方式对多组输入值进行处理,每一组输入值的整数反变换用10拍完成,以下计为第1拍到第10拍,每拍为一时钟周期,其中:
第一级反变换单元用于在第1~4拍,根据依次输入的A、B、C和D分别计算出输入值的倍数值P0A、P1B和P2B、P0C、P1D和P2D并锁存,在第2~5拍将所述倍数值依次输出到第二级反变换单元锁存,从第5拍开始对下一组输入值的处理;
第二级反变换单元用于在第4~5拍,对锁存的倍数值做加、减运算得到4个中间值b0,b1,b2,b3,b0=P0A+P0C,b1=P0A-P0C,b2=P2B-P1D,b3=P1B+P2D;在6~7拍对4个中间值做加、减运算,得到4个输出值a′,c′,b′,d′,a′=b0+b3,d′=b0-b3,b′=b1+b2,c′=b1-b2,第7拍将a′,d′输出到第三级反变换单元,在第8拍将b′,c′输出到第三级反变换单元并开始对下一组输入值的处理;
第三级反变换单元用于在第7~10拍依次将4个输出值a′,b′,c′,d′输出到第四级反变换单元,从第10拍的下一拍开始对下一组输入值的处理;
第四级反变换单元用于锁存输出值a′,b′,c′和d′,由后续装置依次读出。
进一步地,上述整数反变换装置还可具有以下特点:
所述第一级反变换单元包括一级输入寄存器、一级运算单元、一级输出寄存器、一级输出选择器和一级计数器,其中:
所述一级计数器用于对时钟周期进行计数,向所述一级运算单元和一级输出选择器输出在I0,I1,I2,I3之间循环计数的计数值,第一次循环计数值I0,I1,I2,I3对应于对第一组输入值进行整数反变换的第1~4拍;
所述一级输入寄存器用于锁存依次输入的A、B、C和D并输出到所述一级运算单元;
所述一级运算单元,用于在计数值为I0时对A进行运算得到P0A,在计数值为I1时对B进行运算得到P1B和P2B,在计数值为I2时对C进行运算得到P0C,在计数值为I3时对D进行运算得到P1D和P2D,每拍的运算结果在该拍存入所述一级输出寄存器;
所述一级输出寄存器用于在各拍分别锁存倍数值P0A、P1B和P2B、P0C、P1D和P2D并输出到所述一级输出选择器;
所述一级输出选择器用于在计数值为I1时,将P0A选通输出,在计数值为I2时,将P1B和P2B选通输出,在计数值为I3时,将P0C选通输出,在计数值为I0时,将P1D和P2D选通输出,以上倍数值均输出到第二级反变换单元。
进一步地,上述整数反变换装置还可具有以下特点:
所述离散余弦变换的整数反变换为RV整数反变换,P0=13,P1=17,P2=7;所述一级运算单元包括第一移位运算单元、第二移位运算单元、第三移位运行单元、一级运算选择器、一级加法器和一级减法器,所述一级输出寄存器包括一级加法寄存器和一级减法寄存器,其中:
所述第一移位运算单元用于将输入值左移3位后输出;
所述第二移位运算单元用于将输入值左移2位并加上该输入值后输出;
所述第三移位运算单元用于将输入值左移4位后输出;
所述一级运算选择器用于在计数值为I0和I2时,将第一和第三移位运算单元的输出选通为一级加法器的两个输入,在计数值为I1和I3时,将第三移位运算单元和一级输入寄存器的输出选通为一级加法器的两个输入,同时将第一移位运算单元和一级输入寄存器的输出选通为一级减法器的两个输入;
所述一级加法器用于将两个输入相加后写入一级加法寄存器,在计数值为I0,I1,I2,I3时结果分别为13A,17B,13C,17D;
所述一级减法器用于将第一移位运算单元的输出减去一级输入寄存器的输出后写入一级加法寄存器,在计数值为I1,I3时结果分别为7B,7D;
所述一级加法寄存器和一级减法寄存器用于锁存写入的数值并输出到一级输出选择器。
进一步地,上述整数反变换装置还可具有以下特点:
所述第二级反变换单元包括至少6个二级输入寄存器、二级运算选择器、二级加法器、二级减法器、二级加法寄存器、二级减法寄存器、二级输出选择器、4个中间值寄存器和二级计数器,其中:
所述二级计数器比一级计数器延迟3拍计数,用于向所述二级运算选择器和二级输出选择器输出在I0′,I1′,I2′,I3′之间循环计数的计数值;
所述6个二级输入寄存器用于分别锁存第一级反变换单元输出的倍数值P0A、P1B和P2B、P0C、P1D和P2D并输出到二级运算选择器;
所述二级运算选择器与所述6个二级输入寄存器和4个中间值寄存器相连,用于在计数值为I0′时,将P0A和P0C选通为二级加法器以及二级减法器的两个输入,在计数值为I1′时,将P1B和P2D选通为二级加法器的两个输入,将P2B和P1D选通为二级减法器的两个输入,在计数值为I2′时,将b0和b3选通为二级加法器以及二级减法器的两个输入,在计数值为I3′时,将b1和b2选通二级加法器以及二级减法器的两个输入;
所述二级加法器用于将两个输入相加后写入二级加法寄存器,在计数值为I0′,I1′,I2′,I3′时结果分别为b0,b3,a′,b′;
所述二级减法器用于将两个输入相减后写入二级减法寄存器,在计数值为I0′,I1′,I2′,I3′时结果分别为b1,b2,d′,c′;
所述二级加法寄存器和二级减法寄存器用于锁存写入的数值并输出到二级输出选择器;
所述二级输出选择器用于在计数值为I0′时,将b0和b3选通输出到中间值寄存器,在计数值为I1′时,将b1和b2选通输出到中间值寄存器,在计数值为I2′时,将a′和d′选通输出到第三级反变换单元,在计数值为I3′时,将b′和c′选通输出到第三级反变换单元;
所述4个中间值寄存器用于分别锁存所述4个中间值b0,b1,b2,b3并输出到所述二级运算选择器。
进一步地,上述整数反变换装置还可具有以下特点:
所述第三级反变换单元包括至少2个三级输入寄存器、三级输出选择器和三级计数器,所述第四级反变换单元包括一四级输出寄存器,其中:
所述三级计数器比一级计数器延迟6拍计数,用于向所述三级输出选择器输出在I0″,I1″,I2″,I3″之间循环计数的计数值;
所述2个三级输入寄存器用于分别锁存输出值c′,d′;
所述三级输出选择器用于在计数值为I0″和I1″时,分别将二级反变换单元输出的a′和b′连通到第四级反变换单元的四级输出寄存器,在计数值为I2″和I3″时,分别将锁存的输出值c′,d′连通到第四级反变换单元的四级输出寄存器。
进一步地,上述整数反变换装置还可具有以下特点:
所述计数值I0,I1,I2,I3、计数值I0′,I1′,I2′,I3′和计数值I0″,I1″,I2″,I3″均为0,1,2,3,所述一级、二级和三级计数值均为4位计数器,用于对4组输入进行循环计数,其中的低2位输出到相应的选择器和运算器。
为了解决上述技术问题,本发明还提供了一种离散余弦变换的整数反变换装置,用于依照下式对一组4个输入值A、B、C和D进行离散余弦变换的整数反变换运算,得到4个输出值a′,b′,c′和d′,其中的系数P0,P1,P2为整数:
a′=P0A+P1B+P0C+P2D
b′=P0A+P2B-P0C-P1D
c′=P0A-P2B-P0C+P1D
d′=P0A-P1B+P0C-P2D
其特征在于,该装置包括第一级、第二级、第三级和第四级反变换单元,采用流水线方式对多组输入值进行处理,其中对每组输入值的处理如下:
第一级反变换单元用于对依次输入的A、B、C和D,分别计算出倍数值P0A、P1B和P2B、P0C、P1D和P2D并锁存,然后将所述倍数值依次输出到第二级反变换单元;
第二级反变换单元用于锁存输入的倍数值并做加、减运算得到4个中间值b0,b1,b2,b3,b0=P0A+P0C,b1=P0A-P0C,b2=P2B-P1D,b3=P1B+P2D;然后对4个中间值做加、减运算,得到4个输出值a′,c′,b′,d′,a′=b0+b3,d′=b0-b3,b′=b1+b2,c′=b1-b2,再将a′,c′,b′,d′输出到第三级反变换单元;
第三级反变换单元用于依次将4个输出值a′,b′,c′,d′输出到第四级反变换单元;
第四级反变换单元用于锁存输出值a′,b′,c′和d′,由后续装置依次读出。
进一步地,上述整数反变换装置还可具有以下特点:
所述第一级反变换单元包括一级输入寄存器、一级运算单元、一级输出寄存器、一级输出选择器和一级计数器,所述第二级反变换单元包括6个二级输入寄存器dina,dinb1,dinb2,dinc,dind1,dind2,其中:
所述一级计数器用于对时钟周期进行计数,向所述一级运算单元和一级输出选择器输出从小到大循环计数的4个计数值I0,I1,I2,I3;
所述一级输入寄存器用于锁存输入值并输出到所述一级运算单元;
所述一级运算单元,用于在输入计数值为I0,I2时完成对输入值的“乘P0”运算,在输入计数值为I1,I3时完成对输入值的“乘P1和乘P2”运算,得到的倍数值存入所述一级输出寄存器;
所述一级输出寄存器用于锁存输入的倍数值并输出到一级输出选择器;
所述一级输出选择器用于在计数值为I0,I1,I2,I3时,将一级输出寄存器在上一时钟周期锁存的“乘P0”或“乘P1”运算结果分别连通到二级输入寄存器dina,dinb1,dinc,dind1,在计数值为I1,I3时,将一级输出寄存器在上一时钟周期锁存的“乘P2”运算结果分别连通到二级输入寄存器dinb2,dind2。
进一步地,上述整数反变换装置还可具有以下特点:
所述整数反变换运算为RV解码时采用的整数反变换运算,P0=13,P1=17,P2=7,所述一级运算单元包括第一移位运算单元、第二移位运算单元、第三移位运行单元、一级运算选择器、一级加法器和一级减法器,所述一级输出寄存器包括一级加法寄存器和一级减法寄存器,其中:
所述第一移位运算单元用于将输入值左移3位后输出;
所述第二移位运算单元用于将输入值左移2位并加上该输入值后输出;
所述第三移位运算单元用于将输入值左移4位后输出;
所述一级运算选择器用于在计数值为I0,I2时,将第一和第三移位运算单元的输出选通为一级加法器的两个输入,在计数值为I1,I3时,将第三移位运算单元和一级输入寄存器的输出选通为一级加法器的两个输入,同时将第一移位运算单元和一级输入寄存器的输出选通为一级减法器的两个输入;
所述一级加法器用于将两个输入相加后写入一级加法寄存器;
所述一级减法器用于将第一移位运算单元的输出减去一级输入寄存器的输出后写入一级加法寄存器;
所述一级加法寄存器和一级减法寄存器用于锁存写入的数值并输出到一级输出选择器。
进一步地,上述整数反变换装置还可具有以下特点:
所述第二级反变换单元包括6个二级输入寄存器dina,dinb1,dinb2,dinc,dind1,dind2,二级运算选择器、二级加法器、二级减法器、二级加法寄存器、二级减法寄存器、二级输出选择器、4个中间值寄存器Zb0,Zb1,Zb2,Zb3和二级计数器;所述第三级反变换单元包括2个三级输入寄存器Oc,Od、三级输出选择器和三级计数器;第四级反变换单元包括四级输出寄存器,其中:
所述二级计数器用于向所述二级运算选择器和二级输出选择器输出从小到大循环计数的四个计数值I0′,I1′,I2′,I3′;
所述6个二级输入寄存器dina,dinb1,dinb2,dinc,dind1,dind2用于分别锁存第一级反变换单元输出的6个倍数值;
所述二级运算选择器用于在计数值为I0′时,将寄存器dina和寄存器dinc的输出与二级加法器及二级减法器的输入选通,计数值为I1′时,将寄存器dinb1和寄存器dind2的输出与二级加法器的输入连通,同时将寄存器dinb2和寄存器dind1的输出与二级减法器的输入连通,计数值为I2′时,将寄存器Zb0和寄存器Zb1的输出与二级加法器及二级减法器的输入选通,计数值为I3′时,将寄存器Zb1和寄存器Zb2的输出与二级加法器及二级减法器的输入选通;
所述二级加法器用于将两个输入相加后写入二级加法寄存器;
所述二级减法器用于将两个输入相减后写入二级减法寄存器,其中以寄存器dina,寄存器dinb2,寄存器Zb0,寄存器Zb1的输出为被减数;
所述二级加法寄存器和二级减法寄存器用于锁存写入的数值并输出到二级输出选择器;
所述二级输出选择器用于在计数值为I0′,I1′,I2′,I3′时,分别将二级加法寄存器上一时钟周期锁存的值选通输出到寄存器Zb0,寄存器Zb3,三级输出选择器和三级输出选择器,分别将二级减法寄存器上一时钟周期锁存的值选通输出到寄存器Zb1,寄存器Zb2,寄存器Oc,寄存器Od;
所述三级计数器用于向所述三级输出选择器输出从小到大循环计数的四个计数值I0″,I1″,I2″,I3″;
所述2个三级输入寄存器Oc,Od分别用于对输入值进行锁存并输出到三级输出选择器;
所述三级输出选择器用于在计数值为I0″和I1″时,将从二级输出选择器直接输出的值连通到所述四级输出寄存器,在计数值为I2″和I3″时,分别将寄存器Oc和寄存器Od的输出连通到所述四级输出寄存器。
为了解决上述技术问题,本发明还提供了一种离散余弦变换的整数反变换方法,用于依照下式对一组4个输入值A、B、C和D进行离散余弦变换的整数反变换,得到4个输出值a′,b′,c′和d′,其中的P0,P1,P2为整数:
a′=P0A+P1B+P0C+P2D
b′=P0A+P2B-P0C-P1D
c′=P0A-P2B-P0C+P1D
d′=P0A-P1B+P0C-P2D
其特征在于,通过四级流水完成对多组输入值的整数反变换,从接收到第一个输入值A开始,执行以下处理:
第一级在第1~4拍,根据依次输入的A、B、C和D计算出P0A,P1B,P2B,P0C,P1D和P2D,在第2~5拍输出到第二级锁存,且从第5拍开始对下一组输入值的处理;
第二级在第4~7拍,先做加、减运算b0=P0A+P0C,b1=P0A-P0C,b2=P2B-P1D,b3=P1B+P2D并锁存得到的中间值b0,b1,b2,b3,再做加、减运算a′=b0+b3,b′=b1+b2,c′=b1-b2,d′=b0-b3,第7拍将a′,d′输出到第三级,在第8拍将b′,c′输出到第三级且开始对下一组输入值的处理;
第三级用于在第7~10拍依次将a′,b′,c′,d′输出到第四级,且从第11拍开始对下一组输入值的处理;
第四级反变换单元锁存输出值a′,b′,c′和d′,由后续装置读出。
进一步地,上述整数反变换方法还可具有以下特点:
所述第一级在第1拍根据输入值A,计算出P0A并锁存;第2拍根据输入值B,计算出P1B和P2B并锁存,同时将P0A输出到第二级;第3拍根据输入值C,计算出P0C并锁存,同时将P1B和P2B输出到第二级;第4拍根据输入值D,计算出P1D和P2D并锁存,同时将P0C输出到第二级;第5拍将P1D和P2D输出到第二级。
进一步地,上述整数反变换方法还可具有以下特点:
所述第二级在第4拍,对输入的P0A和P0C作加法和减法运算,得到两个中间值b0和b1并锁存,其中b0=P0A+P0C,b1=P0A-P0C;在第5拍,对输入的P1B、P2B、P1D和P2D作加法和减法运算,得到另两个中间值b2和b3并锁存,其中b2=P2B-P1D,b3=P1B+P2D;在第6拍,对得到的中间值b0和b3作加法和减法运算,得到输出值a′=b0+b3,d′=b0-b3并锁存;在第7拍,对得到的中间值b0和b3作加法和减法运算,得到输出值b′=b1+b2,c′=b1-b2并锁存,同时将a′和d′输出到第三级;在第8拍,将b′和c′输出到第三级。
进一步地,上述整数反变换方法还可具有以下特点:
所述第三级在第7拍将输入的a′直接输出到第四级,同时将输入的b′锁存;在第8拍将输入的b′直接输出到第四级,同时将输入的c′锁存;在第9拍,将锁存的c′输出到第四级;在第10拍,将锁存的d′输出到第四级。
进一步地,上述整数反变换方法还可具有以下特点:
所述离散余弦变换的整数反变换为用于RV解码器的离散余弦变换的RV整数反变换,所述P0=13,P1=17,P2=7;所述第一级通过做两级运算来得到所述13A,17B,7B,13C,17D和7D,对输入值A,在第一级先做左移3位运算得到8A,以及左移2位再加A的运算得到5A,然后在第二级做加法运算得到13A,对输入值B,在第一级先做左移4位运算、左移3位运算得到16B和8B,然后在第二级对16B和B做加法运算,对8B和B做减法运算得到7B,对输入值C,第一级先做左移3位运算得到8C,以及左移2位再加C的运算得到5C,然后在第二级做加法运算得到13C,对输入值D,在第一级先做左移4位运算、左移3位运算得到16D和8D,然后在第二级对16D和D做加法运算,对8D和D做减法运算得到7D。
本发明离散余弦变换的整数反变换装置和方法没有使用乘法运算单元,充分利用了流水线实现技术,最大限度地减少了加减法器的使用,是利用硬件资源最少的一种解决方案。
具体实施方式
下面结合附图对本发明的具体实施方式进行详细说明。
本实施例以RV解码器中的DCT变换的整数反变换装置为例,该装置共分为四级流水实现。以下将每一级流水使用的硬件资源作为一级反变换单元,即该整数反变换装置包括第一级反变换单元PIPE1、第二级反变换单元PIPE2、第三级反变换单元PIPE3和第四级反变换单元PIPE4。
第一级反变换单元PIPE1的硬件结构如图1所示,其中A、B、C、D为顺序输入的4个需进行反变换的数值,依次输入到一级输入寄存器锁存。与一级输入寄存器相连的3个运算单元分别是:实现“乘8”运算的第一移位运算单元,即将输入值左移3位,图中用“<<<3”表示;实现“乘5”运算的第二移位运算单元,即将输入值左移2位后再加该输入值,图中用“<<<2+1”表示;实现“乘16”运算的第三移位运算单元,即将输入值左移4位,图中用“<<<4”表示。上述3个移位运算单元的输出均连接到一级运算选择器的输入端,该一级运算选择器的另外1个输入端直接接一级输入寄存器。该一级运算选择器的控制端连接到一级计数器idctcnt(四位表示)的低2位idctcnt[1:0],该一级计数器从0到15依次循环计数,用于完成四组4点运算。如果整数反变换公式中的系数P0,P1,P2不同,则上述运算单元的个数和实现的运算都可能不同,但均可采用移位运算和加、减法运算的方式来实现整数的乘法运算。
一级运算选择器的两路输出sumain11及sumain12作为一级加法器的两个输入信号,另两路输出subain11及subain12作为一级减法器的两个输入信号。一级加法器的输出送入一级加法寄存器锁存,该一级加法寄存器的输出suma_1连接到一级输出选择器的输入端,一级减法器的输出送入一级减法寄存器锁存,该一级减法寄存器的输出suba_1连接到一级输出选择器的输入端。另图1~图3中均略去了输入到选择器、寄存器和计数器的时钟信号CLK。
第一级反变换单元的运算由idctcnt[1:0]的值(从0到3)来控制,每一个值对应的运算如下所示:
当idctcnt[1:0]=0时,
当idctcnt[1:0]=1时,
当idctcnt[1:0]=2时,
当idctcnt[1:0]=3时,
请参照图4,第一级流水线的工作过程是:
在第一拍,idctcnt[1:0]=0,执行以下处理:
将A输入到一级输入寄存器中,一级运算选择器将第一移位运算单元和第二移位运算单元的输出分别连通到该一级运算选择器的两路输出sumain11和sumain12并在一级加法器中完成加法运算,结果锁存在一级加法寄存器,其值为8A+5A=13A;此时一级运算选择器的另两路输出subain11及subain12不与任何输入接通,也不进行减法运算。
在第二拍,idctcnt[1:0]=1,执行以下处理:
一级输出选择器将一级加法寄存器的输出连通到寄存器dina,将一级加法寄存器上一拍锁存的值13A写入寄存器dina。
同时,将B输入到一级输入寄存器中,一级运算选择器将第三移位运算单元和一级输入寄存器的输出分别连通到该一级运算选择器的两路输出sumain11和sumain12并在一级加法器中完成加法运算,结果锁存在一级加法寄存器,其值为16B+B=17B。
同时,将第一移位运算单元的输出连通到一级运算选择器的输出subain11,将一级输入寄存器的输出连通到一级运算运算器的输出subain12并在一级减法器中完成subain11减subain12的运算,结果锁存在一级减法寄存器,其值为8B-B=7B。
在第三拍,idctcnt[1:0]=2,执行以下处理:
一级输出选择器将一级加法寄存器的输出suma_1连通到寄存器dinb2,将一级减法寄存器的输出suba_1连通到寄存器dinb1,将一级加法寄存器上一拍锁存的值17B写入寄存器dinb2,将一级减法寄存器上一拍锁存的值7B写入寄存器dinb1。
同时,将C输入到一级输入寄存器中,一级运算选择器将第一移位运算单元和第二移位运算单元的输出分别连通到该一级运算选择器的两路输出sumain11和sumain12并在一级加法器中完成加法运算,结果锁存在一级加法寄存器,其值为8C+5C=13C。此时一级运算选择器的另两路输出subain11及subain12不与任何输入接通,也不进行减法运算。
在第四拍,idctcnt[1:0]=3,执行以下处理:
一级输出选择器将一级加法寄存器的输出suma_1连通到寄存器dinc,将一级加法寄存器上一拍锁存的值13C写入寄存器dinc。
同时,将D输入到一级输入寄存器,一级运算选择器将第三移位运算单元和一级输入寄存器的输出分别连通到该一级运算选择器的两路输出sumain11和sumain12并在一级加法器中完成加法运算,结果锁存在一级加法寄存器,其值为16D+D=17D。
同时,将第一移位运算单元的输出连通到一级运算选择器的一输出subain11,将一级输入寄存器的输出连通到一级运算选择的另一输出subain12并在一级减法器中完成subain11减subain12的运算,结果锁存在一级减法寄存器,其值为8D-D=7D。
至此,第一级反变换单元就基本完成了对一组4点的第一级反变换处理,第一级反变换处理还包括在第五拍,将一级加法寄存器和一级减法寄存器中的值取出,即:一级输出选择器将一级加法寄存器的输出suma_1连通到寄存器dind2,将一级减法寄存器的输出suba_1连通到寄存器dind1,将一级加法寄存器上一拍锁存的值17D写入寄存器dind2,将一级减法寄存器中上一拍锁存的值7D写入寄存器dind1。但从第五拍开始,已经可以开始另一组4点的反变换运算了。
第二级反变换单元PIPE2的硬件结构如图2所示,包括5个二级输入寄存器,分别用寄存器dina(13A)、寄存器dinb1(17B)、寄存器dinb2(7B)、寄存器dinc(13C)、寄存器dind1(17D)和寄存器dind2(7D)表示,括号中是该寄存器中锁存的数值。6个二级输入寄存器的输出均作为二级运算选择器的输入,该二级运算选择器的控制端连接到二级计数器idctcnt_se(四位表示)的低2位idctcnt_se[1:0],Idctcnt_se的启动信号比idctcnt延迟3拍即3个时钟周期,即从第4拍开始计数,该延迟可以由外部电路来控制。
二级运算选择器的两路输出sumain21及sumain22作为二级加法器的两个输入信号,另两路输出subain21及subain22作为二级减法器的两个输入信号。二级加法器的输出送入二级加法寄存器锁存,该二级加法寄存器的输出suma_2连接到二级输出选择器的输入端,二级减法器的输出送入二级减法寄存器锁存,该二级减法寄存器的输出suba_2连接到二级输出选择器的输入端。二级输出选择器的输出端与4个中间值寄存器Zb0~Zb3和2个三级输入寄存器连接,该4个中间值寄存器的输出同时也作为二级运算选择器的输入。
第二级反变换单元的运算由idctcnt_se[1:0]的值(从0到3,相当于第4拍到第7拍)来控制,每一个值对应的运算如下所示:
当idctcnt_se[1:0]=0时,
当idctcnt_se[1:0]=1时,
当idctcnt_se[1:0]=2时,
当idctcnt_se[1:0]=3时,
式中的dina,dinb1,dinb2,dinc,dind1,dind2,Zb0,Zb1,Zb2,Zb3分别表示相应寄存器中的数值。
另外,下面将涉及到的中间值有:
b0=13A+13C
b1=13A-13C
b2=7B-17D
b3=17B+7D
a′=b0+b3
d′=b0-b3
b′=b1+b2
c′=b1-b2
存储这些中间值的寄存器直接用这些值的符号来命名。
请参照图4,第二级流水线的工作过程是:
在第四拍,idctcnt_se[1:0]=0,执行以下处理:
二级运算选择器将寄存器dina的输出连通到该二级运算选择器的输出sumain21和subain21,将寄存器dinc的输出连通到该二级运算选择器的输出sumain22和subain22,在二级加法器中完成dina和dinc的加法运算,结果锁存的二级加法寄存器中,值为dina+dinc=13A+13C;同时在二级减法器中完成dina和dinc的减法运算,结果锁存的二级减法寄存器中,值为dina-dinc=13A-13C。
在第五拍,idctcnt_se[1:0]=1,执行以下处理:
二级输出选择器将二级加法寄存器的输出suma_2连通到寄存器Zb0,将二级减法寄存器的输出sumb_2连通到寄存器Zb1,即将二级加法寄存器在上一拍锁存的值13A+13C写入寄存器Zb0,将二级减法寄存器在上一拍锁存的值13A-13C写入寄存器Zb1。
同时,二级运算选择器将寄存器dinb2和寄存器dind1的输出分别连通到该二级运算选择器的输出sumain21和sumain21,将寄存器dinb1和寄存器dind2的输出连通到该二级运算选择器的输出subain22和subain22,在二级加法器中完成dinb2和dind1的加法运算,结果锁存的二级加法寄存器中,值为dinb2+dind1=17B+7D;同时在二级减法器中完成dinb1减dind2的运算,结果锁存的二级减法寄存器中,值为dinb1-dind2=7B-17D。
在第六拍,idctcnt_se[1:0]=2,执行以下处理:
二级输出选择器将二级加法寄存器的输出suma_2连通到寄存器Zb3,将二级减法寄存器的输出sumb_2连通到寄存器Zb2,即将二级加法寄存器上一拍锁存的值17B+7D写入寄存器Zb3,将二级减法寄存器上一拍锁存的值7B-17D写入寄存器Zb2。
同时,二级运算选择器将寄存器Zb0的输出分别连通到该二级运算选择器的输出sumain21和subain21,将寄存器Zb3的输出连通到该二级运算选择器的输出sumain22和subain22,在二级加法器中完成b0和b3的加法运算,结果锁存的二级加法寄存器中,值为b0+b3=13A+17B+13C+7D;同时在二级减法器中完成b0减b3的运算,结果锁存的二级减法寄存器中,值为b0-b3=13A-17B+13C-7D。
在第七拍,idctcnt_se[1:0]=3,执行以下处理:
二级运算选择器将寄存器Zb1的输出分别连通到该二级运算选择器的输出sumain21和subain21,将寄存器Zb2的输出连通到该二级运算选择器的输出sumain22和subain22,在二级加法器中完成b1和b2的加法运算,结果锁存的二级加法寄存器中,值为b1+b2=13A+7B-13C-17D;同时在二级减法器中完成b1减b2的运算,结果锁存在二级减法寄存器中,值为b1-b2=13A-7B-13C+17D。
二级输出选择器将二级加法寄存器的输出suma_2连通到三级输出选择器,将二级减法寄存器的输出sumb_2连通到寄存器Od,即将二级加法寄存器上一拍锁存的值13A+17B+13C+7D(等于a’)输出到三级输出选择器,将二级减法寄存器上一拍锁存的值13A-17B+13C-7D写入寄存器Od。
至此,第二级反变换单元就基本完成了对一组4点的第二级反变换处理,第二级反变换处理还包括在第八拍,将二级加法寄存器和二级减法寄存器中的值取出,即:二级输出选择器将二级加法寄存器的输出suma_2连通到三级输出选择器,将二级减法寄存器的输出suba_2连通到寄存器Oc,即将二级加法寄存器上一拍锁存的值13A+7B-13C-17D(等于b’)输出到三级输出选择器,将二级减法寄存器上一拍锁存的值13A-7B-13C+17D写入寄存器Oc。但从第八拍开始,已经可以开始另一组4点的反变换运算了。
第三级反变换单元PIPE3和第四级反变换单元PIPE4的硬件结构如图3所示,这两级反变换单元主要是完成一个串并转换的工作。其中第三级反变换单元包括2个三级输入寄存器、一个三级输出选择器和一个三级计数器idctcnt_se,2个三级输入寄存器即寄存器Oc和寄存器Od的输出作为该三级输出选择器的输入,该三级输出选择器的另两路输入直接与二级输出选择器的输出相连。该三级输出选择器的控制端连接到三级计数器idctcnt_se的低二位idctcnt_se[1:0]。该三级输出选择器的一路输出则连接到第四级的四级输出寄存器。三级计数器idctcnt_se比一级计数器idctcnt延迟6拍启动,从第7拍开始计数,即表示从数据输入开始第六拍后四点一维整数反变换运算完成,结果开始输出。
第三级反变换单元的处理由idctcnt_th[1:0]的值(从0到3,相当于第7拍到第10拍)来控制,其工作流程如下:
在第七拍,idctcnt_th[1:0]=0,执行以下处理:
二级输出选择器将二级加法寄存器的输出suma_2直接连通到三级输出选择器,而三级输出选择器将该路输入直接连通到四级输出寄存器,即将a’的值写入四级输出寄存器。
在第八拍,idctcnt_th[1:0]=1,执行以下处理:
二级输出选择器将二级加法寄存器的输出suma_2直接连通到三级输出选择器,而三级输出选择器将该路输入直接连通到四级输出寄存器,即将b’的值写入四级输出寄存器。
在第九拍,idctcnt_th[1:0]=2,执行以下处理:
三级输出选择器将寄存器Oc的输出连通到四级输出寄存器,即将c’的值写入四级输出寄存器。
在第十拍,idctcnt_th[1:0]=3,执行以下处理:
三级输出选择器将寄存器Od的输出连通到四级输出寄存器,即将d’的值写入四级输出寄存器。
至此,第三级反变换单元就完成了对一组4点的第三级反变换处理。而第四级反变换单元是一个寄存器,其值依次为a’、b’、c’和d’,由后续装置将这些反变换的输出数值依次读出。从第九拍开始,第三级反变换单元可以进行下一组的4点反变换处理了。
一维运算需要进行四组4点的整数反变换。图5中表示连续组数据输入时的流水时序图。由图可知,一组4点的整数反变换需要10拍,而由于实现了流水式工作且每一步运算都紧密衔接,进行一次4组16点的整数反变换总共只需要22拍,速度可以满足要求。同时从硬件结构看,只使用了很少的运算单元、选择器和寄存器,没有乘法等复杂运算,成本也很低。