特許第5720243号(P5720243)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通セミコンダクター株式会社の特許一覧

<>
  • 特許5720243-プロセッサ検証プログラム 図000002
  • 特許5720243-プロセッサ検証プログラム 図000003
  • 特許5720243-プロセッサ検証プログラム 図000004
  • 特許5720243-プロセッサ検証プログラム 図000005
  • 特許5720243-プロセッサ検証プログラム 図000006
  • 特許5720243-プロセッサ検証プログラム 図000007
  • 特許5720243-プロセッサ検証プログラム 図000008
  • 特許5720243-プロセッサ検証プログラム 図000009
  • 特許5720243-プロセッサ検証プログラム 図000010
  • 特許5720243-プロセッサ検証プログラム 図000011
  • 特許5720243-プロセッサ検証プログラム 図000012
  • 特許5720243-プロセッサ検証プログラム 図000013
  • 特許5720243-プロセッサ検証プログラム 図000014
  • 特許5720243-プロセッサ検証プログラム 図000015
  • 特許5720243-プロセッサ検証プログラム 図000016
  • 特許5720243-プロセッサ検証プログラム 図000017
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5720243
(24)【登録日】2015年4月3日
(45)【発行日】2015年5月20日
(54)【発明の名称】プロセッサ検証プログラム
(51)【国際特許分類】
   G06F 11/22 20060101AFI20150430BHJP
【FI】
   G06F11/22 310A
   G06F11/22 320A
【請求項の数】7
【全頁数】25
(21)【出願番号】特願2010-292942(P2010-292942)
(22)【出願日】2010年12月28日
(65)【公開番号】特開2012-141707(P2012-141707A)
(43)【公開日】2012年7月26日
【審査請求日】2013年9月3日
(73)【特許権者】
【識別番号】308014341
【氏名又は名称】富士通セミコンダクター株式会社
(74)【代理人】
【識別番号】100094525
【弁理士】
【氏名又は名称】土井 健二
(74)【代理人】
【識別番号】100094514
【弁理士】
【氏名又は名称】林 恒徳
(72)【発明者】
【氏名】辻 雅之
【審査官】 ▲高▼橋 正▲徳▼
(56)【参考文献】
【文献】 特開2000−268074(JP,A)
【文献】 特開2008−077279(JP,A)
【文献】 特開2001−222442(JP,A)
【文献】 米国特許第06732297(US,B1)
【文献】 米国特許出願公開第2012/0023315(US,A1)
【文献】 特開2001−273340(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/22−11/26,
G06F 17/50
(57)【特許請求の範囲】
【請求項1】
命令列を複数のパイプラインステージで処理し、前記複数のパイプラインステージの前記命令列の処理状態が所定の組合せになると生じるパイプラインハザードが発生するとき前記命令のパイプラインステージ間の遷移を停止するインターロック信号前記パイプラインステージに供給し前記パイプラインハザードを回避するプロセッサの検証処理をコンピューターに実行させるコンピューター読み取り可能なプロセッサ検証プログラムにおいて、
前記検証処理は、
前記命令列であるテスト命令列の命令を実行するとき、前記パイプラインハザードが発生する前記複数のパイプラインステージの前記命令列の処理状態の前記所定の組合せを規定するパイプラインステージ組合せパターン情報と、前記パイプラインステージそれぞれで前記命令が処理中か否かを示すステータス情報に基づいて、前記複数のパイプラインステージの前記テスト命令列の処理状態の組合せを前記パイプラインステージ組合せパターン情報と一致させるように前記インターロック信号を前記パイプラインステージに供給するタイミング生成工程を有するプロセッサ検証プログラム。
【請求項2】
請求項1において、
前記複数のパイプラインステージは、第1、2のステージを含み、
前記プロセッサは前記第1のステージの演算結果を前記第2のステージにバイパスするバイパス手段を有し、
前記パイプラインステージ組合せパターン情報は、前記命令が前記第1、2ステージそれぞれで処理中を示すパイプラインステージ組合せパターン情報を含むプロセッサ検証プログラム。
【請求項3】
請求項1または2のいずれかにおいて、
前記複数のパイプラインステージは、第3のステージと、前記第3のステージから遷移し前記プロセッサの共有リソースにアクセス可能な第4のステージと、当該第3のステージから前記第4のステージに遷移せずに分岐し、演算処理に複数サイクルを要する前記命令を処理し当該処理の終了時に前記共有リソースにアクセス可能な第5のステージとを含み、
前記タイミング生成工程は、前記ステータス情報に基づいて前記インターロック信号を前記パイプラインステージに供給することにより、前記第4のステージと前記第5のステージとで同時に前記共有リソースへのアクセスが発生するように前記パイプラインステージの前記命令の処理状態を制御するプロセッサ検証プログラム。
【請求項4】
請求項1乃至3のいずれか1項において、
前記検証処理は、前記テスト命令列それぞれについて前記パイプラインステージ組合せパターン情報全て、実行されるプロセッサ検証プログラム。
【請求項5】
請求項1乃至4のいずれか1項において、
前記パイプラインステージ組合せパターン情報は、基本パターン情報と、当該基本パターン情報の前記処理状態から前記遷移が進むことによって生成される前記検証すべき処理状態を規定する派生パターン情報とを有し、
前記タイミング生成工程は、前記テスト命令列の命令を実行するとき、前記処理状態を前記基本パターン情報と一致させた後、さらに前記遷移を進めることにより前記処理状態を前記派生パターン情報と一致させるプロセッサ検証プログラム。
【請求項6】
請求項1乃至5のいずれか1項において、
前記複数のパイプラインステージは前記命令のフェッチ処理を行うフェッチステージを含み、
前記タイミング生成工程は、前記フェッチステージにおいて前記命令のフェッチ処理が終了するまで当該フェッチステージより先の前記パイプラインステージで処理中の前記命令の前記遷移を停止する前記インターロック信号を前記パイプラインステージに供給するプロセッサ検証プログラム。
【請求項7】
請求項1乃至6のいずれか1項において、
前記パイプラインハザードは、同一のリソースにアクセスする前記複数のパイプラインステージが処理中となる処理状態であることを特徴とするプロセッサ検証プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサ検証プログラムに関する。
【背景技術】
【0002】
近年、プロセッサのマルチコア化を目的として、アプリケーションに特化したプロセッサASP(Application Specific Processor)を利用する事例が増加している。ASPは、ユーザが実行するアプリケーションに特化し、当該アプリケーションを高速に処理するための専用の命令を有するプロセッサである。
【0003】
ユーザが、アプリケーションを実行するシステムを構築する度に、ASPを生成することは容易ではない。しかし、例えば、LISA(参考文献:“Architecture Exploration for Embedded Processors with LISA”,Andreas Hoffmann他共著)等の専用の記述言語が用意されており、ユーザは、LISAを用いてプロセッサのアーキテクチャ定義を記述し、専用コンパイラでプロセッサのRTL(Register Transfer Level)に変換することにより、ASPを生成することができる。これにより、ユーザは、ASPの生成に係る工数を抑えることができる。ただし、自動生成したASPの検証は不可欠であり、その検証に多大な工数を要する。
【0004】
また、近年の命令パイプラインを備えるプロセッサでは、例えば、パイプラインハザードの検出時に適切なインターロック信号を出力したか否か、バイパス回路が適切に動作したか否か等の検証が不可欠である。そのため、ユーザは、例えば、インターロック信号が出力されるようなパイプラインステージの命令の処理状態、またはバイパス回路が動作するパイプラインステージの命令の処理状態を手作業で生成し、その処理状態で適切な動作が行われたか否かを検証していた。
【0005】
具体的に、例えば、連続した2つの命令が隣り合うパイプラインステージで実行される処理状態を生成する場合、ユーザは、パイプラインストールが発生しないような命令列を生成した上で、シミュレーションすることによって意図した処理状態が生成されたか否かを確認していた。また、例えば、連続した2つの命令がパイプラインステージを一つ空けて実行されるタイミングを生成する場合、ユーザは、さらに、2つの命令の間にNOP命令を追加する等の調整を行い、同様にして、シミュレーションすることによって意図した処理状態が生成されたか否かを確認していた。このように、命令パイプラインを備えるプロセッサの検証に多大な工数を要していた。
【0006】
そこで、プロセッサの検証に係る工数を削減するための技術が提供されている(特許文献1)。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2001−273340号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、従来の検証装置は、プロセッサのパイプラインステージを検証対象の処理状態に自動的に制御することは出来なかった。
【0009】
そこで、本発明では、プロセッサ検証時におけるパイプラインステージの検証すべき処理状態の生成に係る制御を自動化したプロセッサ検証プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
第1の側面は、1つの命令を複数のパイプラインステージで処理し、パイプラインハザードが発生したとき前記命令のパイプラインステージ間の遷移を停止するインターロック信号が前記パイプラインステージに供給されるプロセッサの検証処理をコンピューターに実行させるコンピューター読み取り可能なプロセッサ検証プログラムにおいて、
前記検証処理は、
テスト命令列内の命令が前記パイプラインステージそれぞれで処理中か否かを示し前記パイプラインステージの検証すべき処理を規定するステージ組合せパターンを参照し、前記テスト命令列の命令を実行するとき、前記パイプラインステージそれぞれで前記命令が処理中か否かを示すステータス情報に基づいて前記インターロック信号を前記パイプラインステージに供給することにより、前記パイプラインステージの前記命令の処理状態を前記ステージ組合せパターンと一致させるタイミング生成工程を有する。
【発明の効果】
【0011】
第1の側面によれば、プロセッサ検証時におけるパイプラインステージの検証すべき処理状態の生成に係る制御を自動化できる。
【図面の簡単な説明】
【0012】
図1】本実施の形態例におけるプロセッサ検証プログラムを有するコンピューターの構成の一例を表す図である。
図2図1のテストベンチの構成の一例を表す図である。
図3】データハザード発生時及びバイパス処理時のパイプラインステージの遷移を表す図である。
図4】DIVステージを有するプロセッサの命令パイプラインの一例を表す図である。
図6】プロセッサの検証手順を表すフローチャート図である。
図5】パイプラインステージ組合せパターンテーブルを表す例図である。
図7】テスト命令列の一例を表す図である。
図8】タイミング生成ユニットのブロック図の一例を表す図である。
図9図8におけるシーケンサの構成の一例を表す図である。
図10】シーケンサ本体の処理の概要を表すフローチャート図である。
図11】シーケンサ本体の制御処理の詳細を表すフローチャート図である。
図12】具体例におけるパイプラインステージの処理状態、及び、基本パターンシフトレジスタの遷移を表す図である。
図13】シーケンサのTEST2ステートの処理の流れを表すフローチャート図である。
図14】構造ハザードを発生させる場合の制御の具体例を説明する図である。
図15】組合せパターン及びテスト命令列生成処理の流れを表す例図である。
図16】検証項目に基づいた組合せパターンの生成を表す例図である。
【発明を実施するための形態】
【0013】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【0014】
本実施の形態例におけるプロセッサ検証プログラムは、テスト命令列内の命令がパイプラインステージそれぞれで処理中か否かを示しパイプラインステージの検証すべき処理を規定するステージ組合せパターンを参照する。そして、プロセッサ検証プログラムは、テスト命令列の命令を実行するとき、パイプラインステージそれぞれで前記命令が処理中か否かを示すステータス情報に基づいて前記インターロック信号をパイプラインステージに供給することにより、パイプラインステージの命令の処理状態をステージ組合せパターンと一致させるものである。
【0015】
図1は、本実施の形態例における検証装置を備えるコンピューター1の構成の一例を表す図である。同図において、コンピューター1は、コンピューター1のプロセッサ201とRAM(Random Access Memory)等のメモリ202、外部インタフェース203、メモリに格納されたファイル群204を有する。また、ファイル群204は、HDL(Hardware description language)シミュレータ205、及び、HDLシミュレータ205が実行するテストベンチ100を有する。HDLシミュレータ205は、検証手順を記述したテストベンチ100に基づいて、検証対象のデバイス(DUT:Device Under Test)であるRTL(Register Transfer Level)で記述されたプロセッサ10の検証を行う。
【0016】
図1のテストベンチ100は、検証対象のプロセッサ10に加えて、RTLで記述されたタイミング生成プログラム30及び期待値比較プログラム90を有する。また、本実施の形態例において、テストベンチ100は、テスト命令列データ72と入力データ81及び期待値データ91を入力として、演算結果82及び検証結果レポート92を出力する。テスト命令列データ72はひとつまたは複数の命令コードを有する。また、期待値データ91は、検証対象のプロセッサ10がテスト命令列を実行して出力する演算結果を、予めISS(Instruction set simulator)等のシミュレータによって予測した値である。
【0017】
タイミング生成プログラム30は、本実施の形態例のプロセッサ検証プログラムの一例であり、コンピューターのプロセッサ201と協働することによって、タイミング生成ユニット30として機能する。期待値比較プログラム90も同様にして、コンピューターのプロセッサ201と協働することによって、期待値比較ユニット90として機能する。タイミング生成ユニット30は、検証対象のプロセッサ10にインターロック信号を供給することにより、プロセッサ10のパイプラインステージの処理状態を予め検証対象として規定した処理状態と一致させる。また、期待値比較ユニット90は、検証対象のプロセッサ10の検証によって得られた演算結果82と期待値データ91とを比較し、その比較結果を検証結果レポート92として生成する。そして、ユーザは、検証結果レポート92に基づいて、プロセッサ10の検証結果を判定する。
【0018】
図2は、図1のテストベンチ100の構成の一例を表す図である。図1のHDLシミュレータ205は、初めに、テスト命令列データ72から読み出した各命令コード71及び入力データ81をテストベンチ100のメモリ70、80に展開する。そして、HDLシミュレータ205は、検証対象のプロセッサ10をブートし各命令コードをパイプライン処理させる一方、タイミング生成ユニット30にパイプラインステージの処理状態を制御させる。
【0019】
また、図2における本実施の形態例における検証対象のプロセッサ10は、Controller(コントローラ)20、命令パイプライン40、Reg(レジスタファイル)50、Bypass(バイパス)60を有する。タイミング生成ユニット30は検証時にのみ必要なユニットであるため、テストベンチ100の一部としてプロセッサ10の外部に保持されている。
【0020】
図2において、本実施の形態例におけるプロセッサ10の命令パイプライン40は、例えば「IF、ID、EXE/EXE1、MEM/EXE2、WB」の5段のステージを有する。IFステージは命令フェッチを行うステージ、IDステージは命令デコードを行うステージ、EXE/EXE1ステージ(以下、EXEステージ)は命令を実行(EXE)、または2段のパイプラインド演算の第1実行(EXE1)を行うステージであり、レジスタファイル50からデータを読み込んで演算を行う。そして、MEM/EXE2ステージ(以下、MEMステージ)は、DRAM(Dynamic Random Access Memory)80からデータを読み込む(MEM)、または2段のパイプラインド演算の第2実行(EXE2)を行うステージ、WBステージは命令の処理結果をDRAM等のメモリやレジスタファイル50に格納するステージである。
【0021】
このような命令パイプライン40を有するプロセッサ10では、複数の命令間の依存関係により各パイプラインステージで処理中の一部の命令の遷移を中断せざるを得ない状況(以下、パイプラインハザード)が生じることがある。パイプラインハザードには、データハザード、構造ハザード、制御ハザード等がある。ここで、まず、データハザードについて説明する。
【0022】
図3は、データハザード発生時、及び、バイパス処理時のパイプラインステージの遷移を表す図である。遷移図41〜43において、横方向は各パイプラインステージであり、縦方向は時間の経過を表す。命令0及び命令1は演算命令であり、命令1は命令0の演算結果を使用して演算処理を行うものとする。この例において、命令0は演算結果をWBステージでレジスタファイル50に書き込み、命令1は命令0の演算結果をEXEステージでレジスタファイル50から読み出す。
【0023】
図3の遷移図41は、データハザードが発生する場合のパイプラインステージの遷移の一例を表す図である。時刻tから時刻t+1にかけて、命令0はMEMステージからWBステージに、命令1はIDステージからEXEステージに遷移する。しかし、時刻t+1では、WBステージで命令0の演算結果のレジスタファイル50への書き込み処理が完了していないため、命令1はEXEステージでレジスタファイル50から命令0の演算結果を読み出すことができない。即ち、データハザードが発生する。そこで、プロセッサ10は、時刻tにて、データハザードを検出すると、IFステージ及びIDステージから次のパイプラインステージへのゲートを遮断するインターロック信号を供給することにより、命令の遷移を停止してデータハザードを回避する。
【0024】
図3の遷移図42は、インターロック信号が供給された場合の遷移を表す。同図の時刻t+1において、インターロック信号が供給されたことにより命令1及び命令2が遷移しない一方、命令0はWBステージに遷移してレジスタファイル50への演算結果の書き込み処理を行う。そして、時刻t+2において、命令1は、EXEステージに遷移し、レジスタファイル50から命令0の演算結果を読み出すことができる。
【0025】
このように、プロセッサ10は、一部または全部の命令の遷移をパイプラインステージ間で停止するインターロック信号を供給することにより、データハザードを回避する。ただし、インターロック信号により処理中の命令の遷移が停止してパイプラインストールst1が発生することにより、命令の処理時間が増加してしまう。そこで、プロセッサ10によっては、バイパス機構60を備える場合がある。
【0026】
図3の遷移図43は、バイパス機構60の一例を説明する図である。バイパス60とは、例えば、あるパイプラインステージで処理された命令の演算結果を、レジスタファイル50を経由することなく他のパイプラインステージに直接転送するものである。具体的に、同図の遷移図43の時刻t+1において、プロセッサ10は、WBステージにおける命令0の演算結果を直接、命令1を処理するEXEステージに転送できる。これにより、遷移図43において、データハザードの発生が回避されパイプラインストールst1が発生しない。
【0027】
なお、本実施の形態例におけるプロセッサ10は、図2の矢印のように、WBステージ→EXEステージ、WBステージ→MEMステージ、MEMステージ→EXEステージへのバイパス機構60を有する。ただし、この例に限定されるものではなく、パイパス処理が可能なパイプラインステージはプロセッサ10によって異なる。
【0028】
次に、構造ハザードについて説明する。構造ハザードは、例えば、複数の命令間でレジスタファイル50の書き込みポートやメモリアクセス用のポート等のハードウェア資源が競合する場合に発生する。具体的に、IFステージとMEMステージとでそれぞれメモリへのアクセスが発生する場合、メモリアクセス用のポートが競合し、例えば、IFステージにおける命令フェッチ処理が行えない。即ち、構造ハザードが発生する。そこで、プロセッサ10は構造ハザードを検出すると、例えば、IFステージの処理1サイクル遅らせるインターロック信号を供給することにより構造ハザードを回避する。
【0029】
なお、プロセッサ10によっては、前述した5つのパイプラインステージに加えて、除算命令(DIV命令)等のようなマルチサイクル演算命令を処理するマルチサイクル演算ステージを有する。このようなプロセッサ10においても、構造ハザードが発生する。
【0030】
図4は、マルチサイクル演算ステージ(この例では、DIVステージ)を有するプロセッサ10の命令パイプラインの一例を表す図である。同図のプロセッサ10において、DIV命令は、IDステージの後、DIVステージに遷移し(E1)、除算に要する所定サイクルの後、ライトイネーブル信号WS2を出力してデータバス61を選択し除算結果をレジスタファイル50に書き込む。この例において、DIVステージとWBステージは同一のデータバス61を使用してレジスタファイル50の演算結果を書き込む。このため、両ステージでライトイネーブル信号WS1、WS2が出力される場合、構造ハザードが発生する。そのため、プロセッサ10は、構造ハザードを検出すると、例えば、DIVステージ以外のパイプラインステージで命令の遷移を停止するインターロック信号を供給することにより、構造ハザードによる不具合を回避する。
【0031】
続いて、制御ハザードについて説明する。制御ハザードは、例えば、分岐命令を処理する場合、分岐命令の処理結果が判明するまで次に処理されるべき命令のパイプライン処理を停止する場合に発生する。この場合、例えば、プロセッサ10は、分岐先の命令が判明するまで、後続の命令のフェッチ処理を停止するインターロック信号を供給して、制御ハザードによる不具合を回避する。
【0032】
以上のように、プロセッサ10は、バイパス処理や、検出したパイプラインハザードを回避するためのパイプラインステージへのインターロック信号の供給を行う。このようなプロセッサ10の検証では、インターロック信号の供給やバイパス処理が発生するようなパイプラインステージの命令の処理状態の生成が不可欠であり、その処理状態で適切にインターロック信号の供給やバイパス処理が実行されたか否かを検証する必要がある。即ち、検証すべき処理状態になったタイミングで、インターロック信号の供給やバイパス処理が適切に実行されたか否かが検証される。しかしながら、このようなパイプラインステージの命令の処理状態の生成には多大な工数を要する。
【0033】
そこで、本実施の形態例におけるプロセッサ検証プログラムは、テスト命令列の命令の実行時、ステージ組合せパターン(以下、組合せパターン)を参照して、パイプラインステージにおける命令の処理状態に基づいてインターロック信号をパイプラインステージに供給することによって、パイプラインステージの命令の処理状態をステージ組合せパターンと一致させる。
【0034】
図5は、本実施の形態例における組合せパターンテーブルP1の一例を表す図である。組合せパターンは、パイプラインステージそれぞれで命令が処理中か否かを示す情報の組合せであり、検証すべき処理状態として予め規定したものである。この例において、組合せパターンの各桁は最上位桁から最下位桁が、IFステージ、IDステージ、EXEステージ、MEMステージ、WBステージに対応し、1は命令が処理されている状態(処理状態)を0は処理されていない状態(非処理状態)を表す。また、組合せパターンは、基本パターンと、各基本パターンから派生する処理状態を規定した派生パターンとを有する。派生パターンの処理状態は、基本パターンの処理状態から、さらに、パイプラインステージ間における命令の遷移が進むことにより生成される。
【0035】
具体的に、例えば、Index0の基本パターン「10111」はIDステージ以外の全てのパイプラインステージで、Index2の基本パターン「10110」はIDステージ及びWBステージ以外のパイプラインステージで命令が処理されている処理状態であることを表す。そして、Index2の派生パターン「11011」は、基本パターン「10110」の処理状態から、パイプラインステージ上で処理中の各命令が遷移すると共に、新たな命令がフェッチされることにより生成される。Index6の派生パターン「11100、11110、n1111」も同様にして、基本パターン「11000」の処理状態から、遷移が進むことによって順次生成される。なお、派生パターン「n1111」におけるnは予めテスト命令列に含まれたNOP命令を表す。
【0036】
なお、図5の例において、派生パターンは、基本パターンの処理状態から、パイプラインステージ上の命令が遷移すると共に、新たな命令がフェッチされることにより生成されるが、派生パターンは、単に、基本パターンの処理状態からパイプラインステージ上の命令が遷移することによって生成されてもよい。
【0037】
このように、本実施の形態例に組合せパターンは、基本パターンと当該基本パターンの処理状態からさらに遷移が進むことによって生成される検証すべき処理状態を規定した派生パターンとを有する。これにより、タイミング生成ユニット30は、インターロック信号の供給によりパイプラインステージの処理状態を基本パターンと一致するように制御した上で、さらに新たな命令をフェッチしながら遷移を進めることによって派生パターンと一致する処理状態を生成できる。つまり、タイミング生成ユニット30は、全ての派生パターン毎に、パイプラインステージの処理状態を初期状態から逐一、制御して生成する必要がなく、効率的に検証処理を行うことができる。
【0038】
図6は、本実施の形態例における図1のテストベンチ100におけるプロセッサ10の検証手順を表すフローチャート図である。初めに、HDLシミュレータ205(図1)は、テスト命令列データ72から読み出した命令コード71をIRAM70(図2)に、入力データ81をDRAM80(図2)に書き込む(S10)。そして、HDLシミュレータ205は、検証対象のプロセッサ10をブートし、命令コード71のフェッチ処理を開始させ、シミュレーションを開始する(S11)。フェッチされた命令がパイプライン処理される一方、タイミング生成ユニット30は、検証対象のプロセッサ10のパイプラインステージの処理状態を制御する(S12)。この制御では、パイプラインステージの処理状態をテスト命令列に対応する組合せパターンと一致させる。それにより、その処理状態でインターロック信号の供給やバイパス処理が適切に行われ正しい演算結果が得られるか否かによって検証することができる。詳細については後述する。
【0039】
続いて、パイプラインステージの処理状態をひとつの組合せパターン(ひとつの基本パターン及び当該基本パターンに関する派生パターン)に一致させると、HDLシミュレータ205は、全ての組合せパターンに一致させたか否かを判定する(S13)。全ての組合せパターンと一致させていない場合(S13のNO)、HDLシミュレータ205は、検証対象のプロセッサ10をリセットして初期化し(S15)、組合せパターンテーブルから次の組合せパターンを読み出す(S16)。そして、HDLシミュレータ205は、再び、検証対象のプロセッサ10をブートし、テスト命令列72の命令のフェッチ処理を開始させる(S11)。
【0040】
一方、全ての組合せパターンと一致させた場合(S13のYES)、HDLシミュレータ205は、続いて、全てのテスト命令列72を実行したか否かを判定する(S14)。全てのテスト命令列72を実行していない場合(S14のNO)、HDLシミュレータ205は、検証対象のプロセッサ10に加え、タイミング生成ユニット30をリセットして初期化する(S17)。そして、HDLシミュレータ205は、次のテスト命令列72をメモリから読み出し、全ての組合せパターンと一致させる制御(S10〜S14)を行う。一方、全てのテスト命令列72を実行した場合(S14のYES)、HDLシミュレータ205は、検証を終了する。
【0041】
図7は、テスト命令列72の一例を表す図である。同図のテスト命令列は、初期設定命令列Cs、検証対象命令列Cx、及び、演算結果出力命令列Ceを有する。初期設定命令列Csは検証のための初期設定を行う命令であり、演算結果出力命令列Ceは検証対象命令列Cxの演算結果を出力する命令である。検証対象命令列Cxは少なくともパイプラインステージ数分の命令を有する。本実施の形態例におけるプロセッサ10は5段の命令パイプライン40を有するため、検証対象命令列Cxは5つの命令を有する。なお、テスト命令列72は、少なくとも検証対象命令列Cxを有していればよい。
【0042】
続いて、図6のフローチャート図におけるステップS12の処理、即ち、パイプラインステージの処理状態を組合せパターン(図5)と一致させる処理の詳細について説明する。
【0043】
図8は、本実施の形態例におけるタイミング生成ユニット30のブロック図の一例を表す図である。タイミング生成ユニット30は、パイプラインステージ組合せ制御ブロック33、TargetPCレジスタ31、比較器32を有する。また、パイプラインステージ組合せ制御ブロック33は、シーケンサ34、パイプラインステージ組合せパターンP1(図5)を有する。TargetPCレジスタ31には、図7に例示したテスト命令列における検証対象命令列Cxの先頭命令のプログラムカウンタが保持される。
【0044】
一方、図8の検証対象のプロセッサ10のコントローラ20は、実行中の命令のプログラムカウンタを保持するPCレジスタ21、パイプラインステージステータス情報レジスタ22、インターロック信号生成回路23を有する。パイプラインステージステータス情報22は、検証対象のプロセッサ10の各パイプラインステージそれぞれで命令が処理中か否かを示す情報(本実施の形態例では、0:処理状態、1:非処理状態)であり、インターロック信号生成回路23は、ハザード検出時にインターロック信号s5を命令パイプラインステージ40に供給する回路である。
【0045】
シミュレーションが開始されると(図6のS11)、タイミング生成ユニット30のシーケンサ34は組合せパターンテーブルP1から基本パターンをひとつ読み出す(s1、s2)。続いて、タイミング生成ユニット30の比較器32は、コントローラ20による実行中の命令のプログラムカウンタと、TargetPCレジスタ31に保持したプログラムカウンタとを比較し、一致した場合にシーケンサ34に通知する(s3)。つまり、比較器32は、テスト命令列における検証対象命令列Cxの処理が開始したか否かを監視する。
【0046】
通知を受けると(s3)、シーケンサ34は、コントローラ20から各パイプラインステージの命令の処理状態を表すステータス情報22を取得する(s4)。次に、シーケンサは、コントローラ20によるインターロック信号(s5)を参照しながら、ステータス情報22に基づいて、パイプラインステージの処理状態が基本パターンの規定する処理状態と一致するように、インターロック信号を命令パイプライン40に供給する(s6)。この処理(s6)について、さらに、図9図12において後述する。
【0047】
そして、シーケンサ34によるインターロック信号(s6)と、コントローラ20によるインターロック信号(s5)との論理和が、実際のインターロック信号として各パイプラインステージに供給される(s7)。タイミング生成ユニット30は、テスト命令列の処理が終了するまで、コントローラ20からのパイプラインステージのステータス情報22に基づいてインターロック信号を供給する(s4〜s7)。全ての組合せパターンへの一致制御が終了していない場合(図6のS14のNO)、タイミング生成ユニット30は、コントローラ20にリセット信号を出力する(s8、図6のS17)。続いて、シーケンサ34は組合せパターンテーブルP1から次の基本パターンを読み出して(s1、s2)、同様にしてテスト命令列を実行する(s3〜s8)。
【0048】
図9は、図8のシーケンサ34の構成の一例を表す図である。シーケンサ34は、図8で述べた通り、PCレジスタ21の値、パイプラインステージステータス情報22(s4)、及び、コントローラ20によるインターロック信号s5を入力し、インターロック信号s6を出力する。また、シーケンサ34は、シーケンサ本体SQに加え、基本パターンレジスタR1と基本パターンシフトレジスタR2とを有する。基本パターンレジスタR1は、組合せパターンテーブルP1から読み出した(図8のs1、s2)基本パターンを保持し、パイプラインステージの処理状態が基本パターンと一致したか否かを判定するために使用される。また、基本パターンシフトレジスタR2はパイプラインステージ数分のレジスタA〜Eを有する。続いて、処理の流れについて説明する。
【0049】
図10は、図9のシーケンサ本体(以下、シーケンサ)SQの制御処理の概要を説明するフローチャート図である。本実施の形態例におけるシーケンサSQは、例えば、次のように、パイプラインステージの処理状態を組合せパターンと一致させる。ここで、組合せテーブル(図5)のIndex4の基本パターン「10100」と一致させる場合について説明する。
【0050】
1)まず、シーケンサSQは、Target命令のフェッチ処理が行われたことを検出する。この時、パイプラインステージの処理状態は(10000)となる。
【0051】
2)次に、シーケンサSQは、後続命令をフェッチし、Target命令とその後続命令をIFステージ及びIDステージでそれぞれ連続処理状態に制御する。ただし、この時、後続命令のフェッチストールが発生した場合、当該後続命令のフェッチ処理が終了するまで、インターロック信号を供給してTarget命令の遷移を停止しておく。これにより、パイプラインステージの処理状態が必ず連続し(11000)となる。
【0052】
3)IFステージ及びIDステージで連続して処理状態に制御した上で、シーケンサSQは、基本パターンにおいて、一番後ろ(右端)のステージから順に辿って処理状態(本実施の形態例では「1」)を示すステージを検出し、当該ステージの前隣り(左隣り)における非処理状態(本実施の形態例では「0」)のステージ分だけ、IFステージに対してインターロック信号を供給する。これにより、インターロック信号を供給した分だけ、即ち、前隣りの非処理状態のステージ分、Target命令と後続命令が処理されるステージの間のステージが非処理状態になる。この例では、基本パターン「10100」のうち右端から3ステージ目に処理状態「1」のステージが検出され、その左に1ステージ分の非処理状態「0」のステージがある。このため、シーケンサSQは、IFステージにインターロック信号を1回供給して、次の遷移でパイプラインステージの処理状態を(10100)に制御する。この処理状態(10100)は、基本パターンと一致する。
【0053】
つまり、5段のステージからなるパイプラインのステータス情報は、上記の例では、次のように遷移することになる。
−)00000
1)10000(Target命令のフェッチ)
2)11000(後続命令のフェッチ)
3)10100(IFステージへのインターロック信号の供給)
4)3)の結果、基本パターンと一致しない場合は、2)と3)の処理を、パイプラインステージの処理状態が基本パターンと一致するまで繰り返す。これにより、基本パターンと同一の命令処理状態及び命令非処理状態のパターンがIFステージ及びIDステージによって順次生成される。
【0054】
図10のフローチャート図において、シーケンサSQは、上記の処理を、同図の各ステートに基づいて行う。初めに、IDLEステートで、シーケンサSQはTarget命令のフェッチ処理が終了したか否かを監視する。続いて、PRE1ステートでは、シーケンサSQは、基本パターンを基本パターンテーブルP1から読み出し、図8の基本パターンレジスタR1及び基本パターンシフトレジスタR2に書き込む。そして、シーケンサSQは、PRE2ステートにおいて、基本パターンシフトレジスタR2を、その後に処理されるTEST1ステートの制御処理のためにシフトしておく。
【0055】
具体的に、シーケンサSQは、基本パターンシフトレジスタR2の各レジスタA〜Eの値を、レジスタE=処理状態「1」になるまでシフトする。この結果、基本パターンにおける処理状態「1」を示す最も後ろ(右端)のステージがシフト後のレジスタEに、当該処理状態「1」を示すステージの前隣りのステージがレジスタDに対応するようにシフトされる。そのため、シーケンサSQは、レジスタDの値(信号sd)に基づいて、当該値が非処理状態「0」の場合は、基本パターンにおいて処理状態「1」が連続しないことからIFステージにインターロック信号を供給して非処理状態「0」のステージを生成し、処理状態「1」である場合には処理状態「1」が連続していることから新たな後続命令をフェッチする。また、シーケンサSQは、レジスタDの値の判定を行う度に各レジスタA〜Eの値を1ステージずつシフトするため、常に、レジスタDの値に基づいて判定処理を行うことができる。
【0056】
続いて、TEST1ステートでは、パイプラインステージの処理状態を基本パターンと一致させる。具体的に、シーケンサSQは、IFステージ及びIDステージで命令が連続して処理される状態に制御した上で、レジスタD(信号sd)が非処理状態である場合、IFステージにインターロック信号を供給することによって、IFステージ及びIDステージで基本パターンと一致する処理状態または非処理状態のパターンを順次生成する。この処理を、各レジスタA〜Eの値をシフトさせながら、パイプラインステージの処理状態が基本パターンと一致するまで行う。
【0057】
TEST2ステートにおいて、シーケンサSQは、テスト命令列を最後までフェッチすると共に、フェッチストールによってIFステージ及びIDステージで命令の処理状態が不連続になることを回避する。これにより、TEST1ステートで生成された基本パターンの派生パターンの処理状態が順次生成される。
【0058】
図11は、各ステートの処理の詳細を説明するフローチャート図である。以下、ステート毎に説明する。
【0059】
[IDLEステート]
IDLEステートにおいて、シーケンサSQは、Target命令がフェッチされたか否かを判定する(S21)。具体的に、シーケンサSQは、プロセッサ10が処理中の命令のプログラムカウンタとTarget命令のプログラムカウンタとを比較する比較器32の比較結果(図8のs3)を判定する。その比較結果s3がアサートした場合(S21のYES)、即ち、一致した場合、Target命令のフェッチ処理が確認されるのでシーケンサSQはPRE1ステートに遷移する。この時、シーケンサSQは、全てのパイプラインステージにインターロック信号r1を供給し、全パイプラインステージの命令の遷移を停止しておく。一方、比較結果s3がアサートしない場合(S21のNO)、シーケンサSQは、インターロック信号を供給することなく、再び、Target命令がフェッチされたか否かの判定を行う。
【0060】
[PRE1ステート]
PRE1ステートでは、シーケンサSQは、基本パターンを読み出して、基本パターンレジスタR1及び基本パターンシフトレジスタR2に書き込み、PRE2ステートに遷移する(S22)。この時、シーケンサSQは、全てのパイプラインステージにインターロック信号r2を供給し、全てのパイプラインステージについて命令の遷移を停止させておく。
【0061】
[PRE2ステート]
続いて、PRE2ステートにおいて、シーケンサSQは、基本パターンシフトレジスタR2のシフト処理を行う(S23)。具体的に、シーケンサSQは、基本パターンシフトレジスタR2の各レジスタA〜Eに保持する値を、レジスタEの値(信号se)が1になるまでシフトさせる。
【0062】
この時、シーケンサSQは、インターロック信号s5=1か否か(S24)、即ち、コントローラ20によるインターロック信号s5が発生したか否かを判定する。インターロック信号s5=1の場合、即ち、コントローラ20によるインターロック信号s5が発生した場合(S24のYES)、シーケンサSQは、全てのパイプラインステージ間の命令の遷移を停止させるインターロック信号を供給する(S25)。前述したとおり、シーケンサSQとコントローラ20のインターロック信号(s5、s6)の論理和が実際のインターロック信号s7としてパイプラインステージに供給される。つまり、シーケンサSQは、コントローラ20によるインターロック信号(s5)が発生した場合、自らもインターロック信号(s6)を供給することによって、全てのパイプラインステージ間の命令の遷移を停止する。これにより、シーケンサSQは、処理状態が基本パターンと一致するまでの間に、コントローラ20による意図しないインターロック信号が発生してパイプラインステージの処理状態が意図しない状態に変移することを回避できる。
【0063】
一方、コントローラ20によるインターロック信号s5が発生しない場合(s5=0、S24のNO)、シーケンサSQは、シフトによって信号se=1になったか否かを判定する(S26)。信号se=0の間は(S26のNO)、シーケンサSQは、全てのパイプラインステージのゲートにインターロック信号r2を供給し、命令の遷移を停止しておく。例えば、図5のIndex4の基本パターン「10100」の場合、基本パターンシフトレジスタR2は、初め、「A:1、B:0、C:1、D:0、E:0」の状態である。そこで、シーケンサSQは、信号se=1になるまで、1回目「A:−、B:1、C:0、D:1、E:0」、2回目「A:−、B:−、C:1、D:0、E:1」のようにシフトさせる。
【0064】
信号se=1までシフトすると(S26のYES)、シーケンサSQは、パイプラインステージ内の命令の遷移を再開し、TEST1ステートに遷移する。これにより、Target命令がIDステージに遷移し、その後続命令のフェッチ処理が行われる(S27)。
【0065】
[ステート:TEST1]
TEST1ステートに遷移すると、まず、シーケンサSQは、パイプラインステージの処理状態を表すステータス情報22(s4)に基づいて、新たにフェッチされた後続命令のフェッチ処理が完了したか否かを判定する(S31)。シーケンサSQは、ステータス情報22(信号s4)のIFステージ=0(非処理状態)の場合(S31のYES)、後続命令のフェッチ処理が完了していない、即ち、フェッチストールしたものとみなす。このような場合、次の遷移で、IDステージに遷移する命令がなくIFステージ及びIDステージで命令処理が連続しない。そこで、シーケンサSQは、後続命令のフェッチが終了するまで(S31のNO)、IFステージ以降に遷移するパイプラインステージ間で処理中の命令の遷移を停止するインターロック信号を供給する。これにより、IFステージ及びIDステージで命令処理を連続させることができる。
【0066】
続いて、シーケンサSQは、パイプラインステージの処理状態を表すステータス情報22(s4)が、基本レジスタR1に保持された基本パターンと一致するか否かを判定する(S33)。基本パターンと一致する場合(S33のYES)、シーケンサSQは、新たな後続命令をフェッチしてTEST2ステートに遷移する。一方、一致しない場合(S33のNO)、シーケンサSQは、コントローラ20によるインターロック信号s5が発生したか否かを判定する(S34)。この処理については、PRE2ステートと同様である。
【0067】
続いて、シーケンサSQは、シフト後の基本パターンシフトレジスタR2のレジスタDの値(信号sd)=0(非処理状態)の場合(S36のYES)、IFステージにインターロック信号を供給する(S37)つまり、シーケンサSQは、次の遷移でIDステージを意図的に非処理状態に制御する。一方、信号sd=1(処理状態)の場合(S36のNO)、シーケンサSQは、新たな後続命令をフェッチする(S38)。つまり、シーケンサSQは、次の遷移でIDステージを意図的に処理状態に制御する。また、シーケンサSQは、基本パターンシフトレジスタR2を1ステージ分シフトさせる(S39)。そして、シーケンサSQは、再び、TEST1ステート初めのステップS31の判定に戻る。つまり、シーケンサSQは、ステータス情報が基本パターンと一致するまで、TEST1ステートの処理を繰り返す。ここで、TEST2ステートの説明の前に、TEST1ステートまでの処理を具体例に基づいて説明する。
【0068】
図12は、具体例におけるパイプラインステージの処理状態の遷移、及び、基本パターンシフトレジスタR2の遷移を表す図である。同図の上部は、フェッチストールが発生するケースのパイプラインステージの処理状態44及び基本パターンシフトレジスタR44の遷移図である。この例において、検証対象の基本パターンは、図5の組合せパターンテーブルP1に図示していないが、例えば「11100」であり、テスト命令列における検証対象命令列の先頭命令(Target命令)は命令0であるものとする。なお、命令1及び命令2についてフェッチストールが発生し、コントローラ20からインターロック信号s5は発生しないものとする。
【0069】
遷移図44の時刻tにおいて、Target命令(以下、命令0)がフェッチされると(図11のS21のYES)、シーケンサSQはPRE1ステートに遷移する。続いて、時刻t+1にて、シーケンサSQは、基本パターン「11100」を基本パターンレジスタR1及び基本パターンシフトレジスタR44に読み込み(S22)、「A:−、B:−、C:1、D:1、E:1」の状態にシフトする(S23)。そして、シフト後(S26のYES)、プロセッサ10は命令1を新たにフェッチし(S27)、シーケンサSQはTEST1ステートに遷移する。
【0070】
続いて、シーケンサSQは、時刻t+1において、命令1のフェッチ処理が完了したか否かを判定する(S31)。この例において命令1でフェッチストールが発生するため、IFステージ=0となり(S31のYES)、インターロック信号が供給され、命令0の遷移が停止される。続いて、再び、TEST1ステートの初めの判定に戻り、時刻t+2において、命令1のフェッチ処理が終了すると(S31のNO)、IFステージ及びIDステージで命令0及び命令1が連続して処理状態となる。
【0071】
続いて、基本パターンと一致する処理状態が生成されたか否かが判定されるが(S33)、時刻t+2の時点では、ステータス情報22(信号s4)は、IFステージ=1、IDステージ=1、EXEステージ=0、MEMステージ=0、WBステージ0である(=「11000」)。信号s4「11000」は基本パターン「11100」と一致しないため(S33のNO)、続いて、信号sdの判定が行われる(S36)。この時、基本パターンシフトレジスタR44における信号sd(dx)=1であるため(S36のNO)、シーケンサSQは、命令2を新たにフェッチし(S38)、基本パターンシフトレジスタR44をシフトする(S39)。
【0072】
そして、再び、時刻t+3において、シーケンサSQは、命令2のフェッチ処理が完了した否かを判定するが(S31)、命令2でもフェッチストールが発生するため(S31のYES)、同様にインターロック信号が供給され(S32)、命令0及び命令1の遷移が停止される。そして、時刻t+4で命令2のフェッチ処理が完了すると(S31のNO)、パイプラインステージにおいて命令0〜命令2が連続処理状態となる。続いて、シーケンサSQは、ステータス情報22(s4)「11100」が基本パターン「11100」と一致したか否かを判定し(S33)、信号s4と基本パターンとが一致することにより(S33のYES)、シーケンサSQはTEST2ステートに遷移する。
【0073】
このように、例えば、検証環境の状態等に起因して意図しないフェッチストールが発生した場合でも、シーケンサSQは、フェッチ処理が終了するまでフェッチストール以降のパイプラインステージ(IDステージ〜WBステージ)で処理中の命令の遷移を停止するインターロック信号を供給する。これにより、シーケンサSQは、パイプラインステージ間で先行命令その後続命令とで処理状態が連続するように制御することができる。つまり、シーケンサSQは、意図しないフェッチストールによって、パイプラインステージの処理状態が意図しない状態に変移することを回避できる。
【0074】
続いて、別の具体例に基づいて説明する。この具体例では、図10の説明の冒頭で前述したIndex4(図5)の基本パターン「10100」に一致させる場合について、図12の下部の遷移図45に基づいて説明する。なお、この例において、フェッチストールは発生せず、コントローラ20によるインターロック信号s5も発生しないものとする。
【0075】
図12の遷移図45の時刻tにおいて、命令0がフェッチされると(S21のYES)、シーケンサSQはPRE1ステートに遷移する。続いて、時刻t+1において、シーケンサSQは、基本パターン「10100」を基本パターンレジスタR1及び基本パターンシフトレジスタR45に読み込み(S22)、前述したとおり、基本パターンシフトレジスタR44を「A:−、B:−、C:1、D:0、E:1」の状態にシフトする(S23〜S26)。そして、プロセッサ10は命令1を新たにフェッチし(S27)、シーケンサSQはTEST1ステートに遷移する。
【0076】
続いて、シーケンサSQは、命令1のフェッチ処理が完了したか否かを判定する(S31)。この例において、フェッチストールは発生しないため(S31のNO)、シーケンサSQは、続いて、基本パターンと一致する処理状態が生成されたか否かを判定する(S33)。時刻t+1において、ステータス情報22(信号s4)「11000」は基本パターン「10100」と一致しないため(S33のNO)、シーケンサSQは、さらに、信号sdの判定処理を行う(S36)。この時、信号sd(dy)=0であるため(S36のYES)、シーケンサSQはIFステージにインターロック信号を供給し(S37)、基本パターンシフトレジスタR45をシフトする(S39)。
【0077】
この結果、時刻t+2において、命令0はIDステージからEXEステージに遷移するが、命令1はIFステージから遷移しない。フェッチストールは発生しないため(S31のNO)、時刻t+2において、シーケンサSQは、続いて、基本パターンと一致する処理状態が生成されたか否かを判定する(S33)。この場合、ステータス情報22(信号s4)「10100」は基本パターン「10100」と一致して(S33のYES)、シーケンサSQはTEST2ステートに遷移する。
【0078】
このように、本実施の形態例におけるシーケンサSQは、ステータス情報22に基づいてIFステージ及びIDステージ間で命令の処理状態を連続させた上で、シフト後の基本パターンシフトレジスタR45に基づいてIFステージにインターロック信号を供給することによって、基本パターンと一致するパイプラインステージの処理状態を順次生成する。ただし、シーケンサSQがステータス情報22に基づいてパイプラインステージの処理状態を基本パターンと一致するように制御する方法は、上記の例に限定されるものではない。また、シーケンサSQは、必ずしも、パイプラインステージ間の命令の処理状態を連続状態にした上で制御を行う必要も、基本パターンシフトレジスタR2を使用する必要もない。
【0079】
例えば、シーケンサSQは、基本パターンの最後尾のステージ(この例ではWBステージ)から順次処理状態を読み出し、読み出した処理状態が非処理状態であってIDステージが処理状態の場合に、IFステージ及びIDステージの命令の遷移を停止するインターロック信号を供給する。一方、シーケンサSQは、読み出した処理状態が処理状態であってIDステージが非処理状態の場合は、EXEステージ〜WBステージ間の命令の遷移を停止するインターロック信号を供給する。これにより、基本パターンと一致する処理状態がIDステージで順次生成される。このように、シーケンサSQは、他の方法によって、ステータス情報22に基づいてインターロック信号を供給して、パイプラインステージの処理状態を基本パターンと一致するように制御してもよい。
【0080】
[ステート:TEST2]
図13は、TEST2ステートの処理を説明するフローチャート図である。TEST2ステートでは、パイプラインステージの処理状態を派生パターンと一致させながら、テスト命令列の最後の命令までパイプライン処理を行う。また、シーケンサSQは、命令0が除算命令等のマルチ演算命令である場合、パイプラインステージの処理状態を構造ハザードが発生する処理状態に制御する。具体的に、シーケンサSQは、図4のようなDIVステージを有するプロセッサ10において、DIVステージとWBステージで同時にデータバス61へのアクセスが発生するように、パイプラインステージの処理状態を制御する。なお、図4のプロセッサ10において、ライトイネーブル信号WS2はDIVステージの処理が終了した時に出力され、DIV命令の後続命令はDIV命令の終了を待たずにパイプラインステージを遷移可能であるものとする。
【0081】
命令のフェッチ処理が完了したか否かの判定(S42)とフェッチストール時の処理(S43)については、TEST1ステートと同様である。この処理(S42、S43)によって、シーケンサSQは、フェッチストールが発生してパイプラインステージの処理状態が意図しない処理状態に変移することを回避できる。これによりシーケンサSQは、パイプラインステージの処理状態を基本パターンと一致した処理状態から、フェッチストールによる処理状態の変移を回避しながら、命令をさらにフェッチし遷移を進めることにより、パイプラインステージの処理状態を派生パターンと一致した処理状態に遷移させることができる。
【0082】
続いて、命令0がDIV命令か否かが判定される(S44)。DIV命令ではない場合(S44のNO)、テスト命令列が最後までパイプライン処理されることにより(S52のYES)、ひとつの組合せパターンとテスト命令列との組合せによる検証が終了する。一方、DIV命令である場合(S44のYES)、さらに、信号s5が1か否かが判定される(S45)。この判定処理については、図11で述べたPRE2ステートと同様である。続いて、シーケンサSQは、DIVステージからライトイネーブル信号WS2(図4)が出力されているか否かを判定する(S47)。ライトイネーブル信号WS2が出力されている場合(S47のYES)、さらに、ステータス情報22(信号s4)のWBステージ=0の場合に(S50のNO)、シーケンサSQは、DIVステージにインターロック信号を供給する。これにより、WBステージが処理状態になるまで、DIVステージの命令の遷移が停止される。
【0083】
一方、ライトイネーブル信号WS2が非出力であって(S47のNO)、WBステージ=1の場合(S48のYES)、シーケンサSQは、DIVステージを除く全てのパイプラインステージにインターロック信号を供給する。これにより、DIV命令の演算処理が終了するまで(ライトイネーブル信号WS2が出力されるまで)、処理中のその他の命令の遷移が停止される。
【0084】
図14は、DIVステージとWBステージにおいて構造ハザードを発生させる場合の具体例を説明する遷移図46である。この例において、Target命令はDIV命令であり、基本パターンは「11100」であるものとする。また、この場合、組合せパターンにDIVステージ用の情報を保持しておいてもよい。なお、信号s5は発生せず、時刻t+nの時点でDIVステージからライトイネーブル信号WS2が出力されるものとする。
【0085】
シーケンサSQが、時刻tから時刻t3にかけて、パイプラインステージの処理状態を基本パターン「11100」と一致するように制御する処理については、他の具体例と同様である(IDLEステート〜TEST1ステート)。ただし、この例において、時刻t+1から時刻t+2にかけて、DIV命令は、IDステージから、EXEステージではなくDIVステージに遷移する。
【0086】
そして、時刻t+n−1にて、WBステージ=1、ライトイネーブル信号が非出力の状態となる(S47のNO、S48のYES)。このため、シーケンサSQは、DIVステージ以外の全てのパイプラインステージにインターロック信号を供給して、命令1〜命令4の遷移を停止する。そして、時刻t+nにて、WBステージ=1のまま、DIVステージからライトイネーブル信号が出力されると(S47のYES、S48のYES)、シーケンサSQは、インターロック信号の供給を解除する。これにより、DIVステージ及びWBステージで同時にデータバス61へのアクセスが発生し構造ハザードが発生する。
【0087】
そこで、プロセッサ10は、時刻t+nにおいて、構造ハザードによる不具合が発生しないように、例えば、DIVステージ以外の全てのパイプラインステージにインターロック信号を供給する。そして、ユーザは、DIV命令及び命令0等の演算結果が期待値と同一であることを確認することによって、構造ハザード発生時に適切なインターロック信号が供給されたか否かを判定する。なお、この具体例では、構造ハザードが発生する場合について述べたが、パイプラインステージとマルチサイクルステージとで、他のハザードが発生する場合についても適用可能である。
【0088】
このように、本実施の形態例におけるプロセッサ検証プログラムは、パイプラインステージから分岐し、WBステージと同一のリソースにアクセスするマルチサイクル演算ステージを有するプロセッサの検証について、ステータス情報に基づいてインターロック信号をパイプラインステージに供給することにより、両ステージで同時にリソースへのアクセスが発生するようにパイプラインステージの命令の処理状態を制御する。これにより、各種ハザードが発生するパイプラインステージの処理状態が生成されるため、このようなマルチサイクルステージを有するプロセッサについても、各種ハザード発生時に適切なインターロック信号が供給されたか否かが効率的に検証される。
【0089】
また、本実施の形態例では、マルチサイクルステージ(DIVステージ)の演算処理の終了タイミングを、DIVステージからのライトイネーブル信号に基づいて判定した。しかし、この例に限定されるものではない。シーケンサSQは、例えば、予め認識されるマルチサイクルステージに係る処理サイクル数に基づいて、演算処理の終了タイミングを判定してもよい。
【0090】
以上、述べてきたように、本実施の形態例におけるプロセッサ検証プログラムは、パイプラインステージそれぞれで命令が処理中か否かを示し検証すべき処理状態を規定した組合せパターンと一致するように、パイプラインステージのステータス情報22に基づいて、一部または全部の命令の遷移を停止するインターロック信号を供給する。これにより、パイプラインステージの処理状態が予め規定した検証すべき処理状態に自動的に制御されるため、ユーザは、検証時にパイプラインステージの処理状態が意図した通りに制御されたか否かを確認しなくてもよい。
【0091】
また、各種ハザード検出時におけるインターロック信号の供給、及び、バイパス機構を備えるプロセッサの検証に当たり、ユーザは、予め、各機能が検証されるようなパイプラインステージの処理状態を組合せパターンとして規定し、各機能が検証されるようなテスト命令列を用意する。これにより、組合せパターン及びテスト命令列の掛け合わせにより、全ての検証項目が網羅されるため、ユーザは、上記のようなプロセッサの各機能の検証を効率的に行うことができる。
【0092】
さらに、本実施の形態例におけるプロセッサ検証プログラムは、検証時の環境等に起因する意図しないフェッチストールが発生した場合、IFステージより後に遷移するパイプラインステージ間の命令の遷移を停止するインターロック信号を供給する。これにより、プロセッサ検証プログラムは、フェッチストールによって、パイプラインステージ間の命令処理が不連続になり、意図しない処理状態に変移することを回避できる。
【0093】
また、本実施の形態例におけるプロセッサ検証プログラムは、パイプラインステージの処理状態が組合せパターンと一致するまでの間、プロセッサ10から意図しないインターロック信号が発生した場合に、全てのパイプラインステージの命令の遷移を停止するインターロック信号を供給する。これにより、プロセッサ検証プログラムは、プロセッサ10からの意図しないインターロック信号によって、パイプラインステージの処理状態が意図しない処理状態に変移することを回避できる。
【0094】
図15は、本実施の形態例のプロセッサ検証プログラムを使用する場合における組合せパターン、テスト命令列、及び期待値の生成処理の流れの一例を表す図である。本実施の形態例におけるプロセッサの検証プログラムを使用する場合、ユーザは、テスト命令列及び組合せパターンを容易に生成でき、また、テスト命令列の総数を抑えることができる。
【0095】
まず、ユーザは、プロセッサ10の仕様書D1に基づいて、LISA等の高級言語に基づくアーキテクチャ記述D2を生成する。そして、ユーザは、生成したアーキテクチャ記述D2に基づいて、検証項目D3を抽出する(C1)。図2のようなバイパス機構60を有するプロセッサ10の場合、検証項目D3の一例として、例えば、WBステージ→MEMステージ、WBステージ→EXEステージ、MEMステージ→EXEステージのバイパス処理等の検証項目が抽出される。続いて、ユーザは、抽出した検証項目に基づいて、組合せパターン及びテスト命令列を生成する。
【0096】
なお、ユーザは、プロセッサアーキテクチャ記述D2に基づいて生成されたISS用のモジュールC3に基づいて、テスト命令列72を入力として、ISSによってシミュレートを行うことにより(D4)、期待値91を生成できる。
【0097】
図16は、各検証項目に基づく組合せパターンの生成処理(C2)を説明する例図である。まず、同図のE1は、WBステージ→MEMステージのバイパス処理を表す。このようなバイパス60を検証するために、少なくともWBステージ及びMEMステージで命令が処理状態である必要がある。つまり、パイプラインステージの処理状態が「×××11」と一致すればよい。同様にして、E2のWBステージ→EXEステージのバイパス60を検証するためにはパイプラインステージの処理状態が「××101」、E3のMEMステージ→EXEステージのバイパス60を検証するためには「××110」と一致すればよい。また、E4におけるバイパス処理が発生しない場合を検証するためには、パイプラインステージの処理状態が、一例として「×1001」と一致すればよい。
【0098】
抽出された各組合せパターン「×××11」「××101」「××110」「×1001」に基づいて、基本パターンが抽出される。この例において、組合せパターン「×××11」は、組合せパターン「××110」がさらに遷移した状態である。そこで、組合せパターン「××110」「×××11」をグループ化して派生パターンとする。そして、派生パターンの遷移元の処理状態を示す基本パターンを例えば、「11000」とする。また、他の組合せパターン(派生パターン)についても、「××101」の遷移元の処理状態として例えば基本パターン「10100」を、「×1001」の遷移元の処理状態として例えば基本パターン「10010」を抽出する。これにより、図16の組合せパターンテーブルP2が生成される。このように、組合せパターンには、バイパス処理等の検証すべき項目に対応する処理状態が規定される。
【0099】
また、テスト命令列72の生成について、本実施の形態例のプロセッサ検証プログラムでは、テスト命令列72それぞれについて、全ての組合せパターンとの組合せケースが検証される。そこで、ユーザは、例えば、バイパス60の有無やレジスタファイル50等のリソースへのアクセスの有無等の検証項目D3に基づいて命令を分類し、検証項目D3に対応するテスト命令列72を1パターン程度ずつテンプレートとして用意する。そして、各テスト命令列72のテンプレートそれぞれと組合せパターンとが掛け合わされ各検証が行われることによって、全ての検証項目D3が網羅されることになる。これにより、それぞれの検証項目D3が検証されるようなテスト命令列を逐一生成していた従来の検証に対して、ユーザは、テスト命令列72の生成にかかる工数及び、テスト命令列72の総数を抑えることができ、プロセッサ10の検証にかかる工数を抑えることができる。
【0100】
なお、上記のようなテスト命令列及び組合せパターンの生成処理を、ツール等を用いて行うことによって、ユーザはプロセッサ10の検証にかかる工数をより抑えることができる。
【0101】
以上の実施の形態をまとめると、次の付記のとおりである。
【0102】
(付記1)
1つの命令を複数のパイプラインステージで処理し、パイプラインハザードが発生したとき前記命令のパイプラインステージ間の遷移を停止するインターロック信号が前記パイプラインステージに供給されるプロセッサの検証処理をコンピューターに実行させるコンピューター読み取り可能なプロセッサ検証プログラムにおいて、
前記検証処理は、
テスト命令列内の命令が前記パイプラインステージそれぞれで処理中か否かを示し前記パイプラインステージの検証すべき処理状態を規定するパイプラインステージ組合せパターンを参照し、前記テスト命令列の命令を実行するとき、前記パイプラインステージそれぞれで前記命令が処理中か否かを示すステータス情報に基づいて前記インターロック信号を前記パイプラインステージに供給することにより、前記パイプラインステージの前記命令の処理状態を前記パイプラインステージ組合せパターンと一致させるタイミング生成工程を有するプロセッサ検証プログラム。
【0103】
(付記2)
付記1において、
前記複数のパイプラインステージは、第1、2のステージを含み、
前記プロセッサは前記第1のステージの演算結果を前記第2のステージにバイパスするバイパス手段を有し、
前記パイプラインステージ組合せパターンは、前記命令が前記第1、2ステージそれぞれで処理中を示すパイプラインステージ組合せパターンを含むプロセッサ検証プログラム。
【0104】
(付記3)
付記1または2のいずれかにおいて、
前記複数のパイプラインステージは、第3のステージと、前記第3のステージから遷移し前記プロセッサの共有リソースにアクセス可能な第4のステージと、当該第3のステージから前記第4のステージに遷移せずに分岐し、演算処理に複数サイクルを要する前記命令を処理し当該処理の終了時に前記共有リソースにアクセス可能な第5のステージとを含み、
前記タイミング生成工程は、前記ステータス情報に基づいて前記インターロック信号を前記パイプラインステージに供給することにより、前記第4のステージと前記第5のステージとで同時に前記共有リソースへのアクセスが発生するように前記パイプラインステージの前記命令の処理状態を制御するプロセッサ検証プログラム。
【0105】
(付記4)
付記1乃至3のいずれかにおいて、
前記検証処理は、前記テスト命令列それぞれについて前記パイプラインステージ組合せパターン全て、実行されるプロセッサ検証プログラム。
【0106】
(付記5)
付記1乃至4のいずれかにおいて、
前記パイプラインステージ組合せパターンは、基本パターンと、当該基本パターンの前記処理状態から前記遷移が進むことによって生成される前記検証すべき処理状態を規定する派生パターンとを有し、
前記タイミング生成工程は、前記テスト命令列の命令を実行するとき、前記処理状態を前記基本パターンと一致させた後、さらに前記遷移を進めることにより前記処理状態を前記派生パターンと一致させるプロセッサ検証プログラム。
【0107】
(付記6)
付記1乃至5のいずれかにおいて、
前記複数のパイプラインステージは前記命令のフェッチ処理を行うフェッチステージを含み、
前記タイミング生成工程は、前記フェッチステージにおいて前記命令のフェッチ処理が終了するまで当該フェッチステージより先の前記パイプラインステージで処理中の前記命令の前記遷移を停止する前記インターロック信号を前記パイプラインステージに供給するプロセッサ検証プログラム。
【0108】
(付記7)
付記1乃至6のいずれかにおいて、
前記タイミング生成工程は、前記プロセッサから前記インターロック信号が供給された場合、前記パイプラインステージ間の全ての遷移を停止する前記インターロック信号を前記パイプラインステージに供給するプロセッサ検証プログラム。
【0109】
(付記8)
付記1乃至7のいずれかにおいて、
前記プロセッサはRTLで記述されており、前記検証処理と並行して、前記コンピューターによって実行されるプロセッサ検証プログラム。
【符号の説明】
【0110】
10:検証対象のプロセッサ、20:プロセッサのコントローラ、30:タイミング生成ユニット、40:命令パイプライン、50:レジスタファイル、60:バイパス
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16