(57)【要約】【課題】レジスタファイルの出力ポート数を減らし、面積を削減することができる処理装置を提供することを課題とする。【解決手段】処理装置は、複数スロットの命令をデコードする命令デコーダ（１０３）と、前記命令デコーダのデコードに応じて、前記複数スロットの命令の処理をそれぞれ並列に実行する複数のスロット処理ユニット（ＳＬ１ａ〜ＳＬ４）と、前記命令デコーダのデコードに応じて、前記複数スロットの命令のオペランドにより指定されたレジスタに記憶されている値を前記複数のスロット処理ユニットにそれぞれ出力するレジスタファイル（１０６）とを有し、前記複数のスロット処理ユニットのうちの少なくとも２個のスロット処理ユニットは、前記レジスタファイルの同じ出力ポートの値を入力する。【選択図】図１
2015130057.tif 000002
【特許請求の範囲】
【請求項１】
複数スロットの命令をデコードする命令デコーダと、
前記命令デコーダのデコードに応じて、前記複数スロットの命令の処理をそれぞれ並列に実行する複数のスロット処理ユニットと、
前記命令デコーダのデコードに応じて、前記複数スロットの命令のオペランドにより指定されたレジスタに記憶されている値を前記複数のスロット処理ユニットにそれぞれ出力するレジスタファイルとを有し、
前記複数のスロット処理ユニットのうちの少なくとも２個のスロット処理ユニットは、前記レジスタファイルの同じ出力ポートの値を入力することを特徴とする処理装置。
【請求項２】
前記複数のスロット処理ユニットは、前記複数スロットのうちの少なくとも１個のスロットに対して、ロード命令及びストア命令を実行するためのロードストアユニットと、前記ロード命令及び前記ストア命令以外の処理を行う実行ユニットとを有することを特徴とする請求項１記載の処理装置。
【請求項３】
前記少なくとも２個のスロット処理ユニットは、ロード命令及びストア命令以外の処理を行う実行ユニットであることを特徴とする請求項１又は２記載の処理装置。
【請求項４】
前記少なくとも２個のスロット処理ユニットは、それぞれ、一の入力値が前記レジスタファイルの同じ出力ポートから入力され、他の入力値が前記レジスタファイルの異なる出力ポートから入力されることを特徴とする請求項１〜３のいずれか１項に記載の処理装置。
【請求項５】
さらに、前記少なくとも２個のスロット処理ユニットのうちの一のスロット処理ユニットの複数の入力値のうちの１個の入力値を、前記少なくとも２個のスロット処理ユニットのうちの他のスロット処理ユニットの入力値として選択するセレクタを有することを特徴とする請求項１〜４のいずれか１項に記載の処理装置。
【請求項６】
前記セレクタは、前記命令デコーダがデコードする命令に応じて選択することを特徴とする請求項５記載の処理装置。
【請求項７】
さらに、前記少なくとも２個のスロット処理ユニットのうちの一のスロット処理ユニットを含む複数のスロット処理ユニットの入力値のうちの１個の入力値を、前記少なくとも２個のスロット処理ユニットのうちの他のスロット処理ユニットの入力値として選択するセレクタを有することを特徴とする請求項１〜４のいずれか１項に記載の処理装置。
【請求項８】
前記セレクタは、前記命令デコーダがデコードする命令に応じて選択することを特徴とする請求項７記載の処理装置。
【請求項９】
前記少なくとも２個のスロット処理ユニットの入力ポートは、前記レジスタファイルの同じ出力ポートに直接接続されていることを特徴とする請求項１〜４のいずれか１項に記載の処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理装置に関する。
【背景技術】
【０００２】
ＶＬＩＷ（超長命令語：Very Long Instruction Word）プロセッサでは、複数の命令を１つの超長命令語に含めることで、それらの命令を並列に実行する。このスケジューリングをソースコードのコンパイル時に行うことで、複雑な機構を用いることなく、性能を向上させることが可能である。
【０００３】
また、並列処理装置におけるレジスタ読み出し方法が知られている（例えば、特許文献１参照）。まず、レジスタファイルに入力された読み出しレジスタ番号に従って、そのレジスタ番号で指定された格納領域の内容を読み出す。次に、その読み出した内容とフィードバックされた演算結果とのいずれかをオペランドセレクタによって選択してオペランドレジスタに保持させる。次に、その保持内容を演算装置が読み出して演算するとともに、その演算結果をレジスタファイル及びオペランドセレクタにフィードバックする。使用頻度の高いレジスタの内容をあらかじめ指定されたコピーレジスタへコピー入力し、使用頻度の高いレジスタのレジスタ番号が指定された場合には、コピーレジスタから読み出して、レジスタファイルからの読み出しをしないようにする。
【０００４】
また、命令が発行されたサイクルから、命令の結果がターゲットレジスタに書き込まれるまでの間に、ターゲットレジスタへの定義及び参照が可能なプロセッサが知られている（例えば、特許文献２参照）。変数の定義・参照で構成されるライブレンジに対してレジスタを割り付けるレジスタ割り付け処理が行われる。命令が発行されたサイクルから命令の結果がターゲットレジスタに書き込まれるまでの間に、ターゲットレジスタをターゲットを定義する命令以外の命令で使用するようにレジスタを割り付ける。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−１６５６３９号公報
【特許文献２】特開２００１−２９０６５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＶＬＩＷプロセッサが複数の命令を並列に実行するには、レジスタファイルへアクセスする必要があり、複数の命令に対応するレジスタファイルの出力ポート数が増え、その結果として面積が増加するという課題がある。
【０００７】
本発明の目的は、レジスタファイルの出力ポート数を減らし、面積を削減することができる処理装置を提供することである。
【課題を解決するための手段】
【０００８】
処理装置は、複数スロットの命令をデコードする命令デコーダと、前記命令デコーダのデコードに応じて、前記複数スロットの命令の処理をそれぞれ並列に実行する複数のスロット処理ユニットと、前記命令デコーダのデコードに応じて、前記複数スロットの命令のオペランドにより指定されたレジスタに記憶されている値を前記複数のスロット処理ユニットにそれぞれ出力するレジスタファイルとを有し、前記複数のスロット処理ユニットのうちの少なくとも２個のスロット処理ユニットは、前記レジスタファイルの同じ出力ポートの値を入力する。
【発明の効果】
【０００９】
レジスタファイルの同じ出力ポートの値を入力することにより、レジスタファイルの出力ポート数を減らし、面積を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、第１の実施形態による処理装置の構成例を示す図である。
【図２】図２は、複数のスロットの命令を含む超長命令語を示す図である。
【図３】図３は、図１の処理装置の一部の構成例を示す図である。
【図４】図４は、図１の処理装置の処理方法を示すフローチャートである。
【図５】図５は、第２の実施形態による処理装置の構成例を示す図である。
【図６】図６は、第３の実施形態による処理装置の構成例を示す図である。
【発明を実施するための形態】
【００１１】
（第１の実施形態）
図１は、第１の実施形態による処理装置の構成例を示す図である。処理装置は、命令メモリ１０１、命令フェッチユニット１０２、命令デコーダ１０３、パイプラインコントローラ１０４、スカラレジスタファイル１０５、ベクトルレジスタファイル１０６、セレクタ１０７，１０８、第１のスロット処理ユニットＳＬ１ａ、第３のスロット処理ユニットＳＬ３ａ、第１のスロット処理ユニットＳＬ１ｂ、第３のスロット処理ユニットＳＬ３ｂ、第２のスロット処理ユニットＳＬ２、第４のスロット処理ユニットＳＬ４、セレクタ１０９〜１１２、及びデータメモリ１１３を有する。
【００１２】
演算装置は、ＶＬＩＷプロセッサ又はデジタルシグナルプロセッサ（ＤＳＰ）である。命令メモリ１０１は、図２に示すように、複数のスロットの命令を含む超長命令語を記憶する。以下、４ウェイＶＬＩＷプロセッサの例を説明するが、スロット数は４個に限定されない。超長命令語は、４個のスロットの命令を有し、演算装置は、４個のスロットの命令を並列処理することができる。第１のスロットは、ロード（ＬＤ）命令、ストア（ＳＴ）命令、又はロード命令及びストア命令以外の処理（ＡＬＵ）命令を割り当てることができる。第２のスロットは、ロード命令及びストア命令以外の処理（ＡＬＵ）命令を割り当てることができる。第３のスロットは、ロード（ＬＤ）命令、ストア（ＳＴ）命令、又はロード命令及びストア命令以外の処理（ＡＬＵ）命令を割り当てることができる。第４のスロットは、ロード命令及びストア命令以外の処理（ＡＬＵ）命令を割り当てることができる。なお、各スロットには、何もしないＮＯＰ命令を割り当てることも可能である。
【００１３】
第１のスロット処理ユニットＳＬ１ａは、超長命令語の第１のスロットのロード（ＬＤ）命令及びストア（ＳＴ）命令の処理を実行するロードストアユニットである。第１のスロット処理ユニットＳＬ１ｂは、超長命令語の第１のスロットのロード命令及びストア命令以外の処理（ＡＬＵ）命令を実行する実行ユニットであり、例えば算術論理演算ユニット（ＡＬＵ）の処理を行う。第２のスロット処理ユニットＳＬ２は、超長命令語の第２のスロットのロード命令及びストア命令以外の処理（ＡＬＵ）命令を実行する実行ユニットである。第３のスロット処理ユニットＳＬ３ａは、超長命令語の第３のスロットのロード（ＬＤ）命令及びストア（ＳＴ）命令の処理を実行するロードストアユニットである。第３のスロット処理ユニットＳＬ３ｂは、超長命令語の第３のスロットのロード命令及びストア命令以外の処理（ＡＬＵ）命令を実行する実行ユニットである。第４のスロット処理ユニットＳＬ４は、超長命令語の第４のスロットのロード命令及びストア命令以外の処理（ＡＬＵ）命令を実行する実行ユニットである。
【００１４】
命令フェッチユニット１０２は、パイプラインコントローラ１０４の制御により、命令メモリ１０１に記憶されている超長命令語を読み出してフェッチする。次に、命令デコーダ１０３は、パイプラインコントローラ１０４の制御により、命令フェッチユニット１０２にフェッチされている超長命令語を入力してデコードする。
【００１５】
スカラレジスタファイル１０５及びベクトルレジスタファイル１０６は、パイプラインコントローラ１０４の制御により、命令デコーダ１０３のデコードに応じて、超長命令語内の４個のスロットの命令のオペランドにより指定されたレジスタに記憶されている値を６個のスロット処理ユニットＳＬ１ａ〜ＳＬ４にそれぞれ出力する。
【００１６】
第１のスロット処理ユニットＳＬ１ａ及びＳＬ１ｂは、超長命令語内の第１のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル１０５及び／又は１０６から入力する。第２のスロット処理ユニットＳＬ２は、超長命令語内の第２のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル１０５及び／又は１０６から入力する。第３のスロット処理ユニットＳＬ３ａ及びＳＬ３ｂは、超長命令語内の第３のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル１０５及び／又は１０６から入力する。第４のスロット処理ユニットＳＬ４は、超長命令語内の第４のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル１０５及び／又は１０６から入力する。
【００１７】
スカラレジスタファイル１０５は、１６個の３２ビットレジスタ、８個の出力ポート及び４個の入力ポートを有し、各出力ポートから３２ビット値を出力することができる。データメモリ１１３は、３２ビットアドレスを有するので、スカラレジスタファイル１０５の各レジスタは、データメモリ１１３のアドレスを記憶することができる。スカラレジスタファイル１０５は、第１のスロットの２個の出力ポートが第１のスロット処理ユニットＳＬ１ａ及びＳＬ１ｂに接続され、第２のスロットの２個の出力ポートが第２のスロット処理ユニットＳＬ２に接続され、第３のスロットの２個の出力ポートが第３のスロット処理ユニットＳＬ３ａ及びＳＬ３ｂに接続され、第４のスロットの２個の出力ポートが第４のスロット処理ユニットＳＬ４に接続される。
【００１８】
ベクトルレジスタファイル１０６は、１６個の１２８ビットレジスタ、６個の出力ポート及び４個の入力ポートを有し、各出力ポートから１２８ビット値を出力することができる。データメモリ１１３は、各アドレスに１２８ビットデータを記憶するので、ベクトルレジスタファイル１０６の各レジスタは、データメモリ１１３のデータを記憶することができる。ベクトルレジスタファイル１０６は、第１のスロットの１個の出力ポートが第１のスロット処理ユニットＳＬ１ａ及びＳＬ１ｂに接続され、第２のスロットの２個の出力ポートが第２のスロット処理ユニットＳＬ２に接続され、第３のスロットの１個の出力ポートが第３のスロット処理ユニットＳＬ３ａ及びＳＬ３ｂに接続され、第４のスロットの２個の出力ポートが第４のスロット処理ユニットＳＬ４に接続される。
【００１９】
セレクタ１０７は、命令デコーダ１０３のデコードに応じて、ベクトルレジスタファイル１０６の第２のスロットの２個の出力ポートの値のいずれかを選択し、第１のスロット処理ユニットＳＬ１ｂに出力する。すなわち、第１のスロット処理ユニットＳＬ１ｂの２入力値のうちの一方の入力値は、第２のスロット処理ユニットＳＬ２の２入力値のうちのいずれかの１入力値と同じである。第１のスロット処理ユニットＳＬ１ｂ及び第２のスロット処理ユニットＳＬ２は、ベクトルレジスタファイル１０６の同じ１個の出力ポートの値を入力する。
【００２０】
セレクタ１０８は、命令デコーダ１０３のデコードに応じて、ベクトルレジスタファイル１０６の第４のスロットの２個の出力ポートの値のいずれかを選択し、第３のスロット処理ユニットＳＬ３ｂに出力する。すなわち、第３のスロット処理ユニットＳＬ３ｂの２入力値のうちの一方の入力値は、第４のスロット処理ユニットＳＬ４の２入力値のうちのいずれかの１入力値と同じである。第３のスロット処理ユニットＳＬ３ｂ及び第４のスロット処理ユニットＳＬ４は、ベクトルレジスタファイル１０６の同じ１個の出力ポートの値を入力する。
【００２１】
スカラレジスタファイル１０５の出力ポート数は８であり、ベクトルレジスタファイル１０６の出力ポート数は６であり、ベクトルレジスタファイル１０６の出力ポート数の方が少ない。セレクタ１０７及び１０８を設けることにより、ベクトルレジスタファイル１０６の出力ポート数を減らし、ベクトルレジスタファイル１０６の面積を削減することができる。セレクタ１０７及び１０８を用いて、入力データを共有する例を、後に、図３を参照しながら説明する。
【００２２】
６個のスロット処理ユニットＳＬ１ａ〜ＳＬ４は、命令デコーダ１０３のデコードに応じて、超長命令語内の４個のスロットの命令の処理をそれぞれ並列に実行する。第１のスロット処理ユニットＳＬ１ａ及びＳＬ１ｂは、命令デコーダ１０３のデコードに応じて、超長命令語内の第１のスロットの命令の処理を実行する。第２のスロット処理ユニットＳＬ２は、命令デコーダ１０３のデコードに応じて、超長命令語内の第２のスロットの命令の処理を実行する。第３のスロット処理ユニットＳＬ３ａ及びＳＬ３ｂは、命令デコーダ１０３のデコードに応じて、超長命令語内の第３のスロットの命令の処理を実行する。第４のスロット処理ユニットＳＬ４は、命令デコーダ１０３のデコードに応じて、超長命令語内の第４のスロットの命令の処理を実行する。
【００２３】
スロット処理ユニット（ロードストアユニット）ＳＬ１ａ，ＳＬ３ａは、データメモリ１１３に対して、３２ビットアドレス及び１２８ビットデータを出力し、データをストアすることができる。また、ロードストアユニットＳＬ１ａ，ＳＬ３ａは、データメモリ１１３に対して、３２ビットアドレスを出力し、１２８ビットデータをロードすることができる。ロードストアユニットＳＬ１ａは、データメモリ１１３からロードした１２８ビットデータをセレクタ１０９に出力する。ロードストアユニットＳＬ３ａは、データメモリ１１３からロードした１２８ビットデータをセレクタ１１０に出力する。スロット処理ユニット（実行ユニット）ＳＬ１ｂは、１２８ビットデータをセレクタ１０９に出力する。スロット処理ユニット（実行ユニット）ＳＬ３ｂは、１２８ビットデータをセレクタ１１０に出力する。
【００２４】
セレクタ１０９は、命令デコーダ１０３のデコードに応じて、第１のスロット処理ユニットＳＬ１ａの出力データ又は第１のスロット処理ユニットＳＬ１ｂの出力データを選択し、ベクトルレジスタファイル１０６の第１のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、命令デコーダ１０３の第１のスロットの命令のデコードに応じたレジスタに、第１のスロットの入力ポートに入力されたデータを書き込む。
【００２５】
スロット処理ユニット（実行ユニット）ＳＬ２は、１２８ビットデータをベクトルレジスタファイル１０６の第２のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、命令デコーダ１０３の第２のスロットの命令のデコードに応じたレジスタに、第２のスロットの入力ポートに入力されたデータを書き込む。
【００２６】
セレクタ１１０は、命令デコーダ１０３のデコードに応じて、第３のスロット処理ユニットＳＬ３ａの出力データ又は第３のスロット処理ユニットＳＬ３ｂの出力データを選択し、ベクトルレジスタファイル１０６の第３のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、命令デコーダ１０３の第３のスロットの命令のデコードに応じたレジスタに、第３のスロットの入力ポートに入力されたデータを書き込む。
【００２７】
スロット処理ユニット（実行ユニット）ＳＬ４は、１２８ビットデータをベクトルレジスタファイル１０６の第４のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、命令デコーダ１０３の第４のスロットの命令のデコードに応じたレジスタに、第４のスロットの入力ポートに入力されたデータを書き込む。
【００２８】
例えば、第１のスロットの命令が下記のストア命令である場合を説明する。
ｖ．ｓｔｏｒｅ  ｖｘ，ｓｘ，「即値」
【００２９】
ここで、ｖ．ｓｔｏｒｅは、オペコードである。オペランドｖｘは、ベクトルレジスタファイル１０６内のストアデータを記憶するレジスタ番号を示す。オペランドｓｘは、スカラレジスタファイル１０５内のベースアドレスを記憶するレジスタ番号を示す。オペランド「即値」は、オフセットアドレスを示す。
【００３０】
第１のスロット処理ユニットＳＬ１ａは、ベクトルレジスタファイル１０６内のレジスタｖｘのストアデータを入力し、スカラレジスタファイル１０５内のレジスタｓｘのベースアドレスを入力する。次に、第１のスロット処理ユニットＳＬ１ａは、レジスタｓｘのベースアドレスと「即値」のオフセットアドレスとを加算したアドレスと、レジスタｖｘのストアデータとをデータメモリ１１３に出力し、データメモリ１１３の指定アドレスにストアデータをストアする。
【００３１】
次に、第１のスロットの命令が下記のロード命令である場合を説明する。
ｖ．ｌｏａｄ  ｖｘ，ｓｘ，「即値」
【００３２】
ここで、ｖ．ｌｏａｄは、オペコードである。オペランドｖｘは、ベクトルレジスタファイル１０６内のロードデータを書き込むレジスタ番号を示す。オペランドｓｘは、スカラレジスタファイル１０５内のベースアドレスを記憶するレジスタ番号を示す。オペランド「即値」は、オフセットアドレスを示す。
【００３３】
第１のスロット処理ユニットＳＬ１ａは、スカラレジスタファイル１０５内のレジスタｓｘのベースアドレスを入力する。次に、第１のスロット処理ユニットＳＬ１ａは、レジスタｓｘのベースアドレスと「即値」のオフセットアドレスとを加算したアドレスをデータメモリ１１３に出力し、データメモリ１１３の指定アドレスからデータをロードする。次に、第１のスロット処理ユニットＳＬ１ａは、ロードしたデータをセレクタ１０９に出力する。セレクタ１０９は、第１のスロット処理ユニットＳＬ１ａが出力するデータを選択してベクトルレジスタファイル１０６の第１のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、第１のスロットの入力ポートに入力したデータをレジスタｖｘに書き込む。
【００３４】
次に、第２のスロットの命令が下記の加算命令である場合を説明する。
ｖ．ａｄｄ  ｖ１０，ｖ１４，ｖ１５
【００３５】
ここで、ｖ．ａｄｄは、オペコードである。オペランドｖ１０は、ベクトルレジスタファイル１０６内の加算結果を書き込むレジスタ番号を示す。オペランドｖ１４及びｖ１５は、ベクトルレジスタファイル１０６内の加算対象の値を記憶するレジスタ番号を示す。
【００３６】
第２のスロット処理ユニットＳＬ２は、ベクトルレジスタファイル１０６内のレジスタｖ１４及びｖ１５の値を入力し、レジスタｖ１４及びｖ１５の値を加算し、その加算結果をベクトルレジスタファイル１０６の第２のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、第２のスロットの入力ポートに入力したデータをレジスタｖ１０に書き込む。
【００３７】
図３は、図１の処理装置の一部の構成例を示す図である。処理装置は、例えば、無線通信の信号処理などのため、ベクトルレジスタファイル１０６に記憶されているデータを入れ換える処理を行う。第１のスロット処理ユニットＳＬ１ｂは、入力データを保持する入力レジスタ３０１，３０２と、データを入れ換えるためのセレクタ３０３と、出力データを保持する出力レジスタ３０４とを有する。第２のスロット処理ユニットＳＬ２は、入力データを保持する入力レジスタ３１１，３１２と、データを入れ換えるためのセレクタ３１３と、出力データを保持する出力レジスタ３１４とを有する。
【００３８】
例えば、ベクトルレジスタファイル１０６内の各レジスタは、１６ビット×８個＝１２８ビットのデータを記憶する。例えば、命令メモリ１０１は、次式（１）の第２のスロットの入換命令と次式（２）の第１のスロットの入換命令とを含む超長命令語を記憶する。
ｖ.ｓｅｌｅｃｔ.ｉ  ｖ０，ｖ１，ｖ２，「即値」  ・・・（１）
ｖ.ｓｅｌｅｃｔ＿ｓｈａｒｅ.ｉ  ｖ３，ｖ４，ＳＥＬｘ，「即値」  ・・・（２）
【００３９】
ここで、ｖ.ｓｅｌｅｃｔ.ｉは、第２のスロットの入換命令のオペコードである。オペランドｖ０は、ベクトルレジスタファイル１０６内の入れ換え後のデータＤ６を記憶するレジスタ番号を示す。オペランドｖ１及びｖ２は、ベクトルレジスタファイル１０６内の入れ換え前のデータＤ３及びＤ４を記憶するレジスタ番号を示す。オペランド「即値」は、データ入れ換えのパターンを示す。
【００４０】
また、ｖ.ｓｅｌｅｃｔ＿ｓｈａｒｅ.ｉは、第１のスロットの入換命令のオペコードである。オペランドｖ３は、ベクトルレジスタファイル１０６内の入れ換え後のデータＤ５を記憶するレジスタ番号を示す。オペランドｖ４は、ベクトルレジスタファイル１０６内の入れ換え前のデータＤ１を記憶するレジスタ番号を示す。オペランドＳＥＬｘは、セレクタ１０７が第２のスロット処理ユニットＳＬ２の２入力データＤ３及びＤ４のうちのいずれを選択するかを示す識別子である。オペランド「即値」は、データ入れ換えのパターンを示す。
【００４１】
命令フェッチユニット１０２は、命令メモリ１０１内から上記の超長命令語をフェッチする。命令デコーダ１０３は、命令フェッチユニット１０２によりフェッチされた超長命令語をデコードする。ベクトルレジスタファイル１０６は、第２のスロットの上式（１）の入換命令で指定されたレジスタｖ１のデータＤ３及びレジスタｖ２のデータＤ４を第２のスロット処理ユニットＳＬ２に出力する。また、ベクトルレジスタファイル１０６は、第１のスロットの上式（２）の入換命令で指定されたレジスタｖ４のデータＤ１を第１のスロット処理ユニットＳＬ１ｂに出力する。セレクタ１０７は、第１のスロットの上式（２）の入換命令で指定された識別子ＳＥＬｘに応じて、レジスタｖ１のデータＤ３又はレジスタｖ２のデータＤ４を選択し、データＤ２を第１のスロット処理ユニットＳＬ１ｂに出力する。例えば、セレクタ１０７は、識別子ＳＥＬｘが「０」の場合にはレジスタｖ１のデータＤ３を選択し、識別子ＳＥＬｘが「１」の場合にはレジスタｖ２のデータＤ４を選択する。図３の場合、セレクタ１０７は、レジスタｖ１のデータＤ３を選択し、データＤ２として出力する。
【００４２】
入力レジスタ３１１は、「０」〜「７」で示すレジスタｖ１の１６ビット×８個＝１２８ビットのベクトルデータＤ３を記憶する。入力レジスタ３１２は、「８」〜「１５」で示すレジスタｖ２の１６ビット×８個＝１２８ビットのベクトルデータＤ４を記憶する。
【００４３】
入力レジスタ３０１は、「１６」〜「２３」で示すレジスタｖ４の１６ビット×８個＝１２８ビットのベクトルデータＤ１を記憶する。入力レジスタ３０２は、「０」〜「７」で示すレジスタｖ２の１６ビット×８個＝１２８ビットのデータＤ２を記憶する。入力レジスタ３０２及び３１１の記憶データは、相互に同じになる。
【００４４】
セレクタ３０３は、第１のスロットの上式（２）の入換命令で指定された「即値」に応じたパターンで、入力レジスタ３０１のデータＤ１及び入力レジスタ３０２のデータＤ２の入れ換えを行い、入れ換え後のデータＤ５を出力レジスタ３０４に書き込む。例えば、セレクタ３０３は、「０」〜「７」で示される１６×８ビットのデータＤ２のうちの上位半分の「０」〜「３」で示される１６×４ビットのデータを選択し、「１６」〜「２３」で示される１６×８ビットのデータＤ１のうちの上位半分の「１６」〜「１９」で示される１６×４ビットのデータを選択し、それらを結合した１６×８ビットのデータＤ５を出力する。
【００４５】
セレクタ３１３は、第２のスロットの上式（１）の入換命令で指定された「即値」に応じたパターンで、入力レジスタ３１１のデータＤ３及び入力レジスタ３１２のデータＤ４の入れ換えを行い、入れ換え後のデータＤ６を出力レジスタ３１４に書き込む。例えば、セレクタ３１３は、「０」〜「７」で示される１６×８ビットのデータＤ３のうちの上位半分の「０」〜「３」で示される１６×４ビットのデータを選択し、「８」〜「１５」で示される１６×８ビットのデータＤ４のうちの上位半分の「８」〜「１１」で示される１６×４ビットのデータを選択し、それらを結合した１６×８ビットのデータＤ６を出力する。
【００４６】
図１のセレクタ１０９は、第１のスロットの命令が上式（２）の入換命令であるので、第１のスロット処理ユニットＳＬ１ｂの出力データＤ５を選択し、ベクトルレジスタファイル１０６に出力する。ベクトルレジスタファイル１０６は、第１のスロットの上式（２）の入換命令で指定されたレジスタｖ３にデータＤ５を書き込み、第２のスロットの上式（１）の入換命令で指定されたレジスタｖ０にデータＤ６を書き込む。
【００４７】
なお、セレクタ３０３及び３１３は、上位半分のデータを選択する例を示したが、下位半分のデータを選択したり、奇数番目のデータを選択したり、偶数番目のデータを選択するなど様々な選択が可能である。これらの選択は、上式（１）及び（２）の入換命令の「即値」により指定可能である。
【００４８】
また、上式（１）及び（２）は、「即値」により、データ入れ換えパターンを指定する例を示したが、次式（３）及び（４）のように、スカラレジスタファイル１０５内のレジスタｓ０及びｓ１により、データ入れ換えパターンを指定するようにしてもよい。
ｖ.ｓｅｌｅｃｔ  ｖ０，ｖ１，ｖ２，ｓ０  ・・・（３）
ｖ.ｓｅｌｅｃｔ＿ｓｈａｒｅ  ｖ３，ｖ４，ＳＥＬｘ，ｓ１  ・・・（４）
【００４９】
上記では、第１のスロット処理ユニットＳＬ１ｂ及び第２のスロット処理ユニットＳＬ２の場合を例に説明したが、第３のスロット処理ユニットＳＬ３ｂ及び第４のスロット処理ユニットＳＬ４の場合も同様である。
【００５０】
上記のように、無線通信の信号処理などでは、第１のスロット処理ユニットＳＬ１ｂは、第２のスロット処理ユニットＳＬ２の入力データＤ３と同じデータＤ２を入力する場合がある。本実施形態では、第１のスロット処理ユニットＳＬ１ｂ及び第２のスロット処理ユニットＳＬ２は、ベクトルレジスタファイル１０６の同じ出力ポートのデータを入力し、第３のスロット処理ユニットＳＬ３ｂ及び第４のスロット処理ユニットＳＬ４は、ベクトルレジスタファイル１０６の同じ出力ポートのデータを入力する。これにより、ベクトルレジスタファイル１０６の出力ポート数を減らし、面積を削減することができる。
【００５１】
図４は、図１の処理装置の処理方法を示すフローチャートである。ステップＳ４０１では、処理装置は、命令デコーダ１０３のデコード結果に応じて、第１のスロット及び第３のスロットの命令が２リードタイプか否かをチェックする。２リードタイプの命令は、例えば、実行ユニットＳＬ１ｂ，ＳＬ２，ＳＬ３ｂ，ＳＬ４が行う加算命令及び入れ換え命令等であり、ベクトルレジスタファイル１０６に対して、２入力の命令である。１リードタイプの命令は、例えば、ロードストアユニットＳＬ１ａ，ＳＬ３ａが行うロード命令及びストア命令であり、ベクトルレジスタファイル１０６に対して、１入力の命令である。第１のスロット及び第３のスロットの命令の両方が２リードタイプである場合には、ステップＳ４０２に進み、それ以外の場合には、ステップＳ４０４に進む。
【００５２】
ステップＳ４０２では、処理装置は、命令デコーダ１０３のデコード結果に応じて、第１のスロットの命令の識別子ＳＥＬｘが０であり、かつ、第３のスロットの命令の識別子ＳＥＬｘが０であるという条件を満たすか否かをチェックする。上記の条件を満たす場合には、ステップＳ４０３に進み、上記の条件を満たさない場合には、ステップＳ４１３に進む。
【００５３】
ステップＳ４０３では、セレクタ１０７は、第２のスロット処理ユニットＳＬ２の第１の入力データＤ３を選択し、第１のスロット処理ユニットＳＬ１ｂに出力する。セレクタ１０８は、第４のスロット処理ユニットＳＬ４の第１の入力データを選択し、第３のスロット処理ユニットＳＬ３ｂに出力する。第１のスロット処理ユニットＳＬ１ｂは、第２のスロット処理ユニットＳＬ２の第１の入力データＤ３と同じデータを入力し、第１のスロットの命令を実行する。第３のスロット処理ユニットＳＬ３ｂは、第４のスロット処理ユニットＳＬ４の第１の入力データと同じデータを入力し、第３のスロットの命令を実行する。
【００５４】
ステップＳ４１３では、処理装置は、命令デコーダ１０３のデコード結果に応じて、第１のスロットの命令の識別子ＳＥＬｘが１であり、かつ、第３のスロットの命令の識別子ＳＥＬｘが０であるという条件を満たすか否かをチェックする。上記の条件を満たす場合には、ステップＳ４１４に進み、上記の条件を満たさない場合には、ステップＳ４１５に進む。
【００５５】
ステップＳ４１４では、セレクタ１０７は、第２のスロット処理ユニットＳＬ２の第２の入力データＤ４を選択し、第１のスロット処理ユニットＳＬ１ｂに出力する。セレクタ１０８は、第４のスロット処理ユニットＳＬ４の第１の入力データを選択し、第３のスロット処理ユニットＳＬ３ｂに出力する。第１のスロット処理ユニットＳＬ１ｂは、第２のスロット処理ユニットＳＬ２の第２の入力データＤ４と同じデータを入力し、第１のスロットの命令を実行する。第３のスロット処理ユニットＳＬ３ｂは、第４のスロット処理ユニットＳＬ４の第１の入力データと同じデータを入力し、第３のスロットの命令を実行する。
【００５６】
ステップＳ４１５では、処理装置は、命令デコーダ１０３のデコード結果に応じて、第１のスロットの命令の識別子ＳＥＬｘが０であり、かつ、第３のスロットの命令の識別子ＳＥＬｘが１であるという条件を満たすか否かをチェックする。上記の条件を満たす場合には、ステップＳ４１６に進み、上記の条件を満たさない場合には、ステップＳ４１７に進む。
【００５７】
ステップＳ４１６では、セレクタ１０７は、第２のスロット処理ユニットＳＬ２の第１の入力データＤ３を選択し、第１のスロット処理ユニットＳＬ１ｂに出力する。セレクタ１０８は、第４のスロット処理ユニットＳＬ４の第２の入力データを選択し、第３のスロット処理ユニットＳＬ３ｂに出力する。第１のスロット処理ユニットＳＬ１ｂは、第２のスロット処理ユニットＳＬ２の第１の入力データＤ３と同じデータを入力し、第１のスロットの命令を実行する。第３のスロット処理ユニットＳＬ３ｂは、第４のスロット処理ユニットＳＬ４の第２の入力データと同じデータを入力し、第３のスロットの命令を実行する。
【００５８】
ステップＳ４１７では、セレクタ１０７は、第２のスロット処理ユニットＳＬ２の第２の入力データＤ４を選択し、第１のスロット処理ユニットＳＬ１ｂに出力する。セレクタ１０８は、第４のスロット処理ユニットＳＬ４の第２の入力データを選択し、第３のスロット処理ユニットＳＬ３ｂに出力する。第１のスロット処理ユニットＳＬ１ｂは、第２のスロット処理ユニットＳＬ２の第２の入力データＤ４と同じデータを入力し、第１のスロットの命令を実行する。第３のスロット処理ユニットＳＬ３ｂは、第４のスロット処理ユニットＳＬ４の第２の入力データと同じデータを入力し、第３のスロットの命令を実行する。
【００５９】
ステップＳ４０４では、処理装置は、命令デコーダ１０３のデコード結果に応じて、第１及び第３のスロットのうちの第１のスロットの命令のみが２リードタイプか否かをチェックする。第１のスロットの命令のみが２リードタイプである場合には、ステップＳ４０５に進み、それ以外の場合には、ステップＳ４０８に進む。
【００６０】
ステップＳ４０５では、処理装置は、命令デコーダ１０３のデコード結果に応じて、第１のスロットの命令の識別子ＳＥＬｘが０であるか否かをチェックする。識別子ＳＥＬｘが０である場合には、ステップＳ４０７に進み、それ以外の場合には、ステップＳ４０６に進む。
【００６１】
ステップＳ４０７では、セレクタ１０７は、第２のスロット処理ユニットＳＬ２の第１の入力データＤ３を選択し、第１のスロット処理ユニットＳＬ１ｂに出力する。第１のスロット処理ユニットＳＬ１ｂは、第２のスロット処理ユニットＳＬ２の第１の入力データＤ３と同じデータを入力し、第１のスロットの命令を実行する。第３のスロット処理ユニットＳＬ３ａは、ベクトルレジスタファイル１０６から１個のデータを入力し、第３のスロットの命令を実行する。
【００６２】
ステップＳ４０６では、セレクタ１０７は、第２のスロット処理ユニットＳＬ２の第２の入力データＤ４を選択し、第１のスロット処理ユニットＳＬ１ｂに出力する。第１のスロット処理ユニットＳＬ１ｂは、第２のスロット処理ユニットＳＬ２の第２の入力データＤ４と同じデータを入力し、第１のスロットの命令を実行する。第３のスロット処理ユニットＳＬ３ａは、ベクトルレジスタファイル１０６から１個のデータを入力し、第３のスロットの命令を実行する。
【００６３】
ステップＳ４０８では、処理装置は、命令デコーダ１０３のデコード結果に応じて、第１及び第３のスロットのうちの第３のスロットの命令のみが２リードタイプか否かをチェックする。第３のスロットの命令のみが２リードタイプである場合には、ステップＳ４１０に進み、それ以外の場合には、ステップＳ４０９に進む。
【００６４】
ステップＳ４０９では、第１のスロット処理ユニットＳＬ１ａは、ベクトルレジスタファイル１０６から１個のデータを入力し、第１のスロットの命令を実行する。第３のスロット処理ユニットＳＬ３ａは、ベクトルレジスタファイル１０６から１個のデータを入力し、第３のスロットの命令を実行する。
【００６５】
ステップＳ４１０では、処理装置は、命令デコーダ１０３のデコード結果に応じて、第３のスロットの命令の識別子ＳＥＬｘが０であるか否かをチェックする。識別子ＳＥＬｘが０である場合には、ステップＳ４１２に進み、それ以外の場合には、ステップＳ４１１に進む。
【００６６】
ステップＳ４１２では、セレクタ１０８は、第４のスロット処理ユニットＳＬ４の第１の入力データを選択し、第３のスロット処理ユニットＳＬ３ｂに出力する。第３のスロット処理ユニットＳＬ３ｂは、第４のスロット処理ユニットＳＬ４の第１の入力データと同じデータを入力し、第３のスロットの命令を実行する。第１のスロット処理ユニットＳＬ１ａは、ベクトルレジスタファイル１０６から１個のデータを入力し、第１のスロットの命令を実行する。
【００６７】
ステップＳ４１１では、セレクタ１０８は、第４のスロット処理ユニットＳＬ４の第２の入力データを選択し、第３のスロット処理ユニットＳＬ３ｂに出力する。第３のスロット処理ユニットＳＬ３ｂは、第４のスロット処理ユニットＳＬ４の第２の入力データと同じデータを入力し、第３のスロットの命令を実行する。第１のスロット処理ユニットＳＬ１ａは、ベクトルレジスタファイル１０６から１個のデータを入力し、第１のスロットの命令を実行する。
【００６８】
以上のように、セレクタ１０７は、一のスロット処理ユニットＳＬ２の複数の入力値のうちの１個の入力値を、他のスロット処理ユニットＳＬ１ｂの入力値として選択する。セレクタ１０８は、一のスロット処理ユニットＳＬ４の複数の入力値のうちの１個の入力値を、他のスロット処理ユニットＳＬ３ｂの入力値として選択する。セレクタ１０７及び１０８は、命令デコーダ１０３がデコードする命令の識別子ＳＥＬｘに応じて選択する。
【００６９】
２個のスロット処理ユニットＳＬ１ｂ及びＳＬ２は、それぞれ、一の入力値がベクトルレジスタファイル１０６の同じ出力ポートから入力され、他の入力値がベクトルレジスタファイル１０６の異なる出力ポートから入力される。同様に、２個のスロット処理ユニットＳＬ３ｂ及びＳＬ４は、それぞれ、一の入力値がベクトルレジスタファイル１０６の同じ出力ポートから入力され、他の入力値がベクトルレジスタファイル１０６の異なる出力ポートから入力される。
【００７０】
本実施形態によれば、ベクトルレジスタファイル１０６の同じ出力ポートの値を入力することにより、ベクトルレジスタファイル１０６の出力ポート数を減らし、面積を削減することができる。無線通信などの信号処理では、複数のスロット処理ユニットが入力を共有する場合が少なくないので、本実施形態の効果は大きい。
【００７１】
（第２の実施形態）
図５は、第２の実施形態による処理装置の構成例を示す図である。本実施形態（図５）は、第１の実施形態（図１）に対して、セレクタ１０７及び１０８を削除したものである。以下、本実施形態が第１の実施形態と異なる点を説明する。
【００７２】
第１のスロット処理ユニットＳＬ１ｂは、２個の入力ポートのうちの一方の入力ポートがベクトルレジスタファイル１０６の第１のスロットの出力ポートに接続され、２個の入力ポートのうちの他方の入力ポートがベクトルレジスタファイル１０６の第２のスロットの２個の出力ポートのうちのいずれか１個の出力ポートに接続される。第１のスロット処理ユニットＳＬ１ｂ及び第２のスロット処理ユニットＳＬ２の一方の入力ポートは、ベクトルレジスタファイル１０６の同じ出力ポートに直接接続されている。
【００７３】
また、第３のスロット処理ユニットＳＬ３ｂは、２個の入力ポートのうちの一方の入力ポートがベクトルレジスタファイル１０６の第３のスロットの出力ポートに接続され、２個の入力ポートのうちの他方の入力ポートがベクトルレジスタファイル１０６の第４のスロットの２個の出力ポートのうちのいずれか１個の出力ポートに接続される。第３のスロット処理ユニットＳＬ３ｂ及び第４のスロット処理ユニットＳＬ４の一方の入力ポートは、ベクトルレジスタファイル１０６の同じ出力ポートに直接接続されている。
【００７４】
第１のスロット処理ユニットＳＬ１ｂ及び第３のスロット処理ユニットＳＬ３ｂの入力を固定できる場合には、本実施形態のように、セレクタ１０７及び１０８を削除することができる。これにより、処理装置の面積をさらに削減することができる。
【００７５】
（第３の実施形態）
図６は、第３の実施形態による処理装置の構成例を示す図である。本実施形態（図６）は、第１の実施形態（図１）に対して、セレクタ１０７及び１０８の入力が異なる。以下、本実施形態が第１の実施形態と異なる点を説明する。
【００７６】
ベクトルレジスタファイル１０６は、第１のスロットの１個の出力ポートと、第３のスロットの１個の出力ポートと、第２のスロットの２個の出力ポート（第１及び第２の出力ポート）と、第４のスロットの２個の出力ポート（第１及び第２の出力ポート）とを有する。また、ベクトルレジスタファイル１０６は、第２のスロットの第１の出力ポートが第２のスロット処理ユニットＳＬ２の第１の入力ポートに接続され、第２のスロットの第２の出力ポートが第２のスロット処理ユニットＳＬ２の第２の入力ポートに接続される。また、ベクトルレジスタファイル１０６は、第４のスロットの第１の出力ポートが第４のスロット処理ユニットＳＬ４の第１の入力ポートに接続され、第４のスロットの第２の出力ポートが第４のスロット処理ユニットＳＬ４の第２の入力ポートに接続される。
【００７７】
セレクタ１０７は、ベクトルレジスタファイル１０６の第２のスロットの第１の出力ポートのデータと、ベクトルレジスタファイル１０６の第２のスロットの第２の出力ポートのデータと、ベクトルレジスタファイル１０６の第４のスロットの第１の出力ポートのデータと、ベクトルレジスタファイル１０６の第４のスロットの第２の出力ポートのデータとを入力し、その４入力データのうちのいずれか１個のデータを選択して第１のスロット処理ユニットＳＬ１ｂに出力する。第１のスロットの上式（２）の命令の識別子ＳＥＬｘは、「０」から「３」のうちのいずれかの値をとる。セレクタ１０７は、第１の実施形態と同様に、第１のスロットの命令の識別子ＳＥＬｘの値に応じて選択する。
【００７８】
同様に、セレクタ１０８は、ベクトルレジスタファイル１０６の第２のスロットの第１の出力ポートのデータと、ベクトルレジスタファイル１０６の第２のスロットの第２の出力ポートのデータと、ベクトルレジスタファイル１０６の第４のスロットの第１の出力ポートのデータと、ベクトルレジスタファイル１０６の第４のスロットの第２の出力ポートのデータとを入力し、その４入力データのうちのいずれか１個のデータを選択して第３のスロット処理ユニットＳＬ３ｂに出力する。第３のスロットの上式（２）の命令の識別子ＳＥＬｘは、「０」から「３」のうちのいずれかの値をとる。セレクタ１０８は、第１の実施形態と同様に、第３のスロットの命令の識別子ＳＥＬｘの値に応じて選択する。
【００７９】
以上のように、セレクタ１０７は、複数のスロット処理ユニットＳＬ２及びＳＬ４の入力値のうちの１個の入力値を、第１のスロット処理ユニットＳＬ１ｂの入力値として選択する。セレクタ１０８は、複数のスロット処理ユニットＳＬ２及びＳＬ４の入力値のうちの１個の入力値を、第３のスロット処理ユニットＳＬ３ｂの入力値として選択する。セレクタ１０７及び１０８は、命令デコーダ１０３がデコードする命令の識別子ＳＥＬｘに応じて選択する。
【００８０】
第１〜第３の実施形態では、２個のスロット処理ユニットがベクトルレジスタファイル１０６の同じ出力ポートの値を入力する場合を例に説明したが、３個以上のスロット処理ユニットがベクトルレジスタファイル１０６の同じ出力ポートの値を入力するようにしてもよい。少なくとも２個のスロット処理ユニットがベクトルレジスタファイル１０６の同じ出力ポートの値を入力すればよい。
【００８１】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００８２】
１０１  命令メモリ
１０２  命令フェッチユニット
１０３  命令デコーダ
１０４  パイプラインコントローラ
１０５  スカラレジスタファイル
１０６  ベクトルレジスタファイル
１０７〜１１２  セレクタ
１１３  データメモリ
【図１】
2015130057.tif 000003
【図２】
2015130057.tif 000004
【図３】
2015130057.tif 000005
【図４】
2015130057.tif 000006
【図５】
2015130057.tif 000007
【図６】
2015130057.tif 000008