(57)【特許請求の範囲】
【請求項１】
検査対象として比較すべき命令列、当該命令以前の命令との依存関係、当該命令を複製するか否かを示すコピー指示、及び当該命令の発行間隔の設定値を含む情報を格納する比較命令格納手段と、
前記比較命令格納手段が格納する情報が示す命令と実行中の命令とが一致するか否かを判定する命令比較手段と、
前記命令比較手段によって、命令が一致し且つコピー指示が当該命令を複製することを示すと判定された場合、当該命令の複製であるコピー命令を複数生成する命令制御手段と、
前記設定値に設定された発行間隔に従って命令を発行するスケジュール設定手段と、
前記スケジュール設定手段が発行する前記コピーの元となった命令及び前記複数のコピー命令を実行し、この実行結果を多数決処理によりチェックする多数決処理チェック手段と
を備えることを特徴とするマイクロプロセッサ。
【請求項２】
前記コピー命令として、偶数個の命令を生成することを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記多数決処理チェック手段は、前記コピーの元となった命令と、前記偶数個のコピー命令とから、多数決処理により１命令を選ぶことを特徴とする請求項２に記載のマイクロプロセッサ。
【請求項４】
検査対象として比較すべき命令列、当該命令以前の命令との依存関係、当該命令を複製するか否かを示すコピー指示、及び当該命令の発行間隔の設定値を含む情報を登録する工程と、
前記登録した命令と実行中の命令とが一致するか否かを判定する工程と、
命令が一致し且つコピー指示が当該命令を複製することを示すと判定された場合、当該命令の複製であるコピー命令を複数生成する工程と、
前記設定値に設定された発行間隔に従って命令を発行する工程と、
前記コピーの元となった命令及び前記複数のコピー命令を実行し、この実行結果を多数決処理によりチェックする工程とを含む
ことを特徴とするマイクロプロセッサのデバッグ方法。
【請求項５】
前記コピー命令は、前方に存在する命令が完了するまで実行しない発行間隔に設定し、
命令列中の最後の命令から１命令ずつコピー指示を前の命令に移動させながらプログラムを実行し、多数決処理チェックの結果を確認することで、論理動作不正の発生する命令を特定する
ことを特徴とする請求項４に記載のマイクロプロセッサのデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサ及びマイクロプロセッサのデバッグ方法に関するもので、特に、内部の論理不正動作の調査の容易化に係わる。
【背景技術】
【０００２】
近年、半導体プロセスの微細化により、マイクロプロセッサ内の論理回路の数は飛躍的に増加し、その制御論理は複雑さを増している。マイクロプロセッサを設計開発する上でのチェック手段やシミュレーション環境は充実してきている。しかしながら、タイミングや競合条件によって発生する非常にまれな論理動作不正については、シミュレーションと異なり、内部状態の観測が難しいため、論理動作不正を引き起こす命令列を調査・特定し、解決するまでに、長期間必要になることが多い。
【０００３】
マイクロプロセッサ内部の動作履歴の収集・保存を行い観測するための技術としては、マイクロプロセッサ内部の動作履歴を収集・保存し、外部に出力することで、内部状態を観測し論理動作不正の調査を容易化するものがある。また、命令列を特定した後の回避手段に関しては、論理動作不正を引き起こす命令列を比較・検出してハードウェアが割り込みを発生させることにより、ソフトウェアでバグ回避コードを動作させる技術がある（例えば特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−７６５７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、マイクロプロセッサ内部の動作履歴の収集・保存を行い観測する技術のみでは、収集した情報を解析するのに時間がかかり、論理動作不正の原因を究明するまでに時間を要することが多い。また、割込みを発生させる技術の場合には、ハードウェア単独では論理動作不正を回避することができず、回避コードを実行するためにＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）あるいはコンパイラの改造とアプリケーションのリコンパイルが必要になる。さらに、回避手段として割り込みを用いるためアプリケーションの実行速度が著しく低下するという問題があった。
【０００６】
上述の課題を鑑み、本発明は、内部の論理不正動作の調査を容易化できるマイクロプロセッサ及びマイクロプロセッサのデバッグ方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は上記の課題を解決するためになされたものであり、検査対象として比較すべき命令列、当該命令以前の命令との依存関係、当該命令を複製するか否かを示すコピー指示、及び当該命令の発行間隔の設定値を含む情報を格納する比較命令格納手段と、前記比較命令格納手段が格納する情報が示す命令と実行中の命令とが一致するか否かを判定する命令比較手段と、前記命令比較手段によって、命令が一致し且つコピー指示が当該命令を複製することを示すと判定された場合、当該命令の複製であるコピー命令を複数生成する命令制御手段と、前記設定値に設定された発行間隔に従って命令を発行するスケジュール設定手段と、前記スケジュール設定手段が発行する前記コピーの元となった命令及び前記複数のコピー命令を実行し、この実行結果を多数決処理によりチェックする多数決処理チェック手段とを備えることを特徴とするマイクロプロセッサである。
【０００８】
また、本発明は、検査対象として比較すべき命令列、当該命令以前の命令との依存関係、当該命令を複製するか否かを示すコピー指示、及び当該命令の発行間隔の設定値を含む情報を登録する工程と、前記登録した命令と実行中の命令とが一致するか否かを判定する工程と、命令が一致し且つコピー指示が当該命令を複製することを示すと判定された場合、当該命令の複製であるコピー命令を複数生成する工程と、前記設定値に設定された発行間隔に従って命令を発行する工程と、前記コピーの元となった命令及び前記複数のコピー命令を実行し、この実行結果を多数決処理によりチェックする工程とを含むことを特徴とするマイクロプロセッサのデバッグ方法である。
【発明の効果】
【０００９】
本発明によれば、単独のマイクロプロセッサにおいて論理動作不正の発生する命令を特殊な解析なしで特定することが可能になり、調査を容易化できる。また、多数決処理チェックの結果を観測することで、正しく論理動作不正が回避できているか確認できる。また、ハードウェアのみで論理動作不正を回避することができる。また、スケジューラーの発行条件を設定して論理動作不正の発生しない最小のタイミングに設定することで性能低下の影響を最小にでき、割込みとソフトウェアによる手段とによる解析と比較して、性能が向上する。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施形態に係るマイクロプロセッサの構成を示すブロック図である。
【図２】本発明の第１の実施形態に係るマイクロプロセッサにおける命令検出制御部の構成を示すブロック図である。
【図３】本発明の第１の実施形態に係るマイクロプロセッサにおけるロード・ストア命令パイプのデータチェック制御部の構成を示すブロック図である。
【図４】本発明の第１の実施形態に係るマイクロプロセッサにおける演算命令パイプのデータチェック制御部の構成を示すブロック図である。
【図５】本発明の第１の実施形態に係るマイクロプロセッサにおける命令フォーマットの一例の説明図である。
【図６】本発明の第１の実施形態に係るマイクロプロセッサにおける比較命令格納バッファの登録可能な設定値の一例の説明図である。
【図７】本発明の第１の実施形態に係るマイクロプロセッサにおける命令デコーダーから送られた論理動作不正の発生する命令列の一例の説明図である。
【図８】本発明の第１の実施形態に係るマイクロプロセッサにおけるデバッグ時の比較命令格納バッファの登録内容の一例の説明図である。
【図９】本発明の第１の実施形態に係るマイクロプロセッサにおける通常時の比較命令格納バッファの登録内容の一例の説明図である。
【図１０】本発明の第１の実施形態に係るマイクロプロセッサにおける命令検出制御部で命令のコピー処理を行った後の命令列の一例の説明図である。
【図１１】本発明の第１の実施形態に係るマイクロプロセッサにおける命令検出制御部で命令のコピー処理を行った後の命令列の一例の説明図である。
【図１２】本発明の第１の実施形態に係るマイクロプロセッサにおける実行処理の説明に用いるタイミングチャートである。
【図１３】本発明の第１の実施形態に係るマイクロプロセッサにおける実行処理の説明に用いるタイミングチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について図面を参照しながら説明する。図１は、本発明の第１の実施形態に係るマイクロプロセッサの内部構成を示すものである。
【００１２】
本発明の第１の実施形態に係るマイクロプロセッサは、図１に示すように、命令キャッシュ１０と、デコーダー１１と、命令検出制御部１２と、スケジューラー１３と、演算器２０と、データキャッシュ（ＡＡ：アドレスアレイ）２１と、データチェック制御部２２と、データキャッシュ（ＤＡ：データアレイ）２３と、リクエスト制御部２４と、演算器３０と、データチェック制御部３１と、レジスタ３２とを有している。また、それぞれの構成要素を接続する信号線１００、１１０、１２０、１３０、１３１、２００、２１０、２２０、２２１、２３０、２４０、２４１、２４２、２４３、３００、３１０、３２０を有している。
【００１３】
命令キャッシュ１０は、フェッチ部（図示せず）がメインメモリ（図示せず）からフェッチした命令を格納する。
デコーダー１１は、プログラムカウンタ（図示せず）に従って、命令キャッシュ１０が格納する命令を解析する。
命令検出制御部１２は、検査対象として比較すべき命令列や、当該命令以前の命令との依存関係などを含む情報を内部バッファに格納し、当該格納された情報とデコーダー１１から出力された命令とを比較する。また、命令検出制御部１２の内部バッファに格納された情報には、デコーダー１１から出力された命令の複製であるコピー命令を出力するか否かを示すコピー指示フラグが含まれる。当該コピー指示フラグが「有効」、すなわちコピー命令を出力することを示す場合において、当該コピー指示フラグを含む情報とデコーダー１１から出力された命令とが一致するとき、命令検出制御部１２は、デコーダー１１から出力された命令のコピー命令を出力する。
スケジューラー１３は、命令の発行間隔のスケジューリングを行う。
【００１４】
演算器２０、データキャッシュ（ＡＡ）２１、データチェック制御部２２、データキャッシュ（ＤＡ）２３は、ロード・ストアパイプを構成している。ロード・ストアパイプとは、パイプライン処理によってロード命令・ストア命令を実行する構成のことである。
データチェック制御部２２は、多数決処理により、データ・アドレスのチェックを行う。具体的には、データチェック制御部２２は、演算器２０が処理した命令検出制御部１２が出力した命令及び当該命令のコピー命令の実行結果を比較し、それぞれの命令で異なる値が出力された場合に、出力結果が同値となるものが多いものを実行結果として採用する。
リクエスト制御部２４は、外部との間で、リクエストの入出力を行う。
【００１５】
演算器３０、データチェック制御部３１、レジスタ３２は、演算命令パイプを構成している。演算命令パイプとは、パイプライン処理によって演算命令を実行する構成のことである。
データチェック制御部３１は、多数決処理により、データのチェックを行う。このことについては後に説明する。
【００１６】
図２は、命令検出制御部１２の構成を示すものである。命令検出制御部１２は、図２に示すように、比較命令格納バッファ４０、命令比較部４１、命令トレーサー４２、命令制御部４３を有している。また、それぞれの構成要素を接続する信号線４００、４０１、４０２、４１０、４１１、４２０、４３０を有している。
【００１７】
比較命令格納バッファ４０には、検査対象として比較すべき命令列や依存関係などを含む情報が登録される。なお、比較命令格納バッファ４０に登録される命令列や依存関係については後に説明する。
命令比較部４１は、実際の命令と、比較命令格納バッファ４０に登録されている設定が一致しているかをチェックし、比較結果が一致している場合は、比較命令格納バッファ４０へ次エントリーの命令を出力するように指示する。また、コピー指示が「有効」の場合には、コピー動作を行うように、命令制御部４３へ出力する。
命令トレーサー４２は、実行している命令の履歴を取得し、内部メモリーに保存する。また、内部メモリーに登録されたデータは論理動作不正の解析に用いられる。
命令制御部４３は、スケジューラー１３へ命令を出力する。
【００１８】
図３は、ロード・ストア命令パイプのデータチェック制御部２２の構成を示すものである。データチェック制御部２２は、図３に示すように、コピー命令チェック部５０と、データ・アドレスバッファ５１と、多数決チェック部５２とを有している。また、それぞれの構成要素を接続する信号線５００、５０１、５０２、５０３、５１０、５２０、５２１、５２２、５２３を有している。
【００１９】
コピー命令チェック部５０は、演算器２０によって実行された命令がコピー命令であるか否かをチェックする。
データ・アドレスバッファ５１は、実行された命令のデータ・アドレスを格納する。
多数決チェック部５２は、多数決処理を行い、奇数個の命令から１命令を選び、データキャッシュ（ＤＡ）２３へ書き込む。また、多数結処理チェック部５２は、リクエスト制御部２４へストア命令（命令・データ・アドレス）を出力する。
【００２０】
図４は、演算命令パイプのデータチェック制御部３１の構成を示すものである。データチェック制御部３１は、図４に示すように、コピー命令チェック部６０、データバッファ６１、多数決チェック部６２を有している。また、それぞれの構成要素を接続する信号線６００、６０１、６０２、６０３、６１０、６２０、６２１、６２２を有している。
【００２１】
コピー命令チェック部６０は、演算器３０によって実行された命令がコピー命令であるかをチェックする。
データバッファ６１は、実行された命令のデータを保存する。
多数決チェック部６２は、多数決処理を行い、奇数個の命令から１命令を選び、レジスタ３２へデータを出力する。
【００２２】
次に、本発明の第１の実施形態に係るマイクロプロセッサのデバッグ動作の概要について説明する。本発明の第１の実施形態に係るマイクロプロセッサの特徴は、図１に示すように、命令検出制御部１２と、データチェック制御部２２及びデータチェック制御部３１とを有していることである。これにより、単独のマイクロプロセッサにおいて論理動作不正の発生する命令を容易に解析することができる。
【００２３】
つまり、本発明の第１の実施形態では、予め論理動作不正が発生する命令列を、命令検出制御部１２の比較命令格納バッファ４０（図２参照）に格納しておき、動作不正の発生するプログラムを動作させる。当該プログラムの動作により、命令比較部４１は、実際に実行している命令と比較命令格納バッファ４０に記憶されている命令とを比較し、コピー指示が「有効」である命令を検出すると、命令制御部４３にコピー命令を生成する。このとき、命令制御部４３は、多数決処理を行うために、元の命令と合わせて奇数個となる個数のコピー命令、すなわち偶数個のコピー命令を生成する。
【００２４】
デバッグを行う際、予め命令検出制御部１２の比較命令格納バッファ４０が格納する命令の発行間隔を、前方に存在する全命令が完了する間隔に設定しておく。これにより、元々プログラム中に存在した命令は、通常のタイミングで動作するが、後続のコピーされた偶数個の命令は、前方に存在する命令が完了するまで実行しない。このように動作することで、後続の偶数個のコピー命令はマイクロプロセッサを専有して１命令のみ動作しているので、タイミングや競合による論理動作不正が発生しない。したがって、最終的に多数決処理でデータをチェックすると、元々存在した命令の不正な結果は破棄され、コピー命令動作時の正しい結果が得られる。
【００２５】
上記のような機能は、論理動作不正が発生する命令列を比較命令格納バッファ４０に記憶できる程度の命令数に絞り込んだ後に使用する。特に、命令列中の最後の命令から１命令ずつコピー指示を前の命令に移動させながらプログラムを実行し、多数決処理チェックの結果を確認することで、論理動作不正の発生する命令を特殊な解析なしで機械的に特定することが可能になる。また、このような機能を含むことで、本発明によるマイクロプロセッサは、ハードウェアのみで論理動作不正を回避できる。さらに、通常時は後続のコピー命令の発行間隔を論理動作不正の発生しない最小のタイミングに設定することで、性能低下を最小限に抑え、割り込みを用いた方法と比較すると性能を向上させることができる。
【００２６】
次に、命令検出制御部１２の比較命令格納バッファ４０への設定内容について、具体的に説明する。図５に本発明の第１の実施形態に係るマイクロプロセッサで利用する命令フォーマットを示す。この例では、ソースレジスタは２個（レジスタ（Ｓ１）、（Ｓ２））、デスティネーションレジスタは１個（レジスタ（Ｄ））の３オペランド形式とする。
【００２７】
図６は、命令検出制御部１２の比較命令格納バッファ４０に格納する情報の各パラメータを示す図である。比較命令格納バッファ４０への設定方法として、以下のようなものが考えられる。ソフトウェア（ＳＷ）によって情報を設定する方法としてデコーダー１１から信号線４００を介して設定する方法がある。また、ハードウェア（ＨＷ）によって情報を設定する方法として外部から信号線４０１を介して設定する方法がある。あるいは、命令トレーサー４２で事前に採取した命令を、信号線４２０を介して設定するようにしても良い。上記の設定方法は一例であり、その他の設定方法も考えられる。
【００２８】
図６において、Ｖｂｉｔ（Ｖａｌｉｄ  ｂｉｔ）の項目にはエントリーが「有効」あるいは「無効」であるかを設定する。オペコードの項目にはオペコードを設定する。レジスタ番号（Ｄ）には、図５に示した命令フォーマットのデスティネーションレジスタＤの値を設定する。レジスタ番号（Ｓ１）の項目には、ソースレジスタＳ１の値を設定する。レジスタ番号（Ｓ２）の項目には、ソースレジスタＳ２の値を設定する。ただし、上記レジスタ番号の設定が不要の場合は「指定なし」を設定することで比較不要にすることも可能である。
【００２９】
依存関係（Ｄ）の項目には、デスティネーションレジスタが前方にある命令と依存関係を持つ場合に、依存元の命令が登録されているエントリー番号を設定する。依存関係（Ｓ１）の項目には、ソースレジスタ（Ｓ１）が前方にある命令と依存関係を持つ場合に、依存元の命令が登録されているエントリー番号を設定する。依存関係（Ｓ２）の項目には、ソースレジスタ（Ｓ２）が前方にある命令と依存関係を持つ場合に依存元の命令が登録されているエントリー番号を設定する。それぞれ、依存関係のない場合は「依存なし」を設定する。
【００３０】
コピー指示の項目には、「有効」あるいは「無効」が設定される。「有効」の場合、命令検出制御部１２は、該当命令を検出した場合にコピー命令を発生させる。コピー命令を発生する数は、多数決処理を行うために、元の命令を含めて奇数となる個数、すなわちコピーする命令数は偶数個になる。以下の例では、コピーする命令数を２個として説明を行うが、４個以上の構成でもよい。コピーする命令数が２個である場合は、（元の命令（１個）＋コピー命令（２個））となるので、同じ命令が３回実行されることとなる。発行間隔の項目は、スケジューラー１３がコピー命令を演算器へ投入する時の直前の命令との発行間隔の設定になる。設定された値のクロック時間待ってからコピー命令は発行される。
なお、命令検出制御部１２は、コピー元となる命令のフレームにおいて、コピー元の命令であることを示すコピー元ｂｉｔを「有効」を示す値に書き換える。また、命令検出制御部１２は、コピー命令のフレームにおいて、コピー命令であることを示すコピーｂｉｔを「有効」を示す値に書き換える。
【００３１】
次に、具体的な例を用いてマイクロプロセッサの処理を説明する。
図７は、マイクロプロセッサで実行されるプログラムの一例であり、図８は、これに対するデバッグ時の比較命令格納バッファ４０の登録内容の一例である。図７において、ＬＤはロード命令であり、ＡＤＤは加算命令であり、ＳＴはストア命令である。
【００３２】
図８に示すように、各エントリー毎に、図６に示した設定例に従って、比較命令格納バッファ４０に登録内容が設定される。ここでは、論理動作不正を発生させる命令がまだ完全に特定できていないため、動作不正を起こす可能性のある命令列中の最後の命令であるエントリー番号「４」のＳＴ命令に対して、コピー指示が「有効」になっている。デバッグ時は、直前の命令が完了した後でコピー命令を動作させる必要があるため、発行間隔は充分大きな値、例えば４０９６クロックという値に設定されている。この後で、実際にプログラムを動作させ、多数決処理チェックを行い、コピー指示を１命令ずつ前の命令に移動させることで、不正の発生する命令を機械的に特定する。
【００３３】
不正の発生する命令を特定した後は、詳細な解析を行い理論的に論理動作不正が発生しない発行間隔を求めてもよいし、（発行間隔＝１）から機械的に発行間隔の設定値を大きくし、不正の発生しない設定値を多数決処理チェックの結果を確認しながら見つけるようにしてもよい。上記例のようにデバッグを終えた後で、通常時の動作を設定する。
【００３４】
図９は、通常時の比較命令格納バッファ４０の登録内容の例を示すものである。図９に示すように、発行間隔は論理動作不正の発生しない最小の値（図９では例えば「２」に設定）を設定することで、多数決処理チェックにより不正を起こさずに可能な限り性能を向上させることができる。
【００３５】
次に、デバッグ時の命令検出制御部１２の動作について説明する。図２に示したように、命令検出制御部１２は、比較命令格納バッファ４０と、命令比較部４１と、命令トレーサー４２と、命令制御部４３とを有している。
【００３６】
図２において、命令は、デコーダー１１から信号線４００を介して比較命令格納バッファ４０、命令比較部４１、命令トレーサー４２、命令制御部４３に送られる。比較命令格納バッファ４０への信号線４００は、ソフトウェア（ＳＷ）で設定をライトするために使用する。
【００３７】
命令比較部４１は、デコーダー１１から信号線４００を介して送られてくる命令と比較命令格納バッファ４０から信号線４０２を介して送られてくる設定が一致しているかチェックする。比較結果が一致している場合は、信号線４１１を介して比較命令格納バッファ４０へ次エントリーの命令を出力するように指示する。また、コピー指示が「有効」の場合はコピー命令を生成して信号線４１０を介して命令制御部４３へ出力する。比較結果が一致していない場合は、信号線４１１を介して比較命令格納バッファ４０へ先頭エントリーの出力に戻すように指示する。また、その場合、比較結果が不一致であることを、信号線４１０を介して命令制御部４３へ出力する。
【００３８】
命令トレーサー４２は、実行している命令の履歴を取得し、内部メモリーに保存する。命令トレーサー４２に登録されているデータは論理動作不正の解析のために用いられる。観測方法は、信号線４２０を介して、ソフトウェア（ＳＷ）の命令で出力してもよいし、ハードウェア（ＨＷ）の作りこみでＬＳＩの外部へ出力してもよい。
【００３９】
命令制御部４３は、命令比較結果を利用してコピー命令を使用するかあるいは通常の命令を使用するかを判断した後で、信号線４３０を介してスケジューラー１３へ命令を出力する。具体的には、命令比較部４１が、デコーダー１１から送られてきた命令と命令格納バッファ４０から送られてくる情報が示す設定とが一致すると判定した場合において、比較命令格納バッファ４０から取得した情報のコピー指示が「有効」である場合に、コピー命令を使用すると判断し、コピー指示が「無効」である場合に、コピー命令を使用しないと判断する。
【００４０】
次に、スケジューラー１３による命令発行間隔の制御について説明する。スケジューラー１３は、命令検出制御部１２より送られてきた命令に関して発行間隔のチェックを行う。発行間隔が「０」でない命令は指定されたクロック時間の間だけ命令発行を遅らせる。例えば、発行間隔が「２」の場合、直前に発行した命令に対して２クロック待ってから該当命令を発行する。デバッグ時は、この発行間隔を充分大きい値に設定することで、該当命令がマイクロプロセッサを専有して１命令のみ動作する状態を作り出し、タイミングや競合による論理動作不正の発生を防ぐ。命令の種類によってロード・ストア命令は信号線１３０を介して演算器２０へ発行される。また、通常の演算命令は信号線１３１を介して演算器３０へ発行される。
【００４１】
次に、各命令の動作について説明する。図１において、演算器２０と演算器３０は、それぞれ入力オペランドに従ってレジスタリードの場合は信号線３２０を介してデータを入力する。フォワーディングデータを使用する場合は信号線３１０を介してデータを入力する。その後で、指定された演算を行う。演算を行った命令は、演算器２０を使用した場合は信号線２００を介してデータキャッシュ（ＡＡ）２１とデータチェック制御部２２とデータキャッシュ（ＤＡ）２３へ送られる。また、演算器３０を使用した場合は信号線３００を介してデータチェック制御部３１へ送られる。この後は命令によって動作が異なるので分けて説明をする。
【００４２】
（１）ロード・ストアパイプの動作
データチェック制御部２２がデータチェックを行うのは、レジスタあるいはデータキャッシュなどの内部資源にライトして内部状態が変化するときのみでよい。ここで、データキャッシュへのライトが発生するのはストア命令のキャッシュヒット時とロード命令のキャッシュミス時（キャッシュフィルによるライト）の２通り存在する。
【００４３】
ａ．ストア命令
ストア命令実行時、データチェック制御部２２は、データキャッシュ（ＡＡ）２１にアクセスし、キャッシュヒット／ミスの情報を、信号線２１０を介して取得する。
以下に、メインメモリーへの書き込み方式がライトバック方式である場合とライトスルー方式である場合との動作をそれぞれ説明する。
【００４４】
・ライトバック方式の場合
データチェック制御部２２は、まず多数決処理によるチェックを行う。その後、データチェック制御部２２が取得したキャッシュヒット／ミスの情報がキャッシュヒットを示す場合、データチェック制御部２２は、信号線２２０を介してデータキャッシュ（ＤＡ）２３へライトする。他方、データチェック制御部２２が取得したキャッシュヒット／ミスの情報がキャッシュミスを示す場合は、信号線２２１を介してリクエスト制御部２４へ命令を出力する。リクエスト制御部２４は信号線２４０を介して当該命令をマイクロプロセッサの外部へ出力する。
【００４５】
・ライトスルー方式の場合
データチェック制御部２２は、まず多数決処理によるチェックを行う。その後、データチェック制御部２２が取得したキャッシュヒット／ミスの情報がキャッシュヒットを示す場合、信号線２２０を介してデータキャッシュ（ＤＡ）２３へライトする。また、データチェック制御部２２は、キャッシュヒット／ミスにかかわらず、信号線２２１を介してリクエスト制御部２４へ命令を出力する。リクエスト制御部２４は信号線２４０を介して当該命令をマイクロプロセッサ外部へ出力する。
【００４６】
図３を用いてロード・ストア命令パイプのデータチェック制御部の詳細な動作について説明する。
図３において、コピー命令チェック部５０に、演算器２０から信号線５００を介して命令・データ・アドレスが送られる。また、コピー命令チェック部５０に、データキャッシュ（ＡＡ）２１から信号線５０１を介してキャッシュヒット／ミス情報が送られる。
【００４７】
コピー命令チェック部５０は、キャッシュヒット／ミスにかかわらず、演算器２０から送られてきた命令がコピー元の命令またはコピー命令（コピー元ｂｉｔが「有効」あるいはコピーｂｉｔが「有効」の命令）であるかをチェックする。コピー元の命令またはコピー命令のいずれにも当てはまらない場合、コピー命令チェック部５０は、そのまま信号線５０３を介して多数決チェック部５２へ出力する。コピー元の命令またはコピー命令であった場合、コピー命令チェック部５０は、信号線５０２を介してデータ・アドレスバッファ５１に命令のデータ・アドレスを登録する。コピー命令中で最後の命令（３個目の命令）を検出すると、コピー命令チェック部５０は、信号線５０３を介して多数決チェック部５２に命令とキャッシュヒット／ミス情報を出力する。
【００４８】
多数決チェック部５２は、コピー命令でなかった場合は多数決処理を行わずにそのまま命令を、信号線５２１、５２２を介してデータキャッシュ（ＤＡ）２３及びリクエスト制御部２４に出力する。コピー命令であった場合は信号線５２０を介してデータ・アドレスバッファ５１に該当命令のデータ・アドレスの出力依頼を行う。データ・アドレスバッファ５１は、信号線５１０を介して該当命令のデータ・アドレスを出力する。
【００４９】
多数決チェック部５２は、多数決処理を行いコピー命令中の３命令から１命令を選び、信号線５２１を介してデータキャッシュ（ＤＡ）へライトを行う。また、信号線５２２を介してリクエスト制御部へストア命令（命令・データ・アドレス）を出力する。
【００５０】
多数決処理チェックの結果は、信号線５２３を介してソフトウェア（ＳＷ）の命令で出力してもよいし、ハードウェア（ＨＷ）の作りこみでマイクロプロセッサの外部へ出力してもよい。このように多数決チェックの結果を外部に出力するような観測機能を設けると論理動作不正の解析の容易化と動作の確認を行うことが可能になる。
【００５１】
次に、ロード命令の実行時におけるロード・ストアパイプの動作を説明する。
ｂ．ロード命令
図１において、ロード命令実行時、データチェック制御部２２は、データキャッシュ（ＡＡ）２１にアクセスし、キャッシュヒット／ミスの情報を、信号線２１０を介して取得する。同時に、データチェック制御部２２は、データキャッシュ（ＤＡ）２３にアクセスする。
【００５２】
取得したキャッシュヒット／ミスの情報がキャッシュヒットを示す場合、データチェック制御部２２は、信号線２３０を介して命令・データをデータチェック制御部３１へ出力する。他方、取得したキャッシュヒット／ミスの情報がキャッシュミスを示す場合、データチェック制御部２２は多数決処理チェックの処理を行い、信号線２２１を介してリクエスト制御部２４にキャッシュフィルのリクエストを出力する。
【００５３】
リクエスト制御部２４は、信号線２４０を介して外部にキャッシュフィルのリクエストを出力する。キャッシュフィルのデータは信号線２４１を介して返ってくる。リクエスト制御部２４は、信号線２４２を介してキャッシュフィルのデータをデータキャッシュ（ＡＡ）２１とデータキャッシュ（ＤＡ）２３にライトする。キャッシュフィルのデータの中でロード命令のターゲットデータをチェックして信号線２４３を介してデータチェック制御部３１へ出力する。
【００５４】
図３を用いてロード・ストア命令パイプのデータチェック制御部の詳細な動作について説明する。
図３において、コピー命令チェック部５０には、演算器２０から信号線５００を介して命令・アドレスが送られる。また、コピー命令チェック部５０には、データキャッシュ（ＡＡ）から信号線５０１を介してキャッシュヒット／ミス情報が送られる。
ここで、コピー命令チェック部５０は、キャッシュヒットの場合、多数決処理チェックはレジスタライトの直前の図１のデータチェック制御部３１で行うので、何も行わない。キャッシュミスの場合、演算器２０から送られてきた命令がコピー元の命令またはコピー命令（コピー元ｂｉｔが有効あるいはコピーｂｉｔが有効の命令）であるかをチェックする。
【００５５】
コピー元の命令またはコピー命令でなかった場合、コピー命令チェック部５０は、そのまま信号線５０３を介して多数決チェック部５２へ出力する。コピー命令であった場合、コピー命令チェック部５０は、信号線５０２を介してデータ・アドレスバッファ５１に命令のアドレスを登録する。また、コピー命令チェック部５０は、コピー命令中で最後の命令（３個目の命令）を検出すると信号線５０３を介して多数決チェック部５２に命令とキャッシュミス情報を出力する。
【００５６】
多数決チェック部５２は、コピー命令でなかった場合は多数決処理を行わずにそのまま信号線５２２を介して出力する。他方、コピー命令であった場合は信号線５２０を介してデータ・アドレスバッファ５１に該当命令のアドレスの出力依頼を行う。データ・アドレスバッファ５１は、信号線５１０を介して該当命令のアドレスを出力する。多数決チェック部５２は、多数決処理を行いコピー命令中の３命令から１命令を選び、信号線５２２を介してリクエスト制御部２４へキャッシュフィルのリクエスト命令（命令・アドレス）を出力する。
【００５７】
多数決処理チェックの結果は、信号線５２３を介してソフトウェア（ＳＷ）の命令で出力してもよいし、ハードウェア（ＨＷ）の作りこみでＬＳＩの外部へ出力してもよい。このように観測機能を設けると論理動作不正の解析の容易化と動作の確認を行うことが可能になる。
【００５８】
上記説明では、キャッシュフィルのリクエストを多数決処理チェック後に外部に出力したが、リクエスト制御部２４にキャッシュフィル用の多数決処理チェックの制御部を設ければ、キャッシュフィルのデータが戻ってきた後にキャッシュフィルデータの多数決処理チェックを行うことも可能である。この場合は、ターゲットデータは信号線２４３を介してコピー命令も含めて３命令分  データチェック制御部３１へ送られ多数決処理チェックを行った後で信号線３１０を介してレジスタ３２へライトされる。
【００５９】
（２）演算命令パイプの動作
データチェックを行うのは、レジスタあるいはデータキャッシュなどの内部資源にライトして内部状態が変化する時のみでよい。本発明の実施例においてレジスタへのライトが発生するのは演算命令とロード命令の２通り存在する。
【００６０】
ｃ．演算命令
図１において、演算命令の動作は、データチェック制御部３１が多数決処理チェックの処理を行い、信号線３１０を介してレジスタ３２へライトを行う。また信号線３１０を介してフォワーディングデータを演算器２０、演算器３０へ転送する。
【００６１】
図４を用いて演算命令パイプのデータチェック制御部３１の詳細な動作について説明する。図４において、演算器３０から信号線６００を介して命令・データが送られる。コピー命令チェック部６０は、演算器２０から送られてきた命令がコピー元の命令またはコピー命令（コピー元ｂｉｔが有効あるいはコピーｂｉｔが有効の命令）であるかをチェックする。
【００６２】
コピー命令でなかった場合、コピー命令チェック部６０は、そのまま信号線６０３を介して多数決チェック部６２へ出力する。コピー命令であった場合は信号線６０２を介してデータバッファ６１に命令のデータを保存する。また、コピー命令中で最後の命令（３個目の命令）を検出すると信号線６０３を介して多数決チェック部６２に命令を出力する。
【００６３】
多数決チェック部６２は、コピー命令でなかった場合は多数決処理を行わずに取得した命令をそのまま信号線６２１を介して出力する。コピー命令であった場合は信号線６２０を介してデータバッファ６１に該当命令のデータの出力依頼を行う。データバッファ６１は、信号線６１０を介して該当命令のデータを出力する。多数決チェック部６２は、多数決処理を行いコピー命令中の３命令から１命令を選び、信号線６２１を介してレジスタへデータを出力する。
【００６４】
多数決処理チェックの結果は、信号線６２２を介してソフトウェア（ＳＷ）の命令で出力してもよいし、ハードウェア（ＨＷ）の作りこみでマイクロプロセッサの外部へ出力してもよい。このように観測機能を設けると論理動作不正の解析の容易化と動作の確認を行うことが可能になる。
【００６５】
次に、ロード命令のレジスタライト動作実行時における演算命令パイプの動作を説明する。
ｄ．ロード命令のレジスタライト動作
図１において、ロード命令の動作は、キャッシュヒット／ミスで異なる。キャッシュヒット時は、データチェック制御部３１は多数決処理チェックの処理を行い、信号線３１０を介してレジスタ３２へライトを行う。また信号線３１０を介してフォワーディングデータを演算器２０、演算器３０へ転送する。キャッシュミス時は、データチェック制御部３１は多数決処理チェックを行わずに信号線３１０を介してレジスタ３２へライトを行う。
【００６６】
図４を用いて演算命令パイプのデータチェック制御部３１の詳細な動作について説明する。図４において、データキャッシュ（ＤＡ）から信号線６０１を介して命令・データが送られる。コピー命令チェック部６０は、コピー命令（コピー元ｂｉｔが有効あるいはコピーｂｉｔが有効の命令）であるかをチェックする。
【００６７】
コピー命令でなかった場合は、そのまま信号線６０３を介して多数決チェック部６２へ出力する。コピー命令であった場合は、信号線６０２を介してデータバッファ６１に命令のデータを保存する。コピー命令中で最後の命令（３個目の命令）を検出すると信号線６０３を介して多数決チェック部６２に命令を出力する。
【００６８】
多数決チェック部６２は、コピー命令でなかった場合は多数決処理を行わずにそのまま信号線６２１を介して出力する。コピー命令であった場合は信号線６２０を介してデータバッファ６１に該当命令のデータの出力依頼を行う。データバッファ６１は、該当命令のデータを信号線６１０を介して出力する。多数決チェック部６２は、多数決処理を行いコピー命令中の３命令から１命令を選び、信号線６２１を介してレジスタへデータを出力する。
【００６９】
多数決処理チェックの結果は、信号線６２２を介してソフトウェア（ＳＷ）の命令で出力してもよいし、ハードウェア（ＨＷ）の作りこみでＬＳＩの外部へ出力してもよい。観測機能を設けると論理動作不正の解析の容易化と動作の確認を行うことが可能になる。
【００７０】
次に、本発明の第１の実施形態に係るマイクロプロセッサのデバッグ時の各部の動作を具体的に説明する。まず、マイクロプロセッサでは、図７に示したプログラムを実行するものとする。また、比較命令格納バッファ４０には、図８に示したような設定を登録したものとする。ここで、論理動作不正が発生する命令は、エントリー番号「３」のＡＤＤ命令であるとする。
【００７１】
図１において、論理動作不正が発生するプログラムを実行すると、命令は命令キャッシュ１０からフェッチされ、信号線１００を介してデコーダー１１へ送られる。デコーダー１１は命令のデコードを行い、信号線１１０を介して命令検出制御部１２へ出力する。
【００７２】
命令検出制御部１２の命令比較部４１（図２に参照）には、デコーダー１１から信号線４００を介して、図７の番号「１」のＬＤ命令が、実際の命令として入力される。同時に比較命令格納バッファ４０から、信号線４０２を介して、図８のエントリー番号「１」の内容が、設定された命令として入力される。命令比較部４１は、実際の命令と設定された命令とを比較すると、オペコード、レジスタ番号（Ｄ、Ｓ１、Ｓ２）、依存関係（Ｄ、Ｓ１、Ｓ２）とが一致することを検出する。ただし、ここではコピー指示が「無効」のためコピー命令は発生しない。
【００７３】
命令比較部４１は、次の比較に備えて信号線４１１を介して比較命令格納バッファ４０に次エントリーの内容を出力するように指示する。次に、図７の番号「２」のＬＤ命令と、図８のエントリー番号「２」の内容を比較する。この場合、「１」の命令と同様に、一致を検出し、各種処理を行うが、コピー命令は発生しない。
【００７４】
次に、図７の番号「３」のＡＤＤ命令と、図８のエントリー番号「３」の内容を比較する。この場合、「１」、「２」と同様に、一致を検出するので、各種処理を行うが、コピー命令は発生しない。
【００７５】
次に、図７の番号「４」のＳＴ命令と、図８のエントリー番号「４」の内容を比較する。この場合、一致を検出し、さらに、図８のエントリー番号「４」はコピー指示が「有効」になっているので、命令比較部４１は、信号線４１０を介して命令制御部４３へ比較結果が一致、且つコピー指示が「有効」、且つ発行間隔が「４０９６」であることを出力する。また、図８の番号「４」のＳＴ命令に対して、２個のコピー命令を発生し、信号線４１０を介して命令制御部４３へ出力する。
【００７６】
命令制御部４３は、図７の番号「４」のＳＴ命令に、コピー元ｂｉｔ（コピー指示が有効な命令で元のプログラムの命令列中に存在した命令を示すｂｉｔ）が「有効」、発行間隔が「０」を付与して、信号線４３０を介してスケジューラー１３へ出力する。次に、ＳＴ命令のコピー命令を２命令分、コピーｂｉｔ（コピー指示が有効な命令で新しくコピーとして生成した命令を示すｂｉｔ）が「有効」、発行間隔が「４０９６」を付与して、信号線４３０を介してスケジューラー１３へ出力する。上記処理を行って命令制御部４３からスケジューラー１３に送られる命令は、図１０のようになる。
【００７７】
図１２は、上記動作に関してのタイミングチャートを示すものである。番号「２」のＬＤ命令から、番号「３」のＡＤＤ命令へのデータのフォワーディングのタイミングで動作不正が発生している。この例では、番号「４」のＳＴ命令をコピー対象としたために、時刻が「８２０２」で多数決処理チェックを行っても、３命令とも同じ動作不正の発生したストア命令になり、論理動作不正は回避できないことになる。
【００７８】
論理動作不正が回避できていないので、比較命令格納バッファ４０の登録内容の再設定を行う。命令列中で１命令前の番号「３」のＡＤＤ命令にコピー指示を移動させる。ただし、デバッグ中なので発行間隔は「４０９６」である。
【００７９】
その後、プログラムを再実行すると、番号「３」のＡＤＤは動作不正になるが、番号「４」のＡＤＤと、番号「５」のＡＤＤの２つのコピー命令は正しく動作する。よって、論理動作不正が発生しても多数決処理チェック回路で正しい結果が得られる。
【００８０】
ここで、論理動作不正の回避による影響を少なくするために、上記動作について命令トレーサー４２や多数決処理チェックの結果を用いて机上で解析すると、理論的には発行間隔を「２」に設定すれば正しく動作することが分かったとする。この理想的な設定を通常時の動作設定とすることで性能低下の影響を最小にすることができる。
【００８１】
比較命令格納バッファ４０に図９に示した設定を登録してプログラムを実行する。この場合、命令制御部４３からスケジューラー１３に送られる命令は、図１１のようになる。上記動作に関してのタイミングチャートは図１３のようになる。時刻が「１１」で多数決処理チェックを行うと、番号「３」のＡＤＤ命令は論理動作不正を起こすが、番号「４」のＡＤＤと、番号「５」のＡＤＤのコピー命令２個は正常動作するため、多数決処理チェックを行うと、ＡＤＤ命令としては正しく動作した上で、デバッグ時と比較して性能が向上する。
【００８２】
以上説明したように、本発明の実施形態では、以下に記載するような効果を持つ。
（１）単独のマイクロプロセッサにおいて論理動作不正の発生する命令を特殊な解析なしで特定することが可能になり調査を容易化できる。
（２）多数決処理チェックの結果を観測することで正しく論理動作不正が回避できているか確認できる。
（３）ハードウェアのみで論理動作不正を回避できる。
（４）スケジューラーの発行条件を設定して論理動作不正の発生しない最小のタイミングに設定することで性能低下の影響を最小にでき、割込みとソフトウェアによる解析と比較して性能が向上する。
【００８３】
本発明は、上述した実施形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。例えば、図１において命令キャッシュ１０やデータキャッシュ（ＡＡ）２１やデータキャッシュ（ＤＡ）２３は構成せずに、直接メモリーに接続されていてもよい。また、上述の実施形態では、演算命令パイプとロード・ストア命令パイプの２パイプ構成にしているが、１パイプ構成や３パイプ構成以上でもよい。また、図２において命令トレーサー４２は構成しなくてもよい。また、比較命令格納バッファと命令比較部を複数用意して同時に２つ以上の比較を行ってもよい。
【００８４】
また、図６において発行間隔の設定は、コピー命令毎に細かく設定できるようにしてもよい。この場合は、さらなる性能の向上を期待できる。発行条件は、発行間隔という時間ではなく、例えば、演算器が動作していない時やデータキャッシュをアクセスしていない時やキャッシュフィルを要求している命令が存在しない時やマイクロプロセッサ内の命令が全て完了している時などの状態等、マイクロプロセッサの内部状態を検出して制御を行ってもよい。
【００８５】
また、比較命令格納バッファの設定登録、不正動作の発生するプログラムの実行、多数決処理チェックの結果の確認という一連の動作をスクリプトなどを使用して自動的に実行できる仕組みを用いれば、人手を介せずに不正の発生する命令を特定することができる。
【００８６】
本発明は、上述した実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
【符号の説明】
【００８７】
１０：命令キャッシュ
１１：デコーダー
１２：命令検出制御部
１３：スケジューラー
２０：演算器
２１：データキャッシュ（ＡＡ）
２２：データチェック制御部
２３：データキャッシュ（ＤＡ）
２４：リクエスト制御部
３０：演算器
３１：データチェック制御部
３２：レジスタ
４０：比較命令格納バッファ
４１：命令比較部
４２：命令トレーサー
４３：命令制御部
５０：コピー命令チェック部
５１：データ・アドレスバッファ
５２：多数決チェック部
６０：コピー命令チェック部
６１：データバッファ
６２：多数決チェック部
【図１】
0005387231.tif 000002
【図２】
0005387231.tif 000003
【図３】
0005387231.tif 000004
【図４】
0005387231.tif 000005
【図５】
0005387231.tif 000006
【図６】
0005387231.tif 000007
【図７】
0005387231.tif 000008
【図８】
0005387231.tif 000009
【図９】
0005387231.tif 000010
【図１０】
0005387231.tif 000011
【図１１】
0005387231.tif 000012
【図１２】
0005387231.tif 000013
【図１３】
0005387231.tif 000014