(第1の実施形態)
図1は、第1の実施形態による処理装置の構成例を示す図である。処理装置は、命令メモリ101、命令フェッチユニット102、命令デコーダ103、パイプラインコントローラ104、スカラレジスタファイル105、ベクトルレジスタファイル106、セレクタ107,108、第1のスロット処理ユニットSL1a、第3のスロット処理ユニットSL3a、第1のスロット処理ユニットSL1b、第3のスロット処理ユニットSL3b、第2のスロット処理ユニットSL2、第4のスロット処理ユニットSL4、セレクタ109〜112、及びデータメモリ113を有する。
演算装置は、VLIWプロセッサ又はデジタルシグナルプロセッサ(DSP)である。命令メモリ101は、図2に示すように、複数のスロットの命令を含む超長命令語を記憶する。以下、4ウェイVLIWプロセッサの例を説明するが、スロット数は4個に限定されない。超長命令語は、4個のスロットの命令を有し、演算装置は、4個のスロットの命令を並列処理することができる。第1のスロットは、ロード(LD)命令、ストア(ST)命令、又はロード命令及びストア命令以外の処理(ALU)命令を割り当てることができる。第2のスロットは、ロード命令及びストア命令以外の処理(ALU)命令を割り当てることができる。第3のスロットは、ロード(LD)命令、ストア(ST)命令、又はロード命令及びストア命令以外の処理(ALU)命令を割り当てることができる。第4のスロットは、ロード命令及びストア命令以外の処理(ALU)命令を割り当てることができる。なお、各スロットには、何もしないNOP命令を割り当てることも可能である。
第1のスロット処理ユニットSL1aは、超長命令語の第1のスロットのロード(LD)命令及びストア(ST)命令の処理を実行するロードストアユニットである。第1のスロット処理ユニットSL1bは、超長命令語の第1のスロットのロード命令及びストア命令以外の処理(ALU)命令を実行する実行ユニットであり、例えば算術論理演算ユニット(ALU)の処理を行う。第2のスロット処理ユニットSL2は、超長命令語の第2のスロットのロード命令及びストア命令以外の処理(ALU)命令を実行する実行ユニットである。第3のスロット処理ユニットSL3aは、超長命令語の第3のスロットのロード(LD)命令及びストア(ST)命令の処理を実行するロードストアユニットである。第3のスロット処理ユニットSL3bは、超長命令語の第3のスロットのロード命令及びストア命令以外の処理(ALU)命令を実行する実行ユニットである。第4のスロット処理ユニットSL4は、超長命令語の第4のスロットのロード命令及びストア命令以外の処理(ALU)命令を実行する実行ユニットである。
命令フェッチユニット102は、パイプラインコントローラ104の制御により、命令メモリ101に記憶されている超長命令語を読み出してフェッチする。次に、命令デコーダ103は、パイプラインコントローラ104の制御により、命令フェッチユニット102にフェッチされている超長命令語を入力してデコードする。
スカラレジスタファイル105及びベクトルレジスタファイル106は、パイプラインコントローラ104の制御により、命令デコーダ103のデコードに応じて、超長命令語内の4個のスロットの命令のオペランドにより指定されたレジスタに記憶されている値を6個のスロット処理ユニットSL1a〜SL4にそれぞれ出力する。
第1のスロット処理ユニットSL1a及びSL1bは、超長命令語内の第1のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル105及び/又は106から入力する。第2のスロット処理ユニットSL2は、超長命令語内の第2のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル105及び/又は106から入力する。第3のスロット処理ユニットSL3a及びSL3bは、超長命令語内の第3のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル105及び/又は106から入力する。第4のスロット処理ユニットSL4は、超長命令語内の第4のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル105及び/又は106から入力する。
スカラレジスタファイル105は、16個の32ビットレジスタ、8個の出力ポート及び4個の入力ポートを有し、各出力ポートから32ビット値を出力することができる。データメモリ113は、32ビットアドレスを有するので、スカラレジスタファイル105の各レジスタは、データメモリ113のアドレスを記憶することができる。スカラレジスタファイル105は、第1のスロットの2個の出力ポートが第1のスロット処理ユニットSL1a及びSL1bに接続され、第2のスロットの2個の出力ポートが第2のスロット処理ユニットSL2に接続され、第3のスロットの2個の出力ポートが第3のスロット処理ユニットSL3a及びSL3bに接続され、第4のスロットの2個の出力ポートが第4のスロット処理ユニットSL4に接続される。
ベクトルレジスタファイル106は、16個の128ビットレジスタ、6個の出力ポート及び4個の入力ポートを有し、各出力ポートから128ビット値を出力することができる。データメモリ113は、各アドレスに128ビットデータを記憶するので、ベクトルレジスタファイル106の各レジスタは、データメモリ113のデータを記憶することができる。ベクトルレジスタファイル106は、第1のスロットの1個の出力ポートが第1のスロット処理ユニットSL1a及びSL1bに接続され、第2のスロットの2個の出力ポートが第2のスロット処理ユニットSL2に接続され、第3のスロットの1個の出力ポートが第3のスロット処理ユニットSL3a及びSL3bに接続され、第4のスロットの2個の出力ポートが第4のスロット処理ユニットSL4に接続される。
セレクタ107は、命令デコーダ103のデコードに応じて、ベクトルレジスタファイル106の第2のスロットの2個の出力ポートの値のいずれかを選択し、第1のスロット処理ユニットSL1bに出力する。すなわち、第1のスロット処理ユニットSL1bの2入力値のうちの一方の入力値は、第2のスロット処理ユニットSL2の2入力値のうちのいずれかの1入力値と同じである。第1のスロット処理ユニットSL1b及び第2のスロット処理ユニットSL2は、ベクトルレジスタファイル106の同じ1個の出力ポートの値を入力する。
セレクタ108は、命令デコーダ103のデコードに応じて、ベクトルレジスタファイル106の第4のスロットの2個の出力ポートの値のいずれかを選択し、第3のスロット処理ユニットSL3bに出力する。すなわち、第3のスロット処理ユニットSL3bの2入力値のうちの一方の入力値は、第4のスロット処理ユニットSL4の2入力値のうちのいずれかの1入力値と同じである。第3のスロット処理ユニットSL3b及び第4のスロット処理ユニットSL4は、ベクトルレジスタファイル106の同じ1個の出力ポートの値を入力する。
スカラレジスタファイル105の出力ポート数は8であり、ベクトルレジスタファイル106の出力ポート数は6であり、ベクトルレジスタファイル106の出力ポート数の方が少ない。セレクタ107及び108を設けることにより、ベクトルレジスタファイル106の出力ポート数を減らし、ベクトルレジスタファイル106の面積を削減することができる。セレクタ107及び108を用いて、入力データを共有する例を、後に、図3を参照しながら説明する。
6個のスロット処理ユニットSL1a〜SL4は、命令デコーダ103のデコードに応じて、超長命令語内の4個のスロットの命令の処理をそれぞれ並列に実行する。第1のスロット処理ユニットSL1a及びSL1bは、命令デコーダ103のデコードに応じて、超長命令語内の第1のスロットの命令の処理を実行する。第2のスロット処理ユニットSL2は、命令デコーダ103のデコードに応じて、超長命令語内の第2のスロットの命令の処理を実行する。第3のスロット処理ユニットSL3a及びSL3bは、命令デコーダ103のデコードに応じて、超長命令語内の第3のスロットの命令の処理を実行する。第4のスロット処理ユニットSL4は、命令デコーダ103のデコードに応じて、超長命令語内の第4のスロットの命令の処理を実行する。
スロット処理ユニット(ロードストアユニット)SL1a,SL3aは、データメモリ113に対して、32ビットアドレス及び128ビットデータを出力し、データをストアすることができる。また、ロードストアユニットSL1a,SL3aは、データメモリ113に対して、32ビットアドレスを出力し、128ビットデータをロードすることができる。ロードストアユニットSL1aは、データメモリ113からロードした128ビットデータをセレクタ109に出力する。ロードストアユニットSL3aは、データメモリ113からロードした128ビットデータをセレクタ110に出力する。スロット処理ユニット(実行ユニット)SL1bは、128ビットデータをセレクタ109に出力する。スロット処理ユニット(実行ユニット)SL3bは、128ビットデータをセレクタ110に出力する。
セレクタ109は、命令デコーダ103のデコードに応じて、第1のスロット処理ユニットSL1aの出力データ又は第1のスロット処理ユニットSL1bの出力データを選択し、ベクトルレジスタファイル106の第1のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、命令デコーダ103の第1のスロットの命令のデコードに応じたレジスタに、第1のスロットの入力ポートに入力されたデータを書き込む。
スロット処理ユニット(実行ユニット)SL2は、128ビットデータをベクトルレジスタファイル106の第2のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、命令デコーダ103の第2のスロットの命令のデコードに応じたレジスタに、第2のスロットの入力ポートに入力されたデータを書き込む。
セレクタ110は、命令デコーダ103のデコードに応じて、第3のスロット処理ユニットSL3aの出力データ又は第3のスロット処理ユニットSL3bの出力データを選択し、ベクトルレジスタファイル106の第3のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、命令デコーダ103の第3のスロットの命令のデコードに応じたレジスタに、第3のスロットの入力ポートに入力されたデータを書き込む。
スロット処理ユニット(実行ユニット)SL4は、128ビットデータをベクトルレジスタファイル106の第4のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、命令デコーダ103の第4のスロットの命令のデコードに応じたレジスタに、第4のスロットの入力ポートに入力されたデータを書き込む。
例えば、第1のスロットの命令が下記のストア命令である場合を説明する。
v.store vx,sx,「即値」
ここで、v.storeは、オペコードである。オペランドvxは、ベクトルレジスタファイル106内のストアデータを記憶するレジスタ番号を示す。オペランドsxは、スカラレジスタファイル105内のベースアドレスを記憶するレジスタ番号を示す。オペランド「即値」は、オフセットアドレスを示す。
第1のスロット処理ユニットSL1aは、ベクトルレジスタファイル106内のレジスタvxのストアデータを入力し、スカラレジスタファイル105内のレジスタsxのベースアドレスを入力する。次に、第1のスロット処理ユニットSL1aは、レジスタsxのベースアドレスと「即値」のオフセットアドレスとを加算したアドレスと、レジスタvxのストアデータとをデータメモリ113に出力し、データメモリ113の指定アドレスにストアデータをストアする。
次に、第1のスロットの命令が下記のロード命令である場合を説明する。
v.load vx,sx,「即値」
ここで、v.loadは、オペコードである。オペランドvxは、ベクトルレジスタファイル106内のロードデータを書き込むレジスタ番号を示す。オペランドsxは、スカラレジスタファイル105内のベースアドレスを記憶するレジスタ番号を示す。オペランド「即値」は、オフセットアドレスを示す。
第1のスロット処理ユニットSL1aは、スカラレジスタファイル105内のレジスタsxのベースアドレスを入力する。次に、第1のスロット処理ユニットSL1aは、レジスタsxのベースアドレスと「即値」のオフセットアドレスとを加算したアドレスをデータメモリ113に出力し、データメモリ113の指定アドレスからデータをロードする。次に、第1のスロット処理ユニットSL1aは、ロードしたデータをセレクタ109に出力する。セレクタ109は、第1のスロット処理ユニットSL1aが出力するデータを選択してベクトルレジスタファイル106の第1のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、第1のスロットの入力ポートに入力したデータをレジスタvxに書き込む。
次に、第2のスロットの命令が下記の加算命令である場合を説明する。
v.add v10,v14,v15
ここで、v.addは、オペコードである。オペランドv10は、ベクトルレジスタファイル106内の加算結果を書き込むレジスタ番号を示す。オペランドv14及びv15は、ベクトルレジスタファイル106内の加算対象の値を記憶するレジスタ番号を示す。
第2のスロット処理ユニットSL2は、ベクトルレジスタファイル106内のレジスタv14及びv15の値を入力し、レジスタv14及びv15の値を加算し、その加算結果をベクトルレジスタファイル106の第2のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、第2のスロットの入力ポートに入力したデータをレジスタv10に書き込む。
図3は、図1の処理装置の一部の構成例を示す図である。処理装置は、例えば、無線通信の信号処理などのため、ベクトルレジスタファイル106に記憶されているデータを入れ換える処理を行う。第1のスロット処理ユニットSL1bは、入力データを保持する入力レジスタ301,302と、データを入れ換えるためのセレクタ303と、出力データを保持する出力レジスタ304とを有する。第2のスロット処理ユニットSL2は、入力データを保持する入力レジスタ311,312と、データを入れ換えるためのセレクタ313と、出力データを保持する出力レジスタ314とを有する。
例えば、ベクトルレジスタファイル106内の各レジスタは、16ビット×8個=128ビットのデータを記憶する。例えば、命令メモリ101は、次式(1)の第2のスロットの入換命令と次式(2)の第1のスロットの入換命令とを含む超長命令語を記憶する。
v.select.i v0,v1,v2,「即値」 ・・・(1)
v.select_share.i v3,v4,SELx,「即値」 ・・・(2)
ここで、v.select.iは、第2のスロットの入換命令のオペコードである。オペランドv0は、ベクトルレジスタファイル106内の入れ換え後のデータD6を記憶するレジスタ番号を示す。オペランドv1及びv2は、ベクトルレジスタファイル106内の入れ換え前のデータD3及びD4を記憶するレジスタ番号を示す。オペランド「即値」は、データ入れ換えのパターンを示す。
また、v.select_share.iは、第1のスロットの入換命令のオペコードである。オペランドv3は、ベクトルレジスタファイル106内の入れ換え後のデータD5を記憶するレジスタ番号を示す。オペランドv4は、ベクトルレジスタファイル106内の入れ換え前のデータD1を記憶するレジスタ番号を示す。オペランドSELxは、セレクタ107が第2のスロット処理ユニットSL2の2入力データD3及びD4のうちのいずれを選択するかを示す識別子である。オペランド「即値」は、データ入れ換えのパターンを示す。
命令フェッチユニット102は、命令メモリ101内から上記の超長命令語をフェッチする。命令デコーダ103は、命令フェッチユニット102によりフェッチされた超長命令語をデコードする。ベクトルレジスタファイル106は、第2のスロットの上式(1)の入換命令で指定されたレジスタv1のデータD3及びレジスタv2のデータD4を第2のスロット処理ユニットSL2に出力する。また、ベクトルレジスタファイル106は、第1のスロットの上式(2)の入換命令で指定されたレジスタv4のデータD1を第1のスロット処理ユニットSL1bに出力する。セレクタ107は、第1のスロットの上式(2)の入換命令で指定された識別子SELxに応じて、レジスタv1のデータD3又はレジスタv2のデータD4を選択し、データD2を第1のスロット処理ユニットSL1bに出力する。例えば、セレクタ107は、識別子SELxが「0」の場合にはレジスタv1のデータD3を選択し、識別子SELxが「1」の場合にはレジスタv2のデータD4を選択する。図3の場合、セレクタ107は、レジスタv1のデータD3を選択し、データD2として出力する。
入力レジスタ311は、「0」〜「7」で示すレジスタv1の16ビット×8個=128ビットのベクトルデータD3を記憶する。入力レジスタ312は、「8」〜「15」で示すレジスタv2の16ビット×8個=128ビットのベクトルデータD4を記憶する。
入力レジスタ301は、「16」〜「23」で示すレジスタv4の16ビット×8個=128ビットのベクトルデータD1を記憶する。入力レジスタ302は、「0」〜「7」で示すレジスタv2の16ビット×8個=128ビットのデータD2を記憶する。入力レジスタ302及び311の記憶データは、相互に同じになる。
セレクタ303は、第1のスロットの上式(2)の入換命令で指定された「即値」に応じたパターンで、入力レジスタ301のデータD1及び入力レジスタ302のデータD2の入れ換えを行い、入れ換え後のデータD5を出力レジスタ304に書き込む。例えば、セレクタ303は、「0」〜「7」で示される16×8ビットのデータD2のうちの上位半分の「0」〜「3」で示される16×4ビットのデータを選択し、「16」〜「23」で示される16×8ビットのデータD1のうちの上位半分の「16」〜「19」で示される16×4ビットのデータを選択し、それらを結合した16×8ビットのデータD5を出力する。
セレクタ313は、第2のスロットの上式(1)の入換命令で指定された「即値」に応じたパターンで、入力レジスタ311のデータD3及び入力レジスタ312のデータD4の入れ換えを行い、入れ換え後のデータD6を出力レジスタ314に書き込む。例えば、セレクタ313は、「0」〜「7」で示される16×8ビットのデータD3のうちの上位半分の「0」〜「3」で示される16×4ビットのデータを選択し、「8」〜「15」で示される16×8ビットのデータD4のうちの上位半分の「8」〜「11」で示される16×4ビットのデータを選択し、それらを結合した16×8ビットのデータD6を出力する。
図1のセレクタ109は、第1のスロットの命令が上式(2)の入換命令であるので、第1のスロット処理ユニットSL1bの出力データD5を選択し、ベクトルレジスタファイル106に出力する。ベクトルレジスタファイル106は、第1のスロットの上式(2)の入換命令で指定されたレジスタv3にデータD5を書き込み、第2のスロットの上式(1)の入換命令で指定されたレジスタv0にデータD6を書き込む。
なお、セレクタ303及び313は、上位半分のデータを選択する例を示したが、下位半分のデータを選択したり、奇数番目のデータを選択したり、偶数番目のデータを選択するなど様々な選択が可能である。これらの選択は、上式(1)及び(2)の入換命令の「即値」により指定可能である。
また、上式(1)及び(2)は、「即値」により、データ入れ換えパターンを指定する例を示したが、次式(3)及び(4)のように、スカラレジスタファイル105内のレジスタs0及びs1により、データ入れ換えパターンを指定するようにしてもよい。
v.select v0,v1,v2,s0 ・・・(3)
v.select_share v3,v4,SELx,s1 ・・・(4)
上記では、第1のスロット処理ユニットSL1b及び第2のスロット処理ユニットSL2の場合を例に説明したが、第3のスロット処理ユニットSL3b及び第4のスロット処理ユニットSL4の場合も同様である。
上記のように、無線通信の信号処理などでは、第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の入力データD3と同じデータD2を入力する場合がある。本実施形態では、第1のスロット処理ユニットSL1b及び第2のスロット処理ユニットSL2は、ベクトルレジスタファイル106の同じ出力ポートのデータを入力し、第3のスロット処理ユニットSL3b及び第4のスロット処理ユニットSL4は、ベクトルレジスタファイル106の同じ出力ポートのデータを入力する。これにより、ベクトルレジスタファイル106の出力ポート数を減らし、面積を削減することができる。
図4は、図1の処理装置の処理方法を示すフローチャートである。ステップS401では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロット及び第3のスロットの命令が2リードタイプか否かをチェックする。2リードタイプの命令は、例えば、実行ユニットSL1b,SL2,SL3b,SL4が行う加算命令及び入れ換え命令等であり、ベクトルレジスタファイル106に対して、2入力の命令である。1リードタイプの命令は、例えば、ロードストアユニットSL1a,SL3aが行うロード命令及びストア命令であり、ベクトルレジスタファイル106に対して、1入力の命令である。第1のスロット及び第3のスロットの命令の両方が2リードタイプである場合には、ステップS402に進み、それ以外の場合には、ステップS404に進む。
ステップS402では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロットの命令の識別子SELxが0であり、かつ、第3のスロットの命令の識別子SELxが0であるという条件を満たすか否かをチェックする。上記の条件を満たす場合には、ステップS403に進み、上記の条件を満たさない場合には、ステップS413に進む。
ステップS403では、セレクタ107は、第2のスロット処理ユニットSL2の第1の入力データD3を選択し、第1のスロット処理ユニットSL1bに出力する。セレクタ108は、第4のスロット処理ユニットSL4の第1の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第1の入力データD3と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第1の入力データと同じデータを入力し、第3のスロットの命令を実行する。
ステップS413では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロットの命令の識別子SELxが1であり、かつ、第3のスロットの命令の識別子SELxが0であるという条件を満たすか否かをチェックする。上記の条件を満たす場合には、ステップS414に進み、上記の条件を満たさない場合には、ステップS415に進む。
ステップS414では、セレクタ107は、第2のスロット処理ユニットSL2の第2の入力データD4を選択し、第1のスロット処理ユニットSL1bに出力する。セレクタ108は、第4のスロット処理ユニットSL4の第1の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第2の入力データD4と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第1の入力データと同じデータを入力し、第3のスロットの命令を実行する。
ステップS415では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロットの命令の識別子SELxが0であり、かつ、第3のスロットの命令の識別子SELxが1であるという条件を満たすか否かをチェックする。上記の条件を満たす場合には、ステップS416に進み、上記の条件を満たさない場合には、ステップS417に進む。
ステップS416では、セレクタ107は、第2のスロット処理ユニットSL2の第1の入力データD3を選択し、第1のスロット処理ユニットSL1bに出力する。セレクタ108は、第4のスロット処理ユニットSL4の第2の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第1の入力データD3と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第2の入力データと同じデータを入力し、第3のスロットの命令を実行する。
ステップS417では、セレクタ107は、第2のスロット処理ユニットSL2の第2の入力データD4を選択し、第1のスロット処理ユニットSL1bに出力する。セレクタ108は、第4のスロット処理ユニットSL4の第2の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第2の入力データD4と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第2の入力データと同じデータを入力し、第3のスロットの命令を実行する。
ステップS404では、処理装置は、命令デコーダ103のデコード結果に応じて、第1及び第3のスロットのうちの第1のスロットの命令のみが2リードタイプか否かをチェックする。第1のスロットの命令のみが2リードタイプである場合には、ステップS405に進み、それ以外の場合には、ステップS408に進む。
ステップS405では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロットの命令の識別子SELxが0であるか否かをチェックする。識別子SELxが0である場合には、ステップS407に進み、それ以外の場合には、ステップS406に進む。
ステップS407では、セレクタ107は、第2のスロット処理ユニットSL2の第1の入力データD3を選択し、第1のスロット処理ユニットSL1bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第1の入力データD3と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3aは、ベクトルレジスタファイル106から1個のデータを入力し、第3のスロットの命令を実行する。
ステップS406では、セレクタ107は、第2のスロット処理ユニットSL2の第2の入力データD4を選択し、第1のスロット処理ユニットSL1bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第2の入力データD4と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3aは、ベクトルレジスタファイル106から1個のデータを入力し、第3のスロットの命令を実行する。
ステップS408では、処理装置は、命令デコーダ103のデコード結果に応じて、第1及び第3のスロットのうちの第3のスロットの命令のみが2リードタイプか否かをチェックする。第3のスロットの命令のみが2リードタイプである場合には、ステップS410に進み、それ以外の場合には、ステップS409に進む。
ステップS409では、第1のスロット処理ユニットSL1aは、ベクトルレジスタファイル106から1個のデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3aは、ベクトルレジスタファイル106から1個のデータを入力し、第3のスロットの命令を実行する。
ステップS410では、処理装置は、命令デコーダ103のデコード結果に応じて、第3のスロットの命令の識別子SELxが0であるか否かをチェックする。識別子SELxが0である場合には、ステップS412に進み、それ以外の場合には、ステップS411に進む。
ステップS412では、セレクタ108は、第4のスロット処理ユニットSL4の第1の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第1の入力データと同じデータを入力し、第3のスロットの命令を実行する。第1のスロット処理ユニットSL1aは、ベクトルレジスタファイル106から1個のデータを入力し、第1のスロットの命令を実行する。
ステップS411では、セレクタ108は、第4のスロット処理ユニットSL4の第2の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第2の入力データと同じデータを入力し、第3のスロットの命令を実行する。第1のスロット処理ユニットSL1aは、ベクトルレジスタファイル106から1個のデータを入力し、第1のスロットの命令を実行する。
以上のように、セレクタ107は、一のスロット処理ユニットSL2の複数の入力値のうちの1個の入力値を、他のスロット処理ユニットSL1bの入力値として選択する。セレクタ108は、一のスロット処理ユニットSL4の複数の入力値のうちの1個の入力値を、他のスロット処理ユニットSL3bの入力値として選択する。セレクタ107及び108は、命令デコーダ103がデコードする命令の識別子SELxに応じて選択する。
2個のスロット処理ユニットSL1b及びSL2は、それぞれ、一の入力値がベクトルレジスタファイル106の同じ出力ポートから入力され、他の入力値がベクトルレジスタファイル106の異なる出力ポートから入力される。同様に、2個のスロット処理ユニットSL3b及びSL4は、それぞれ、一の入力値がベクトルレジスタファイル106の同じ出力ポートから入力され、他の入力値がベクトルレジスタファイル106の異なる出力ポートから入力される。
本実施形態によれば、ベクトルレジスタファイル106の同じ出力ポートの値を入力することにより、ベクトルレジスタファイル106の出力ポート数を減らし、面積を削減することができる。無線通信などの信号処理では、複数のスロット処理ユニットが入力を共有する場合が少なくないので、本実施形態の効果は大きい。
(第2の実施形態)
図5は、第2の実施形態による処理装置の構成例を示す図である。本実施形態(図5)は、第1の実施形態(図1)に対して、セレクタ107及び108を削除したものである。以下、本実施形態が第1の実施形態と異なる点を説明する。
第1のスロット処理ユニットSL1bは、2個の入力ポートのうちの一方の入力ポートがベクトルレジスタファイル106の第1のスロットの出力ポートに接続され、2個の入力ポートのうちの他方の入力ポートがベクトルレジスタファイル106の第2のスロットの2個の出力ポートのうちのいずれか1個の出力ポートに接続される。第1のスロット処理ユニットSL1b及び第2のスロット処理ユニットSL2の一方の入力ポートは、ベクトルレジスタファイル106の同じ出力ポートに直接接続されている。
また、第3のスロット処理ユニットSL3bは、2個の入力ポートのうちの一方の入力ポートがベクトルレジスタファイル106の第3のスロットの出力ポートに接続され、2個の入力ポートのうちの他方の入力ポートがベクトルレジスタファイル106の第4のスロットの2個の出力ポートのうちのいずれか1個の出力ポートに接続される。第3のスロット処理ユニットSL3b及び第4のスロット処理ユニットSL4の一方の入力ポートは、ベクトルレジスタファイル106の同じ出力ポートに直接接続されている。
第1のスロット処理ユニットSL1b及び第3のスロット処理ユニットSL3bの入力を固定できる場合には、本実施形態のように、セレクタ107及び108を削除することができる。これにより、処理装置の面積をさらに削減することができる。
(第3の実施形態)
図6は、第3の実施形態による処理装置の構成例を示す図である。本実施形態(図6)は、第1の実施形態(図1)に対して、セレクタ107及び108の入力が異なる。以下、本実施形態が第1の実施形態と異なる点を説明する。
ベクトルレジスタファイル106は、第1のスロットの1個の出力ポートと、第3のスロットの1個の出力ポートと、第2のスロットの2個の出力ポート(第1及び第2の出力ポート)と、第4のスロットの2個の出力ポート(第1及び第2の出力ポート)とを有する。また、ベクトルレジスタファイル106は、第2のスロットの第1の出力ポートが第2のスロット処理ユニットSL2の第1の入力ポートに接続され、第2のスロットの第2の出力ポートが第2のスロット処理ユニットSL2の第2の入力ポートに接続される。また、ベクトルレジスタファイル106は、第4のスロットの第1の出力ポートが第4のスロット処理ユニットSL4の第1の入力ポートに接続され、第4のスロットの第2の出力ポートが第4のスロット処理ユニットSL4の第2の入力ポートに接続される。
セレクタ107は、ベクトルレジスタファイル106の第2のスロットの第1の出力ポートのデータと、ベクトルレジスタファイル106の第2のスロットの第2の出力ポートのデータと、ベクトルレジスタファイル106の第4のスロットの第1の出力ポートのデータと、ベクトルレジスタファイル106の第4のスロットの第2の出力ポートのデータとを入力し、その4入力データのうちのいずれか1個のデータを選択して第1のスロット処理ユニットSL1bに出力する。第1のスロットの上式(2)の命令の識別子SELxは、「0」から「3」のうちのいずれかの値をとる。セレクタ107は、第1の実施形態と同様に、第1のスロットの命令の識別子SELxの値に応じて選択する。
同様に、セレクタ108は、ベクトルレジスタファイル106の第2のスロットの第1の出力ポートのデータと、ベクトルレジスタファイル106の第2のスロットの第2の出力ポートのデータと、ベクトルレジスタファイル106の第4のスロットの第1の出力ポートのデータと、ベクトルレジスタファイル106の第4のスロットの第2の出力ポートのデータとを入力し、その4入力データのうちのいずれか1個のデータを選択して第3のスロット処理ユニットSL3bに出力する。第3のスロットの上式(2)の命令の識別子SELxは、「0」から「3」のうちのいずれかの値をとる。セレクタ108は、第1の実施形態と同様に、第3のスロットの命令の識別子SELxの値に応じて選択する。
以上のように、セレクタ107は、複数のスロット処理ユニットSL2及びSL4の入力値のうちの1個の入力値を、第1のスロット処理ユニットSL1bの入力値として選択する。セレクタ108は、複数のスロット処理ユニットSL2及びSL4の入力値のうちの1個の入力値を、第3のスロット処理ユニットSL3bの入力値として選択する。セレクタ107及び108は、命令デコーダ103がデコードする命令の識別子SELxに応じて選択する。
第1〜第3の実施形態では、2個のスロット処理ユニットがベクトルレジスタファイル106の同じ出力ポートの値を入力する場合を例に説明したが、3個以上のスロット処理ユニットがベクトルレジスタファイル106の同じ出力ポートの値を入力するようにしてもよい。少なくとも2個のスロット処理ユニットがベクトルレジスタファイル106の同じ出力ポートの値を入力すればよい。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。