(57)【要約】      （修正有）【課題】命令メモリに記憶させる命令のサイズを低減することができる処理装置を提供する。【解決手段】複数の命令の処理を複数のスロットに並列に実行させる処理装置であって、複数のスロットに対応する複数のセレクタＡ１〜Ａ４と、グループ番号Ｐ１〜Ｐ８、スロット番号Ｓ１〜Ｓ８及び命令Ｉ１〜Ｉ８の組みを複数記憶し、複数の組みを複数のセレクタに出力するバッファ３０３と、サイクル毎に変化するグループ番号を記憶するグループ番号レジスタ３０２とを有し、複数のセレクタの各々は、入力される組みの中のグループ番号がグループ番号レジスタに記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中のスロット番号が自己のスロットに対応するスロット番号と同じである場合には、入力される組みの中の命令を選択して命令デコーダに出力し、それ以外の場合にはＮＯＰ命令を選択して命令デコーダに出力する。【選択図】図３
2015141677.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令の処理を複数のスロットに並列に実行させる処理装置であって、
前記複数のスロットに対応する複数のセレクタと、
グループ番号、スロット番号及び命令の組みを複数記憶し、前記複数の組みを前記複数のセレクタに出力するバッファと、
サイクル毎に変化するグループ番号を記憶するグループ番号メモリとを有し、
前記複数のセレクタの各々は、前記入力される組みの中のグループ番号が前記グループ番号メモリに記憶されているグループ番号と同じであり、かつ、前記入力される組みの中のスロット番号が自己のスロットに対応するスロット番号と同じである場合には、前記入力される組みの中の命令を選択して命令デコーダに出力し、それ以外の場合にはＮＯＰ命令を選択して命令デコーダに出力することを特徴とする処理装置。
【請求項２】
さらに、前記グループ番号、スロット番号及び命令の組みを記憶する命令メモリを有し、
前記バッファは、前記メモリから前記組みを入力して記憶することを特徴とする請求項１記載の処理装置。
【請求項３】
さらに、前記複数のセレクタにより出力される複数のスロットの命令をデコードする命令デコーダを有することを特徴とする請求項１又は２記載の処理装置。
【請求項４】
さらに、前記命令デコーダによりデコードに応じて、前記複数のスロットの命令の処理をそれぞれ並列に実行する複数のスロット処理ユニットを有することを特徴とする請求項３記載の処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理装置に関する。
【背景技術】
【０００２】
ＶＬＩＷ（超長命令語：Very Long Instruction Word）プロセッサでは、複数の命令を１つの超長命令語に含めることで、それらの命令を複数のスロットで並列に実行する。このスケジューリングをソースコードのコンパイル時に行うことで、複雑な機構を用いることなく、性能を向上させることが可能である。
【０００３】
ｍ行ｎ列の命令バッファと、複数の命令を並列的に実行する命令実行部とを有する情報処理装置が知られている（例えば、特許文献１参照）。制御回路は、ｍ行ｎ列の命令バッファから所定数の命令を選択して命令実行部に分配する。
【０００４】
また、高級言語プログラムから複数の操作記述が配置された複数のスロットを持つ長語命令形式の機械命令プログラムを生成するコンパイラが知られている（例えば、特許文献２参照）。コンパイラは、高級言語プログラムからプロセッサが同時に並列実行できる複数の操作を長語命令形式の命令を生成したのち、命令に含まれるｎｏｐをｎｏｐよりも後に実行される有効な操作に置き換え、有効な操作を削除するとともに、置き換えたことを示す情報を付加する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−３１８６８７号公報
【特許文献２】特開２０００−８１９８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＶＬＩＷプロセッサにおいて、すべてのスロットを有意な命令で埋められない場合には、ＮＯＰ（No Operation）命令を挿入しなければならず、命令コードが増大し、大きなサイズの命令メモリが必要になる。その結果として、命令メモリサイズの肥大化を招き、さらにその命令メモリへのアクセスによる消費電力が増加するという課題がある。
【０００７】
本発明の目的は、命令メモリに記憶させる命令のサイズを低減することができる処理装置を提供することである。
【課題を解決するための手段】
【０００８】
処理装置は、複数の命令の処理を複数のスロットに並列に実行させる処理装置であって、前記複数のスロットに対応する複数のセレクタと、グループ番号、スロット番号及び命令の組みを複数記憶し、前記複数の組みを前記複数のセレクタに出力するバッファと、サイクル毎に変化するグループ番号を記憶するグループ番号メモリとを有し、前記複数のセレクタの各々は、前記入力される組みの中のグループ番号が前記グループ番号メモリに記憶されているグループ番号と同じであり、かつ、前記入力される組みの中のスロット番号が自己のスロットに対応するスロット番号と同じである場合には、前記入力される組みの中の命令を選択して命令デコーダに出力し、それ以外の場合にはＮＯＰ命令を選択して命令デコーダに出力する。
【発明の効果】
【０００９】
ＮＯＰ命令をバッファ及び命令メモリに記憶させる必要がないので、命令メモリのサイズを低減し、消費電力を低減することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本実施形態による処理装置の構成例を示す図である。
【図２】図２は、複数のスロットの命令を含む超長命令語を示す図である。
【図３】図３は、図１の命令フェッチユニットの構成例を示す図である。
【図４】図４は、命令フェッチユニットの動作例を示す図である。
【図５】図５は、本実施形態による処理装置の処理方法を示すフローチャートである。
【発明を実施するための形態】
【００１１】
図１は、本実施形態による処理装置の構成例を示す図である。処理装置は、命令メモリ１０１、命令フェッチユニット１０２、命令デコーダ１０３、パイプラインコントローラ１０４、スカラレジスタファイル１０５、ベクトルレジスタファイル１０６、第１のスロット処理ユニットＳＬ１、第２のスロット処理ユニットＳＬ２、第３のスロット処理ユニットＳＬ３、第４のスロット処理ユニットＳＬ４、及びデータメモリ１０７を有する。
【００１２】
演算装置は、ＶＬＩＷプロセッサ又はデジタルシグナルプロセッサ（ＤＳＰ）である。命令メモリ１０１は、図２に示すように、複数のスロットの命令を含む超長命令語を記憶する。以下、４ウェイＶＬＩＷプロセッサの例を説明するが、スロット数は４個に限定されない。超長命令語は、４個のスロットの命令を有し、演算装置は、４個のスロットの命令を並列処理することができる。第１のスロットは、ロード（ＬＤ）命令又はストア（ＳＴ）命令を割り当てることができる。第２のスロットは、ロード命令及びストア命令以外の処理（ＡＬＵ）命令を割り当てることができる。第３のスロットは、ロード（ＬＤ）命令又はストア（ＳＴ）命令を割り当てることができる。第４のスロットは、ロード命令及びストア命令以外の処理（ＡＬＵ）命令を割り当てることができる。なお、各スロットには、何もしないＮＯＰ（No Operation）命令を割り当てることも可能である。ただし、本実施形態では、命令メモリ１０１にＮＯＰ命令を記憶させないことにより、命令メモリ１０１のサイズ及び消費電力を低減する。
【００１３】
第１のスロット処理ユニットＳＬ１は、超長命令語の第１のスロットのロード（ＬＤ）命令及びストア（ＳＴ）命令の処理を実行するロードストアユニットである。第２のスロット処理ユニットＳＬ２は、超長命令語の第２のスロットのロード命令及びストア命令以外の処理（ＡＬＵ）命令を実行する実行ユニットであり、例えば算術論理演算ユニット（ＡＬＵ）の処理を行う。第３のスロット処理ユニットＳＬ３は、超長命令語の第３のスロットのロード（ＬＤ）命令及びストア（ＳＴ）命令の処理を実行するロードストアユニットである。第４のスロット処理ユニットＳＬ４は、超長命令語の第４のスロットのロード命令及びストア命令以外の処理（ＡＬＵ）命令を実行する実行ユニットである。
【００１４】
命令フェッチユニット１０２は、パイプラインコントローラ１０４の制御により、命令メモリ１０１に記憶されている超長命令語を読み出してフェッチする。次に、命令デコーダ１０３は、パイプラインコントローラ１０４の制御により、命令フェッチユニット１０２にフェッチされている超長命令語を入力してデコードする。
【００１５】
スカラレジスタファイル１０５及びベクトルレジスタファイル１０６は、パイプラインコントローラ１０４の制御により、命令デコーダ１０３のデコードに応じて、４個のスロットの命令のオペランドにより指定されたレジスタに記憶されている値を４個のスロット処理ユニットＳＬ１〜ＳＬ４にそれぞれ出力する。
【００１６】
第１のスロット処理ユニットＳＬ１は、第１のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル１０５及び／又は１０６から入力する。第２のスロット処理ユニットＳＬ２は、第２のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル１０５及び／又は１０６から入力する。第３のスロット処理ユニットＳＬ３は、第３のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル１０５及び／又は１０６から入力する。第４のスロット処理ユニットＳＬ４は、第４のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル１０５及び／又は１０６から入力する。
【００１７】
スカラレジスタファイル１０５は、１６個の３２ビットレジスタ、８個の出力ポート及び４個の入力ポートを有し、各出力ポートから３２ビット値を出力することができる。データメモリ１０７は、３２ビットアドレスを有するので、スカラレジスタファイル１０５の各レジスタは、データメモリ１０７のアドレスを記憶することができる。スカラレジスタファイル１０５は、第１のスロットの２個の出力ポートが第１のスロット処理ユニットＳＬ１に接続され、第２のスロットの２個の出力ポートが第２のスロット処理ユニットＳＬ２に接続され、第３のスロットの２個の出力ポートが第３のスロット処理ユニットＳＬ３に接続され、第４のスロットの２個の出力ポートが第４のスロット処理ユニットＳＬ４に接続される。
【００１８】
ベクトルレジスタファイル１０６は、１６個の１２８ビットレジスタ、６個の出力ポート及び４個の入力ポートを有し、各出力ポートから１２８ビット値を出力することができる。データメモリ１０７は、各アドレスに１２８ビットデータを記憶するので、ベクトルレジスタファイル１０６の各レジスタは、データメモリ１０７のデータを記憶することができる。ベクトルレジスタファイル１０６は、第１のスロットの１個の出力ポートが第１のスロット処理ユニットＳＬ１に接続され、第２のスロットの２個の出力ポートが第２のスロット処理ユニットＳＬ２に接続され、第３のスロットの１個の出力ポートが第３のスロット処理ユニットＳＬ３に接続され、第４のスロットの２個の出力ポートが第４のスロット処理ユニットＳＬ４に接続される。
【００１９】
４個のスロット処理ユニットＳＬ１〜ＳＬ４は、命令デコーダ１０３のデコードに応じて、４個のスロットの命令の処理をそれぞれ並列に実行する。第１のスロット処理ユニットＳＬ１は、命令デコーダ１０３のデコードに応じて、第１のスロットの命令の処理を実行する。第２のスロット処理ユニットＳＬ２は、命令デコーダ１０３のデコードに応じて、第２のスロットの命令の処理を実行する。第３のスロット処理ユニットＳＬ３は、命令デコーダ１０３のデコードに応じて、第３のスロットの命令の処理を実行する。第４のスロット処理ユニットＳＬ４は、命令デコーダ１０３のデコードに応じて、第４のスロットの命令の処理を実行する。
【００２０】
スロット処理ユニット（ロードストアユニット）ＳＬ１は、データメモリ１０７に対して、３２ビットアドレス及び１２８ビットデータを出力し、データをストアすることができる。また、ロードストアユニットＳＬ１は、データメモリ１０７に対して、３２ビットアドレスを出力し、１２８ビットデータをロードすることができる。ロードストアユニットＳＬ１は、データメモリ１０７からロードした１２８ビットデータをベクトルレジスタファイル１０６の第１のスロットの入力ポートに出力し、３２ビットデータ（アドレス）をスカラレジスタファイル１０５の第１のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、命令デコーダ１０３の第１のスロットの命令のデコードに応じたレジスタに、第１のスロットの入力ポートに入力されたデータを書き込む。スカラレジスタファイル１０５は、命令デコーダ１０３の第１のスロットの命令のデコードに応じたレジスタに、第１のスロットの入力ポートに入力されたデータを書き込む。
【００２１】
スロット処理ユニット（実行ユニット）ＳＬ２は、１２８ビットデータをベクトルレジスタファイル１０６の第２のスロットの入力ポートに出力し、３２ビットデータ（アドレス）をスカラレジスタファイル１０５の第２のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、命令デコーダ１０３の第２のスロットの命令のデコードに応じたレジスタに、第２のスロットの入力ポートに入力されたデータを書き込む。スカラレジスタファイル１０５は、命令デコーダ１０３の第２のスロットの命令のデコードに応じたレジスタに、第２のスロットの入力ポートに入力されたデータを書き込む。
【００２２】
スロット処理ユニット（ロードストアユニット）ＳＬ３は、データメモリ１０７に対して、３２ビットアドレス及び１２８ビットデータを出力し、データをストアすることができる。また、ロードストアユニットＳＬ３は、データメモリ１０７に対して、３２ビットアドレスを出力し、１２８ビットデータをロードすることができる。ロードストアユニットＳＬ３は、データメモリ１０７からロードした１２８ビットデータをベクトルレジスタファイル１０６の第３のスロットの入力ポートに出力し、３２ビットデータ（アドレス）をスカラレジスタファイル１０５の第３のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、命令デコーダ１０３の第３のスロットの命令のデコードに応じたレジスタに、第３のスロットの入力ポートに入力されたデータを書き込む。スカラレジスタファイル１０５は、命令デコーダ１０３の第３のスロットの命令のデコードに応じたレジスタに、第３のスロットの入力ポートに入力されたデータを書き込む。
【００２３】
スロット処理ユニット（実行ユニット）ＳＬ４は、１２８ビットデータをベクトルレジスタファイル１０６の第４のスロットの入力ポートに出力し、３２ビットデータ（アドレス）をスカラレジスタファイル１０５の第４のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、命令デコーダ１０３の第４のスロットの命令のデコードに応じたレジスタに、第４のスロットの入力ポートに入力されたデータを書き込む。スカラレジスタファイル１０５は、命令デコーダ１０３の第４のスロットの命令のデコードに応じたレジスタに、第４のスロットの入力ポートに入力されたデータを書き込む。
【００２４】
例えば、第１のスロットの命令が下記のストア命令である場合を説明する。
ｖ．ｓｔｏｒｅ  ｖｘ，ｓｘ，「即値」
【００２５】
ここで、ｖ．ｓｔｏｒｅは、オペコードである。オペランドｖｘは、ベクトルレジスタファイル１０６内のストアデータを記憶するレジスタ番号を示す。オペランドｓｘは、スカラレジスタファイル１０５内のベースアドレスを記憶するレジスタ番号を示す。オペランド「即値」は、オフセットアドレスを示す。
【００２６】
第１のスロット処理ユニットＳＬ１は、ベクトルレジスタファイル１０６内のレジスタｖｘのストアデータを入力し、スカラレジスタファイル１０５内のレジスタｓｘのベースアドレスを入力する。次に、第１のスロット処理ユニットＳＬ１は、レジスタｓｘのベースアドレスと「即値」のオフセットアドレスとを加算したアドレスと、レジスタｖｘのストアデータとをデータメモリ１０７に出力し、データメモリ１０７の指定アドレスにストアデータをストアする。
【００２７】
次に、第１のスロットの命令が下記のロード命令である場合を説明する。
ｖ．ｌｏａｄ  ｖｘ，ｓｘ，「即値」
【００２８】
ここで、ｖ．ｌｏａｄは、オペコードである。オペランドｖｘは、ベクトルレジスタファイル１０６内のロードデータを書き込むレジスタ番号を示す。オペランドｓｘは、スカラレジスタファイル１０５内のベースアドレスを記憶するレジスタ番号を示す。オペランド「即値」は、オフセットアドレスを示す。
【００２９】
第１のスロット処理ユニットＳＬ１は、スカラレジスタファイル１０５内のレジスタｓｘのベースアドレスを入力する。次に、第１のスロット処理ユニットＳＬ１は、レジスタｓｘのベースアドレスと「即値」のオフセットアドレスとを加算したアドレスをデータメモリ１０７に出力し、データメモリ１０７の指定アドレスからデータをロードする。次に、第１のスロット処理ユニットＳＬ１は、ロードしたデータをベクトルレジスタファイル１０６の第１のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、第１のスロットの入力ポートに入力したデータをレジスタｖｘに書き込む。
【００３０】
次に、第２のスロットの命令が下記の加算命令である場合を説明する。
ｖ．ａｄｄ  ｖ１０，ｖ１４，ｖ１５
【００３１】
ここで、ｖ．ａｄｄは、オペコードである。オペランドｖ１０は、ベクトルレジスタファイル１０６内の加算結果を書き込むレジスタ番号を示す。オペランドｖ１４及びｖ１５は、ベクトルレジスタファイル１０６内の加算対象の値を記憶するレジスタ番号を示す。
【００３２】
第２のスロット処理ユニットＳＬ２は、ベクトルレジスタファイル１０６内のレジスタｖ１４及びｖ１５の値を入力し、レジスタｖ１４及びｖ１５の値を加算し、その加算結果をベクトルレジスタファイル１０６の第２のスロットの入力ポートに出力する。ベクトルレジスタファイル１０６は、第２のスロットの入力ポートに入力したデータをレジスタｖ１０に書き込む。
【００３３】
図３は、図１の命令フェッチユニット１０２の構成例を示す図である。命令フェッチユニット１０２は、命令フェッチコントローラ３０１、グループ番号レジスタ（メモリ）３０２、バッファ３０３、及び４個のセレクタＡ１〜Ａ４を有する。第１のセレクタＡ１は、第１のスロットに対応し、第１の制御部３０４ａと第１のセレクタ３０５ａとＮＯＰ命令のレジスタ３０６ａを有する。第２のセレクタＡ２は、第２のスロットに対応し、第２の制御部３０４ｂと第２のセレクタ３０５ｂとＮＯＰ命令のレジスタ３０６ｂを有する。第３のセレクタＡ３は、第３のスロットに対応し、第３の制御部３０４ｃと第３のセレクタ３０５ｃとＮＯＰ命令のレジスタ３０６ｃを有する。第４のセレクタＡ４は、第４のスロットに対応し、第４の制御部３０４ｄと第４のセレクタ３０５ｄとＮＯＰ命令のレジスタ３０６ｄを有する。
【００３４】
バッファ３０３は、第１のグループ番号Ｐ１と第１のスロット番号Ｓ１と第１の命令Ｉ１の組みと、第２のグループ番号Ｐ２と第２のスロット番号Ｓ２と第２の命令Ｉ２の組みと、第３のグループ番号Ｐ３と第３のスロット番号Ｓ３と第３の命令Ｉ３の組みと、第４のグループ番号Ｐ４と第４のスロット番号Ｓ４と第４の命令Ｉ４の組みと、第５のグループ番号Ｐ５と第５のスロット番号Ｓ５と第５の命令Ｉ５の組みと、第６のグループ番号Ｐ６と第６のスロット番号Ｓ６と第６の命令Ｉ６の組みと、第７のグループ番号Ｐ７と第７のスロット番号Ｓ７と第７の命令Ｉ７の組みと、第８のグループ番号Ｐ８と第８のスロット番号Ｓ８と第８の命令Ｉ８の組みを記憶する。バッファ３０３は、４スロット×２＝８個の上記の組みを記憶するダブルバッファである。また、バッファ３０３は、第１のグループ番号Ｐ１と第１のスロット番号Ｓ１と第１の命令Ｉ１の組みと、第２のグループ番号Ｐ２と第２のスロット番号Ｓ２と第２の命令Ｉ２の組みと、第３のグループ番号Ｐ３と第３のスロット番号Ｓ３と第３の命令Ｉ３の組みを、セレクタＡ１〜Ａ４に出力する。
【００３５】
グループ番号レジスタ３０２は、サイクル毎に変化するグループ番号ＳＳを記憶する。グループ番号ＳＳは、そのサイクルで並列に発行するべき命令を特定するための１ビットのグループ番号である。グループ番号ＳＳと同じグループ番号Ｓ１〜Ｓ４の命令Ｉ１〜Ｉ４が、そのサイクルで発行する対象となる。グループ番号ＳＳは、命令デコーダ１０３に命令をフィードする度に、「０」と「１」が反転する。なお、グループ番号ＳＳは、２ビット以上の番号でもよい。
【００３６】
セレクタＡ１は、第１のグループ番号Ｐ１と第１のスロット番号Ｓ１と第１の命令Ｉ１の組みを入力する。セレクタＡ１は、入力される組みの中の第１のグループ番号Ｐ１がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第１のスロット番号Ｓ１が自己の第１のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第１の命令Ｉ１を選択して命令デコーダ１０３に出力し、それ以外の場合にはＮＯＰ命令を選択して命令デコーダ１０３に出力する。セレクタ３０５ａは、制御部３０４ａの制御の下、命令Ｉ１又はＮＯＰ命令を選択する。
【００３７】
セレクタＡ２は、第１のグループ番号Ｐ１と第１のスロット番号Ｓ１と第１の命令Ｉ１の組みと、第２のグループ番号Ｐ２と第２のスロット番号Ｓ２と第２の命令Ｉ２の組みを入力する。セレクタＡ２は、入力される組みの中の第１のグループ番号Ｐ１がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第１のスロット番号Ｓ１が自己の第２のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第１の命令Ｉ１を選択して命令デコーダ１０３に出力する。また、セレクタＡ２は、入力される組みの中の第２のグループ番号Ｐ２がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第２のスロット番号Ｓ２が自己の第２のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第２の命令Ｉ２を選択して命令デコーダ１０３に出力する。また、セレクタＡ２は、上記以外の場合にはＮＯＰ命令を選択して命令デコーダ１０３に出力する。セレクタ３０５ｂは、制御部３０４ｂの制御の下、命令Ｉ１、Ｉ２又はＮＯＰ命令を選択する。
【００３８】
セレクタＡ３は、第１のグループ番号Ｐ１と第１のスロット番号Ｓ１と第１の命令Ｉ１の組みと、第２のグループ番号Ｐ２と第２のスロット番号Ｓ２と第２の命令Ｉ２の組みと、第３のグループ番号Ｐ３と第３のスロット番号Ｓ３と第３の命令Ｉ３の組みを入力する。セレクタＡ３は、入力される組みの中の第１のグループ番号Ｐ１がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第１のスロット番号Ｓ１が自己の第３のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第１の命令Ｉ１を選択して命令デコーダ１０３に出力する。また、セレクタＡ３は、入力される組みの中の第２のグループ番号Ｐ２がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第２のスロット番号Ｓ２が自己の第３のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第２の命令Ｉ２を選択して命令デコーダ１０３に出力する。また、セレクタＡ３は、入力される組みの中の第３のグループ番号Ｐ３がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第３のスロット番号Ｓ３が自己の第３のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第３の命令Ｉ３を選択して命令デコーダ１０３に出力する。また、セレクタＡ３は、上記以外の場合にはＮＯＰ命令を選択して命令デコーダ１０３に出力する。セレクタ３０５ｃは、制御部３０４ｃの制御の下、命令Ｉ１、Ｉ２、Ｉ３又はＮＯＰ命令を選択する。
【００３９】
セレクタＡ４は、第１のグループ番号Ｐ１と第１のスロット番号Ｓ１と第１の命令Ｉ１の組みと、第２のグループ番号Ｐ２と第２のスロット番号Ｓ２と第２の命令Ｉ２の組みと、第３のグループ番号Ｐ３と第３のスロット番号Ｓ３と第３の命令Ｉ３の組みと、第４のグループ番号Ｐ４と第４のスロット番号Ｓ４と第４の命令Ｉ４の組みを入力する。セレクタＡ４は、入力される組みの中の第１のグループ番号Ｐ１がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第１のスロット番号Ｓ１が自己の第４のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第１の命令Ｉ１を選択して命令デコーダ１０３に出力する。また、セレクタＡ４は、入力される組みの中の第２のグループ番号Ｐ２がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第２のスロット番号Ｓ２が自己の第４のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第２の命令Ｉ２を選択して命令デコーダ１０３に出力する。また、セレクタＡ４は、入力される組みの中の第３のグループ番号Ｐ３がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第３のスロット番号Ｓ３が自己の第４のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第３の命令Ｉ３を選択して命令デコーダ１０３に出力する。また、セレクタＡ４は、入力される組みの中の第４のグループ番号Ｐ４がグループ番号レジスタ３０２に記憶されているグループ番号ＳＳと同じであり、かつ、入力される組みの中の第４のスロット番号Ｓ４が自己の第４のスロットに対応するスロット番号と同じである場合には、入力される組みの中の第４の命令Ｉ４を選択して命令デコーダ１０３に出力する。また、セレクタＡ４は、上記以外の場合にはＮＯＰ命令を選択して命令デコーダ１０３に出力する。セレクタ３０５ｄは、制御部３０４ｄの制御の下、命令Ｉ１、Ｉ２、Ｉ３、Ｉ４又はＮＯＰ命令を選択する。
【００４０】
命令フェッチコントローラ３０１は、命令フェッチユニット１０２を制御する回路であり、主として命令メモリ１０１からバッファ３０３への命令の読み込みと、バッファ３０３に格納された命令のシフトを制御する。例えば、命令Ｉ１〜Ｉ４ が命令フェッチユニット１０２から命令デコーダ１０３へ出力されると、バッファ３０３内の命令Ｉ５〜Ｉ８の組みが左シフトされ、命令Ｉ１〜Ｉ４の組みが格納されていた場所に移る。バッファ３０３内の命令Ｉ５〜Ｉ８があった部分には、命令メモリ１０１より新しい命令の組みが読み込まれる。
【００４１】
ここで、命令メモリ１０１内のＶＬＩＷ命令の並びは、昇順になるようにコンパイラにおいてスケジューリングされる。つまり、セレクタＡ１は、バッファ３０３の先頭の命令Ｉ１のみを発行対象としている。セレクタＡ２は、バッファ３０３の先頭の命令Ｉ１とその次の命令Ｉ２を発行対象としている。セレクタＡ３は、バッファ３０３の先頭から３命令Ｉ１〜Ｉ３を発行対象としている。セレクタＡ４は、バッファ３０３の先頭から４命令Ｉ１〜Ｉ４を発行対象としている。
【００４２】
なお、セレクタＡ１〜Ａ４は、それぞれ、第１のグループ番号Ｐ１と第１のスロット番号Ｓ１と第１の命令Ｉ１の組みと、第２のグループ番号Ｐ２と第２のスロット番号Ｓ２と第２の命令Ｉ２の組みと、第３のグループ番号Ｐ３と第３のスロット番号Ｓ３と第３の命令Ｉ３の組みと、第４のグループ番号Ｐ４と第４のスロット番号Ｓ４と第４の命令Ｉ４の組みを入力するようにしてもよい。その場合、セレクタＡ１〜Ａ４は、それぞれ、命令Ｉ１〜Ｉ４を選択して命令デコーダ１０３に出力することができる点で、自由度が向上する。ただし、図３の構成の方が、構成が簡単になり、小型化できる利点がある。
【００４３】
図４は、命令フェッチユニット１０２の動作例を示す図である。グループ番号レジスタ３０２に記憶されているグループ番号ＳＳは、サイクル毎に、「０」及び「１」の間で交互に遷移する。例えば、グループ番号ＳＳは、命令フェッチユニット１０２が命令デコーダ１０３に命令を転送する毎に、「０」→「１」→「０」→「１」・・・と変化する。
【００４４】
例えば、第１のグループ番号Ｐ１は「０」である。第１のスロット番号Ｓ１は「０」であり、第１のスロットの番号に対応する。第２のグループ番号Ｐ２は「０」である。第２のスロット番号Ｓ２は「１」であり、第２のスロットの番号に対応する。第３のグループ番号Ｐ３は「０」である。第３のスロット番号Ｓ３は「２」であり、第３のスロットの番号に対応する。第４のグループ番号Ｐ４は「１」である。第４のスロット番号Ｓ４は「１」であり、第２のスロットの番号に対応する。第５のグループ番号Ｐ５は「１」である。第５のスロット番号Ｓ５は「３」であり、第４のスロットの番号に対応する。第６のグループ番号Ｐ６は「０」である。第６のスロット番号Ｓ６は「１」であり、第２のスロットの番号に対応する。第７のグループ番号Ｐ７は「１」である。第７のスロット番号Ｓ７は「０」であり、第１のスロットの番号に対応する。第８のグループ番号Ｐ８は「１」である。第８のスロット番号Ｓ８は「３」であり、第４のスロットの番号に対応する。
【００４５】
まず、第１のサイクルについて説明する。グループ番号レジスタ３０２は、「０」のグループ番号ＳＳを出力する。バッファ３０３内の命令Ｉ１〜Ｉ４の組みがセレクタＡ１〜Ａ４に出力される。第１の制御部３０４ａは、第１のグループ番号Ｐ１（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであり、かつ、第１のスロット番号Ｓ１（＝「０」）が自己の第１のスロットに対応するスロット番号（＝「０」）と同じであるので、第１の命令Ｉ１の選択を指示する。第１のセレクタ３０５ａは、第１の制御部３０４ａの制御の下、第１の命令Ｉ１を第１のスロットの命令として選択して命令デコーダ１０３に出力する。
【００４６】
第２の制御部３０４ｂは、第１のグループ番号Ｐ１（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであるが、第１のスロット番号Ｓ１（＝「０」）が自己の第２のスロットに対応するスロット番号（＝「１」）と異なるので、第１の命令Ｉ１の選択を指示しない。また、第２の制御部３０４ｂは、第２のグループ番号Ｐ２（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであり、かつ、第２のスロット番号Ｓ２（＝「１」）が自己の第２のスロットに対応するスロット番号（＝「１」）と同じであるので、第２の命令Ｉ２の選択を指示する。第２のセレクタ３０５ｂは、第２の制御部３０４ｂの制御の下、第２の命令Ｉ２を第２のスロットの命令として選択して命令デコーダ１０３に出力する。
【００４７】
第３の制御部３０４ｃは、第１のグループ番号Ｐ１（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであるが、第１のスロット番号Ｓ１（＝「０」）が自己の第３のスロットに対応するスロット番号（＝「２」）と異なるので、第１の命令Ｉ１の選択を指示しない。また、第３の制御部３０４ｃは、第２のグループ番号Ｐ２（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであるが、第２のスロット番号Ｓ２（＝「１」）が自己の第３のスロットに対応するスロット番号（＝「２」）と異なるので、第２の命令Ｉ２の選択を指示しない。また、第３の制御部３０４ｃは、第３のグループ番号Ｐ３（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであり、かつ、第３のスロット番号Ｓ３（＝「２」）が自己の第３のスロットに対応するスロット番号（＝「２」）と同じであるので、第３の命令Ｉ３の選択を指示する。第３のセレクタ３０５ｃは、第３の制御部３０４ｃの制御の下、第３の命令Ｉ３を第３のスロットの命令として選択して命令デコーダ１０３に出力する。
【００４８】
第４の制御部３０４ｄは、第１のグループ番号Ｐ１（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであるが、第１のスロット番号Ｓ１（＝「０」）が自己の第４のスロットに対応するスロット番号（＝「３」）と異なるので、第１の命令Ｉ１の選択を指示しない。また、第４の制御部３０４ｄは、第２のグループ番号Ｐ２（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであるが、第２のスロット番号Ｓ２（＝「１」）が自己の第４のスロットに対応するスロット番号（＝「３」）と異なるので、第２の命令Ｉ２の選択を指示しない。また、第４の制御部３０４ｄは、第３のグループ番号Ｐ３（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであるが、第３のスロット番号Ｓ３（＝「２」）が自己の第４のスロットに対応するスロット番号（＝「３」）と異なるので、第３の命令Ｉ３の選択を指示しない。また、第４の制御部３０４ｄは、第４のグループ番号Ｐ４（＝「１」）がグループ番号ＳＳ（＝「０」）と異なるので、第４の命令Ｉ４の選択を指示しない。第４の制御部３０４ｄは、上記の命令Ｉ１〜Ｉ４の選択条件を満たさないので、ＮＯＰ命令の選択を指示する。第４のセレクタ３０５ｄは、第４の制御部３０４ｄの制御の下、ＮＯＰ命令を第４のスロットの命令として選択して命令デコーダ１０３に出力する。
【００４９】
次に、第２のサイクルについて説明する。グループ番号レジスタ３０２は、「１」のグループ番号ＳＳを出力する。上記では、命令Ｉ１〜Ｉ３は、命令デコーダ１０３に出力されたので、バッファ３０３から破棄される。そして、後続の命令Ｉ４〜Ｉ８がバッファ３０３内で左シフトされる。バッファ３０３内の命令Ｉ４〜Ｉ７の組みがセレクタＡ１〜Ａ４に出力される。
【００５０】
第１の制御部３０４ａは、第４のグループ番号Ｐ４（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであるが、第４のスロット番号Ｓ４（＝「１」）が自己の第１のスロットに対応するスロット番号（＝「０」）と異なるので、第４の命令Ｉ４の選択を指示しない。第１の制御部３０４ａは、上記の命令Ｉ４の選択条件を満たさないので、ＮＯＰ命令の選択を指示する。第１のセレクタ３０５ａは、第１の制御部３０４ａの制御の下、ＮＯＰ命令を第１のスロットの命令として選択して命令デコーダ１０３に出力する。
【００５１】
第２の制御部３０４ｂは、第４のグループ番号Ｐ４（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであり、かつ、第４のスロット番号Ｓ４（＝「１」）が自己の第２のスロットに対応するスロット番号（＝「１」）と同じであるので、第４の命令Ｉ４の選択を指示する。第２のセレクタ３０５ｂは、第２の制御部３０４ｂの制御の下、第４の命令Ｉ４を第２のスロットの命令として選択して命令デコーダ１０３に出力する。
【００５２】
第３の制御部３０４ｃは、第４のグループ番号Ｐ４（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであるが、第４のスロット番号Ｓ４（＝「１」）が自己の第３のスロットに対応するスロット番号（＝「２」）と異なるので、第４の命令Ｉ４の選択を指示しない。また、第３の制御部３０４ｃは、第５のグループ番号Ｐ５（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであるが、第５のスロット番号Ｓ５（＝「３」）が自己の第３のスロットに対応するスロット番号（＝「２」）と異なるので、第５の命令Ｉ５の選択を指示しない。また、第３の制御部３０４ｃは、第６のグループ番号Ｐ６（＝「０」）がグループ番号ＳＳ（＝「１」）と異なるので、第６の命令Ｉ６の選択を指示しない。第３の制御部３０４ｃは、上記の命令Ｉ４〜Ｉ６の選択条件を満たさないので、ＮＯＰ命令の選択を指示する。第３のセレクタ３０５ｃは、第３の制御部３０４ｃの制御の下、ＮＯＰ命令を第３のスロットの命令として選択して命令デコーダ１０３に出力する。
【００５３】
第４の制御部３０４ｄは、第４のグループ番号Ｐ４（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであるが、第４のスロット番号Ｓ４（＝「１」）が自己の第４のスロットに対応するスロット番号（＝「３」）と異なるので、第４の命令Ｉ４の選択を指示しない。また、第４の制御部３０４ｄは、第５のグループ番号Ｐ５（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであり、かつ、第５のスロット番号Ｓ５（＝「３」）が自己の第４のスロットに対応するスロット番号（＝「３」）と同じであるので、第５の命令Ｉ５の選択を指示する。第４のセレクタ３０５ｄは、第４の制御部３０４ｄの制御の下、第５の命令Ｉ５を第４のスロットの命令として選択して命令デコーダ１０３に出力する。
【００５４】
次に、第３のサイクルについて説明する。グループ番号レジスタ３０２は、「０」のグループ番号ＳＳを出力する。上記では、命令Ｉ４及びＩ５は、命令デコーダ１０３に出力されたので、バッファ３０３から破棄される。そして、後続の命令Ｉ６〜Ｉ８がバッファ３０３内で左シフトされる。ここで、バッファ３０３に４つ以上の空きができるため、命令フェッチコントローラ３０１の制御により、命令メモリ１０１から新しい命令がバッファ３０３に読み込まれる。ここでは、一例として、１つの命令の組み（Ｐｘ、Ｓｘ、Ｉｘ の組み）が３２ビット、命令メモリ１０１の出力ビット幅を１２８ビットとすると、１度で４つの命令Ｉ９〜Ｉ１２の組みが命令メモリ１０１からバッファ３０３に読み込まれることになる。バッファ３０３内の命令Ｉ６〜Ｉ９の組みがセレクタＡ１〜Ａ４に出力される。
【００５５】
第１の制御部３０４ａは、第６のグループ番号Ｐ６（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであるが、第６のスロット番号Ｓ６（＝「１」）が自己の第１のスロットに対応するスロット番号（＝「０」）と異なるので、第６の命令Ｉ６の選択を指示しない。第１の制御部３０４ａは、上記の命令Ｉ６の選択条件を満たさないので、ＮＯＰ命令の選択を指示する。第１のセレクタ３０５ａは、第１の制御部３０４ａの制御の下、ＮＯＰ命令を第１のスロットの命令として選択して命令デコーダ１０３に出力する。
【００５６】
第２の制御部３０４ｂは、第６のグループ番号Ｐ６（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであり、かつ、第６のスロット番号Ｓ６（＝「１」）が自己の第２のスロットに対応するスロット番号（＝「１」）と同じであるので、第６の命令Ｉ６の選択を指示する。第２のセレクタ３０５ｂは、第２の制御部３０４ｂの制御の下、第６の命令Ｉ６を第２のスロットの命令として選択して命令デコーダ１０３に出力する。
【００５７】
第３の制御部３０４ｃは、第６のグループ番号Ｐ６（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであるが、第６のスロット番号Ｓ６（＝「１」）が自己の第３のスロットに対応するスロット番号（＝「２」）と異なるので、第６の命令Ｉ６の選択を指示しない。また、第３の制御部３０４ｃは、第７のグループ番号Ｐ７（＝「１」）がグループ番号ＳＳ（＝「０」）と異なるので、第７の命令Ｉ７の選択を指示しない。また、第３の制御部３０４ｃは、第８のグループ番号Ｐ８（＝「１」）がグループ番号ＳＳ（＝「０」）と異なるので、第８の命令Ｉ８の選択を指示しない。第３の制御部３０４ｃは、上記の命令Ｉ６〜Ｉ８の選択条件を満たさないので、ＮＯＰ命令の選択を指示する。第３のセレクタ３０５ｃは、第３の制御部３０４ｃの制御の下、ＮＯＰ命令を第３のスロットの命令として選択して命令デコーダ１０３に出力する。
【００５８】
第４の制御部３０４ｄは、第６のグループ番号Ｐ６（＝「０」）がグループ番号ＳＳ（＝「０」）と同じであるが、第６のスロット番号Ｓ６（＝「１」）が自己の第４のスロットに対応するスロット番号（＝「３」）と異なるので、第６の命令Ｉ６の選択を指示しない。また、第４の制御部３０４ｄは、第７のグループ番号Ｐ７（＝「１」）がグループ番号ＳＳ（＝「０」）と異なるので、第７の命令Ｉ７の選択を指示しない。また、第４の制御部３０４ｄは、第８のグループ番号Ｐ７（＝「１」）がグループ番号ＳＳ（＝「０」）と異なるので、第８の命令Ｉ８の選択を指示しない。第４の制御部３０４ｄは、上記の命令Ｉ６〜Ｉ９の選択条件を満たさないので、ＮＯＰ命令の選択を指示する。第４のセレクタ３０５ｄは、第４の制御部３０４ｄの制御の下、ＮＯＰ命令を第４のスロットの命令として選択して命令デコーダ１０３に出力する。
【００５９】
次に、第４のサイクルについて説明する。グループ番号レジスタ３０２は、「１」のグループ番号ＳＳを出力する。上記では、命令Ｉ６は、命令デコーダ１０３に出力されたので、バッファ３０３から破棄される。そして、後続の命令Ｉ７〜Ｉ１２がバッファ３０３内で左シフトされる。バッファ３０３内の命令Ｉ７〜Ｉ１０の組みがセレクタＡ１〜Ａ４に出力される。
【００６０】
第１の制御部３０４ａは、第７のグループ番号Ｐ７（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであり、かつ、第７のスロット番号Ｓ７（＝「０」）が自己の第１のスロットに対応するスロット番号（＝「０」）と同じであるので、第７の命令Ｉ７の選択を指示する。第１のセレクタ３０５ａは、第１の制御部３０４ａの制御の下、第７の命令Ｉ７を第１のスロットの命令として選択して命令デコーダ１０３に出力する。
【００６１】
第２の制御部３０４ｂは、第７のグループ番号Ｐ７（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであるが、第７のスロット番号Ｓ７（＝「０」）が自己の第２のスロットに対応するスロット番号（＝「１」）と異なるので、第７の命令Ｉ７の選択を指示しない。また、第２の制御部３０４ｂは、第８のグループ番号Ｐ８（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであるが、第８のスロット番号Ｓ８（＝「３」）が自己の第２のスロットに対応するスロット番号（＝「１」）と異なるので、第８の命令Ｉ８の選択を指示しない。第２の制御部３０４ｂは、上記の命令Ｉ７及びＩ８の選択条件を満たさないので、ＮＯＰ命令の選択を指示する。第２のセレクタ３０５ｂは、第２の制御部３０４ｂの制御の下、ＮＯＰ命令を第２のスロットの命令として選択して命令デコーダ１０３に出力する。
【００６２】
第３の制御部３０４ｃは、第７のグループ番号Ｐ７（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであるが、第７のスロット番号Ｓ７（＝「０」）が自己の第３のスロットに対応するスロット番号（＝「２」）と異なるので、第７の命令Ｉ７の選択を指示しない。また、第３の制御部３０４ｃは、第８のグループ番号Ｐ８（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであるが、第８のスロット番号Ｓ８（＝「３」）が自己の第３のスロットに対応するスロット番号（＝「２」）と異なるので、第８の命令Ｉ８の選択を指示しない。第３の制御部３０４ｃは、上記の命令Ｉ７〜Ｉ９の選択条件を満たさないので、ＮＯＰ命令の選択を指示する。第３のセレクタ３０５ｃは、第３の制御部３０４ｃの制御の下、ＮＯＰ命令を第３のスロットの命令として選択して命令デコーダ１０３に出力する。
【００６３】
第４の制御部３０４ｄは、第７のグループ番号Ｐ７（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであるが、第７のスロット番号Ｓ７（＝「０」）が自己の第４のスロットに対応するスロット番号（＝「３」）と異なるので、第７の命令Ｉ７の選択を指示しない。また、第４の制御部３０４ｄは、第８のグループ番号Ｐ８（＝「１」）がグループ番号ＳＳ（＝「１」）と同じであり、かつ、第８のスロット番号Ｓ８（＝「３」）が自己の第４のスロットに対応するスロット番号（＝「３」）と同じであるので、第８の命令Ｉ８の選択を指示する。第４のセレクタ３０５ｄは、第４の制御部３０４ｄの制御の下、第８の命令Ｉ８を第４のスロットの命令として選択して命令デコーダ１０３に出力する。
【００６４】
図５は、本実施形態による処理装置の処理方法を示すフローチャートである。ステップＳ５０１では、命令フェッチコントローラ３０１は、バッファ３０３が空か否かをチェックする。バッファ３０３が空である場合にはステップＳ５０２に進み、バッファ３０３が空でない場合にはステップＳ５０３に進む。ステップＳ５０２では、命令フェッチコントローラ３０１は、命令メモリ１０１からバッファ３０３のすべてにＶＬＩＷ命令を読み込む。その後、ステップＳ５０３に進む。
【００６５】
ステップＳ５０３では、命令フェッチコントローラ３０１は、命令番号を０から３まで変化させるループ処理を開始する。まず、命令番号が０（例えば命令Ｉ１の組み）についての処理を開始する。ステップＳ５０４では、制御部３０４ａ〜３０４ｄは、ＶＬＩＷ命令内のグループ番号Ｐ１（又はＰ２〜Ｐ４）がグループ番号レジスタ３０２のグループ番号ＳＳと同じか否かをチェックする。同じである場合にはステップＳ５０５に進み、異なる場合にはステップＳ５１３に進む。
【００６６】
ステップＳ５０５では、第１の制御部３０４ａは、ＶＬＩＷ命令内のスロット番号Ｓ１が第１のスロットに対応するスロット番号（＝「０」）と同じか否かをチェックする。同じである場合にはステップＳ５０６に進み、異なる場合にはステップＳ５０７に進む。ステップＳ５０６では、第１のセレクタ３０５ａは、第１の命令Ｉ１を命令デコーダ１０３の第１のスロットに供給する。その後、ステップＳ５１３に進む。
【００６７】
ステップＳ５０７では、第２の制御部３０４ｂは、ＶＬＩＷ命令内のスロット番号Ｓ１（又はＳ２）が第２のスロットに対応するスロット番号（＝「１」）と同じか否かをチェックする。同じである場合にはステップＳ５０８に進み、異なる場合にはステップＳ５０９に進む。ステップＳ５０８では、第２のセレクタ３０５ｂは、第１の命令Ｉ１（又は命令Ｉ２）を命令デコーダ１０３の第２のスロットに供給する。その後、ステップＳ５１３に進む。
【００６８】
ステップＳ５０９では、第３の制御部３０４ｃは、ＶＬＩＷ命令内のスロット番号Ｓ１（又はＳ２〜Ｓ３）が第３のスロットに対応するスロット番号（＝「２」）と同じか否かをチェックする。同じである場合にはステップＳ５１０に進み、異なる場合にはステップＳ５１１に進む。ステップＳ５１０では、第３のセレクタ３０５ｃは、第１の命令Ｉ１（又は命令Ｉ２〜Ｉ３）を命令デコーダ１０３の第３のスロットに供給する。その後、ステップＳ５１３に進む。
【００６９】
ステップＳ５１１では、第４の制御部３０４ｄは、ＶＬＩＷ命令内のスロット番号Ｓ１（又はＳ２〜Ｓ４）が第４のスロットに対応するスロット番号（＝「３」）と同じか否かをチェックする。同じである場合にはステップＳ５１２に進み、異なる場合にはステップＳ５１３に進む。ステップＳ５１２では、第４のセレクタ３０５ｄは、第１の命令Ｉ１（又は命令Ｉ２〜Ｉ４）を命令デコーダ１０３の第４のスロットに供給する。その後、ステップＳ５１３に進む。
【００７０】
ステップＳ５１３では、命令フェッチコントローラ３０１は、ループ処理を終了し、ステップＳ５０３に戻り、命令番号が１（例えば命令Ｉ２の組み）についての処理を繰り返す。同様に、命令番号が２及び３（例えば命令Ｉ３及びＩ４の組み）についての処理を繰り返す。その後、ステップＳ５１４に進む。
【００７１】
ステップＳ５１４では、命令フェッチコントローラ３０１は、１命令だけ命令デコーダ１０３に発行したか否かをチェックする。１命令だけ発行した場合にはステップＳ５１５に進み、そうでない場合にはステップＳ５１６に進む。ステップＳ５１５では、命令フェッチコントローラ３０１は、バッファ３０３内の命令を１命令分だけ左シフトする。その後、ステップＳ５２２に進む。
【００７２】
ステップＳ５１６では、命令フェッチコントローラ３０１は、２命令を命令デコーダ１０３に同時発行したか否かをチェックする。２命令同時発行した場合にはステップＳ５１７に進み、そうでない場合にはステップＳ５１８に進む。ステップＳ５１７では、命令フェッチコントローラ３０１は、バッファ３０３内の命令を２命令分だけ左シフトする。その後、ステップＳ５２２に進む。
【００７３】
ステップＳ５１８では、命令フェッチコントローラ３０１は、３命令を命令デコーダ１０３に同時発行したか否かをチェックする。３命令同時発行した場合にはステップＳ５１９に進み、そうでない場合にはステップＳ５２０に進む。ステップＳ５１９では、命令フェッチコントローラ３０１は、バッファ３０３内の命令を３命令分だけ左シフトする。その後、ステップＳ５２２に進む。
【００７４】
ステップＳ５２０では、命令フェッチコントローラ３０１は、４命令を命令デコーダ１０３に同時発行したか否かをチェックする。４命令同時発行した場合にはステップＳ５２１に進み、そうでない場合にはステップＳ５２２に進む。ステップＳ５２１では、命令フェッチコントローラ３０１は、バッファ３０３内の命令を４命令分だけ左シフトする。その後、ステップＳ５２２に進む。
【００７５】
ステップＳ５２２では、命令フェッチコントローラ３０１は、バッファ３０３内に４つ以上の空きがあるか否かをチェックする。ある場合にはステップＳ５２３に進み、ない場合には処理を終了する。ステップＳ５２３では、命令フェッチコントローラ３０１は、命令メモリ１０１から４個のＶＬＩＷ命令をバッファ３０３に読み込む。その後、処理を終了する。
【００７６】
本実施形態によれば、ＶＬＩＷ命令中にグループ番号Ｐ１〜Ｐ８及びスロット番号Ｓ１〜Ｓ８を挿入することにより、各スロットに対するすべての組み合わせのＶＬＩＷ命令の発行を可能とする。コンパイラは、ソースコードのコンパイル時に、グループ番号Ｐ１〜Ｐ８及びスロット番号Ｓ１〜Ｓ８を各命令Ｉ１〜Ｉ８に付与する。
【００７７】
本実施形態によれば、ＮＯＰ命令をバッファ３０３及び命令メモリ１０１に記憶させる必要がないので、命令メモリ１０１のサイズを低減し、消費電力を低減することができる。また、本実施形態は、簡易な構成で、すべての組み合わせのＶＬＩＷ命令を構成することができる。
【００７８】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００７９】
１０１  命令メモリ
１０２  命令フェッチユニット
１０３  命令デコーダ
１０４  パイプラインコントローラ
１０５  スカラレジスタファイル
１０６  ベクトルレジスタファイル
１０７  データメモリ
ＳＬ１  第１のスロット処理ユニット
ＳＬ２  第２のスロット処理ユニット
ＳＬ３  第３のスロット処理ユニット
ＳＬ４  第４のスロット処理ユニット
３０１  命令フェッチコントローラ
３０２  グループ番号レジスタ
３０３  バッファ
３０４ａ〜３０４ｄ  制御部
３０５ａ〜３０５ｄ  セレクタ
３０６ａ〜３０６ｄ  レジスタ
Ａ１〜Ａ４  セレクタ
【図１】
2015141677.tif 000003
【図２】
2015141677.tif 000004
【図３】
2015141677.tif 000005
【図４】
2015141677.tif 000006
【図５】
2015141677.tif 000007