(57)【要約】【課題】対象回路内の依存関係をもつ２つのノード間の信号の伝播に要する時間を、シミュレーションを実行することなく容易に特定する。【解決手段】検証支援装置１００によって、入力値１１０として調査対象変数（信号やレジスタ）１１１およびクロック信号名１１２と、それらを定義・参照しているＲＴＬのソースコード１１３が入力されると、調査対象変数１１１についての遅延サイクル数１２１を出力値１２０として出力する。検証支援装置１００では、ＲＴＬのソースコード１１３における調査対象変数１１１のパス上のノードを各ノードのクロックドメインごとに検出することによって遅延サイクル数１２１を特定できる。【選択図】図１
2011237888.tif 000002
【特許請求の範囲】
【請求項１】
対象回路を動作させるクロックドメインごとに変数間の依存関係が記述されたハードウェア記述内の複数の変数の中から、第１の変数と当該第１の変数の依存先となる第２の変数との指定を受け付ける指定工程と、
前記複数の変数の中から、前記指定工程によって指定された第１の変数を依存元とし前記第２の変数を依存先とする第３の変数を検索する検索工程と、
前記ハードウェア記述に記述されている前記第１または第２の変数が属するクロックドメインを参照して、前記検索工程によって検索された第３の変数の中から、前記第１または第２の変数とクロックドメインが同一の変数を検出する検出工程と、
前記検出工程によって検出された検出結果を出力する出力工程と、
をコンピュータに実行させることを特徴とする検証支援プログラム。
【請求項２】
前記検出工程では、前記検索工程によって、名称とクロックドメインが一致する複数の変数が第３の変数として検索されている場合、前記名称とクロックドメインが一致する複数の変数を１つだけ検出することを特徴とする請求項１に記載の検証支援プログラム。
【請求項３】
前記検出工程では、前記第１または第２の変数に複数のクロックドメインが存在する場合、クロックドメインごとに、前記第３の変数の中から、前記第１または第２の変数とクロックドメインが同一の変数を検出することを特徴とする請求項１または２に記載の検証支援プログラム。
【請求項４】
前記検出工程では、前記検索工程によって、前記第３の変数として、前記第１の変数と前記第２の変数との間の異なるパスを経る変数が検索された場合、前記異なるパスごとに検索された前記第３の変数が、前記第１または第２の変数とクロックドメインが同一の変数を検出することを特徴とする請求項１〜３のいずれか一つに記載の検証支援プログラム。
【請求項５】
前記コンピュータに、
前記検出工程によって検出された検出結果に基づいて、前記第１の変数の値の変化が第２の変数の値に伝播するまでにかかる時間を算出する算出工程を実行させ、
前記出力工程は、
前記算出工程によって算出された算出結果を出力することを特徴とする請求項１〜４のいずれか一つに記載の検証支援プログラム。
【請求項６】
対象回路を動作させるクロックドメインごとに変数間の依存関係が記述されたハードウェア記述内の複数の変数の中から、第１の変数と当該第１の変数の依存先となる第２の変数との指定を受け付ける指定手段と、
前記複数の変数の中から、前記指定手段によって指定された第１の変数を依存元とし前記第２の変数を依存先とする第３の変数を検索する検索手段と、
前記ハードウェア記述に記述されている前記第１または第２の変数が属するクロックドメインを参照して、前記検索手段によって検索された第３の変数の中から、前記第１または第２の変数とクロックドメインが同一の変数を検出する検出手段と、
前記検出手段によって検出された検出結果を出力する出力手段と、
を備えることを特徴とする検証支援装置。
【請求項７】
コンピュータが、
対象回路を動作させるクロックドメインごとに変数間の依存関係が記述されたハードウェア記述内の複数の変数の中から、第１の変数と当該第１の変数の依存先となる第２の変数との指定を受け付ける指定工程と、
前記複数の変数の中から、前記指定工程によって指定された第１の変数を依存元とし前記第２の変数を依存先とする第３の変数を検索する検索工程と、
前記ハードウェア記述に記述されている前記第１または第２の変数が属するクロックドメインを参照して、前記検索工程によって検索された第３の変数の中から、前記第１または第２の変数とクロックドメインが同一の変数を検出する検出工程と、
前記検出工程によって検出された検出結果を出力する出力工程と、
を実行することを特徴とする検証支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、回路設計の検証を支援する検証支援プログラム、検証支援装置および検証支援方法に関する。
【背景技術】
【０００２】
従来より、ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）の論理設計の工程では、設計者は複数の技術を駆使して仕様と実装を比較し、設計回路にバグが無いことを確認する検証処理を繰り返しながら設計を行っている。近年では、漏れのない正確な検証を行うため、ＯＶＭ（Ｏｐｅｎ  Ｖｅｒｉｆｉｃａｔｉｏｎ  Ｍｅｔｈｏｄｏｌｏｇｙ）やＶＭＭ（Ｖｅｒｉｆｉｃａｔｉｏｎ  Ｍｅｔｈｏｄｏｌｏｇｙ  Ｍａｎｕａｌ）などの最新の検証メソドロジーが利用されている。
【０００３】
一方で、検証対象の状況（たとえば、ＬＳＩにおける重要性や設計の困難さ）によっては、上述したような最新の検証メソドロジー以外の手法で実装を検査しなければならない場合がある。そこで、現状では、コードレビューが有効な手法として実施されている。コードレビューとは、設計回路内の誤りを検出・修正するためにソースコードを体系的に検査する、いわゆる査読であり、従来からハードウェアとソフトウェアの実装を検査する際に使われる技術である。
【０００４】
ＬＳＩの実装をコードレビューによって検査する際、２つの変数（信号、レジスタ等）の間に依存関係があった場合、依存元の変数の値が変化したとき、依存先の変数の値に依存元の変化がいつ反映されるか（または影響を受けるか）を調査したいという要望が多い。そこで、設計回路の実装に応じた動作を再現するシミュレーションを行ったり、設計回路内の指定した２つの素子間の信号の伝播にかかる時間を特定する技術が利用されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３３６００１２号公報
【特許文献２】特開２００５−２７５７８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来技術のように、動的または静的に設計回路の動作をシミュレーションする手法は、多くの場合、結果が出るまでに多大な時間を要する。また、実装相当の動作を再現するためには、検証者が検証したい箇所以外の設計情報が必要になる。したがって、検証にかかる計算負荷が大きく、検証用のハードウェアとして高スペックな装置が必要になるなど、検証者が容易には利用できないといった問題があった。
【０００７】
また上述したような、指定した素子間の信号の伝播にかかる時間を特定する技術も、利用可能となる範囲や、対象となる回路構成が限定されている。しかしながら、実際には、ある時には所定のレジスタであったり、ある時には所定の信号であったりと、検証の対象となる変数は多様である。したがって、検証者が要求するような多様な検証には対応できないといった問題があった。
【０００８】
本開示技術は、上述した従来技術による問題点を解消するため、対象回路内の依存関係をもつ２つのノード間の信号の伝播に要する時間を容易に特定する検証支援プログラム、検証支援装置および検証支援方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、本開示技術は、対象回路を動作させるクロックドメインごとに変数間の依存関係が記述されたハードウェア記述内の複数の変数の中から、第１の変数と当該第１の変数の依存先となる第２の変数との指定を受け付け、複数の変数の中から、指定された第１の変数を依存元とし第２の変数を依存先とする第３の変数を検索し、ハードウェア記述に記述されている前記第１または第２の変数が属するクロックドメインを参照して、検索された第３の変数の中から、前記第１または第２の変数とクロックドメインが同一の変数を検出し、検出された検出結果を出力することを要件とする。
【発明の効果】
【００１０】
本検証支援プログラム、検証支援装置および検証支援方法によれば、対象回路内の依存関係をもつ２つのノード間の信号の伝播に要する時間を容易に特定することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態にかかる検証支援処理の一例を示す説明図である。
【図２】ＲＴＬ記述における依存関係を示す説明図である。
【図３】中間データを利用した遅延サイクル数の特定を示す説明図である。
【図４】検証支援装置のハードウェア構成を示すブロック図である。
【図５】検証支援装置の機能的構成を示すブロック図である。
【図６】検証支援処理の手順を示すフローチャートである。
【図７】依存関係の調査の手順を示す説明図である、
【図８−１】依存関係探索処理の手順を示すフローチャート（その１）である。
【図８−２】依存関係探索処理の手順を示すフローチャート（その２）である。
【図９】遅延サイクル数の算出処理の手順を示すフローチャートである。
【図１０】実施例１におけるＲＴＬ記述を示す説明図である。
【図１１】ＲＴＬ記述のパーズツリーを示すデータ構成図である。
【図１２】実施例１における依存関係パスの構成を示す説明図である。
【図１３】実施例１における遅延サイクル数算出の過程を示す説明図である。
【図１４】実施例２におけるＲＴＬ記述を示す説明図である。
【図１５】実施例２における遅延サイクル数算出の過程を示す説明図である。
【図１６】実施例３におけるＲＴＬ記述を示す説明図である。
【図１７】実施例３における遅延サイクル数算出の過程を示す説明図である。
【図１８】実施例４におけるＲＴＬ記述を示す説明図である。
【図１９】実施例４のＲＴＬ記述に含まれる依存関係を示す説明図である。
【図２０】実施例４における依存関係パスの構成を示す説明図である。
【図２１】依存関係パスの分離例を示す説明図である。
【図２２】パス１における遅延サイクル数算出の過程を示す説明図である。
【図２３】パス２における遅延サイクル数算出の過程を示す説明図である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、この発明にかかる検証支援プログラム、検証支援装置および検証支援方法の好適な実施の形態を詳細に説明する。
【００１３】
図１は、本実施の形態にかかる検証支援処理の一例を示す説明図である。図１のように、本実施の形態では、検証支援装置１００によって、入力値１１０として調査対象変数（信号やレジスタ）１１１およびクロック信号名１１２と、それらを定義・参照しているＲＴＬのソースコード１１３が入力されると、調査対象変数１１１についての遅延サイクル数１２１を出力値１２０として出力する。
【００１４】
検証支援処理の手順としては、検証支援装置１００は、まず、調査対象変数１１１の依存関係を調査し（ステップＳ１０１）、もし依存関係が存在すれば依存元から依存先までの依存関係パス１３１を中間データ１３０として抽出する。このとき、検証支援装置１００は、依存関係が存在しなければそのまま処理を終了する。
【００１５】
図２は、ＲＴＬ記述における依存関係を示す説明図である。図２のソースコード２００は、対象回路のＲＴＬ記述の一部を表している。調査対象変数１１１の依存関係とは、ソースコード２００内の→で結ばれた代入文同士のように、依存元の左辺が依存先の右辺と共通する状態を意味する。
【００１６】
図３は、中間データを利用した遅延サイクル数の特定を示す説明図である。図３のように依存関係パス１３１は、有向グラフから構成される。有向グラフのノード名は、依存するレジスタ名・信号名に相当する。図３では、依存元ノードｉｎ０、中間信号ノードｒｅｇ０、依存先ノードｏｕｔ０が生成される。また、有向エッジは依存関係の方向を示している。また、依存関係パス１３１には、ノードの種類（依存元３０１、依存先３０３、中間信号３０２）とクロックドメインを表すラベルが付与されている。
【００１７】
図１の説明に戻り、検証支援装置１００は、ステップＳ１０１の調査によって依存関係があるか否かを判断し（ステップＳ１０２）、依存関係があれば（ステップＳ１０２：Ｙｅｓ）、依存関係パスを参照して、依存元から依存先までの遅延を算出する（ステップＳ１０３）。依存元から依存先までの遅延とは、依存元に入力された値が依存先の値に反映されるまでの時間である。なお、検証対象回路は、クロック信号に基づいて動作するため、遅延時間は、遅延サイクル数１２１の値と１クロック当たりの時間とから具体的な時間を特定することもできる。
【００１８】
なお、検証支援装置１００は、ステップＳ１０２において依存関係がないと判断された場合（ステップＳ１０２：Ｎｏ）、依存関係がない旨を結果として出力する（ステップＳ１０４）。一方、ステップＳ１０３において、遅延が算出された場合、検証支援装置１００は、出力値１２０として、遅延サイクル数１２１を出力する（ステップＳ１０４）。
【００１９】
本実施の形態にかかる検証支援処理では、図３に例示したように、依存関係を表すノードを有向グラフによって表現し、さらに、各ノードに依存関係パスに属する変数のクロックドメインを示すラベルを付与している。したがって、依存関係パス１３１を参照すれば、容易に、依存先のノードから依存元のノードへ辿りつき、その際に辿ったノードのクロックドメインが依存先ノードのクロックドメインと同一のものを検出することによって、遅延サイクル数１２１を特定することができる。
【００２０】
したがって、従来のように、２つの変数間の遅延時間を特定するために、シミュレーションなどの負荷の大きな処理を実行する必要がない。また、シミュレーションを行う場合と比較して、短時間で、依存元の変数の値が変化したとき、依存先の変数にその値がいつ反映される・影響を与えるか特定できる。また、ＲＴＬのソースコード１１３の記述内容から依存関係を特定して遅延サイクル数１２１を特定するため、コードレビューを実施する際の、検証対象が限定されない。したがって、検証者の検証能率の向上が期待できる。
【００２１】
以下に、上述したような検証支援処理を実現する検証支援装置１００の具体的な構成や処理内容について順に説明する。
【００２２】
（検証支援装置のハードウェア構成）
つぎに、検証支援装置１００のハードウェア構成について説明する。図４は、検証支援装置のハードウェア構成を示すブロック図である。図７において、検証支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）４０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０３と、磁気ディスクドライブ４０４と、磁気ディスク４０５と、光ディスクドライブ４０６と、光ディスク４０７と、通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０８と、入力デバイス４０９と、出力デバイス４１０と、を備えている。また、各構成部はバス４２０によってそれぞれ接続されている。
【００２３】
ここで、ＣＰＵ４０１は、検証支援装置１００の全体の制御を司る。ＲＯＭ４０２は、ブートプログラムや、検証支援プログラムなどの各種プログラムを記憶している。ＲＡＭ４０３は、ＣＰＵ４０１のワークエリアとして使用される。磁気ディスクドライブ４０４は、ＣＰＵ４０１の制御にしたがって磁気ディスク４０５に対するデータのリード／ライトを制御する。
【００２４】
磁気ディスク４０５は、磁気ディスクドライブ４０４の制御で書き込まれたデータを記憶する。なお、ＲＯＭ４０２には、検証支援プログラムによって生成されたアサーション情報や、アサーション情報と検証シナリオを用いたシミュレーション検証を実行する検証プログラムが記録されていてもよい。このような場合は、検証支援装置１００によって生成したアサーション情報に留まらず、実際の検証結果まで検証者に提供することができる。
【００２５】
光ディスクドライブ４０６は、ＣＰＵ４０１の制御にしたがって光ディスク４０７に対するデータのリード／ライトを制御する。光ディスク４０７は、光ディスクドライブ４０６の制御で書き込まれたデータを記憶したり、光ディスク４０７に記憶されたデータをコンピュータに読み取らせたりする。
【００２６】
通信インターフェース（以下、「Ｉ／Ｆ」と略する）４０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク４１１に接続され、このネットワーク４１１を介して他の装置に接続される。そして、通信Ｉ／Ｆ４０８は、ネットワーク４１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。通信Ｉ／Ｆ４０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２７】
入力デバイス４０９は、検証支援装置１００に対しての外部からの入力を受け付ける。入力デバイス４０９としては、具体的には、キーボード、マウスなどが挙げられる。
【００２８】
キーボードの場合、たとえば、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウスの場合、たとえば、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。また、ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２９】
出力デバイス４１０は、検証支援装置１００によって生成された検証シナリオや、検証シナリオによる検証結果などを出力する。出力デバイス４１０としては、具体的には、ディスプレイ、プリンタなどが挙げられる。
【００３０】
ディスプレイの場合、たとえば、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイとしてさらに、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。また、プリンタの場合、たとえば、画像データや文書データを印刷する。さらに、レーザプリンタやインクジェットプリンタを採用することができる。
【００３１】
（検証支援装置の機能的構成）
図５は、検証支援装置の機能的構成を示すブロック図である。検証支援装置１００は、指定部５０１と、検索部５０２と、検出部５０３と、出力部５０４と、算出部５０５と、抽出部５０６と、判断部５０７と、判定部５０８とを含む構成である。この制御部となる機能（指定部５０１〜判定部５０８）は、具体的には、たとえば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、または、通信Ｉ／Ｆ４０８により、その機能を実現する。
【００３２】
指定部５０１は、検証者や上位システムから、対象回路に関するハードウェア記述内の複数の変数の中から２つの変数の指定を受け付ける機能を有する。指定部５０１は、具体的には、依存関係のある２つの変数の指定を受け付ける。ここでは、便宜上、依存関係のある２つの変数のうち、依存元の変数を第１の変数とし、第１の変数の依存先となる変数を第２の変数として以下説明を行う。
【００３３】
また指定部５０１は、上述のような依存関係のある２つの変数以外にも、依存関係の有無が判然としない任意の２つの変数の指定を受け付けることもできる。指定部５０１が、任意の２つの変数の指定を受け付けた場合には、後述する抽出部５０６、判断部５０７および判定部５０８によって任意の２つの変数について依存関係を判定する処理が行われる。なお、指定された２つの変数は、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶される。
【００３４】
検索部５０２は、ハードウェア記述の中から第１の変数が依存元となり第２の変数が依存先となる第３の変数を検索する機能を有する。具体的には、検索部５０２は、ハードウェア記述に記述されている代入文に基づいて、変数同士の依存関係を特定することができる。したがって、検索部５０２は、指定部５０１によって指定された第１の変数を依存元とし、第２の変数を依存先とする第３の変数をハードウェア記述内の複数の変数の中から検索する。なお、検索結果は、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶される。
【００３５】
検出部５０３は、第３の変数の中からクロックドメインが同一になる変数を検出する機能を有する。具体的には、検出部５０３は検索部５０２によって検索された第３の変数の中から、第１または第２の変数とクロックドメインが同一の変数を検出する。なお、クロックドメインが同一か否かの判断は、ハードウェア記述に記述されているクロックドメインを参照すればよい。通常、ハードウェア記述には、クロックドメインを定義する定義文が記述されている。したがって、検出部５０３は、ハードウェア記述を参照することによって、各変数のクロックドメインを特定することができる。なお、検出結果は、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶される。
【００３６】
上述した機能に加えて、検出部５０３は、検索部５０２において名称とクロックドメインが一致する第３の変数が複数検索されている場合には、名称とクロックドメインが一致する複数の第３の変数を１つだけ検出する。検索部５０２では、代入文の記述によっては、同じ変数が第３の変数として複数検索されることがある。しかしながら、同じ変数の間では、信号の伝播は起こらない（必要ない）ため、これらの変数の間には、１クロックの遅延も発生しない（時間がかからない）。したがって、同じ変数に関しては、１つだけ検出することで、実際に信号の伝播が発生する変数のみを効率的に検知することができる。
【００３７】
また、検出部５０３は、第１または第２の変数に複数のクロックドメインが存在する場合、クロックドメインごとに、第３の変数の中から、第１または第２の変数とクロックドメインが同一の変数を検出することもできる。したがって、クロックドメインの種類ごとに、クロックドメインが同一の第３の変数を検出するため、クロックごと遅延時間を特定することができる。
【００３８】
出力部５０４は、検証支援装置１００によって生成された情報を出力する機能を有する。検証支援装置１００によって生成された情報として、具体的には、検出部５０３よって検出された検出結果が挙げられる。したがって、出力部５０４は、出力値１２０として、検出結果を出力する。出力形式としては、たとえば、出力デバイス４１０として用意されたディスプレイへの表示、プリンタへの印刷出力、通信Ｉ／Ｆ４０８による外部装置への送信がある。また、出力値を一旦、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶することとしてもよい。
【００３９】
算出部５０５は、依存関係のある２つの変数の依存元から依存先に信号が伝播する時間を算出する機能を有する。具体的には、算出部５０５は、検出部５０３によって検出された検出結果が示す第３の変数の数に応じて、第１の変数の値の変化が第２の変数の値に伝播するまでにかかる時間を算出することができる。なお、算出結果は、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶される。また、算出部５０５によって算出された算出結果は、出力部５０４から出力値１２０として出力される。
【００４０】
以上説明した各機能では、事前に依存関係があるとわかっている２つの変数について処理が行われていたが、検証支援装置１００では、依存関係の有無が判然としない任意の２つの変数についても同等の処理を行うことができる。
【００４１】
検証支援装置１００は、指定部５０１によって、依存関係の有無が判然としない任意の２つの変数が指定された場合には、以下に説明する機能部（抽出部５０６、判断部５０７および判定部５０８）によって、依存関係の有無を判定することができる。
【００４２】
抽出部５０６は、ハードウェア記述の中から所定の代入文を抽出する機能を有する。具体的には、抽出部５０６は、ハードウェア記述内の複数の変数の中から、任意の２つの変数の指定を受け付けると、ハードウェア記述に記述された代入文の中から任意の２つの変数を用いた代入文と、この代入文によって記述されている任意の２つの変数以外の変数を用いた他の代入文とを抽出する。すなわち、抽出部５０６ではハードウェア記述の中から、任意の２つの変数の変化が影響する可能性のある代入文をすべて抽出している。なお、抽出結果は、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶される。
【００４３】
判断部５０７は、条件式が所定の要件を満たすか否かを判断する機能を有する。具体的には、判断部５０７は、抽出部５０６によって抽出された代入文の中のいずれかの代入文に含まれる変数が、それぞれ抽出された代入文の中の他の代入文に記述されているか否かを判断する。なお、判断結果は、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶される。
【００４４】
判定部５０８は、２つの変数間の依存関係の有無を判定する機能を有する。具体的には、判定部５０８は、判断部５０７の判断結果に基づいて、指定部５０１によって指定された任意の２つの変数に依存関係があるか否かを判定する。なお、判定結果は、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶される。そして、検索部５０２では、判定部５０８によって依存関係があると判定された場合に、任意の２つの変数を、第１の変数と第２の変数として、ハードウェア記述の複数の変数の中から第３の変数を検索する。
【００４５】
（検証支援処理の手順）
図６は、検証支援処理の手順を示すフローチャートである。図６のフローチャートは、依存元の変数の値の変化が依存先の変数の値に反映されるまでの時間（遅延時間）を把握したい２つの変数の指定を受け付けると、２つの変数の間の信号を伝播させる変数を検出して、遅延時間の算出を可能にするまでの手順を示している。図６の各処理を実行することによって、依存元の変数に入力された信号がどの変数を経由し、どのようなクロックに基づいて、依存先へ伝播するかを把握することができる。
【００４６】
図６において、検証支援装置１００は、まず、指定部５０１において、２つの変数が指定されたか否かを判断する（ステップＳ６０１）。検証支援装置１００は、ステップＳ６０１において、２つの変数が指定されるまで待機状態となる（ステップＳ６０１：Ｎｏのループ）。
【００４７】
その後、検証支援装置１００は、２つの変数が指定されると（ステップＳ６０１：Ｙｅｓ）、指定された２つの変数が依存関係のある変数か否かを判断する（ステップＳ６０２）。指定部５０１では、依存関係のある２つの変数、もしくは、任意の２つの変数の指定が受け付けられる。したがって、検証支援装置１００は、依存関係のある２つの変数が指定されていれば、依存関係のある変数であると判断し（ステップＳ６０２：Ｙｅｓ）、任意の２つの変数が指定されていれば、依存関係のある変数ではない（ステップＳ６０２：Ｎｏ）と判断する。なお、ステップＳ６０２における依存関係のある変数ではないとの判断結果は、依存関係の有無が不明であることを意味しており、実際に任意の２つの変数が依存関係にあるかは問わない。
【００４８】
検証支援装置１００は、ステップＳ６０２において、依存関係のある変数であると判断された場合（ステップＳ６０２：Ｙｅｓ）、ステップＳ６０５の処理に移行する。一方、依存関係のある変数ではないと判断された場合（ステップＳ６０２：Ｎｏ）、検証支援装置１００は、抽出部５０６、判断部５０７および判定部５０８によって、指定された２つの変数についての依存関係の有無を判定する（ステップＳ６０３）。そして、検証支援装置１００は、ステップＳ６０３において、依存関係があると判定されたか否かを判断する（ステップＳ６０４）。
【００４９】
その後、検証支援装置１００は、ステップＳ６０２もしくはステップＳ６０４において、２つの変数に依存関係があると判定されると（ステップＳ６０２もしくはステップＳ６０４：Ｙｅｓ）、検索部５０２によって、ハードウェア記述の中から第３の変数を検索する（ステップＳ６０５）。第３の変数とは、上述したように、第１の変数を依存元とし、第２の変数を依存先とするすべての変数を意味する。したがって、ハードウェア記述に記述されている代入文に応じて、第３の変数として検索される変数の数は異なる。
【００５０】
そして、検証支援装置１００は、検出部５０３によって、ステップＳ６０５において、検索された変数の中からクロックドメインが同一となる第３の変数を検出する（ステップＳ６０６）。検証支援装置１００は、ステップＳ６０６による検出結果を出力部５０４から出力して（ステップＳ６０７）、一連の処理を終了する。
【００５１】
検証支援装置１００は、算出部５０５を利用することによって、検出部５０３の検出結果に基づいて、第１の変数の値の変化が第２の変数の値に伝播するまでにかかる時間を算出することもできる。上述のような場合、検証支援装置１００は、算出結果を出力部５０４から出力して、一連の処理を終了する。また、検証支援装置１００は、ステップＳ６０４において、任意の２つの変数に依存関係がないと判定された場合（ステップＳ６０４：Ｎｏ）、出力部５０４から依存関係がない旨を出力して（ステップＳ６０８）、一連の処理を終了する。
【００５２】
つぎに、上述した検証支援処理における依存関係の調査と、検知結果を利用した遅延サイクル数の算出について詳しく説明する。
【００５３】
（依存関係の調査）
図７は、依存関係の調査の手順を示す説明図である。まず、２つの変数の依存関係の調査について説明する。図７のように、検証支援装置１００は、ＲＴＬのソースコード１１３からパーザーにＲＴＬソースコードの構造化を行う（ステップＳ７０１）。ステップＳ７０１の構造化によって、パーズツリー７００が生成される。その後、検証支援装置１００は、調査対象変数１１１とクロック信号名１１２とに基づいて、パーズツリー７００の中から検査したい変数を探索する（ステップＳ７０２）。
【００５４】
そして、検証支援装置１００は、検査したい変数がＲＴＬのソースコード１１３の中に存在したか否かを判断する（ステップＳ７０３）。ステップ７０３において、変数が存在する場合（ステップＳ７０３：Ｙｅｓ）、検証支援装置１００は、依存関係探索の処理へ移行する（ステップＳ７０４）。なお、ステップＳ７０４の依存関係探索の処理によって、依存関係パス１３１が生成される。なお、ステップＳ７０４の依存関係探索については詳しく後述する。一方、変数が存在しない場合（ステップＳ７０３：Ｎｏ）、検証支援装置１００は、エラーメッセージを表示させ（ステップＳ７０５）、一連の処理を終了する。
【００５５】
（依存関係探索処理）
図８−１および図８−２は、依存関係探索処理の手順を示すフローチャートである。図８−１および図８−２のフローチャートは、２つの変数について依存関係を検索する手順を示している。図８−１および図８−２の各処理を実行することによって、指定された２つの変数の依存関係の有無と、依存関係がある場合には、依存元から依存先へのパス上に存在するノードを検索するとともに、どのようなノードかを表すラベルを付与することができる。
【００５６】
図８−１において検証支援装置１００は、まず、対象回路のハードウェア記述のパーズツリー（図１１参照）の代入式の中から依存元の変数の参照箇所を特定する（ステップＳ８０１）。その後、ステップＳ８０１において特定された依存元の変数の参照箇所が、実際にパーズツリーに存在するか否かを判断する（ステップＳ８０２）。
【００５７】
ステップＳ８０２において、依存元の変数の参照箇所が、実際にパーズツリーに存在すると判断された場合（ステップＳ８０２：Ｙｅｓ）、検証支援装置１００は、依存関係パスのノード（Ｎ１）を作成し、ラベルにクロックドメインと信号の種類を付与する（ステップＳ８０３）。さらに、検証支援装置１００は、参照されている代入文の左辺の変数のノード（Ｎ２）を作成し、ラベルにクロックドメインと信号の種類を付与する（ステップＳ８０４）。一方、ステップＳ８０２において、依存元の変数の参照箇所が、実際にパーズツリーに存在しないと判断された場合（ステップＳ８０２：Ｎｏ）、検証支援装置１００は、図８−２のステップＳ８１１の処理に移行する。
【００５８】
その後、検証支援装置１００は、作成したノードＮ１からノードＮ２へ有向エッジを作成し（ステップＳ８０５）、左辺と依存先の変数が同じか否かを判断する（ステップＳ８０６）。ステップＳ８０６において、左辺と依存先の変数が同じと判断された場合（ステップＳ８０６：Ｙｅｓ）、検証支援装置１００は、図８−２のステップＳ８１１の処理に移行する。
【００５９】
一方、ステップＳ８０６において、左辺と依存先の変数が同じではないと判断された場合（ステップＳ８０６：Ｎｏ）、検証支援装置１００は、パーズツリーの代入文の中から左辺の変数を右辺で参照する箇所を特定する（ステップＳ８０７）。そして、検証支援装置１００は、ステップＳ８０７において特定された左辺の変数を参照する箇所があるか否かを判断する（ステップＳ８０８）。
【００６０】
ステップＳ８０８において、左辺の変数を参照する箇所があると判断された場合（ステップＳ８０８：Ｙｅｓ）、検証支援装置１００は、さらに、複数の参照箇所がある場合、それぞれの参照箇所を処理対象に設定して（ステップＳ８０９）、ステップＳ８０２の処理に移行する。一方、ステップＳ８０８において、左辺の変数を参照する箇所がないと判断された場合（ステップＳ８０８：Ｎｏ）、検証支援装置１００は、依存関係がない旨を出力して（ステップＳ８１０）、一連の処理を終了する。
【００６１】
続いて、図８−２において、検証支援装置１００は、まず、依存元ノードからパスごとに有向グラフを参照して（ステップＳ８１１）、連続して同一変数を表すノードがあるか否かを判断する（ステップＳ８１２）。ステップＳ８１２において、連続して同一変数を表すノードがあると判断された場合（ステップＳ８１２：Ｙｅｓ）、検証支援装置１００は、さらに、ノードが同一代入文の左辺・右辺に属するか否かを判断する（ステップＳ８１３）。
【００６２】
ステップＳ８１３において、ノードが同一代入文の左辺・右辺に属さないと判断された場合（ステップＳ８１３：Ｎｏ）、ノードを統合できるため、検証支援装置１００は、ノードを統合するとともにラベル処理を行い（ステップＳ８１４）、ステップＳ８１５の処理に移行する。一方、ステップＳ８１２において、連続して同一変数を表すノードがないと判断された場合（ステップＳ８１２：Ｎｏ）、ステップＳ８１３において、ノードが同一代入文の左辺・右辺に属すると判断された場合（ステップＳ８１３：Ｙｅｓ）にも、検証支援装置１００は、ステップＳ８１５の処理に移行する。
【００６３】
検証支援装置１００は、ステップＳ８１５にて、参照していないノードがあるか否かを判断し（ステップＳ８１５）、参照していないノードがあると判断された場合（ステップＳ８１５：Ｙｅｓ）、ステップＳ８１１の処理に戻り、残りのノードについて適宜ラベル処理を施す。検証支援装置１００は、ステップＳ８１５において、参照していないノードがないと判断されると（ステップＳ８１５：Ｎｏ）、すべてのノードについてのラベル処理が終了したとして、一連の処理を終了する。
【００６４】
以上説明した、処理を実行することによって、ソースコード２００に記述された２つの変数の依存関係を表す中間データ１３０が生成される。
【００６５】
（遅延サイクル数の算出処理）
図９は、遅延サイクル数の算出処理の手順を示すフローチャートである。図９のフローチャートは、指定された依存元から依存先までの信号の伝播に要するクロックをカウントする手順を示している。図９の各処理を実行することによって、依存関係のある２つの変数間の遅延サイクル数を算出することができる。
【００６６】
図９において、検証支援装置１００は、まず、処理対象パスを設定する（ステップＳ９０１）。その後、検証支援装置１００は、入力されたクロック信号の数と同じ数のカウンタを用意する（ステップＳ９０２）。ステップＳ９０２において、入力されたクロック信号の数とは、処理対象パスのクロックドメインの種類を意味する。また、ステップＳ９０２にて用意するカウンタは実際のハードウェアで用意してもよいし、ソフトウェアで実現したカウンタを用意してもよい。なお、用意されたカウンタにはそれぞれ対応するクロックドメインが設定される。
【００６７】
その後、検証支援装置１００は、ステップＳ９０２において用意した全カウンタを初期化し（ステップＳ９０３）、その後、依存先ノードを探索する（ステップＳ９０４）。そして、検証支援装置１００は、ステップＳ９０４の探索によって求めたノードのラベルにクロックドメインが存在するか否かを判断する（ステップＳ９０５）。
【００６８】
ステップＳ９０５において、求めたノードのラベルにクロックドメインが存在すると判断された場合（ステップＳ９０５：Ｙｅｓ）、検証支援装置１００は、着目ノードのラベルに付与されたクロックに該当するカウンタの値に１を加算して（ステップＳ９０６）、ステップＳ９０８の処理に移行する。一方、求めたノードのラベルにクロックドメインが存在しないと判断された場合（ステップ９０５：Ｎｏ、検証支援装置１００は、遅延が発生しないため、カウンタの値を保持して（ステップＳ９０７）、ステップＳ９０８の処理に移行する。
【００６９】
ステップＳ９０７もしくはステップＳ９０６の処理が完了すると、検証支援装置１００は、着目ノードを基点にエッジを逆方向へ参照し、つぎのノードを特定する（ステップＳ９０８）。その後、検証支援装置１００は、ステップＳ９０８によって求められたノードは依存元ノードであるか否かを判断する（ステップＳ９０９）。求めたノードが依存元ノードか否かはノードに付与されているラベルを参照すればよい。
【００７０】
ステップＳ９０９において、求められたノードは依存元ノードではないと判断された場合（ステップＳ９０９：Ｎｏ）、検証支援装置１００は、依存元ノードに至るまでに他のノード（中間信号）が存在するため、ステップＳ９０５の処理に戻り、つぎのノードが検索される。
【００７１】
一方、ステップＳ９０９において、求められたノードは依存元ノードであると判断された場合（ステップＳ９０９：Ｙｅｓ）、検証支援装置１００は、現在処理対象パスとなっているパスについて処理は終了したため、未処理パスがあるか否かを判断する（ステップＳ９１０）。なお、ステップＳ９０９において、求められたノードは依存元ノードであると判断されたことをトリガに、カウンタの値がクロックドメインごとの遅延サイクル数が出力される。
【００７２】
ステップＳ９１０において、未処理パスがあると判断された場合（ステップＳ９１０：Ｙｅｓ）、検証支援装置１００は、ステップＳ９０１に戻り、未処理パスを次の処理対象パスに設定して、遅延サイクル数のカウントを開始する。ステップＳ９１０において、未処理パスがないと判断された場合（ステップＳ９１０：Ｎｏ）、検証支援装置１００は、そのまま一連の処理を終了する。
【００７３】
以上説明したように、検証支援装置１００は、依存関係パスを参照して、処理対象パスを設定して順次遅延サイクル数の算出を行う。また、カウンタはクロックドメインの種類ごとに用意される。したがって、依存関係パスとして複数パス存在する場合や、複数のクロックドメインが存在する場合であっても、正確にパスごとの遅延サイクル数を算出することができる。
【００７４】
つぎに、具体的なＲＴＬ記述を例示して、実際に指定された２つの変数間の遅延クロック数を算出する実施例１〜４について説明する。
【００７５】
（実施例１）
図１０は、実施例１におけるＲＴＬ記述を示す説明図である。実施例１では、図１０のソースコード１０００を対象に依存元の変数ｉｎ０の値が依存先の変数ｏｕｔ０の値へ影響を与えるまでの時間差を調査したい。そこで、まず、ソースコード１０００から変数ｉｎ０→変数ｏｕｔ０のパスを検索するための処理を行う。
【００７６】
図１１は、ＲＴＬ記述のパーズツリーを示すデータ構成図である。実施例１では、ソースコード１０００（図１０参照）から変数ｉｎ０→変数ｏｕｔ０のパスを特定するための手法として、パーズツリーを利用する。パーズツリーは、ソースコード１０００の記述内容をツリー構造へ変換した一例を表している。ツリー構造への変換には、各種専用ツールを利用することができる。ソースコード１０００をツリー構造に変換することによって、効率的に変数ｉｎ０→変数ｏｕｔ０のパスを特定することができる。
【００７７】
図１２は、実施例１における依存関係パスの構成を示す説明図である。図１１のパーズツリーを参照した結果、変数ｉｎ０→変数ｏｕｔ０の間のノード（上述の第３の変数）として中間信号ｒｅｇ０を検索することができる。したがって、変数ｉｎ０→中間信号ｒｅｇ０→中間信号ｒｅｇ０→変数ｏｕｔ０というパスが特定される。
【００７８】
また、抽出されたノードにラベル１２０１〜１２０４を付与して依存関係パスを生成すると、図１２の上段のような構成になる。中間信号ｒｅｇ０は、２つ検索されている。そのうち、ラベル１２０２が付与された中間信号ｒｅｇ０は、図１０の１００１の代入文の左辺の変数に相当する。また、ラベル１２０３が付与された中間信号ｒｅｇ０は、図１０の１００２の代入文の右辺の変数に相当する。
【００７９】
図８−１，８−２の処理において、説明したように、上述した２つの中間信号ｒｅｇ０は実質同じ変数を表している。すなわち、２つの中間信号ｒｅｇ０は１つの中間信号ｒｅｇ０に統合でき、結果として、図１２の下段のような構成になる。なお、統合された、中間信号ｒｅｇ０には、図１２のように、あらたなラベル１２０５が付与されてもよいし、統合前のいずれか一方のラベル１２０２，１２０３を引き継いでもよい。そして、後述する、遅延サイクル数の算出には、中間信号ｒｅｇ０が統合された依存関係パスが利用される。
【００８０】
図１３は、実施例１における遅延サイクル数算出の過程を示す説明図である。図１３のように、まず、過程１では、依存先の変数ｏｕｔ０（ｃｌｋ）から中間信号の変数ｒｅｇ０（ｃｌｋ）の間に、１クロックを要する。そして、過程２では、中間信号の変数ｒｅｇ０（ｃｌｋ）から依存元の変数ｉｎ０（ｃｌｋ）の間に、１クロックを要する。したがって、過程３では、変数ｉｎ０から変数ｏｕｔ０までの遅延サイクル数としてクロックドメインｃｌｋにおいて、２クロックが算出される。
【００８１】
以上説明したように、実施例１では、検証対象となる回路のＲＴＬ記述のソースコード１０００に対して、遅延サイクル数を特定したい２つの変数が指定されると、ソースコード１０００を変換したパーズツリーを参照してパスを特定する。特定されたパスは依存関係パスとしてノードにラベルが付与された中間データとして提供される。したがって、ラベルの記述内容を参照することによって、容易かつ、正確に遅延サイクル数を算出することができる。
【００８２】
（実施例２）
図１４は、実施例２におけるＲＴＬ記述を示す説明図である。実施例２では、図１４のソースコード１４００を対象に依存元の変数ｉｎ０の値が依存先の変数ｏｕｔ０の値へ影響を与えるまでの時間差を調査したい。変数ｉｎ０から変数ｏｕｔ０までのパスを参照すると、変数ｉｎ０、中間信号ｒｅｇ０、変数ｏｕｔ０のノードが検索される。そして、ソースコード１４００の記述に基づいて、各ノードにはラベル１４０１〜１４０３が付与される。なお、図１４は、便宜上、ソースコード１４００内に依存関係パスを表示したが、実際のソースコード１４００上に表示されているわけではない。
【００８３】
図１５は、実施例２における遅延サイクル数算出の過程を示す説明図である。図１５のように、まず、過程１では、依存先の変数ｏｕｔ０（ｃｌｋ）から中間信号の変数ｒｅｇ０（ｃｌｋ無し）の間に、１クロックを要する。そして、過程２では、中間信号の変数ｒｅｇ０（ｃｌｋ無し）から依存元の変数ｉｎ０（ｃｌｋ）の間に、遅延クロックは発生しない。したがって、過程３では、変数ｉｎ０から変数ｏｕｔ０までの遅延サイクル数としてクロックドメインｃｌｋにおいて、１クロックが算出される。
【００８４】
以上説明したように、実施例２では、実施例１と同様に、依存元から依存先の間のノードについて、付与されたラベルを参照して遅延サイクル数を算出するが、ラベル１４０２のように、中間信号にクロックドメインが設定されていない場合には、遅延クロックは発生しないため、遅延サイクル数に影響しない。したがって、実際のハードウェアの動作を忠実に把握して正確な遅延サイクル数を算出することができる。
【００８５】
（実施例３）
図１６は、実施例３におけるＲＴＬ記述を示す説明図である。実施例３では、図１６のソースコード１６００を対象に依存元の変数ｉｎ０の値が依存先の変数ｏｕｔ０の値へ影響を与えるまでの時間差を調査したい。ところが、実施例３のソースコード１６００の場合、定義文１６０１に記述されているように、クロックドメインとしてｃｌｋ０，ｃｌｋ１の２種類が利用されている。
【００８６】
図１７は、実施例３における遅延サイクル数算出の過程を示す説明図である。図１７のように、まず、過程１では、依存先の変数ｏｕｔ０（ｃｌｋ１）から中間信号の変数ｒｅｇ０（ｃｌｋ０）の間に、クロックドメインｃｌｋ１において１クロックを要する。そして、過程２では、中間信号の変数ｒｅｇ０（ｃｌｋ０）から依存元の変数ｉｎ０（ｃｌｋ０）の間に、クロックドメインｃｌｋ０において１クロックを要する。したがって、過程３では、変数ｉｎ０から変数ｏｕｔ０までの遅延サイクル数としてクロックドメインｃｌｋ０，ｃｌｋ１それぞれにおいて、１クロックが算出される。
【００８７】
以上説明したように、実施例３では、依存元から依存先へのパス上に存在する各ノードに異なるクロックドメインが設定されている場合であっても、ラベルのクロックドメインの種類ごとにクロック数を算出することによって、クロックドメインごとに正確な遅延時間を算出することができる。
【００８８】
（実施例４）
図１８は、実施例４におけるＲＴＬ記述を示す説明図である。実施例４では、図１８のソースコード１８００を対象に依存元の変数ｉｎ０の値が依存先の変数ｏｕｔ０の値へ影響を与えるまでの時間差を調査したい。ところが、実施例４のソースコード１８００の場合、依存元から依存先まで複数のパスが存在している。
【００８９】
図１９は、実施例４のＲＴＬ記述に含まれる依存関係を示す説明図である。また、図２０は、実施例４における依存関係パスの構成を示す説明図である。図１９のように、ソースコード１８００内には、変数ｉｎ０から変数ｏｕｔ０までのパスの途中には、代入文２から代入文３へ通るパスと、代入文２から代入文５へ通るパスとが存在する。ソースコード１８００から抽出した各ノードにラベル２００１〜２００５を付与して依存関係パスを作成すると、図２０のような構成になる。複数のパスが存在する場合、各パスを区別するためのパス名を設定し（図２０の例ではパス１，２）、各ノードのラベル２００１〜２００５にパス名を追加する。
【００９０】
図２１は、依存関係パスの分離例を示す説明図である。各ラベルにパス名が追加されると、各ノード２００１〜２００５は、パス名に基づいて分離される。したがって、パス１を経由する、ノード２００１→ノード２００２→ノード２００３→ノード２００４と、パス２を経由するノード２００１→ノード２００２→ノード２００４→ノード２００５とに分離される。そして、分離されたパスごとに遅延サイクル数を算出する。なお、実施例４の場合には、依存元から依存先へ順に遅延サイクル数を算出する手法を採用して説明する。
【００９１】
図２２は、パス１における遅延サイクル数算出の過程を示す説明図である。図２２のように、パス１では、過程１によって、依存元の変数ｉｎ０（代入文２）から中間信号の変数ｒｅｇ０（代入文２）へ１クロックを要し、過程２によって、中間信号の変数ｒｅｇ０（代入文２）から依存先の変数ｏｕｔ０（代入文４）へ１クロックを要する。したがって、過程３によって変数ｉｎ０（代入文２）から変数ｏｕｔ０（代入文４）までの遅延サイクル数として２クロックが算出される。
【００９２】
図２３は、パス２における遅延サイクル数算出の過程を示す説明図である。図２３のように、パス２では、過程１によって、依存元の変数ｉｎ０（代入文２）から中間信号の変数ｒｅｇ０（代入文２）へ１クロックを要し、過程２によって、中間信号の変数ｒｅｇ０（代入文２）から依存先の変数ｏｕｔ０（代入文５）へ１クロックを要する。したがって、変数ｉｎ０（代入文２）から変数ｏｕｔ０（代入文５）までの遅延サイクル数として２クロックが算出される。
【００９３】
以上説明したように、依存元から依存先へ複数のパスが存在する場合であっても、ラベルにパスを区別するための情報（実施例４の場合はパス名）を追加すれば、容易にパスごとにノードを分離することができる。分離後の各パスは実施例１〜３と同様の手順によって遅延サイクル数を算出することができる。
【００９４】
以上説明したように、検証支援プログラム、検証支援装置および検証支援方法によれば、ハードウェア記述の中から第１の変数が依存元となり第２の変数が依存先となる第３の変数を検索して、第１または第２の変数とクロックドメインが同一の第３の変数を検出する。検出された第３の変数は、依存関係にある第１の変数から第２の変数まで信号が伝播する際に経由する変数である。したがって、検出された第３の変数から、第１の変数から第２の変数にかかる時間を、シミュレーションを実行することなく正確に特定することができる。
【００９５】
また、上記技術では、さらに、実質同一となる変数を統合することによって、第１の変数からの入力を伝播する第３の変数の数を正確に検知することができる。
【００９６】
また、上記技術では、さらに、検出された各変数が複数のクロックドメインに属している場合には、各クロックドメインについて第３の変数を検出する。したがって、クロックドメインごとに検出された第３の変数から、第１の変数から第２の変数にかかる時間を特定することができる。
【００９７】
また、上記技術では、さらに、第１または第２の変数とクロックドメインが同一の第３の変数の検知結果から、第１の変数から第２の変数まで信号が伝播するまでの時間を算出する機能を備えることもできる。したがって、検証者による効率的な検証を支援することができる。
【００９８】
また、上記技術では、さらに、依存関係の有無が判別しない２つの変数が指定された場合に、依存関係の有無を判断する機能を備えることもできる。そして、依存関係があると判断された場合には、そのまま処理を行い、依存関係がないと判断された場合には、依存関係がない旨を出力することもできる。したがって、検証者が依存関係を把握していなかった変数同士についても適切な検証を行うことができる。また、依存関係がない旨を出力することによって、検証者に、対象回路における依存関係の有無を正しく把握させることができる。
【００９９】
なお、本実施の形態で説明した検証支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本検証支援プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検証支援プログラムは、インターネットなどのネットワークを介して配布してもよい。
【０１００】
また、本実施の形態で説明した検証支援装置１００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述した検証支援装置１００の機能（指定部５０１〜判定部５０８）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、検証支援装置１００を製造することができる。
【０１０１】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１０２】
（付記１）対象回路を動作させるクロックドメインごとに変数間の依存関係が記述されたハードウェア記述内の複数の変数の中から、第１の変数と当該第１の変数の依存先となる第２の変数との指定を受け付ける指定工程と、
前記複数の変数の中から、前記指定工程によって指定された第１の変数を依存元とし前記第２の変数を依存先とする第３の変数を検索する検索工程と、
前記ハードウェア記述に記述されている前記第１または第２の変数が属するクロックドメインを参照して、前記検索工程によって検索された第３の変数の中から、前記第１または第２の変数とクロックドメインが同一の変数を検出する検出工程と、
前記検出工程によって検出された検出結果を出力する出力工程と、
をコンピュータに実行させることを特徴とする検証支援プログラム。
【０１０３】
（付記２）前記検出工程では、前記検索工程によって、名称とクロックドメインが一致する複数の変数が第３の変数として検索されている場合、前記名称とクロックドメインが一致する複数の変数を１つだけ検出することを特徴とする付記１に記載の検証支援プログラム。
【０１０４】
（付記３）前記検出工程では、前記第１または第２の変数に複数のクロックドメインが存在する場合、クロックドメインごとに、前記第３の変数の中から、前記第１または第２の変数とクロックドメインが同一の変数を検出することを特徴とする付記１または２に記載の検証支援プログラム。
【０１０５】
（付記４）前記検出工程では、前記検索工程によって、前記第３の変数として、前記第１の変数と前記第２の変数との間の異なるパスを経る変数が検索された場合、前記異なるパスごとに検索された前記第３の変数が、前記第１または第２の変数とクロックドメインが同一の変数を検出することを特徴とする付記１〜３のいずれか一つに記載の検証支援プログラム。
【０１０６】
（付記５）前記コンピュータに、
前記検出工程によって検出された検出結果に基づいて、前記第１の変数の値の変化が第２の変数の値に伝播するまでにかかる時間を算出する算出工程を実行させ、
前記出力工程は、
前記算出工程によって算出された算出結果を出力することを特徴とする付記１〜４のいずれか一つに記載の検証支援プログラム。
【０１０７】
（付記６）前記指定工程によって、前記ハードウェア記述内の複数の変数の中から、前記第１の変数と前記第２の変数として任意の２つの変数の指定を受け付けると、前記ハードウェア記述に記述された代入文の中から前記任意の２つの変数を用いた代入文と、当該代入文によって記述されている前記任意の２つの変数の他の変数を用いた他の代入文とを抽出する抽出工程と、
前記抽出工程によって抽出された代入文の中のいずれかの代入文に含まれる変数が、それぞれ前記抽出された代入文の中の他の代入文に記述されているか否かを判断する判断工程と、
前記判断工程による判断結果に基づいて、前記任意の２つの変数に依存関係があるか否かを判定する判定工程と、をコンピュータに実行させ、
前記検索工程では、前記判定工程によって依存関係があると判定された場合に、前記任意の２つの変数を、前記第１の変数と第２の変数として前記第３の変数を前記複数の変数の中から検索することを特徴とする付記１〜５のいずれか一つに記載の検証支援プログラム。
【０１０８】
（付記７）前記出力工程では、前記判定工程によって前記任意の２つの変数に依存関係がないと判定された場合、前記判定工程による判定結果を出力することを特徴とする付記１〜６のいずれか一つに記載の検証支援プログラム。
【０１０９】
（付記８）対象回路を動作させるクロックドメインごとに変数間の依存関係が記述されたハードウェア記述内の複数の変数の中から、第１の変数と当該第１の変数の依存先となる第２の変数との指定を受け付ける指定手段と、
前記複数の変数の中から、前記指定手段によって指定された第１の変数を依存元とし前記第２の変数を依存先とする第３の変数を検索する検索手段と、
前記ハードウェア記述に記述されている前記第１または第２の変数が属するクロックドメインを参照して、前記検索手段によって検索された第３の変数の中から、前記第１または第２の変数とクロックドメインが同一の変数を検出する検出手段と、
前記検出手段によって検出された検出結果を出力する出力手段と、
を備えることを特徴とする検証支援装置。
【０１１０】
（付記９）コンピュータが、
対象回路を動作させるクロックドメインごとに変数間の依存関係が記述されたハードウェア記述内の複数の変数の中から、第１の変数と当該第１の変数の依存先となる第２の変数との指定を受け付ける指定工程と、
前記複数の変数の中から、前記指定工程によって指定された第１の変数を依存元とし前記第２の変数を依存先とする第３の変数を検索する検索工程と、
前記ハードウェア記述に記述されている前記第１または第２の変数が属するクロックドメインを参照して、前記検索工程によって検索された第３の変数の中から、前記第１または第２の変数とクロックドメインが同一の変数を検出する検出工程と、
前記検出工程によって検出された検出結果を出力する出力工程と、
を実行することを特徴とする検証支援方法。
【符号の説明】
【０１１１】
１００  検証支援装置
１１０  入力値
１１１  調査対象変数
１１２  クロック信号名
１１３  ＲＴＬのソースコード
１３０  中間データ
１３１  依存関係パス
１２０  出力値
１２１  遅延サイクル数
５０１  指定部
５０２  検索部
５０３  検出部
５０４  出力部
５０５  算出部
５０６  抽出部
５０７  判断部
５０８  判定部
【図１】
2011237888.tif 000003
【図２】
2011237888.tif 000004
【図３】
2011237888.tif 000005
【図４】
2011237888.tif 000006
【図５】
2011237888.tif 000007
【図６】
2011237888.tif 000008
【図７】
2011237888.tif 000009
【図８−１】
2011237888.tif 000010
【図８−２】
2011237888.tif 000011
【図９】
2011237888.tif 000012
【図１０】
2011237888.tif 000013
【図１１】
2011237888.tif 000014
【図１２】
2011237888.tif 000015
【図１３】
2011237888.tif 000016
【図１４】
2011237888.tif 000017
【図１５】
2011237888.tif 000018
【図１６】
2011237888.tif 000019
【図１７】
2011237888.tif 000020
【図１８】
2011237888.tif 000021
【図１９】
2011237888.tif 000022
【図２０】
2011237888.tif 000023
【図２１】
2011237888.tif 000024
【図２２】
2011237888.tif 000025
【図２３】
2011237888.tif 000026