(57)【要約】【課題】開発期間や開発コストを低減することができる、半導体集積回路の機能検証装置、及び半導体集積回路の機能検証方法を提供する。【解決手段】テストシナリオ３１に従いスティミュラスを生成するスティミュラス生成部３２１と、論理回路３２２から得られる出力値と期待値とを比較して一致するか否かを判定する結果判定部３２３と、出力値と期待値が不一致であると判定された場合に不一致情報をＦａｉｌログ３４として出力するＦａｉｌログ生成部３２６と、論理回路３２２内の全ての信号・レジスタ・記憶素子の値を論理回路状態情報として論理回路状態情報記憶部３３に保存させる状態ダンプ部３２４と、出力値と期待値が不一致であると判定された場合に論理回路状態情報記憶部３３に保存されている論理回路状態情報を論理回路３２２にロードさせる状態ロード部３２５と、を備えていることを特徴とする。【選択図】図２
2013029938.tif 000002
【特許請求の範囲】
【請求項１】
入力されるテストシナリオに従いスティミュラスを生成するスティミュラス生成部と、
前記スティミュラスが検証対象の論理回路に入力され所定の動作が実行されることにより得られる出力値と、前記スティミュラスが前記検証対象の論理回路に入力され所定の動作が実行された場合に得られるであろうと予想される期待値とを比較し、前記出力値と前記期待値とが一致するか否かを判定する結果判定部と、
前記結果判定部において前記出力値と前記期待値が不一致であると判定された場合に、少なくとも前記スティミュラスと前記期待値と前記出力値とを含む不一致情報をログとして出力するフェイルログ生成部と、
前記スティミュラスが生成されてから前記検証対象の論理回路に入力されるまでの任意の時点において、前記検証対象の論理回路内の全ての信号・レジスタ・記憶素子の値を論理回路状態情報として記憶装置に保存させる状態ダンプ部と、
前記記憶部に保存されている前記論理回路状態情報を前記検証対象の論理回路にロードさせる状態ロード部と、
を備えており、前記状態ロード部は、前記結果判定部において前記出力値と前記期待値が不一致であると判定された場合にのみ、前記論理回路状態情報を前記検証対象の論理回路にロードさせて、前記検証対象の論理回路を前記スティミュラスが前記検証対象の論理回路に入力され実行される前の状態に戻し、また、前記スティミュラス生成部は、前記論理回路状態情報が前記検証対象の論理回路にロードされた後に、前記スティミュラスと異なる第２のスティミュラスを生成して前記検証対象の論理回路に入力することを特徴とする、半導体集積回路の機能検証装置。
【請求項２】
入力されるテストシナリオに従いスティミュラスを生成するスティミュラス生成部と、
前記スティミュラスが検証対象の論理回路に入力され所定の動作が実行されることにより得られる出力値と、前記スティミュラスが前記検証対象の論理回路に入力され所定の動作が実行された場合に得られるであろうと予想される期待値とを比較し、前記出力値と前記期待値とが一致するか否かを判定する結果判定部と、
前記結果判定部において前記出力値と前記期待値が不一致であると判定された場合に、少なくとも前記スティミュラスと前記期待値と前記出力値とを含む不一致情報をログとして出力するフェイルログ生成部と、
前記スティミュラスが生成されてから前記検証対象の論理回路に入力されるまでの任意の時点において、前記検証対象の論理回路内の全ての信号・レジスタ・記憶素子の値を論理回路状態情報として記憶装置に保存させる状態ダンプ部と、
前記記憶部に保存されている前記論理回路状態情報を前記検証対象の論理回路にロードさせる状態ロード部と、
を備えており、前記状態ロード部は、前記結果判定部において前記出力値と前記期待値が不一致であると判定された場合にのみ、前記論理回路状態情報を前記検証対象の論理回路にロードさせることを特徴とする、半導体集積回路の機能検証装置。
【請求項３】
前記テストシナリオに従うスティミュラスを構成する１種類以上のパラメータ及び前記パラメータのとりうる値もしくは範囲を決定し、前記パラメータを軸とし前記パラメータの値もしくは範囲の組み合わせを要素とするパラメータテーブルを生成及び保持するスティミュラス生成制御部を更に備えており、スティミュラス生成制御部は、前記スティミュラスを前記検証対象の論理回路に入力して前記結果判定部において得られる判定結果を、前記スティミュラスの生成に用いられた前記パラメータテーブルにおける前記要素に登録し、設定された特定の時点において前記判定結果が登録された要素を境界として前記パラメータテーブルを複数の領域に分割することを特徴とする、請求項２に記載の半導体集積回路の機能検証装置。
【請求項４】
前記スティミュラス生成制御部は、前記パラメータテーブルの分割された複数の前記領域から特定の条件に当てはまる前記領域を抽出し、それ以降の検証に用いる前記スティミュラスの生成に用いられる前記パラメータの値を前記抽出された領域に含まれる値とすることを特徴とする、請求項３に記載の半導体集積回路の機能検証装置。
【請求項５】
前記スティミュラス生成制御部は、前記パラメータテーブルの分割された複数の前記領域のそれぞれについて、前記判定結果が未登録である前記要素の数が最も多かった前記領域を第１のタイプ、前記出力値と前記期待値が不一致であるという前記判定結果が登録されている前記要素の数が最も多かった前記領域を第２のタイプ、前記出力値と前記期待値が一致しているという前記判定結果が登録されている前記要素の数が最も多かった前記領域を第３のタイプ、といずれかのタイプに分類し、前記第１から第３のタイプの中の特定のタイプに分類されていることを前記特定の条件として前記領域を抽出することを特徴とする、請求項４に記載の半導体集積回路の機能検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、半導体集積回路の機能検証装置に関する。
【背景技術】
【０００２】
一般的に、半導体集積回路、特に論理回路の機能検証において、効率的かつ品質の高い検証を行う手法としてランダム検証が用いられている。ランダム検証では、予め定義されたテストシナリオに従ってランダムなスティミュラスを生成し、検証対象となる論理回路に入力する。論理回路からの出力が期待値と等しい場合、論理回路が仕様通りに構築されているので合格（以下、“Ｐａｓs”と示す）と判定される。しかし、論理回路からの出力が期待値と異なる場合、論理回路が仕様通りに構築されておらず、不具合があるため不合格（以下、“Ｆａｉｌ”と示す）と判定される。
【０００３】
ランダム検証の作業初期段階では、通常、発生確率が高いいくつかの機能バグのために多くのランダムベクタがＦａｉｌとなり検証が停止してしまう。従って、従来の検証装置では、Ｆａｉｌの原因となったバグを修正した後に再度検証を行う作業を繰り返し、論理回路に存在するバグを順次検出していた。
【０００４】
このように、従来の検証装置では、発生確率が高いバグから順次修正していかなければ発生確率の低いバグを検出することができなかった。つまり、従来の検証装置では、バグの重要度でなく発見した順番（発生確率の高い順）に論理回路を修正しなくてはならないため、検証作業の初期段階で設計の大きな変更を伴うような重要なバグを検出することができなかった。
【０００５】
このため、発生確率が高いバグを時間をかけて修正した後に、論理回路の重要な部分の構造・設計に大きな変更が必要となるようなバグが検出される場合、それまでの検証作業やバグの修正作業が無駄になってしまい、開発期間やコストが増大してしまうという問題があった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−６７２７０号公報
【特許文献２】特開２００１−３３１５４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
そこで、本実施形態は、以上の点に鑑みてなされたもので、開発期間や開発コストを低減することができる、半導体集積回路の機能検証装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本実施形態の半導体集積回路の機能検証装置は、入力されるテストシナリオに従いスティミュラスを生成するスティミュラス生成部と、前記スティミュラスが検証対象の論理回路に入力され所定の動作が実行されることにより得られる出力値と、前記スティミュラスが前記検証対象の論理回路に入力され所定の動作が実行された場合に得られるであろうと予想される期待値とを比較し、前記出力値と前記期待値とが一致するか否かを判定する結果判定部と、前記結果判定部において前記出力値と前記期待値が不一致であると判定された場合に、少なくとも前記スティミュラスと前記期待値と前記出力値とを含む不一致情報をログとして出力するフェイルログ生成部と、前記スティミュラスが生成されてから前記検証対象の論理回路に入力されるまでの任意の時点において、前記検証対象の論理回路内の全ての信号・レジスタ・記憶素子の値を論理回路状態情報として記憶装置に保存させる状態ダンプ部と、前記記憶部に保存されている前記論理回路状態情報を前記検証対象の論理回路にロードさせる状態ロード部と、を備えており、前記状態ロード部は、前記結果判定部において前記出力値と前記期待値が不一致であると判定された場合にのみ、前記論理回路状態情報を前記検証対象の論理回路にロードさせることを特徴とする。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態に係わる半導体集積回路の機能検証装置の構成の一例を説明する図。
【図２】シミュレータ３２の構成の一例を説明する構成図。
【図３】第１の実施形態の機能検証装置１による論理回路３２２の機能検証の具体的な手順を説明するフローチャート。
【図４】第２の実施形態に係わるシミュレータ３２´の構成の一例を説明する構成図。
【図５】パラメータテーブル３２７の一例を示す図。
【図６】第２の実施形態の機能検証装置１による論理回路３２２の機能検証の具体的な手順を説明するフローチャート。
【図７】シミュレーションの一時点におけるパラメータテーブル３２７の一例を示す図。
【図８】スティミュラスの範囲を変更する手順の一例を説明するフローチャート。
【発明を実施するための形態】
【００１０】
以下、図面を参照して実施形態を説明する。
【００１１】
（第１の実施形態）
まず、図１を参照して、本実施形態の半導体集積回路の機能検証装置の構成を説明する。図１は、第１の実施形態に係わる半導体集積回路の機能検証装置の構成の一例を説明する図である。
【００１２】
半導体集積回路の機能検証装置１は、各種ソフトウエアプログラムを実行する中央処理装置（以下、CPUという）２ａを有する本体装置２と、本体装置２と接続され各種ソフトウエアプログラム等を記憶する記憶部３と、本体装置２と接続された表示部４と有して構成されている。なお、図示しないが、ユーザが、各種プログラムを実行させるための指示を与えるための、キーボード、マウス等の入力装置が、本体装置２には接続されている。
【００１３】
記憶部３には、各種ソフトウエアプログラムとして、半導体集積回路、特に論理回路の機能検証を行うシミュレーションプログラム（以下、シミュレータという）３２が記憶されている。また、記憶部３には、シミュレータ３２を実行する際に用いられるテスト全体の構成が記述されているテストシナリオ３１も格納されている。本体装置２のCPU２ａは、記憶部３に記憶されたこれらのプログラム等を実行あるいは読み出すことができる。
【００１４】
次に、シミュレータ３２の構成について説明する。図２は、シミュレータ３２の構成の一例を説明する構成図である。
【００１５】
図２に示すように、シミュレータ３２は、テストシナリオ３１に従ってランダムなスティミュラスを生成するスティミュラス生成部３２１と、検証結果を判定する結果判定部３２３と、検証結果がＦａｉｌであった場合にＦａｉｌログ３４を生成させるＦａｉｌログ生成部３２６とを含む。なお、Ｆａｉｌログ３４には、Ｆａｉｌが発生したときのスティミュラスの内容（例えばどのアドレスに対してどんなコマンドを与えたのか、など）、出力値、出力値と期待値との相違もしくは期待値、シミュレーション時間など、Ｆａｉｌが発生したときの状況が識別できる情報が記述される。なお、Ｆａｉｌログ３４は表示部４に表示させたり紙などに印刷させたり他の記憶媒体にコピーさせたりすることが可能である。
【００１６】
また、シミュレータ３２は、シミュレーションの任意のタイミングにおける論理回路３２２内の全ての信号・レジスタ・記憶素子の値（以下、論理回路状態情報と示す）を論理回路状態情報記憶部３３に保存させる状態ダンプ部３２４と、論理回路状態情報記憶部３３に保存されている論理回路状態情報を論理回路３２２にロードさせる状態ロード部３２５とを含む。
【００１７】
次に、本実施形態における半導体集積回路の機能検証装置１の動作について説明する。図３は、第１の実施形態の機能検証装置１による論理回路３２２の機能検証の具体的な手順を説明するフローチャートである。ここでは、例えばＲＴＬで記述された論理回路３２２のランダム機能検証を行う場合を一例にあげて説明する。
【００１８】
まず、ステップＳ１において、テストシナリオ３１をシミュレータ３２のスティミュラス生成部３２１に読み込む。スティミュラス生成部３２１は、読み込まれたテストシナリオ３１に従ってランダムなスティミュラスを生成する（ステップＳ２）。スティミュラスを生成すると、スティミュラス生成部３２１は状態ダンプ部３２４に対して論理回路３２２の状態（論理回路状態情報）をダンプするよう状態ダンプ部３２４に対して指示する。
【００１９】
状態ダンプ部３２４は、スティミュラス生成部３２１からのダンプ指示を受信すると、その時点における論理回路３２２の論理回路状態情報を論理回路状態情報記憶部３３にダンプする（ステップＳ３）。
【００２０】
次に、ステップＳ２で生成されたスティミュラスが、スティミュラス生成部３２１から論理回路３２２と結果判定部３２３とに入力される（ステップＳ４）。スティミュラスの内容に従って論理回路３２２が動作し、結果判定部３２３に出力値が送信される。結果判定部３２３では、論理回路３２２からの出力値と、スティミュラス生成部３２１から送信されたスティミュラスから生成された期待値とが比較され、検証結果がＰａｓｓであるかＦａｉｌであるかが判定される（ステップＳ５）。
【００２１】
ステップＳ６において、論理回路３２２からの出力値が期待値と異なる、すなわち検証結果がＦａｉｌであると判定された場合、ステップＳ７へ進む。ステップＳ７において、結果判定部３２３はＦａｉｌログ生成部３２６に対してＦａｉｌログ３４の生成を指示する。Ｆａｉｌログ生成部３２６は、Ｆａｉｌが発生したときの状況が識別できる情報（Ｆａｉｌが発生したときのスティミュラスの内容（どのアドレスに対してどんなコマンドを与えたのか）、出力値、期待値もしくは出力値と期待値との相違、シミュレーション時間など）をＦａｉｌログ３４に記述する。
【００２２】
次にステップＳ８に進み、結果判定部３２３は状態ロード部３２５に対して論理回路状態情報のロードを指示する。状態ロード部３２５は、論理回路状態情報記憶部３３に記憶されている論理回路状態情報を論理回路３２２にロードする。すなわち、この手順によって、論理回路３２２の状態がそのＦａｉｌが発生する原因となったスティミュラスが入力される前の状態にもどされる。
【００２３】
なお、ステップＳ６において、論理回路３２２からの出力値が期待値と等しい、すなわち検証結果がＰａｓｓであると判定された場合、Ｆａｉｌログ３４の生成（ステップＳ７）と論理回路状態情報のロード（ステップＳ８）とは実行されずにステップＳ９に進む。
【００２４】
テストシナリオ３１に基づき生成されるスティミュラスのうち未実行のものがある場合（ステップＳ９、Ｎｏ）、ステップＳ２に戻り、スティミュラス生成部３２１において未実行の新しいスティミュラスが生成される。生成された新しいスティミュラスを用い、上述したステップＳ３からステップＳ８の手順が実行されて、論理回路３２２の機能検証が継続的に実行される。
【００２５】
一方、テストシナリオ３１に基づき生成される全てのスティミュラスが実行済みである場合、論理回路３２２の検証を終了する（ステップＳ９、Ｙｅｓ）。
【００２６】
このように、本実施形態においては、スティミュラスの実行結果がＦａｉｌであっても、論理回路３２２の状態を該スティミュラスが入力される前の状態に戻してシミュレーションを継続実行させる。従って、一度のシミュレーションで、発生確率が高いバグだけでなく発生確率の低いその他のバグまで探索及び検出することができる。また、Ｆａｉｌログ３４にＦａｉｌが発生したときの状況が識別できる情報が記述されているので、Ｆａｉｌログ３４を解析することで重要度の高いバグを識別したり修正方法を検討したりすることが可能となる。
【００２７】
従来は、バグが発見される都度シミュレーションが停止され、発見されたバグを修正してから再度シミュレーションを再開する必要があった。このため、発見確率は低いが重要度の高いバグ（論理回路の重要な部分の構造・設計に大きな変更が必要となるようなバグ）が存在する場合には、このようなバグを発見する以前に論理回路に施した、発生確率が高いバグに起因する修正が無駄になってしまっていた。しかしながら、本実施形態においては一度のシミュレーションで種々のバグを検出することができ、重要度の高いバグから修正を行うことができるため、開発期間や開発コストを低減することができる。
【００２８】
（第２の実施形態）
上述した第１の実施形態の半導体集積回路の機能検証装置は、与えられたテストシナリオ３１に従って生成される全てのスティミュラスについてシミュレーションを実行しているが、本実施形態においてはシミュレーションの途中で実行結果を解析し、生成するスティミュラスの範囲を自動的に更新していく点が異なっている。第１の実施形態の構成要素と同じ構成要素は、同じ符号を付して説明は省略する。
【００２９】
図４は、第２の実施形態に係わるシミュレータ３２´の構成の一例を説明する構成図である。シミュレータ３２´はテストシナリオ３１から入力される情報と、結果判定部３２３´から入力される検証結果とに基づきスティミュラスの生成を制御するスティミュラス制御部３２０を備えている。
【００３０】
スティミュラス制御部３２０では、読み込まれたテストシナリオ３１に従って、制御の対象となる１種類以上のパラメータと、それぞれのパラメータがとりうる値とが決定される。なお、パラメータとはスティミュラスを構成する要素であり、具体的には例えばバスオペレーションなどのコマンド、アドレス、発生のタイミングなどである。また、個々のパラメータを要素とするマトリクスが生成され、パラメータテーブル３２７として保持される。パラメータテーブル３２７は、スティミュラス制御部３２０からアクセスされ、検証結果を分析してスティミュラスの生成範囲を決定するために用いられる。
【００３１】
図５はパラメータテーブル３２７の一例を示す図である。図５には、パラメータが２種類の場合に生成される２次元のパラメータテーブル３２７の一例を示している。図５において、行方向に配置されているパラメータＡはバスオペレーションのコマンドであり、“１”は“Ｒｅａｄ”、“２”は“Ｗｒｉｔｅ”、…と、各数字は個別のコマンドに対応している。また、図５において列方向に配置されているパラメータＢはアドレスを示している。
【００３２】
図５の一例においては、パラメータＢであるアドレスが０〜９９、１００〜１９９、２００〜２９９、３００〜３９９、４００〜４９９の５つの範囲に分割されている。一方、パラメータＡには４つのコマンドが用いられている。従って、パラメータＡの各コマンドと、パラメータＢの分割されたそれぞれの範囲との組み合わせは４×５＝２０通りとなる。
【００３３】
なお、パラメータテーブル３２７の一部のセルに書きこまれている“Ｐａｓs”または“Ｆａｉｌ”は、シミュレーション途中のある時点での、各スティミュラスの検証結果を示している。例えば、一行目かつ一列目のセル（一番左上のセル、以下、セル（１，１）と示す）の“Ｐａｓｓ”は、パラメータＡが“１”、かつパラメータＢが“０〜９９”の範囲を条件として生成されたスティミュラスを入力した場合の論理回路３２２の検証結果がＰａｓｓであることを示している。
【００３４】
空欄のセルは検証が未実行であることを示している。例えば、セル（１，５）（一番右上のセル）は、パラメータＡが“１”、かつパラメータＢが“４００〜４９９”の範囲については論理回路３２２の検証が未実施であることを示している。
【００３５】
なお、パラメータテーブル３２７は、図５に示すようにパラメータが２種類の場合は２次元のテーブル形式で表現されるが、パラメータが３種類の場合は３次元、ｎ種類の場合はｎ次元のマトリクスで表現される。また、パラメータテーブル３２７は、スティミュラス制御部３２０からのみアクセス可能になされているだけでなく、モニタなどに表示させたり印刷させたりするなどその内容が可視可能になされてもよい。
【００３６】
次に、本実施形態における半導体集積回路の機能検証装置１の動作について説明する。図６は、第２実施形態の機能検証装置１による論理回路３２２の機能検証の具体的な手順を説明するフローチャートである。なお、図３で示す第１の実施形態の手順と同様の手順にはステップ番号を付している。
【００３７】
まず、ステップＳ１´において、テストシナリオ３１がシミュレータ３２のスティミュラス制御部３２０に読み込まれる。スティミュラス制御部３２０では、読み込まれたテストシナリオ３１に従って、制御の対象となる１種類以上のパラメータと、それぞれのパラメータがとりうる値とが決定される。また、個々のパラメータを要素とするマトリクスが生成され、パラメータテーブル３２７として保持される。
【００３８】
次に、ステップＳ２´に進み、スティミュラス制御部３２０からスティミュラス生成部３２１´に対してスティミュラスの生成指示が入力される。スティミュラス生成部３２１´では指示内容に従ってパラメータが決定され、スティミュラスが生成される。続いて、論理回路３２２の状態（論理回路状態情報）が論理回路状態情報記憶部３３にダンプされる（ステップＳ３）。
【００３９】
次に、ステップＳ２´で生成されたスティミュラスが、スティミュラス生成部３２１´から論理回路３２２と結果判定部３２３´とに入力される（ステップＳ４）。スティミュラスの内容に従って論理回路３２２の信号、レジスタ、記憶素子の値が変化し、結果判定部３２３´に出力値が送信される。結果判定部３２３´では、論理回路３２２からの出力値と、スティミュラス生成部３２１´から送信されたスティミュラスから生成された期待値とが比較され、検証結果がＰａｓｓであるかＦａｉｌであるかが判定される（ステップＳ５）。
【００４０】
結果判定部３２３´での判定結果とスティミュラスの内容とはスティミュラス制御部３２０に出力され、パラメータテーブル３２７の該当するセルに書きこまれる（ステップＳ５１）。なお、検証結果が書き込まれるセルは、ステップＳ２´において、スティミュラス生成部３２１´で生成されたスティミュラスのパラメータの値に対応するセルとなる。例えば、ステップＳ２´において、スティミュラス生成部３２１でパラメータＡの値が“２”、パラメータＢの値が“１５０”と決定され、スティミュラスが生成された場合、図５のパラメータテーブル３２７では、セル（２，２に検証結果が書き込まれる。（図５において、パラメータＡの“２”は２行目に該当し、パラメータＢの“１５０”は“１００〜１９９”に含まれるので２列目に該当する。）例えば判定結果がＰａｓｓの場合、セル（２，２）には“Ｐａｓｓ”と書き込まれる。
【００４１】
続くステップＳ６において、論理回路３２２からの出力値が期待値と異なる、すなわち検証結果がＦａｉｌであると判定された場合、ステップＳ７へ進む。ステップＳ７において、結果判定部３２３´はＦａｉｌログ生成部３２６に対してＦａｉｌログの生成を指示する。Ｆａｉｌログ生成部３２６は、Ｆａｉｌが発生したときの状況が識別できる情報をＦａｉｌログ３４に記載する。また、結果判定部３２３´は状態ロード部３２５に対して論理回路状態情報のロードを指示する。状態ロード部３２５は、論理回路状態情報記憶部３３に記憶されている論理回路状態情報を論理回路３２２にロードする。すなわち、この手順によって、論理回路３２２の状態がそのＦａｉｌが発生する原因となったスティミュラスが入力される前の状態にもどされる。
【００４２】
次に、ステップＳ８１に進み、パラメータテーブル３２７に入力されている“Ｆａｉｌ”の個数と、予め設定されている閾値とが比較される。なお、閾値は次のステップにおけるスティミュラスの生成範囲の変更を行うトリガーとして設定される値であり、機能検証に先んじてスティミュラス制御部３２０に予め設定されている。閾値は固定値であってもよいし、必要に応じて外部から書き換えを行ってもよい。
【００４３】
ステップＳ８１において、“Ｆａｉｌ”の個数が閾値と等しいと判定された場合、ステップＳ８２に進み、以降に生成するスティミュラスの範囲（スティミュラスの生成に用いる各パラメータの値がとりうる値の範囲）を変更する。
【００４４】
スティミュラスの範囲を変更する方法について、図７及び図８を用いて説明する。図７は、シミュレーションの一時点におけるパラメータテーブル３２７の一例を示す図である。また、図８はスティミュラスの範囲を変更する手順の一例を説明するフローチャートである。すなわち、図８に示す手順は、図６のフローチャートのステップＳ８２における具体的な手順の一例を示している。
【００４５】
図７は、１０個のスティミュラスが生成されて検証が行われ、結果が書き込まれた時点におけるパラメータテーブル３２７を示している。１０個のスティミュラスのうち、７個のスティミュラスによる検証結果がＰａｓｓであり、３個のスティミュラスによる検証結果がＦａｉｌである。
【００４６】
パラメータＡが“２”、パラメータＢが“３５０”の条件で生成されたスティミュラスにより検証を行った結果、３回目のＦａｉｌが発生したとする。すなわち、セル（２，４）に書きこまれた“Ｆａｉｌ”が、パラメータテーブル３２７に書きこまれた３個目の“Ｆａｉｌ”であるとする。閾値が“３”である場合、このセル（２，４）がスティミュラス生成範囲を変更するための原点セルＣｏとなる（ステップＳ８２１）。
【００４７】
この原点セルＣｏを境界として、パラメータＡとパラメータＢのそれぞれの範囲を分割する（ステップＳ８２２）。すなわち、パラメータＡについては“１”“２”と“３”“４”とに分割される。また、パラメータＢについては“０〜９９”“１００〜１９９”“２００〜２９９”の範囲と“３００〜３９９”“４００〜４９９”の範囲とに分割される。
【００４８】
パラメータＡとパラメータＢとがそれぞれ２分割されることにより、パラメータテーブル３２７は２２＝４つのエリアに分割される。すなわち、パラメータＡが“１”または“２”であり、パラメータＢが“０〜９９”“１００〜１９９”“２００〜２９９”であるエリア（エリアＡ）、パラメータＡが“３”または“４”であり、パラメータＢが“０〜９９”“１００〜１９９”“２００〜２９９”であるエリア（エリアＢ）、パラメータＡが“１”または“２”であり、パラメータＢが““３００〜３９９”“４００〜４９９”であるエリア（エリアＣ）、パラメータＡが“３”または“４”であり、パラメータＢが““３００〜３９９”“４００〜４９９”であるエリア（エリアＤ）の４つのエリアに分割される。
【００４９】
なお、図７に示す一例ではパラメータが２個の場合について説明しているが、ｎ個のパラメータを持つ場合、パラメータテーブル３２７は２ｎ個のエリアに分割される。
【００５０】
分割された各エリアについて、エリア内のセルに書きこまれた“Ｐａｓｓ”と“Ｆａｉｌ”の個数、及び書き込みがないセルの個数をそれぞれカウントする（ステップＳ８２３）。例えばエリアＡは、“Ｐａｓｓ”が３個、“Ｆａｉｌ”が０個、未記入が３個となり、エリアＢは、“Ｐａｓｓ”が１個、“Ｆａｉｌ”が０個、未記入が５個となる。また、エリアＣは、“Ｐａｓｓ”が１個、“Ｆａｉｌ”が２個、未記入が１個となり、エリアＤは、“Ｐａｓｓ”が２個、“Ｆａｉｌ”が１個、未記入が１個となる。
【００５１】
上記の結果をふまえ、それぞれのエリアを、タイプＡ（“Ｐａｓｓ”の結果が多いエリア）、タイプＢ（“Ｆａｉｌ”の結果が多いエリア）、タイプＣ（未記入が多く検証が進んでいないエリア）、の３つのタイプに分類する（ステップＳ８２４）。図７に示す例の場合、エリアＡとエリアＤはタイプＡ、エリアＢはタイプＣ、エリアＣはタイプＢに分類される。
【００５２】
最後に、これ以降の機能検証の目的に応じて対象とするタイプを選択し、同タイプに分類されたエリアをスティミュラスの生成範囲として変更する（ステップＳ８２５）。例えば、それぞれのタイプを限定的に選択することによって、以下のような効果が期待される。
【００５３】
すなわち、タイプＡのエリアを限定的に選択して以降の機能検証を行えば、まだ検出されていない発生確率の低いバグを効率的に探索できる可能性が大きくなる。また、タイプＢのエリアを限定的に選択すれば、すでに検出されている発生確率の高いバグの周辺を詳細に検証することができる。さらに、タイプＣのエリアを限定的に選択すれば、検証空間の全領域をまんべんなく検証できる。
【００５４】
なお、タイプの選択は、機能検証に先だって予め設定してもよいし、図７に示す、機能検証の途中結果が記入されたパラメータテーブル３２７を参照しながら都度選択してもよい。また、場合によっては複数のタイプを選択してもよい。
【００５５】
ステップＳ８１において、“Ｆａｉｌ”の個数が閾値と等しくないと判定された場合、ステップＳ８２の手順は実行されずにステップＳ９´に進む。すなわち、スティミュラス生成範囲は変更せずに、以降の機能検証においてもそれまでの検証と同様の範囲を対象としてスティミュラスを生成する。
【００５６】
なお、ステップＳ６において、論理回路３２２からの出力値が期待値と等しい、すなわち検証結果がＰａｓｓであると判定された場合、Ｆａｉｌログの生成（ステップＳ７）からスティミュラス生成範囲の変更（ステップＳ８２）までの手順は実行されずにステップＳ９´に進む。
【００５７】
テストシナリオ３１に基づき生成されるスティミュラスのうち未実行のものがある場合（ステップＳ９´、Ｎｏ）、ステップＳ２´に戻り、スティミュラス生成部３２１において未実行の新しいスティミュラスが生成される。なお、ステップＳ８２においてスティミュラスの生成範囲が変更されている場合、ステップＳ９´では同変更された範囲における全てのスティミュラスが実行されたか否かが判定される。また、ステップＳ８２においてスティミュラスの生成範囲が変更されている場合、ステップＳ２´では変更された場合においてのみスティミュラスの生成が行われる。ステップＳ２´で生成された新しいスティミュラスを用い、上述したステップＳ３からステップＳ８２の手順が実行されて論理回路３２２の機能検証が継続的に実行される。
【００５８】
一方、テストシナリオ３１に基づき生成されるスティミュラスが実行済みである場合、論理回路３２２の検証を終了する（ステップＳ９´、Ｙｅｓ）。
【００５９】
このように、本実施形態においては、機能検証の過程において途中結果（“Ｐａｓｓ”“Ｆａｉｌ”の分布や、検証実施範囲の偏り度合い）を参照し、スティミュラスの生成範囲を変更し、特定のエリアに限定して以降の検証を行うので、目的に応じた効率的なバグの検出を行うことができ、開発期間やコストを更に低減することができる。
【００６０】
なお、上述した実施形態においては、“Ｆａｉｌ”が指定した個数検出された時点でスティミュラスの生成範囲を見直している（限定している）が、例えばスティミュラスの生成個数が特定の個数に達した場合に見直すようにしてもよい。また、見直し（限定）の回数も１回でなく、例えばスティミュラスの生成個数が１０の倍数に達した時点など、複数回行うようにしてもよい。
【００６１】
また、図５に示す例では、パラメータＢのとりうる値の範囲（０〜４９９）を５つの領域に分割してスティミュラスの生成や検証結果の書き込みを行っているが、検証の目的や精度などに応じて自由に変えることができる。従って、これ以上の領域（例えば１０個の領域など）に分割してもよいし、これ以下の領域（例えば４つの領域など）に分割してもよい。
【００６２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として例示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６３】
３１…テストシナリオ、３２…シミュレータ、３３…論理回路状態情報記憶部、３４…Ｆａｉｌログ、３２１…スティミュラス生成部、３２２…論理回路、３２３…結果判定部、３２４…状態ダンプ部、３２５…状態ロード部、３２６…Ｆａｉｌログ生成部、
【図１】
2013029938.tif 000003
【図２】
2013029938.tif 000004
【図３】
2013029938.tif 000005
【図４】
2013029938.tif 000006
【図５】
2013029938.tif 000007
【図６】
2013029938.tif 000008
【図７】
2013029938.tif 000009
【図８】
2013029938.tif 000010