(57)【要約】【課題】インオーダ処理の命令スケジューリングの簡潔さを損なうことなく、並列度を向上することができるスーパースカラプロセッサ及び命令処理方法を提供する。【解決手段】命令メモリ１０１から読み出した命令を命令バッファ１０３に格納する前に事前にスケジューリングパターンを生成するプレスケジューラ１１０と、プレスケジューラ１１０で生成したスケジューリングパターンに基づき、命令バッファ１０３に格納された命令の依存関係をチェックし複数の命令デコーダ１０５、１０６に命令の発行を行うと共に、複数の実行ユニット１０７、１０８での命令の実行順序を決定するスケジューラ１０４とを備える。【選択図】図１
2011128672.tif 000002
【特許請求の範囲】
【請求項１】
命令を格納する命令メモリと、
前記命令メモリから読み出した複数の命令を格納する命令バッファと、
命令をデコードする複数の命令デコーダと、
前記命令デコーダのデコード結果によって制御される複数の実行ユニットと、
を有するスーパースカラプロセッサにおいて、
前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成するプレスケジューラと、
前記プレスケジューラで生成したスケジューリングパターンに基づき、前記命令バッファに格納された命令の依存関係をチェックし前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定するスケジューラと、を備えることを特徴とするスーパースカラプロセッサ。
【請求項２】
前記命令メモリに格納される命令は、並列処理可能な命令であることを示すビットを備えることを特徴とする請求項１記載のスーパースカラプロセッサ。
【請求項３】
前記命令メモリに格納される命令は、分岐命令であることを示すビットを備えることを特徴とする請求項１記載のスーパースカラプロセッサ。
【請求項４】
前記プレスケジューラは、前記命令メモリから読み出した複数の命令の並列処理可能な命令であることを示すビットからスケジューリングパターンを生成することを特徴とする請求項２記載のスーパースカラプロセッサ。
【請求項５】
前記プレスケジューラは、前記命令メモリから読み出した複数の命令の分岐命令であることを示すビットからスケジューリングパターンを生成することを特徴とする請求項３記載のスーパースカラプロセッサ。
【請求項６】
前記複数の命令デコーダは、少なくとも１つの全命令をデコードするデコーダと、少なくとも１つの並列処理可能な命令のみデコードするデコーダを備えることを特徴とする請求項１記載のスーパースカラプロセッサ。
【請求項７】
前記複数の実行ユニットは、少なくとも１つの全命令を実行する実行ユニットと、少なくとも１つの並列処理可能な命令のみ実行する実行ユニットを備えることを特徴とする請求項６記載のスーパースカラプロセッサ。
【請求項８】
前記スケジューラは、前記プレスケジューラが生成したスケジューリングパターンに基づき、前記命令バッファに格納された複数の命令の依存関係をチェックし、前記並列処理可能な命令のみデコードするデコーダへ命令を発行し、前記並列処理可能な命令のみ実行する実行ユニットの命令の実行順序を決定するパイプライン制御回路を備えることを特徴とする請求項７記載のスーパースカラプロセッサ。
【請求項９】
命令を格納する命令メモリと、
前記命令メモリから読み出した複数の命令を格納する命令バッファと、
命令をデコードする複数の命令デコーダと、
前記命令デコーダのデコード結果によって制御される複数の実行ユニットと、
を有するスーパースカラプロセッサの命令処理方法において、
前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成し、
生成したスケジューリングパターンに基づき、前記命令バッファに格納された命令の依存関係をチェックし前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定することを特徴とするスーパースカラプロセッサの命令処理方法。
【請求項１０】
前記命令メモリに格納される命令は、並列処理可能な命令であることを示すビットを備えることを特徴とする請求項９記載のスーパースカラプロセッサの命令処理方法。
【請求項１１】
前記命令メモリに格納される命令は、分岐命令であることを示すビットを備えることを特徴とする請求項９記載のスーパースカラプロセッサの命令処理方法。
【請求項１２】
前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成する際、前記命令メモリから読み出した複数の命令の並列処理可能な命令であることを示すビットからスケジューリングパターンを生成することを特徴とする請求項１０記載のスーパースカラプロセッサの命令処理方法。
【請求項１３】
前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成する際、前記命令メモリから読み出した複数の命令の分岐命令であることを示すビットからスケジューリングパターンを生成することを特徴とする請求項１１記載のスーパースカラプロセッサの命令処理方法。
【請求項１４】
前記複数の命令デコーダは、少なくとも１つの全命令をデコードするデコーダと、少なくとも１つの並列処理可能な命令のみデコードするデコーダを備え、
前記複数の実行ユニットは、少なくとも１つの全命令を実行する実行ユニットと、少なくとも１つの並列処理可能な命令のみ実行する実行ユニットを備え、
前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定する際、生成されたスケジューリングパターンに基づき、前記命令バッファに格納された複数の命令の依存関係をチェックし、前記並列処理可能な命令のみデコードするデコーダへ命令を発行し、前記並列処理可能な命令のみ実行する実行ユニットの命令の実行順序を決定することを特徴とする請求項９記載のスーパースカラプロセッサの命令処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スーパースカラプロセッサ及びその命令処理方法に関する。
【背景技術】
【０００２】
近年メカトロニクス機器に搭載される制御アルゴリズムは複雑になり、その制御性能を得るためＣＰＵの高性能化が求められている。
しかしながら、従来のような動作周波数を高くしたＣＰＵの高性能化では、消費電力が高くなることや、消費電力が高くなることによるＣＰＵの発熱が問題となる。
これらの問題を解決するため、複数の命令を並列に処理しＣＰＵの高性能化を実現するスーパースカラプロセッサが提案されている。
スーパースカラプロセッサは、インオーダ型スーパースカラプロセッサとアウトオブオーダ型スーパースカラプロセッサの２つの並列処理方式に分けられる。
インオーダ型スーパースカラプロセッサでは、プログラム順に隣り合う命令を並列に処理するため命令間の依存関係のチェックや命令を発行する処理を単純にできる。しかし、命令を逐次的に処理するため命令の並列度は低くなる。
アウトオブオーダ型スーパースカラプロセッサでは、プログラム順に関係なく実行できる命令から実行していくため、インオーダ型と比べ並列度は高くなる。しかし、命令間の依存関係のチェックや命令を発行する時の処理が複雑となり、その処理のためにパイプライン段数が増える。パイプライン段数が増えるとその処理の複雑さは飛躍的に上昇し、動作速度の低下要因になるといった技術課題がある。
この技術課題を解決するために、従来のインオーダ型のスーパースカラ処理システムにおいて命令のインオーダ処理を効率的に実行する処理システム及び方法が提案されている（例えば、特許文献１参照）。
この方法は、コンパイラで命令間のデータ依存性のチェックを行い、データ依存性のない複数の命令と命令の種類を示す識別子と連続する命令バンドルでデータ依存性があるかないかを示すストップビットをバンドルし、命令分散ユニットへ送る。命令分散ユニットでは命令バンドルを分析し、複数のパイプラインへ命令を発行する。図１８は従来のインオーダ型スーパースカラプロセッサの制御機構の例である。図１８において、制御機構８５は発行した命令を分析し、命令の古い順に実行が完了するように複数のパイプラインの実行ステージ７９を独立して停止（ストール）させ、ストールが必要なパイプラインによって他のパイプラインを不必要にストールさせずにスループットを向上させる。
また、従来のアウトオブオーダ型のスーパースカラプロセッサにおいてディスパッチ速度を改善する方法が提案されている（例えば、特許文献２参照）。
この方法は、命令棚の任意のスロットからディスパッチさせた後に空となったスロット（ホール）に命令を入れるため、命令の到着順がなくならないようにするため空となったスロットの上側にある命令をシフトダウンし、ホールを埋めていく「崩壊方法」で課題となる動作速度の低下を解決させるものである。図１９は従来のアウトオブオーダ型スーパースカラプロセッサの概略図の例である。図１９において、命令棚３０は、命令を保持する命令プール３４と、各命令の年齢を保持する命令トラッカー３２を有している。スケジューラ４０は、命令プール３４に格納されている命令の中から命令トラッカー３２の状態に基づいてスケジューリングする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−９２６５６号公報（第１２頁、図５）
【特許文献２】特開２００２−７１１６号公報（第９頁、図３）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の方法の特許文献１では、インオーダ処理においてパイプラインのストールをパイプライン毎に行いスループットを向上させるというものであり、並列処理度を上げることができないという問題がある。
また、特許文献２では、命令プールの更新については動作速度を向上させているが、命令プールを更新するための管理を行っている命令トラッカーはその制御が複雑化しており動作速度向上のボトルネックとなる。
本発明はこのような問題点に鑑みてなされたものであり、命令スケジューリングを簡素化し、並列処理を高速化するスーパースカラプロセッサ及び命令処理方法を提供することを目的とする。また、更なる目的は、回路を削減し、回路遅延を削減することである。
【課題を解決するための手段】
【０００５】
上記問題を解決するため、本発明は、次のように構成したのである。
請求項１に記載の発明は、命令を格納する命令メモリと、前記命令メモリから読み出した複数の命令を格納する命令バッファと、命令をデコードする複数の命令デコーダと、前記命令デコーダのデコード結果によって制御される複数の実行ユニットと、を有するスーパースカラプロセッサにおいて、前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成するプレスケジューラと、前記プレスケジューラで生成したスケジューリングパターンに基づき、前記命令バッファに格納された命令の依存関係をチェックし前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定するスケジューラと、を備えることを特徴とするものである。
また、請求項２に記載の発明は、請求項１に記載のスーパースカラプロセッサにおいて、前記命令メモリに格納される命令は、並列処理可能な命令であることを示すビットを備えることを特徴とするものである。
また、請求項３に記載の発明は、請求項１に記載のスーパースカラプロセッサにおいて、前記命令メモリに格納される命令は、分岐命令であることを示すビットを備えることを特徴とするものである。
また、請求項４に記載の発明は、請求項２に記載のスーパースカラプロセッサにおいて、前記プレスケジューラは、前記命令メモリから読み出した複数の命令の並列処理可能な命令であることを示すビットからスケジューリングパターンを生成することを特徴とするものである。
また、請求項５に記載の発明は、請求項３に記載のスーパースカラプロセッサにおいて、前記プレスケジューラは、前記命令メモリから読み出した複数の命令の分岐命令であることを示すビットからスケジューリングパターンを生成することを特徴とするものである。  
また、請求項６に記載の発明は、請求項１に記載のスーパースカラプロセッサにおいて、前記複数の命令デコーダは、少なくとも１つの全命令をデコードするデコーダと、少なくとも１つの並列処理可能な命令のみデコードするデコーダを備えることを特徴とするものである。
また、請求項７に記載の発明は、請求項６に記載のスーパースカラプロセッサにおいて、前記複数の実行ユニットは、少なくとも１つの全命令を実行する実行ユニットと、少なくとも１つの並列処理可能な命令のみ実行する実行ユニットを備えることを特徴とするものである。
また、請求項８に記載の発明は、請求項７に記載のスーパースカラプロセッサにおいて、前記スケジューラは、前記プレスケジューラが生成したスケジューリングパターンに基づき、前記命令バッファに格納された複数の命令の依存関係をチェックし、前記並列処理可能な命令のみデコードするデコーダへ命令を発行し、前記並列処理可能な命令のみ実行する実行ユニットの命令の実行順序を決定するパイプライン制御回路を備えることを特徴とするものである。
【０００６】
また、請求項９に記載の発明は、命令を格納する命令メモリと、前記命令メモリから読み出した複数の命令を格納する命令バッファと、命令をデコードする複数の命令デコーダと、前記命令デコーダのデコード結果によって制御される複数の実行ユニットと、を有するスーパースカラプロセッサの命令処理方法において、前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成し、生成したスケジューリングパターンに基づき、前記命令バッファに格納された命令の依存関係をチェックし前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定することを特徴とするものである。
また、請求項１０に記載の発明は、請求項９に記載のスーパースカラプロセッサの命令処理方法において、前記命令メモリに格納される命令は、並列処理可能な命令であることを示すビットを備えることを特徴とするものである。
また、請求項１１に記載の発明は、請求項９に記載のスーパースカラプロセッサの命令処理方法において、前記命令メモリに格納される命令は、分岐命令であることを示すビットを備えることを特徴とするものである。
また、請求項１２に記載の発明は、請求項１０に記載のスーパースカラプロセッサの命令処理方法において、前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成する際、前記命令メモリから読み出した複数の命令の並列処理可能な命令であることを示すビットからスケジューリングパターンを生成することを特徴とするものである。
また、請求項１３に記載の発明は、請求項１１に記載のスーパースカラプロセッサの命令処理方法において、前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成する際、前記命令メモリから読み出した複数の命令の分岐命令であることを示すビットからスケジューリングパターンを生成することを特徴とするものである。
また、請求項１４に記載の発明は、請求項９に記載のスーパースカラプロセッサの命令処理方法において、前記複数の命令デコーダは、少なくとも１つの全命令をデコードするデコーダと、少なくとも１つの並列処理可能な命令のみデコードするデコーダを備え、前記複数の実行ユニットは、少なくとも１つの全命令を実行する実行ユニットと、少なくとも１つの並列処理可能な命令のみ実行する実行ユニットを備え、前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定する際、生成されたスケジューリングパターンに基づき、前記命令バッファに格納された複数の命令の依存関係をチェックし、前記並列処理可能な命令のみデコードするデコーダへ命令を発行し、前記並列処理可能な命令のみ実行する実行ユニットの命令の実行順序を決定することを特徴とするものである。
【発明の効果】
【０００７】
請求項１〜５、９〜１３に記載の発明によると、メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成するプレスケジューラと、プレスケジューラで生成したスケジューリングパターンに基づき、命令バッファに格納された命令の依存関係をチェックし複数の命令デコーダに命令の発行を行うと共に、複数の実行ユニットでの命令の実行順序を決定するスケジューラを備え、スケジューリングを行うので、命令スケジューリングが簡素化され、並列処理を高速化することができる。
また、請求項６〜８、１４に記載の発明によると、並列処理可能な命令のみデコードするデコーダと、並列処理可能な命令のみ実行する実行ユニットを使用するので、これらユニットは並列処理不可の命令を処理する必要がないため、回路を削減でき、回路遅延を削減することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の第１実施例を示すスーパースカラプロセッサのブロック図
【図２】本発明の第１実施例の基本的な命令フォーマット
【図３】本発明の第１実施例の命令バッファの内部構成図
【図４】本発明の第１実施例のプレスケジューラの内部構成図
【図５】本発明の第１実施例のスケジューリングパターン生成回路の内部構成図
【図６】本発明の第１実施例のスケジューリングパターン生成回路のスケジューリングパターン生成値
【図７】本発明の第１実施例のスケジューラの内部構成図
【図８】本発明の第１実施例のパイプライン制御回路の内部構成図
【図９】本発明の第１実施例の命令スケジューリングのタイミングチャート
【図１０】本発明の第１実施例のスケジューリングパターン（１）のパイプライン動作のタイミングチャート
【図１１】本発明の第１実施例のスケジューリングパターン（２）のパイプライン動作のタイミングチャート
【図１２】本発明の第１実施例のスケジューリングパターン（３）のパイプライン動作のタイミングチャート
【図１３】本発明の第１実施例のスケジューリングパターン（４）のパイプライン動作のタイミングチャート
【図１４】本発明の第２実施例の命令フォーマット
【図１５】本発明の第２実施例のプレスケジューラの内部構成図
【図１６】本発明の第２実施例のスケジューリングパターン生成回路のスケジューリングパターン生成値
【図１７】本発明の第２実施例の命令スケジューリングのタイミングチャート
【図１８】従来のインオーダ型スーパースカラプロセッサの制御機構の例
【図１９】従来のアウトオブオーダ型スーパースカラプロセッサの概略図の例
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について図を参照して説明する。
【実施例１】
【００１０】
図１は、本発明の第１実施例を示すスーパースカラプロセッサのブロック図である。図１において、プロセッサ１１１は、命令を格納する命令メモリ１０１と、プログラムカウンタ１０２と、命令メモリ１０１から読み出した複数の命令を格納する命令バッファ１０３と、命令発行をスケジューリングするスケジューラ１０４と、命令をデコードする第１命令デコーダ１０５と、第２命令デコーダ１０６と、命令を実行する第１実行ユニット１０７と、第２実行ユニット１０８と、実行結果を格納するレジスタファイル１０９と、並列処理可能な命令の有無を事前検出するプレスケジューラ１１０で構成される。
本発明が従来技術と異なる部分は、スケジューラ１０４でスケジューリングする前に、命令メモリ１０１から命令を読み出すと同時に並列処理可能な命令の有無を事前検出するプレスケジューラ１１０と、プレスケジューラ１１０の事前検出に基づいて並列に実行できる命令をスケジューリングするスケジューラ１０４を備えた部分である。
プレスケジューラ１１０は、命令メモリ１０１から読み出した命令を命令バッファ１０３に格納する前に事前にスケジューリングパターンを生成し、スケジューラ１０４は、プレスケジューラ１１０で生成したスケジューリングパターンに基づき、命令バッファ１０３に格納された命令の依存関係をチェックし第１命令デコーダ１０５、第２命令レコーダ１０６に命令の発行を行い、第１実行ユニット１０７、第２実行ユニット１０８での命令の実行順序を決定し、必要があれば、第２実行ユニット１０８の実行を遅延させる。
ここで、第１命令デコーダ１０５は、並列化可能命令と、並列化不可命令のどちらもデコードが可能である。また、第２命令デコーダ１０６は、並列化可能命令のデコードが可能であり、並列化不可命令はデコードしないものとする。また、第１実行ユニット１０７は、並列化可能命令と、並列化不可命令のどちらも実行が可能である。また、第２実行ユニット１０８は、並列化可能命令の実行が可能であり、並列化不可命令は実行しないものとする。これは、第２命令デコーダ１０６と第２実行ユニット１０８で可能なことを制限することにより、回路を削減し、回路遅延の増加を削減するためである。また、本発明のプロセッサでは、第１命令デコーダ１０５、第２実行デコーダ１０６、第１実行ユニット１０７、第２実行ユニット１０８をそれぞれ少なくとも１つ以上備えるものとする。
【００１１】
図２は、本発明の第１実施例の基本的な命令フォーマットである。命令フォーマットは、命令の種類を表すオペレーションコード２０１と、実行結果の書き込み先を示すディスティネーション部２０２と、実行ユニットへの入力を示すソース部Ａ２０３、ソース部Ｂ２０４で構成され、オペレーションコード２０１には、命令レベルで並列化可能な命令かどうかを示す並列化命令ビット２０５を最上位ビット（３１ビット目）に備える。並列化命令ビットは、命令レベルの並列処理が可能な転送命令、算術演算命令、論理演算命令に対してセットされる。なお、ここで並列化命令ビット２０５は、命令をパソコン等でアセンブルまたはコンパイルして作成する際に予めセットしておくものとする。
図３は、図１の命令バッファ１０３の内部構成図である。本発明の実施例では、命令長は３２ビット固定長命令とする。そして、命令メモリ１０１から４命令が１２８ビットの命令バス３０５を通り、命令バス３０５の下位０ビット目から３１ビット目（これを以下[３１：０]の表記で表す）にある第１命令３１１が第１命令バッファ（以下第１ＩＢと表す）３０１へ、命令バス３０５の[６３：３２]にある第２命令３１２が第２命令バッファ（以下第２ＩＢ）３０２へ、命令バス３０５の[９５：６４]にある第３命令３１３が第３命令バッファ（以下第３ＩＢ）３０３へ、命令バス３０５の[１２７：９６]にある第４命令３１４が第４命令バッファ（以下第４ＩＢ）３０４へ格納される。また、第１ＩＢ３０１は、セレクタ３０６により、命令メモリ１０１から読み出した第１命令３１１と第２ＩＢ３０２と第３ＩＢ３０３のどれを格納するか選択される。このセレクタ３０６は第２ＩＢ３０２および第３ＩＢ３０３に一旦格納された命令を第１ＩＢ３０１経由で第１命令デコーダ１０５で処理する場合に使用する。詳細の説明は後述の図７の説明で行う。
【００１２】
図４は、図１のプレスケジューラ１１０の内部構成図である。図４において、プレスケジューラ１１０は、スケジューリングパターン生成回路４０１と、ここで生成されたスケジューリングパターンを保持するスケジューリングパターンレジスタ４０２で構成される。スケジューリングパターン生成回路４０１は、命令メモリ１０１から読み込んだ４つの命令３１１〜３１４のオペレーションコード２０１（図２）内にある並列化命令ビット２０５の値からスケジューリングパターンを生成する。スケジューリングパターンレジスタ４０２は、スケジューリング生成回路４０１で生成されたスケジューリングパターンを保持する。
図５は、スケジューリングパターン生成回路４０１のブロック図である。図５において、５０１〜５０４はＡＮＤ回路、５０５はデコード回路である。スケジューリング生成回路４０１は第１命令の並列化ビットと第２命令の並列化ビットと第３の並列化ビットと第４の並列化ビットの値をデコード回路５０５でデコードしスケジューリングパターンを生成する。
図６は、図５のスケジューリングパターン生成回路４０１のスケジュールパターン生成値である。本実施例では、並列化命令ビット２０５は１ビットで命令コードの３１ビット目であり、スケジューリングパターンは以下の４つに分けることができる。
（１）第１ＩＢに格納されている命令と第２ＩＢに格納されている命令を並列処理
（２）第１ＩＢに格納されている命令と第３ＩＢに格納されている命令を並列処理
（３）第１ＩＢに格納されている命令と第４ＩＢに格納されている命令を並列処理
（４）第１ＩＢに格納されている命令のみ処理し、並列処理しない
スケジューリングパターン（１）では、命令３１１と命令３１２の並列化命令ビットが１の場合であり、命令３１３と命令３１４の並列化命令ビットに依存しない。スケジューリングパターン（２）では、命令３１１と命令３１３の並列化命令ビットが１で命令３１２の並列化命令ビットが０の場合であり、命令３１４の並列化命令ビットに依存しない。スケジューリングパターン（３）では、命令３１１と命令３１４の並列化命令ビットが１で命令３１２と命令３１３の並列化命令ビットが０の場合である。スケジューリングパターン（４）では、命令３１１の並列化命令ビットが０、または命令３１１の並列化ビットが１かつ命令３１２、命令３１３、命令３１４の並列化命令ビットが０の場合である。つまり、スケジューリング生成回路４０１は、命令３１１に格納されている命令が並列化可能であれば、命令３１２、命令３１３、命令３１４に格納されている命令の中から、並列処理可能な命令があるかどうかを検出し、並列処理可能な命令があった場合は、どの命令を命令３１１と並列処理するかを示すスケジューリングパターン生成を行う。
【００１３】
図７は、図１のスケジューラ１０４の構成を示すものである。図７において、スケジューラ１０４は命令選択部７０１と、パイプライン制御回路７０２で構成される。命令選択部７０１はスケジューリングパターンレジスタ４０２の値によって第２ＩＢ３０２、第３ＩＢ３０３、第４ＩＢ３０４に格納された命令を選択し第２命令デコーダ１０６へ発行する。第２命令デコーダ１０６へ発行する命令がない場合はパイプライン制御回路７０２がＮＯＰ（ＮＯ  Ｏｐｅｒａｔｉｏｎ）を選択し第２命令デコーダ１０６へ発行する。第１ＩＢ３０１に格納された命令は第１命令デコーダ１０５に発行され第２命令デコーダ１０６へは発行されない。パイプライン制御回路７０２は、スケジューリングパターンレジスタ４０２の値によって、第２ＩＢ３０２、第３ＩＢ３０３、第４ＩＢ３０４に格納されている命令間の依存性をチェックし、パイプラインを制御するためパイプライン制御信号７０３を生成する。
パイプライン制御信号７０３は第１命令３１１と第２ＩＢ３０２、第３ＩＢ３０３を選択するセレクタ３０６と、第２実行ユニット１０８を制御する。セレクタ３０６は、第２ＩＢ３０２または第３ＩＢ３０３に一旦格納した並列処理不可の命令を第１ＩＢ３０１，第１命令デコーダ１０５、第１実行ユニット１０７経由で実行させるときに使用する。これは、並列処理不可の命令は第１実行ユニット１０７でしか実行できないためである。
パイプライン制御信号７０３の第２実行ユニット１０８の制御は、第２実行ユニット１０８で実行する命令が第１実行ユニット１０７と依存関係にあるときに、第２実行ユニット１０８の実行サイクルを遅延させる場合に使用する。詳細の説明は後述の図１０〜図１３の説明で行う。
図８は、図７のパイプライン制御回路７０２のブロック図である。命令依存性検出回路８０１は、スケジューリングパターンレジスタ４０２の値によって、第２ＩＢ３０２、第３ＩＢ３０３、または第２ＩＢ３０２、第３ＩＢ３０３、第４ＩＢ３０４に格納されている命令間でレジスタまたはメモリへの書き込みがあった後に同じレジスタまたは同じアドレスへのメモリの書き込み（ライト・アフター・ライト）があるかや、レジスタまたはメモリへの書き込みがあった後に同じレジスタまたは同じアドレスへのメモリの読み出し（ライト・アフター・リード）があるかなどの依存性をチェックしパイプライン制御信号７０３を出力する。
【００１４】
次に命令のスケジューリングについて説明する。なお、ここでは各命令の依存関係はないものとする。（ある命令が終了しないと次の命令が実行できないものを依存関係が有るとする）
図９は、本発明の第１実施例の命令スケジューリングのタイミングチャートである。図９において、プロセッサ１１１（図１）はサイクル９０１ではプログラムカウンタ１０２の値（ＰＣ）に格納されている命令を命令メモリ１０１から読み出す。次のサイクル９０２では、９０１で読み出した４つの命令、命令Ａ、命令Ｂ、命令Ｃ、命令Ｄが第１ＩＢ３０１、第２ＩＢ３０２、第３ＩＢ３０３、第４ＩＢ３０４に格納される。この４つの命令ではスケジューリングパターンの（１）が成り立つとすると、プレスケジューラ１１０では、スケジューリングパターン生成回路４０１（図４）で生成されたスケジューリングパターン（１）がスケジューリングパターンレジスタ４０２（図４）へ格納される。スケジューリングパターン（１）の場合、第１ＩＢ３０１と第２ＩＢ３０２に格納された命令を並列処理する。よって、命令Ａと命令Ｂを並列処理するため第１命令デコーダ１０５には命令Ａが発行され、第２命令デコーダ１０６には命令Ｂが発行される。この時プログラムカウンタ１０２は＋２され、命令メモリ１０１からＰＣ＋２に格納されている命令を読み出す。
次のサイクル９０３では、９０２で読み出した４つの命令、命令Ｃ〜命令Ｆが第１ＩＢ３０１〜第４ＩＢ３０４に格納される。この４つの命令ではスケジューリングパターンの（２）が成り立つとすると、プレスケジューラ１１０では、スケジューリングパターン生成回路４０１で生成されたスケジューリングパターン（２）がスケジューリングパターンレジスタ４０２へ格納される。スケジューリングパターン（２）の場合、第１ＩＢ３０１と第３ＩＢ３０３に格納された命令を並列処理する。よって、命令Ｃと命令Ｅを並列処理するため第１命令デコーダ１０５には命令Ｃが発行され、第２命令デコーダ１０６には命令Ｅが発行される。このとき、第２ＩＢ３０２に格納されている命令Ｄは並列処理できない命令である。よって、第２ＩＢ３０２に格納されている命令Ｄは逐次処理し、プログラムカウンタ１０２を＋３する。
次のサイクル９０４では、第２ＩＢ３０２に格納された命令Ｄを第１命令デコーダ１０５へ発行する。このとき、パイプライン制御回路７０２がセレクタ３０６を制御し、第２ＩＢ３０２の命令を第１ＩＢ３０１に転送し、第１命令デコーダ１０５に発行する。また、第２命令デコーダ１０６へはＮＯＰ（ＮＯ  Ｏｐｅｒａｔｉｏｎ）を発行する。
そして、命令メモリ１０１からＰＣ＋３に格納されている命令を読み出す。
【００１５】
次のサイクル９０５では、９０４で読み出した４つの命令、命令Ｆ〜命令Ｉが第１ＩＢ３０１〜第４ＩＢ３０４に格納される。この４つの命令ではスケジューリングパターンの（３）が成り立つとすると、プレスケジューラ１１０では、スケジューリングパターン生成回路４０１で生成されたスケジューリングパターン（３）がスケジューリングパターンレジスタ４０２へ格納される。スケジューリングパターン（３）の場合、第１ＩＢ３０１と第４ＩＢ３０４に格納された命令を並列処理する。よって、命令Ｆと命令Ｉを並列処理するため第１命令デコーダ１０５には命令Ｆが発行され、第２命令デコーダ１０６には命令Ｉが発行される。この時、第２ＩＢ３０２に格納されている命令Ｇおよび第３ＩＢ３０３に格納されている命令Ｈは並列処理できない命令であるため、第２ＩＢ３０２に格納されている命令Ｇと第３ＩＢ３０３に格納されている命令Ｈは並列処理せず逐次処理し、プログラムカウンタ１０２を＋４する。
次のサイクル９０６では、第２ＩＢ３０２に格納された命令Ｇをセレクタ３０６経由で第１命令デコーダ１０５へ発行し、第２命令デコーダ１０６へはＮＯＰ（ＮＯ  Ｏｐｅｒａｔｉｏｎ）を発行する。
次のサイクル９０７では、第３ＩＢ３０３に格納された命令Ｈをセレクタ３０６経由で第１命令デコーダ１０５へ発行し、第２命令デコーダ１０６へはＮＯＰ（ＮＯ  Ｏｐｅｒａｔｉｏｎ）を発行する。この時、命令メモリからＰＣ＋４に格納されている命令を読み出す。
次のサイクル９０８では、９０７で読み出した４つの命令、命令Ｊ〜命令Ｍが第１ＩＢ３０１〜第４ＩＢ３０４に格納される。この４つの命令ではスケジューリングパターンの（４）が成り立つとすると、プレスケジューラ１１０では、スケジューリングパターン生成回路４０１で生成されたスケジューリングパターン（４）がスケジューリングパターンレジスタ４０２へ格納される。スケジューリングパターン（４）の場合、第１ＩＢ３０１に格納された命令Ｊが並列処理できない命令であるか、第１ＩＢ３０１に格納された命令Ｊのみ並列処理可能な命令で、第１ＩＢ３０１以外に格納された命令Ｋ、命令Ｌ、命令Ｍが並列処理できない命令の場合である。よって、第１ＩＢ３０１に格納された命令Ｊを第１命令デコーダ１０５へ発行し、第２命令デコーダ１０６へはＮＯＰ（ＮＯ  Ｏｐｅｒａｔｉｏｎ）を発行する。このとき、プログラムカウンタ１０２は＋１され、命令メモリ１０１からＰＣ＋１に格納されている命令を読み出す。
【００１６】
次に命令のスケジューリングで命令間に依存関係がある場合も考慮した場合の説明をする。
図１０〜図１３に各スケジューリングパターンのパイプライン制御信号７０３によるより詳細な制御を説明する。以下の説明では、ＩＦは命令フェッチステージ、ＤＥＣはデコードステージ、ＥＸＥは実行ステージ、ＷＢはライトバックステージを示す。
図１０は、本発明の第１実施例のスケジューリングパターン（１）のパイプライン動作のタイミングチャートである。以下例を使って本発明のパイプライン動作を説明する。命令Ａ〜命令Ｆを以下の命令とする。
ａ＝ｂ＋ｃ  ・・・命令Ａ
ｅ＝ｆ＋ｈ  ・・・命令Ｂ
ｂ＝ａ＋ｄ  ・・・命令Ｃ
ｇ＝ｂ＋ｃ  ・・・命令Ｄ
ｈ＝ａ−ｃ  ・・・命令Ｅ
ｄ＝ａ＋ｈ  ・・・命令Ｆ
この例では、命令Ａ、命令Ｂ、命令Ｃ、命令Ｄ、命令Ｅ、命令Ｆが並列化可能な命令で、命令Ｃと命令Ｄの命令間で依存関係を有し、命令Ｅと命令Ｆの命令間で依存関係を有する場合のパイプライン動作を示した例である。
パイプライン制御回路７０２は、命令Ａと命令Ｂの依存関係をデコードステージ１００２でチェックする。命令Ａと命令Ｂは依存関係がないため、パイプライン制御回路７０２はパイプライン制御信号を生成しない。次にパイプライン制御回路７０２は、命令Ｃと命令Ｄの依存関係をデコードステージ１００３でチェックする。このとき命令Ｄは、命令Ｃの実行が完了するまで実行ができない。よって、パイプライン制御回路７０２は、１００３のタイミングでパイプライン制御信号１０１０を生成する。（信号の符号は図７では７０３としたが、タイミングによる違いを示すためここでは１０１０とする）
パイプライン制御信号１０１０は、第２実行ユニット１０８の実行サイクルを１００４から１００５へ遅延（ストール）させる。次にパイプライン制御回路７０２は、命令Ｅと命令Ｆの依存関係をデコードステージ１００４でチェックする。また、デコードステージ１００４で命令Ｄと命令Ｅの依存関係もチェックする。このとき命令Ｆは、命令Ｅの実行が完了するまで実行ができない。また、命令Ｄと命令Ｅは依存関係がない。よって、パイプライン制御回路７０２は、１００４のタイミングでパイプライン制御信号１０１１を生成する。パイプライン制御信号１０１１は、第２実行ユニット１０８の実行サイクルを１００５から１００６へ遅延（ストール）させる。また、命令Ｄと命令Ｅは依存関係がないため、第１実行ユニット１０７の実行サイクルを１００５から１００６へ遅延（ストール）させない。
なお、レジスタファイルには第１実行ユニット１０７、第２実行ユニット１０８で実行された結果が格納される。
【００１７】
図１１は、本発明の第１実施例のスケジューリングパターン（２）のパイプライン動作を示すタイミングチャートである。以下例を使って本発明のパイプライン動作を説明する。命令Ａ〜命令Ｅを以下の命令とする。
ａ＝ｂ              ・・・命令Ａ
ｃ＝ｅ＊ｂ−ａ／ｄ  ・・・命令Ｂ
ｅ＝ｃ＋ｆ          ・・・命令Ｃ
ｂ＝ａ＊ｅ＋ｄ＊ｇ  ・・・命令Ｄ
ｈ＝ｄ＋ｃ          ・・・命令Ｅ
この例では、命令Ａと命令Ｃと命令Ｅが並列化可能な命令で、命令Ｂと命令ＤはＳＩＭＤ命令であり１つの命令で２つの実行ユニットを使用するため並列化できない命令で、命令Ｂと命令Ｃの命令間に依存関係を有した場合のパイプライン動作を示した例である。
パイプライン制御回路７０２は、命令Ａと命令Ｂと命令Ｃの依存関係をデコードステージ１１０２でチェックする。命令Ａと命令Ｃは依存関係がないが命令Ｂと命令Ｃは依存関係があり、命令Ｃは命令Ｂの実行が完了するまで実行ができない。よって、パイプライン制御回路７０２はパイプライン制御信号１１１０を生成する。パイプライン制御信号１１１０は、１１０２のタイミングにおいて、セレクタ３０６で第２ＩＢ３０２が選択されるようにする。次に、１１０３のタイミングでスケジューリングパターンレジスタ４０２をスケジューリングパターン（２）から（４）へ書き換え、第１ＩＢ３０１に第２ＩＢ３０２に格納されていた命令Ｂを格納する。
また、第２実行ユニット１０８へＮＯＰ（ＮＯ  Ｏｐｅｒａｔｉｏｎ）を発行し命令Ａのみ処理する。次に１１０３のタイミングでスケジューリングパターンが（４）となったため、１１０４のタイミングで第１ＩＢ３０１に格納された命令Ｂがデコードされる。また、第１ＩＢ１３０１には命令Ｃ、第２ＩＢ３０２には命令Ｄ、第３ＩＢ３０３には命令Ｅ、第４ＩＢ３０４には命令Ｆが格納され、スケジューリングパターンレジスタ４０２にはスケジューリングパターン（２）が設定される。パイプライン制御回路７０２は、命令Ｃと命令Ｄと命令Ｅの依存関係をデコードステージ１１０５でチェックする。命令Ｃと命令Ｄに依存関係がなく、命令Ｄと命令Ｅに依存関係がないため、パイプライン制御回路７０２はパイプライン制御信号７０３を生成しない。
【００１８】
図１２は、本発明の第１実施例のスケジューリングパターン（３）のパイプライン動作を示すタイミングチャートである。以下例を使って本発明のパイプライン動作を説明する。命令Ａ〜命令Ｄを以下の命令とする。
ａ＝ｂ              ・・・命令Ａ
ｃ＝ｇ＊ｈ−ｅ／ｄ  ・・・命令Ｂ
ｂ＝ａ＊ｇ＋ｄ＊ｇ  ・・・命令Ｃ
ｅ＝ａ＋ｆ          ・・・命令Ｄ
この例では、命令Ａと命令Ｄが並列化可能な命令で、命令Ｂと命令Ｃが並列化できない命令で、命令Ａと命令Ｄの命令間に依存関係を有した場合のパイプライン動作を示した例である。
パイプライン制御回路７０２は、命令Ａと命令Ｂと命令Ｃと命令Ｄの依存関係をデコードステージ１２０２でチェックする。命令Ａと命令Ｄは依存関係があり、命令Ｄは命令Ａの実行が完了するまで実行ができない。また、命令Ｂと命令Ｄは依存関係があり、命令Ｂは命令Ｄの実行が完了するまで実行ができない。よって、パイプライン制御回路７０２はパイプライン制御信号１２１０を生成する。パイプライン制御信号１２１０は、第２実行ユニット１０８の実行サイクルを１２０３から１２０４へ遅延（ストール）させる。次にパイプライン制御回路７０２は、１２０２のタイミングで行った命令間の依存関係のチェック結果から、命令Ｂと命令Ｄの依存関係を有していることを記憶しており、１２０３のタイミングでパイプライン制御信号１２１１を生成する。パイプライン制御信号１２１１は、第２実行ユニット１０８の実行サイクルを１２０４から１２０５へ遅延（ストール）させる。
【００１９】
図１３は、本発明の第１実施例のスケジューリングパターン（４）のパイプライン動作を示すタイミングチャートである。以下例を使って本発明のパイプライン動作を説明する。命令Ａ〜命令Ｄを以下の命令とする。
ａ＝ｂ              ・・・命令Ａ
ｃ＝ｄ＊ｇ＋ｅ／ｄ  ・・・命令Ｂ
ｂ＝ａ＊ｅ＋ｄ＊ｇ  ・・・命令Ｃ
ｅ＝ａ＊ｆ＋ｈ＊ａ  ・・・命令Ｄ
この例では、命令Ａが並列化可能な命令で、命令Ｂと命令Ｃと命令Ｄが並列化できない命令の場合のパイプライン動作を示した例である。スケジューリングパターン（４）の場合命令を並列処理せず逐次的に処理していくため命令の依存性チェックを行う必要がない。また、命令選択部７０１ではＮＯＰ（ＮＯ  Ｏｐｅｒａｔｉｏｎ）が選択され、第２命令デコーダ１０６へ発行される。
【実施例２】
【００２０】
次に第２実施例として分岐命令がある場合について説明する。
図１４は、本発明の第２実施例の命令フォーマットである。図２の第１実施例におけるオペレーションコード２０１内に分岐命令であることを示す分岐命令ビット１４０１が３０ビット目に追加されている。
図１５は、本発明の第２実施例のプレスケジューラの内部構成図である。スケジューリングパターン生成回路１５０１は、図５の第１実施例におけるスケジューリングパターン生成回路４０１に分岐命令ビット１４０１が追加されている。
図１６は、本発明の第２実施例のスケジューリングパターン生成回路１５０１におけるスケジューリングパターン生成値である。第２ＩＢ３０２と第３ＩＢ３０３の分岐命令ビット１４０１である３０ビット目の値によりスケジューリングパターン生成値が異なる。ここで、分岐命令ビット１４０１は、第２ＩＢ３０２は図１６の命令バス［６２］の欄、第３ＩＢ３０３は命令バス［９４］の欄の値である。スケジューリングパターン（１）と（４）は、インオーダ実行となるため、分岐命令があるかどうかをプレスケジューラ１０１でチェックする必要はない。スケジューリングパターン（２）と（３）では、アウトオブオーダ実行であるため、スケジューリングパターン（２）では、第２ＩＢ３０２に格納されている命令が分岐命令かどうか、スケジューリングパターン（３）では第２ＩＢ３０２と第３ＩＢ３０３に格納されている命令が分岐命令かどうかを確認する。そして、分岐命令があればスケジューリングパターン生成回路１５０１はスケジューリングパターン（４）を生成し、インオーダ実行させる。
【００２１】
図１７は、本発明の第２実施例の命令スケジューリングのタイミングチャートである。図１７において、１７１０は、図９の第１実施例におけるスケジューリングパターン（２）であり、１７１１は、図９の第１実施例におけるスケジューリングパターン（３）である。図１７が図９の第１実施例と異なる点は、分岐命令があるかないかである。ここで、命令Ｄと命令Ｃ１が分岐命令である。１７０２のタイミングで命令メモリ１０１から命令Ｃ、命令Ｄ、命令Ｅ、命令Ｆを読み出し、スケジューリングパターン生成回路１５０１でスケジューリングパターンを生成する。この時、命令Ｄの分岐命令ビット１４０１（命令バスの６２ビット目）が１であるためスケジューリングパターン生成回路１５０１は、スケジューリングパターン（４）を生成する。１７０３のタイミングでスケジューリングパターンレジスタ４０２にスケジューリングパターン（４）が格納され、命令選択部７０１ではＮＯＰが選択され、スケジューラ１０４は第２命令デコーダ１０６へＮＯＰを発行する。次に１７０４のタイミングで分岐命令である命令Ｄが第１ＩＢ３０１へ格納される。このとき、命令Ｄは分岐命令であるため、スケジューリングパターンレジスタ４０２にはスケジューリングパターン（４）が格納される。
次に１７０５のタイミングでＤＩＳＰ（分岐先アドレス）が計算され、命令メモリ１０１から命令Ａ１、命令Ｂ１、命令Ｃ１、命令Ｄ１を読み出し、スケジューリングパターン生成回路１５０１でスケジューリングパターンを生成する。
このとき、命令Ｃ１の分岐命令ビット（命令バスの９４ビット目）１４０１が１であるためスケジューリングパターン生成回路１５０１は、スケジューリングパターン（４）を生成する。１７０６のタイミングでスケジューリングパターンレジスタ４０２にスケジューリングパターン（４）が格納され、命令選択部７０１ではＮＯＰが選択され、スケジューラ１０４は第２命令デコーダ１０６へＮＯＰを発行する。以降分岐命令である命令Ｃ１が第１ＩＢ３０１に格納される１７０８のタイミングまでスケジューリングパターンレジスタ４０２にはスケジューリングパターン（４）が格納され逐次的に命令処理が行われる。ここで図１７において命令バス[６２]と命令バス[９４]の値が“Ｘ”となっている所は「Ｄｏｎ‘ｔ  ｃａｒｅ」であることを示す。
【００２２】
以上のように本発明では、命令コードに並列化命令ビットを設けることにより、並列化命令ビットがセットされていない命令についてはスケジューリングする必要がなくなるため、スケジューリング時の命令間の依存性チェックを簡潔にすることができる。
また、複数の命令をグループ化し、グループ内の命令でアウトオブオーダ実行を行い、グループ単位ではインオーダ実行とすることで複雑な処理を必要とすることなく並列度を向上することが可能となる。また、本発明を好適実施例に基づき具体的に説明したが、本発明は上記実施例に限定されるものではなく、その要旨を逸脱しない範囲で種々変更することが可能である。
【産業上の利用可能性】
【００２３】
本発明はＣＰＵを搭載したＬＳＩを使用したシステムにおいて広く適用可能である。
【符号の説明】
【００２４】
１０１  命令メモリ
１０２  プログラムカウンタ
１０３  命令バッファ
１０４  スケジューラ
１０５  第１命令デコーダ
１０６  第２命令デコーダ
１０７  第１実行ユニット
１０８  第２実行ユニット
１０９  レジスタファイル
１１０  プレスケジューラ
１１１  プロセッサ
２０１  オペレーションコード
２０２  ディスティネーションアドレス
２０３  ソース部Ａ
２０４  ソース部Ｂ
２０５  並列化命令ビット
３０１〜３０４  第１ＩＢ〜第４ＩＢ（第１命令バッファ〜第４命令バッファ）
３０５  命令バス
３０６  セレクタ
３１１〜３１４  命令
４０１、１５０１  スケジューリングパターン生成回路
４０２  スケジューリングパターンレジスタ
５０１〜５０４  ＡＮＤ回路
５０５  デコード回路
７０１  命令選択部
７０２  パイプライン制御回路
７０３、１０１０、１０１１、１１１０、１２１０、１２１１  パイプライン制御信号
１４０１  分岐命令ビット
【図１】
2011128672.tif 000003
【図２】
2011128672.tif 000004
【図３】
2011128672.tif 000005
【図４】
2011128672.tif 000006
【図５】
2011128672.tif 000007
【図６】
2011128672.tif 000008
【図７】
2011128672.tif 000009
【図８】
2011128672.tif 000010
【図９】
2011128672.tif 000011
【図１０】
2011128672.tif 000012
【図１１】
2011128672.tif 000013
【図１２】
2011128672.tif 000014
【図１３】
2011128672.tif 000015
【図１４】
2011128672.tif 000016
【図１５】
2011128672.tif 000017
【図１６】
2011128672.tif 000018
【図１７】
2011128672.tif 000019
【図１８】
2011128672.tif 000020
【図１９】
2011128672.tif 000021