(57)【特許請求の範囲】
【請求項１】
命令列を複数のパイプラインステージで処理し、前記複数のパイプラインステージの前記命令列の処理状態が所定の組合せになると生じるパイプラインハザードが発生するとき前記命令のパイプラインステージ間の遷移を停止するインターロック信号を前記パイプラインステージに供給し前記パイプラインハザードを回避するプロセッサの検証処理をコンピューターに実行させるコンピューター読み取り可能なプロセッサ検証プログラムにおいて、
前記検証処理は、
前記命令列であるテスト命令列の命令を実行するとき、前記パイプラインハザードが発生する前記複数のパイプラインステージの前記命令列の処理状態の前記所定の組合せを規定するパイプラインステージ組合せパターン情報と、前記パイプラインステージそれぞれで前記命令が処理中か否かを示すステータス情報とに基づいて、前記複数のパイプラインステージの前記テスト命令列の処理状態の組合せを前記パイプラインステージ組合せパターン情報と一致させるように前記インターロック信号を前記パイプラインステージに供給するタイミング生成工程を有するプロセッサ検証プログラム。
【請求項２】
請求項１において、
前記複数のパイプラインステージは、第１、２のステージを含み、
前記プロセッサは前記第１のステージの演算結果を前記第２のステージにバイパスするバイパス手段を有し、
前記パイプラインステージ組合せパターン情報は、前記命令が前記第１、２ステージそれぞれで処理中を示すパイプラインステージ組合せパターン情報を含むプロセッサ検証プログラム。
【請求項３】
請求項１または２のいずれかにおいて、
前記複数のパイプラインステージは、第３のステージと、前記第３のステージから遷移し前記プロセッサの共有リソースにアクセス可能な第４のステージと、当該第３のステージから前記第４のステージに遷移せずに分岐し、演算処理に複数サイクルを要する前記命令を処理し当該処理の終了時に前記共有リソースにアクセス可能な第５のステージとを含み、
前記タイミング生成工程は、前記ステータス情報に基づいて前記インターロック信号を前記パイプラインステージに供給することにより、前記第４のステージと前記第５のステージとで同時に前記共有リソースへのアクセスが発生するように前記パイプラインステージの前記命令の処理状態を制御するプロセッサ検証プログラム。
【請求項４】
請求項１乃至３のいずれか１項において、
前記検証処理は、前記テスト命令列それぞれについて前記パイプラインステージ組合せパターン情報全て、実行されるプロセッサ検証プログラム。
【請求項５】
請求項１乃至４のいずれか１項において、
前記パイプラインステージ組合せパターン情報は、基本パターン情報と、当該基本パターン情報の前記処理状態から前記遷移が進むことによって生成される前記検証すべき処理状態を規定する派生パターン情報とを有し、
前記タイミング生成工程は、前記テスト命令列の命令を実行するとき、前記処理状態を前記基本パターン情報と一致させた後、さらに前記遷移を進めることにより前記処理状態を前記派生パターン情報と一致させるプロセッサ検証プログラム。
【請求項６】
請求項１乃至５のいずれか１項において、
前記複数のパイプラインステージは前記命令のフェッチ処理を行うフェッチステージを含み、
前記タイミング生成工程は、前記フェッチステージにおいて前記命令のフェッチ処理が終了するまで当該フェッチステージより先の前記パイプラインステージで処理中の前記命令の前記遷移を停止する前記インターロック信号を前記パイプラインステージに供給するプロセッサ検証プログラム。
【請求項７】
請求項１乃至６のいずれか１項において、
前記パイプラインハザードは、同一のリソースにアクセスする前記複数のパイプラインステージが処理中となる処理状態であることを特徴とするプロセッサ検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ検証プログラムに関する。
【背景技術】
【０００２】
近年、プロセッサのマルチコア化を目的として、アプリケーションに特化したプロセッサASP（Application Specific Processor）を利用する事例が増加している。ASPは、ユーザが実行するアプリケーションに特化し、当該アプリケーションを高速に処理するための専用の命令を有するプロセッサである。
【０００３】
ユーザが、アプリケーションを実行するシステムを構築する度に、ASPを生成することは容易ではない。しかし、例えば、LISA（参考文献：“Architecture Exploration for Embedded Processors with LISA”,Andreas Hoffmann他共著）等の専用の記述言語が用意されており、ユーザは、LISAを用いてプロセッサのアーキテクチャ定義を記述し、専用コンパイラでプロセッサのRTL（Register Transfer Level）に変換することにより、ASPを生成することができる。これにより、ユーザは、ASPの生成に係る工数を抑えることができる。ただし、自動生成したASPの検証は不可欠であり、その検証に多大な工数を要する。
【０００４】
また、近年の命令パイプラインを備えるプロセッサでは、例えば、パイプラインハザードの検出時に適切なインターロック信号を出力したか否か、バイパス回路が適切に動作したか否か等の検証が不可欠である。そのため、ユーザは、例えば、インターロック信号が出力されるようなパイプラインステージの命令の処理状態、またはバイパス回路が動作するパイプラインステージの命令の処理状態を手作業で生成し、その処理状態で適切な動作が行われたか否かを検証していた。
【０００５】
具体的に、例えば、連続した２つの命令が隣り合うパイプラインステージで実行される処理状態を生成する場合、ユーザは、パイプラインストールが発生しないような命令列を生成した上で、シミュレーションすることによって意図した処理状態が生成されたか否かを確認していた。また、例えば、連続した２つの命令がパイプラインステージを一つ空けて実行されるタイミングを生成する場合、ユーザは、さらに、２つの命令の間にNOP命令を追加する等の調整を行い、同様にして、シミュレーションすることによって意図した処理状態が生成されたか否かを確認していた。このように、命令パイプラインを備えるプロセッサの検証に多大な工数を要していた。
【０００６】
そこで、プロセッサの検証に係る工数を削減するための技術が提供されている（特許文献１）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−２７３３４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、従来の検証装置は、プロセッサのパイプラインステージを検証対象の処理状態に自動的に制御することは出来なかった。
【０００９】
そこで、本発明では、プロセッサ検証時におけるパイプラインステージの検証すべき処理状態の生成に係る制御を自動化したプロセッサ検証プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
第１の側面は、１つの命令を複数のパイプラインステージで処理し、パイプラインハザードが発生したとき前記命令のパイプラインステージ間の遷移を停止するインターロック信号が前記パイプラインステージに供給されるプロセッサの検証処理をコンピューターに実行させるコンピューター読み取り可能なプロセッサ検証プログラムにおいて、
前記検証処理は、
テスト命令列内の命令が前記パイプラインステージそれぞれで処理中か否かを示し前記パイプラインステージの検証すべき処理を規定するステージ組合せパターンを参照し、前記テスト命令列の命令を実行するとき、前記パイプラインステージそれぞれで前記命令が処理中か否かを示すステータス情報に基づいて前記インターロック信号を前記パイプラインステージに供給することにより、前記パイプラインステージの前記命令の処理状態を前記ステージ組合せパターンと一致させるタイミング生成工程を有する。
【発明の効果】
【００１１】
第１の側面によれば、プロセッサ検証時におけるパイプラインステージの検証すべき処理状態の生成に係る制御を自動化できる。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態例におけるプロセッサ検証プログラムを有するコンピューターの構成の一例を表す図である。
【図２】図１のテストベンチの構成の一例を表す図である。
【図３】データハザード発生時及びバイパス処理時のパイプラインステージの遷移を表す図である。
【図４】ＤＩＶステージを有するプロセッサの命令パイプラインの一例を表す図である。
【図６】プロセッサの検証手順を表すフローチャート図である。
【図５】パイプラインステージ組合せパターンテーブルを表す例図である。
【図７】テスト命令列の一例を表す図である。
【図８】タイミング生成ユニットのブロック図の一例を表す図である。
【図９】図８におけるシーケンサの構成の一例を表す図である。
【図１０】シーケンサ本体の処理の概要を表すフローチャート図である。
【図１１】シーケンサ本体の制御処理の詳細を表すフローチャート図である。
【図１２】具体例におけるパイプラインステージの処理状態、及び、基本パターンシフトレジスタの遷移を表す図である。
【図１３】シーケンサのＴＥＳＴ２ステートの処理の流れを表すフローチャート図である。
【図１４】構造ハザードを発生させる場合の制御の具体例を説明する図である。
【図１５】組合せパターン及びテスト命令列生成処理の流れを表す例図である。
【図１６】検証項目に基づいた組合せパターンの生成を表す例図である。
【発明を実施するための形態】
【００１３】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１４】
本実施の形態例におけるプロセッサ検証プログラムは、テスト命令列内の命令がパイプラインステージそれぞれで処理中か否かを示しパイプラインステージの検証すべき処理を規定するステージ組合せパターンを参照する。そして、プロセッサ検証プログラムは、テスト命令列の命令を実行するとき、パイプラインステージそれぞれで前記命令が処理中か否かを示すステータス情報に基づいて前記インターロック信号をパイプラインステージに供給することにより、パイプラインステージの命令の処理状態をステージ組合せパターンと一致させるものである。
【００１５】
図１は、本実施の形態例における検証装置を備えるコンピューター１の構成の一例を表す図である。同図において、コンピューター１は、コンピューター１のプロセッサ２０１とＲＡＭ（Random Access Memory）等のメモリ２０２、外部インタフェース２０３、メモリに格納されたファイル群２０４を有する。また、ファイル群２０４は、ＨＤＬ（Hardware description language）シミュレータ２０５、及び、ＨＤＬシミュレータ２０５が実行するテストベンチ１００を有する。ＨＤＬシミュレータ２０５は、検証手順を記述したテストベンチ１００に基づいて、検証対象のデバイス（ＤＵＴ：Device Under Test）であるＲＴＬ（Register Transfer Level）で記述されたプロセッサ１０の検証を行う。
【００１６】
図１のテストベンチ１００は、検証対象のプロセッサ１０に加えて、ＲＴＬで記述されたタイミング生成プログラム３０及び期待値比較プログラム９０を有する。また、本実施の形態例において、テストベンチ１００は、テスト命令列データ７２と入力データ８１及び期待値データ９１を入力として、演算結果８２及び検証結果レポート９２を出力する。テスト命令列データ７２はひとつまたは複数の命令コードを有する。また、期待値データ９１は、検証対象のプロセッサ１０がテスト命令列を実行して出力する演算結果を、予めＩＳＳ（Instruction set simulator）等のシミュレータによって予測した値である。
【００１７】
タイミング生成プログラム３０は、本実施の形態例のプロセッサ検証プログラムの一例であり、コンピューターのプロセッサ２０１と協働することによって、タイミング生成ユニット３０として機能する。期待値比較プログラム９０も同様にして、コンピューターのプロセッサ２０１と協働することによって、期待値比較ユニット９０として機能する。タイミング生成ユニット３０は、検証対象のプロセッサ１０にインターロック信号を供給することにより、プロセッサ１０のパイプラインステージの処理状態を予め検証対象として規定した処理状態と一致させる。また、期待値比較ユニット９０は、検証対象のプロセッサ１０の検証によって得られた演算結果８２と期待値データ９１とを比較し、その比較結果を検証結果レポート９２として生成する。そして、ユーザは、検証結果レポート９２に基づいて、プロセッサ１０の検証結果を判定する。
【００１８】
図２は、図１のテストベンチ１００の構成の一例を表す図である。図１のＨＤＬシミュレータ２０５は、初めに、テスト命令列データ７２から読み出した各命令コード７１及び入力データ８１をテストベンチ１００のメモリ７０、８０に展開する。そして、ＨＤＬシミュレータ２０５は、検証対象のプロセッサ１０をブートし各命令コードをパイプライン処理させる一方、タイミング生成ユニット３０にパイプラインステージの処理状態を制御させる。
【００１９】
また、図２における本実施の形態例における検証対象のプロセッサ１０は、Ｃｏｎｔｒｏｌｌｅｒ（コントローラ）２０、命令パイプライン４０、Ｒｅｇ（レジスタファイル）５０、Ｂｙｐａｓｓ（バイパス）６０を有する。タイミング生成ユニット３０は検証時にのみ必要なユニットであるため、テストベンチ１００の一部としてプロセッサ１０の外部に保持されている。
【００２０】
図２において、本実施の形態例におけるプロセッサ１０の命令パイプライン４０は、例えば「ＩＦ、ＩＤ、ＥＸＥ／ＥＸＥ１、ＭＥＭ／ＥＸＥ２、ＷＢ」の５段のステージを有する。ＩＦステージは命令フェッチを行うステージ、ＩＤステージは命令デコードを行うステージ、ＥＸＥ／ＥＸＥ１ステージ（以下、ＥＸＥステージ）は命令を実行（ＥＸＥ）、または２段のパイプラインド演算の第１実行（ＥＸＥ１）を行うステージであり、レジスタファイル５０からデータを読み込んで演算を行う。そして、ＭＥＭ／ＥＸＥ２ステージ（以下、ＭＥＭステージ）は、ＤＲＡＭ（Dynamic Random Access Memory）８０からデータを読み込む（ＭＥＭ）、または２段のパイプラインド演算の第２実行（ＥＸＥ２）を行うステージ、ＷＢステージは命令の処理結果をＤＲＡＭ等のメモリやレジスタファイル５０に格納するステージである。
【００２１】
このような命令パイプライン４０を有するプロセッサ１０では、複数の命令間の依存関係により各パイプラインステージで処理中の一部の命令の遷移を中断せざるを得ない状況（以下、パイプラインハザード）が生じることがある。パイプラインハザードには、データハザード、構造ハザード、制御ハザード等がある。ここで、まず、データハザードについて説明する。
【００２２】
図３は、データハザード発生時、及び、バイパス処理時のパイプラインステージの遷移を表す図である。遷移図４１〜４３において、横方向は各パイプラインステージであり、縦方向は時間の経過を表す。命令０及び命令１は演算命令であり、命令１は命令０の演算結果を使用して演算処理を行うものとする。この例において、命令０は演算結果をＷＢステージでレジスタファイル５０に書き込み、命令１は命令０の演算結果をＥＸＥステージでレジスタファイル５０から読み出す。
【００２３】
図３の遷移図４１は、データハザードが発生する場合のパイプラインステージの遷移の一例を表す図である。時刻ｔから時刻ｔ＋１にかけて、命令０はＭＥＭステージからＷＢステージに、命令１はＩＤステージからＥＸＥステージに遷移する。しかし、時刻ｔ＋１では、ＷＢステージで命令０の演算結果のレジスタファイル５０への書き込み処理が完了していないため、命令１はＥＸＥステージでレジスタファイル５０から命令０の演算結果を読み出すことができない。即ち、データハザードが発生する。そこで、プロセッサ１０は、時刻ｔにて、データハザードを検出すると、ＩＦステージ及びＩＤステージから次のパイプラインステージへのゲートを遮断するインターロック信号を供給することにより、命令の遷移を停止してデータハザードを回避する。
【００２４】
図３の遷移図４２は、インターロック信号が供給された場合の遷移を表す。同図の時刻ｔ＋１において、インターロック信号が供給されたことにより命令１及び命令２が遷移しない一方、命令０はＷＢステージに遷移してレジスタファイル５０への演算結果の書き込み処理を行う。そして、時刻ｔ＋２において、命令１は、ＥＸＥステージに遷移し、レジスタファイル５０から命令０の演算結果を読み出すことができる。
【００２５】
このように、プロセッサ１０は、一部または全部の命令の遷移をパイプラインステージ間で停止するインターロック信号を供給することにより、データハザードを回避する。ただし、インターロック信号により処理中の命令の遷移が停止してパイプラインストールｓｔ１が発生することにより、命令の処理時間が増加してしまう。そこで、プロセッサ１０によっては、バイパス機構６０を備える場合がある。
【００２６】
図３の遷移図４３は、バイパス機構６０の一例を説明する図である。バイパス６０とは、例えば、あるパイプラインステージで処理された命令の演算結果を、レジスタファイル５０を経由することなく他のパイプラインステージに直接転送するものである。具体的に、同図の遷移図４３の時刻ｔ＋１において、プロセッサ１０は、ＷＢステージにおける命令０の演算結果を直接、命令１を処理するＥＸＥステージに転送できる。これにより、遷移図４３において、データハザードの発生が回避されパイプラインストールｓｔ１が発生しない。
【００２７】
なお、本実施の形態例におけるプロセッサ１０は、図２の矢印のように、ＷＢステージ→ＥＸＥステージ、ＷＢステージ→ＭＥＭステージ、ＭＥＭステージ→ＥＸＥステージへのバイパス機構６０を有する。ただし、この例に限定されるものではなく、パイパス処理が可能なパイプラインステージはプロセッサ１０によって異なる。
【００２８】
次に、構造ハザードについて説明する。構造ハザードは、例えば、複数の命令間でレジスタファイル５０の書き込みポートやメモリアクセス用のポート等のハードウェア資源が競合する場合に発生する。具体的に、ＩＦステージとＭＥＭステージとでそれぞれメモリへのアクセスが発生する場合、メモリアクセス用のポートが競合し、例えば、ＩＦステージにおける命令フェッチ処理が行えない。即ち、構造ハザードが発生する。そこで、プロセッサ１０は構造ハザードを検出すると、例えば、ＩＦステージの処理１サイクル遅らせるインターロック信号を供給することにより構造ハザードを回避する。
【００２９】
なお、プロセッサ１０によっては、前述した５つのパイプラインステージに加えて、除算命令（ＤＩＶ命令）等のようなマルチサイクル演算命令を処理するマルチサイクル演算ステージを有する。このようなプロセッサ１０においても、構造ハザードが発生する。
【００３０】
図４は、マルチサイクル演算ステージ（この例では、ＤＩＶステージ）を有するプロセッサ１０の命令パイプラインの一例を表す図である。同図のプロセッサ１０において、ＤＩＶ命令は、ＩＤステージの後、ＤＩＶステージに遷移し（Ｅ１）、除算に要する所定サイクルの後、ライトイネーブル信号ＷＳ２を出力してデータバス６１を選択し除算結果をレジスタファイル５０に書き込む。この例において、ＤＩＶステージとＷＢステージは同一のデータバス６１を使用してレジスタファイル５０の演算結果を書き込む。このため、両ステージでライトイネーブル信号ＷＳ１、ＷＳ２が出力される場合、構造ハザードが発生する。そのため、プロセッサ１０は、構造ハザードを検出すると、例えば、ＤＩＶステージ以外のパイプラインステージで命令の遷移を停止するインターロック信号を供給することにより、構造ハザードによる不具合を回避する。
【００３１】
続いて、制御ハザードについて説明する。制御ハザードは、例えば、分岐命令を処理する場合、分岐命令の処理結果が判明するまで次に処理されるべき命令のパイプライン処理を停止する場合に発生する。この場合、例えば、プロセッサ１０は、分岐先の命令が判明するまで、後続の命令のフェッチ処理を停止するインターロック信号を供給して、制御ハザードによる不具合を回避する。
【００３２】
以上のように、プロセッサ１０は、バイパス処理や、検出したパイプラインハザードを回避するためのパイプラインステージへのインターロック信号の供給を行う。このようなプロセッサ１０の検証では、インターロック信号の供給やバイパス処理が発生するようなパイプラインステージの命令の処理状態の生成が不可欠であり、その処理状態で適切にインターロック信号の供給やバイパス処理が実行されたか否かを検証する必要がある。即ち、検証すべき処理状態になったタイミングで、インターロック信号の供給やバイパス処理が適切に実行されたか否かが検証される。しかしながら、このようなパイプラインステージの命令の処理状態の生成には多大な工数を要する。
【００３３】
そこで、本実施の形態例におけるプロセッサ検証プログラムは、テスト命令列の命令の実行時、ステージ組合せパターン（以下、組合せパターン）を参照して、パイプラインステージにおける命令の処理状態に基づいてインターロック信号をパイプラインステージに供給することによって、パイプラインステージの命令の処理状態をステージ組合せパターンと一致させる。
【００３４】
図５は、本実施の形態例における組合せパターンテーブルＰ１の一例を表す図である。組合せパターンは、パイプラインステージそれぞれで命令が処理中か否かを示す情報の組合せであり、検証すべき処理状態として予め規定したものである。この例において、組合せパターンの各桁は最上位桁から最下位桁が、ＩＦステージ、ＩＤステージ、ＥＸＥステージ、ＭＥＭステージ、ＷＢステージに対応し、１は命令が処理されている状態（処理状態）を０は処理されていない状態（非処理状態）を表す。また、組合せパターンは、基本パターンと、各基本パターンから派生する処理状態を規定した派生パターンとを有する。派生パターンの処理状態は、基本パターンの処理状態から、さらに、パイプラインステージ間における命令の遷移が進むことにより生成される。
【００３５】
具体的に、例えば、Index０の基本パターン「１０１１１」はＩＤステージ以外の全てのパイプラインステージで、Index２の基本パターン「１０１１０」はＩＤステージ及びＷＢステージ以外のパイプラインステージで命令が処理されている処理状態であることを表す。そして、Index２の派生パターン「１１０１１」は、基本パターン「１０１１０」の処理状態から、パイプラインステージ上で処理中の各命令が遷移すると共に、新たな命令がフェッチされることにより生成される。Index６の派生パターン「１１１００、１１１１０、ｎ１１１１」も同様にして、基本パターン「１１０００」の処理状態から、遷移が進むことによって順次生成される。なお、派生パターン「ｎ１１１１」におけるｎは予めテスト命令列に含まれたＮＯＰ命令を表す。
【００３６】
なお、図５の例において、派生パターンは、基本パターンの処理状態から、パイプラインステージ上の命令が遷移すると共に、新たな命令がフェッチされることにより生成されるが、派生パターンは、単に、基本パターンの処理状態からパイプラインステージ上の命令が遷移することによって生成されてもよい。
【００３７】
このように、本実施の形態例に組合せパターンは、基本パターンと当該基本パターンの処理状態からさらに遷移が進むことによって生成される検証すべき処理状態を規定した派生パターンとを有する。これにより、タイミング生成ユニット３０は、インターロック信号の供給によりパイプラインステージの処理状態を基本パターンと一致するように制御した上で、さらに新たな命令をフェッチしながら遷移を進めることによって派生パターンと一致する処理状態を生成できる。つまり、タイミング生成ユニット３０は、全ての派生パターン毎に、パイプラインステージの処理状態を初期状態から逐一、制御して生成する必要がなく、効率的に検証処理を行うことができる。
【００３８】
図６は、本実施の形態例における図１のテストベンチ１００におけるプロセッサ１０の検証手順を表すフローチャート図である。初めに、ＨＤＬシミュレータ２０５（図１）は、テスト命令列データ７２から読み出した命令コード７１をＩＲＡＭ７０（図２）に、入力データ８１をＤＲＡＭ８０（図２）に書き込む（Ｓ１０）。そして、ＨＤＬシミュレータ２０５は、検証対象のプロセッサ１０をブートし、命令コード７１のフェッチ処理を開始させ、シミュレーションを開始する（Ｓ１１）。フェッチされた命令がパイプライン処理される一方、タイミング生成ユニット３０は、検証対象のプロセッサ１０のパイプラインステージの処理状態を制御する（Ｓ１２）。この制御では、パイプラインステージの処理状態をテスト命令列に対応する組合せパターンと一致させる。それにより、その処理状態でインターロック信号の供給やバイパス処理が適切に行われ正しい演算結果が得られるか否かによって検証することができる。詳細については後述する。
【００３９】
続いて、パイプラインステージの処理状態をひとつの組合せパターン（ひとつの基本パターン及び当該基本パターンに関する派生パターン）に一致させると、ＨＤＬシミュレータ２０５は、全ての組合せパターンに一致させたか否かを判定する（Ｓ１３）。全ての組合せパターンと一致させていない場合（Ｓ１３のＮＯ）、ＨＤＬシミュレータ２０５は、検証対象のプロセッサ１０をリセットして初期化し（Ｓ１５）、組合せパターンテーブルから次の組合せパターンを読み出す（Ｓ１６）。そして、ＨＤＬシミュレータ２０５は、再び、検証対象のプロセッサ１０をブートし、テスト命令列７２の命令のフェッチ処理を開始させる（Ｓ１１）。
【００４０】
一方、全ての組合せパターンと一致させた場合（Ｓ１３のＹＥＳ）、ＨＤＬシミュレータ２０５は、続いて、全てのテスト命令列７２を実行したか否かを判定する（Ｓ１４）。全てのテスト命令列７２を実行していない場合（Ｓ１４のＮＯ）、ＨＤＬシミュレータ２０５は、検証対象のプロセッサ１０に加え、タイミング生成ユニット３０をリセットして初期化する（Ｓ１７）。そして、ＨＤＬシミュレータ２０５は、次のテスト命令列７２をメモリから読み出し、全ての組合せパターンと一致させる制御（Ｓ１０〜Ｓ１４）を行う。一方、全てのテスト命令列７２を実行した場合（Ｓ１４のＹＥＳ）、ＨＤＬシミュレータ２０５は、検証を終了する。
【００４１】
図７は、テスト命令列７２の一例を表す図である。同図のテスト命令列は、初期設定命令列Ｃｓ、検証対象命令列Ｃｘ、及び、演算結果出力命令列Ｃｅを有する。初期設定命令列Ｃｓは検証のための初期設定を行う命令であり、演算結果出力命令列Ｃｅは検証対象命令列Ｃｘの演算結果を出力する命令である。検証対象命令列Ｃｘは少なくともパイプラインステージ数分の命令を有する。本実施の形態例におけるプロセッサ１０は５段の命令パイプライン４０を有するため、検証対象命令列Ｃｘは５つの命令を有する。なお、テスト命令列７２は、少なくとも検証対象命令列Ｃｘを有していればよい。
【００４２】
続いて、図６のフローチャート図におけるステップＳ１２の処理、即ち、パイプラインステージの処理状態を組合せパターン（図５）と一致させる処理の詳細について説明する。
【００４３】
図８は、本実施の形態例におけるタイミング生成ユニット３０のブロック図の一例を表す図である。タイミング生成ユニット３０は、パイプラインステージ組合せ制御ブロック３３、ＴａｒｇｅｔＰＣレジスタ３１、比較器３２を有する。また、パイプラインステージ組合せ制御ブロック３３は、シーケンサ３４、パイプラインステージ組合せパターンＰ１（図５）を有する。ＴａｒｇｅｔＰＣレジスタ３１には、図７に例示したテスト命令列における検証対象命令列Ｃｘの先頭命令のプログラムカウンタが保持される。
【００４４】
一方、図８の検証対象のプロセッサ１０のコントローラ２０は、実行中の命令のプログラムカウンタを保持するＰＣレジスタ２１、パイプラインステージステータス情報レジスタ２２、インターロック信号生成回路２３を有する。パイプラインステージステータス情報２２は、検証対象のプロセッサ１０の各パイプラインステージそれぞれで命令が処理中か否かを示す情報（本実施の形態例では、０：処理状態、１：非処理状態）であり、インターロック信号生成回路２３は、ハザード検出時にインターロック信号ｓ５を命令パイプラインステージ４０に供給する回路である。
【００４５】
シミュレーションが開始されると（図６のＳ１１）、タイミング生成ユニット３０のシーケンサ３４は組合せパターンテーブルＰ１から基本パターンをひとつ読み出す（ｓ１、ｓ２）。続いて、タイミング生成ユニット３０の比較器３２は、コントローラ２０による実行中の命令のプログラムカウンタと、ＴａｒｇｅｔＰＣレジスタ３１に保持したプログラムカウンタとを比較し、一致した場合にシーケンサ３４に通知する（ｓ３）。つまり、比較器３２は、テスト命令列における検証対象命令列Ｃｘの処理が開始したか否かを監視する。
【００４６】
通知を受けると（ｓ３）、シーケンサ３４は、コントローラ２０から各パイプラインステージの命令の処理状態を表すステータス情報２２を取得する（ｓ４）。次に、シーケンサは、コントローラ２０によるインターロック信号（ｓ５）を参照しながら、ステータス情報２２に基づいて、パイプラインステージの処理状態が基本パターンの規定する処理状態と一致するように、インターロック信号を命令パイプライン４０に供給する（ｓ６）。この処理（ｓ６）について、さらに、図９〜図１２において後述する。
【００４７】
そして、シーケンサ３４によるインターロック信号（ｓ６）と、コントローラ２０によるインターロック信号（ｓ５）との論理和が、実際のインターロック信号として各パイプラインステージに供給される（ｓ７）。タイミング生成ユニット３０は、テスト命令列の処理が終了するまで、コントローラ２０からのパイプラインステージのステータス情報２２に基づいてインターロック信号を供給する（ｓ４〜ｓ７）。全ての組合せパターンへの一致制御が終了していない場合（図６のＳ１４のＮＯ）、タイミング生成ユニット３０は、コントローラ２０にリセット信号を出力する（ｓ８、図６のＳ１７）。続いて、シーケンサ３４は組合せパターンテーブルＰ１から次の基本パターンを読み出して（ｓ１、ｓ２）、同様にしてテスト命令列を実行する（ｓ３〜ｓ８）。
【００４８】
図９は、図８のシーケンサ３４の構成の一例を表す図である。シーケンサ３４は、図８で述べた通り、ＰＣレジスタ２１の値、パイプラインステージステータス情報２２（ｓ４）、及び、コントローラ２０によるインターロック信号ｓ５を入力し、インターロック信号ｓ６を出力する。また、シーケンサ３４は、シーケンサ本体ＳＱに加え、基本パターンレジスタＲ１と基本パターンシフトレジスタＲ２とを有する。基本パターンレジスタＲ１は、組合せパターンテーブルＰ１から読み出した（図８のｓ１、ｓ２）基本パターンを保持し、パイプラインステージの処理状態が基本パターンと一致したか否かを判定するために使用される。また、基本パターンシフトレジスタＲ２はパイプラインステージ数分のレジスタＡ〜Ｅを有する。続いて、処理の流れについて説明する。
【００４９】
図１０は、図９のシーケンサ本体（以下、シーケンサ）ＳＱの制御処理の概要を説明するフローチャート図である。本実施の形態例におけるシーケンサＳＱは、例えば、次のように、パイプラインステージの処理状態を組合せパターンと一致させる。ここで、組合せテーブル（図５）のIndex４の基本パターン「１０１００」と一致させる場合について説明する。
【００５０】
１）まず、シーケンサＳＱは、Ｔａｒｇｅｔ命令のフェッチ処理が行われたことを検出する。この時、パイプラインステージの処理状態は（１００００）となる。
【００５１】
２）次に、シーケンサＳＱは、後続命令をフェッチし、Ｔａｒｇｅｔ命令とその後続命令をＩＦステージ及びＩＤステージでそれぞれ連続処理状態に制御する。ただし、この時、後続命令のフェッチストールが発生した場合、当該後続命令のフェッチ処理が終了するまで、インターロック信号を供給してＴａｒｇｅｔ命令の遷移を停止しておく。これにより、パイプラインステージの処理状態が必ず連続し（１１０００）となる。
【００５２】
３）ＩＦステージ及びＩＤステージで連続して処理状態に制御した上で、シーケンサＳＱは、基本パターンにおいて、一番後ろ（右端）のステージから順に辿って処理状態（本実施の形態例では「１」）を示すステージを検出し、当該ステージの前隣り（左隣り）における非処理状態（本実施の形態例では「０」）のステージ分だけ、ＩＦステージに対してインターロック信号を供給する。これにより、インターロック信号を供給した分だけ、即ち、前隣りの非処理状態のステージ分、Ｔａｒｇｅｔ命令と後続命令が処理されるステージの間のステージが非処理状態になる。この例では、基本パターン「１０１００」のうち右端から３ステージ目に処理状態「１」のステージが検出され、その左に１ステージ分の非処理状態「０」のステージがある。このため、シーケンサＳＱは、ＩＦステージにインターロック信号を１回供給して、次の遷移でパイプラインステージの処理状態を（１０１００）に制御する。この処理状態（１０１００）は、基本パターンと一致する。
【００５３】
つまり、５段のステージからなるパイプラインのステータス情報は、上記の例では、次のように遷移することになる。
−）０００００
１）１００００（Ｔａｒｇｅｔ命令のフェッチ）
２）１１０００（後続命令のフェッチ）
３）１０１００（ＩＦステージへのインターロック信号の供給）
４）３）の結果、基本パターンと一致しない場合は、２）と３）の処理を、パイプラインステージの処理状態が基本パターンと一致するまで繰り返す。これにより、基本パターンと同一の命令処理状態及び命令非処理状態のパターンがＩＦステージ及びＩＤステージによって順次生成される。
【００５４】
図１０のフローチャート図において、シーケンサＳＱは、上記の処理を、同図の各ステートに基づいて行う。初めに、ＩＤＬＥステートで、シーケンサＳＱはＴａｒｇｅｔ命令のフェッチ処理が終了したか否かを監視する。続いて、ＰＲＥ１ステートでは、シーケンサＳＱは、基本パターンを基本パターンテーブルＰ１から読み出し、図８の基本パターンレジスタＲ１及び基本パターンシフトレジスタＲ２に書き込む。そして、シーケンサＳＱは、ＰＲＥ２ステートにおいて、基本パターンシフトレジスタＲ２を、その後に処理されるＴＥＳＴ１ステートの制御処理のためにシフトしておく。
【００５５】
具体的に、シーケンサＳＱは、基本パターンシフトレジスタＲ２の各レジスタＡ〜Ｅの値を、レジスタＥ＝処理状態「１」になるまでシフトする。この結果、基本パターンにおける処理状態「１」を示す最も後ろ（右端）のステージがシフト後のレジスタＥに、当該処理状態「１」を示すステージの前隣りのステージがレジスタＤに対応するようにシフトされる。そのため、シーケンサＳＱは、レジスタＤの値（信号ｓｄ）に基づいて、当該値が非処理状態「０」の場合は、基本パターンにおいて処理状態「１」が連続しないことからＩＦステージにインターロック信号を供給して非処理状態「０」のステージを生成し、処理状態「１」である場合には処理状態「１」が連続していることから新たな後続命令をフェッチする。また、シーケンサＳＱは、レジスタＤの値の判定を行う度に各レジスタＡ〜Ｅの値を１ステージずつシフトするため、常に、レジスタＤの値に基づいて判定処理を行うことができる。
【００５６】
続いて、ＴＥＳＴ１ステートでは、パイプラインステージの処理状態を基本パターンと一致させる。具体的に、シーケンサＳＱは、ＩＦステージ及びＩＤステージで命令が連続して処理される状態に制御した上で、レジスタＤ（信号ｓｄ）が非処理状態である場合、ＩＦステージにインターロック信号を供給することによって、ＩＦステージ及びＩＤステージで基本パターンと一致する処理状態または非処理状態のパターンを順次生成する。この処理を、各レジスタＡ〜Ｅの値をシフトさせながら、パイプラインステージの処理状態が基本パターンと一致するまで行う。
【００５７】
ＴＥＳＴ２ステートにおいて、シーケンサＳＱは、テスト命令列を最後までフェッチすると共に、フェッチストールによってＩＦステージ及びＩＤステージで命令の処理状態が不連続になることを回避する。これにより、ＴＥＳＴ１ステートで生成された基本パターンの派生パターンの処理状態が順次生成される。
【００５８】
図１１は、各ステートの処理の詳細を説明するフローチャート図である。以下、ステート毎に説明する。
【００５９】
［ＩＤＬＥステート］
ＩＤＬＥステートにおいて、シーケンサＳＱは、Ｔａｒｇｅｔ命令がフェッチされたか否かを判定する（Ｓ２１）。具体的に、シーケンサＳＱは、プロセッサ１０が処理中の命令のプログラムカウンタとＴａｒｇｅｔ命令のプログラムカウンタとを比較する比較器３２の比較結果（図８のｓ３）を判定する。その比較結果ｓ３がアサートした場合（Ｓ２１のＹＥＳ）、即ち、一致した場合、Ｔａｒｇｅｔ命令のフェッチ処理が確認されるのでシーケンサＳＱはＰＲＥ１ステートに遷移する。この時、シーケンサＳＱは、全てのパイプラインステージにインターロック信号ｒ１を供給し、全パイプラインステージの命令の遷移を停止しておく。一方、比較結果ｓ３がアサートしない場合（Ｓ２１のＮＯ）、シーケンサＳＱは、インターロック信号を供給することなく、再び、Ｔａｒｇｅｔ命令がフェッチされたか否かの判定を行う。
【００６０】
［ＰＲＥ１ステート］
ＰＲＥ１ステートでは、シーケンサＳＱは、基本パターンを読み出して、基本パターンレジスタＲ１及び基本パターンシフトレジスタＲ２に書き込み、ＰＲＥ２ステートに遷移する（Ｓ２２）。この時、シーケンサＳＱは、全てのパイプラインステージにインターロック信号ｒ２を供給し、全てのパイプラインステージについて命令の遷移を停止させておく。
【００６１】
［ＰＲＥ２ステート］
続いて、ＰＲＥ２ステートにおいて、シーケンサＳＱは、基本パターンシフトレジスタＲ２のシフト処理を行う（Ｓ２３）。具体的に、シーケンサＳＱは、基本パターンシフトレジスタＲ２の各レジスタＡ〜Ｅに保持する値を、レジスタＥの値（信号ｓｅ）が１になるまでシフトさせる。
【００６２】
この時、シーケンサＳＱは、インターロック信号ｓ５＝１か否か（Ｓ２４）、即ち、コントローラ２０によるインターロック信号ｓ５が発生したか否かを判定する。インターロック信号ｓ５＝１の場合、即ち、コントローラ２０によるインターロック信号ｓ５が発生した場合（Ｓ２４のＹＥＳ）、シーケンサＳＱは、全てのパイプラインステージ間の命令の遷移を停止させるインターロック信号を供給する（Ｓ２５）。前述したとおり、シーケンサＳＱとコントローラ２０のインターロック信号（ｓ５、ｓ６）の論理和が実際のインターロック信号ｓ７としてパイプラインステージに供給される。つまり、シーケンサＳＱは、コントローラ２０によるインターロック信号（ｓ５）が発生した場合、自らもインターロック信号（ｓ６）を供給することによって、全てのパイプラインステージ間の命令の遷移を停止する。これにより、シーケンサＳＱは、処理状態が基本パターンと一致するまでの間に、コントローラ２０による意図しないインターロック信号が発生してパイプラインステージの処理状態が意図しない状態に変移することを回避できる。
【００６３】
一方、コントローラ２０によるインターロック信号ｓ５が発生しない場合（ｓ５＝０、Ｓ２４のＮＯ）、シーケンサＳＱは、シフトによって信号ｓｅ＝１になったか否かを判定する（Ｓ２６）。信号ｓｅ＝０の間は（Ｓ２６のＮＯ）、シーケンサＳＱは、全てのパイプラインステージのゲートにインターロック信号ｒ２を供給し、命令の遷移を停止しておく。例えば、図５のIndex４の基本パターン「１０１００」の場合、基本パターンシフトレジスタＲ２は、初め、「Ａ：１、Ｂ：０、Ｃ：１、Ｄ：０、Ｅ：０」の状態である。そこで、シーケンサＳＱは、信号ｓｅ＝１になるまで、１回目「Ａ：−、Ｂ：１、Ｃ：０、Ｄ：１、Ｅ：０」、２回目「Ａ：−、Ｂ：−、Ｃ：１、Ｄ：０、Ｅ：１」のようにシフトさせる。
【００６４】
信号ｓｅ＝１までシフトすると（Ｓ２６のＹＥＳ）、シーケンサＳＱは、パイプラインステージ内の命令の遷移を再開し、ＴＥＳＴ１ステートに遷移する。これにより、Ｔａｒｇｅｔ命令がＩＤステージに遷移し、その後続命令のフェッチ処理が行われる（Ｓ２７）。
【００６５】
［ステート：ＴＥＳＴ１］
ＴＥＳＴ１ステートに遷移すると、まず、シーケンサＳＱは、パイプラインステージの処理状態を表すステータス情報２２（ｓ４）に基づいて、新たにフェッチされた後続命令のフェッチ処理が完了したか否かを判定する（Ｓ３１）。シーケンサＳＱは、ステータス情報２２（信号ｓ４）のＩＦステージ＝０（非処理状態）の場合（Ｓ３１のＹＥＳ）、後続命令のフェッチ処理が完了していない、即ち、フェッチストールしたものとみなす。このような場合、次の遷移で、ＩＤステージに遷移する命令がなくＩＦステージ及びＩＤステージで命令処理が連続しない。そこで、シーケンサＳＱは、後続命令のフェッチが終了するまで（Ｓ３１のＮＯ）、ＩＦステージ以降に遷移するパイプラインステージ間で処理中の命令の遷移を停止するインターロック信号を供給する。これにより、ＩＦステージ及びＩＤステージで命令処理を連続させることができる。
【００６６】
続いて、シーケンサＳＱは、パイプラインステージの処理状態を表すステータス情報２２（ｓ４）が、基本レジスタＲ１に保持された基本パターンと一致するか否かを判定する（Ｓ３３）。基本パターンと一致する場合（Ｓ３３のＹＥＳ）、シーケンサＳＱは、新たな後続命令をフェッチしてＴＥＳＴ２ステートに遷移する。一方、一致しない場合（Ｓ３３のＮＯ）、シーケンサＳＱは、コントローラ２０によるインターロック信号ｓ５が発生したか否かを判定する（Ｓ３４）。この処理については、ＰＲＥ２ステートと同様である。
【００６７】
続いて、シーケンサＳＱは、シフト後の基本パターンシフトレジスタＲ２のレジスタＤの値（信号ｓｄ）＝０（非処理状態）の場合（Ｓ３６のＹＥＳ）、ＩＦステージにインターロック信号を供給する（Ｓ３７）つまり、シーケンサＳＱは、次の遷移でＩＤステージを意図的に非処理状態に制御する。一方、信号ｓｄ＝１（処理状態）の場合（Ｓ３６のＮＯ）、シーケンサＳＱは、新たな後続命令をフェッチする（Ｓ３８）。つまり、シーケンサＳＱは、次の遷移でＩＤステージを意図的に処理状態に制御する。また、シーケンサＳＱは、基本パターンシフトレジスタＲ２を１ステージ分シフトさせる（Ｓ３９）。そして、シーケンサＳＱは、再び、ＴＥＳＴ１ステート初めのステップＳ３１の判定に戻る。つまり、シーケンサＳＱは、ステータス情報が基本パターンと一致するまで、ＴＥＳＴ１ステートの処理を繰り返す。ここで、ＴＥＳＴ２ステートの説明の前に、ＴＥＳＴ１ステートまでの処理を具体例に基づいて説明する。
【００６８】
図１２は、具体例におけるパイプラインステージの処理状態の遷移、及び、基本パターンシフトレジスタＲ２の遷移を表す図である。同図の上部は、フェッチストールが発生するケースのパイプラインステージの処理状態４４及び基本パターンシフトレジスタＲ４４の遷移図である。この例において、検証対象の基本パターンは、図５の組合せパターンテーブルＰ１に図示していないが、例えば「１１１００」であり、テスト命令列における検証対象命令列の先頭命令（Ｔａｒｇｅｔ命令）は命令０であるものとする。なお、命令１及び命令２についてフェッチストールが発生し、コントローラ２０からインターロック信号ｓ５は発生しないものとする。
【００６９】
遷移図４４の時刻ｔにおいて、Ｔａｒｇｅｔ命令（以下、命令０）がフェッチされると（図１１のＳ２１のＹＥＳ）、シーケンサＳＱはＰＲＥ１ステートに遷移する。続いて、時刻ｔ＋１にて、シーケンサＳＱは、基本パターン「１１１００」を基本パターンレジスタＲ１及び基本パターンシフトレジスタＲ４４に読み込み（Ｓ２２）、「Ａ：−、Ｂ：−、Ｃ：１、Ｄ：１、Ｅ：１」の状態にシフトする（Ｓ２３）。そして、シフト後（Ｓ２６のＹＥＳ）、プロセッサ１０は命令１を新たにフェッチし（Ｓ２７）、シーケンサＳＱはＴＥＳＴ１ステートに遷移する。
【００７０】
続いて、シーケンサＳＱは、時刻ｔ＋１において、命令１のフェッチ処理が完了したか否かを判定する（Ｓ３１）。この例において命令１でフェッチストールが発生するため、ＩＦステージ＝０となり（Ｓ３１のＹＥＳ）、インターロック信号が供給され、命令０の遷移が停止される。続いて、再び、ＴＥＳＴ１ステートの初めの判定に戻り、時刻ｔ＋２において、命令１のフェッチ処理が終了すると（Ｓ３１のＮＯ）、ＩＦステージ及びＩＤステージで命令０及び命令１が連続して処理状態となる。
【００７１】
続いて、基本パターンと一致する処理状態が生成されたか否かが判定されるが（Ｓ３３）、時刻ｔ＋２の時点では、ステータス情報２２（信号ｓ４）は、ＩＦステージ＝１、ＩＤステージ＝１、ＥＸＥステージ＝０、ＭＥＭステージ＝０、ＷＢステージ０である（＝「１１０００」）。信号ｓ４「１１０００」は基本パターン「１１１００」と一致しないため（Ｓ３３のＮＯ）、続いて、信号ｓｄの判定が行われる（Ｓ３６）。この時、基本パターンシフトレジスタＲ４４における信号ｓｄ（ｄｘ）＝１であるため（Ｓ３６のＮＯ）、シーケンサＳＱは、命令２を新たにフェッチし（Ｓ３８）、基本パターンシフトレジスタＲ４４をシフトする（Ｓ３９）。
【００７２】
そして、再び、時刻ｔ＋３において、シーケンサＳＱは、命令２のフェッチ処理が完了した否かを判定するが（Ｓ３１）、命令２でもフェッチストールが発生するため（Ｓ３１のＹＥＳ）、同様にインターロック信号が供給され（Ｓ３２）、命令０及び命令１の遷移が停止される。そして、時刻ｔ＋４で命令２のフェッチ処理が完了すると（Ｓ３１のＮＯ）、パイプラインステージにおいて命令０〜命令２が連続処理状態となる。続いて、シーケンサＳＱは、ステータス情報２２（ｓ４）「１１１００」が基本パターン「１１１００」と一致したか否かを判定し（Ｓ３３）、信号ｓ４と基本パターンとが一致することにより（Ｓ３３のＹＥＳ）、シーケンサＳＱはＴＥＳＴ２ステートに遷移する。
【００７３】
このように、例えば、検証環境の状態等に起因して意図しないフェッチストールが発生した場合でも、シーケンサＳＱは、フェッチ処理が終了するまでフェッチストール以降のパイプラインステージ（ＩＤステージ〜ＷＢステージ）で処理中の命令の遷移を停止するインターロック信号を供給する。これにより、シーケンサＳＱは、パイプラインステージ間で先行命令その後続命令とで処理状態が連続するように制御することができる。つまり、シーケンサＳＱは、意図しないフェッチストールによって、パイプラインステージの処理状態が意図しない状態に変移することを回避できる。
【００７４】
続いて、別の具体例に基づいて説明する。この具体例では、図１０の説明の冒頭で前述したIndex４（図５）の基本パターン「１０１００」に一致させる場合について、図１２の下部の遷移図４５に基づいて説明する。なお、この例において、フェッチストールは発生せず、コントローラ２０によるインターロック信号ｓ５も発生しないものとする。
【００７５】
図１２の遷移図４５の時刻ｔにおいて、命令０がフェッチされると（Ｓ２１のＹＥＳ）、シーケンサＳＱはＰＲＥ１ステートに遷移する。続いて、時刻ｔ＋１において、シーケンサＳＱは、基本パターン「１０１００」を基本パターンレジスタＲ１及び基本パターンシフトレジスタＲ４５に読み込み（Ｓ２２）、前述したとおり、基本パターンシフトレジスタＲ４４を「Ａ：−、Ｂ：−、Ｃ：１、Ｄ：０、Ｅ：１」の状態にシフトする（Ｓ２３〜Ｓ２６）。そして、プロセッサ１０は命令１を新たにフェッチし（Ｓ２７）、シーケンサＳＱはＴＥＳＴ１ステートに遷移する。
【００７６】
続いて、シーケンサＳＱは、命令１のフェッチ処理が完了したか否かを判定する（Ｓ３１）。この例において、フェッチストールは発生しないため（Ｓ３１のＮＯ）、シーケンサＳＱは、続いて、基本パターンと一致する処理状態が生成されたか否かを判定する（Ｓ３３）。時刻ｔ＋１において、ステータス情報２２（信号ｓ４）「１１０００」は基本パターン「１０１００」と一致しないため（Ｓ３３のＮＯ）、シーケンサＳＱは、さらに、信号ｓｄの判定処理を行う（Ｓ３６）。この時、信号ｓｄ（ｄｙ）＝０であるため（Ｓ３６のＹＥＳ）、シーケンサＳＱはＩＦステージにインターロック信号を供給し（Ｓ３７）、基本パターンシフトレジスタＲ４５をシフトする（Ｓ３９）。
【００７７】
この結果、時刻ｔ＋２において、命令０はＩＤステージからＥＸＥステージに遷移するが、命令１はＩＦステージから遷移しない。フェッチストールは発生しないため（Ｓ３１のＮＯ）、時刻ｔ＋２において、シーケンサＳＱは、続いて、基本パターンと一致する処理状態が生成されたか否かを判定する（Ｓ３３）。この場合、ステータス情報２２（信号ｓ４）「１０１００」は基本パターン「１０１００」と一致して（Ｓ３３のＹＥＳ）、シーケンサＳＱはＴＥＳＴ２ステートに遷移する。
【００７８】
このように、本実施の形態例におけるシーケンサＳＱは、ステータス情報２２に基づいてＩＦステージ及びＩＤステージ間で命令の処理状態を連続させた上で、シフト後の基本パターンシフトレジスタＲ４５に基づいてＩＦステージにインターロック信号を供給することによって、基本パターンと一致するパイプラインステージの処理状態を順次生成する。ただし、シーケンサＳＱがステータス情報２２に基づいてパイプラインステージの処理状態を基本パターンと一致するように制御する方法は、上記の例に限定されるものではない。また、シーケンサＳＱは、必ずしも、パイプラインステージ間の命令の処理状態を連続状態にした上で制御を行う必要も、基本パターンシフトレジスタＲ２を使用する必要もない。
【００７９】
例えば、シーケンサＳＱは、基本パターンの最後尾のステージ（この例ではＷＢステージ）から順次処理状態を読み出し、読み出した処理状態が非処理状態であってＩＤステージが処理状態の場合に、ＩＦステージ及びＩＤステージの命令の遷移を停止するインターロック信号を供給する。一方、シーケンサＳＱは、読み出した処理状態が処理状態であってＩＤステージが非処理状態の場合は、ＥＸＥステージ〜ＷＢステージ間の命令の遷移を停止するインターロック信号を供給する。これにより、基本パターンと一致する処理状態がＩＤステージで順次生成される。このように、シーケンサＳＱは、他の方法によって、ステータス情報２２に基づいてインターロック信号を供給して、パイプラインステージの処理状態を基本パターンと一致するように制御してもよい。
【００８０】
［ステート：ＴＥＳＴ２］
図１３は、ＴＥＳＴ２ステートの処理を説明するフローチャート図である。ＴＥＳＴ２ステートでは、パイプラインステージの処理状態を派生パターンと一致させながら、テスト命令列の最後の命令までパイプライン処理を行う。また、シーケンサＳＱは、命令０が除算命令等のマルチ演算命令である場合、パイプラインステージの処理状態を構造ハザードが発生する処理状態に制御する。具体的に、シーケンサＳＱは、図４のようなＤＩＶステージを有するプロセッサ１０において、ＤＩＶステージとＷＢステージで同時にデータバス６１へのアクセスが発生するように、パイプラインステージの処理状態を制御する。なお、図４のプロセッサ１０において、ライトイネーブル信号ＷＳ２はＤＩＶステージの処理が終了した時に出力され、ＤＩＶ命令の後続命令はＤＩＶ命令の終了を待たずにパイプラインステージを遷移可能であるものとする。
【００８１】
命令のフェッチ処理が完了したか否かの判定（Ｓ４２）とフェッチストール時の処理（Ｓ４３）については、ＴＥＳＴ１ステートと同様である。この処理（Ｓ４２、Ｓ４３）によって、シーケンサＳＱは、フェッチストールが発生してパイプラインステージの処理状態が意図しない処理状態に変移することを回避できる。これによりシーケンサＳＱは、パイプラインステージの処理状態を基本パターンと一致した処理状態から、フェッチストールによる処理状態の変移を回避しながら、命令をさらにフェッチし遷移を進めることにより、パイプラインステージの処理状態を派生パターンと一致した処理状態に遷移させることができる。
【００８２】
続いて、命令０がＤＩＶ命令か否かが判定される（Ｓ４４）。ＤＩＶ命令ではない場合（Ｓ４４のＮＯ）、テスト命令列が最後までパイプライン処理されることにより（Ｓ５２のＹＥＳ）、ひとつの組合せパターンとテスト命令列との組合せによる検証が終了する。一方、ＤＩＶ命令である場合（Ｓ４４のＹＥＳ）、さらに、信号ｓ５が１か否かが判定される（Ｓ４５）。この判定処理については、図１１で述べたＰＲＥ２ステートと同様である。続いて、シーケンサＳＱは、ＤＩＶステージからライトイネーブル信号ＷＳ２（図４）が出力されているか否かを判定する（Ｓ４７）。ライトイネーブル信号ＷＳ２が出力されている場合（Ｓ４７のＹＥＳ）、さらに、ステータス情報２２（信号ｓ４）のＷＢステージ＝０の場合に（Ｓ５０のＮＯ）、シーケンサＳＱは、ＤＩＶステージにインターロック信号を供給する。これにより、ＷＢステージが処理状態になるまで、ＤＩＶステージの命令の遷移が停止される。
【００８３】
一方、ライトイネーブル信号ＷＳ２が非出力であって（Ｓ４７のＮＯ）、ＷＢステージ＝１の場合（Ｓ４８のＹＥＳ）、シーケンサＳＱは、ＤＩＶステージを除く全てのパイプラインステージにインターロック信号を供給する。これにより、ＤＩＶ命令の演算処理が終了するまで（ライトイネーブル信号ＷＳ２が出力されるまで）、処理中のその他の命令の遷移が停止される。
【００８４】
図１４は、ＤＩＶステージとＷＢステージにおいて構造ハザードを発生させる場合の具体例を説明する遷移図４６である。この例において、Ｔａｒｇｅｔ命令はＤＩＶ命令であり、基本パターンは「１１１００」であるものとする。また、この場合、組合せパターンにＤＩＶステージ用の情報を保持しておいてもよい。なお、信号ｓ５は発生せず、時刻ｔ＋ｎの時点でＤＩＶステージからライトイネーブル信号ＷＳ２が出力されるものとする。
【００８５】
シーケンサＳＱが、時刻ｔから時刻ｔ３にかけて、パイプラインステージの処理状態を基本パターン「１１１００」と一致するように制御する処理については、他の具体例と同様である（ＩＤＬＥステート〜ＴＥＳＴ１ステート）。ただし、この例において、時刻ｔ＋１から時刻ｔ＋２にかけて、ＤＩＶ命令は、ＩＤステージから、ＥＸＥステージではなくＤＩＶステージに遷移する。
【００８６】
そして、時刻ｔ＋ｎ−１にて、ＷＢステージ＝１、ライトイネーブル信号が非出力の状態となる（Ｓ４７のＮＯ、Ｓ４８のＹＥＳ）。このため、シーケンサＳＱは、ＤＩＶステージ以外の全てのパイプラインステージにインターロック信号を供給して、命令１〜命令４の遷移を停止する。そして、時刻ｔ＋ｎにて、ＷＢステージ＝１のまま、ＤＩＶステージからライトイネーブル信号が出力されると（Ｓ４７のＹＥＳ、Ｓ４８のＹＥＳ）、シーケンサＳＱは、インターロック信号の供給を解除する。これにより、ＤＩＶステージ及びＷＢステージで同時にデータバス６１へのアクセスが発生し構造ハザードが発生する。
【００８７】
そこで、プロセッサ１０は、時刻ｔ＋ｎにおいて、構造ハザードによる不具合が発生しないように、例えば、ＤＩＶステージ以外の全てのパイプラインステージにインターロック信号を供給する。そして、ユーザは、ＤＩＶ命令及び命令０等の演算結果が期待値と同一であることを確認することによって、構造ハザード発生時に適切なインターロック信号が供給されたか否かを判定する。なお、この具体例では、構造ハザードが発生する場合について述べたが、パイプラインステージとマルチサイクルステージとで、他のハザードが発生する場合についても適用可能である。
【００８８】
このように、本実施の形態例におけるプロセッサ検証プログラムは、パイプラインステージから分岐し、ＷＢステージと同一のリソースにアクセスするマルチサイクル演算ステージを有するプロセッサの検証について、ステータス情報に基づいてインターロック信号をパイプラインステージに供給することにより、両ステージで同時にリソースへのアクセスが発生するようにパイプラインステージの命令の処理状態を制御する。これにより、各種ハザードが発生するパイプラインステージの処理状態が生成されるため、このようなマルチサイクルステージを有するプロセッサについても、各種ハザード発生時に適切なインターロック信号が供給されたか否かが効率的に検証される。
【００８９】
また、本実施の形態例では、マルチサイクルステージ（ＤＩＶステージ）の演算処理の終了タイミングを、ＤＩＶステージからのライトイネーブル信号に基づいて判定した。しかし、この例に限定されるものではない。シーケンサＳＱは、例えば、予め認識されるマルチサイクルステージに係る処理サイクル数に基づいて、演算処理の終了タイミングを判定してもよい。
【００９０】
以上、述べてきたように、本実施の形態例におけるプロセッサ検証プログラムは、パイプラインステージそれぞれで命令が処理中か否かを示し検証すべき処理状態を規定した組合せパターンと一致するように、パイプラインステージのステータス情報２２に基づいて、一部または全部の命令の遷移を停止するインターロック信号を供給する。これにより、パイプラインステージの処理状態が予め規定した検証すべき処理状態に自動的に制御されるため、ユーザは、検証時にパイプラインステージの処理状態が意図した通りに制御されたか否かを確認しなくてもよい。
【００９１】
また、各種ハザード検出時におけるインターロック信号の供給、及び、バイパス機構を備えるプロセッサの検証に当たり、ユーザは、予め、各機能が検証されるようなパイプラインステージの処理状態を組合せパターンとして規定し、各機能が検証されるようなテスト命令列を用意する。これにより、組合せパターン及びテスト命令列の掛け合わせにより、全ての検証項目が網羅されるため、ユーザは、上記のようなプロセッサの各機能の検証を効率的に行うことができる。
【００９２】
さらに、本実施の形態例におけるプロセッサ検証プログラムは、検証時の環境等に起因する意図しないフェッチストールが発生した場合、ＩＦステージより後に遷移するパイプラインステージ間の命令の遷移を停止するインターロック信号を供給する。これにより、プロセッサ検証プログラムは、フェッチストールによって、パイプラインステージ間の命令処理が不連続になり、意図しない処理状態に変移することを回避できる。
【００９３】
また、本実施の形態例におけるプロセッサ検証プログラムは、パイプラインステージの処理状態が組合せパターンと一致するまでの間、プロセッサ１０から意図しないインターロック信号が発生した場合に、全てのパイプラインステージの命令の遷移を停止するインターロック信号を供給する。これにより、プロセッサ検証プログラムは、プロセッサ１０からの意図しないインターロック信号によって、パイプラインステージの処理状態が意図しない処理状態に変移することを回避できる。
【００９４】
図１５は、本実施の形態例のプロセッサ検証プログラムを使用する場合における組合せパターン、テスト命令列、及び期待値の生成処理の流れの一例を表す図である。本実施の形態例におけるプロセッサの検証プログラムを使用する場合、ユーザは、テスト命令列及び組合せパターンを容易に生成でき、また、テスト命令列の総数を抑えることができる。
【００９５】
まず、ユーザは、プロセッサ１０の仕様書Ｄ１に基づいて、LISA等の高級言語に基づくアーキテクチャ記述Ｄ２を生成する。そして、ユーザは、生成したアーキテクチャ記述Ｄ２に基づいて、検証項目Ｄ３を抽出する（Ｃ１）。図２のようなバイパス機構６０を有するプロセッサ１０の場合、検証項目Ｄ３の一例として、例えば、ＷＢステージ→ＭＥＭステージ、ＷＢステージ→ＥＸＥステージ、ＭＥＭステージ→ＥＸＥステージのバイパス処理等の検証項目が抽出される。続いて、ユーザは、抽出した検証項目に基づいて、組合せパターン及びテスト命令列を生成する。
【００９６】
なお、ユーザは、プロセッサアーキテクチャ記述Ｄ２に基づいて生成されたＩＳＳ用のモジュールＣ３に基づいて、テスト命令列７２を入力として、ＩＳＳによってシミュレートを行うことにより（Ｄ４）、期待値９１を生成できる。
【００９７】
図１６は、各検証項目に基づく組合せパターンの生成処理（Ｃ２）を説明する例図である。まず、同図のＥ１は、ＷＢステージ→ＭＥＭステージのバイパス処理を表す。このようなバイパス６０を検証するために、少なくともＷＢステージ及びＭＥＭステージで命令が処理状態である必要がある。つまり、パイプラインステージの処理状態が「×××１１」と一致すればよい。同様にして、Ｅ２のＷＢステージ→ＥＸＥステージのバイパス６０を検証するためにはパイプラインステージの処理状態が「××１０１」、Ｅ３のＭＥＭステージ→ＥＸＥステージのバイパス６０を検証するためには「××１１０」と一致すればよい。また、Ｅ４におけるバイパス処理が発生しない場合を検証するためには、パイプラインステージの処理状態が、一例として「×１００１」と一致すればよい。
【００９８】
抽出された各組合せパターン「×××１１」「××１０１」「××１１０」「×１００１」に基づいて、基本パターンが抽出される。この例において、組合せパターン「×××１１」は、組合せパターン「××１１０」がさらに遷移した状態である。そこで、組合せパターン「××１１０」「×××１１」をグループ化して派生パターンとする。そして、派生パターンの遷移元の処理状態を示す基本パターンを例えば、「１１０００」とする。また、他の組合せパターン（派生パターン）についても、「××１０１」の遷移元の処理状態として例えば基本パターン「１０１００」を、「×１００１」の遷移元の処理状態として例えば基本パターン「１００１０」を抽出する。これにより、図１６の組合せパターンテーブルＰ２が生成される。このように、組合せパターンには、バイパス処理等の検証すべき項目に対応する処理状態が規定される。
【００９９】
また、テスト命令列７２の生成について、本実施の形態例のプロセッサ検証プログラムでは、テスト命令列７２それぞれについて、全ての組合せパターンとの組合せケースが検証される。そこで、ユーザは、例えば、バイパス６０の有無やレジスタファイル５０等のリソースへのアクセスの有無等の検証項目Ｄ３に基づいて命令を分類し、検証項目Ｄ３に対応するテスト命令列７２を１パターン程度ずつテンプレートとして用意する。そして、各テスト命令列７２のテンプレートそれぞれと組合せパターンとが掛け合わされ各検証が行われることによって、全ての検証項目Ｄ３が網羅されることになる。これにより、それぞれの検証項目Ｄ３が検証されるようなテスト命令列を逐一生成していた従来の検証に対して、ユーザは、テスト命令列７２の生成にかかる工数及び、テスト命令列７２の総数を抑えることができ、プロセッサ１０の検証にかかる工数を抑えることができる。
【０１００】
なお、上記のようなテスト命令列及び組合せパターンの生成処理を、ツール等を用いて行うことによって、ユーザはプロセッサ１０の検証にかかる工数をより抑えることができる。
【０１０１】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１０２】
（付記１）
１つの命令を複数のパイプラインステージで処理し、パイプラインハザードが発生したとき前記命令のパイプラインステージ間の遷移を停止するインターロック信号が前記パイプラインステージに供給されるプロセッサの検証処理をコンピューターに実行させるコンピューター読み取り可能なプロセッサ検証プログラムにおいて、
前記検証処理は、
テスト命令列内の命令が前記パイプラインステージそれぞれで処理中か否かを示し前記パイプラインステージの検証すべき処理状態を規定するパイプラインステージ組合せパターンを参照し、前記テスト命令列の命令を実行するとき、前記パイプラインステージそれぞれで前記命令が処理中か否かを示すステータス情報に基づいて前記インターロック信号を前記パイプラインステージに供給することにより、前記パイプラインステージの前記命令の処理状態を前記パイプラインステージ組合せパターンと一致させるタイミング生成工程を有するプロセッサ検証プログラム。
【０１０３】
（付記２）
付記１において、
前記複数のパイプラインステージは、第１、２のステージを含み、
前記プロセッサは前記第１のステージの演算結果を前記第２のステージにバイパスするバイパス手段を有し、
前記パイプラインステージ組合せパターンは、前記命令が前記第１、２ステージそれぞれで処理中を示すパイプラインステージ組合せパターンを含むプロセッサ検証プログラム。
【０１０４】
（付記３）
付記１または２のいずれかにおいて、
前記複数のパイプラインステージは、第３のステージと、前記第３のステージから遷移し前記プロセッサの共有リソースにアクセス可能な第４のステージと、当該第３のステージから前記第４のステージに遷移せずに分岐し、演算処理に複数サイクルを要する前記命令を処理し当該処理の終了時に前記共有リソースにアクセス可能な第５のステージとを含み、
前記タイミング生成工程は、前記ステータス情報に基づいて前記インターロック信号を前記パイプラインステージに供給することにより、前記第４のステージと前記第５のステージとで同時に前記共有リソースへのアクセスが発生するように前記パイプラインステージの前記命令の処理状態を制御するプロセッサ検証プログラム。
【０１０５】
（付記４）
付記１乃至３のいずれかにおいて、
前記検証処理は、前記テスト命令列それぞれについて前記パイプラインステージ組合せパターン全て、実行されるプロセッサ検証プログラム。
【０１０６】
（付記５）
付記１乃至４のいずれかにおいて、
前記パイプラインステージ組合せパターンは、基本パターンと、当該基本パターンの前記処理状態から前記遷移が進むことによって生成される前記検証すべき処理状態を規定する派生パターンとを有し、
前記タイミング生成工程は、前記テスト命令列の命令を実行するとき、前記処理状態を前記基本パターンと一致させた後、さらに前記遷移を進めることにより前記処理状態を前記派生パターンと一致させるプロセッサ検証プログラム。
【０１０７】
（付記６）
付記１乃至５のいずれかにおいて、
前記複数のパイプラインステージは前記命令のフェッチ処理を行うフェッチステージを含み、
前記タイミング生成工程は、前記フェッチステージにおいて前記命令のフェッチ処理が終了するまで当該フェッチステージより先の前記パイプラインステージで処理中の前記命令の前記遷移を停止する前記インターロック信号を前記パイプラインステージに供給するプロセッサ検証プログラム。
【０１０８】
（付記７）
付記１乃至６のいずれかにおいて、
前記タイミング生成工程は、前記プロセッサから前記インターロック信号が供給された場合、前記パイプラインステージ間の全ての遷移を停止する前記インターロック信号を前記パイプラインステージに供給するプロセッサ検証プログラム。
【０１０９】
（付記８）
付記１乃至７のいずれかにおいて、
前記プロセッサはＲＴＬで記述されており、前記検証処理と並行して、前記コンピューターによって実行されるプロセッサ検証プログラム。
【符号の説明】
【０１１０】
１０：検証対象のプロセッサ、２０：プロセッサのコントローラ、３０：タイミング生成ユニット、４０：命令パイプライン、５０：レジスタファイル、６０：バイパス
【図１】
0005720243.tif 000002
【図２】
0005720243.tif 000003
【図３】
0005720243.tif 000004
【図４】
0005720243.tif 000005
【図５】
0005720243.tif 000006
【図６】
0005720243.tif 000007
【図７】
0005720243.tif 000008
【図８】
0005720243.tif 000009
【図９】
0005720243.tif 000010
【図１０】
0005720243.tif 000011
【図１１】
0005720243.tif 000012
【図１２】
0005720243.tif 000013
【図１３】
0005720243.tif 000014
【図１４】
0005720243.tif 000015
【図１５】
0005720243.tif 000016
【図１６】
0005720243.tif 000017