(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
x行×y列からなる行列状データを格納したn個のレジスタファイルと(x,yは1≦x≦n,1≦y≦nを満たす整数）、n個の演算ユニットとを含むn個のプロセッシングエレメントと、
コマンドを解読して、読出指示、及び、書込指示をn個のプロセッシングエレメントにおけるレジスタファイルのそれぞれに対して出力するブロックデコーダと、
第１系統セレクタ、第２系統セレクタを備え、第１系統セレクタ、第２系統セレクタのそれぞれが、何れかのプロセッシングエレメント内のレジスタファイルを入力元とし、何れかのプロセッシングエレメント内の演算ユニットを出力先とした入出力を、n個同時に実行するネットワーク部とを備え(nは2以上の整数)、
ブロックデコーダにより読出指示がなされた場合、各プロセッシングエレメント内に存在するレジスタファイルは、行列状データにおいて同じ列に存在する2つのデータを読み出して、それら2つのデータを第１系統セレクタ及び第２系統セレクタのそれぞれに出力して、
第１系統セレクタ及び第２系統セレクタは、それぞれ、n個の入出力を同時に行うことで各レジスタファイルから読み出されたデータの水平位置の入れ替えを行い、
各プロセッシングエレメント内の演算ユニットは、第１系統セレクタから出力されたデータ、第２系統セレクタから出力されたデータの供給をうけ、
ブロックデコーダにより書込指示がなされた場合、各プロセッシングエレメント内に存在するレジスタファイルは、同じプロセッシングエレメント内に存在する演算ユニットから出力された２つのデータを、自身の内部に存在する複数レジスタのうち、何れか２つに書き込む
ことを特徴とするデータ処理装置。
【請求項２】
前記演算ユニットは差分加算器を備え、
第１系統セレクタ、第２系統セレクタの入力元は、
差分加算器の演算結果により指定される
ことを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記数値t+βが差分加算器の演算結果である場合(tは整数部であり、βは小数部)、
第１系統セレクタ及び第２系統セレクタによる1つの入力元は第t番目のプロセッシングエレメントであり、
他の入出力の入力元は第t+1番目のプロセッシングエレメントであり、
演算ユニットは、
第t番目のプロセッシングエレメントを入力元としたデータに、小数部βを乗じ、第t+1番目のプロセッシングエレメントを入力元としたデータに、小数部1-βを乗じる乗算器を備える
ことを特徴とする請求項１記載のデータ処理装置。
【請求項４】
前記レジスタファイルに格納されているデータは、上位ハーフワード及び下位ハーフワードからなり、
演算ユニットは、上位ハーフワード又は下位ハーフワードをオペランドとした演算を行い、
前記第１系統セレクタ及び第２系統セレクタは、
レジスタファイルにおける上位ハーフワード及び下位ハーフワードを入れ替えて演算ユニットに出力する変換部と接続されている
ことを特徴とする請求項１記載のデータ処理装置。
【請求項５】
前記各プロセッシングエレメントは、
ブロックデコーダの解読結果となるレジスタ番号にオフセットを加算する加算器を備え、
前記レジスタファイルは、
オフセットが加算されたレジスタ番号により指定されるレジスタから、データを読み出し、
ことを特徴とする請求項１記載のデータ処理装置。
【請求項６】
前記データ処理装置は、
ブロックデコーダによるコマンド解読とは別のサイクルにおいて分岐コマンドの解読を行う分岐デコーダを備える
ことを特徴とする請求項１記載のデータ処理装置
【請求項７】
n個のプロセッシングエレメントは、zサイクルをかけて行列状データの転置を行うものであり(zは、x,yのうち大きい方、又は、x,yのうち何れか)、
転置にあたって第i番目のプロセッシングエレメントは、第kサイクル目において
レジスタファイルにおける第j番目のレジスタからデータを読み出し(i,kは1≦i≦z,1≦k≦zを満たす整数であり、jはi+kをzで割った剰余)、
第１系統セレクタは、読み出されたデータを第j番目のプロセッシングエレメントに出力し、
第j番目のプロセッシングエレメントは、出力されたデータを自身のレジスタファイルにおける第i番目のレジスタに書き込み、
第i番目のプロセッシングエレメントのレジスタファイルにおける第j番目のレジスタからデータを読み出すと同時に、第j番目のプロセッシングエレメントのレジスタファイルにおける第i番目のレジスタからデータを読み出し、
第２系統セレクタは、読み出されたデータを第i番目のプロセッシングエレメントに出力し、
第i番目のプロセッシングエレメントは、出力されたデータを自身のレジスタファイルにおける第j番目のレジスタに書き込む
ことを特徴とする請求項１記載のデータ処理装置。
【請求項８】
前記データ処理装置は、p個のバンクからなるメモリデバイスと接続され(pは、p＜nを満たす整数)、
データ処理装置は、
p個のバンクのうち何れかのものを入力元とし、p個のプロセッシングエレメントのうち何れかのもののレジスタファイルを出力先とした入出力を、p個同時に実施するp入力-p出力セレクタを備える
ことを特徴とする請求項１記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ処理装置に関し、映像データ、音声データの復号処理といったメディア処理や、通信データの復調処理を効率良く行う場合の改良に係る。
【０００２】
【従来の技術】
映像データ、音声データの復号処理といったメディア処理や通信データの復調処理では、N×Mといった2次元的な配置をなす行列状のデータを処理する機会が非常に多い。データ行列に対する処理を高速に行うため、メディア処理を行うデータ処理装置には、複数のデータ処理の並列化に適したアーキテクチャが採用される傾向がある。通説によれば、データ行列に対する高速処理は、プロセッシングエレメント(Processing Element(以下PEと略す))数を増やすという量的な拡張により達成される。PEとは、演算ユニット、演算ユニットにデータを供給するためのレジスタ等を含むハードウェアの拡張単位である。並列実行すべき演算数に応じたPEをプロセッサに具備させることにより、プロセッサを並列化に適合させるというのが従来のメディア処理向けのデータ処理装置のアーキテクチャである。
【０００３】
データ行列が縦16×横16の要素からなる場合、データ処理装置をどのように構成するかについて説明する。メモリデバイスに縦16×横16のデータ要素からなるデータ行列を格納させておき、データ行列における縦16個のデータ列を、16個のPEのそれぞれに割り当てる。データ行列における横16個のデータが、メモリデバイスから読み出される度に、割り当てられたデータについての処理を16個のPEに同時に行わせる。そうすれば横16個のデータに対する処理は1サイクルで完遂する。同様の処理を16サイクル繰り返すことにより、縦16×横16に対する処理を16サイクルで完遂させる。
【０００４】
尚、PEを複数有したデータ処理装置には、下記の特許文献１、２に記載されているものがある。
【０００５】
【特許文献１】
国際公開第０１／８２２２７号パンフレット
【０００６】
【特許文献２】
国際公開第０１／８２６３０号パンフレット
【０００７】
【発明が解決しようとする課題】
ところで16個の演算の並列化は、オペランドとするデータが16個のPE内の演算ユニットに16個同時に供給されて初めて達成される。自身に割り当てられた縦16個のデータ列ではなく、異なる縦16個のデータ列をオペランドとする演算を、PE内の演算ユニットが行おうとすると、データ行列におけるデータの配置を入れ替えた上でPEに供給せねばならない。その入れ替え処理に時間が費やされれば、同時供給は不可能となり、PEの稼動効率は極端に低下する。つまり複数のPEを有したアーキテクチャは、オペランドとなるデータ列の供給に変化が起こると、処理効率を極度に落とすという脆弱性を孕んでいる。
【０００８】
メディア処理において、データ行列の要素に入れ替えが生じるケースには多くのものがあり枚挙にいとまが無い。上述したようなデータ列の供給変化だけではなく、データ列の内部で、データの配置が入れ代わることもあり得る。要素入れ替えの度に稼動効率が落ちたのでは、とてもではないがデジタル家電機器に求められる厳しい動作スぺックを満たすことができない。そのためプロセッサの開発者は、メディア処理においてPEが行うべき演算の種別を絞り、対象となる演算の種別毎に、アーキテクチャの設計をやり直すという手間を払っている。設計のやり直しの手間に開発者は忙殺され、メディア処理を行うデータ処理装置の開発は長期化する傾向があるといわれてきた。
【０００９】
本発明の目的は、オペランドの割り当て等に変化が生じようとも、普遍的にデータ処理装置の稼動効率を維持できるデータ処理装置を提供することである。
【００１０】
【課題を解決するための手段】
上記目的を達成するため、本発明に係るデータ処理装置は、x行×y列からなる行列状データを格納したn個のレジスタファイルと(x,yは1≦x≦n,1≦y≦nを満たす整数）、n個の演算ユニットとを含むn個のプロセッシングエレメントと、コマンドを解読して、読出指示、及び、書込指示をn個のプロセッシングエレメントにおけるレジスタファイルのそれぞれに対して出力するブロックデコーダと、第１系統セレクタ、第２系統セレクタを備え、第１系統セレクタ、第２系統セレクタのそれぞれが、何れかのプロセッシングエレメント内のレジスタファイルを入力元とし、何れかのプロセッシングエレメント内の演算ユニットを出力先とした入出力を、n個同時に実行するネットワーク部とを備え(nは2以上の整数)、ブロックデコーダにより読出指示がなされた場合、各プロセッシングエレメント内に存在するレジスタファイルは、行列状データにおいて同じ列に存在する2つのデータを読み出して、それら2つのデータを第１系統セレクタ及び第２系統セレクタのそれぞれに出力して、第１系統セレクタ及び第２系統セレクタは、それぞれ、n個の入出力を同時に行うことで各レジスタファイルから読み出されたデータの水平位置の入れ替えを行い、各プロセッシングエレメント内の演算ユニットは、第１系統セレクタから出力されたデータ、第２系統セレクタから出力されたデータの供給をうけ、ブロックデコーダにより書込指示がなされた場合、各プロセッシングエレメント内に存在するレジスタファイルは、同じプロセッシングエレメント内に存在する演算ユニットから出力された２つのデータを、自身の内部に存在する複数レジスタのうち、何れか２つに書き込むことを特徴としている。
【００１１】
【発明の実施の形態】
以下本発明に係るデータ処理装置の実施形態について説明する。
（第１実施形態）
第１実施形態に係るデータ処理装置は、縦16×横16の要素からなる行列を処理するよう、図１に示すように構成されている。図１は、第１実施形態に係るデータ処理装置の概略構成を示す図である。データ処理装置は、行列の横の要素数と同数のPE0〜15からなる。各PEは算術演算ユニット(以下ALUと略す)と、レジスタファイル(以下RFと略す)とを含む。各PE内の算術演算ユニット、各PE内のレジスタファイルは共にネットワーク部２０と接続されている。
【００１２】
16個のPE内のALUは、RFに格納されている要素をオペランドとした演算を実行するものである。16個のPEのそれぞれにALUが存在するため、16個の演算が並列に実行されることになる。
各PE内のRFは、行列の縦の要素数と同数のレジスタr0〜r15を含む。かかるRFが、16個のPEのそれぞれの中に存在するので、データ処理装置では、縦16×横16の要素からなる行列が、縦16×横16のレジスタにより保持されることになる。
【００１３】
パスA,Bは、RFから同じPEに含まれるALUへと2つのデータを伝送するための接続線であり、パスY,Zは、ALUから同じPEに含まれるRFへと2つのデータを伝送するための接続線である。パスC,Dは、ネットワーク部２０を介して、任意のPE内のALUに2つのデータを伝送する接続線である。
ネットワーク部２０は、各PEのRFからパスC,Dを介して伝送された32個のデータを、任意のPE内のALUに転送する。
【００１４】
以上が第１実施形態に係るデータ処理装置の概略構成である。続いてPE内の構成要素の詳細を、ALU、RFの順に説明する。
ALUは、RFからパスA,Bを介して伝送された2つのデータと、ネットワーク部２０からパスC,Dを介して伝送された2つのデータとをオペランドとする演算を2つ同時に実行する。2つの演算の同時実行により得られた2つの演算結果を同じプロセッシングエレメント内に含まれるRFの入力ポートY、入力ポートZに出力する。
【００１５】
続いてRFについて図２を参照しながら説明する。図２は、RFの内部構成を詳細に示す図である。本図に示すようにRFは、16個のレジスタr0〜r15と、4つの出力ポートA,B,C,Dと、3つの入力ポートX,Y,Zとを備え、4r-3wのレジスタ読み書きを実現する。各レジスタの語長(ワード)は、2バイト(=16ビット)であり、16個のRFは、計16×2バイトのデータを保持することができる。"4r"とは、4つのレジスタからデータを読み出し、その4つのデータを4つの出力ポートA,B,C,Dを介して出力するという意味であり、16個のレジスタのうち任意の4つのレジスタからの読み出しを4つ同時に実行することを意味する。4つの出力ポートA,B,C,Dのうち2つ(A,B)は同じPE内のALUと接続され、残り2つ(C,D)はネットワーク部２０に接続される。このため、自身が保持している16個の要素のうち2つを、ポートA,Bを介して同じPE内のALUに供給することができ、別の2つを、ポートC,Dを介して別のPE内のALUに供給することができる。4つの出力ポートに出力すべきデータを、4つのどのレジスタから読み出すか、即ち、4つの読出元レジスタの指定は、4つのポートE,F,G,Hにより指定される。
【００１６】
"3w"とは、3つの入力ポートX,Y,Zからデータを取り込み、その3つのデータを3つのレジスタに書き込むという意味であり、16個のレジスタのうち任意の3つのレジスタへの書き込みを3つ同時に実行することを意味する。3つの入力ポートX,Y,Zのうち、入力ポートXは、データ行列を格納するメモリデバイス(不図示)に、入力ポートY,ZはALUにそれぞれに接続されている。3つの入力ポートから入力される3つのデータを、3つのどのレジスタに書き込むか、つまり書込先となる3つのレジスタは、3つの書込先指定ポートI,J,Kにより指定される。
【００１７】
以上がPEの内部構成の説明である。続いてネットワーク部２０の内部構成について説明する。図３は、ネットワーク部２０の内部構成を示す図である。本図に示すようにネットワーク部２０は、2つの16入力-16出力セレクタ(第１系統セレクタ２１、第２系統セレクタ２２という)からなる。
図４は、ネットワーク部２０を構成する2つのセレクタのうち、第１系統セレクタ２１を示す図である。第１系統セレクタ２１は16個の入力ポートin0,1,2,3,4・・・・14,15と、16個の出力ポートOut0,1,2,3,4・・・・14,15とを備える。16個の入力ポートin0,1,2,3,4・・・・14,15のそれぞれは、16個のRFのそれぞれと対応しており、その対応するRFが具備している4つの出力ポートA,B,C,Dのうち、出力ポートCが16入力-16出力セレクタ側の入力ポートin0,1,2,3,4・・・・14,15と接続されている。一方16入力-16出力セレクタの16個の出力ポートOut0,1,2,3,4・・・・14,15は、16個のALUのそれぞれに対応しており、その対応するALUが具備している4つの入力ポートA,B,C,Dのうち、入力ポートCが16入力-16出力セレクタ側の出力ポートと接続されている。
【００１８】
以上の第１系統セレクタ２１についての接続関係を具体的にいい直すと以下の通りである。第１系統セレクタ２１の1つ目の出力ポートout0はPE0のALUの入力ポートC、2つ目の出力ポートout1はPE1のALUの入力ポートC、3つ目の出力ポートout2はPE2のALUの入力ポートCとそれぞれ接続されている。また第１系統セレクタ２１において、1つ目の入力ポートin0はPE0のRFの出力ポートC、2つ目の入力ポートin1はPE1のRFの出力ポートC、3つ目の入力ポートin2はPE2のRFの出力ポートCとそれぞれ接続されている。
【００１９】
図５は、第２系統セレクタ２２を示す図である。第２系統セレクタ２２における16個の入力ポートin0,1,2,3,4・・・・14,15のそれぞれも、16個のRFのそれぞれと対応しており、その対応するRFが具備している4つの出力ポートA,B,C,Dのうち、出力ポートDと接続されている。一方16入力-16出力セレクタの16個の出力ポートout0,1,2,3,4・・・・14,15のそれぞれは、16個のALUのそれぞれに対応しており、その対応するALUが具備している4つの出力ポートA,B,C,Dのうち、出力ポートDと接続されている。
【００２０】
第２系統セレクタ２２についての接続関係を具体的にいい直すと以下の通りである。第２系統セレクタ２２の1つ目の出力ポートout0はPE0のALUの入力ポートD、2つ目の出力ポートout1はPE1のALUの入力ポートD、3つ目の出力ポートout2はPE2のALUの入力ポートDとそれぞれ接続されている。また第２系統セレクタ２２において、1つ目の入力ポートin0はPE0のRFの出力ポートD、2つ目の入力ポートin1はPE1のRFの出力ポートD、3つ目の入力ポートin2はPE2のRFの出力ポートDとそれぞれ接続されている。
【００２１】
16個の入力ポートin0,1,2,3,4・・・・14,15、16個の出力ポートout0,1,2,3,4・・・・14,15がこのように接続されているので、16個の入出力を同時に実行することにより、RFの出力ポートC,Dからの出力値が、任意のALUの入力ポートC,Dに16個同時に伝送されることになる。ネットワーク部２０は、共通のRFを入力元とした2つの入出力や、共通のALUを出力先とした2つの入出力も行うことができる。これにより1つのPEのRFに格納されているデータを2以上のALUに同時に転送することもできる。
【００２２】
RFからの4つの格納値の同時出力が可能であり、ネットワーク部２０はそうして出力された格納値を他のPE内のALUに出力することが可能なので、図６のようなデータ供給が可能となる。ここでi番目のPEiのRFにおいて、j番目のレジスタjに格納されているデータをdata(i,j)とすると、矢印ty1,2に示すようにRFの格納値のうち、data(0,1)、data(0,2)がPE0内のALUに供給され、PE1のRF内のdata(1,2)、PE2のRF内のdata(2,2)も矢印ty3,ty4に示すようにネットワーク部２０を介してPE0に供給されていることがわかる。またPE0内のALUは、PE0のRFから出力されたdata(0,1)、data(0,2)と、PE1、PE2から出力されたdata(1,2)、data(2,2)とを加えた計4つの要素をオペランドとすることができる。
【００２３】
以上のように本実施形態によれば、複数PEのそれぞれに内蔵されているALUは、同じPEに内蔵されているRF以外だけではなく、他のPEに含まれるRFに格納されているデータをもオペランドとすることができるので、演算の対象となる範囲を増やすことができる。
ネットワーク部２０におけるセレクタ２１,２２の入力元の数は、レジスタと同数のn個としたが、入力元の個数は、n以外の数としてもよい。入力元の数をn個より少なくすることは勿論のこと、入力元の数をn個より大きくしても良い。つまり各PEのレジスタファイルには、4つの出力ポートA,B,C,Dが存在するので、このうちg個の(gは、2≦g≦4を満たす整数)の出力ポートをセレクタ２１,２２に割り当てて、g・n入力−n出力セレクタを構成する。そして、ネットワーク部２０内にこのセレクタを内蔵して、g×n個の入力元と、n個の出力先とについての入出力を、このg・n入力−n出力セレクタに行わせるのである。
【００２４】
（第２実施形態）
本実施形態は、データ処理装置を動き補償といった用途、フィルタ処理といった用途の2つの用途に応用する場合の改良に関する。
動き補償及びフィルタ処理を行う場合のALUの内部構成について説明する。本実施形態に係るALUは、4つの入力ポートA,B,C,Dに入力されてくる4つのデータをオペランドA,B,C,Dとして、オペランドA＋オペランドB×(オペランドC＋オペランドD)という演算を行う。図７は本実施形態に係るALUの内部構成を示す図であり、本図に示すようにALUは、オペランドCとオペランドDとを加算する加算器２３、加算結果(オペランドC＋オペランドD)にオペランドBを乗ずる乗算器２４、乗算結果オペランドB×(オペランドC＋オペランドD)にオペランドAを加算して、加算結果(オペランドA＋オペランドB×(オペランドC＋オペランドD))を得るアキュムレータ２５を備える。尚、本明細書において加算機能を有する構成要素は、加算処理に留まらず、減算処理まで実行できるものとする。
【００２５】
以上のように構成されたALUと、第１実施形態に示したRF、ネットワーク部２０とを用いて動き補償及びフィルタ処理を実現する。
先ず始めに動き補償にデータ処理装置を応用する場合の応用例について説明する。動き補償には、Pピクチャについての動き補償と、Bピクチャについての動き補償とがある。Pピクチャとは、過去方向の参照画像との差分により表現された画像データであり、Pピクチャに対する動き補償は、過去方向の画像の画素に、Pピクチャの画素を加算してゆくという処理により実現される。Bピクチャとは、過去方向の参照画像と、未来方向の参照画像との差分により表現された画像データであり、Bピクチャに対する動き補償は、過去方向画像の画素と、未来方向の画像とに、Bピクチャの画素を加算してゆくという処理により実現される。
【００２６】
図８は、Pピクチャについての動き補償にデータ処理装置を応用する場合の応用例を示す図である。本図におけるD0〜D7は、差分画像の一ライン上の画素である。またP0〜P7は、過去方向における参照画像の一ライン分の画素である。図８の一例ではD0〜D7がPE0〜PE7のレジスタr0に、P0〜P7がPE0〜PE7のレジスタr1にそれぞれ格納されている。これらの画素は、RFから同じPE内のALUにそれぞれ転送される。図９は、本実施形態に係るデータ処理装置が、動き補償を行う場合の動作を示す図である。画素D0,P0は矢印uy1,uy2に示すようにPE0のALUに、画素D1,P1は、矢印uy3,uy4に示すようにPE1内のALU、画素D2,P2は矢印uy5,uy6に示すようにPE2内のALUにそれぞれ転送される。
【００２７】
図９においてALUは、転送された画素同士の加算を行う。PE0内のALUの加算器は画素D0と画素P0との加算を、PE1内のALUの加算器は画素D1と画素P1との加算を、PE2内のALUの加算器は画素D2と画素P2との加算をそれぞれ行う。以上のようなALUの加算によりPピクチャに対する動き補償が実現される。
図１０は、Bピクチャに対する動き補償を行う場合のRFの格納例を示す図である。図９同様、PE0〜PE7のレジスタr0にはD0〜D7が、レジスタr1にはP0〜P7が、レジスタr2にはB0〜B7がそれぞれ格納される。各PEのRFは、これらの画素を同じPE内のALUに転送する。図１１は、Bピクチャに対する動き補償を行う場合にALUがどのような演算を行うかを示す図である。PE0のRFは、矢印By0,1,2に示すように画素D0,B0,P0を、PE1のRFは矢印By3,4,5に示すように画素D1,B1,P1を、PE2のRFは、矢印By6,7,8に示すように画素D2,B2,P2をそれぞれ出力する。各PE内のALUは、このように転送された画素に対する動き補償を実行する。PE0内のALUではB0＋P0の加算が加算器によりなされ、加算結果(B0＋P0)に1／2を乗ずる乗算がPE0内の乗算器によりなされる、更に乗算結果1/2・(B0＋P0)に、D0を加算する演算がPE0内のアキュムレータによりなされる。以上がBピクチャに対する動き補償である。
【００２８】
続いて、動画の圧縮処理／伸張処理、リサイズを行う場合に頻繁に用いられるフィルタ処理に、データ処理装置を応用する場合の応用例について説明する。画像リサイズの実現には、FIR(Finite Impulse Response)フィルタ等、フィルタ係数が対称であるという性質をもったフィルタ演算が有効である。ここで対象となる画素Xjに対して対称型フィルタを施す場合、Xjからi個先にある画素Xj+iと、Xjからi個手前にある画素Xj-iに乗ずるべきフィルタ係数がそれぞれ同じとなる。1つのライン上に存在するX0〜X31に対し、対称型フィルタを施す場合の演算例を以下に説明する。図１２は、一ライン上に存在する32個の画素X0〜X31のうち、4つの画素X7,X8,X9,X10に対してフィルタ処理を施す場合の演算式を示す図である。図１２（ａ）はX0〜X31のうちX7の画素値を、図１２（ｂ）はX8の画素値を、図１２（ｃ）はX9の画素値を、図１２（ｄ）はX10の画素値を対称型フィルタによりそれぞれ算出する場合の一例を示している。図１２（ａ）では画素X7の画素値にはフィルタ係数a0を乗じ、画素X6及びX8の画素値にはフィルタ係数a1を、画素X5及びX9の画素値にはフィルタ係数a2を、画素X4及びX10の画素値にはフィルタ係数a3を、画素X3及びX11の画素値にはフィルタ係数a4をそれぞれ乗じている。画素X6とX8、X5とX9、X4とX10、X3とX11をそれぞれ同じフィルタ係数としているのは、これらが画素X7に対して線対称な関係にあるからである。
【００２９】
図１２（ａ）〜（ｄ）において式１,２,３,４は、画素X7,X8,X9,X10に対して対称型フィルタを施す場合の演算式を示す。データ処理装置は、これらの演算式を複数の部分項に分け、これら部分項を同時に実行するものとする。つまり図１２（ａ）〜（ｄ）の式のうち部分項Stage1を画素X7,X8,X9,X10に対して同時に実行し、続いて部分項Stage2を画素X6,X7,X8,X9,X10,X11に対して同時に実行する。部分項Stage3を画素X5,X6,X7,X8,X9,X10,X11,X12に対して同時に実行し、部分項Stage4を画素X4,X5,X6,X7,X8,X9,X10,X11,X12,X13に対して同時に実行する。4つの画素に対する対称型フィルタを実現するRFの設定例について、図１３を参照しながら説明する。図１３は、対称型フィルタを実現する場合のRFの格納例を示す図である。PE0〜PE15のレジスタr0にはX0〜X15が格納され、PE0〜PE15のレジスタr1にはX16〜X31が格納される。
【００３０】
PE0〜PE15のレジスタr2は、各PEの演算結果の格納のために割り当てられている。PE0のレジスタr2は、PE0のALUの演算結果の格納のために、PE1のレジスタr2は、PE1のALUの演算結果、PE2のレジスタr2は、PE2のALUの演算結果、PE3のレジスタr2は、PE3のALUの演算結果の格納のためにそれぞれ割り当てられている。
PE0〜PE15のレジスタr3〜レジスタr7には、a0〜a4といったフィルタ係数がそれぞれ格納される。つまりPE0のレジスタr3〜レジスタr7にはフィルタ係数a0〜a4が、PE1のレジスタr3〜レジスタr7にもa0〜a4、PE2のレジスタr3〜レジスタr7にはa0〜a4がそれぞれ格納される。フィルタ係数及び画素値がこのように格納されるので、PE内のALUは、自身と同じPEに含まれるRFから、所望の画素の画素値を取り出することができ、またネットワーク部２０を介して、隣接方向にある所望の画素を取り出することができる。
【００３１】
続いて対称型フィルタがどのように実行されるかについて説明する。対称型フィルタを行うための演算は、Stage1〜Stage4という4つの部分項から構成されているので、先ず始めに、部分項Stage1の演算、つまりa0・X7、a0・X8、a0・X9、a0・X10の演算を実行する。
<Stage1>
図１４は、このStage1におけるRFの読み書き及びALUによる演算を示す。画素X7、X8、X9、X10に対して対称型フィルタを行うべきPE7〜PE10のALUは、自身に対応するRFから矢印cy0,1,2,3に示すように画素X7、X8、X9、X10の画素値を読み出し、フィルタ係数a0を矢印cy4,5,6,7に示すように読み出す。読み出しの後、PE7の乗算器はフィルタ係数a0に画素値X7を乗じ、PE8の乗算器はフィルタ係数a0に画素値X8を、PE9の乗算器はフィルタ係数a0に画素値X9を、PE10の乗算器はフィルタ係数a0に画素値X10をそれぞれ乗ずる。これらの乗算により得られた演算結果a0・X7、a0・X8、a0・X9、a0・X10を、PE0〜PE15のレジスタr2にそれぞれ書き込む。
【００３２】
<Stage2>
図１５は、Stage2においてネットワーク部２０により行われるPE間の転送を示す。Stage2では、隣接する画素が必要となるから、隣接する画素を、ネットワーク部２０は図１５に示すように転送する。PE6及びPE8のRFに格納される画素X6、X8の画素値をPE7のALUに、PE7及びPE9のRFに格納される画素X7、X9の画素値をPE8のALUに、PE9及びPE11のRFに格納される画素X9、X11の画素値をPE10のALUにそれぞれ転送する。図１６は、各PE内のRFからALUにどのようなデータが転送されるかを示す図である。本図において矢印ey0,1,2,3に示すように、PE7、PE8、PE9、PE10の演算結果a0・X7、a0・X8、a0・X9、a0・X10が同じPE内のALUに転送されており、これとともにフィルタ係数a1が矢印ey4,ey5,ey6,ey7に示すように転送されている。ネットワーク部２０からは図１５に示すようにPE7に画素X6、X8の画素値が、PE8に画素X7、X9の画素値が、PE9に画素X10、X8の画素値が、PE10に画素X9、X11の画素値がそれぞれ転送されるので、各PE内のALUは、転送された画素値及びフィルタ係数を用いた乗算及び加算を実行する。
【００３３】
PE7のALU内の加算器は、図１６（ａ）に示すように画素値X6＋X8の加算を行い、PE7の乗算器はa1・(X6＋X8)の乗算を、PE7のアキュムレータ２５は、a1・(X6＋X8)にStage1の演算結果a0・X7を加算する処理を行う。その演算結果a0・X7＋a1・(X6＋X8)は同じPE内のレジスタr2に書き込まれる。
PE8のALU内の加算器は図１６（ｂ）に示すようにX7＋X9の加算を行い、PE8の乗算器２４はa1・(X7＋X9)の乗算を、PE8のアキュムレータはa1・(X7＋X9)にStage1の演算結果a0・X8を加算する処理を行う。その演算結果a0・X8＋a1・(X7＋X9)は同じPE内のレジスタr2に書き込まれる。
【００３４】
PE9のALUも同様に図１６（ｃ）に示すようにa0・X9＋a1・(X10＋X8)の演算を、PE10のALUも同様に図１６（ｄ）に示すようにa0・X10＋a1・(X11＋X9)の演算を行うことにより、図１２（ａ）〜（ｄ）のStage2の部分項までの計算が完了する。
<Stage3>
図１７は、Stage3においてネットワーク部２０によりなされるPE間の転送を示す。Stage3では、2画素先にある画素が必要となるから、2画素先にある画素を、ネットワーク部２０は図１７に示すように転送する。PE5及びPE9のRFに格納される画素X5及びX9の画素値をPE7のALUに、PE6及びPE10のRFに格納される画素X6及びX10の画素値をPE8のALUに、PE7及びPE11のRFに格納される画素X7及びX11の画素値をPE9のALUに、PE8及びPE12のRFに格納される画素X8及びX12の画素値をPE10のALUにそれぞれ転送する。図１８は、各PE内のRFからALUにどのようなデータが転送されるかを示す図である。本図において矢印fy0,1,2,3に示すように、PE7、PE8、PE9、PE10の演算結果a0・X7＋a1・(X6＋X8)、a0・X8＋a1・(X7＋X9)、a0・X9＋a1・(X10＋X8)、a0・X10＋a1・(X9＋X11)が同じPE内のALUに転送されており、これとともに矢印fy4,5,6,7に示すようにフィルタ係数a2が転送されている。ネットワーク部２０からは図１７に示すようにPE7に画素値X5,X9が、PE8に画素値X6,X10が、PE9に画素値X11,X7が、PE10に画素値X8,X12がそれぞれ転送されるので、各PE内のALUは、転送された画素値及びフィルタ係数を用いた乗算及び加算を実行する。
【００３５】
PE7の加算器は図１８（ａ）に示すようにX5＋X9の加算を行い、PE7の乗算器はa2・(X5＋X9)の乗算を、PE7のアキュムレータはa2・(X5＋X9)にStage1の演算結果a0・X7＋a1・(X6＋X8)を加算する処理を行う。その演算結果a0・X7＋a1・(X6＋X8)＋a2・(X5＋X9)は同じPE内のレジスタr2に書き込まれる。
PE8の加算器は図１８（ｂ）に示すようにX6＋X10の加算を、PE8の乗算器はa2・(X6＋X10)の乗算を、PE8のアキュムレータはa2(X6＋X10)にStage1の演算結果a0・X8＋a1・(X7＋X9)を加算する処理を行う。その演算結果a0・X8＋a1・(X7＋X9)＋a2・(X6＋X10)は同じPE内のレジスタr2に書き込まれる。
【００３６】
PE9も同様に図１８（ｃ）に示すようにa0・X9＋a1・(X10＋X8)＋a2・(X11＋X7)の演算を、PE10も同様に図１８（ｄ）に示すようにa0・X10＋a1・(X11＋X9)＋a2・(X8＋X12)の演算を行うことにより、図１２（ａ）〜（ｄ）のStage2の部分項までの計算が完了する。
<Stage3>
図１９は、Stage3における読み書き及びALUによる演算を示す。Stage3では、3画素先にある画素が必要となるから、3画素先にある画素を、ネットワーク部２０は図１９に示すように転送する。PE4及びPE10のRFに格納されるX4及びX10をPE7のALUに、PE5及びPE11のRFに格納されるX5及びX11をPE8のALUに、PE6及びPE12のRFに格納されるX6及びX12をPE9のALUに、PE7及びPE13のRFに格納されるX7及びX13をPE10のALUにそれぞれ転送する。図２０は、各PE内のRFからALUにどのようなデータが転送されるかを示す図である。本図においてが矢印gy0,1,2,3に示すように、PE7、PE8、PE9、PE10の演算結果a0・X7＋a1・(X6＋X8)＋a2・(X5＋X7)、a0・X8＋a1・(X7＋X9)＋a2・(X6＋X10)、a0・X9＋a1・(X10＋X8)＋a2・(X11＋X7)、a0・X10＋a1・(X9＋X11)＋a2・(X8＋X12)が同じPE内のALUに転送されており、これとともにフィルタ係数a3が矢印gy4,5,6,7に示すように転送されている。ネットワーク部２０からは図１９に示すようにPE7にX4,X10の画素値が、PE8にX5,X11の画素値が、PE9にX12,X6の画素値が、PE10にX7,X13の画素値がそれぞれ転送されるので、各PE内のALUは、転送された画素値及びフィルタ係数を用いた乗算及び加算を実行する。
【００３７】
PE7のALU内の加算器は図２０（ａ）に示すようにX4＋X10の加算を行い、PE7の乗算器２４はa3・(X4＋X10)の乗算を、PE7のアキュムレータはa3・(X4＋X10)にStage1の演算結果a0・X7＋a1・(X6＋X8)＋a2・(X5＋X9)を加算する処理を行う。その演算結果a0・X7＋a1・(X6＋X8)＋a2・(X5＋X9)＋a3・(X4＋X10)は同じPE内のレジスタr2に書き込まれる。
【００３８】
PE8の加算器は図２０（ｂ）に示すようにX5＋X11の加算を行い、PE8の乗算器はa3(X5＋X11)の乗算を、PE8のアキュムレータは乗算結果a3・(X5＋X11)にStage1の演算結果a0・X8＋a1・(X7＋X9)＋a2・(X6＋X10)を加算する処理を行う。その演算結果a0・X8＋a1・(X7＋X9)＋a2・(X6＋X10)＋a3・(X5＋X11)は同じPE内のレジスタr2に書き込まれる。
【００３９】
PE9も、同様に図２０（ｃ）に示すようにa0・X9＋a1・(X10＋X8)＋a2・(X11＋X7)＋a3・(X12＋X6)の演算を、PE10も同様に図２０（ｄ）に示すようにa0・X10＋a1・(X11＋X9)＋a2・(X8＋X12)＋a3・(X7＋X13)の演算を行うことにより、図１２（ａ）〜（ｄ）のStage3の部分項までの計算が完了する。
以下、Stage4についても同様の手順を繰り返す。図２１は、Stage4において、ネットワーク部２０によりなされる転送を示す。図２２は、Stage4において、ALUによりなされる演算を示す。
【００４０】
以上のような処理をデータ処理装置が行うことにより、フィルタ係数が4つの対称型フィルタを、4つのステージで実行することができる。
以上のように本実施形態によれば、RFの設定及びネットワーク部２０の転送の組み合わせを変更することにより、データ処理装置を動き補償に用いることができ、またデータ処理装置を対称型フィルタに用いることもできるので、動き補償といった用途と、対称型フィルタといった用途とでデータ処理装置を共用することができる。
【００４１】
（第３実施形態）
本実施形態は、動き補償やフィルタ処理を実現するにあたって、画素をある一定間隔で読み出すという制御をどのように実現するかを開示する。図２３は、本実施形態に係るデータ処理装置の内部構成を示す図である。本図において特徴的なのは、差分加算器(DDA)２６がPE0のALU内に設けられている点である。DDA２６はPE0からPE15の全てに設けられており、第１系統セレクタ２１だけでなく第２系統セレクタ２２に対しても接続されている。しかし簡略化を期するため、以降の説明は、PE0内のDDA２６を対象とする。
【００４２】
DDA２６は、行列におけるs列目の要素data[s]、一定間隔をαとした場合に、この一定間隔を差分としてs←s+αという計算により変数sを更新しつつ、要素data[s]をALUに出力するよう、ネットワーク部２０を制御する。行列におけるs列目の要素data[s]は、PE[s]のRFに格納されているので、DDA２６は、このRF内の要素data[s]を自身に供給するようネットワーク部２０による入出力を制御する。
【００４３】
変数sの初期値を0とし、一定間隔αを"3"とした場合、DDA２６は、PE0,PE3,PE6,PE9,PE12に格納されているdata[0],[3],[6],[9],[12]・・・・を転送するよう、[0],[3],[6],[9],[12]をネットワーク部２０に出力する。
変数sの初期値を0とし、一定間隔αを"2"とした場合、DDA２６は、PE0,PE2,PE4,PE6,PE8に格納されているdata[0],[2],[4],[6],[8]・・・・を転送するよう、[0],[2],[4],[6],[8]をネットワーク部２０に出力する。
【００４４】
以上のように本実施形態によれば、複数の画素の画素値を、二画素置き、三画素置きに読み出してゆくという動作を高速に実行でき、第２実施形態に示したフィルタ処理を好適に実行することができる。
尚、DDA２６が加算すべきオフセットは、命令により設定できるようにしておくのが望ましい。データを読み出すべき一定間隔を、プログラマブルに設定することができるからである。
【００４５】
（第４実施形態）
本実施形態は、DDA２６により加算されるべき一定間隔が小数点付きの整数である場合の改良に関する。ここでsの初期値が0であり、一定間隔αが1.5である場合、DDA２６は、[0],[1.5],[3.0],[4.5],[6.0]・・・・・という値を出力する。これにより行列における0列目,1.5列目,3.0列目,4.5列目,6.0列目・・・・・の要素が指定されることになる。
【００４６】
つまりDDA２６による演算結果が"t+β"である場合(tは整数であり、βは小数部分)、t+β列目の要素は、以下の式５により算出されるものとする。
＜式５＞
data[t+β]=β×data[t]+(1-β)×data[t+1]
この式５において「β×data[t]+(1-β)×data[t+1])」の意義は以下の通りである。即ち、行列においてt+β列目に位置する要素は、t列目に位置する要素の影響をβだけ受け、t+1列目に位置する要素の影響を(1-β)だけ受けていることを意味する。
【００４７】
本実施形態に係るデータ処理装置は、二度をかけて行列の要素読み出しを行う。一度目は、行列におけるt列目の要素data[t]と、係数βとを読み出す。ALU内の乗算器２４は、要素data[t]にβを乗じて乗算結果β・data[t]をRFに書き戻す。
二度目は、行列におけるt+1列目の要素data[t+1]と、係数βと、乗算結果β・data[t]とを読み出す。ALU内の加算器２３は、1-βを算出し、ALU内の乗算器２４は、要素data[t+1]に1-βを乗じて乗算結果(1-β)・data[t+1]を得る。アキュムレータ２５は、乗算結果β・data[t]と乗算結果(1-β)・data[t+1]とを足し合わせて、β×data[t]+(1-β)×data[t+1]を得る。
【００４８】
以上のように本実施形態によれば、複数の画素の画素値を、1.5画素置き、3画素置きに読み出してゆくことができ、第２実施形態に示したフィルタ処理を好適に実行することができる。
（第５実施形態）
本実施形態は、第２実施形態で示したフィルタ処理の結果を得るための改良を開示する。図２４は、本実施形態に係るデータ処理装置の内部構成を示す図である。本図では第２実施形態に示した加算器２３、乗算器２４、アキュムレータ２５と、第３実施形態に示したDDA２６とを同じALU内に配置して描いている。この他にもシフタ２７をALU内に設けている。本図においてDDA２６は、4つの入力ポートから入力されてくるオペランドを取り込むよう、パスHA,HB,HC,HDと接続されている。一方シフタ２７は、パスHE,HFを介して、パスHA又はHB、パスHDと接続されている。
【００４９】
シフタ２７は、アキュムレータ２５による積算結果に対してシフトを行う。シフトを行うのは以下の2つの意義のためである。1つ目の意義は、アキュムレータ２５による積算結果を、これまで加算していった画素の個数で割るという目的のためである。2つ目の意義は、積算結果における小数点の調整の目的である。乗算器２４が乗ずるべきフィルタ係数は小数点付き整数であり、この乗算器２４による乗算結果も小数点付き整数となる。このような乗算結果をアキュムレータ２５が加算してゆくと、積算結果における小数点の位置が変動してしまうことがある。このような小数点位置を元の位置に戻すべくシフタ２７がシフトを行うのである。シフタ２７は、パスHEを介して入力されてくる積算結果を、パスHFに示されるシフト量だけシフトする。そのシフト結果を、RFに書き込む。以上がシフタ２７の説明である。シフタ２７の追加に伴い、本実施形態に係るDDA２６には以下のような機能追加がなされている。
【００５０】
本実施形態におけるDDA２６は、ハイブリッド型の加算器として機能するものでありシフタ２７のシフトにより小数点が調整された積算結果と、2つの定数C1,C2とのバタフライ演算を実行する。ハイブリッド型の加算器とは、1つのDDA２６が2つの加算器の組みとして機能することである。図２５は、DDA２６がハイブリッド型の加算器としてどのように機能するかを示す図である。本図に示すようにDDA２６は、パスHA及びパスHBを介して伝送されてくるデータを加算する加算器、及び、パスHC及びパスHDを介して伝送されてくるデータを加算する加算器として機能する。DDA２６が2つの加算器として機能することにより、DDA２６は2つの加算処理を同時に実行することができる。
【００５１】
またバタフライ演算は、小数点が調整された積算結果と、定数C1との加算(i)、小数点が調整された積算結果から、定数C2を減じる減算(ii)といった(i)(ii)の演算から構成される(ここで定数C2は、定数C1に所定の乗数を乗じてえられたものとなる)。つまりDDA２６は、パスHA,HBを介して2つの定数C1,C2を取得すると共に、パスHC,HDを介して積算結果を取得する。これらの積算結果及び定数C1,C2を用いてバタフライ演算を行い、バタフライ演算の演算結果を、RFに書き込む。
【００５２】
かかるバタフライ演算は、DCT(Discrete Cosine Transform),FFT(Fast Fourier Transform)といった直交変換処理を行うために必要不可欠な処理である。図２４に示した構成により、フィルタ処理の結果に直交変換処理を施すことが容易になるので、画像処理を効率的に行うことができる。
尚、シフタ２７のシフト処理の前段又は後段に、積算結果を所定範囲に丸め込むという飽和演算を行うことが望ましい。
【００５３】
（第６実施形態）
本実施形態は、第１実施形態〜第５実施形態に示したデータ処理装置を、ビタビ復号に応用する場合の改良に関する。ビタビ復号は、トレリス図から最も確からしい情報系列を探索するという処理にて実現される。図２６は、トレリス図の一例を示す。トレリス図は、図２６（ｂ）に示すようにノード部にあたる"ステージ"と、エッジ部にあたる"ブランチ"とが複数結合してなる。ステージは、時間t=0,1,2,3のそれぞれにおける受信装置の内部状態を表し、ブランチは、各ステージへと移行する確率であり受信系に一意な値となる。図２６のトレリス図においてt=0には、値が"00"であるステージしかない。t=1では、値が"00"であるステージと、値が"10"であるステージの2つがある。t=2では、値が00,01,10,11といった4つのステージがある。実線のブランチjs1は、受信装置への値"00"の入力であり、破線のブランチhs1は、受信装置への値"11"の入力である。受信装置の状態は、このブランチをトリガとしてステージからステージへと遷移する。トレリス図においてステージとブランチとを連鎖してなる一本の経路が情報系列であり、ビタビ復号では、トレリス図に現れる何通りもの情報系列のうち、最も確からしい1つのものを選ぶという処理が行われる。その選別の詳細は以下の通りである。トレリス図には図２６（ｂ）に示すように、あるステージと、別のステージとが1つのステージで合流している箇所が何ヶ所かある。この合流点こそ、情報系列の選別のための着眼箇所である。つまり、合流点に至る2つ以上のブランチ及びステージのうち尤度が大きいものを選ぶという処理を、全ての合流点について繰り返す。この繰り返しが、最も確からしい情報系列の特定処理である。情報系列の選別は、1つのステージに合流する複数のステージの値とブランチの値に対してacs演算を行うことにより具現される。つまり、ステージの値とブランチの値との和が小さいものは、この尤度が高いと考えられるので、あるステージに合流する複数のブランチについて、ステージの値とブランチの値との和を求め(acs演算の"a(=add)")、この和を複数のブランチ同士で比較し(acs演算の"c(=compare)")、この和が小さいブランチと、このブランチの分岐元になるステージとを残す(acs演算の"s(=select)")のである。このacs処理を全ての合流点で行う。そうすると尤度が大きいステージ−ブランチを連ねた情報系列を特定することができる。
【００５４】
続いてデータ処理装置を用いて、合流点における尤度比較をどのように実現するかについて説明する。図２７は、ビタビ復号の実現時にあたってのデータ処理装置に対する機能割り当てを示す図である。PE0〜PE3のRFは、時間tにおけるステージの値及びブランチの値の格納に割り当てられる。つまりPE0のRFには、時間tにおけるステージg0の値と、ステージg0を分岐元としたブランチb0の値とを、PE1のRFには、時間tにおけるステージg1の値と、ステージg1を分岐元としたブランチb1の値とをそれぞれ格納しておく。一方、PE0〜PE3のALUには、時間t+1における複数合流点のそれぞれが割り当てられる。そしてその合流点において、時間tにおけるステージ及びブランチを選ぶためのacs演算を実施する。つまりPE0のALUは、時間tにおけるステージg0の及びブランチb0、時間tにおけるステージg1及びブランチb1のうち、何れを残すかのacs演算を行う。PE1のALUは、時間tにおけるステージg1及びブランチb1、時間tにおけるステージg2及びブランチb2のうち何れを残すかのacs演算を、PE2のALUは、時間tにおけるステージg2及びブランチb2、時間tにおけるステージg3及びブランチb3のうち何れを残すかのacs演算をそれぞれ行う。
【００５５】
ネットワーク部２０は、トレリス図に従い、時間tにおけるステージを格納したレジスタファイルから、時間t+1における合流点に割り当てられた算術演算ユニットへの入出力を実現する。
レジスタファイル、ネットワーク部と、算術演算ユニットに図２７のような機能割り当てを行うことにより、ビタビ復号において最適経路を探索するという処理を好適に実現することができる。
【００５６】
図２８は、acs(add compare select)演算を好適に行うための本実施形態に係るALUの内部構成を示す図である。図２８におけるALUには、図２４に示したDDA２３、乗算器２４、アキュムレータ、DDA２６の他に減算器２８、セレクタ２９、セレクタ３０が新規に設けられている。先ず本実施形態に係るDDA２６がどのような機能を実現するかについて説明する。DDA２６は、acs演算のうち、"add"の部分を実現する。つまり第５実施形態に述べたように、DDA２６は、2つの加算処理を同時に実現するというハイブリッド加算機能を有するので、自身と同じレジスタファイルに格納されたステージ及びブランチの加算と、ネットワーク部を介して他のPEのレジスタファイルから転送されてくるステージ及びブランチの加算とを同時を実行する。以上がDDA２６についての説明である。続いて本実施形態において新規に設けられた減算器２８、セレクタ２９、セレクタ３０について説明する。
【００５７】
減算器２８は、acs演算のうち、"compare"の部分を実現する。つまり一方の加算結果から他方の加算結果を減じるという減算を実行する。
セレクタ２９は、減算器２８による減算結果に基づき、加算結果が大きい方、又は小さい方を選択的に出力する。これによりacs演算のうち、"select"の部分を実現するのである。
【００５８】
セレクタ３０は、減算器２８の減算結果及びセレクタ２９の出力の何れか一方を選択的に出力する。
以上のように本実施形態によれば、ビタビ復号において求められる情報経路の探索を、第５実施形態までに示したデータ処理装置の内部構成を用いて好適に実施するので、通信系のメディア処理にデータ処理装置を応用することができ、データ処理装置の用途の範囲を増やすことができる。
【００５９】
（第７実施形態）
本実施形態は、複数PE内のRFの読み書きを1つの共通の命令に基づき実現する実施形態に関する。図２９は、本実施形態に係るデータ処理装置の内部構成を示す図である。図２９においてブロックデコーダ３１、変換部３２、変換部３３、変換部３４が新規に設けられていることに注目されたい。
【００６０】
ブロックデコーダ３１は、以下のフォーマットを有する命令に従って、PE0〜PE15内のRFに対する読み書きを実施する。
オペコード src1,src2,src3,src4,dst1,dst2,dst3
"src"は読出先となる最大4つのレジスタの指定、"dst"は書込先となる最大3つのレジスタの指定を示す。これらの指定にはRFを構成する16個のレジスタのそれぞれの識別番号r0〜r15が用いられる。図２９におけるパスph1,2,3,4,5,6,7は、読出先となる4つのレジスタ番号、書込先となる3つのレジスタ番号を伝送するための接続線である。
【００６１】
変換部３２,３３,３３は、パスph1,2,3,4,5,6,7に伝送されているレジスタ番号に対して変換を行って、PE0〜PE3のRFに出力する。図３０は、PE0における変換部の内部構成を示す図である。ポートE,F,G,H用加算器４１,４２,４３,４４は、各PEのポートE,F,G,Hのそれぞれについて設けられており、ブロックデコーダ３１から出力されたレジスタ番号に、そのPE固有のオフセットE,F,G,Hを加算して加算結果をRFのポートE、ポートF、ポートG、ポートHに出力する。図２９では、説明の便宜のため変換部がPE0〜PE3に接続されている一例を示したがPE0〜PE15の全てに接続してよいことはいうまでもない。
【００６２】
ポートI,J,K用加算器４５,４６,４７は、各PEのポートI,J,Kのそれぞれについて設けられており、ブロックデコーダ３１から出力されたレジスタ番号に、そのPE固有のオフセットI,J,Kを加算して加算結果をRFのポートI、ポートJ、ポートKに出力する。
ブロックデコーダ３１から出力されたレジスタ番号に、そのPE固有のオフセットが加算されてRFのポートE〜ポートKに出力されるので、ブロックデコーダ３１の解読結果にて指定されたデータを基準とし、これ入力ポート固有のオフセットを加えたレジスタからデータが読み出されることになる。
【００６３】
以上のように本実施形態によれば、16個のPEに含まれているRFからのデータ読み出しを単一の命令にて制御することができるので、データ処理装置をSIMD(Single Instruction Multi Data)プロセッサとして利用することができる。ポートE,F,G,H用加算器４１,４２,４３,４４、ポートI,J,K用加算器４５,４６,４７におけるオフセットは、外部から供給される命令に応じて、ブロックデコーダ３１が逐次設定できるようにしてもよい。これにより、変換部による変換をプログラマブルに設定することができる。
【００６４】
（第８実施形態）
前の実施形態までに示したデータ処理装置は、各PE内のRFに縦16個のデータ列が格納されており、このRFと直列にALUが接続されているので、縦16個のデータ列を垂直方向に加算するという加算処理は効率良く行なえる。しかし、行列を横16個のデータ列毎に水平方向に加算するという加算処理には向いているとはいえない。そこで本実施形態では、前の実施形態までに説明した回路構成の限度内で、かかる水平方向の加算を実現する。
【００６５】
水平方向の加算を実現するにあたって、各PE内のRFは、どのように要素の出力を行うべきかについて説明する。
つまり水平方向の加算を実現するには、PEiは、kサイクルにて、レジスタjからデータを読み出せばよい。ここでjは、i,jを式６に適用することにより算出される。
【００６６】
＜式６＞
j=mod((i+k-1)/n)
尚、縦16×横16の一例で説明を行えば説明が複雑になるので、以降の説明は、縦4×横4の要素からなる行列に対して水平方向の加算を行う場合を対象とすることにより簡略化を期す。
【００６７】
続いて本実施形態に係るデータ処理装置の内部構成について説明する。尚水平方向の加算は、データ処理装置の内部構成のうち図３１に示すものにより実現される。図３１は水平方向加算を実現するために必要な構成要素のみをデータ処理装置から抜き出して描いた図である。図３１に示すように、水平方向の加算処理は、図３１に示すブロックデコーダ３１、ポートE用加算器５１,５２,５３,５４により実現される。本実施形態に係るブロックデコーダ３１は、水平方向の加算を指示する命令の解読を行い、kサイクルにおいてk-1を示す3ビットの値を出力するという処理を行う。
【００６８】
ポートE用加算器５１,５２,５３,５４は、何れもPE0〜PE3内のRFに接続された変換部内の加算器の1つであり、3ビットのオフセットと、デコーダ３１から出力された3ビットの変数k-1とを加算して、加算結果の下位2ビットをRFのポートEに出力する。
図３１におけるポートE用加算器５１,５２,５３,５４は、構成上は互いに同一であるが、オフセットの値が互いに異なる。つまりポートE用加算器５１,５２,５３,５４はそれぞれ、000,001,010,011に設定されている。
【００６９】
デコーダの解読結果がk-1=0,1,2,3と変化した場合、ポートE用加算器５１,５２,５３,５４の出力がどう変化するかを図３２を参照しながら説明する。図３２は、4つのRFにおいて読出対象となるレジスタを示す図である。k-1=0がデコーダから出力された場合、ポートE用加算器５１,５２,５３,５４の出力結果は000,001,010,011となり、これらのうち下位2ビットが各RFのポートEに出力される。その結果、図３２（ａ）の太い枠で囲んだ範囲が読み出し対象となる。k-1=1がデコーダから出力された場合、ポートE用加算器５１,５２,５３,５４の出力結果は001,010,011,100となりそのうち下位2ビットがポートEに出力されるので図３２（ｂ）の太い枠で囲んだ範囲が読み出し対象、k-1=2がデコーダ３１から出力された場合、ポートE用加算器５１,５２,５３,５４の出力結果は010,011,100,001となりポートEに出力されるので図３２（ｃ）の太い枠で囲んだ範囲が読み出し対象、k-1=3がデコーダから出力された場合、ポートE用加算器５１,５２,５３,５４の出力結果は011,100,101,110となり、図３２（ｄ）の太い枠で囲んだ範囲が読み出し対象となる。
【００７０】
第１系統セレクタ２１は、ｋサイクルにて、PEiのRFから読み出されたデータを、PEjに出力する。ここでjは、iを式７に適用することにより算出される。
＜式７＞
j=mod((i+k-1)/n)
k-1=0とした場合、第１系統セレクタ２１は、PE0〜PE3のRFから読み出されたデータを、PE0〜PE3のALUに出力する。k-1=1とした場合、第１系統セレクタ２１はPE3、PE0、PE1、PE2から読み出されたデータをPE0、PE1、PE2、PE3にそれぞれ出力し、k-1=2とした場合、第１系統セレクタ２１はPE2、PE3、PE0、PE1から読み出されたデータをそれぞれPE0、PE1、PE2、PE3にそれぞれ出力する。k-1=3とした場合、第１系統セレクタ２１は、PE1、PE2、PE3、PE0からのデータをそれぞれPE0、PE1、PE2、PE3に出力する。
【００７１】
以上のように構成された本実施形態に係るデータ処理装置の動作を、図３３を参照しながら説明する。図３３は、本実施形態に係るデータ処理装置の動作を示す図である。図３３（ａ）はk-1=0の場合、図３３（ｂ）は、k-1=1の場合、図３３（ｃ）は、k-1=2の場合、図３３（ｄ）は、k-1=3の場合をそれぞれ示す。
k-1=0とし、i=0,1,2,3とした場合、(i,j)は、(0,0)(1,1)(2,2)(3,3)となる。これにより図３３（ａ）に示す通り、PE0からはレジスタr0に格納されたdata(0,0)を、PE1からはレジスタr1に格納されたdata(1,1)、PE2からはレジスタr2に格納されたdata(2,2)、PE3からはレジスタr3に格納されたdata(3,3)をそれぞれ読み出す。第１系統セレクタ２１は、PE0〜PE3から読み出されたdata(0,0)−data(1,1)−data(2,2)−data(3,3)を、PE0〜PE3のALUに出力する。
【００７２】
k-1＝1,つまり2サイクルにおいて図３３（ｂ）に示す通りPE0からはレジスタr1に格納されたdata(0,1)、PE1からはレジスタr2に格納されたdata(1,2)、PE2からはレジスタr3に格納されたdata(2,3)、PE3からはレジスタr0に格納されたdata(3,0)をそれぞれ読み出し、第１系統セレクタ２１に出力する。第１系統セレクタ２１はPE3から読み出されたdata(3,0)をPE0のALUに、PE0から読み出されたdata(0,1)をPE1に、PE1から読み出されたdata(1,2)をPE2、PE2から読み出されたdata(2,3)をPE3にそれぞれ出力する。PE0〜PE4のALUは、data(3,0)−data(0,1)−data(1,2)−data(2,3)を、k=1の際に読み出されたdata(0,0)−data(1,1)−data(2,2)−data(3,3)に加算する。
【００７３】
ｋ-1=2、つまり3サイクル目において図３３（ｃ）に示す通り、PE0からはレジスタr2に格納されたdata(0,2)、PE1からはレジスタr3に格納されたdata(1,3)、PE2からはレジスタr0に格納されたdata(2,0)、PE3からはレジスタr1に格納されたdata(3,1)をそれぞれ読み出し、第１系統セレクタ２１に出力する。第１系統セレクタ２１はPE2から読み出されたdata(2,0)をPE0に、PE3から読み出されたdata(3,1)をPE1、PE0から読み出されたdata(0,2)をPE2、PE1から読み出されたdata(1,3)をPE3にそれぞれ出力する。
【００７４】
ｋ-1=3、つまり４サイクルにおいて図３３（ｄ）に示す通り、PE0のRFからはレジスタr3のdata(0,3)、PE1からはレジスタr0のdata(1,0)、PE2からはレジスタr1のdata(2,1)、PE3からはレジスタr2のdata(3,2)がそれぞれ読み出される。第１系統セレクタ２１は、PE1からのdata(1,0)をPE0、PE2からのdata(2,1)をPE1、PE3からのdata(3,2)をPE2、PE0からのdata(0,3)をPE3にそれぞれ出力する。以上の繰り返しによりPE0のALUは、data(0,0)−data(3,0)−data(2,0)−data(1,0)の積算を、PE1のALUはdata(1,1)−data(0,1)−data(3,1)−data(2,1)の積算を、PE2のALUはdata(2,2)−data(1,2)−data(0,2)−data(3,2)の積算、PE3のALUは、data(3,3)−data(2,3)−data(1,3)−data(0,3)の積算をそれぞれ行う。
【００７５】
以上のように本実施形態によれば、第７実施形態までに説明したネットワーク部２０を用いることにより、水平方向に行列の要素を加算してゆくという処理を高速に行うことができる。
尚、本実施形態では説明の都合上、水平方向の加算を行うべき範囲を行列のうち縦4個×横4個の範囲に留めたが、縦16個×横16個の範囲で加算を行うには以下のような変更を加えれば良い。
【００７６】
16個のレジスタr0〜r15の全てに対して水平加算を実現するには、ポートEに入力されるべきレジスタ番号を4ビット(0000〜1111)で表現せねばならない。そこでPE0〜PE15における変換部内のポートEのオフセットについては5ビット長で表現する。一方、デコーダ３１から出力される変数k-1も5ビット長で表現する。そして5ビット長のオフセットと、5ビット長の変数k-1との加算結果のうち、その下位4ビットを式６の変数jとしてRFのポートEに出力するのである。
【００７７】
第１系統セレクタ２１は、式７に従い、ｋサイクルにてPEiのRFから読み出されたデータを、PEjに出力する。
このように逐次処理部２１から出力されたデータをPE0〜PE15の算術演算ユニットが積算してゆく。そうすれば、16個のPEの16個のレジスタに対する水平方向の加算を実現することができる。
【００７８】
（第９実施形態）
本実施形態は、行列の転置行列を実現する場合のデータ処理装置の改良に関する。メディア処理では、行列の転置変換が必要な場合があり、行列の要素の配置を入れ替えたいケースが多々ある。しかしレジスタ間の結線により配置入れ替えを実現しようとすると、そのレジスタ間の結線のための配線量は「RF内のレジスタ数×PE数」といったオーダーになり、膨大なものとなる。そこで本実施形態では、前の実施形態までに示した構成を巧みに利用して、少ない回路規模で行列の転置変換を実現する。尚、縦16×横16の一例で説明を行えば説明が複雑になるので、以降の説明は、第８実施形態同様縦4×横4の要素からなる行列に対して転置変換を行う場合を対象として簡略化を期する。
【００７９】
上述した転置変換は、i行j列に位置する要素(i,j)と、j行i列に位置する要素(j,i)とを入れ替えるという処理を、全ての要素に対して行うことにより実現される。このi,jを本実施形態では以下の＜式８＞により特定する。
＜式８＞
j=mod((k+i)/n)
kは、転置変換を初めて何サイクル目かを示す。
転置処理は、以下の処理により実現される。つまりPEiのレジスタjに格納されているデータ(i,j)と、PEjのレジスタiに格納されているデータ(j,i)とを同時に読み出し第１系統セレクタ２１及び第２系統セレクタ２２に出力する。出力されたデータ(i,j)をPEjのレジスタiに書き込み、出力されたデータ(j,i)をPEiのレジスタjに書き込む。
【００８０】
図３４は、データ処理装置の構成要素のうち転置変換処理に必要なもののみを選んで示した図である。図３１同様、データ処理装置にはブロックデコーダ３１、ポートE用加算器５１,５２,５３,５４が備えられている。この他にポートJ用加算器５５,５６,５７,５８、ポートF用加算器６１,６２,６３,６４、ポートI用加算器６５,６６,６７,６８が設けられている点は前の実施形態との差違点である。先ず始めに本実施形態におけるブロックデコーダ３１、ポートE用加算器５１,５２,５３,５４の改良点について説明する。
【００８１】
本実施形態に係るブロックデコーダ３１は、水平方向の加算を指示する命令の解読を行い、kサイクルにおいて、変数kを示す3ビットの値を出力するという処理を行う。
ポートE用加算器５１,５２,５３,５４は、前の実施形態同様、3ビットのオフセットと、デコーダから出力された3ビットの変数kとを加算して、加算結果の下位2ビットをRFのポートEに出力する。オフセットについては、それぞれ000,001,010,011に設定されている。
【００８２】
以上が本実施形態におけるブロックデコーダ３１、ポートE用加算器５１,５２,５３,５４についての改良点である。続いて図３４において新規に追加された構成要素について説明する。
ポートJ用加算器５５,５６,５７,５８は、ポートE用加算器５１,５２,５３,５４同様3ビットのオフセットと、デコーダから出力された3ビットの変数kとを加算して、加算結果の下位2ビットをRFのポートIに出力する。オフセットもポートE用加算器５１,５２,５３,５４同様、それぞれ000,001,010,011に設定されている。
【００８３】
ポートF用加算器６１,６２,６３,６４は、ポートE用加算器５１,５２,５３,５４同様、3ビットのオフセットと、デコーダから出力された3ビットの変数kとを加算して、加算結果の下位2ビットをRFに出力する。オフセットはポートE用加算器５１,５２,５３,５４と異なり、それぞれ010,011,100,101に設定されている。
ポートI用加算器６５,６６,６７,６８は、ポートE用加算器５１,５２,５３,５４同様、3ビットのオフセットと、デコーダから出力された3ビットの変数kとを加算して、加算結果の下位2ビットをRFに出力する。オフセットはポートF用加算器５１,６２,６３,６４と同様、それぞれ010,011,100,101に設定されている。
【００８４】
以上が転置変換を実現するためのデータ処理装置の内部構成である。続いてデコーダの解読結果がk=1,2と変化した場合、ポートE用加算器５１,５２,５３,５４、ポートJ用加算器５５,５６,５７,５８の出力がどう変化するかを図３５及び図３６を参照しながら説明する。図３５は、変数kの変化に伴う、RFからの出力の遷移を示す図である。図３６は、各加算器の出力の遷移により、PE0〜PE3内のRFのうち、どの範囲が読出範囲になるかを示す図である。
【００８５】
k=1がデコーダから出力された場合、ポートE用加算器５１,５２,５３,５４及びポートJ用加算器５５,５６,５７,５８の出力結果は001,010,011,100となり、図３６（ａ）の太い枠で囲んだ範囲が読み出しの対象となる。
一方、ポートF用加算器６１,６２,６３,６４及びポートI用加算器６５,６６,６７,６８の出力結果は011,100,101,110となり、図３６（ｂ）の太い枠で囲んだ範囲が読み出しの対象となる。k=2の場合、ポートE用加算器５１,５２,５３,５４及びポートJ用加算器５５,５６,５７,５８の出力結果は010,011,100,101となり、図３６（ｃ）の太い枠で囲んだ範囲が読み出しの対象となる。
【００８６】
以上のように構成されたデータ処理装置の動作を図３７及び図３８を参照しながら説明する。
k=1の場合、つまり1サイクル目にjがどのように設定されるかについて図３７を参照しながら説明する。ここでk=1とし、i=0,1,2,3とする場合、上述した式８によると(i,j)は(0,1)(1,2)(2,3)(3,0)となる。これらには、data(0,1)−data(1,2)−data(2,3)−data(3,0)が格納されているので、図３７（ａ）に示すようにRFからの読み出しにより、これらdata(0,1)−data(1,2)−data(2,3)−data(3,0)が第１系統セレクタ２１に出力されることになる。一方k=1とし、i=0,1,2,3とする場合、(j,i)は(0,3)(1,0)(2,1)(3,2)となるので、図３７（ｂ）に示すようにこれらに格納されているdata(0,3)−data(1,0)−data(2,1)−data(3,2)は第２系統セレクタ２２に出力される。
【００８７】
ネットワーク部２０は、図３７（ｃ）に示すようにRFから読み出された横一行のデータの並びを並べ替えて、各ALUに出力する。変数iに従ったデータの並びを、変数jに従った並びに並べ替えることを意味する。第１系統セレクタ２１は、PE0を入力元としたdata(0,1)をPE1に、PE1を入力元としたdata(1,2)をPE2、PE2を入力元としたdata(2,3)をPE3、PE3を入力元としたdata(3,0)をPE0にそれぞれ出力する。
【００８８】
一方、RFから第２系統セレクタ２２に出力されるデータ列は要素(j,i)であり、水平方向は変数jの順序で並んでいる。第２系統セレクタ２２は図３７（ｄ）に示すようにこれを変数iの順序に並びかえる。第２系統セレクタ２２は、図３７（ｄ）に示すようにPE0を入力元としたdata(0,3)をPE3、PE1を入力元としたdata(1,0)をPE0、PE2を入力元としたdata(2,1)をPE1、PE3を入力元としたdata(3,2)をPE2にそれぞれ出力する。
【００８９】
RFは、ポートI用加算器６５,６６,６７,６８及びポートJ用加算器５５,５６,５７,５８の出力に従い、第１系統セレクタ２１から出力された横一行の要素を、RFに書き込んでゆく。図３７（ｅ）に示すように第１系統セレクタ２１を介して出力されたdata(3,0)をPE0のレジスタr3に、data(0,1)をPE1のレジスタr0に、data(1,2)をPE2のレジスタr1に、data(2,3)をPE3のレジスタr2にそれぞれ書き込む。同様に、図３７（ｆ）に示すように第２系統セレクタ２２から出力されたdata(1,0)をPE0のレジスタr1に、data(2,1)をPE1のレジスタr2、data(3,2)をPE2のレジスタr3に、data(0,3)をPE3のレジスタr0にそれぞれ書き込む。
【００９０】
続いてk=2の場合、つまり2サイクル目にjがどのように設定されるかについて図３８を参照しながら説明する。k=1における転置を経て、各PE内のRFの内容は、図３８（ａ）のようになっている。ここでk=2とし、i=0,1,2,3とする場合、(i,j)は(0,2)(1,3)(2,0)(3,1)となる。RFは、図３８（ｂ）に示すようにPE0からはレジスタr2のdata(0,2)を、PE1からはレジスタr3のdata(1,3)を、PE2からはレジスタr0のdata(2,0)を、PE3からはレジスタr1のdata(3,1)をそれぞれ読み出し、data(0,2)−data(1,3)−data(2,0)−data(3,1)のデータ列を第１系統セレクタ２１に出力する。
【００９１】
第１系統セレクタ２１は、図３８（ｃ）に示すようにdata(0,2)−data(1,3)−data(2,0)−data(3,1)のデータ列を、data(2,0)−data(3,1)−data(0,2)−data(1,3)の順序に並べ替える。
RFは、図３８（ｄ）に示すようにdata(2,0)をPE0のレジスタr2に、data(3,1)をPE1のレジスタr3に、data(0,2)をPE2のレジスタr0に、data(1,3)をPE3のレジスタr1にそれぞれ書き込む。
【００９２】
以上のように本実施形態によれば、ハードウェア規模を増大化させることなく行列の転置変換を実現することができる。
尚、本実施形態では説明の都合上、転置変換を行うべき範囲を行列のうち縦4個×横4個の範囲に留めたが、縦16個×横16個の範囲で転置変換を行うには以下のような変更を加えれば良い。
【００９３】
16個のレジスタr0〜r15の全てに対して転置変換を実現するには、ポートE,F,I,Jに入力されるべきレジスタ番号を4ビット(0000〜1111)で表現せねばならない。そこでPE0〜PE15における変換部内のポートE,F,I,Jのオフセットについては5ビット長で表現する。一方、デコーダ３１から出力される変数k-1を5ビット長で表現する。そして5ビット長のオフセットと、5ビット長の変数k-1との加算結果のうち、その下位4ビットを式８の変数jとして各RFのポートE,F,I,Jに出力するのである。
【００９４】
そのようにしてポートE、ポートFに出力された4ビットの変数jに従いPEiのレジスタjに格納されているデータ(i,j)と、PEjのレジスタiに格納されているデータ(j,i)とが同時に読み出され第１系統セレクタ２１及び第２系統セレクタ２２に出力される。
第１系統セレクタ２１及びIQ部２２は、式９に従いkサイクルにてPEiのRFから読み出されたデータを、PEjに出力する。
【００９５】
ポートI、ポートJに出力された4ビットの変数jに従いレジスタファイルは、出力されたデータ(i,j)をPEjのレジスタiに書き込み、出力されたデータ(j,i)をPEiのレジスタjに書き込む。このような読み書きを実現することにより、16個のPEの16個のレジスタに対する転置変換が実現される。
（第１０実施形態）
本実施形態は、ブロックデコーダ３１の周辺構成を開示するための実施形態である。図３９は、本実施形態に係るデータ処理装置の内部構成を示す図である。図３９において、フェッチ部７２、命令メモリ７３、プログラムカウンタ７４、外部メモリデバイス７５が新規に追加されている点に着目されたい。
【００９６】
本図においてブロックデコーダ３１は、全体デコーダ７１と接続されている。フェッチ部７２は、命令列を記憶している命令メモリ７３から、プログラムカウンタ７４により指示されるアドレスの命令を取り出し、全体デコーダ７１は、取り出された命令を解読する。解読された命令がRFの読み書きを伴うものなら、ブロックデコーダ３１に命令解読及びRFに対する読み書き制御を委ねる。
【００９７】
ここで全体デコーダ７１について説明する。ブロックデコーダ３１は既に述べたようにRFの読出先、書込先のレジスタを指定していた。これに対して全体デコーダ７１は、命令に対して、分岐制御を実現する。ここで取り出された命令が、分岐先を絶対アドレスで指定している場合、全体デコーダ７１は命令のオペランドから即値として指定されている絶対アドレスを取り出し、プログラムカウンタ７４に書き込む。分岐先が相対アドレスで指定されている場合、全体デコーダ７１は命令のオペランドから即値として指定されている相対アドレスを取り出し、この相対アドレスをもとに分岐先を算出して、算出された分岐先をプログラムカウンタ７４に書き込む。
【００９８】
全体デコーダ７１による分岐制御と、ブロックデコーダ３１によるレジスタの読書制御との時間的な関係について説明する。図４０は、データ処理装置の動作タイミングを示すタイミングチャートである。本図において"IF1  IF2"は、メモリデバイスから命令を取り出すステージであり、"DEC1ステージ"は全体デコーダ７１により命令の解読がなされるステージである。"DEC2ステージ"とは、命令にオペランドが指定されており、オペランドを用いて演算を行うことにより、読出先及び書込先レジスタの指定が特定される場合に、その演算が実施されるステージである。つまり全体デコーダ７１、ブロックデコーダ３１は、DEC1ステージ、DEC2ステージという2つのデコードステージにおいて別々に実行されるのである。
【００９９】
分岐制御のための全体デコーダ７１と、レジスタの読書制御のためのブロックデコーダ３１とを別構成とし、それぞれを別のデコーダステージで実行させたのは、マシンサイクルの長期化を避けるという目的である。仮に全体デコーダ７１とブロックデコーダ３１とを一体構成とした場合、全体デコーダ７１とブロックデコーダ３１とがクリティカルパスを構成することになり、分岐制御に要する期間T1と、演算制御に要する期間T2とを足し合わせた期間T1＋T2に基づき、データ処理装置のマシンサイクルは設定され、マシンサイクルは長めになってしまう。そこで本実施形態では、分岐制御を行う全体デコーダ７１と、読書制御を行うブロックデコーダ３１とを別構成とし、分岐制御及び演算制御を別々のデコーダステージで実行している。これにより分岐制御に要するT1、読書制御に要するT2の何れか長い方を目安に、データ処理装置のマシンサイクルを決定することができ、データ処理装置を高速動作させることができる。
【０１００】
参考のため、第１実施形態〜第９実施形態に示した各処理がなされる場合の動作タイミングを、図４０〜図４３を参照しながら説明する。
図４０におけるEX1,EX2,WBステージは、第２実施形態に示したようなフィルタ演算をALUが行う際のタイミングチャートである。
加算器２３によるオペランドCとオペランドBとを加算ks1は、EX1ステージ、乗算器２４による加算結果(オペランドB＋オペランドC)とオペランドAとの乗算jz1はEX2ステージ、アキュムレータ２５による乗算結果オペランドA×(オペランドB＋オペランドC)と、オペランドCとの加算ks2は、WBステージにて実行されている。
【０１０１】
図４１は、あるPE内のRFの格納値を、別のPE内のRFに書き込む場合の動作を示すタイミングチャートである。
DDA２６による加算は、全体デコーダ７１による解読がなされるDEC1ステージでなされていることがわかる。ブロックデコーダ３１によるデコーダと、そのデコーダ結果に基づくレジスタ格納値の読み出しとは、DEC2ステージにて実行されている。ネットワーク部２０によるレジスタ格納値の入出力は、EX1ステージで行われ、RFへのレジスタ格納値の書き込みは、WBステージで実施されている。
【０１０２】
図４２は、シフタ２７によるシフト動作時の動作タイミングチャートを示す図である。DDA２６によるシフトは、EX1ステージにて実行されていることがわかる。図４３は、acs演算時の動作タイミングを示すタイミングチャートである。本図において加算器による加算はEX1ステージ、減算器及びセレクタによるCompare Select処理はEX2ステージで行われることがわかる。
【０１０３】
（第１１実施形態）
本実施形態は、LookUpテーブルを用いた画像処理を効率化する場合の改良に関する。Look Up Table(LUT)とは、何通りかの色彩のパターンを表現したテーブルであり、1通りの色彩パターンを構成する輝度、赤色差、青色差、混合比を示すエントリーを複数配してなる。
【０１０４】
LUTに示される複数の色彩パターンのうち、任意の2色,4色,16色を用いて描画される映像をOSDグラフィクスといい、身近な例でいえば、DVDプレーヤやSTB等の機器においてユーザの操作に伴って、ディスプレィ上に描画されるチャネル番号や再生、停止の表示等がこのOSDグラフィックスである。
複数のPEのそれぞれがOSDグラフィックスの描画を行う場合、このLUTを各PEにどのように割り当てるかが問題となる。仮に16個のPEが1つのLUTを共用する場合を考える。この場合、LUTがメモリデバイスで占有するメモリ領域は、1つのLUT分の規模で済み、メモリデバイスの規模は小規模で済む。しかし1つのPEがLUTを使用できる確率は1／16となり、LUTを使用するために、多くのPEが、LUTの使用待ちに陥り、PEの処理効率が大きく低下してしまう。一方、16個のPEのそれぞれに対してLUTを個別に割り当てる場合は、PE間でLUTの使用の競合が起こり得ず、画像処理の効率が低下することはない。その一方で16個ものLUTをメモリデバイスに格納しておかねばならないから、メモリデバイスの大容量化は避け得ない。
【０１０５】
LUTを各PEにどのように割り当てるかは、メモリデバイスの規模及びPEの作業効率を大きく左右する。本実施形態ではこれらの点に鑑み、メモリデバイスの規模抑制と、PEの作業効率の向上とが両立できるように、データ処理装置を構成する。
図４４は、本実施形態に係るデータ処理装置の内部構成を示す図である。本図では4つのPEがひとまとまりになって1つの"ベクトル演算部"を構成している。図４５では、PE0〜PE3がベクトル演算部８０、PE4〜PE7がベクトル演算部８１、PE8〜PE11がベクトル演算部８２、PE12〜PE15がベクトル演算部８３をそれぞれ構成している。またデュアルポートメモリが(図中のD.P.メモリ８４、８５、８６、８７)設けられており、4つのベクトル演算部８０〜８３のそれぞれに対して、1対1の比率で接続されている。
【０１０６】
ベクトル演算部８０と、D.P.メモリ８４の内部構成を図４５に示す。図４５に示すようにD.P.メモリは、4つのバンク領域(Bank0、Bank1、Bank2、Bank3)を含み、ベクトル演算部８０を構成するPE0,PE1,PE2,PE3のRFには、第１LUTセレクタ８８、第２LUTセレクタ８９が接続されている点に注目されたい。
先ず始めにD.P.メモリ８４について説明する。D.P.メモリ８４を構成する4つのバンク領域のうちBank3はLUTを構成する16個のエントリーe[0]〜e[15]のうちe[0]〜e[3]を、Bank2はe[4]〜e[7]を、Bank1はe[8]〜e[11]を、Bank0はe[12]〜e[15]をそれぞれ格納している。このようにD.P.メモリ８４を構成する4つのバンクは、LUTを構成する16個のエントリーを、4エントリーずつ格納しているのである。各バンクは、2つの出力ポートv,wを有しており、自身に格納されている4つのエントリーのうち任意の2つを、2つの出力ポートv,wを通じて別々のPEに出力することができる。以上がD.P.メモリ８４の内部構成である。続いて第１LUTセレクタ８８、第２LUTセレクタ８９について説明する。
【０１０７】
第１LUTセレクタ８８は、4つの入力ポートと、4つの出力ポートとを有する4入力-4出力セレクタである。4つの入力ポートは、4つのバンクのそれぞれに対応しており、各入力ポートは、対応するバンクの出力ポートvと接続されている。一方4つの出力ポートは、4つのPEのそれぞれと対応しており、各出力ポートは、対応するRFの入力ポートXと接続されている。
【０１０８】
第２LUTセレクタ８９は、第１LUTセレクタ８８同様、4つの入力ポートと、4つの出力ポートとを有する4入力-4出力セレクタである。4つの入力ポートは、4つのバンクのそれぞれに対応しており、各入力ポートは、対応するバンクの出力ポートwと接続されている。一方4つの出力ポートは、4つのALUのそれぞれと対応しており、各出力ポートは、対応するRFの入力ポートYと接続されている。
【０１０９】
図４６の左半分は、ベクトル演算部８０のD.P.メモリ８４におけるバンクに格納されたデータがどのように読み出され、どのように各PEに出力されるかを示す図である。Bank3からはe[1]、Bank2からはe[4]、Bank1からはe[11]、Bank0からはe[12]がそれぞれ読み出されている。一方、Bank1からのe[11]は第１LUTセレクタ８８によりPE0内のALU、Bank2からのe[4]はPE1内のALU、Bank0からのe[12]はPE2内のALU、Bank3からのe[1]はPE3内のALUにそれぞれ出力されていることがわかる。
【０１１０】
図４６の右半分は、ベクトル演算部８１のデュアルポートメモリ８５におけるバンクに格納されたデータがどのように読み出されるかを示す図であり、Bank1からはe[9],e[10]、Bank2からはe[5]、Bank3からはe[2]が読み出され、LUTセレクタによりe[9]はPE4、e[2]はPE5、e[5]はPE6にそれぞれ出力される。一方、Bank2から読み出されたe[10]は、PE7に出力される。
【０１１１】
以上のように、LUTを4つのバンクに分割して格納しており、このバンクは、格納されているエントリ情報を2つのPEに供給することができるので、1つのバンクに格納されているエントリ情報の読み出しを、3つ以上のPEが要求する場合を除き、PEがLUTの参照待ちに陥ることはあり得ない。PEは、LUTにおける必要なエントリ情報を、必要に応じて随時参照できるので、LUTを用いたOSDグラフィックスの描画を、複数PEを用いて高速に実現することができる。またLUTは4つのPEにつき1つが割り当てられているので、メモリデバイスの規模を抑制することができる。
【０１１２】
（第１２実施形態）
本実施形態は、ネットワーク部２０による入出力の指定を実現するための構成を開示する。図４７は、本実施形態に係るデータ処理装置の内部構成を示す図である。図４７において特徴的なのは、PE0内のALUに入出力指定レジスタ９０が設けられている点である。入出力指定レジスタ９０は、ネットワーク部２０による入出力を規定するレジスタである。図４８は、入出力指定レジスタ９０の詳細を示す図であり、本図（ａ）に示すようにプロセッシングエレメント数と同数のエントリーとからなる。各エントリーは、入力元となるPEに対応しており、各エントリーには、PEの格納値を格納すべき出力先PEを指定することができる。図４８（ｂ）は、入出力指定レジスタ９０の設定例を示す図である。本図における入出力指定レジスタ９０は、PE0〜PE4という4つのPEに対応するPE0エントリー、PE1エントリー、PE2エントリー、PE3エントリーからなる。またこれら4つのエントリーには、PE番号"2","3","0","1"が設定されている。これらのエントリーの設定によるセレクタの入出力を表したのが図４８（ｂ）である。この図４８（ｂ）に示すように、PE0からPE2への入出力nk1、PE1からPE3への入出力nk2、PE2からPE0への入出力nk3、PE3からPE1への入出力nk4が同時に実行されている。これらの入出力の同時実行により、PE0、PE1、PE2、PE3におけるRFの格納値を、それぞれ他のPEのALUに引き渡すことができる。入出力指定レジスタ９０は、ブロックデコーダ３１により設定される。つまりブロックデコーダ３１が命令の解読を行った際、この解読結果に従って設定されるのである。これによりネットワーク部２０における入出力を制御することが可能となる。
【０１１３】
以上のように本実施形態によれば、どのPEのRFの格納値を、どのPEのALUに転送するかという入出力の組み合わせを入出力指定レジスタ９０を用いて実現することができるので、ネットワーク部２０の制御を容易に実現することができる。
（第１３実施形態）
本実施形態は、値を読み出すべきレジスタの指定と、値を書き込むべきレジスタの指定とを含む命令をブロックデコーダ３１が解読することにより、レジスタの読み書きを実現する。
【０１１４】
そのような命令の一例としてネットワークセレクト命令について説明する。以下に、ネットワークセレクト命令のフォーマットを示す。
scsel src,dst
本フォーマットにおいて"src"は読出先の指定、"dst"は書込先の指定である。これらにはRFを構成する16個のレジスタのそれぞれの識別番号r0〜r15が用いられる。図４８（ｃ）は、ネットワークセレクト命令の一例と、その命令の解読によりどのような読み書きが行われるかを示す図である。どのPEのレジスタを読出元とするかの指定、どのPEのレジスタを書込先とするかの指定は、前の実施形態で述べた入出力指定レジスタ９０の設定に基づく。レジスタの読み書きは、入出力指定レジスタ９０の指定と、命令のオペランドの指定とにより実現される。図４８（ｂ）における入出力指定レジスタ９０では、PE0〜PE3に対する出力先が、PE2、PE3、PE0、PE1に設定されている。またネットワークセレクト命令は、レジスタr0を読出元、レジスタr1を書込先に指定しているので、PE0〜PE3のRFにおけるレジスタr0が、PE2、PE3、PE0、PE1といった並びに並べ替えられ、PE0〜PE3のレジスタr1に書き込まれる。
【０１１５】
より高度な命令として、ネットワークシフト命令について説明する。ネットワークシフト命令の命令フォーマットは以下の通りである。
scsfti src1,src2,dst,imm
本図においてネットワークシフト命令は、"src1  src2"にて指定されるレジスタ列の格納値を、"imm"だけシフトしてその結果を"dst"にて指定されるレジスタに書き込む旨を示す。図４９（ａ）は、ネットワークシフト命令の具体的な設定例と、その設定時にレジスタの読み書きがどのように実行されるかを示す図である。図４９（ｂ）は、ネットワークシフト命令の解読前の1つのプロセッシングエレメント内のRFの格納内容を示す。図４９（ａ）の具体例では、src1、src2にレジスタr0、レジスタr1が指定され、immが"3"に指定されている。一方、PE0〜PE3のレジスタr0及びレジスタr1の格納内容は、図４９（ｂ）に示す通りであるものとする。この図４９（ｂ）に示したRFの格納内容に対して、"3"だけシフトが行われれば、レジスタr0、レジスタr1の格納内容は図４９（ｃ）のようになる。つまりPE3のレジスタr0に格納されていたd3がPE0のレジスタr0に格納される。このようにシフトがなされた後、レジスタr0からレジスタr2への転送を行なえば、レジスタr2の格納内容は図４９（ｄ）のようになる。
【０１１６】
ネットワークシフト命令の他の一例を図５０に示す。図５０（ａ）に示すネットワークシフト命令は、シフト量であるimmが"-2"に指定されているので、図５０（ｂ）に示すPE0〜PE3のレジスタr0及びレジスタr1に格納されているd0〜d7は、図５０（ｃ）のようにシフトされる。
immが"-2"に指定されているので、PE3のレジスタr0に格納されていたd3がPE1のレジスタr1に、PE2のレジスタr0に格納されていたd2がPE0のレジスタr1にそれぞれ格納されている。このようにシフトされた後、PE0〜PE3のレジスタr0に格納されているデータが、PE0〜PE3のレジスタr1に転送されるのである。
【０１１７】
以上のように本実施形態によれば、RFにおける格納値を、水平方向に自由に移動させることができるので、データ処理装置によりなされる処理のバリエーションを増やすことができる。
尚、データ処理装置とは別に、本実施形態で開示したscsel命令又はscsfti命令を含むプログラムのみを記録媒体に記録して譲渡・貸与してもよい。またこのプログラムのみをネットワークを介して配信してもよい。
【０１１８】
（第１４実施形態）
本実施形態は、ALUが演算を行った後のALUの状態を示す状態フラグをRFに格納させておく場合の改良に関する。図５１は、本実施形態に係るレジスタの格納内容を示す図である。レジスタが16bitの語長を持っている点は第１実施形態と同様であるが、このうち上位3ビットが状態フラグに割り当てられている点が第１実施形態との差違点である。状態フラグは、PE内のALUの演算結果がゼロになった旨を示すゼロフラグ、PE内のALUの演算結果に桁上げが生じた旨を示すキャリーフラグ、ALUの演算が比較演算である場合の比較結果を示す比較結果フラグからなる。
【０１１９】
本実施形態のPEにおけるALUは、演算を行えば、この演算結果と、状態フラグとを一ワードにして同じPEに含まれる何れかのRFに書き込む。演算結果と共に状態フラグが1つのレジスタに書き込まれるので、あるPE内のALUが行った演算結果に応じて、他のPE内のALUが演算を行うという、ALU同士の連携を実現することができる。
【０１２０】
図５２は、本実施形態におけるALUの動作を示す図である。本図において▲１▼に示すようにRFから値P,Qを読み出して、PE0のALUがP+Qといった演算を行ったものとする。その後、演算結果P+Qと、その演算結果において桁溢れが生じたか否かを示すキャリーフラグとが▲２▼に示すようにRFに書き込まれる。このようにRFに状態フラグが書き込まれるので、PE1のALUは、PE0のRFに書き込まれた状態フラグを▲３▼に示すように転送して参照することにより、PE0による演算時に桁溢れが生じたか否かを知ることができ、それに応じた演算を実行することができる。
【０１２１】
以上のように本実施形態によれば、ALU同士の連携を実現することができる。
（第１５実施形態）
PEがハーフワード単位で処理を実施する場合の改良に関する。第２実施形態に示したような画像処理をデータ処理装置が実施する場合、RFに画素値やフィルタ係数を格納していた。ここでフィルタ係数のデータ長は、レジスタの語長(1シングルワード)であるのに対し、画素値の語長は、レジスタの語長の半分(ハーフワード)で足りる場合がある。そのため、RFへの画素値の格納にあたっては、RFの各レジスタr0〜r15のそれぞれに、2つの画素の画素値を格納しておくことが可能となる。そうなると1つのPEのRFには、16×2個の画素値を詰め込んでおくことが可能となる。またALUにおいても、ハーフワードの画素値と、シングルワードのフィルタ係数との乗算を2つ同時に実行することができれば、画素値に対する処理効率が増す。図５３は、シングルワードとハーフワードとの乗算をなしえる乗算器２４の構成を示す図である。本図において乗算器２４は2つの乗算を実施する。1つ目の乗算は、パスPt1を通じて入力されてくるシングルワードのフィルタ係数と、パスPt2を通じて入力されてくる下位ハーフワード(図中の"L")の画素値との乗算であり、2つ目の乗算は、パスPt3を通じて入力されてくるシングルワードのフィルタ係数と、パスPt4を通じて入力されてくる上位ハーフワード("図中のH")の画素値との乗算である。
【０１２２】
以上が乗算器２４の内部構成である。ALUにおける乗算器２４の周辺構成について説明する。本実施形態において加算器２３は、入力ポートCから入力されてくる2つのハーフワードの画素値と、入力ポートDから入力されてくる2つのハーフワードの画素値とを個別に加算する処理を行い、そうして得られる2つのシングルワードの加算結果のうち上位側をパスPt4に出力し、下位側をパスPt2に出力する。乗算器２４は、シングルワードとハーフワードとの乗算を2つ同時に行う。こうして得られた2つの乗算結果(SW・上位HW及びSW・下位HW)を、アキュムレータ２５は積算してゆく。
【０１２３】
以上のように本実施形態によれば、RFの各レジスタに、2つのハーフワードの画素値を格納しておき、ALUはこれらの画素値に対するフィルタ処理を2つ同時に実施するので、多くの画素値に対する画像処理を効率化することができる。
（第１６実施形態）
前の実施形態では、RFはハーフワード単位で画素値の格納を行い、ALUはハーフワード単位で画素値の乗算を行ったが、本実施形態はこれに伴うネットワーク部２０の改良である。
【０１２４】
図５４は、本実施形態に係るネットワーク部２０の内部構成を示す図である。本図においてネットワーク部２０を構成する第１系統セレクタ２１は、第１実施形態に示した通り16個の出力ポートを有し、16個のデータを16個のALUに同時に転送する。図中のパスth0,th2,th4,th6は、RFの格納値をそのままALUに伝送する接続線である。これとは他に、本実施形態におけるネットワーク部２０にはパスth1,th3,th5,th7が設けられていることがわかる。これらのパスは、PE0のRFの格納値の上下ハーフワードを入れ替えることにより得られた反転データをALUに伝送する接続線である。セレクタ９１,９２,９３,９４,９５,９６,９７,９８は、パスth0,th2,th4に伝送される格納値、パスth1,th3,th5に伝送される格納値の何れか一方を、選択的に出力する。
【０１２５】
以上のように本実施形態によれば、上下ハーフワードが入れ替えられたシングルワードがネットワーク部２０からALUに伝送されるので、ALUがオペランドとして利用できるシングルワードの組み合わせのバリエーションを増やすことができる。
尚、本実施形態において各レジスタファイルの出力ポートから出力されるべきデータ(i)と、これの上下ハーフワードを反転した反転データ(ii)との双方を、各レジスタファイルから受け付けて、入力元を2×n個とし、出力先をn個とした入出力を実施する2・n入力−n出力セレクタをネットワーク部２０に設けてもよい。
【０１２６】
また入出力の対象となるデータは、レジスタファイルの1つのレジスタから読み出されたデータとしたが、あるレジスタから読み出されたハーフワードのデータと、他のレジスタから読み出されたハーフワードのデータを結合した結合データであってもよい。
（第１７実施形態）
本実施形態は、第１実施形態に示したデータ処理装置構成を応用して、複素数演算を実現する。一般に複素数は、実数と、虚数とからなる。複素数P+Qiと、複素数R+Siとの加算結果は、(P+R)+(Q+S)iとなり、複素数P+Qiと、複素数R+Siとの乗算は、(P・R-S・Q)+(Q・R+S・P)iとなる。以上のことから複素数同士の加算は、実数と、虚数とを区別して加算せねばならないし、複素数同士の乗算では、実数と虚数との加減算を個別に実行せねばならない。これらの制約がある演算を、本実施形態ではデータ処理装置を用いて実現する。図５５は、複素数演算を行う場合のRFの格納例を示す図である。加算演算のオペランドとなる実数部P、虚数部Q、実数部R、虚数部Sはそれぞれ個別のレジスタr0〜r3に格納されていることがわかる。またレジスタr4は演算結果のうち実数部分の格納先に、レジスタr5は、演算結果のうち虚数部分の格納先にそれぞれ割り当てられている。ALUの内部構成は第２実施形態に示したALUの内部構成と同一である。
【０１２７】
図５６は、図５５の格納内容に対してALUがどのような演算を実現するかを示す図である。矢印▲１▼及び▲２▼に示すように、RFから実数部P、実数部Rがそれぞれ転送され、これらの実数同士の加算が▲３▼に示すようにアキュムレータ２５によりなされていることがわかる。更にこれらの加算結果P+Rは、▲４▼に示すようにRFのレジスタr4に書き込まれている。続いて矢印▲５▼、▲６▼に示すように虚数部Q、虚数部Sがそれぞれ転送され、これら虚数同士の加算が▲７▼に示すようにアキュムレータにより実行され、その結果S+Qが▲８▼に示すようにRFのレジスタr5に書き込まれる。
【０１２８】
続いて複素数同士の乗算がどのように行われるかについて説明する。図５７及び図５８は複素数同士の乗算手順を示す図である。先ず始めに、実数部P、実数部Rが図５７（ａ）の▲１▼、▲２▼に示すようにRFからALUに転送されている。この実数部Pと実数部Rとの乗算が乗算器２４によりなされ、演算結果P・Rが▲４▼に示すように演算結果の格納先たるレジスタに書き込まれる。続いて虚数同士の乗算を実現すべく、虚数部Q及び虚数部Sを図５７（ｂ）の▲５▼及び▲６▼に示すようにRFから読み出す。乗算器２４は、▲７▼に示すように虚数部Qと虚数部Sとの乗算を行い、RFから乗算結果P・Rを▲８▼に示すようにアキュムレータ２５に読み出す。
【０１２９】
アキュムレータ２５は、▲９▼に示すように乗算結果S・QをP・Rから減じる。これにより乗算結果(P・R-S・Q)が算出され、この実数(P・R-S・Q)をRFのレジスタr4に書き込む。続いて実数と虚数との乗算を行うべく、図５８（ａ）の▲１▼▲２▼に示すように実数部Pと虚数部SとをRFから読み出す。乗算器２４は▲３▼に示すようにこれらの乗算を行って、乗算結果P・Sを▲４▼に示すようにRFのレジスタr5に書き戻す。その後、図５８（ｂ）の▲５▼及び▲６▼に示すように虚数部Qと実数部RとをRFから読み出す。乗算器２４は▲７▼に示すようにこれらの乗算を行い乗算結果Q・Rを得る。一方、▲８▼に示すように乗算結果P・SをRFのレジスタr5から読み出し、アキュムレータ２５は▲９▼に示すように乗算結果Q・Rと乗算結果S・Pとを足し合わせる。これにより(Q・R+S・P)がえられるので、RFのレジスタr5に書き戻す。以上の処理を経て乗算結果(P・R-S・Q)+(Q・R+S・P)iがえられることになる。
【０１３０】
以上のように本実施形態によれば、第１実施形態に示したデータ処理装置を応用することにより、複素数同士の加算、乗算を実現するので、データ処理装置をπ/4QPSK変調等、通信系のメディア処理へと応用することができる。
（第１８実施形態）
第８実施形態では、縦n個×横n個の要素、つまり縦横の要素数が同じである行列に対して、横方向の積算を行った。本実施形態はこれの応用であり、縦横の要素数が異なる行列において、横方向の積算を実施するものである。図５９（ａ）は、縦n個×横n個の要素からなる行列中に存在する、縦y個×横x個の要素からなる行列を示す図である。本図において、x,yは何れもx≦n,y≦nの関係を満たし、またx＞yの関係がある。このような行列に対して、横方向の積算を実施する。
【０１３１】
第８実施形態の図３２、図３３に示した横方向の積算は、縦横の要素数が同一の行列に対してなされるものである。従って、図５９（ａ）に示す縦y個×横x個の行列に対しては、第８実施形態の処理は実行できない。そこで、図５９（ａ）の縦y個×横x個の行列に、ハッチングht1を付した縦x-y個×横x個を加えて、図５９（ｂ）に示すような縦x個×横x個からなる行列を作成し、第８実施形態の手順の適用対象とする。縦x-y個×横x個の要素は、全て0(ゼロ)であり、この縦x-y個×横x個が加わった縦x個×横x個に対して第８実施形態の横方向の積算処理を行えば、縦y個×横x個の行列において横方向の積算結果が得られる。
【０１３２】
第８実施形態の積算処理を実行するにあたっては、上述した＜式７＞を以下のように改変することによりi,kからjを得る必要がある。
＜改変された式７＞
j=mod((i+k-1)/z)
ここでzは、x、yのうち、大きい方を示す。
【０１３３】
尚、x＞yではなく、x＜yの関係があっても、x＝yの関係があっても本実施形態の手順は適用可能である。
（第１９実施形態）
第９実施形態では、縦n個×横n個の要素、つまり縦横の要素数が同じである行列に対して、行列の転置を行った。本実施形態はこれの応用であり、縦横の要素数が異なる行列において、行列の転置を実施するものである。図６０（ａ）は、縦n個×横n個の要素からなる行列中に存在する、縦y個×横x個の要素からなる行列を示す図である。本図において、x,yは何れもx≦n,y≦nの関係を満たし、またx＞yの関係がある。このような行列に対して、転置を実施する。
【０１３４】
第９実施形態の図３６、図３７、図３８に示した横方向の積算は、縦横の要素数が同一の行列に対してなされるものである。従って、図６０（ａ）に示す縦y個×横x個の行列に対しては、第９実施形態の処理は実行できない。そこで、第１８実施形態と同様のアプローチを行う。つまり図６０（ａ）に示す縦y個×横x個の行列にハッチングht2を付した縦x-y個×横x個を加えて、図６０（ｂ）に示すように縦x個×横x個からなる行列を作成し、第８実施形態の手順の適用対象とする。縦x-y個×横x個の要素は、全て0(ゼロ)であり、この縦x-y個×横x個が加わった縦x個×横x個に対して第９実施形態の転置の処理を行う。そうすると、図６０（ｃ）に示すような縦x個×横x個の行列が得られる。この行列は、縦x個×横y個の行列と、縦x個×横x-y個の行列とからなる。こうして得られた図６０（ｃ）の縦x個×横x個の行列から、縦x個×横x-y個の行列を取り出せば、結果としての行列に対する転置が得られることになる。
【０１３５】
縦x行、横y行の要素からなる行列に対して、第９実施形態の転置処理を行う場合には、上述した＜式８＞を以下のように改変することによりi,kからjを得る必要がある。
＜改変された式８＞
j=mod((i+k-1)/z)  ここでzは、x,yのうち大きい方を示す。
尚、x＞yではなく、x＜yの関係があっても、x＝yの関係があっても本実施形態の手順は適用可能である。
【０１３６】
(第２０実施形態)
第２０実施形態は、16個のPTのそれぞれに具備されているレジスタファイルのシフト動作を利用して、データ処理装置を無線通信システムに適用する場合の改良に関する。無線通信システムのどのような技術に適用するかというと、デ・インターリーブ技術に、適用するのである。
【０１３７】
無線通信システムでは、当該システムから送信されるビット系列が符号化された信号に、ランダムノイズやフェージング等により、ランダム誤りやバースト誤りが発生する場合がある。そこで、部分的に連続して起こるバースト誤りに対し、元のビット系列の順番を入れ替えるインタリーブを行うことによって誤りビットを分散させている。
【０１３８】
このインタリーブの一般的な技術の１つとして、ブロックインタリーブがある。ブロックインタリーブとは、元のビット系列において、互いに隣接している各２ビットが一定ビット数単位の間隔をおくように元のビット系列を並び替えることをいい、例えば、ブロックインタリーブ前のビット系列が、「B1、B2、B3、B4、B5、....,B288 」であるとすると、このビット系列のビット順を「B1、B17、B33、B49、B65、B81、B97、B113、B129、B145、B161、B177、B193、B209、B225、B241、B257、B273、B2、B18....、B288」というように、元のビット系列において、隣接していた各２つのビット(例えばB1とB2、B17とB18)が各１７ビットの間隔を置くように並び替えることをいう。図６１にブロックインタリーブ前と後のビット系列のビット順を示す。図６１では、簡略化するために、各ビットを数字で表している。図６１において示すように、テーブルの横方向のビット順はブロックインタリーブ前のビット順を示し、テーブルの縦方向のビット順は、ブロックインタリーブ後のビット順を示す。
【０１３９】
一方、ビット系列の伝送方法によっては、特定番目の送信ビットの誤り率が特に高くなる場合がある。例えば、１６QAM変調でビット系列を伝送する場合、偶数番目に送信されるビットの誤り率が高くなることが経験的に認識されている。
この場合、デ・インタリーブを行うことにより、元のビット系列に並べ替えても、誤りのビットが連続して並ぶことになり、デ・インタリーブされたビット系列の復号を行う場合に、誤り訂正機能により、誤りを修正できない事態が発生することになる。
【０１４０】
このような事態の発生を防ぐために、ブロックインタリーブによって並べ替えられたビット系列を一定数のビット単位のブロックに区分し、区分した各ブロック内のビットの順序を所定のローテーション規則に従って、並べ替えることが行われている。
図６２は、ブロックインタリーブされたビット系列が上記ローテーション規則に従って、並び替えられた後のビット系列のビット順を示す。図６２に示すビット系列においては、ビット系列が３ビット単位のブロックに順次区分され、区分された各ブロック内の各ビットの順序が、元順序であるローテーション１の順序、元順序の１番目のビットが３番目に、２番目のビットが１番目に、３番目のビットが２番目にローテーションされたローテーション２の順序、元順序の１番目のビットが２番目に、２番目のビットが３番目に、３番目のビットが１番目にローテーションされたローテーション３の順序に、６ブロック単位でローテーションされ、１８ブロック毎にローテーション１、ローテーション２、ローテーション３が一巡するように並び替えられている。
【０１４１】
これにより、上記の事態の発生を防止することができる。無線通信システムの受信側においては、上記のように並び替えられたビット系列を元の順序のビット系列に復元するために、受信した各ビットについて、当該ビットの並び替え前の元の位置を示す各アドレスをメモリに記憶し、受信した各ビットを、メモリに記憶した各アドレスに従って、並び替える処理が行われている。
【０１４２】
しかしながら、上記のように、アドレスを記憶するためにメモリを使用することとすると、その分、電力の消費及びハードウェア面積が大きくなるという問題がある。そこで第２０実施形態におけるデータ処理装置は、復調された各ビットの元の位置を示すアドレスを記憶するためのメモリを必要とせずに、デ・インターリーブを行う。
【０１４３】
以下、第２０実施形態に係るデータ処理装置について、図面を用いて詳細に説明する。
データ処理装置は無線通信システムで用いられる装置であり、データ処理装置が受信するビット系列は、直交振幅変調(Quadrature Amplitude Modulation)である64QAMの変調方式で変調されたものである。
【０１４４】
64QAMの変調方式で直交振幅変調されるのは、同相信号(I信号)及び直交信号(Q信号)である。I信号とQ信号は、元のビット系列を並び替え、並べ替えられたビット系列を３ビットのビット単位(以下、「マッピングビット」という。またこの３ビットをブロック、ビットデータともいう。)毎に、位相と振幅を示すデータ(同相成分I又は直交成分Qから構成されるデータ)に変換して、変換されたデータを逆高速フーリエ変換(IFFT)演算することにより得られる。この並べ替えは以下の通りである。元のビット系列は、隣接している各ビット間の間隔が１７ビットになるようにインタリーブされた後、インタリーブされたビット系列を３ビット単位のブロックに順次区分して、６ブロック毎に各ブロック内の各ビットの順序(以下、「ブロック内元順序」という。)を、元順序(１、２、３の順)、２、３、１の順序(ブロック内元順序２番目を１番目に、３番目を２番目に、１番目を３番目に並び替えた順序)、３、１、２の順序(ブロック内元順序３番目を１番目に、１番目を２番目に、２番目を３番目に並び替えた順序)の３通りの順序で周期的に並び替えられる。
【０１４５】
例えば、ブロック１番目から６番目までは、ブロック内の各ビットの順序は、変更されず、ブロック内元順序のままであり、ブロック７番目から１２番目までは、ブロック内の各ビットの順序は、上記２、３、１の順序に並び替えられ、ブロック１３番目から１８番目までは、ブロック内の各ビットの順序は、上記３、１、２の順序に並び替えられる。以下、１９番目以降のブロックについて、上記と同様の順序並び替え規則に従ってブロック内の各ビットの順序の並び替えが行われる。
【０１４６】
ここでは、説明の便宜上、１ブロックを３ビット単位としたが、３ビット単位に限定する必要はない。また、各ビット間隔についても同様で、１７ビットに限定する必要はなく、(ブロックの整数倍のビット数―1)の間隔であればよい。  また、順序の並び替えについても同様で、３通りの順序に限定されず、１ブロックのビット単位数に応じた順序の通り数であればよい。
【０１４７】
図６３は、第２０実施形態におけるデータ処理装置の主要部の構成を示す機能ブロック図を示す。データ処理装置は、アンテナ１０１、受信部１０２、ベースバンド信号生成部１０３、FFT演算部１０４、第１バッファメモリ部１０５、デマッピング部１０６、第２バッファメモリ部１０７より構成される。
受信部１０２は、アンテナ１０１を介して直交周波数分割多重信号(OFDM：Orthogonal Frequency Division Multiplex)として伝送するOFDM信号を受信し、受信したOFDM信号をベースバンド信号生成部１０３に出力する。
【０１４８】
ベースバンド信号生成部１０３は、出力されたOFDM信号を逆離散フーリエ変換してベースバンド信号を生成し、FFT演算部１０４に出力する。
FFT演算部１０４は、ベースバンド信号生成部１０３から出力されたベースバンド信号に対して、マッピングビットの復調を行う。マッピングビットの復調は、出力された順にデジタル信号に変換して、I信号とQ信号に分離し、分離した各信号にFFT(高速フーリエ変換)演算を行うことでなされる。
【０１４９】
ここで、ベースバンド信号中のマッピングビットに含まれていた各ビットは、軟判定の対象となる。軟判定の結果は、復調すべき各ビット値が０と１の何れに近いかの判定を４ビットのスケールで示した軟判定値で表現される。この軟判定により、ベースバンド信号中の３ビットのマッピングビットは、１２ビットのビットユニットブロックに変換されることになる。変換により得られたビットユニットブロックは、第１バッファメモリ部１０５に記憶させられる。
【０１５０】
第１バッファメモリ部１０５は、２バイトの記憶単位を有しており、この記憶単位が16個並ぶことで一行を形成している。図６４は、第１バッファメモリ部１０５の構成例を示す図である。記憶単位の行が、６行並ぶことで、６行１６列の行列が形成される。この６行１６列の行列は、１９２バイトの容量を有する。各２バイトの記憶単位には、各ビットユニットブロックが格納される。６個のビットユニットブロックは、列方向に並ぶ6個の記憶単位に格納される。ここで、上記記憶単位においては、一列当たりのブロック数は、６としているが、当該ブロック数は、元のビット系列がインタリーブされる間隔を(W-1)とし、１ブロックのビット数をSビットとすると、W/Sによって定められる(W、Sは自然数を示す)。また第１バッファメモリ部１０５は、デマッピング部１０６における16個のPEの各PE番号を、当該PE番号の示すPEに含まれるPEレジスタ番号(PE内のRFを識別するレジスタ番号)と対応付けて記憶している。
【０１５１】
デマッピング部１０６は、第１バッファメモリ部１０５の記憶単位から16個のビットユニットブロックを読み出し、読み出された各ブロックについてビットユニットの出力処理を行う。デマッピング部１０６は、出力されたビットユニットの第２バッファメモリ部１０７への書込処理を行う。
第２バッファメモリ部１０７は、１行を６４ビット(16×4ビット)とした、１８行１６列の行列状の記憶領域を有する。
【０１５２】
続いてデマッピング部１０６の行うビットユニットの出力処理について、具体的に説明する。
図６５は、デマッピング部１０６の構成を示すブロック図である。デマッピング部１０６は、図６５に示す通り、レジスタ１２１と、レジスタ１２２と、制御部１２３と、16個のPE０〜１５とから構成される。
【０１５３】
レジスタ１２１は、第１バッファメモリ部１０５から読み出された横16個のビットユニットブロックを格納する。レジスタ１２１において、１６ビット分の記憶単位が各ブロックに割り当てられる。レジスタ１２１に格納された横16個のビットユニットブロックのうち、列番号１に属するビットユニットブロック１はPE０に、列番号２に属するビットユニットブロック７がPE１に、列番号３に属するビットユニットブロック１３がPE２にそれぞれ対応づけられる。
【０１５４】
レジスタ１２２は、各PEと、４ビットのデータを搬送するバスで接続されており、各PEから出力された４ビットのビットユニットを、出力した各PEの配列順に対応付けて、格納する。これによりビットユニットは、PE０出力ビットユニット、PE１出力ビットユニット、PE２出力ビットユニットというように、各PEの配列順に格納される。
【０１５５】
制御部１２３は、第１バッファメモリ部１０５における横16個の記憶単位から横16個のビットユニットブロックを読出し、読みされた16個のビットユニットブロックをレジスタ１２１に記憶させる。また制御部１２３は、第１バッファメモリ部１０６から各PE番号を読み出し、読み出した各PE番号を、対応するPEレジスタ番号のRFに割り当てる。これにより、PE０内のRFには、PE番号０、PE１内のRFには、PE番号１、PE２のPE内のRFには、PE番号２というように、PE番号が各PEのPEレジスタに割当てられる。次に制御部１２３は、各PEに対して、１つの命令で複数のデータを対象に処理を実行させるためのSIMD型演算命令に基いて、演算処理の実行を指示する。
【０１５６】
各PEから出力された16個のビットユニットがレジスタ１２２に書き込まれる毎に、制御部１２３は16個のビットユニットを読出し、読み出した16個のビットユニットを、第２バッファメモリ部１０７に書き込む。この書き込みにあたって、横16個のビットユニットを書き込む毎に行を改める。かかる書き込みにより、１行を６４ビット(16×4ビット)とした、１８行１６列の行列が、第２バッファメモリ部１０７上に形成される。
【０１５７】
次の行に書込みを行う。図６６は、第２バッファメモリ部１０７の記憶領域の構成例を示す。図６６の斜線部は、各PEから出力された１６個の各４ビットのビットユニットが、当該ビットユニットを出力したPEの配列番号に対応付けて、１行目の記憶領域に書き込まれた状態を示す。斜線部に付与されている番号は、当該ビットユニットを出力したPEの識別番号を示す。
【０１５８】
続いてPE0〜15の内部構成について説明する。PE0〜15は、図６７に示す内部構成を有する。図６７に示すように各PEには、RF、ALUが含まれ、各PE内のRFには、PEの配列順を示すPE番号が格納される。具体的には、PE０にはPE番号０、PE１にはPE番号１というように、各PEの配列順に従って対応するPE番号が格納される。なお、PE内のRFにPE番号を記憶させる代わりに、予めPE番号を記憶させた不揮発性記憶メモリ素子を各PEが含むこととしてもよい。
【０１５９】
ALUは、制御部１２３からの指示に応じて演算処理を実行する。
その演算処理とは、対応するPE内のRFにおけるPE番号(X)をパラメータとした演算((X+L)MOD S)である。その演算結果をZ0値と呼び、Z0を4倍した値をZ1と呼ぶ。
ここで、Lは、演算処理の回数を示す変数であり、「(X+L)MOD S」は(X+L)を元のビット系列の１ブロックのビット数であるSで割ったときの余りを算出するための演算式を示す。また、S=３とする。
【０１６０】
Z1値が求められれば、ALUは、レジスタ１２１に記憶された各ビットユニットブロックをZ1だけ、左シフトさせるシフト演算を実行して、さらにシフト演算の結果を示すデータを１２ビット右シフトさせるシフト演算を実行する。その演算結果の下位４ビットがビットユニットとなり、これをレジスタ１２２に出力する。
【０１６１】
Z0値は更新される値である。Z0値の更新は、１増加された変数値L(ここでは、２)について、上述した演算を実行することでなされる。こうして更新されたZ0値に対して、Z1値が再度算出される。Z0値の更新を繰り返すことにより、ビットユニットブロックに含まれていた３つの各ビットユニットは、ブロック内元順序に対応する順序で出力される。
【０１６２】
以上がデータ処理装置の構成である。以下で、フローチャートを引用しながら、各構成要素の処理手順について説明する。
最初に、FFT演算部１０４の処理手順について説明する。図６８は、上記の処理の手順を示すフローチャートである。以下、図６８を用いて、上記の処理について説明する。FFT演算部１０４は、変数Mを初期化した後(ステップS1101)、変数Mを１増加し(ステップS1102)、さらに変数Nを初期化した後(ステップS1103)、変数Nを１増加する(ステップS1104)。
【０１６３】
１ビットユニットブロックを復調すると、(ステップS1105：YES)、第１バッファメモリ部１０７に当該ビットユニットブロックを書き込むためのアドレス(X)を図６８のS1106に示す算出式(X=X0+32(N-1)+2(M-1)、X0は初期アドレスを示す。)に従って算出する。
ここでは、１ビットユニットブロック当たり２バイトの記憶単位が割当てられているとして、Xのバイト数を算出する算出式が設定されている。
【０１６４】
次に、FFT演算部１０４は、ステップS1106において算出したアドレスの第１バッファメモリ部１０５の記憶単位に、算出したビットユニットブロックを書き込み(ステップS1107)、さらに変数Nの値が６であるか判定する(ステップS1108)。変数Nが６でない場合(ステップS1108：NO)、変数Nを１増加し(ステップS1104)、ステップS1105〜ステップS1108の処理を変数Nが６になるまで繰り返す。
【０１６５】
変数Nが６の場合(ステップS1108:YES)、変数Mが１６であるか判定する(ステップS1109)。変数Nが１６でない場合(ステップS1109：NO)、ステップS1102〜ステップS1109の処理を変数Mが１６になるまで繰り返す。
変数Mが１６である場合(ステップS1109：YES)、変数Mを初期化し(ステップS1101)、ステップS1102〜ステップS1109の処理を繰り返す。
【０１６６】
上記の処理により、復調された各ビットユニットブロックが、第１バッファメモリ部１０５上において、６行１６列の行列をなす。
以上がFFT演算部１０４の処理手順である。次にデマッピング部１０６が行うビットユニットの出力処理について説明する。図６９は、ビットユニットブロックから、各ビットユニットを出力させるために制御部１２３が行う処理を示すフローチャートである。
【０１６７】
第１バッファメモリ部１０５の記憶単位に、復調されたビットユニットブロックが、FFT演算部１０４によって９６個書き込まれると(ステップS1201)、制御部１２３は、変数Nを初期化した後(ステップS1202)、変数Nを１増加し(ステップS1203)、第１バッファメモリ部１０５の記憶単位からビットユニットブロックを、１６ブロック単位で読出すための先頭のビットユニットブロックのアドレス(YES)を図６６のS1204に示す算出式(Y=X0+32(N-1)、X0は初期アドレスを示す。)に従って算出し、算出したアドレスを指定して、16個のビットユニットブロックを第１バッファメモリ部１０５の記憶単位から読出し(ステップS1205)、読み出したビットユニットブロックを、デマッピング部１０６のレジスタ１２１に記憶させる(ステップS1206)。
【０１６８】
次に、制御部１２３は、第１バッファメモリ部１０６から各PE番号を読み出し(ステップS1207)、読み出した各PE番号を、対応するPE内のRFに割当て、１つの命令で複数のデータを対象に処理を実行させるためのSIMD型演算処理命令に基いて、各PEに対し、レジスタ１２１に記憶させた各ビットユニットブロックについての当該演算処理の実行を指示し(ステップS1208)、16個の各ビットユニットについての当該演算処理が完了すると(ステップS1209)、変数Nが６であるか否かを判定する。
【０１６９】
変数Nが６である場合(ステップS1210：YES)、ステップS1201〜S1210の処理を繰り返し、変数Nが６でない場合(ステップS1210:NO)、ステップS1203〜ステップS1210の処理を繰り返す。
次に制御部１２３からの指示に応じて、各PEが実行する演算処理について説明する。図７０は、上記の演算処理を示すフローチャートである。
【０１７０】
各PEは、制御部１２３からの演算処理の実行指示が有ると(ステップS1250：YES)、変数Lを初期化した後(ステップS1251)、変数Lを１増加させ(ステップS1252)、対応するPE内のRFからPE番号(X)を示すデータを読み出し、(X+L)  MOD  ３の演算を実行することにより、演算結果であるZ0値を算出し(ステップS1253)、さらにZ0を４倍する乗算を実行し、乗算結果であるZ1値を算出する(ステップS1254)。
【０１７１】
次に各PEは、以下のシフト演算処理を実行する(ステップS1255)。
すなわち、各PEは、レジスタ１２１から、各対応するビットユニットブロックを読み出し、読み出したビットユニットブロックをZ1値だけ、左シフトさせるシフト演算を実行し、さらにシフト演算の結果を示すデータを１２ビット右シフトさせるシフト演算を実行する。
【０１７２】
次に各PEは、演算結果の下位４ビットのビットユニットをレジスタ１２２に出力し(ステップS1256)、変数Lが３であるか否かを判定する(ステップS1257)。
ステップS1257において、変数Lが３である場合(ステップS1257:YES)、ステップS1250〜S1257の処理を繰り返し、変数Lが３でない場合(ステップS1257：NO)、ステップS1252〜S1257の処理を繰り返す。
【０１７３】
次にデマッピング部１０６の行う、出力されたビットユニットを第２バッファメモリ部１０７へ書込む処理について詳述する。図７１は、上記処理を示すフローチャートである。以下、図７１のフローチャートを参照して、上記の処理について説明する。
制御部１２３は、変数Nを初期化した(ステップS1301)後、変数Nを１増加し(ステップS1302)、各PEによって、４ビットのビットユニットが出力されると(ステップS1303:YES)、出力された16個のビットユニットをレジスタ１２２に書き込み(ステップS1304)、図７１のステップS1305の示す算出式(X=X0+8(N-1)、Xは、バイト単位の書き込みアドレス、X0は初期アドレスを示す。)に従って、第２バッファメモリ部１０７へ書き込むためのアドレスを算出し、算出したアドレスを書き込みアドレスとして指定する(ステップS1306)ことにより、第２バッファメモリ部１０７の記憶単位に、レジスタ１２２に書き込んだ16個の各ビットユニットを、当該ビットユニットを出力したPEの配列順に対応付けるように、第２バッファメモリ部１０７の記憶単位に書き込み(ステップS1307)、変数Nが６であるか否かを判定する(ステップS1308)。
【０１７４】
変数Nが６でない場合(ステップS1308：NO)、ステップS1302〜S1308の処理を繰り返す。
変数Nが６である場合(ステップS1308：YES)、ステップS1301に戻る。
以上のように本実施形態によれば、受信された各ブロックにおける各ビットの元の順序を示すアドレスを記憶するためのメモリを使用することなく、当該ブロック内の各ビットの順序を当該ビットの元の順序に並べ替えることができるので、その分、電力の消費及びハードウェア面積を少なくすることができる。
【０１７５】
尚、第２０実施形態においては、マッピングビットは、軟判定により、１２ビットのビットユニット列として復調されるとしたが、軟判定を行わず、３ビットのビット系列として復調されることとしてもよい。又、軟判定により復調されるビット数は、１２ビットに限定されない。
更に、第２０実施形態においては、デマッピング部１０６に含まれるPEは、16個としたが、PEの個数は16個に限定されない。
【０１７６】
加えて、第２０実施形態において、Z0値を算出するための演算式は、図７０のステップS1253に示す演算式に限定されない。例えば、フラグを変化させる演算式を設定し、フラグの状態に応じて、予めレジスタに記憶させたS回の何れかのZ1値を読み出してもよい。
加えて、第２０実施形態において、レジスタ１２１は各１６ビットを搬送するバスで、各PEと接続されているとしたが、各１２ビットを搬送するバスで接続されているとしてもよい。この場合、シフト演算処理において、「(X+L)」は「(X+L-1)」と、「１２ビット右シフト」は「８ビット右シフト」と置き換える。
(第２１実施形態)
第２１実施形態は、第２０実施形態の改良であり、第１バッファメモリ部１０５を無くすことを主眼とする。
【０１７７】
図７２は、第２１実施形態におけるデータ処理装置の主要部の構成を示す機能ブロック図を示す。データ処理装置は、アンテナ１０１、受信部１０２、ベースバンド信号生成部１０３、FFT演算部１０４、デマッピング部２０６、第２バッファメモリ部１０７より構成される。
データ処理装置は、第１バッファメモリ部１０５が無い点、及びデマッピング部２０６が新規に追加されている点が新しい。その他の構成要素は、第２０実施形態におけるデータ処理装置との構成と同じである。
【０１７８】
FFT演算部１０４は、ベースバンド信号生成部１０３から出力されたベースバンド信号を、出力された順にデジタル信号に変換して、I信号とQ信号に分離し、分離した各信号にFFT(高速フーリエ変換)演算を行うことにより、マッピングビットを復調し、復調したマッピングビット(ビットユニットブロック)を得る。
続いてデマッピング部２０６の内部構成について説明する。図７３は、デマッピング部２０６の内部構成を示す図である。デマッピング部２０６は、少なくとも1つのPTを含む。PTは、１６ビットのレジスタ１３２〜１３４からなるレジスタファイル(RF)、ALU１３５、制御部１３６から構成される。
【０１７９】
レジスタ１３２は、デマッピング部２０６が得たビットユニットブロックを格納する。
レジスタ１３３は、レジスタ１３２がシフト動作を行った際、レジスタ１３２に格納されたビットユニットブロックを格納する。
レジスタ１３４は、ALU１３５のシフト演算処理によって、得られた3つのビットユニット(４ビット)を格納する。レジスタ１３４のうち下位４ビットのビットユニットが読み出される。
【０１８０】
ALU１３５は、レジスタ１３３に格納されたビットユニットブロックに対して演算を実行する。ここでの演算は、予めプログラムに設定された演算式floor((N-1)/(W/S)) MOD Sである。この演算式におけるfloorとはfloor関数である。floor関数とは、括弧内の商である(N-1)/(W/S)の整数部分を示す関数である。上記演算式は、当該整数部分をSで割ったときの余りを算出するための演算式であり、Nは、ビットユニットブロックがレジスタ１３２に書き込まれた順番に相当する変数を示す。
【０１８１】
元のビット系列がインタリーブされる間隔は(W-1)であり、１ブロックのビット数をSビットとする。そうすると、W/S((17+1)/3)は６となる。ALU１３５は、上記の演算を実行することにより、ビットユニットブロックのレジスタ３２への書込みが６回行われる毎に、０、１、２の３つの値の算出を繰り返す。
この繰り返しにおいて、１〜６回目のビットユニットブロックの書込み時は、０、７〜１２回目の書込み時は、１、１３〜１８回目の書き込み時は２、１９〜２４回目の書込み時は、再び０になる。
【０１８２】
演算がなされると、ALU１３５は制御部１３６が決定した順序に従い、シフト演算処理の実行する。
ここで、シフト演算処理の順序とは、以下の３種類の演算処理を実行する順序のことをいう。
この3種類の演算処理を演算処理１、２、３という。
【０１８３】
演算処理１は、レジスタ１３３に書き込まれたビットユニットブロックについて、左に４シフト制御させるシフト演算を実行し、さらに右に８シフト制御させるシフト演算を実行するシフト演算処理であり、１２ビットのビットユニットブロックの上位４ビットのビットユニットが算出される。
演算処理２は、レジスタ１３３に格納されたデータブロックについて、左に８シフト制御させるシフト演算を実行し、さらに右に１２シフト制御させるシフト演算を実行するシフト演算処理であり、１２ビットのビットユニットブロックの中位４ビットが算出される。
【０１８４】
演算処理３は、レジスタ１３３に格納されたデータブロックについて、左に１２シフト制御させるシフト演算を実行し、さらに右に１２シフト制御させるシフト演算を実行するシフト演算処理であり、これにより、１２ビットのビットユニットブロックの下位４ビットが算出される。
これらの３つの演算処理を実行する順序をALU１３５は切り換えるのである。
【０１８５】
具体的にいうとALU１３５は、Z値が０の場合はシフト演算処理１、２、３の順序で、Z値が１の場合はシフト演算処理２、３、１の順序で、Z値が２の場合は、シフト演算処理３、１、２の順序で、シフト演算を実行する。これにより、ビットユニットブロックに含まれていた３つの各ビットユニットは、ブロック内元順序に対応する順序で出力される。
【０１８６】
制御部１３６は、図７４のフローチャートに従って、ビットユニットの出力処理及び書込処理を制御する。以下、制御部１３６の処理について図７４のフローチャートを用いて詳しく説明する。図７４は、上記の処理を示すフローチャートである。
制御部１３６は、変数Mを初期化した後(ステップS1401)、変数Mを１増加し(ステップS1402)、さらに変数Nを初期化し(ステップS1403)、FFT演算部１０４によって、レジスタ１３２にビットユニットブロックが書き込まれると(ステップS1404：YES)、書き込まれたビットユニットブロックをシフトして、レジスタ１３３に格納させる。そして変数Nを１増加し(ステップS1405)、さらに変数Lを初期化し(ステップS1406)、ステップS1407の算出式に示す演算をALU１３５に実行させることにより、Z値を算出し(ステップS1407)、さらに変数Lを１増加し(ステップS1408)、Z値が０か否かを判定する(ステップS1409)。
【０１８７】
Z値が０である場合(ステップS1409：YES)、レジスタ１３３に書き込まれたビットユニットブロックについて、「演算処理１」をALU１３５に実行させる(ステップS1410)。
Z値が１である場合(ステップS1409:N、ステップS1411：YES)、レジスタ１３３に書き込まれたビットユニットブロックについて、「演算処理２」をALU１３５に実行させる(ステップS1412)。
【０１８８】
Z値が２である場合(ステップS1409:N、ステップS1411：NO)、レジスタ１３３に書き込まれたビットユニットブロックについて、「演算処理３」をALU１３５に実行させる(ステップS1413)。
次に、制御部１３６は、上記選択された演算処理によって算出されたビットユニット値をレジスタ１３４に出力させ、出力させたビットユニット値の下位４ビットを読み出すことにより、ビットユニットを出力し、さらに予めプログラムに設定された予めプログラムに設定された演算式(X0+16(N-1)+M-1)に基いて、出力されたビットユニットを第２バッファメモリの記憶単位に書き込むための、指定アドレスをALU１３５に算出させ、算出させたアドレスの示す、第２バッファメモリ部１０７の１バイト単位の記憶単位に、出力した４ビットのビットユニットを書き込む(ステップS1414)。
【０１８９】
次に制御部１３６は、ALU１３５に、予めプログラムに設定された演算式(Z=(Z+1) MOD 3)に基いて、Z値を更新するための演算を実行させ(ステップS1415)、演算結果をレジスタ１３４に出力させた後、変数Lが３であるか否かを判定する(ステップS1416)。
変数Lが３でない場合(ステップS1416:NO)、制御部１３６は、ステップS1408〜S1416の処理を繰り返し、変数Lが３の場合(ステップS1416：YES)、変数Nが６であるか否かを判定する(ステップS1417)。
【０１９０】
変数Nが６でない場合(ステップS1417：NO)、制御部１３６は、ステップS1405〜S1417の処理を繰り返し、変数Nが６である場合(ステップS1417：YES)、制御部１３６は、変数Mが１６であるか否かを判定する(ステップS1418)。
変数Mが１６でない場合(ステップS1418：NO)、ステップS1402〜S1418の処理を繰り返し、変数Mが１６である場合(ステップS1418：YES)、ステップS1401の処理に戻る。
【０１９１】
以上のように本実施形態によれば、受信された各ブロックにおける各ビットの元の順序を示すアドレスを記憶するためのメモリを使用することなく、当該ブロック内の各ビットの順序を当該ビットに対応するビットユニットの元の順序に並べ替えることができるので、その分、電力の消費及びハードウェア面積を少なくすることができる。
【０１９２】
尚、第２１実施形態において、Z値を算出するための演算式は、本第２１実施形態において用いた演算式に限定されない。１ブロックのビット数に対応するS回の異なる値を周期的に算出できる演算式であれば、他の演算式であってもよい。
又、第２１実施形態において、デマッピング部２０６には、レジスタ１３２〜３４の３つのレジスタが含まれることとしたが、レジスタ１３２のみとしてもよい。この場合、図７４のフローチャートにおいて、制御部１３６は、レジスタ１３２に書き込まれたビットユニットブロックについて、算出されたZ値に応じてALU１３５に該当する演算処理を実行させ、演算処理によって算出されたビットユニット値の下位４ビットを、ALU１３５の算出した指定アドレスの示す第２バッファメモリの記憶単位に、レジスタ１３４を介さず直接書き込む。
【０１９３】
【発明の効果】
本発明に係るデータ処理装置は、上述したような構成を有しており、入力元−出力先の組み合わせは、自由に定め得るので、n×mの要素からなるデータ行列のうち、m個のデータ列がレジスタファイルに格納されている場合、プロセッシングエレメント内の演算ユニットに対応するデータ列以外にも、異なるプロセッシングエレメントに対応するデータ列をオペランドとして演算ユニットに供給することができる。オペランド供給に変化があった場合でも、プロセッシングエレメントの稼動効率を維持することができる。
【０１９４】
またレジスタファイルに含まれるm個のレジスタからデータを読み出し、それらをn個のプロセッシングエレメント内の演算ユニットに供給するという処理を行えば、n個のプロセッシングエレメントに含まれる演算ユニットに絶え間なくデータを供給することができる。よってデータ行列のデータを縦方向ではなく横方向に積算してゆくという処理をスムーズに行うことができる。
【図面の簡単な説明】
【図１】  第１実施形態に係るデータ処理装置の内部構成を示す図である。
【図２】  RFの内部構成を詳細に示す図である。
【図３】  ネットワーク部２０の内部構成を示す図である。
【図４】  ネットワーク部２０を構成する2つのセレクタのうち、第１系統セレクタ２１を示す図である。
【図５】  第２系統セレクタ２２を示す図である。
【図６】  ネットワーク部２０によるデータ供給の一例を示す図である。
【図７】  第２実施形態に係るALUの内部構成を示す図である。
【図８】  Pピクチャについての動き補償にデータ処理装置を応用する場合の応用例を示す図である。
【図９】  Pピクチャに対する動き補償を行う場合にALUがどのような演算を行うかを示す図である。
【図１０】  Bピクチャに対する動き補償を行う場合のRFの格納例を示す図である。
【図１１】  Bピクチャに対する動き補償を行う場合にALUがどのような演算を行うかを示す図である。
【図１２】  一ライン上に存在する32個の画素X0〜X31のうち、4つの画素X7,X8,X9,X10に対してフィルタ処理を施す場合の演算式を示す図である。
【図１３】  対称型フィルタを実現する場合のRFの格納例を示す図である。
【図１４】  このStage1におけるRFの読み書き及びALUによる演算を示す。
【図１５】  Stage2においてネットワーク部２０により行われるPE間の転送を示す。
【図１６】  各PE内のRFからALUにどのようなデータが転送されるかを示す図である。
【図１７】  Stage3においてネットワーク部２０によりなされるPE間の転送を示す。
【図１８】  各PE内のRFからALUにどのようなデータが転送されるかを示す図である。
【図１９】  Stage3における読み書き及びALUによる演算を示す図である。
【図２０】  各PE内のRFからALUにどのようなデータが転送されるかを示す図である。
【図２１】  Stage4において、ネットワーク部２０によりなされる転送を示す図である。
【図２２】  Stage4において、ALUによりなされる演算を示す図である。
【図２３】  DDA２６を備えたALUの内部構成を示す図である。
【図２４】  DDA２６及びシフタ２７を備えたALUの内部構成を示す図である。
【図２５】  DDA２６がハイブリッド型の加算器としてどのように機能するかを示す図である。
【図２６】  トレリス図の一例を示す図である。
【図２７】  ビタビ復号の実現時にあたっての機能割り当てを示す図である。
【図２８】  acs(add compare select)演算を好適に行うためのALUの内部構成を示す図である。
【図２９】  デコーダ３１及び変換部３２、３３、３４が接続されたRFを示す図である。
【図３０】  PE0における変換部３２の内部構成を示す図である。
【図３１】  データ処理装置の内部構成を示す図である。
【図３２】  4つのRFにおいて読出対象となるレジスタを示す図である。
【図３３】  水平加算を行うにあたってのデータ処理装置の動作を示す図である。
【図３４】  行列転置を実現するにあたってのデータ処理装置の内部構成を示す図である。
【図３５】  デコーダ３１からの変数kの変化に伴う、RFからの出力の遷移を示す図である。
【図３６】  加算器の出力の遷移により、PE0〜PE3内のRFのうち、どの範囲が読出範囲になるかを示す図である。
【図３７】  水平方向の加算時におけるデータ処理装置の動作を示す図である。
【図３８】  水平方向の加算時におけるデータ処理装置の動作を示す図である。
【図３９】  全体デコーダ７１を有するデータ処理装置の内部構成を示す図である。
【図４０】  データ処理装置の動作タイミングを示すタイミングチャートである。
【図４１】  あるPE内のRFの格納値を、別のPE内のRFに書き込む場合の動作を示すタイミングチャートである。
【図４２】  シフタ２７によるシフト動作時の動作タイミングチャートを示す図である。
【図４３】  acs演算時の動作タイミングを示すタイミングチャートである。
【図４４】  4つのベクトル演算部８０〜８３を有するデータ処理装置の内部構成を示す図である。
【図４５】  1つのベクトル演算部の詳細を示す図である。
【図４６】  ベクトル演算部のデュアルポートメモリにおけるバンクに格納されたデータがどのように読み出され、どのように各PEに出力されるかを示す図である。
【図４７】  入出力指定レジスタ９０を有するALUの内部構成を示す図である。
【図４８】  入出力指定レジスタ９０の詳細を示す図である。
【図４９】  ネットワークシフト命令の具体的な設定例と、その設定例時にレジスタの読み書きがどのように実行されるかを示す図である。
【図５０】  ネットワークシフト命令の他の一例を示す図である。
【図５１】  状態フラグを格納したレジスタの格納内容を示す図である。
【図５２】  ALUの動作を示す図である。
【図５３】  シングルワードとハーフワードとの乗算をなしえる乗算器２４の構成を示す図である。
【図５４】  ハーフワードの上下入れ替えを実現するネットワーク部２０の内部構成を示す図である。
【図５５】  複素数演算を行う場合のRFの格納例を示す図である。
【図５６】  図５５の格納内容に対してALUがどのような演算を実現するかを示す図である。
【図５７】  複素数同士の乗算手順を示す図である。
【図５８】  複素数同士の乗算手順を示す図である。
【図５９】（ａ）〜（ｂ）  第１８実施形態における行列の横方向の積算処理を説明するための説明図である。
【図６０】（ａ）〜（ｃ）  第１９実施形態における行列の転置処理を説明するための説明図である。
【図６１】  ブロックインタリーブ前と後のビット系列のビット順を示すテーブルである。
【図６２】  ブロックインタリーブされたビット系列が上記並び替え規則に基づいて、並び替えられた後のビット系列のビット順を示すテーブルである。
【図６３】  データ処理装置１００の主要部の構成を示す機能ブロック図を示す。
【図６４】  第１バッファメモリ１０５の記憶単位の構成例を示す。
【図６５】  デマッピング部１０６の構成を示すブロック図である。
【図６６】  第２バッファメモリ部１０７の記憶単位の構成例を示す。
【図６７】  PEの構成を示すブロック図である。
【図６８】  FFT演算部１０４が、復調したビットユニットブロックを、ブロック単位で第１バッファメモリ部１０５に記憶させるために行う処理を示すフローチャートである。
【図６９】  ビットユニットブロックから、各ビットユニットを出力させるために制御部１２３が行う処理を示すフローチャートである。
【図７０】  各PEが実行する演算処理を示すフローチャートである。
【図７１】  デマッピング部１０６の行う、出力されたビットユニットを第２バッファメモリ部１０７へ書込む処理を示すフローチャートである。
【図７２】  データ処理装置２００の主要部の構成を示す機能ブロック図を示す。
【図７３】  デマッピング部２０６の構成を示す機能ブロック図である。
【図７４】  デマッピング部２０６が行うビットユニットの出力処理及び書込処理を示すフローチャートである。
【符号の説明】
２０    ネットワーク部
２１    第１系統セレクタ
２２    第２系統セレクタ
２３    加算器
２４    乗算器
２５    アキュムレータ
２６    DDA
２７    シフタ
２８    減算器
２９    セレクタ
３０    セレクタ
３１    ブロックデコーダ
３２    変換部
４１〜４７    ポートE〜K用加算器
５１〜５４    ポートE用加算器
５５〜５８    ポートJ用加算器
６１〜６４    ポートF用加算器
６５〜６８    ポートI用加算器
７１    全体デコーダ
７２    フェッチ部
７３    命令メモリ
７４    プログラムカウンタ
７５    外部メモリデバイス
７７    デュアルポートメモリ
８０〜８３  ベクトル演算部
８４    デュアルポートメモリ
８８    第１LUTセレクタ
８９    第２LUTセレクタ
９０    入出力指定レジスタ
９１〜９８    セレクタ
１００    データ処理装置
１０１    アンテナ
１０２    受信部
１０３    ベースバンド信号生成部
１０４    FFT演算部
１０５    第１バッファメモリ
１０６    デマッピング部
１０７    第２バッファメモリ
１２１,１２２  レジスタ
１２３    制御部
１３２〜１３４  レジスタ
１３５    ALU
１３６    制御部
【図１】
0004020804.tif 000002
【図２】
0004020804.tif 000003
【図３】
0004020804.tif 000004
【図４】
0004020804.tif 000005
【図５】
0004020804.tif 000006
【図６】
0004020804.tif 000007
【図７】
0004020804.tif 000008
【図８】
0004020804.tif 000009
【図９】
0004020804.tif 000010
【図１０】
0004020804.tif 000011
【図１１】
0004020804.tif 000012
【図１２】
0004020804.tif 000013
【図１３】
0004020804.tif 000014
【図１４】
0004020804.tif 000015
【図１５】
0004020804.tif 000016
【図１６】
0004020804.tif 000017
【図１７】
0004020804.tif 000018
【図１８】
0004020804.tif 000019
【図１９】
0004020804.tif 000020
【図２０】
0004020804.tif 000021
【図２１】
0004020804.tif 000022
【図２２】
0004020804.tif 000023
【図２３】
0004020804.tif 000024
【図２４】
0004020804.tif 000025
【図２５】
0004020804.tif 000026
【図２６】
0004020804.tif 000027
【図２７】
0004020804.tif 000028
【図２８】
0004020804.tif 000029
【図２９】
0004020804.tif 000030
【図３０】
0004020804.tif 000031
【図３１】
0004020804.tif 000032
【図３２】
0004020804.tif 000033
【図３３】
0004020804.tif 000034
【図３４】
0004020804.tif 000035
【図３５】
0004020804.tif 000036
【図３６】
0004020804.tif 000037
【図３７】
0004020804.tif 000038
【図３８】
0004020804.tif 000039
【図３９】
0004020804.tif 000040
【図４０】
0004020804.tif 000041
【図４１】
0004020804.tif 000042
【図４２】
0004020804.tif 000043
【図４３】
0004020804.tif 000044
【図４４】
0004020804.tif 000045
【図４５】
0004020804.tif 000046
【図４６】
0004020804.tif 000047
【図４７】
0004020804.tif 000048
【図４８】
0004020804.tif 000049
【図４９】
0004020804.tif 000050
【図５０】
0004020804.tif 000051
【図５１】
0004020804.tif 000052
【図５２】
0004020804.tif 000053
【図５３】
0004020804.tif 000054
【図５４】
0004020804.tif 000055
【図５５】
0004020804.tif 000056
【図５６】
0004020804.tif 000057
【図５７】
0004020804.tif 000058
【図５８】
0004020804.tif 000059
【図５９】
0004020804.tif 000060
【図６０】
0004020804.tif 000061
【図６１】
0004020804.tif 000062
【図６２】
0004020804.tif 000063
【図６３】
0004020804.tif 000064
【図６４】
0004020804.tif 000065
【図６５】
0004020804.tif 000066
【図６６】
0004020804.tif 000067
【図６７】
0004020804.tif 000068
【図６８】
0004020804.tif 000069
【図６９】
0004020804.tif 000070
【図７０】
0004020804.tif 000071
【図７１】
0004020804.tif 000072
【図７２】
0004020804.tif 000073
【図７３】
0004020804.tif 000074
【図７４】
0004020804.tif 000075