(57)【要約】【課題】高品質な検証処理を効率的に実行させること。【解決手段】検証支援装置では、ステップＳ１０１〜Ｓ１０９によって従来技術と同様に、設定されたＳｅｅｄ番号に応じて発生させたランダムなテストパターンによる通常のシミュレーションを実行させる。その後、未検証箇所を抽出し、これらの条件についての検証結果を得るため、ステップＳ１１０〜Ｓ１１９の処理を利用して、検証したい条件と類似する条件を検証した場合のシミュレーション結果を流用して、効率的に所望する条件の検証結果を得る。【選択図】図１
2010267209.tif 000002
【特許請求の範囲】
【請求項１】
対象回路のシミュレーションを制御するコンピュータを、
前記対象回路において検証対象となる全ての条件を表したカバレッジ情報を取得する取得手段、
前記シミュレーションの実行内容の違いを識別する識別番号を設定する設定手段、
前記設定手段によって設定された識別番号ごとに前記対象回路に入力するテストパターンを任意回数生成する生成手段、
前記生成手段によって生成されたテストパターンごとに前記シミュレーションを実行させる制御手段、
前記シミュレーションが実行された場合、当該シミュレーションによって検証された条件を前記取得手段によって取得されたカバレッジ情報の中から特定する特定手段、
前記特定手段によって前記カバレッジ情報の中からいずれかの条件が特定された場合に、前記カバレッジ情報に、特定された条件を検証したシミュレーションの識別番号と、検証済みを表すフラグとを関連付ける関連付け手段、
として機能させることを特徴とする検証支援プログラム。
【請求項２】
前記コンピュータを、さらに、
前記カバレッジ情報への前記フラグの関連付けの有無に応じて、前記対象回路において検証対象となる全ての条件を網羅したか否かを判断する判断手段として機能させ、
前記制御手段は、前記判断手段による判断結果に応じて、前記シミュレーションを終了させることを特徴とする請求項１に記載の検証支援プログラム。
【請求項３】
前記コンピュータを、さらに、
前記判断手段によって検証対象となる全ての条件を網羅していないと判断された場合、前記カバレッジ情報の中から前記フラグが関連付けられていない条件を抽出する抽出手段と、
前記抽出手段によって抽出された条件を未検証の条件として出力する出力手段と、
して機能させることを特徴とする請求項２に記載の検証支援プログラム。
【請求項４】
対象回路のシミュレーションを実行する実行手段と、
前記対象回路において検証対象となる全ての条件を表したカバレッジ情報を取得する取得手段と、
前記シミュレーションの実行内容の違いを識別する識別番号を設定する設定手段と、
前記設定手段によって設定された識別番号ごとに前記対象回路に入力するテストパターンを任意回数生成する生成手段と、
前記実行手段を制御して、前記生成手段によって生成されたテストパターンごとにシミュレーションを実行させる制御手段と、
前記シミュレーションが実行された場合、当該シミュレーションによって検証された条件を前記取得手段によって取得されたカバレッジ情報の中から特定する特定手段と、
前記特定手段によって前記カバレッジ情報の中からいずれかの条件が特定された場合に、前記カバレッジ情報に、特定された条件を検証したシミュレーションの識別番号と、検証済みを表すフラグとを関連付ける関連付け手段と、
を備えることを特徴とする検証支援装置。
【請求項５】
対象回路のシミュレーションを制御するコンピュータが、
前記対象回路において検証対象となる全ての条件を表したカバレッジ情報を取得する取得工程と、
前記シミュレーションの実行内容の違いを識別する識別番号を設定する設定工程と、
前記設定工程によって設定された識別番号ごとに前記対象回路に入力するテストパターンを任意回数生成する生成工程と、
前記生成工程によって生成されたテストパターンごとに前記シミュレーションを実行させる実行工程と、
前記シミュレーションが実行された場合、当該シミュレーションによって検証された条件を前記取得工程によって取得されたカバレッジ情報の中から特定する特定工程と、
前記特定工程によって前記カバレッジ情報の中からいずれかの条件が特定された場合に、前記カバレッジ情報に、特定された条件を検証したシミュレーションの識別番号と、検証済みを表すフラグとを関連付ける関連付け工程と、
を実行することを特徴とする検証支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示技術は、検証回路のシミュレーションを制御して検証処理を支援する検証支援プログラム、検証支援装置および検証支援方法に関する。
【背景技術】
【０００２】
従来より、半導体集積回路など新規の回路を設計し、実機の製造に移行する前段には、設計した回路が正しく動作するかを検証する検証工程が必要となる。検証工程の一つとして、シミュレータを利用することにより、設計した回路をソフトウェア的に実現して回路の動作を検証する手法がある。具体的には、検証用のテストシナリオに対して、ランダムに発生させたテストパターンの値を代入した場合の回路の動作をシミュレーションする。そして、シミュレーションの実行結果が適切であるかを検証することによって、設計内容にバグがないか、また、設計内容を改良できるかといったフィードバックが可能となる。
【０００３】
検証工程において、高品質な検証を実現するには、検証範囲を漏らすことなく検証しなければならない。検証範囲とは、検証対象となる項目（対象素子の入出力値や振る舞い）が取り得る全ての条件である。そして、条件の設定は検証の目的によっても異なる。したがって、通常の検証の際には、検証対象となる回路の構成や検証目的に応じて検証範囲を抽出したカバレッジ情報を用意する。
【０００４】
検証者は、カバレッジ情報に挙げられた条件における検証結果を得るまで検証を繰り返すことによって、検証漏れのない高品質な検証を実現することができる。また、ランダムなテストパターンの生成を繰り返しても検証されない条件が発生する場合には、カバレッジ情報を網羅できるようにテストシナリオ自体を調整する必要がある。
【０００５】
図２８は、従来の検証支援処理の手順を示すフローチャートである。カバレッジ情報を用いた検証支援処理は、以下に説明するような手順でおこなわれる。図２８のように、検証支援装置では、まず、シミュレーションの実行内容を区別するために設定される識別番号として、Ｓｅｅｄ番号を設定し（ステップＳ２８０１）、設定されたＳｅｅｄ番号のシミュレーションを開始する（ステップＳ２８０２）。まず、テストパターンを生成し（ステップＳ２８０３）、生成パターンを入力した検証結果としてカバレッジを取得する（ステップＳ２８０４）。
【０００６】
その後、シミュレーション終了条件を満たすか否かを判断して（ステップＳ２８０５）、シミュレーション終了条件を満たすまで、ステップＳ２８０３〜Ｓ２８０５のシミュレーションを繰り返す（ステップＳ２８０５：Ｎｏのループ）。シミュレーション終了条件を満たすと（ステップＳ２８０５：Ｙｅｓ）、シミュレーションを終了させ（ステップＳ２８０６）、検証状態を表すカバレッジが未取得の箇所を人手（検証者など）によって確認する（ステップＳ２８０７）。
【０００７】
ステップＳ２８０７の確認処理によって、カバレッジの未取得箇所があったか否かを判断し（ステップＳ２８０８）、未取得箇所があると判断された場合ステップＳ２８０１の処理に戻り検証処理を継続する（ステップＳ２８０８：Ｙｅｓのループ）。その後、カバレッジの未取得箇所がないと判断されると（ステップＳ２８０８：Ｎｏ）、検証箇所を全て検証したとして、一連の検証処理を終了する（たとえば、下記特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００６−３２３８５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、従来技術の場合、検証対象となる回路の構成や、テストシナリオの内容によっては、検証効率にばらつきが生じてしまう恐れがある。従来技術では、図２８にて説明したように、ランダムに発生させたテストパターンを利用してテストシナリオのシミュレーションを実行する。すなわち、検証範囲として挙げられた条件のうち、シミュレーションを繰り返してもなかなか検証されない条件（検証内容の未取得箇所）も発生してしまう。一方、高品質な検証を実現するためには、全ての条件を検証しなければならない。
【００１０】
未取得箇所の発生を解消するため、従来技術では２種類の対策が講じられている。１つ目の対策としては、未取得箇所に関しては、ランダムに発生させたテストパターンではなく、必ず検証したい条件のシミュレーションが実行されるような固定のテストパターンを用意して検証結果を得る手法がある。しかしながら、固定のテストパターンを利用すると、ランダムに発生して値を利用する場合と異なり、検証者の想定していない動作については検証されないことになる。結果として、ランダムなテストパターンを利用した検証と比較して、検証の品質が著しく低下してしまうという問題があった。
【００１１】
２つ目の対策としては、未取得箇所がなくなるまで、ランダムに発生させたテストパターンを利用したシミュレーションを繰り返す手法がある。シミュレーションを繰り返す手法の場合、全ての検証範囲について、ランダムに発生させたテストパターンを利用して検証するため、高品質な検証結が得られる。しかしながら、未取得箇所の発生数や、発生箇所は検証対象となる回路や利用するテストパターンによっても大きく異なることが知られている。したがって、検証が完了するまでの処理量や処理時間を予測できず、場合によっては、膨大な処理時間を費やさなければならないという問題があった。
【００１２】
本開示技術は、上述した従来技術による問題点を解消するため、高品質な検証処理を効率的に実行できる検証支援プログラム、検証支援装置および検証支援方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決し、目的を達成するため、本開示技術は、対象回路のシミュレーションを制御するコンピュータにおいて、前記対象回路において検証対象となる全ての条件を表したカバレッジ情報を取得する処理と、前記シミュレーションの実行内容の違いを識別する識別番号を設定する処理と、設定された識別番号ごとに前記対象回路に入力するテストパターンを任意回数生成する処理と、生成されたテストパターンごとに前記シミュレーションを実行させる処理と、前記シミュレーションが実行された場合、当該シミュレーションによって検証された条件を取得されたカバレッジ情報の中から特定する処理と、前記カバレッジ情報の中からいずれかの条件が特定された場合に、前記カバレッジ情報に、特定された条件を検証したシミュレーションの識別番号と、検証済みを表すフラグとを関連付ける処理と、を含むことを要件とする。
【発明の効果】
【００１４】
本検証支援プログラム、検証支援装置および検証支援方法によれば、高品質な検証処理を効率的に実行できるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】本実施の形態にかかる検証支援処理の一実施例を示す説明図である。
【図２】検証支援装置のハードウェア構成を示すブロック図である。
【図３】検証支援装置の機能的構成を示すブロック図である。
【図４】検証環境の構成を示すブロック図である。
【図５】検証対象の機能を示す説明図である。
【図６】検証対象への入力パターンを示すタイミングチャートである。
【図７】検証対象となる条件を表すカバレッジ情報を示す図表である。
【図８】カバレッジカウントが関連付けられたカバレッジ情報を示す図表である。
【図９】ＣＰＵのテストシナリオの手順を示すフローチャートである。
【図１０】対向モデルのテストシナリオの手順を示すフローチャートである。
【図１１−１】テストパターン動作の生成例を示す図表（その１）である。
【図１１−２】テストパターン動作の生成例を示す図表（その２）である。
【図１１−３】テストパターン動作の生成例を示す図表（その３）である。
【図１２】従来の乱数生成手順を示す説明図である。
【図１３】本実施の形態における乱数生成手順を示す説明図である。
【図１４】検証結果の管理フォーマットを示す説明図である。
【図１５】データベース１への格納例を示す説明図である。
【図１６】未検証箇所の特定処理を示す説明図である。
【図１７】検証対象箇所の特定例を示す図表である。
【図１８】データベース１からの取得情報を示す説明図である。
【図１９】取得情報の対応箇所を示す図表である。
【図２０】検証済み箇所の取得処理を示す説明図である。
【図２１】項目Ａの要素切り替え箇所の算出処理を示す説明図である。
【図２２】項目Ｂの要素切り替え箇所の算出処理を示す説明図である。
【図２３】データベース２の構成を示す説明図である。
【図２４】１レコードのフォーマットを示す説明図である。
【図２５】Ｓｅｅｄ番号を切り替えた場合の入力パターンを示すタイミングチャートである。
【図２６−１】Ｓｅｅｄ番号を切り替えた場合のテストパターン動作の生成例を示す図表（その１）である。
【図２６−２】Ｓｅｅｄ番号を切り替えた場合のテストパターン動作の生成例を示す図表（その２）である。
【図２６−３】Ｓｅｅｄ番号を切り替えた場合のテストパターン動作の生成例を示す図表（その３）である。
【図２７】Ｓｅｅｄ番号を切り替えた場合のカバレッジカウントが関連付けられたカバレッジ情報を示す図表である。
【図２８】従来の検証支援処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下に添付図面を参照して、本検証支援プログラム、検証支援装置および検証支援方法の好適な実施の形態を詳細に説明する。
【００１７】
（検証支援処理の基本処理）
図１は、本実施の形態にかかる検証支援処理の一実施例を示す説明図である。本実施の形態にかかる検証支援処理では、情報処理装置などによって実現した検証支援装置によって、図１の示した処理を実行することによって、対象回路の検証範囲として設定された全ての条件における検証結果を得ることができる。
【００１８】
また、本実施の形態の場合、検証範囲として挙げられた条件のうち、検証内容（カバレッジ）が取得済みの条件と未取得の条件とを把握して、効率的に検証処理を実行させるために、検証状況を管理するデータベース１，２が用意されている。したがって、以下に、図１に示したフローチャートによって実行される各処理や、データベース１，２の役割について順に説明する。
【００１９】
＜通常のシミュレーション：ステップＳ１０１〜Ｓ１０９の処理＞
まず図１のフローチャートにおいて、ステップＳ１０１〜Ｓ１０９によって実行されるのは、従来技術と同様に、設定されたＳｅｅｄ番号に応じて発生させたランダムなテストパターンによる通常のシミュレーションである。しかしながら、従来技術と異なり、本実施の形態の場合、１回のシミュレーションが実行された場合に、当該シミュレーションによる検証内容がデータベース１に格納される。また、本実施の形態の場合、カバレッジ情報を参照することによって、未検証の条件があるか否かを自動的に確認することができる。
【００２０】
具体的に説明すると、検証支援装置は、まず、識別番号として、Ｓｅｅｄ番号を設定し（ステップＳ１０１）、設定されたＳｅｅｄ番号のシミュレーションを開始する（ステップＳ１０２）。Ｓｅｅｄ番号は、シミュレーションの実行内容の違いを識別するために設定される。そして、検証支援装置は、設定されたＳｅｅｄ番号に応じてテストパターンを生成する（ステップＳ１０３）。
【００２１】
ステップＳ１０３においてテストパターンは、疑似乱数を生成させる「ｒａｎｄ（変数Ｘ）関数」によって発生させたランダム値を用いて生成される。ランダム値を発生させる際、変数ＸにはＳｅｅｄ番号が入力される。ここでは、ランダム値の発生に「ｒａｎｄ（変数Ｘ）関数」による線形合成法を採用する。すなわち、変数Ｘの値に応じて同じランダム値が生成されように設定する。したがって、Ｓｅｅｄ番号が同一であれば同じランダム値が生成されるような再現性のある疑似乱数生成となる。
【００２２】
検証支援装置は、生成されたテストパターンを対象回路に入力した場合の検証結果としてカバレッジを取得し（ステップＳ１０４）、今回取得したカバレッジについて、Ｓｅｅｄ番号、カバレッジ取得箇所およびランダム生成回数を記録する（ステップＳ１０５）。また、ステップＳ１０５にて記録された情報は、データベース１へ格納される。
【００２３】
その後、検証支援装置は、シミュレーション終了条件を満たすか否かを判断して（ステップＳ１０６）、シミュレーション終了条件を満たすまで、ステップＳ１０３〜Ｓ１０６の処理を繰り返す（ステップＳ１０６：Ｎｏのループ）。なお、ステップＳ１０６の判断基準となるシミュレーションの終了条件は、検証者によって適宜設定されるため一様ではない。具体的には、たとえば、シミュレーションの実行時間や実行回数が所定値を満たしたか否かといった条件が設定される。
【００２４】
検証支援装置は、ステップＳ１０６において、シミュレーション終了条件を満たしたと判断されると（ステップＳ１０６：Ｙｅｓ）、シミュレーションを終了させ（ステップＳ１０７）、検証範囲となる全カバレッジの項目が未取得であるか否かを判断する（ステップＳ１０８）。全カバレッジの項目が未取得であるとは、検証範囲となる条件が全く検証されていないことを意味する。たとえば、ステップＳ１０４において何らかのカバレッジが取得されたとしても、取得カバレッジが検証範囲に含まれていなければ、検証範囲のカバレッジは取得されていないものと判断される。
【００２５】
したがって、検証支援装置は、ステップＳ１０８において、全カバレッジの項目が未取得であると判断された場合には（ステップＳ１０８：Ｙｅｓ）、ステップＳ１０１の処理に戻り、あらたなシミュレーションを実行させるための処理に移行する。そして、ステップＳ１０８において、全カバレッジの項目が未取得ではないと判断された場合（ステップＳ１０８：Ｎｏ）、すなわち、少なくとも１項目以上のカバレッジが取得されていると判断された場合、検証支援装置は、つぎに、カバレッジの未取得箇所があるか否かを判断する（ステップＳ１０９）。
【００２６】
カバレッジの未取得箇所とは、検証範囲に含まれる全ての条件のうち、シミュレーションによる検証が済んでいない箇所を指す。カバレッジ未取得箇所がないと判断された場合（ステップＳ１０９：Ｎｏ）、検証支援装置は、そのまま一連の検証支援処理を終了する。すなわち、シミュレーション終了条件を満たすまで実行されたシミュレーションによって得られたカバレッジにより、検証範囲が全て網羅されたことになる。一方、カバレッジ未取得箇所があると判断された場合（ステップＳ１０９：Ｙｅｓ）、検証支援装置は、ステップＳ１１０の処理に移行して、未取得箇所を対象としたシミュレーションを実行させる。
【００２７】
以上説明したように、ステップＳ１０１〜Ｓ１０９の処理では、ステップＳ１０５において、カバレッジに関する情報を記録する以外は、図２８にて説明したような従来の検証支援処理と同様の手順が実行される。しかしながら、従来技術と異なり、ステップＳ１０５において記録されたカバレッジに関する情報を参照することによって、自動的にカバレッジ未取得箇所の有無を判断することができる（詳細な手順については後述する）。
【００２８】
＜未取得箇所を対象としたシミュレーション：ステップＳ１１０〜Ｓ１１９の処理＞
つぎに、ステップＳ１１０以降の処理について説明する。ステップＳ１１０以降の処理は、シミュレーション終了条件を満たすまでシミュレーションを実行したが、検証が済んでいないカバレッジがあることを意味する。本実施の形態では、検証が済んでいないカバレッジについての検証を効率的に実行させるため、シミュレーションの実行の際に利用するＳｅｅｄ番号を調整する。
【００２９】
まず、検証支援装置は、検証範囲を表すカバレッジ情報の中から取得できていないカバレッジの項目をデータベース（データベース１）から検索する（ステップＳ１１０）。そして、検証支援装置は、取得できていないカバレッジに近い条件のカバレッジ項目をデータベース（データベース２）から検索する（ステップＳ１１１）。
【００３０】
データベース２には、検証範囲を表す全条件（カバレッジ）についての構成内容（検証対象となる素子、各素子の設定値など）を表したカバレッジ表の構成情報が格納されている。ステップＳ１１１では、カバレッジ表の構成情報を参照して、ステップＳ１１０によって検索された未取得のカバレッジの構成内容と共通する項目が多いカバレッジ（取得済みのもの）を検索する。
【００３１】
そして、検証支援装置は、取得できていないカバレッジに近い条件のカバレッジを取得した際のＳｅｅｄ番号を設定する（ステップＳ１１２）。すなわち、ステップＳ１１２の処理では、ステップＳ１１１によって検索されたカバレッジが取得された際に設定されたＳｅｅｄ番号を再設定する。その後、検証支援装置は、再設定されたＳｅｅｄ番号のシミュレーションを開始する（ステップＳ１１３）。そして、検証支援装置は、再設定されたＳｅｅｄ番号に応じてテストパターンを生成する（ステップＳ１１４）。
【００３２】
さらに、検証支援装置は、シミュレーションの実行に応じたカバレッジを取得する（ステップＳ１１５）。カバレッジが取得されると検証支援装置は、今回取得したカバレッジについて、Ｓｅｅｄ番号、カバレッジ取得箇所およびランダム生成回数を記録する（ステップＳ１１６）。また、ステップＳ１１６にて記録された情報は、データベース１へ格納される。
【００３３】
その後、テストパターンの生成に伴うランダム生成（Ｓｅｅｄ番号に応じたランダム値の生成処理）回数がカバレッジ取得タイミングに達したか否かを判断する（ステップＳ１１７）。カバレッジ取得タイミングとは、ステップＳ１１１によって検索されたカバレッジ項目（取得されていないカバレッジに近い条件のカバレッジ項目）に応じて設定される。すなわち、検証したいカバレッジと同一のカバレッジ項目が取得される回数を超すとカバレッジ取得タイミングとなる。
【００３４】
たとえば、全１０回のランダム生成によって実行されたシミュレーションによって得られたカバレッジがあるとする。このカバレッジが未取得のカバレッジに近い条件と検索された場合、２つのカバレッジを構成する検証項目のうち、設定値が一致する項目を特定する。そして、取得されたカバレッジのうち、一致すると判断された項目が検証された、検証状況を特定する。ここでは一例として、１〜７回までのランダム生成によって実行されたシミュレーションによって得られたカバレッジ項目が、未取得のカバレッジと一致するとする。
【００３５】
すなわち、一致する項目までを検証するには、１〜７回目までのシミュレーションを再現すればよい。そして、その後、未検証のカバレッジの独自の項目について検証させるため、８回以降のシミュレーションは、シミュレーションの内容が変更されるような設定を施す（本実施の形態ではＳｅｅｄ番号を変更する）。以上のような例の場合、７回目をカバレッジ取得タイミングとする（詳細については後述する）。
【００３６】
そして、検証支援装置は、ステップＳ１１７において、カバレッジ取得タイミングに達するまでステップＳ１１４〜ステップＳ１１７の処理を繰り返す（ステップＳ１１７：Ｎｏのループ）。そして、カバレッジ取得タイミングに達すると（ステップＳ１１７：Ｙｅｓ）、検証支援装置は、Ｓｅｅｄ番号を変更して以降のシミュレーションを継続する（ステップＳ１１８）。
【００３７】
その後、検証支援装置は、シミュレーション終了条件を満たすか否かを判断して（ステップＳ１１９）、シミュレーション終了条件を満たすまで、ステップＳ１１４〜Ｓ１１９の処理を繰り返す（ステップＳ１１９：Ｎｏのループ）。また、ステップＳ１１９の判断基準となるシミュレーション終了条件は、ステップＳ１０６と同様に検証者によって適宜設定される。
【００３８】
検証支援装置は、ステップＳ１１９において、シミュレーション終了条件を満たしたと判断されると（ステップＳ１１９：Ｙｅｓ）、ステップＳ１０７の処理に移行しシミュレーションを終了させる。その後、ステップＳ１０８，Ｓ１０９の判断処理を経て、カバレッジの未取得箇所がなくなると（ステップＳ１０９：Ｎｏ）、一連の検証支援処理を終了する。
【００３９】
以上説明したように、ステップＳ１１０〜Ｓ１１９の処理では、ステップＳ１０１〜Ｓ１０９のシミュレーションによって得られなかったカバレッジ（未取得箇所）の取得を目指してシミュレーションを実行する。未取得箇所のカバレッジを効率的に取得するために、すでに取得済みのカバレッジのシミュレーションの実行例を利用する。
【００４０】
具体的に説明すると、たとえば、未取得箇所のカバレッジ２がカバレッジ項目［Ａ・Ｂ・Ｅ・Ｇ］によって構成されているとする。そして、カバレッジ２と条件の近いカバレッジ１（取得済みのカバレッジ）がカバレッジ項目［Ａ・Ｂ・Ｃ・Ｄ］によって構成されているとする。従来技術のように、何らかのシミュレーションを実行してカバレッジ２の検証結果を得ようとするには、むやみにランダムなテストパターンを利用するのでは非効率ある。したがって、２つのカバレッジの共通するカバレッジ項目Ａ・Ｂについては、カバレッジ１を取得した際のシミュレーションを実行すれば、確実に検証結果を得ることができる。
【００４１】
そして、カバレッジ１と同じＳｅｅｄ番号を利用したシミュレーションを繰り返してカバレッジ項目Ａ・Ｂの検証結果を得ると、途中でＳｅｅｄ番号を変更して、シミュレーションを継続する（当然のことながらＳｅｅｄ番号を変更しないとそのままカバレッジ項目Ｃ・Ｄの検証結果が取得されてしまう）。途中でＳｅｅｄ番号を変更してシミュレーションを実行することによって、カバレッジ項目Ｃ・Ｄとは異なる項目の検証結果を得る可能性が高くなる。
【００４２】
結果として、従来よりも効率的にカバレッジ項目Ｅ・Ｇの検証結果が得られる。すなわち、処理時間を大幅に短縮することができる。また、シミュレーションには、ランダムに生成したテストパターンを利用している。したがって、固定のテストパターンを利用することなく、ランダム検証が利用されているため、検証精度の高さは保持されている。
【００４３】
以下には、図１にて説明した検証支援処理を実現する検証支援装置の具体的な構成例について説明する。
【００４４】
（検証支援装置のハードウェア構成）
図２は、検証支援装置のハードウェア構成を示すブロック図である。図２において、検証支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０６と、入力デバイス２０７と、出力デバイス２０８と、を備えている。また、各構成部はバス２１０によってそれぞれ接続されている。
【００４５】
ここで、ＣＰＵ２０１は、検証支援装置１００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムや、本実施の形態にかかる検証支援処理を実現するための検証支援プログラムなどの各種プログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータの更新／参照を制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。なお、図２のハードウェア構成では、記録媒体として、磁気ディスク２０５を用いているが、光ディスクや、フラッシュメモリなど他の記録媒体を利用してもよい。
【００４６】
通信Ｉ／Ｆ２０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク（ＮＥＴ）２０９に接続され、ネットワーク２０９を介して他の検証支援装置１００やその他の外部装置に接続される。そして、通信Ｉ／Ｆ２０６は、ネットワーク２０９と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。通信Ｉ／Ｆ２０６の構成例としては、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００４７】
入力デバイス２０７は、検証支援装置１００に対しての外部からの入力を受け付ける。入力デバイス２０７としては、具体的には、キーボード、マウスなどが挙げられる。なお、図２に示したような検証支援装置１００によって、シミュレーションをおこなうアプリケーション２０１は、ＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域にあらかじめ格納されていてもよいが、入力デバイス２０７から入力されて、上述の記憶領域に格納されてもよい。
【００４８】
キーボードの場合、たとえば、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウスの場合、たとえば、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。また、ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００４９】
出力デバイス２０８は、検証支援装置１００に配置されたデータや、シミュレーションの実行結果などを出力する。出力デバイス２０８としては、具体的には、ディスプレイ、プリンタなどが挙げられる。
【００５０】
ディスプレイの場合、たとえば、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイとしてさらに、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。また、プリンタの場合、たとえば、画像データや文書データを印刷する。さらに、レーザプリンタやインクジェットプリンタを採用することができる。
【００５１】
（検証支援装置の機能的構成）
図３は、検証支援装置の機能的構成を示すブロック図である。図３のように、検証支援装置１００は、シミュレータ３００によって実行されるシミュレーションを制御する。したがって検証支援装置１００は、本実施の形態独自の機能部として取得部３０１と、設定部３０２と、生成部３０３と、制御部３０４と、特定部３０５と、関連付け部３０６と、判断部３０７と、抽出部３０８と、出力部３０９と、検索部３１０と、決定部３１１とを含んでいる。各機能部（取得部３０１〜決定部３１１）は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶された検証支援プログラムをＣＰＵ２０１に実行させることにより、または、通信Ｉ／Ｆ２０６により、その機能を実現する。
【００５２】
取得部３０１は、対象回路において検証対象となる全ての条件を表したカバレッジ情報を取得する機能を有する。カバレッジ情報は、検証範囲に含まれる全ての条件が列挙された情報である。なお、対象回路が同一であっても、検証者の検証方針によって検証範囲に含まれる条件が異なる。したがって、取得部３０１は、また、取得されたカバレッジ情報は、図１ではデータベース１，２に記録されているが、図２のハードウェアの場合、たとえば、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶される。
【００５３】
設定部３０２は、シミュレーションの実行内容の違いを識別する識別番号を設定する機能を有する。識別情報として本実施の形態ではＳｅｅｄ番号を利用する。設定部３０２は、Ｓｅｅｄ番号ごとに実行されたシミュレーションの違いを特定できる。したがって、Ｓｅｅｄ番号が同じであれば、実行されたシミュレーションも同じことを意味する。また、設定されたＳｅｅｄ番号は、たとえば、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶される。
【００５４】
生成部３０３は、シミュレーションの際に、対象回路に入力するテストパターンを生成する機能を有する。具体的には、生成部３０３は、設定部３０２によって設定された識別番号ごとに対象回路に入力するテストパターンを任意回数生成する。任意回数とは、シミュレーションの実行回数であり、検証者によって適宜設定される。たとえば、任意回数として３０回が設定されていれば、Ｓｅｅｄ番号：Ｘによるシミュレーションを３０回実行するため、テストパターンを３０回生成する。また、生成されたテストパターンは、たとえば、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶される。
【００５５】
制御部３０４は、シミュレータ３００を制御して、シミュレーションを実行させる機能を有する。制御部３０４がシミュレータ３００を制御する際のトリガとして様々なパターンがあるが、基本処理としては、生成部３０３によってテストパターンが生成されると、生成されたテストパターンごとにシミュレータ３００によるシミュレーションを実行させる。他の制御パターンについては、他の機能部の動作がトリガとなるため、関連する機能部の説明の際に詳しく述べる。
【００５６】
特定部３０５は、シミュレータ３００によってシミュレーションが実行された場合、当該シミュレーションによって検証された条件をカバレッジ情報の中から特定する機能を有する。特定結果は、たとえば、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶される。
【００５７】
関連付け部３０６は、特定部３０５によってカバレッジ情報の中からいずれかの条件が特定された場合に、カバレッジ情報に、特定された条件を検証したシミュレーションのＳｅｅｄ番号と、検証済みを表すフラグとを関連付ける機能を有する。すなわち、関連付け部３０６による関連付け処理によって、シミュレータ３００によるシミュレーションの実行結果が一元管理される。また、関連付け内容は、たとえば、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶される。
【００５８】
判断部３０７は、対象回路の検証範囲の網羅状態を判断する機能を有する。具体的には、判断部３０７では、カバレッジ情報にフラグが関連付けられているかに応じて、対象回路において検証対象となる全ての条件を網羅したか否かを判断している。すなわち、カバレッジ情報の全てにフラグが関連付けられていれば、全てのカバレッジが検証されているため、判断部３０７は、網羅率＝１００％と判断する。判断結果は、たとえば、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶される。
【００５９】
なお、判断部３０７による判断処理は、制御部３０４を動作させるトリガとなる。すなわち、制御部３０４は、判断部３０７による判断結果に応じて、シミュレータ３００によるシミュレーションを終了させる。具体的には、判断部３０７の判断結果として、網羅率＝１００％となった場合、これ以上検証する必要はないため、シミュレータションを終了させる。
【００６０】
抽出部３０８は、シミュレータ３００によるシミュレーションが少なくとも１回以上実行された後、未だに検証されていない条件を抽出する機能を有する。具体的には、判断部３０７によって検証対象となる全ての条件を網羅していないと判断された場合、抽出部３０８は、カバレッジ情報の中からフラグが関連付けられていない条件を抽出する。フラグが関連付けられていない条件とは、未だにシミュレーションが実行されていない条件であるため、抽出部３０８によって抽出された条件は未検証のものとなる。
【００６１】
したがって、出力部３０９は、抽出部３０８によって抽出された条件を未検証の条件として出力する。また、抽出結果や出力結果は、たとえば、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶される。
【００６２】
検索部３１０は、検証済みの条件の中から、未検証の条件と構成項目の近い条件を検索する機能を有する。具体的には、出力部３０９から未検証の条件が出力された場合、検索部３１０は、出力された条件に表されている対象回路内の各要素の設定値のうち所定数以上の設定値が一致している条件をカバレッジ情報の中のフラグが関連付けられた条件から検索する。また、検索結果は、たとえば、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶される。
【００６３】
決定部３１１は、未検証の条件を検証するためのシミュレーションを実行させる際のＳｅｅｄ番号切り替え箇所を決定する機能を有する。具体的には、決定部３１１は、検索部３１０によって検索された条件と、未検証の条件との設定値の一致状況に応じて、任意回数のうち設定部３０２によって設定されたＳｅｅｄ番号のシミュレーションを実行する回数と決定する。
【００６４】
すなわち、設定値が一致する項目まで検索された条件とおなじシミュレーションを実行するため、シミュレーションの全実行回数のうち、設定値が一致する項目の検証が済むまでの回数を決定する。また、決定結果は、たとえば、ＲＡＭ２０３、磁気ディスク２０５などの記憶領域に記憶される。
【００６５】
なお、決定部３１１におる決定処理は、制御部３０４を動作させるトリガとなる。すなわち、制御部３０４は、シミュレータ３００を制御して、決定部３１１によって決定された回数分、検索された条件と同一のＳｅｅｄ番号によるシミュレーションを実行させる。その後、制御部３０４は、決定された回数のシミュレーションを実行後、さらに、シミュレータ３００を制御して、任意回数に達するまでの残りの回数分、検索された条件のＳｅｅｄ番号と異なる任意のＳｅｅｄ番号によるシミュレーションを実行させる。
【００６６】
したがって、取得部３０１では、検証処理のたびに、カバレッジ情報を取得するため、対象回路と、検証者の検証意図に応じた適切な検証範囲を特定することができる。また、設定部３０２では、Ｓｅｅｄ番号を設定することによって、シミュレーションの実行内容の混同を防ぎ、適切に識別することができる。
【００６７】
また、生成部３０３では、Ｓｅｅｄ番号に応じて、テストパターンを生成するため、ランダム値でありながら、テストパターンの再現性を担保することができる。また、制御部３０４は、検証支援装置１００による処理内容に応じた検証支援を実現するため、シミュレータ３００の挙動を制御することができる。
【００６８】
また、特定部３０５では、カバレッジ情報の構成情報を参照することによって、検証範囲の全ての条件の中からシミュレーションによって検証された条件を自動的に特定することができる。また、関連付け部３０６では、検証範囲として挙げられた全ての条件について、検証済みか否かの情報と、検証済みの場合には設定されたＳｅｅｄ番号とが紐付けされるため、検証状態の管理が可能となる。
【００６９】
また、判断部３０７では、シミュレーション実行後に、未検証の条件の有無を自動的に判断することができる。また、抽出部３０８では、未検証の条件がある場合には、検証範囲として挙げられている全ての条件の中から、未検証の条件を自動的に抽出することができる。また、出力部３０９では、抽出部３０８によって抽出された条件をつぎの検証対象として提供するため、効率的な検証処理を支援する。
【００７０】
また、検索部３１０では、未検証の条件を検証する際に、最も類似する条件の検証結果を検索する。検索された条件を検証する際に実行されたシミュレーションは、未検証の条件を検証する際に利用されるため、複数の条件がある場合にも、最も利用に適した条件を検索することができる。また、決定部３１１では、検索された条件の検証結果が得られた際のシミュレーションをどこまで流用するかを決定するため、未検証の条件の検証結果を得やすいシミュレーションが実行されるように支援することができる。
【００７１】
以上説明したように、検証支援装置１００では、シミュレータ３００によるシミュレーションを実行させる際に、機能部３０１〜３１１の機能を利用することによって、高品質でありながら、効率的な検証処理を実現する。
【００７２】
（実施例）
つぎに、具体的な入出力情報を例示して、検証支援装置１００を利用した検証支援処理の実施例を説明する。
【００７３】
＜検証環境＞
図４は、検証環境の構成を示すブロック図である。また、図５は、検証対象の機能を示す説明図である。本実施例では、図４の検証環境４００のように、ＣＰＵ４０１と、検証対象４０２とがバス４１０によって接続されている回路を対象回路とする。また、検証対象４０２は、対向モデル４０３が接続されているものとする。
【００７４】
さらに、検証対象４０２には、図５に示したように、レジスタＡ、レジスタＢおよび外部端子Ｃが含まれている。なお、レジスタＡ、レジスタＢおよび外部端子Ｃの具体的なビット構成については、機能表５１０〜５３０に示す。
【００７５】
図６は、検証対象への入力パターンを示すタイミングチャートである。本実施例では、検証対象４０２に対して、図６のようなタイミングチャートによって表されたパターンが入力される。図６の各項目は下記のような値を示す。
【００７６】
ＣＬＫ    ：入力クロック
レジスタＡ：検証対象のレジスタＡへの設定値
レジスタＢ：検証対象のレジスタＢへの設定値
外部端子Ｃ：検証対象の外部端子Ｃへの入力値
【００７７】
また、図６のタイミングチャートにおいて（１）〜（６）の各タイミングでは下記のような処理がおこなわれている。
【００７８】
（１）ＣＬＫの立ち上がりエッジでレジスタＢ＝０を設定
（２）ＣＬＫの立ち上がりエッジで外部端子Ｃ＝０から１への変更を検出
（３）レジスタ値の検出なし
（４）ＣＬＫの立ち上がりエッジで外部端子Ｃ＝０から１への変更を検出
（５）ＣＬＫの立ち上がりエッジでレジスタＡ＝１を設定
（６）ＣＬＫの立ち上がりエッジで外部端子Ｃ＝０から１への変更を検出
【００７９】
＜カバレッジ情報＞
図７は、検証対象となる条件を表すカバレッジ情報を示す図表である。本実施例では、検証対象４０２の検証範囲として、図７のようなカバレッジ情報が提供される。図７のカバレッジ情報は、具体的には、外部端子Ｃ＝０→１への変化時のレジスタの組み合わせの全条件を表している。したがって、本実施例における検証処理では、カバレッジ情報を利用して、外部端子Ｃ＝０→１への変化が検出された際の各レジスタの設定値のパターンが全て網羅されているか確認することを目的としている。
【００８０】
本実施例では、外部端子Ｃ＝０→１への変化が取得されるタイミング（クロックの立ち上がりエッジ）が、検証結果のカウントタイミングとなる。また、以降の説明において、外部端子Ｃ＝０→１の検出前とは、外部端子Ｃの変化検出前の各レジスタ（ここでは、レジスタＡ，Ｂ）の設定値を意味する。また、外部端子Ｃ＝０→１の検出時とは、外部端子Ｃの変化検出時の各レジスタの設定値を意味する。さらに、外部端子Ｃ＝０→１の検出回数とは、外部端子Ｃの変化をクロックの立ち上がりエッジのタイミングにて検出した回数を意味する。
【００８１】
図８は、カバレッジカウントが関連付けられたカバレッジ情報を示す図表である。本実施例の場合、図６のタイミングチャートに示したテストパターンが入力されると、タイミング（２），（４），（６）がカウントタイミングとなり、カバレッジがカウントされる。したがって、図６のテストパターンが入力された後、カバレッジ情報では、（２），（４），（６）の設定値を表す条件８０１〜８０３の検出回数が１となる。
【００８２】
具体的に説明すると、図６のタイミング（２）では、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ０、外部端子Ｃの変化前（タイミング（１））に、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ２となっているため、タイミング（２）に相当する条件８０２の「外部端子Ｃ＝０→１検出回数」が＋１加算される。
【００８３】
また、図６のタイミング（４）では、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ０、外部端子Ｃの変化前（タイミング（３））に、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ０となっているため、タイミング（４）に相当する条件８０１の「外部端子Ｃ＝０→１検出回数」が＋１加算される。
【００８４】
また、図６のタイミング（６）では、レジスタＡ＝０ｘ１、レジスタＢ＝０ｘ１、外部端子Ｃの変化前（（５）タイミング）に、レジスタＡ＝０ｘ０、Ｂ＝０ｘ１となっているため、タイミング（６）に相当する条件８０３の「外部端子Ｃ＝０→１検出回数」が＋１加算される。
【００８５】
＜動作時のテストシナリオ＞
図９は、ＣＰＵのテストシナリオの手順を示すフローチャートであり、図１０は、対向モデルのテストシナリオの手順を示すフローチャートである。また、本実施例において、図６のようなテストパターンを入力するには、検証環境４００におけるＣＰＵ４０１や対向モデル４０３を適切に動作させるために、テストシナリオを用意する必要がある。
【００８６】
・ＣＰＵ４０１（モデル）のテストシナリオ
ＣＰＵ４０１（モデル）のテストシナリオの場合、検証支援装置１００は、図９のフローチャートにおいて、まず、クロック１（ＣＬＫ１）が検出されるまで待機する（ステップＳ９０１）、その後、クロック１が検出された後、ランダム値を生成する（ステップＳ９０２）。ステップＳ９０２において生成されるランダム値とはレジスタ設定の可否を判断する値である。たとえば、ランダム値として生成された値が１であればレジスタ設定をおこなうなどのルールを設定しておく。
【００８７】
したがって、レジスタ設定判定をおこない、ランダム値Ｉ＝１か否かを判断する（ステップＳ９０３）。先ほどのルールを利用した場合、Ｉ＝１であれば（ステップＳ９０３：Ｙｅｓ）、レジスタ設定の処理に移行する。なお、Ｉ≠１であれば（ステップＳ９０３：Ｎｏ）、レジスタ設定をおこなわないため、レジスタ設定に関する処理（ステップＳ９０４，Ｓ９０５）をスキップして、ステップＳ９０６の処理に移行する。
【００８８】
レジスタ設定をおこなう場合、まず、ランダム値を生成し（ステップＳ９０４）、レジスタ名をランダム値に設定する。本実施例の場合、登場するレジスタはレジスタＡ，Ｂの２種類である。したがって、ランダム値が偶数であればレジスタ名としてレジスタＡを設定し、奇数であればレジスタ名としてレジスタＢを設定するようなルールを設定してもよい。
【００８９】
さらに、ランダム値を生成し（ステップＳ９０５）、レジスタ設定値をランダム値に設定する。ステップＳ９０５では、生成されたランダム値がそのままレジスタ設定値となる。したがって、ステップＳ９０５では、レジスタ設定値の範囲内の値の中からランダム値が生成されるようなルールを設定しておく。
【００９０】
最後に、シミュレーションが終了したか否かを判断し（ステップＳ９０６）、シミュレーションが終了するまでステップＳ９０１の処理に戻し、テストシナリオを繰り返す（ステップＳ９０６：Ｎｏのループ）。そして、シミュレーションが終了すると（ステップＳ９０６：Ｙｅｓ）、そのままＣＰＵ４０１のテストシナリオを終了する。
【００９１】
・対向モデルのテストシナリオ
また、対向モデル４０３のテストシナリオの場合、検証支援装置１００は、図１０のフローチャートにおいて、まず、クロック１（ＣＬＫ１）が検出されるまで待機する（ステップＳ１００１）、その後、クロック１が検出された後、ランダム値を生成する（ステップＳ１００２）。ステップＳ１００２において生成されるランダム値は、外部端子Ｃの入力可否を判断する値である。したがって、たとえば、ランダム値として生成された値が１であれば外部端子Ｃからの入力をおこなうなどのルールを設定する。
【００９２】
したがって、外部端子Ｃの入力判定をおこない、ランダム値Ｉ＝１か否かを判断する（ステップＳ１００３）。先ほどのルールを利用した場合、Ｉ＝１であれば（ステップＳ１００３：Ｙｅｓ）、外部端子Ｃの入力処理に移行する。なお、Ｉ≠１であれば、外部端子Ｃからの入力をおこなわないため、入力処理（スキップＳ１００４）をスキップして、ステップＳ１００５の処理に移行する。
【００９３】
外部端子Ｃの入力処理をおこなう場合、まずランダム値を生成し、生成したランダム値を入力値に設定する（ステップＳ１００４）。なお、外部端子Ｃからの入力値は０／１の二値である。したがって、ステップＳ１００４では、ランダム値として０／１のいずれかが生成されるようなルールであってもよいし、生成されたランダム値に応じて０／１のいずれかの値を設定するようなルールであってもよい。
【００９４】
最後に、シミュレーションが終了したか否かを判断し（ステップＳ１００５）、シミュレーションが終了するまでステップＳ１００１の処理に戻し、テストシナリオを繰り返す（ステップＳ１００５：Ｎｏのループ）。そして、シミュレーションが終了すると（ステップＳ１００５：Ｙｅｓ）、そのまま対向モデル４０３のテストシナリオを終了する。
【００９５】
図１１−１〜図１１−３は、テストパターン動作の生成例を示す図表（その１〜３）である。本実施例では、図９，１０にて説明したテストシナリオを実行することによって、図１１−１〜図１１−３に示したようなテストパターンが生成される。なお、図１１−１は、ランダム関数呼び出し回数が１〜１４回の場合、図１１−２は、１５〜３０回の場合、図１１−３は、３１〜３９回の場合にそれぞれ生成されたテストパターンである。
【００９６】
なお、図１１−１において、ランダム関数呼び出し回数が７〜１１回に生成されたテストパターンは、図６のタイミング（１）の動作に相当する。また、１２〜１４回に生成されたテストパターンは、図６のタイミング（２）の動作に相当する。
【００９７】
また、図１１−２において、ランダム関数呼び出し回数が１７〜１９回に生成されたテストパターンは、図６のタイミング（３）の動作に相当する。また、２０〜２４回に生成されたテストパターンは、図６のタイミング（４）の動作に相当する。
【００９８】
また、図１１−３において、ランダム関数呼び出し回数が３１〜３５回に生成されたテストパターンは、図６のタイミング（５）の動作に相当する。また、３６〜３７回に生成されたテストパターンは、図６のタイミング（６）の動作に相当する。
【００９９】
＜乱数生成手順＞
図１２は、従来の乱数生成手順を示す説明図である。従来、検証支援処理では、シミュレーションを実行する際に、ランダム関数呼び出しごとにＳｅｅｄ番号に応じた乱数生成値が設定される。したがって、図１２の左の図表のように、シミュレーション１回目では、Ｓｅｅｄ番号＝１００２が設定されると、所定回数（図６の例では８回）のランダム関数呼び出しが実行される。その後、右の図表のように、シミュレーション２回目では、異なるＳｅｅｄ番号＝３４０２が設定され、１回目とは異なるランダム関数呼び出しがおこなわれる。すなわち、１回目と２回目とでは、シミュレーション内容が大きく異なっている。
【０１００】
図１３は、本実施の形態における乱数生成手順を示す説明図である。本実施例の場合、図１３のように、２回目のシミュレーションの途中で、擬似乱数を生成するＳｅｅｄ番号を変更する。したがって、１回目と２回目のシミュレーションを比較すると、途中まで同じ乱数生成値１３１０を利用したシミュレーションが実行される。その後、特定のポイント（図１３の場合５回目）からＳｅｅｄ番号を変更し、異なる乱数生成値１３２０を利用したシミュレーションが実行される。なお、Ｓｅｅｄ番号の変更箇所の決定処理については詳しく後述する。
【０１０１】
＜カバレッジ情報の管理＞
図１４は、検証結果の管理フォーマットを示す説明図である。本実施例の場合、Ｓｅｅｄ番号に応じたシミュレーションが実行されると、当該シミュレーションによる検証結果を特定の管理用のフォーマットにて記録する。たとえば、図１４の図表１４００に示した条件のうち、いずれかの条件が検証された場合、データ列１４１０のようなフォーマットで１レコードが生成される。データ列１４１０のＣｏｕｎｔＥｎａｂｌｅ１４１１は、対象となる項目の検証がカウントされたか否かを表すフラグである。したがって、検証されたとカウントされた場合には、フラグ「１」がセットされる。
【０１０２】
また、データ列１４２０は、データ列１４１０に含まれている、Ｒａｎｄａｍ回数＋Ｓｅｅｄ番号の詳細な設定を表している。データ列１４２０に含まれる、Ｒａｎｄａｍ回数１４２１は、カバレッジ取得時のランダム発生関数呼び出し回数を表している。また、Ｓｅｅｄ番号１４２２は、カバレッジ取得時のＳｅｅｄ番号を表す。
【０１０３】
図１５は、データベース１への格納例を示す説明図である。シミュレーションの実行によって、生成されたデータ列１４１０は、データベース１へ格納される。図１５の例では、データ列１４１０は、データベース１のレコード０に格納されている。すわなち、データベース１内の格納位置は、図表１４００のカバレッジ情報およびカウント位置に依存する。したがって、あらかじめデータベース１には、検証範囲として提供された全ての条件についてデータ１４１０のフォーマットが設定されている。
【０１０４】
そして、シミュレーションの実行によって検証結果が得られた場合には、データ列１４１０の各項目にそれぞれ検証結果に応じた値が入力される。一方、未検証の条件に関しては、データ列１４１０のようなファーマット形式であるが、検証結果が得られていないため、データ列１４１０の各項目の値は初期値（たとえば「０」）となる。したがって、本実施例の場合、図１のステップＳ１０５，Ｓ１１６によって記録された情報は、いずれもデータ列１４１０のようなフォーマットでデータベース１に格納される。
【０１０５】
＜Ｓｅｅｄ番号切り替え箇所特定処理＞
本実施例では、通常のシミュレーションが実行された後、未検証箇所の検証を目的としたシミュレーションを実行する必要がある。未検証箇所を検証するシミュレーションを実行するには、Ｓｅｅｄ番号の切り替え箇所を特定しなければならない。そこで、以下に、Ｓｅｅｄ番号切り替え箇所特定処理について順に説明する。
【０１０６】
図１６は、未検証箇所の特定処理を示す説明図である。カバレッジ情報として提供された全ての条件の検証を完了させるには、未検証箇所を特定しなければならない。そこで、まず、データベース１に記録された条件の中からカバレッジが取得されていない未検出箇所を抽出する。データ列１４１０に示したように、１レコードには、それぞれＣｏｕｎｔＥｎａｂｌｅ１４１１が設定されている。ＣｏｕｎｔＥｎａｂｌｅ１４１１は、対象となる項目の検証がカウントされたか否かを表すフラグが設定されるため、フラグが立っていないレコードを抽出すればよい。
【０１０７】
図１７は、検証対象箇所の特定例を示す図表である。たとえば、図１７の図表１４００の各条件のうち、条件１７００が未検証箇所として抽出される。したがって、つぎに、条件１７００に近い条件を検証対象箇所として特定する。図表１４００から、条件１７００に近い条件を特定するには、条件１７００のカバレッジ項目の要素範囲を参照する。
【０１０８】
具体的には、条件１７００の場合、カバレッジ項目の要素範囲は、外部端子Ｃ検出前の場合、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ０となり、外部端子Ｃ検出後の場合、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ１となる。したがって、条件１７００の要素範囲に最も近い項目として、外部端子Ｃ検出前の場合にレジスタＡ＝０ｘ０、レジスタＢ＝０ｘ０，外部端子Ｃ検出後の場合にレジスタＡ＝０ｘ０となる条件群１７１０が抽出される。さらに、条件群１７１０の中から、検証済みのフラグが立っている条件を特定する。
【０１０９】
したがって、条件群１７００の中から条件１７０１が検証対象箇所として特定される。すなわち、条件１７０１においてシミュレーションの実行例を利用して、条件１７００を検証するためのシミュレーションを実行する。なお、外部端子Ｃ検出後の場合のレジスタＡ＝０ｘ０となる要素範囲の条件がいずれも未検証であった場合（フラグが立っていない場合）には、上位の項目の要素範囲に含まれる条件の中から検証済みの条件を抽出する。
【０１１０】
そして、最上位（本実施例の場合は、外部端子Ｃの検出前のレジスタＡ）の要素範囲に検証済みの条件がない場合には、検証済みの条件のシミュレーションの実行例を利用できない。検証済みの条件のシミュレーションの実行例を利用できない場合には、通常のシミュレーションと同様にランダムにＳｅｅｄ番号を設定する。
【０１１１】
条件１７０１が検証対象箇所として特定されると、図１７の条件１７００を検証するためのシミュレーションを実行するために、条件１７０１のシミュレーションの実行結果が利用される。さらに、シミュレーションを実行する際に、何回目の処理まで条件１７０１のシミュレーションを利用するかを決定しなければならない。そこで、つぎに、Ｓｅｅｄ番号の切り替え箇所を特定する。
【０１１２】
図１８は、データベース１からの取得情報を示す説明図である。まず、データベース１から条件１７０１のシミュレーションを実行した際のレコードを参照する。図１８の場合、データベース１の中のレコード０に対象となるデータ列１４１０が格納されている。したがって、レコード０からデータ列１４１０を参照して、Ｒａｎｄｏｍ回数＋Ｓｅｅｄ番号１４２０を取得する。
【０１１３】
図１９は、取得情報の対応箇所を示す図表である。本実施例の場合、ＣＬＫのサイクル数＝７のときに、条件１７０１が検証されたとしてカウントされる。すなわち、ＣＬＫのサイクル数＝７の最初のＲａｎｄｏｍ回数である値を取得する。したがって、本実施例では、Ｒａｎｄｏｍ回数＝２０となる。
【０１１４】
そして、２０回目の処理の直前まで条件１７０１と同じＳｅｅｄ番号を設定してシミュレーションを実行することによって、図１７に示した条件１７００のカバレッジ項目のうち、少なくとも、条件１７０１と一致する項目については、検証結果を得ることができる。したがって、本実施例の場合、２０回目がＳｅｅｄ番号の切り替え箇所として特定される。
【０１１５】
＜検証済み箇所の検索＞
図２０は、検証済み箇所の取得処理を示す説明図である。上述したように、Ｓｅｅｄ番号の切り替え箇所を特定する際に、カバレッジ情報として提供された全ての条件の中から検証対象となる条件に近い検証済み箇所の検索処理について述べたが、ここでは更に詳細に説明する。検証済み箇所を検索するには、図２０に示したカバレッジ表２０００を利用する。なお、カバレッジ表２０００は、カバレッジ情報の構成に対応しており、データベース２に格納されている。カバレッジ情報からカバレッジ表２０００を作成するには、カバレッジ情報から抽出したカバレッジ項目の要素数一覧２０１０を利用する。
【０１１６】
図２１は、項目Ａの要素切り替え箇所の算出処理を示す説明図である。カバレッジ項目のうち、レジスタＡ（項目Ａ）の要素の切り替え位置（Ｐａ）を算出するには、Ｐａ＝（Ｂｍａｘ×Ｃｍａｘ）×（ｎ−１）を求めればよい（但し、Ｐａ＜１０，ｎ＞０）。したがって、図２１のカバレッジ表２０００では、範囲２１０１が項目Ａの要素（０ｘ０）の範囲であるため、範囲２１０１の先頭位置である範囲２１０２が項目Ａの切り替え位置となる。
【０１１７】
図２２は、項目Ｂの要素切り替え箇所の算出処理を示す説明図である。カバレッジ項目のうち、レジスタＢ（項目Ｂ）の要素の切り替え位置（Ｐｂ）を算出するには、Ｐｂ＝Ｃｍａｘ×（ｎ−１）を求めればよい（但し、Ｐｂ＜１０，ｎ＞０）。したがって、図２２のカバレッジ表２０００では、範囲２２０１が項目Ｂの要素（０ｘ０）の範囲、範囲２２０２が項目Ｂの要素（０ｘ１）の範囲である。したがって、範囲２２０１の先頭位置である範囲２２０３と、範囲２２０２の先頭位置である範囲２２０４とが項目Ｂの切り替え位置となる。
【０１１８】
したがって、検証済み箇所を取得するには、上述の処理によって求められた切り替え箇所単位で、参照エリアを拡大させる。そして、参照内からフラグの立っている条件を検索して検証済み箇所を取得する。
【０１１９】
＜データベース２の構成＞
図２３は、データベース２の構成を示す説明図である。ここで、データベース２の構成ついて説明する。図２３のように、データベース２には、カバレッジ情報の構成を表すカバレッジ表（たとえば、カバレッジ表２０００）が格納されている。なお、データベース２の場合、１つのレコードに１つのカバレッジ表が格納される。
【０１２０】
図２４は、１レコードのフォーマットを示す説明図である。データベース２の各レコードにはデータ列２４００のようなフォーマットでカバレッジ表が格納されている。また、データ列２４００を構成する情報のうち、項目情報には、さらに、データ列２４１０のような情報が含まれている。また、カウント回数項目情報には、さらに、データ列２４２０のような情報が含まれる。
【０１２１】
＜未検証箇所を対象としたシミュレーションの実行処理＞
未検証箇所の検証結果を得るため、上述したように、まず、検証済みの条件の中から利用するシミュレーションを特定し、さらに、Ｓｅｅｄ番号の切り替え箇所を特定した。したがって、つぎに、実際に未検証箇所を対象としたシミュレーションを実行するための処理に移行する。
【０１２２】
図２５は、Ｓｅｅｄ番号を切り替えた場合の入力パターンを示すタイミングチャートである。本実施例では、ランダム生成回数＝１９回目が終了した時点でＳｅｅｄ番号を変更する。したがって、ランダム生成回数＝２０回目以降のシミュレーションの動作は、Ｓｅｅｄ番号を変更しなかった場合の動作とは異なる可能性が高くなる（ランダムに値を生成するため、同じ動作になる可能性も０％ではない。）。
【０１２３】
したがって、図２５は、２０回目以降のＳｅｅｄ番号を切り替えた場合のテストパターン（検証対象への入力パターン）となる。図２５のテストパターンにおいて、タイミング（４）以前の動作は、図６に例示したテストパターンと同一の波形となっている。そして、図２５のタイミング（４）以降の動作では、Ｓｅｅｄ番号が変更されているため、図６に例示したテストパターンと異なる波形を示している。
【０１２４】
図２６−１〜図２６−３は、Ｓｅｅｄ番号を切り替えた場合のテストパターン動作の生成例を示す図表（その１〜３）である。入力パターンが異なれば、当然のことながらテストパターン動作の生成例にも差異が生じる。
【０１２５】
本実施例では、Ｓｅｅｄ番号を切り替えて、テストシナリオを実行することによって、図２６−１〜図２６−３に示したようなテストパターンが生成される。なお、図２６−１は、ランダム関数呼び出し回数が１〜１４回の場合、図２６−２は、１５〜２９回の場合、図２６−３は、３０〜３７回の場合にそれぞれ生成されたテストパターンである。
【０１２６】
今回のシミュレーションの場合、ランダム関数呼び出し回数が１９回目までは、図６と同一のテストパターン動作であるため、図２６−１、図２６−２の１回〜１９回までに生成されたテストパターンは、図１１−１、図１１−２と同様の結果となる。そして、２０回以降に生成されたテストパターンは、図１１−２，図１１−３とは異なる可能性が高い。
【０１２７】
実際に図２６−２に示した２０〜２２回目のテストパターンは図２５のタイミング（４）に相当し、２５〜２９回目のテストパターンは図２５のタイミング（５）に相当し、図２６−３に示した３０〜３３回目のテストパターンは図２５のタイミング（６）に相当する。
【０１２８】
図２７は、Ｓｅｅｄ番号を切り替えた場合のカバレッジカウントが関連付けられたカバレッジ情報を示す図表である。本実施例の場合、図２５のタイミングチャートに示したテストパターンが入力されると、タイミング（２），（４），（６）がカウントタイミングとなり、カバレッジがカウントされる。
【０１２９】
これらカウントされたタイミング（２），（４），（６）のうち、（６）に関してはＳｅｅｄ番号変更後であるため、Ｓｅｅｄ番号変更前のシミュレーションとは異なるカバレッジが取得される。
【０１３０】
すなわち、図２５のタイミング（２）では、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ０、外部端子Ｃの変化前（タイミング（１））に、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ２となっているため、タイミング（２）に相当する条件２７０３の「外部端子Ｃ＝０→１検出回数」が＋１加算される。
【０１３１】
また、図２５のタイミング（４）では、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ０、外部端子Ｃの変化前（タイミング（３））に、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ０となっているため、タイミング（４）に相当する条件２７０１の「外部端子Ｃ＝０→１検出回数」が＋１加算される。
【０１３２】
そして、図２５のタイミング（６）では、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ１、外部端子Ｃの変化前（タイミング（５））に、レジスタＡ＝０ｘ０、レジスタＢ＝０ｘ０となっているため、タイミング（６）に相当する条件２７０２の「外部端子Ｃ＝０→１検出回数」が＋１加算される。
【０１３３】
Ｓｅｅｄ番号を変更したテストパターンを入力することによって、未検証だった条件２７０２があらたに検証されたことになる。他の未検証箇所に関しても、同様の処理を繰り返すことによって、全ての条件を漏らすことなく検証することができる。
【０１３４】
以上説明したように、本実施の形態にかかる検証支援プログラム、検証支援装置および検証支援方法によれば、シミュレーションが実行されると、当該シミュレーションによる検証結果をＳｅｅｄ番号や、検証済みの有無を特定するフラグと関連付けてデータベース１に格納する。したがって、検証範囲として挙げた全条件について、それぞれ検証済みの有無、検証済みの場合は、どのようなシミュレーションによって検証されたかを、一元的に管理することができる。これにより、検証者は、データベース１の格納情報を参照すれば、検証範囲に含まれる各条件について、フラグの有無に応じて検証済み項目と未検証項目とを即座に把握することが可能となる。
【０１３５】
また、上記の技術は、データベース１に格納された検証結果に関連付けられたフラグから検証範囲の網羅状態を判断することができる。したがって、網羅率に応じて自動的にシミュレーションの終了を制御することができる。これにより、検証者が設定した検証方針に応じた内容の検証処理を自動的に実行させることができる。
【０１３６】
また、上記の技術は、データベース１に格納された検証結果に関連付けられたフラグから未検証箇所を抽出することができる。したがって、検証済みの条件についてのシミュレーションが繰り返されるような無駄を抑え、未検証箇所に絞ってシミュレーションを実行させることができる。これにより、効率的にシミュレーションが実行されるため、シミュレーションを完了させるまでの総処理量を抑え、ＣＰＵの処理負荷を軽減させることができる。
【０１３７】
また、上記の技術は、未検証箇所を検証するためにあらたにシミュレーションを実行させる際に、検証済みの条件を検証した際に実行されたシミュレーションを一部流用する。したがって、ランダムな値を利用した検証でありながら、無作為にシミュレーションを実行する場合と比較して、大幅に少ないシミュレーション回数で未検証箇所の検証を完了させられる。これにより、検証処理に要する時間を大幅に短縮することができる。
【０１３８】
なお、本実施の形態で説明した検証支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本検証支援プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検証支援プログラムは、インターネットなどのネットワークを介して配布してもよい。
【０１３９】
また、本実施の形態で説明した検証支援装置１００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述した検証支援装置１００の機能（取得部３０１〜決定部３１１）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、検証支援装置１００を製造することができる。
【０１４０】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１４１】
（付記１）対象回路のシミュレーションを制御するコンピュータを、
前記対象回路において検証対象となる全ての条件を表したカバレッジ情報を取得する取得手段、
前記シミュレーションの実行内容の違いを識別する識別番号を設定する設定手段、
前記設定手段によって設定された識別番号ごとに前記対象回路に入力するテストパターンを任意回数生成する生成手段、
前記生成手段によって生成されたテストパターンごとに前記シミュレーションを実行させる制御手段、
前記シミュレーションが実行された場合、当該シミュレーションによって検証された条件を前記取得手段によって取得されたカバレッジ情報の中から特定する特定手段、
前記特定手段によって前記カバレッジ情報の中からいずれかの条件が特定された場合に、前記カバレッジ情報に、特定された条件を検証したシミュレーションの識別番号と、検証済みを表すフラグとを関連付ける関連付け手段、
として機能させることを特徴とする検証支援プログラム。
【０１４２】
（付記２）前記コンピュータを、さらに、
前記カバレッジ情報への前記フラグの関連付けの有無に応じて、前記対象回路において検証対象となる全ての条件を網羅したか否かを判断する判断手段として機能させ、
前記制御手段は、前記判断手段による判断結果に応じて、前記シミュレーションを終了させることを特徴とする付記１に記載の検証支援プログラム。
【０１４３】
（付記３）前記コンピュータを、さらに、
前記判断手段によって検証対象となる全ての条件を網羅していないと判断された場合、前記カバレッジ情報の中から前記フラグが関連付けられていない条件を抽出する抽出手段と、
前記抽出手段によって抽出された条件を未検証の条件として出力する出力手段と、
して機能させることを特徴とする付記２に記載の検証支援プログラム。
【０１４４】
（付記４）前記コンピュータを、さらに、
前記出力手段から未検証の条件が出力された場合、当該条件に表されている前記対象回路内の各要素の設定値のうち所定数以上の設定値が一致している条件を前記カバレッジ情報の中の前記フラグが関連付けられた条件から検索する検索手段、
前記検索手段によって検索された条件と、前記未検証の条件との設定値の一致状況に応じて、前記任意回数のうち前記識別番号のシミュレーションを実行する回数を決定する決定手段、として機能させ、
前記制御手段は、前記決定手段によって決定された回数分、前記識別番号のシミュレーションを実行させ、当該回数実行後、前記任意回数に達するまでの残りの回数分、前記識別番号と異なる任意の識別番号のシミュレーションを実行させることを特徴とする付記３に記載の検証支援プログラム。
【０１４５】
（付記５）対象回路のシミュレーションを実行する実行手段と、
前記対象回路において検証対象となる全ての条件を表したカバレッジ情報を取得する取得手段と、
前記シミュレーションの実行内容の違いを識別する識別番号を設定する設定手段と、
前記設定手段によって設定された識別番号ごとに前記対象回路に入力するテストパターンを任意回数生成する生成手段と、
前記実行手段を制御して、前記生成手段によって生成されたテストパターンごとにシミュレーションを実行させる制御手段と、
前記シミュレーションが実行された場合、当該シミュレーションによって検証された条件を前記取得手段によって取得されたカバレッジ情報の中から特定する特定手段と、
前記特定手段によって前記カバレッジ情報の中からいずれかの条件が特定された場合に、前記カバレッジ情報に、特定された条件を検証したシミュレーションの識別番号と、検証済みを表すフラグとを関連付ける関連付け手段と、
を備えることを特徴とする検証支援装置。
【０１４６】
（付記６）対象回路のシミュレーションを制御するコンピュータが、
前記対象回路において検証対象となる全ての条件を表したカバレッジ情報を取得する取得工程と、
前記シミュレーションの実行内容の違いを識別する識別番号を設定する設定工程と、
前記設定工程によって設定された識別番号ごとに前記対象回路に入力するテストパターンを任意回数生成する生成工程と、
前記生成工程によって生成されたテストパターンごとに前記シミュレーションを実行させる実行工程と、
前記シミュレーションが実行された場合、当該シミュレーションによって検証された条件を前記取得工程によって取得されたカバレッジ情報の中から特定する特定工程と、
前記特定工程によって前記カバレッジ情報の中からいずれかの条件が特定された場合に、前記カバレッジ情報に、特定された条件を検証したシミュレーションの識別番号と、検証済みを表すフラグとを関連付ける関連付け工程と、
を実行することを特徴とする検証支援方法。
【符号の説明】
【０１４７】
１００  検証支援装置
３００  シミュレータ
３０１  取得部
３０２  設定部
３０３  生成部
３０４  制御部
３０５  特定部
３０６  関連付け部
３０７  判断部
３０８  抽出部
３０９  出力部
３１０  検索部
３１１  決定部
４００  検証環境
４０１  ＣＰＵ
４０２  検証対象
４０３  対向モデル
４１０  バス
【図１】
2010267209.tif 000003
【図２】
2010267209.tif 000004
【図３】
2010267209.tif 000005
【図４】
2010267209.tif 000006
【図５】
2010267209.tif 000007
【図６】
2010267209.tif 000008
【図７】
2010267209.tif 000009
【図８】
2010267209.tif 000010
【図９】
2010267209.tif 000011
【図１０】
2010267209.tif 000012
【図１１−１】
2010267209.tif 000013
【図１１−２】
2010267209.tif 000014
【図１１−３】
2010267209.tif 000015
【図１２】
2010267209.tif 000016
【図１３】
2010267209.tif 000017
【図１４】
2010267209.tif 000018
【図１５】
2010267209.tif 000019
【図１６】
2010267209.tif 000020
【図１７】
2010267209.tif 000021
【図１８】
2010267209.tif 000022
【図１９】
2010267209.tif 000023
【図２０】
2010267209.tif 000024
【図２１】
2010267209.tif 000025
【図２２】
2010267209.tif 000026
【図２３】
2010267209.tif 000027
【図２４】
2010267209.tif 000028
【図２５】
2010267209.tif 000029
【図２６−１】
2010267209.tif 000030
【図２６−２】
2010267209.tif 000031
【図２６−３】
2010267209.tif 000032
【図２７】
2010267209.tif 000033
【図２８】
2010267209.tif 000034