以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
本実施の形態例における論理検証シナリオ生成装置は、「検証命令」、「検証命令」を記憶する「検証アドレス」、「検証命令」の前後に実行する「前後命令組合せ」等の検証シナリオ条件をテストライブラリから選択する。そして、論理検証シナリオ生成装置は、予め用途別に区分されたメモリ空間を定義し、「検証命令アドレス」に「検証命令」が、前命令空間に前命令が、後命令空間に後命令が記憶され、前命令が分岐命令である場合に前命令の分岐先アドレスに「検証命令アドレス」が記憶されるように記述したメモリモジュールをテストプログラムとして生成することにより、テストプログラムを生成する。そして、論理検証シナリオ生成装置は、テストプログラムの各命令について、当該命令に対応する期待値フォーマットを期待値フォーマット記憶部から取得し、命令をデコードしたデコード情報に基づいて期待値フォーマットの有する出力信号項目に対応する期待値を生成するものである。
図1は、論理検証対象のCPU(Central Processing Unit)10の入出力信号の一例を表す図である。同図において、CPU10はRTL(Register Transfer Level)記述されており、同様にそれぞれRTL記述されたメモリモジュール12、外部入力信号生成モジュール11、出力信号トレースモジュール13とバスを介して信号を入出力する。
一般的に、CPU10は、メモリと信号を入出力することによって、命令のフェッチ、デコード、実行等の命令サイクルを行う。具体的に、メモリモジュール12からCPU10への入力信号には、命令フェッチ用、命令の実行によって生じるデータアクセス用のリードデータ信号等がある。また、CPU10からメモリモジュール12への出力信号には、アクセスストローブ信号、アクセスサイズ信号、リード/ライト信号、ライトデータ信号、アドレス信号等がある。
また、CPU10は、外部入力信号生成モジュール11から割り込み要求やCPU10の状態を制御する外部入力信号が入力される。具体的に、外部入力信号生成モジュール11からCPU10への入力信号には、クロック信号CLK、リセット信号RST、モード信号、割り込み信号、例外信号、ブレーク信号等の信号がある。CPU10は、外部入力信号を受け付けると、実行中の処理を中断し、例えば、外部入力信号に応じた所定の処理ルーチンの実行やCPU状態の制御等を行う。
本実施の形態例のメモリモジュール12はRTL記述されたRAM(Random Access Memory)等のメモリであり、CPU10を論理検証するテストプログラムが格納される。CPU10は、当該テストプログラムの命令の実行を通して、図1のような信号を入出力する。また、外部信号生成モジュール11はRTL記述された擬似的な、タイマー、割り込みコントローラ、デバッガ等の周辺リソースであり、図1のような外部入力信号をCPU10に入力する。
出力信号トレースモジュール13は、命令の実行を通してCPU10からメモリモジュール12に出力されるデータアクセス時のアクセスサイズ信号や、リード/ライト信号、ライトデータ信号、アドレス信号等を取得する。また、出力信号トレースモジュール13は、CPU10から実行命令のアドレスを表す命令アドレス信号や、当該命令が分岐元、分岐先であることを示す分岐情報信号、分岐要因を示す分岐要因信号、命令に外部入力信号が発生した場合の割り込みや例外等の要因を表すEIT要因信号、デバッグモード等のCPU10の状態を表すCPU状態信号等を取得する。出力信号トレースモジュール13の取得する出力信号は、CPU10の命令処理の論理正当性を検証するため、後述する期待値と比較される。
図2は、本実施の形態例におけるRTL記述されたCPU10の一例を表す図である。CPU10は、例えば、verilog HDL(Hardware Description Language)やVHDL(VHSIC Hardware Description Language)等のRTLレベルのHDLで記述され、同図に示すような各ブロックの機能を備える。
「信号の定義」ブロック101では、CPU10が入出力する信号と、CPU10の内部で使用される信号が宣言される。「命令のフェッチ」ブロック102では、実行対象の命令をメモリモジュール12から読み出す処理が、「デコード」ブロック103では、フェッチによって読み出された命令をCPU10が実行可能な命令にデコードする処理、及び、演算処理に必要なデータの選択処理が記述される。また、「演算」ブロック104では、数値演算やPC(プログラムカウンター)の計算処理が、「メモリアクセス」ブロック105では、実行命令がロード・ストア系の命令である場合のメモリの読み書き処理が記述される。さらに、「ライトバック」ブロック106では、レジスタへのデータの書き込み処理が記述される。
また、図示しないが、メモリモジュール12、外部入力信号生成モジュール11、出力信号トレースモジュール13も同様に、verilog HDLやVHDL等のHDLで記述される。
図1、2で述べたCPU10、メモリモジュール12、外部入力信号生成モジュール11、出力信号トレースモジュール13は、コンピューター上のOSで動作するシミュレータ等のソフトウェアによって実行される。シミュレータは、各モジュールの初期値設定やシミュレーション手順を記述したテストベンチに基づいて、各モジュールをシミュレーションする。なお、テストベンチも同様にHDLによって記述される。
図20は、シミュレータが動作するコンピューター200の構成を表す図である。コンピューター200は、CPU202、RAM203、外部I/F204、メモリ(ファイル群)205を有する。シミュレータは、CPU202が、メモリ(ファイル群)205に記憶された論理検証シミュレーションプログラム201を実行することによって実現される。
本実施の形態例におけるシミュレータには、論理検証対象のCPU(RTL)10と、検証命令群等を有するテストライブラリ214、期待値フォーマット記憶部221が提供される。そして、シミュレータは、まず、論理検証シナリオ生成プログラム(RTL)21、22を実行し、テストライブラリ214、期待値フォーマット記憶部221に基づいて、CPU(RTL)10の論理検証に用いるテストプログラムを格納するメモリモジュール(RTL)12、CPU(RTL)10への外部入力信号を生成する外部入力信号生成モジュール(RTL)11、シミュレーションによってCPU(RTL)10が出力する信号の期待値を有する期待値データ(データファイル)25を生成する(206)。
そして、シミュレータは、メモリモジュール12に格納されたテストプログラムをCPU(RTL)10に実行させ、また、外部入力信号モジュール(RTL)11に外部入力信号を入力させることにより、CPU(RTL)10の論理検証を行う(207)。また、シミュレータは、出力信号トレースモジュール(RTL)13を実行して、CPU(RTL)10からの出力信号を取得する(207)。
図3は、本実施の形態例におけるシミュレータが実行するモジュールとテストベンチ30の一例を表す図である。論理検証シナリオ生成部21、及び、期待値生成部22は、本実施の形態例の論理検証シナリオ生成装置の一例であり、図20の論理検証シナリオ生成プログラム(RTL)21、22がシミュレータにより実行されることによって実現される。
論理検証シナリオ生成部21は、順次選択した検証シナリオ条件に基づいて、テストプログラムを記憶したメモリモジュール12と、外部入力信号生成モジュール11とを生成する。そして、期待値生成部22は、生成されたテストプログラムの各命令について、各命令に対応する期待値フォーマットを期待値フォーマット記憶部221から取得し、期待値フォーマットの有する出力信号項目に対応する期待値データ25を生成する。期待値とは、CPU10がテストプログラムの命令を実行して出力する出力信号を予め予測した値である。各部の処理の詳細については、後述する。
結果比較部23は、出力信号トレースモジュール13によって取得された出力信号を有するトレースデータと、期待値生成部22によって生成された期待値データ25とを比較し、その比較結果をシミュレータ出力部24のログファイルに書き込む。ただし、結果比較部23の代わりに、検証者がトレースデータと期待値データ25を比較してもよい。結果比較部23も同様にHDLで記述される。
第1の実施の形態例における論理検証シナリオ生成部21及び期待値生成部22は、検証シナリオ条件として、CPU10に実行させる「検証命令」、「検証命令」のメモリモジュール12における格納アドレスである「検証命令アドレス」、及び、「検証命令」の前にCPU10実行させる前命令、及び、後に実行させる後命令の組合せを表す「前後命令組合せ」の組合せに基づいて、テストプログラムを格納したメモリモジュール12と期待値データ25とを生成する。
第2の実施の形態例における論理検証シナリオ生成部21及び期待値生成部22は、さらに、検証シナリオ条件として、「検証命令」に対して入力する「外部入力要因」と、当該「外部入力要因」の「外部入力タイミング」とを加えた検証シナリオ条件の組合せに基づいて、テストプログラムを格納したメモリモジュール12と期待値データ25、及び、外部入力信号生成モジュール11を生成する。
[第1の実施の形態例]
図4は、本実施の形態例における論理検証シナリオ生成装置の構成を表す図である。なお、同図において、点線で表された外部入力信号生成部213、外部入力信号生成モジュール11については、第2の実施の形態例において後述する。
論理検証シナリオ生成部21は、テストライブラリ214、検証シナリオ条件入力部210、プログラム条件判定部211、テストプログラム生成部212を有し、テストプログラムを格納したメモリモジュール12を生成する。また、期待値生成部22は、テストプログラムの各命令について、期待値フォーマット記憶部221から対応する期待値フォーマットを選択し、期待値フォーマットが有する出力信号項目に対応する期待値データ25を生成する。
図5は、本実施の形態例における論理検証シナリオ生成部21の処理を表すフローチャート図である。以下、フローチャート図に基づいて説明する。まず、論理検証シナリオ生成部21の検証シナリオ条件入力部210は、検証シナリオ条件215の入力を受け付ける(S101)。検証シナリオ条件入力部210は、テストライブラリ214に格納された「検証命令」、「検証命令アドレス」、「前後命令組合せ」の組合せを検証シナリオ条件215として受け付ける。
図6は、テストライブラリ214を表す図である。テストライブラリ214には、「検証命令」を複数有する検証命令リストCM、「検証命令アドレス」を複数有する検証命令アドレスリストCM@、「前後命令組合せ」を複数有する前後命令組合せリストCMLが格納される。各リストは、例えば、検証者等によって予め用意される。
具体的に「検証命令」は、例えば、「ADD R1,R2」「JMP @R6」等の命令であり、「検証命令アドレス」は、メモリモジュール12が定義するメモリ空間上のアドレス、例えば「0x00000100」「0x00000050」である。「前後命令組合せ」は、「検証命令」の前後にCPU10に実行させる処理の組合せであって、例えば、「(前命令)演算処理A/(後命令)演算処理B」「(前命令)演算処理A/(後命令)分岐処理A」等である。前命令、後命令は、それぞれひとつまたは複数の命令を有する。
図6のように、テストライブラリ214において、「検証命令」、「検証命令アドレス」、「前後命令組合せ」は、それぞれ、例えば、「1〜n」の数字等の識別記号に対応付けられる。検証シナリオ条件入力部210は、識別記号の組合せを検証シナリオ条件215として受け付ける。
図5のフローチャート図に戻り、検証シナリオ条件入力部210は、選択された検証シナリオ条件215がCPU10の仕様制限に該当するか否かを検証する(S102)。検証シナリオ条件入力部210は、選択した検証シナリオの識別記号の組合せを、仕様制限に該当する検証シナリオ条件の識別記号の組合せと比較し一致する場合は(S102のYES)、テストプログラムの生成処理を終了する。仕様制限に該当する検証シナリオ条件の組合せ情報は、検証者等によって予め用意される。
一方、選択された検証シナリオ条件がCPU10の仕様制限に該当しない場合(S102のNO)、検証シナリオ条件入力部210は、検証シナリオ条件判定処理として、選択した検証シナリオ条件215を分割し、「検証命令」を検証命令選択処理S104へ、「前後命令組合せ」を前後命令選択処理S105へ、「検証命令アドレス」を検証命令アドレス選択処理S106へ渡す(S103)。そして、プログラム条件判定部211は、検証命令選択処理として、「検証命令」の識別記号に基づいてテストライブラリ214から「検証命令」を選択する(S104)。同様に、論理検証シナリオ生成部21は、前後命令選択処理として「前後命令組合せ」の識別記号に基づいて前命令と後命令とを(S105)、検証命令アドレス選択処理として「検証命令アドレス」の識別記号に基づいて「検証命令アドレス」を(S106)、テストライブラリ214からそれぞれ選択する。
続いて、論理検証シナリオ生成部21のテストプログラム生成部212は、選択した「検証命令」、「検証命令アドレス」、「前後命令組合せ」に基づいて、テストプログラムを生成する(S107)。テストプログラム生成部212は、「検証命令」をメモリモジュール12が定義する用途別に区分されたメモリ空間上の「検証命令アドレス」に、「前後命令組合せ」の前命令、後命令をそれぞれメモリ空間の前命令用空間、後命令用空間に記憶されるようにメモリモジュール12を記述し生成する。即ち、テストプログラムの生成とは、シミュレーション対象のCPU10がアクセスするメモリモジュール12の生成を意味し、RTL記述されたメモリモジュール12の定義する各空間アドレスにテストプログラムが対応付けて記述される。
図7は、本実施の形態例におけるメモリモジュール12が定義するメモリ空間を表す図である。本実施の形態例におけるメモリ空間は用途別に区分され、各空間のアドレスは予め決められている。まず、「前命令空間」71は前命令を、「後命令空間」72は後命令を記憶するための空間であり、「分岐先命令空間」73は、テストプログラムの命令が分岐命令である場合の分岐先命令が予め格納される。また、「データ空間」74は、テストプログラムの命令がデータアクセス命令である場合のアクセス用の空間であり、例えば、アクセス用のデータが予め格納される。
そして、「スタック空間」75は、例えば、テストプログラムの命令が分岐命令である場合に、分岐元への復帰情報として、分岐元の次命令の情報等が記憶される空間である。また、「ブレーク空間」76は、テストプログラムの命令が例えば、デバッグ用のブレーク命令である場合の分岐先命令が予め格納される。そして、「ベクタテーブル」78は、例えば、トラップ命令等の分岐命令が実行された場合の分岐後命令を格納する「EITルーチン空間」77のアドレスが格納される。また、「ベクタテーブル」78は、外部入力要因が発生した場合にも参照されるが、詳細は第2の実施の形態例において後述する。
具体的に、テストプログラム生成部212は、メモリ空間上の「検証命令アドレス」に「検証命令」、「前命令空間」71に前命令、「後命令空間」72に後命令が記憶されるようにメモリモジュール12を記述する。また、テストプログラム生成部212は、前命令が分岐命令である場合、前命令の分岐先アドレスに「検証命令アドレス」が記憶されるようにメモリモジュール12を記述する。これにより、論理検証シミュレート時、CPU10は、前命令が分岐命令である場合、分岐命令によって「検証命令アドレス」に分岐し「検証命令」を実行する。
ここで、具体例に基づいて、論理検証シナリオ生成部21のテストプログラム生成処理を述べる。例えば、検証シナリオ条件入力部210は、図6の検証命令リストの「3(CALL @R6)」、検証命令アドレスリストの「1(0x00000100)」、前後命令組合せリストの「3((前命令)分岐処理A/(後命令)演算処理A)」の組合せの検証シナリオ条件を受け付ける(S101)。受け付けた検証シナリオ条件がCPU10の仕様制限に該当しない場合(S102のNO)、プログラム条件判定部211は、分割した検証シナリオ条件を各選択処理に渡す(S103)。
続いて、プログラム条件判定部211は、図6のテストライブラリ214から、検証命令リストCMの「3」に対応する「CALL @R6」を、検証命令アドレスリストCM@の「1」に対応する「0x00000100」を、前後命令組合せリストCMLの「3」に対応する「(前命令)分岐処理A/(後命令)演算処理A」を取得する(S104〜106)。なお、具体的に、分岐処理Aは、次の命令である。
「LDI:32 (分岐先アドレス),R5」
「LDI:32 0x00000500,R6」
「JMP @R5」
また、演算処理Aは、次の命令である。
「LDI:320x00000300,R1」
そして、テストプログラム生成部212は、メモリ空間の検証命令アドレス「0x00000100」に検証命令「CALL @R6」が、「前命令空間」71に分岐処理A「LDI:32 (分岐先アドレス),R5」「LDI:32 0x00000500,R6」「JMP @R5」が、「後命令空間」72に演算処理A「LDI:32 0x00000300,R1」が記憶されるようにメモリモジュール12を記述する。また、前命令が分岐命令であるため、テストプログラム生成部212は、前命令の(分岐先アドレス)81に検証命令アドレス「0x00000100」が記憶されるようにメモリモジュール12を記述する。
図8は、検証シナリオ条件に基づいて生成されたテストプログラムを格納したメモリモジュール12の一例である。同図のように、「前命令空間」71に分岐処理Aが、「後命令空間」72に演算処理Aが、検証命令アドレス「0x00000100」に検証命令「CALL @R6」が記憶される。また、分岐処理Aの(分岐先アドレス)81に検証命令アドレス「0x00000100」が記憶される。
図8のメモリモジュール12によると、論理検証シミュレーションにおいて、CPU10は、まず前命令「LDI:32 0x00000100,R5」「LDI:32 0x00000500,R6」「JMP @R5」を実行する。「JMP @R5」が分岐命令であるため、続いて、CPU10は「@R5」の示す分岐先アドレスに分岐する。「@R5」には検証命令アドレス「0x00000100」81が割り当てられているため、CPU10は検証命令アドレスに分岐し、検証命令「CALL @R6」を実行する。
そして、検証命令「CALL @R6」もまた分岐命令であるため、CPU10は「@R6」の示す分岐先アドレス「0x00000500」82、つまり、「分岐先命令空間」73のアドレスに分岐し、当該空間に格納された「ADD R7,R8」「RET」を実行する。「RET」は分岐元への復帰命令であるため、CPU10は分岐元に戻り、次の命令である後命令の「LDI:32 0x00000300,R1」を実行する。このようにしてテストプログラムが実行される。
このように、テストプログラム生成部212は、RTL記述されたメモリモジュール12において、前命令が分岐命令である場合、前命令の分岐先アドレスに「検証命令アドレス」を記述することによって、前命令が分岐命令(上記の例ではJMP)であっても、前命令の後「検証命令」、後命令の順に命令が実行されるテストプログラムのメモリモジュール12を生成することができる。
また、「検証命令」や後命令が分岐命令の場合、命令(上記の例ではCALL)の分岐先アドレスに、予め分岐先の命令が格納された「分岐先命令空間」73のアドレスが指定されていることにより、テストプログラム生成部212は、予め用意された分岐先の命令を利用することができ、分岐先の命令を生成しなくてもよい。
このように、テストプログラム生成部212は、分岐先アドレスに分岐先の命令を格納した空間アドレスを指定した分岐命令(分岐命令やブレーク命令等)を、アクセスアドレスにデータアクセス用の空間アドレスを指定したデータアクセス命令を、「検証命令」及び前後命令として予め用意する。これにより、テストプログラム生成部212は、メモリモジュール12が定義するメモリ空間について、「検証命令アドレス」に「検証命令」を、「前命令空間」71「後命令空間」72に前後命令が記憶されるように、また、前命令が分岐命令である場合に、当該前命令の分岐先アドレスに「検証命令アドレス」が記憶されるように記述するだけで、複数の命令を有するテストプログラムのメモリモジュール12を生成できる。
続いて、期待値生成処理について述べる。
図9は、期待値生成の処理を表すフローチャート図である。まず、期待値生成部22は、メモリモジュール12のテストプログラムにおける開始アドレスから初めの命令を読み出す(S121)。次に、期待値生成部22は、読み出した命令の要素分解処理を行う(S122)。
図10は、期待値生成部22の検証シナリオ要素分解処理(図9のS122)を表すフローチャート図である。期待値生成部22は、読み出した命令をデコードしてデコード情報を生成し、命令種別判定処理S123に渡す(S141)。S142の処理については、第2の実施の形態例にて説明する。次に、期待値生成部22は、デコード情報に基づいて、当該命令の分岐の有無情報を分岐判定処理S125へ渡し(S143)、デコード情報と命令のアドレス情報とをデータ抽出処理S126へ渡す(S144)。
図9に戻り、続いて、期待値生成部22は、命令種別判定処理として、デコード情報に基づいて命令種別を判定し、当該命令種別に対応する期待値フォーマットのフォーマット番号を期待値フォーマット選択処理S127に渡す(S123)。この場合、期待値生成部22は、命令のデコード情報に基づいて、当該命令の内容、及び、演算系、ロード/ストア系、分岐系(1〜4)、トラップ系等の命令種別を判別できる。また、期待値生成部22は、分岐判定処理として、分岐の有無情報に基づいて、分岐有の場合に分岐用のフォーマット番号を期待値フォーマット選択処理S127に渡す(S125)。
図12は、期待値フォーマットを表す図である。期待値フォーマットは、CPU10がある命令を実行して出力するひとつまたは複数の出力信号項目を有し、同じ出力信号項目を出力する命令種別毎に用意される。また、期待値フォーマットの出力信号項目には、期待値が命令種別及び外部入力要因に基づいて予め予測される固定値と、命令のデコード情報等に基づいて生成される非固定値とがある。同図において、固定値は下線付き、非固定値は斜体によって表される。なお、出力信号項目は同図の例に限定されるものではなく、検証対象のCPU10によって異なる。
各出力信号項目について説明する。「命令アドレス」は、命令が格納されるメモリ空間のアドレスである。また、「分岐情報」は、命令が分岐元、分岐先であるか否かの情報であり、「分岐要因」はその分岐要因である。「EIT要因」は、第2の実施の形態例で後述する。「CPU状態」は、CPU10の状態を表す情報である。「アクセスアドレス」はデータアクセス系命令のアクセス対象のデータが格納されたアドレス、「RW情報」は書き込みか読み出しかの情報、「アクセスサイズ」はアクセス対象のデータサイズ、「ライトデータ」「リードデータ」はアクセス対象のデータ情報である。
「(1)演算系」種別の命令用の期待値フォーマットは、例えば「命令アドレス」、「CPU状態」の出力信号項目を有する。「(2)ロード系」「(3)ストア系」種別の命令に対応する期待値フォーマットは、「命令アドレス」、「CPU状態」に加え、ロード、ストア処理における「アクセスアドレス」、「RW情報」、「アクセスサイズ」、「リードデータ/ライトデータ」の出力信号項目を有する。なお、「RW情報」は、「(2)ロード系」、「(3)ストア系」それぞれの種別に基づいて予め予測可能であることにより固定値である。
そして、「(4)分岐1(JMP系)」種別の命令用の期待値フォーマットは、例えば「命令アドレス」、「CPU状態」に加え、「分岐情報」、「分岐要因」の出力信号項目を有する。JMP系の命令では、必ず「分岐情報/分岐元」、「分岐要因/命令分岐」であるため、「分岐情報」「分岐要因」は固定値である。
また、CALL系命令を実行すると、CPU10は、CALL命令による分岐からの復帰情報(次命令のアドレス)を「スタック空間」75に書き込む。そのため、「(5)分岐2(CALL系)」種別の命令用の期待値フォーマットは、例えば、「(4)分岐1(JMP系)」と同様の出力信号項目に加え、2行目に「スタック空間」75への復帰情報の書き込み処理における「アクセスアドレス」、「RW情報」、「アクセスサイズ」、「ライトデータ」の出力信号項目を有する。なお、復帰情報の書き込み処理における「RW情報」は固定値「W」であり、「アクセスサイズ」はCPU10の仕様に基づいて決められた固定値「4」である。
RET命令(リターン命令)は、分岐先から分岐元に戻るために実行される命令であり、「スタック空間」75から復帰情報(分岐元の次の命令のアドレス)を読み出すことにより、分岐元に復帰する。そのため、「(6)分岐3(RET)」種別の命令用の期待値フォーマットは、1行目の「命令アドレス」、「分岐情報」、「分岐要因」、「CPU状態」に加え、2行目の「スタック空間」75から復帰情報の読み出し処理における「アクセスアドレス」、「RW情報」、「アクセスサイズ」、「リードデータ」の出力信号項目を有する。なお、同様にして、「分岐情報」、「分岐要因」、「RW情報」、「アクセスサイズ」は命令種別により予め期待値が予測される固定値である。
RETI命令は、RET命令と同様に、分岐先から分岐元に戻るために実行される命令であり、「スタック空間」75から復帰情報として次の命令のアドレスに加えプログラムステータスを読み出す。そのため、「(7)分岐4(RETI)」種別の命令用の期待値フォーマットは、「(6)分岐3(RET)」種別の期待値フォーマットと同様の1、2行目の出力信号項目を有し、さらに3行目のプログラムステータスの読み出し処理における出力信号項目を有する。固定値は「(6)分岐3(RET)」種別の期待値フォーマットと同様である。
「(8)トラップ系」種別の命令を実行する場合、CPU10は、「ベクタテーブル」78から「EITルーチン空間」77のトラップルーチンのアドレスを読み出すと共に、トラップ命令による分岐からの復帰情報(プログラムステータス、次の命令のアドレス)を「スタック空間」75に書き込む。そのため、「(8)トラップ系」種別の命令用の期待値フォーマットは、1行目の「命令アドレス」、「分岐情報」、「分岐要因」、「CPU状態」に加え、2行目の「ベクタテーブル」78からの読み出し処理、3、4行目の「スタック空間」75への復帰情報書き込み処理における出力信号項目を有する。固定値は「(6)分岐3(RET)」種別の期待値フォーマットと同様の出力信号項目に加え、「EIT要因/トラップ」である。
なお、「(12)分岐命令用」期待値フォーマットは、命令が分岐命令である場合に付加される分岐用の期待値フォーマットであり、他の期待値フォーマットの「フォーマット合成」項目の値が「OFF」であるのに対し、当該項目の値が「ON」である。「(12)分岐命令用」期待値フォーマットは、命令が分岐命令である場合、命令種別に対応する期待値フォーマットに付加され、その次に実行される命令の期待値フォーマットに合成される。なお、外部入力要因に対応する期待値フォーマット(9〜11)については、第2の実施の形態例で後述する。
図9に戻り、期待値生成部22は、期待値フォーマット選択処理として、命令種別判定処理によるフォーマット番号と、分岐判定処理による分岐用のフォーマット番号とに基づいて、命令の期待値フォーマットを選択する(S127)。
図11は、期待値フォーマット選択処理(S127)を表すフローチャート図である。期待値生成部22は、期待値フォーマット記憶部221から、命令種別に対応するフォーマット番号の期待値フォーマットを取得する(S151)。そして、期待値生成部22は、分岐有の場合、(S152のYES)、期待値フォーマット記憶部221から分岐用の期待値フォーマットを取得して命令種別に対応する期待値フォーマットに付加し(S153)、フォーマットを確定する(S154)。一方、期待値生成部22は、分岐無の場合(S152のNO)、命令種別に対応する期待値フォーマットを、フォーマットとして確定する(S154)。
図9に戻り、期待値生成部22は、データ抽出処理として、検証シナリオ要素分解処理(S122)から渡された命令をデコードして得たデコード情報に基づいて、デコード情報、メモリ空間のアドレス、当該アドレスに格納されたメモリ情報等からデータを抽出し期待値生成処理に渡す(S126)。期待値生成部22は、抽出されたデータに基づいて、期待値フォーマットの出力信号項目に対応する期待値を生成し(S128)、期待値データ25としてメモリ等に格納する(S129)。
そして、期待値生成部22は、期待値生成処理の後、テストプログラムの全ての命令について期待値を生成したか否かを確認する(S130)。具体的に、期待値生成部22は、例えば、命令アドレスが「後命令空間」72の末尾に達したか否かによって、テストプログラムの全ての命令について期待値を生成したか否かを判定する。
期待値を生成していない命令がある場合(S130のNO)、期待値生成した命令の命令アドレスに命令長を加算し、次の命令の命令アドレスを取得する(S131)。この時、期待値を生成した命令が分岐命令である場合、分岐命令の分岐先の命令アドレスを取得する。そして、取得した命令アドレスに基づいてメモリモジュール12内のテストプログラムから次の命令を読み出し、期待値を生成する(S121〜S129)。このように、期待値生成部22は、テストプログラムの初めの命令から実行される順に期待値を生成する。
一方、テストプログラムの全ての命令について期待値を生成すると(S130のYES)、期待値生成部22は、期待値生成処理を終了する。そして、シミュレータは、生成されたテストプログラムのメモリモジュール12と期待値とに基づいて、CPU10の論理検証を行う。そして、論理検証の後、論理検証シナリオ生成部21は、次の検証シナリオ条件を受け付け、同様にテストプログラムのメモリモジュール12及び期待値の生成処理を行う。
以下、図8のテストプログラムに基づく期待値生成の具体例を述べる。期待値生成部22は、テストプログラムの初めの命令「LDI:32 0x100000100,R5」を読み出す(S121)。そして、期待値生成部22は、検証シナリオ要素分解処理として(S122)、当該命令をデコードして命令が「LDI:32」であること、分岐無であることを判別し、命令種別判定処理へ渡すと共に(図10のS141)、分岐無である情報を分岐判定処理へ渡す(図10のS143)。また、期待値生成部22は、デコード情報と命令「LDI:32」のアドレス情報「0x00000000」とをデータ抽出処理へ渡す(図10のS144)。
続いて、期待値生成部22は、「LDI:32」命令が演算系の命令であることから、演算系の命令に対応するフォーマット番号「1」を(S123)、分岐無である情報に基づいて分岐用の期待値フォーマット無の情報を(S125)、フォーマット選択処理に渡す。そして、期待値生成部22は、図11のフローチャート図に基づいて、命令種別に対応するフォーマット番号「1」(S151)と分岐用の期待値フォーマット無の情報(S152のNO)に基づいて、期待値フォーマット記憶部221から期待値フォーマット「1」を取得してフォーマットを確定する(S154)。このようにして、命令「LDI:32 0x00000100,R5」に対応する期待値フォーマット「1」が選択される。
図13は、図8のテストプログラムの各命令に対応する期待値フォーマットを表す図である。前述した通り、命令「LDI:32 0x00000100,R5」に対応する期待値フォーマットは「1」である(a)。また、命令「JMP @R5」は、JMP系の分岐命令であることから期待値フォーマット「(4)分岐1(JMP系)」(c)に加え、分岐用の期待値フォーマット「(12)分岐命令用」(d)が選択される。同様に、検証命令「CALL @R6」はCALL系の分岐命令であることから、期待値フォーマット「(5)分岐2(CALL系)」(e-1,2)に加え、分岐用の期待値フォーマット「(12)分岐命令用」(f)が選択される。
図14は、図8のテストプログラムに対応する期待値を表す図である。同図において、命令「LDI:32 0x00000100,R5」の出力信号項目の期待値として(a)、「命令アドレス/0x00000000」、「CPU状態/状態A」が生成されている。具体的に、期待値生成部22は、命令「LDI:32 0x100000100,R5」のデータ抽出処理として、デコード情報に基づいて、命令「LDI:32」がCPUの状態を制御する命令ではないことにより初期のCPU状態「状態A」と、命令のアドレス「0x00000000」とを抽出する(S126)。そして、期待値生成部22は、抽出したデータに基づいて、期待値フォーマット「1」の出力信号項目の期待値「CPU状態/状態A」、「命令アドレス/0x00000000」を生成する(S128)。
また、命令「JMP @R5」について、期待値生成部22は、同様に、デコード情報に基づいて、命令「JMP」がCPUの状態を制御する命令ではないことにより「状態A」と、命令のアドレス「0x0000000C」とを抽出する。これにより、命令「JMP @R5」の期待値フォーマット(図14のc)について、固定値「分岐情報/分岐元」、「分岐要因/命令分岐」に加え、「命令アドレス/0x0000000C」、「CPU状態/状態A」が期待値として生成される。また、同様に、分岐用の期待値フォーマット(図14のd)について、「分岐情報/分岐先」、「分岐要因/命令分岐」、「CPU状態/状態A」が期待値として生成される。
命令「CALL @R6」について、期待値生成部22は、デコード情報に基づいて、「CPU状態」、「命令アドレス」に加え、CALL命令に伴う復帰情報のスタック空間への書き込み処理における「アクセスアドレス」としてスタック空間の書き込みアドレス「0x000007FC」、「ライトデータ」として分岐元の次命令のアドレス「0x00000102」を抽出する。これにより、命令「CALL @R6」の期待値フォーマット(図14のe-1,2)について、固定値「分岐情報/分岐元」、「分岐要因/命令分岐」「RW情報/W」「アクセスサイズ/4」に加え、「命令アドレス/0x00000100」「CPU状態/状態A」「アクセスアドレス/0x000007FC」「ライトデータ/0x00000102」が期待値として生成される。
また、期待値生成部22は、フォーマット合成項目が「ON」である分岐用の期待値フォーマット(d)と、次の命令「CALL @R6」の始めの期待値フォーマット(e-1)とを合成して、合成期待値フォーマット(d,e-1)を生成する。具体的に、期待値生成部22は、期待値が同一の出力信号項目については当該期待値を、期待値の異なる出力信号項目については合成した値「分岐情報/分岐先元」(d,e-1)を期待値として生成する。
このように、図12で示した「(12)分岐命令用」の期待値フォーマットが次の命令の期待値フォーマットに合成されることにより、期待値生成部22は、分岐先の命令(上記の例では、CALL)について、分岐先の命令である旨の期待値を生成することができる。また、期待値フォーマットが命令種別に基づいて予め予測された固定値(期待値)を有することにより、期待値生成部22は、非固定値に対してのみ期待値を生成すればよい。
このようにして、期待値生成部22は、命令に対応する出力信号項目を有する期待値フォーマットを取得し、その命令のデコード情報に基づいて出力信号項目に対応する期待値を生成する。また、期待値生成部22は、さらに、命令のアドレス、及び、デコード情報に基づく予め用途別に区分されたメモリ空間のアドレス、当該アドレスに予め格納されたメモリ情報に基づいて期待値を生成する。これにより、期待値生成部22は、CPU10がテストプログラムの各命令を実行して出力する信号を予測した期待値を生成することができる。
以上のように、本実施の形態例における論理検証シナリオ生成装置は、検証シナリオ条件として、「検証命令」「検証命令アドレス」「前後命令組合せ」の組合せをテストライブラリ214の各リストから順次選択する。そして、論理検証シナリオ生成装置は、選択した検証シナリオ条件に基づいて、用途別に区分されたメモリ空間の「前命令空間」71に前命令を「後命令空間」72に後命令を、「検証命令アドレス」に「検証命令」を、また、前命令が分岐命令である場合の分岐先アドレスに「検証命令アドレス」を記憶するようにメモリモジュール12を記述することによって、テストプログラムを格納するメモリモジュール12生成する。そして、論理検証シナリオ生成装置は、テストプログラムの各命令について、命令のデコード情報に基づいて、期待値フォーマット記憶部221から対応する期待値フォーマットを取得し、当該期待値フォーマットの有する出力信号に対応する期待値を生成する。
これにより、論理検証シナリオ生成装置は、順次選択した検証シナリオ条件の組合せに基づいて、テストプログラムを格納するメモリモジュール12、及びテストプログラムの各命令に対応する期待値を網羅的に自動生成することができ、その生成にかかる負荷やミスを抑えることができる。
また、CPU10の出力信号は命令の組合せや順番によっても影響を受ける。そこで、本実施の形態例における論理検証シナリオ生成装置は、「検証命令」と「前後命令組合せ」の検証シナリオ条件を網羅的に組み合わせて複数の命令を有するテストプログラムを格納するメモリモジュール12を生成することにより、CPU10に適した論理検証を実現することができる。
また、本実施の形態例における論理検証シナリオ生成装置は、検証シナリオ条件として、「検証命令」を記憶するメモリ空間の「検証命令アドレス」が選択されることにより、命令が格納されるメモリ空間上のアドレスの検証を行うことができる。なお、論理検証シナリオ生成装置は、「検証命令アドレス」に、「分岐先命令空間」73や「ブレーク空間」76のアドレスを選択させてもよい。ただし、「検証命令アドレス」に「分岐先命令空間」73や「ブレーク空間」76のアドレスが選択される場合、前命令には分岐命令やブレーク命令を含む分岐処理が選択される必要がある。
さらに、以上、検証シナリオ条件として「検証命令アドレス」が選択される例を述べたが、論理検証シナリオ生成装置は、「検証命令アドレス」を検証シナリオ条件に含まなくてもよい。論理検証シナリオ生成装置は、予め固定の「検証命令アドレス」を決めておき、「検証命令」と「前後組合せ」に基づいてテストプログラムを格納したメモリモジュール12及び期待値を生成してもよい。
[第2の実施の形態例]
第2の実施の形態例では、検証シナリオ条件として、第1の実施の形態例で述べた「検証命令」「検証命令アドレス」「前後命令組合せ」に加え、さらに、「検証命令」に対して入力する「外部入力要因」と、当該「外部入力要因」の「外部入力タイミング」とが選択される。
本実施の形態例におけるCPU10及びメモリモジュール12は、図1、2と同様である。ただし、本実施の形態例における論理検証シナリオ生成装置は、上記の検証シナリオ条件に基づいて、さらに、RTL記述された外部入力信号生成モジュール11(図3)を生成する。外部入力信号生成モジュール11は、論理検証シミュレーション実行時にCPU10が実行する「検証命令」の「外部入力タイミング」に「外部入力要因」に基づく信号を出力する。
図15は、テストライブラリ214における外部入力要因リストEX、外部入力タイミングリストEXTを表す図である。テストライブラリ214には、検証命令リストCM、検証命令アドレスリストCM@、前後命令組合せリストCMLに加え、「外部入力要因」を複数有する外部入力要因リストEX、「外部入力タイミング」を複数有する外部入力タイミングリストEXTが検証者等によって予め格納される。また、同図のテストライブラリ214において、それぞれの「外部入力要因」、「外部入力タイミング」は、例えば、「1〜n」の数字等の識別記号に対応付けられる。
「外部入力要因」は、例えば、割り込み、例外、トラップ等の要因に基づく入力信号である。割り込みは、実行中の命令とは関係なく発生する外部からのハードウェア的な割り込みであり、例外は、命令実行に伴うエラーや違反等によって発生するアドレス例外等である。また、トラップは、プログラム中に意図的に発生させる割り込みである。シミュレーション実行時に、命令に割り込みや例外等の「外部入力要因」が発生すると、CPU10は、図7のメモリモジュール12が定義するメモリ空間の「ベクタテーブル」78から当該「外部入力要因」に対応する所定処理(EITルーチン)が予め格納された「EITルーチン空間」77の先頭アドレスを取得し、当該先頭アドレスに分岐してEITルーチンを実行する。
また、本実施の形態例における「外部入力タイミング」は、CPU10の「検証命令」のパイプライン処理における「外部入力要因」を発生させるステージであり、「検証命令フェッチタイミング」「検証命令デコードタイミング」「検証命令実行タイミング」等である。
本実施の形態例におけるテストプログラムを格納するメモリモジュール12、及び、外部入力信号生成モジュール11の生成処理を図5のフローチャート図に基づいて説明する。本実施の形態例の検証シナリオ条件入力部210は、テストライブラリ214から検証シナリオ条件として、「検証命令」「検証命令アドレス」「前後命令組合せ」に加え、「外部入力要因」、「外部入力タイミング」とを受け付ける(S101)。
検証シナリオ条件入力部210は、選択された検証シナリオ条件が検証対象のCPU10の仕様制限に該当しない場合(S102のNO)、検証シナリオ条件判定処理として、選択した検証シナリオ条件を分割し、「検証命令」を検証命令選択処理S104へ、「前後命令組合せ」を前後命令選択処理S105へ、「検証命令アドレス」を検証命令アドレス選択処理S106へ渡すと共に、「外部入力要因」を外部入力要因選択処理S110へ、「外部入力タイミング」を外部入力タイミング選択処理S111へ渡す(S103)。
検証命令選択処理(S104)、前後命令選択処理(S105)、及び、テストプログラム生成処理(S107)は、第1の実施の形態例と同様である。ただし、プログラム条件判定部211は、検証命令アドレス選択処理として、「検証命令アドレス」をさらに外部入力信号パラメータ生成処理S112へ渡す(S106)。そして、外部入力信号生成部213は、外部入力要因選択処理として「外部入力要因」の識別記号に基づいて「外部入力要因」を(S110)、外部入力タイミング選択処理として「外部入力タイミング」の識別記号に基づいて「外部入力タイミング」を(S111)、テストライブラリ214から選択する。
続いて、外部入力信号生成部213は、「検証命令アドレス」と「外部入力要因」と「外部入力タイミング」とに基づいて、外部入力信号パラメータを生成する(S112)。外部入力信号生成部213は、生成した外部入力信号パラメータを外部入力信号生成モジュール11に記述する(S113)。
図16は、「外部入力要因」が割り込みである外部入力信号生成モジュール11の一例を表す図である。同図の外部入力信号生成モジュール11は、Verilog HDLによって記述されている。ただし、外部入力信号生成モジュール11は、同図の記述に限定されるものではない。
図16の記述161において、変数「int_addr」「int_stage」が定義され、「int_addr」に割り込みを発生させる「検証命令」の「検証命令アドレス」を示す値が、「int_stage」に「外部入力タイミング」を示す値が入力される。そして、図16の記述162において、シミュレーション実行中、CPU10の「int_stage(外部入力タイミング)」のステージの命令のアドレスが「int_addr(検証命令アドレス)」である場合に、割り込み信号を発生させる処理が記述されている。これにより、外部入力信号生成モジュール11は、論理検証シミュレーション実行時、「int_addr」の示す「検証命令アドレス」が「int_stage」ステージである時に、割り込み信号を生成する。
具体的に、外部入力信号生成部213は、外部入力信号パラメータとして、「外部入力要因」に対応する変数「int_addr」に「検証命令アドレス」を示す値を、「int_stage」に「外部入力タイミング」を示す値を生成する(S112)。そして、生成した外部入力信号パラメータを「外部入力要因」に対応するモジュールに記述して、外部入力信号生成モジュール11を生成する(S113)。
このように、論理検証シナリオ生成部21は、「外部入力要因」、「検証命令アドレス」、「外部入力タイミング」に基づく外部入力信号パラメータを生成して、対応するモジュールに記述し、外部入力信号生成モジュール11を生成する。これにより、外部入力信号生成モジュール11は、論理検証シミュレーション実行時、「検証命令」の「外部入力タイミング」に「外部入力要因」を発生させることができる。
図17は、検証シナリオ条件に基づいて生成されたテストプログラムを格納するメモリモジュール12の一例である。同図は、図6の「検証命令」「1(ADD R1,R2)」、「検証命令アドレス」「1(0x00000100)」、「前後命令組合せ」「4((前命令)分岐処理B/(後命令)演算処理A)」、図15の「外部入力要因」「1(割り込み信号)」、「外部入力タイミング」「3(検証命令実行タイミング)」の検証シナリオ条件に基づいて生成されたテストプログラムを格納するメモリモジュール12である。具体的に、分岐処理Bは、次の命令である。
「LDI:32 (分岐先アドレス),R5」
「JMP @R5」
また、演算処理Aは、次の命令である。
「LDI:32 0x00000300,R1」
図17のテストプログラムを格納するメモリモジュール12において、「前命令空間」71に分岐処理Bが、「後命令空間」72に演算処理Aが、検証命令アドレス「0x00000100」に検証命令「ADD R1,R2」が、分岐処理Bの(分岐先アドレス)171に検証命令アドレス「0x00000100」が記憶されるように記述される。同図のテストプログラムによると、論理検証シミュレーション実行時に、CPU10は、まず前命令「LDI:32 0x00000100,R5」「JMP @R5」を実行する。「JMP @R5」が分岐命令であるため、CPU10は「@R5」の示す分岐先アドレス「0x00000100」に分岐し、続いて、検証命令「ADD R1,R2」を実行する。
ただし、検証命令「ADD R1,R2」には、「検証命令実行タイミング」に、外部入力信号生成モジュール11から割り込み信号が入力される。CPU10は、割り込み信号が入力されると、「ベクタテーブル」78から「EITルーチン空間」77における割り込み信号ルーチンの先頭アドレス「0x00001000」172を取得し、当該アドレスに予め格納された命令「ADD R3,R4」「RETI」を実行する。「RETI」は分岐先からの復帰命令であるため、CPU10は、分岐元に戻り、次の命令である「LDI:32 0x00000300,R1」を実行する。
このように、論理検証シナリオ生成部21は、メモリ空間において、「外部入力要因」毎に、当該「外部入力要因」発生時に実行される命令(EITルーチン)を格納した「EITルーチン空間」77の先頭アドレスを「ベクタテーブル」78に予め格納する。これにより、テストプログラム生成部212は、「検証命令」の「外部入力タイミング」に「外部入力要因」が発生する場合のテストプログラムについても、第1の実施の形態例と同様に自動的に生成することができる。
引き続き、期待値生成処理について、図9のフローチャート図に基づいて説明する。期待値生成部22は、テストプログラムの開始アドレスから順に命令を読み出し(S121)、読み出した命令の要素分解処理を行う(S122)。
期待値生成部22は、検証シナリオ要素分解処理として(S122、図10)、第1の実施の形態例と同様に、命令をデコードしてデコード情報を生成し、命令種別判定処理に渡す(図10のS141)。そして、期待値生成部22は、外部入力信号パラメータに基づいて、外部入力信号のEIT要因を抽出してEIT要因判定処理に渡し(図10のS142)、デコード情報とEIT要因の有無とに基づいて、命令の分岐の有無情報を生成して分岐判定処理へ渡す(図10のS143)。なお、EIT要因により分岐が発生するため、EIT要因が有の場合は分岐有となる。そして、期待値生成部22は、第1の実施の形態例と同様に、デコード情報と命令のアドレス情報とをデータ抽出処理へ渡す(図10のS144)。
図9に戻り、続いて、期待値生成部22は、第1の実施の形態例と同様に、命令種別判定処理として命令種別に対応するフォーマット番号を(S123)、分岐判定処理として分岐有の場合に分岐用のフォーマット番号を(S125)、期待値フォーマット選択処理(S127)に渡す。そして、期待値生成部22は、EIT要因判定処理として、EIT要因に対応するフォーマット番号を選択し、期待値フォーマット選択処理(S127)へ渡す(S124)。
図12の期待値フォーマット「9〜11」は、EIT要因に対応する期待値フォーマットである。EIT要因に対応する期待値フォーマットには、例えば、「(9)非同期EIT」、「(10)同期EIT」「(11)ブレーク」があり、EIT要因に対応して選択される。例えば、EIT要因が「割り込み」の場合、「割り込み」は非同期EITであるため、「(9)非同期EIT」の期待値フォーマットが選択される。
割り込み信号が発生すると、CPU10は、「ベクタテーブル」78から「EITルーチン空間」77の割り込みルーチンのアドレスを読み出すと共に、割り込み信号発生による分岐からの復帰情報(プログラムステータス、次命令のアドレス)を「スタック空間」75に書き込む。そのため、「(9)非同期EIT」外部入力要因用の期待値フォーマットは、1行目に、「ベクタテーブル」78から割り込みルーチンの格納アドレスを読み出す処理における「命令アドレス」、「分岐情報(固定値)」、「分岐要因(固定値)」、「EIT要因」、「CPU状態」、「アクセスアドレス」、「RW情報(固定値)」、「アクセスサイズ(固定値)」、「リードデータ」の出力信号項目を有する。
そして、「(9)非同期EIT」外部入力要因用の期待値フォーマット2〜3行目は、スタック空間に復帰情報を書き込む処理における「CPU状態」、「アクセスアドレス」、「RW情報(固定値)」、「アクセスサイズ(固定値)」、「ライトデータ」の出力信号項目を有する。
続いて、図11において(S127)、期待値生成部22は、命令種別判定処理で選択したフォーマット番号と、EIT要因判定処理で選択したフォーマット番号とに基づいて、フォーマットを選択する(S151)。具体的に、期待値生成部22は、EIT要因に対応するフォーマット番号がある場合は、命令種別ではなくEIT要因に対応するフォーマット番号の期待値フォーマットを取得する。そして、期待値生成部22は、分岐有の場合(S152のYES)、命令種別、EIT要因判定に基づく期待値フォーマットに分岐用の期待値フォーマットを付加して(S153)、期待値フォーマットを確定する(S154)。
図9に戻り、期待値生成部22は、第1の実施の形態例と同様、データ抽出処理(S126)に基づく抽出データに基づいて、期待値フォーマットの出力信号項目に対応する期待値を生成する(S128、129)。
以下、図17のテストプログラムに基づく期待値生成の具体例を述べる。なお、同図のテストプログラムにおいて、「外部入力要因」の発生しない命令に対する期待値生成処理は、第1の実施の形態例と同様である。従って、以下に「外部入力要因」の発生する検証命令「ADD R1,R2」の期待値生成処理について説明する。
期待値生成部22は、命令「ADD R1,R2」を読み出し(S121)、検証シナリオ要素分解処理として(S122)、当該命令をデコードして、命令が「ADD」であるという情報を命令種別判定処理へ渡すと共に(図10のS141)、「外部入力要因」に基づいてEIT要因「割り込み」を抽出してEIT要因判定処理へ渡す(図10のS142)。そして、期待値生成部22は、「ADD」命令が分岐無であるものの、EIT要因「割り込み」に基づいて分岐有という情報を分岐判定処理へ渡す(図10のS143)。また、期待値生成部22は、デコード情報と命令のアドレス情報「0x00000100」とをデータ抽出処理へ渡す(図10のS144)。
続いて、期待値生成部22は、「ADD」命令が演算系の命令であることを判別し、演算系の命令に対応するフォーマット番号「1」を(S123)、EIT要因「割り込み」に基づいて「(9)非同期」の期待値フォーマットのフォーマット番号「9」を(S124)、分岐有である情報に基づいて分岐用の期待値フォーマット「12」を(S125)、フォーマット選択処理に渡す。
そして、期待値生成部22は、図11のフローチャート図に基づいて、命令種別に対応するフォーマット番号「1」ではなく、EIT要因に対応するフォーマット番号「9」に基づいて、EIT要因に対応する期待値フォーマット「9」を選択する(S151)。また、分岐有により(S152のYES)、期待値生成部22は、期待値フォーマット記憶部221から期待値フォーマット「9」「12」を選択してフォーマットを確定する(S154)。このようにして、割り込み信号が発生する命令「ADD R1,R2」に対応する期待値フォーマットが選択される。
図18は、図17のテストプログラムの各命令に対応する期待値フォーマットを表す図である。前述した通り、「外部入力要因」が発生する検証命令「ADD R1,R2」に対応する期待値フォーマットは「9」「12」である(l-1〜3,m)。
続いて、図19は、図17のテストプログラムに対応する期待値を表す図である。以下に、検証命令「ADD R1,R2」について、期待値を生成する処理について述べる。
期待値生成部22は、命令「ADD R1,R2」のデータ抽出処理として、デコード情報に基づいて、命令「ADD」がCPUの状態を制御する命令ではないことによる初期のCPU状態「状態A」、EIT要因「割り込み」、及び命令アドレス「0x00000100」を抽出する(S126)。また、期待値生成部22は、EIT要因「割り込み」に基づいて、「ベクタテーブル」78からの割り込みルーチンの格納アドレスの読み出し処理における「アクセスアドレス」としてベクタテーブルのアドレス「0xFFFF1000」、「リードデータ」としてベクタテーブルのメモリ情報「0x0001000」を抽出する。さらに、期待値生成部22は、復帰情報のスタック空間への書き込み処理における「アクセスアドレス」として2つ分情報のスタック空間への書き込みアドレス「0x000007F8/0x000007FC」、「ライトデータ」として「PS(プログラムステータス)/次の命令アドレス(0x00000102)」を抽出する。
これにより、分岐用の期待値フォーマット(k)が合成された命令「ADD R1,R2」の期待値フォーマット(図19のk,l-1)について、「RW情報/R」「アクセスサイズ/4」、「命令アドレス/0x00000100」、「EIT要因/割り込み」「CPU状態/状態A」「アクセスアドレス/0xFFFF1000」「リードデータ/0x00001000」が期待値として生成される。また、分岐用の期待値フォーマット(k)が合成されたことにより、「分岐情報/分岐先元」、「分岐要因/命令分岐・非同期EIT」が期待値として生成される。
また、命令「ADD R1,R2」の期待値フォーマット(図19のl-2,3)について、固定値「RW情報/W」「アクセスサイズ/4」に加え、「CPU状態/状態A」「アクセスアドレス/0x000007FC、0x000007F8」「ライトデータ/PS、0x00000102」が期待値として生成される。また、検証命令「ADD R1,R2」の分岐用の期待値フォーマット(m)は、次の命令「ADD R3,R4」に対応する期待値フォーマット(n)に合成される。
このようにして、期待値生成部22は、命令に対して「外部入力要因」が発生する場合、「外部入力要因」に対応する出力信号項目を有する期待値フォーマットを取得し、「外部入力要因」のEIT要因に基づいて出力信号項目に対応する期待値を生成する。また、期待値生成部22は、さらに、EIT要因に基づく予め用途別に区分されたメモリ空間のアドレス、当該アドレスに予め格納されたメモリ情報に基づいて期待値を生成する。これにより、期待値生成部22は、「外部入力要因」が発生する場合においても、CPU10がテストプログラムの各命令を実行して出力する信号を予測した期待値を生成することができる。
また、本実施の形態例における論理検証シナリオ生成装置は、検証シナリオ条件に、「外部入力タイミング」が選択されることにより、「外部入力要因」を「検証命令」に発生させるタイミングを指定した論理検証を行うことができる。ただし、論理検証シナリオ生成装置は、「外部入力タイミング」を検証シナリオ条件に含まなくてもよい。
また、本実施の形態例の論理検証シナリオ生成装置は、「検証命令アドレス」に「EITルーチン空間」77のアドレスを選択させてもよい。ただし、「検証命令アドレス」に「EITルーチン空間」77のアドレスが選択される場合、前命令には外部入力要因の発生する処理(割り込み処理等)が選択される必要がある。
さらに、本実施の形態例における期待値フォーマットは、同じ出力信号項目を出力する命令種別毎に用意されることにより、期待値フォーマット記憶部のデータ容量が抑えられる。しかし、期待値フォーマットは、それぞれの命令、及び、外部入力信号毎に用意されてもよい。
なお、本実施の形態例では、図12のような出力信号項目を例示したが、出力信号項目はCPU10によって異なり、同図の例に限定されるものではない。なお、本実施の形態例における出力信号項目は、CPU10の命令サイクル完了時に出力される項目である。しかし、出力信号項目は、例えば、CPU10のクロックサイクル毎に取得される項目でもよいし、取得が有効な特定のサイクルに取得される項目でもよい。
以上の実施の形態をまとめると、次の付記のとおりである。
(付記1)
RTL記述されたCPUの論理検証のためのテストプログラムを生成する論理検証シナリオ生成装置であって、
検証命令を複数有する検証命令リストと、前記検証命令の前に実行する前命令、及び後に実行する後命令の前後命令組合せを複数有する前後命令組合せリストとを格納するテストライブラリと、
前記CPUが前記命令を実行して出力するひとつまたは複数の出力信号項目を有する期待値フォーマットを格納する期待値フォーマット記憶部と、
前記検証命令を記憶するための検証命令アドレスと、前記前命令を格納する前命令空間と、前記後命令を格納する後命令空間と、前記命令がデータアクセス命令である場合のアクセス対象のデータ空間と、前記命令が分岐命令である場合の分岐先命令を格納する分岐命令空間と、前記命令が分岐後復帰命令である場合に復帰情報を格納するスタック空間とを有するメモリモジュールであって、前記テストライブラリから順次選択した前記検証命令と前記前後命令組合せとに基づいて、前記検証命令アドレスに前記検証命令を、前記前命令空間に前記前命令を、前記後命令空間に前記後命令を記憶すると共に、前記前命令が前記分岐命令である場合に前記前命令の分岐先アドレスに前記検証命令アドレスを記憶したメモリモジュールを前記テストプログラムとして生成するテストプログラム生成部と、
前記生成したテストプログラムの各命令について、当該命令に対応する前記期待値フォーマットを前記期待値フォーマット記憶部から取得し、当該命令をデコードしたデコード情報に基づいて前記出力信号項目に対応する期待値を生成する期待値生成部と、
を有することを特徴とする論理検証シナリオ生成装置。
(付記2)
付記1において、
前記テストライブラリは、さらに、前記検証命令アドレスを複数有する検証命令アドレスリストを格納し、
前記テストプログラム生成部は、さらに、前記テストライブラリから前記検証命令アドレスを順次選択することを特徴とする論理検証シナリオ生成装置。
(付記3)
付記1または2において、
前記テストライブラリは、さらに、前記検証命令に対して発生させる外部入力信号を複数有する外部入力信号リストを格納し、
前記テストプログラム生成部は、さらに、前記外部入力信号リストの各前記外部入力信号に対応する外部入力命令を格納する外部入力命令空間と、前記外部入力命令空間における各前記外部入力信号の前記外部入力命令のアドレスを格納するベクタテーブルとを有する前記メモリモジュールをテストプログラムとして生成し、
前記論理検証シナリオ生成装置は、さらに、
前記テストライブラリから順次選択した前記外部入力信号と、前記検証命令アドレスとに基づいて、前記検証命令に対して前記外部入力信号を発生させる外部入力信号生成モジュールを生成する外部入力信号生成部を有し、
前記期待値生成部は、前記検証命令について、前記外部入力信号に対応する前記期待値フォーマットを選択し、前記外部入力信号に基づいて前記期待値を生成することを特徴とする論理検証シナリオ生成装置。
(付記4)
付記3において、
前記テストライブラリは、さらに、前記外部入力信号を発生させる発生タイミングを複数有する発生タイミングリストを格納し、
外部入力信号生成部は、さらに、前記テストライブラリから順次選択した前記発生タイミングに基づいて前記外部入力信号生成モジュールを生成することを特徴とする論理検証シナリオ生成装置。
(付記5)
付記1乃至4のいずれかにおいて、
前記期待値生成部の生成する前記期待値は、さらに、前記デコード情報に基づく前記メモリモジュールのアドレス情報、及び、当該アドレス情報に格納されたメモリ情報のいずれかまたは両方であることを特徴とする論理検証シナリオ生成装置。
(付記6)
付記3または4において、
前記期待値生成部の生成する前記期待値は、さらに、前記外部入力信号に基づく前記メモリモジュールのアドレス情報、及び、当該アドレス情報に格納されたメモリ情報のいずれかまたは両方であることを特徴とする論理検証シナリオ生成装置。
(付記7)
付記1乃至6のいずれかにおいて、
前記期待値生成部は、前記命令が分岐命令である場合、前記命令に対応する期待値フォーマットに加えて、分岐先を示す前記出力信号項目を有する分岐先期待値フォーマットを前記期待値フォーマット記憶部から取得し、当該分岐先期待値フォーマットを次命令の前記期待値フォーマットに合成して合成期待値フォーマットを生成し、前記次命令について当該合成期待値フォーマットの前記出力信号項目に対応する期待値を生成することを特徴とする論理検証シナリオ生成装置。
(付記8)
付記1乃至7のいずれかにおいて、
前記テストライブラリの格納する前記前命令、及び、前記後命令は、ひとつまたは複数の前記命令を有することを特徴とする論理検証シナリオ生成装置。
(付記9)
付記1乃至8のいずれかにおいて、
同種別の命令、または外部入力信号に対応する前記期待値フォーマットは同一であることを特徴とする論理検証シナリオ生成装置。
(付記10)
付記9において、
前記期待値の前記出力信号項目は、前記種別に基づいて予め期待値が予測される固定値と、前記デコード情報、または前記外部入力信号に基づいて期待値が生成される非固定値とを有し、
前記期待値生成部は、前記非固定値の前記出力信号項目に対応する期待値を生成することを特徴とする論理検証シナリオ生成装置。
(付記11)
付記1において、
前記メモリモジュールはRTL記述されていることを特徴とする論理検証シナリオ生成装置。
(付記12)
付記3において、
前記外部入力信号生成モジュールはRTL記述されていることを特徴とする論理検証シナリオ生成装置。
(付記13)
RTL記述されたCPUの論理検証のためのテストプログラムを生成する論理検証シナリオ生成処理をコンピューターに実行させるコンピューター読み取り可能な論理検証シナリオ生成プログラムにおいて、
前記論理検証シナリオ生成処理は、
検証命令を複数有する検証命令リストと、前記検証命令の前に実行する前命令、及び後に実行する後命令の前後命令組合せを複数有する前後命令組合せリストとを格納するテストライブラリと、
前記CPUが前記命令を実行して出力するひとつまたは複数の出力信号項目を有する期待値フォーマットを格納する期待値フォーマット記憶部と、
前記検証命令を記憶するための検証命令アドレスと、前記前命令を格納する前命令空間と、前記後命令を格納する後命令空間と、前記命令がデータアクセス命令である場合のアクセス対象のデータ空間と、前記命令が分岐命令である場合の分岐先命令を格納する分岐命令空間と、前記命令が分岐後復帰命令である場合に復帰情報を格納するスタック空間とを有するメモリモジュールであって、前記テストライブラリから順次選択した前記検証命令と前記前後命令組合せとに基づいて、前記検証命令アドレスに前記検証命令を、前記前命令空間に前記前命令を、前記後命令空間に前記後命令を記憶すると共に、前記前命令が前記分岐命令である場合に前記前命令の分岐先アドレスに前記検証命令アドレスを記憶したメモリモジュールを前記テストプログラムとして生成するテストプログラム生成工程と、
前記生成したテストプログラムの各命令について、当該命令に対応する前記期待値フォーマットを前記期待値フォーマット記憶部から取得し、当該命令をデコードしたデコード情報に基づいて前記出力信号項目に対応する期待値を生成する期待値生成工程と、
を有することを特徴とする論理検証シナリオ生成プログラム。