(57)【要約】【課題】多相クロックにより動作するハードウェアをサイクル精度レベルで検証可能なモデルを汎用プログラミング記述として生成する。【解決手段】多相クロックにより動作するハードウェアの動作記述４７を構文解析・字句解析処理手段４１により解析し、クロックドメイン分割処理手段４２によりハードウェアを各クロック系統毎にクロックドメインに分割して、ＣＤＦＧ生成手段４３により各クロックドメイン毎にＣＤＦＧ４８Ａ、４８Ｂ、・・を生成する。そのＣＤＦＧ４８Ａ、４８Ｂ、・・を、スケジューリング・ステート割り振り手段４４で各ブロックのクロック周波数によりスケジューリングしてステートに割り振り、サイクル精度モデル生成手段４５によりステート毎にハードウェアのサイクル精度モデルを汎用プログラミング言語により表現した記述として生成する。【選択図】図２
2008117318.tif 000002
【特許請求の範囲】
【請求項１】
多相クロックにより回路動作するハードウェアについて、構造に関する情報は含まず、処理動作のみが記述された動作記述から、該ハードウエアを各クロック系統毎のブロックに分割し、分割された各ブロック毎に動作合成処理を行う動作合成処理手段と、該動作合成処理されたデータを用いて該ハードウェアをサイクル精度レベルで検証可能なクロック精度モデルを生成するクロック精度モデル生成手段とを有するハードウェア検証用プログラミング記述生成装置。
【請求項２】
前記サイクル精度レベルで前記ハードウェアをシミュレーションする際に前記各クロック系統毎のブロックについて、前記クロック精度モデルの計算が行われる順番を制御するための制御モデルを生成するクロック制御モデル生成手段をさらに有する請求項１に記載のハードウェア検証用プログラミング記述生成装置。
【請求項３】
前記動作合成処理手段は、
前記ハードウェアの動作記述を解析して該ハードウェアの動作情報を得る動作記述解析手段と、
該ハードウェアの動作情報から該ハードウェアを前記各クロック系統毎にブロックに分割するクロックドメイン分割処理手段と、
該各クロック系統毎のブロックについて、該ハードウェアの動作記述から、該ハードウェアの動作がノードと該ノード間を接続する枝とを用いて表現されたコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段とを有する請求項１に記載のハードウェア検証用プログラミング記述生成装置。
【請求項４】
前記クロック精度モデル生成手段は、
前記動作合成処理されたデータとしてのコントロールデータフローグラフの各ノードを、該各ブロックのクロック周波数によりスケジューリングして各ステートに割り振るスケジューリング・ステート割り振り手段と、
該各ステート毎に、スケジューリング・ステート割り振り結果を用いて、該ハードウェアをサイクル精度により検証可能な動作モデルを前記クロック精度モデルとして生成するサイクル精度モデル生成手段とを有する請求項１または３に記載のハードウェア検証用プログラミング記述生成装置。
【請求項５】
前記クロック精度モデルおよび前記制御モデルのうちの少なくともいずれかを汎用プログラミング言語により表現された記述として生成する請求項１、２および４のいずれかに記載のハードウェア検証用プログラミング記述生成装置。
【請求項６】
前記クロック制御モデル生成手段は、前記各クロック系統毎のブロックについて前記クロック精度モデルの計算が実行される時刻を比較し、該計算が実行されるまでの時間が最も短い時間を選定すると共に、該各クロック系統毎のブロックの計算が実行されるブロックとして選定し、選定されたブロックについては次に該クロック精度モデルの計算が実行される時刻を当該ブロックにおけるクロック周期の値に更新し、当該ブロック以外のブロックについては該クロック精度モデルが計算されるまでの時間から該最も短い時間を減算し、順次同様に、計算が実行されるまでの時間が最も短い時間およびブロックの選定処理と、該クロック精度モデルの計算が実行される時刻を更新する処理とを繰り返す請求項２に記載のハードウェア検証用プログラミング記述生成装置。
【請求項７】
前記クロック制御モデル生成手段は、前記各クロック系統毎のブロックにおけるクロック周期の最大公約数となる時間を計算し、該各クロック系統毎のブロックについて前記クロック精度モデルの計算が実行される時刻を示すカウンタの値に該最大公約数となる時間を加算し、該各クロック系統毎のブロックにおけるクロック周期と該カウンタの値とが一致したブロックについては該クロック精度モデルの計算が実行されるブロックと判定して該カウンタの値を初期化し、それ以外のブロックについては該クロック精度モデルの計算が実行されないブロックと判定して該カウンタの値に該最大公約数となる時間を加算する処理を繰り返し行う請求項２に記載のハードウェア検証用プログラミング記述生成装置。
【請求項８】
前記クロック制御モデル生成手段は、前記ハードウェアの動作記述から前記各クロック系統毎に指定された回路動作が開始される時刻を解析し、該各クロック系統毎のブロックについてクロック精度モデルの計算が開始される時刻を制御する請求項２に記載のハードウェア検証用プログラミング記述生成装置。
【請求項９】
前記動作記述は、回路の機能単位でブロックに分割した形式により記述可能で、各機能ブロックに動作クロックを指定することが可能であり、該各機能ブロックを並列動作させることが指定可能とされている請求項１、３および８のいずれかに記載のハードウェア検証用プログラミング記述生成装置。
【請求項１０】
前記汎用プログラミング言語としてＣ言語が用いられている請求項５に記載のハードウェア検証用プログラミング記述生成装置。
【請求項１１】
前記クロックドメイン分割処理手段は、前記動作記述において、前記各ブロックの並列動作に関する記述と、該各ブロックに指定された動作クロックとに従って、前記各クロック系統毎に前記ハードウェアをブロックに分割する請求項３または９に記載のハードウェア検証用プログラミング記述生成装置。
【請求項１２】
前記クロックドメイン分割処理手段は、クロックドメイン分割処理の他に、前記各クロック系統毎のブロックについて前記クロック精度モデルの計算が行われる順番を制御するために用いる制御情報として、前記ブロックを示すクロックドメインの名前とクロック周期の値とによって構成されたクロックドメインの制御情報を作成する請求項３または１１に記載のハードウェア検証用プログラミング記述生成装置。
【請求項１３】
前記動作記述から、多相クロックにより回路動作するハードウェアを高位合成し、高位合成したハードウェアを、請求項１〜１２のいずれかに記載のハードウェア検証用プログラミング記述生成装置により生成されたハードウェア検証用プログラミング記述を用いて検証可能とする高位合成装置。
【請求項１４】
多相クロックにより回路動作するハードウェアについて、構造に関する情報は含まず、処理動作のみが記述された動作記述から、該ハードウエアを各クロック系統毎のブロックに分割し、分割された各ブロック毎に動作合成処理を行う動作合成処理工程と、該動作合成処理されたデータを用いて該ハードウェアをサイクル精度レベルで検証可能なクロック精度モデルを生成するクロック精度モデル生成工程とを有するハードウェア検証用プログラミング記述生成方法。
【請求項１５】
前記サイクル精度レベルで前記ハードウェアをシミュレーションする際に前記各クロック系統毎のブロックについて、前記クロック精度モデルの計算が行われる順番を制御するための制御モデルを生成するクロック制御モデル生成工程をさらに有する請求項１４に記載のハードウェア検証用プログラミング記述生成方法。
【請求項１６】
前記動作合成処理工程は、
前記ハードウェアの動作記述を解析して該ハードウェアの動作情報を得る動作記述解析工程と、
該ハードウェアの動作情報から該ハードウェアを前記各クロック系統毎にブロックに分割するクロックドメイン分割処理工程と、
該各クロック系統のブロックについて、該ハードウェアの動作記述から、該ハードウェアの動作がノードと該ノード間を接続する枝とを用いて表現されたコントロールデータフローグラフを生成するコントロールデータフローグラフ生成工程とを有する請求項１４に記載のハードウェア検証用プログラミング記述生成方法。
【請求項１７】
前記クロック精度モデル生成工程は、
前記動作合成処理されたデータとしてのコントロールデータフローグラフの各ノードを、前記各ブロックのクロック周波数によりスケジューリングして各ステートに割り振るスケジューリング・ステート割り振り工程と、
該各ステート毎に、スケジューリング・ステート割り振り結果を用いて、該ハードウェアをサイクル精度により検証可能な動作モデルを前記クロック精度モデルとして生成するサイクル精度モデル生成工程とを有する請求項１４または１６に記載のハードウェア検証用プログラミング記述生成方法。
【請求項１８】
前記クロック精度モデルおよび前記制御モデルのうちの少なくともいずれかを汎用プログラミング言語により表現された記述として生成する請求項１４、１５および１７のいずれかに記載のハードウェア検証用プログラミング記述生成装置。
【請求項１９】
前記クロック制御モデル生成工程は、前記各クロック系統毎のブロックについて前記クロック精度モデルの計算が実行される時刻を比較し、該計算が実行されるまでの時間が最も短い時間を選定すると共に、該各クロック系統毎のブロックを計算が実行されるブロックとして選定し、選定されたブロックについては次に該クロック精度モデルの計算が実行される時刻を当該ブロックにおけるクロック周期の値に更新し、当該ブロック以外のブロックについては該クロック精度モデルが計算されるまでの時間から該最も短い時間を減算し、順次同様に、計算が実行されるまでの時間が最も短い時間およびブロックの選定処理と、該クロック精度モデルの計算が実行される時刻を更新する処理とを繰り返し行う請求項１５に記載のハードウェア検証用プログラミング記述生成方法。
【請求項２０】
前記クロック制御モデル生成工程は、前記各クロック系統毎のブロックにおけるクロック周期の最大公約数となる時間を計算し、該各クロック系統毎のブロックについて前記クロック精度モデルの計算が実行される時刻を示すカウンタの値に該最大公約数となる時間を加算し、該各クロック系統毎のブロックにおけるクロック周期と該カウンタの値とが一致したブロックについては該クロック精度モデルの計算が実行されるブロックと判定して該カウンタの値を初期化し、それ以外のブロックについては該クロック精度モデルの計算が実行されないブロックと判定して該カウンタの値に該最大公約数となる時間を加算する処理を繰り返し行う請求項１５に記載のハードウェア検証用プログラミング記述生成方法。
【請求項２１】
前記クロック制御モデル生成工程は、前記ハードウェアの動作記述から前記各クロック系統に指定された回路動作が開始される時刻を解析し、該各クロック系統毎のブロックについて前記クロック精度モデルの計算が開始される時刻を制御する請求項１５に記載のハードウェア検証用プログラミング記述生成方法。
【請求項２２】
請求項１４〜２１のいずれかに記載のハードウェア検証用プログラミング記述生成方法により生成されたクロック精度モデルの記述とクロック制御モデルの記述とをコンパイルおよびリンクすることによって、多相クロックにより回路動作するハードウェアの処理動作をサイクル精度レベルで検証可能な実行形式のプログラムを生成するハードウェア検証用プログラム生成方法。
【請求項２３】
請求項１４〜２１のいずれかに記載のハードウェア検証用プログラミング記述生成方法をコンピュータにより実行させるための各処理手順が記述された制御プログラム。
【請求項２４】
請求項２２に記載のハードウェア検証用プログラム生成方法により生成されたハードウェア検証用プログラムであって、コンピュータにより実行させるための各処理手順が記述された制御プログラム。
【請求項２５】
請求項２３または２４に記載の制御プログラムが記録されたコンピュータ読み取り可能な可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多相クロックにより回路動作するハードウェアの処理動作をサイクル精度レベルで検証可能なモデルを汎用プログラミング記述として生成するハードウェア検証用プログラミング記述生成装置、高位合成装置、このハードウェア検証用プログラミング記述生成装置を用いたハードウェア検証用プログラミング記述生成方法、これを用いたハードウェア検証用プログラム生成方法、このハードウェア検証用プログラミング記述生成方法の各処理手順をコンピュータに実行させるためのハードウェア検証用プログラミング記述生成プログラムおよび、これを用いたハードウェア検証用プログラムなどの制御プログラムおよびこの制御プログラムが記録されたコンピュータ読み取り可能な可読記憶媒体に関する。
【背景技術】
【０００２】
従来のシステムＬＳＩの開発では、設計されたハードウェアの回路動作がシステムに与えられた要求仕様を満たすか否かを検証する必要がある。従来は、サイクル精度レベルの検証を行うために、ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）シミュレータが用いられていた。ここで述べるサイクル精度レベルとは、ハードウェアの回路動作について、そのハードウェアの状態をクロックサイクル単位で示すことが可能な精度レベルのことである。例えば、クロックの立ち上がりに同期して動作するハードウェアについては、そのクロックの立ち上がりエッジにおけるハードウェア中のレジスタやメモリなどの記憶装置の状態が示されることになる。ＨＤＬシミュレータでは、動作速度などのパフォーマンス測定が行われ、与えられた仕様を満たしているか否かが検証される。一般的に、ＨＤＬシミュレータでは、ＶＨＤＬなどのハードウェア記述言語により記述された回路動作がシミュレーションされている。ＨＤＬシミュレータによって、回路内の信号の変化がクロック周期よりも短い時間単位により監視され、その変化が接続される信号に伝搬されるというイベント駆動方式によってシミュレーションが行われている。
【０００３】
さらに、従来のシステムＬＳＩ開発では、多相クロックを用いてハードウェア設計を行うというケースがある。この場合には、ハードウェアを設計する際に、まず、関連性を有する処理がまとめられて機能ブロックとして分割される。ハードウェアに要求される機能仕様を満たすため、動作を高速に行う必要がある機能ブロックについてはクロック周期が短くなるようにクロック周波数が高く設定されるという手法が用いられる。一方、動作を高速に行う必要がない機能ブロックについては、クロック周期が長くなるようにクロック周波数が低く設定される。このように、１つのハードウェアに対して異なるクロック周期により回路動作する機能ブロックが含まれるようにハードウェアが設計されて、そのハードウェアの回路動作が検証される。
【０００４】
例えば特許文献１には、ハードウェアの動作記述を解析し、ハードウェアの動作記述からコントロールデータフローグラフ（ＣＤＦＧ）を生成して、ステートに分割されたハードウェアの動作情報とデータパス情報とから全演算の動作を示す動作記述を作成することによって、汎用プログラミング言語による検証モデルを生成して、ハードウェアのサイクル精度レベルの検証を高速に行うことができるという手法が開示されている。ハードウェアの動作記述においては、構造に関する情報は含まず、ハードウェアにより行われる処理動作のみが記述されている。また、ＣＤＦＧにおいては、ハードウェアにより行われる演算処理などの動作がノードで表され、データの流れがノード間を接続する枝によって表されている。
【０００５】
例えば特許文献２には、ＨＤＬシュミレータに比べて高速にハードウェアの処理動作を検証することを目的として、ハードウェアのクロック精度検証用プログラミング記述を生成する手法が開示されている。これを図６を用いて説明する。
【０００６】
図６は、従来のハードウェア検証用プログラミング記述生成装置の要部構成例を示すブロック図である。
【０００７】
図６に示すように、まず、動作合成手段６１が単相クロックで回路動作するハードウェアの動作記述７１からＣＤＦＧデータ７２を生成する。次に、ハードウェア仕様により要求される動作周波数によって、ＣＤＦＧデータ７２をスケジューリングしてステート毎に割り振った後に、クロック精度モデル生成手段６２が、ＣＤＦＧデータ７２に含まれるノードの動作情報を用いて各ノードの動作モデルを生成し、ノードの接続情報を用いて各ノードの動作モデルを計算する際の順序付けを行うことによって、各ステートでシミュレーション可能なモデルを生成して、ハードウェアをサイクル精度レベルで検証可能とするＨＷクロック精度記述７３を生成する。
【０００８】
例えば特許文献３には、本発明でも用いる高位合成手法の従来技術が開示されている。
【特許文献１】特開２００１−１４３５６号公報
【特許文献２】特開２００６−１３９７２９号公報
【特許文献３】特開平５−１０１１４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記従来のハードウェア検証方法には、以下のような問題が生じる。
【００１０】
ＨＤＬシミュレータを用いてイベント駆動方式によりシミュレーションを進める従来の検証方法では、シミュレーションの時間単位がクロック周期よりも短い。よって、ハードウェアをサイクル精度レベルで検証するためには、冗長、かつ、無駄な計算が多くなり、効率が悪いという問題がある。また、検証される回路の規模が大きい場合や、用いられるテストパターンが長い場合には、シミュレーションに必要とされる計算量が非常に多くなり過ぎて、シミュレーションを行うために時間がかかるという問題がある。さらに、ＨＤＬシミュレータは高価であり、システムＬＳＩの開発コストが増えるという問題もある。
【００１１】
多相クロックにより回路動作するハードウェアを、イベント駆動方式のＨＤＬシミュレータを用いて検証すると、上述したように、シミュレーションのために時間がかかる。
【００１２】
特許文献１に開示されている従来のサイクル精度レベルの検証方法において、検証モデルは、単相クロックにより回路動作するハードウェアを対象としており、多相クロックにより動作するハードウェアを特許文献１に開示されている検証方法により検証することはできない。即ち、多相クロックにより動作するハードウェアを検証可能なモデルは生成できない。
【００１３】
また、特許文献２に開示されている従来のサイクル精度レベルの検証方法においても、生成されたＨＷクロック精度記述７３は、単相クロックにより回路動作するハードウェアを回路対象としており、多相クロックにより動作するハードウェアを検証することはできない。
【００１４】
このように、上記従来のハードウェア検証方法では、多相クロックにより動作するハードウェアの設計および検証期間が大幅に長くなり、また、開発コストの増加を招くという問題がある。
【００１５】
本発明は、上記従来の問題を解決するもので、多相クロックにより回路動作するハードウェアをサイクル精度レベルで検証可能なモデルを汎用プログラミング記述として生成することにより、高速かつ安価にハードウェアの回路動作を検証し、ハードウェアの設計および検証期間を短縮して、低コストによりシステムＬＳＩの開発を実現できるハードウェア検証用プログラミング記述生成装置、高位合成装置、このハードウェア検証用プログラミング記述生成装置を用いたハードウェア検証用プログラミング記述生成方法、これを用いたハードウェア検証用プログラム生成方法、このハードウェア検証用プログラミング記述生成方法をコンピュータによって実行するためのハードウェア検証用プログラミング記述生成プログラムである制御プログラムおよび、この制御プログラムが記録されたコンピュータ読み取り可能な可読記憶媒体を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明のハードウェア検証用プログラミング記述生成装置は、多相クロックにより回路動作するハードウェアについて、構造に関する情報は含まず、処理動作のみが記述された動作記述から、該ハードウエアを各クロック系統毎のブロックに分割し、分割された各ブロック毎に動作合成処理を行う動作合成処理手段と、該動作合成処理されたデータを用いて該ハードウェアをサイクル精度レベルで検証可能なクロック精度モデルを生成するクロック精度モデル生成手段とを有するものであり、そのことにより上記目的が達成される。
【００１７】
また、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置において、前記サイクル精度レベルで前記ハードウェアをシミュレーションする際に前記各クロック系統毎のブロックについて、前記クロック精度モデルの計算が行われる順番を制御するための制御モデルを生成するクロック制御モデル生成手段をさらに有する。
【００１８】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置における動作合成処理手段は、前記ハードウェアの動作記述を解析して該ハードウェアの動作情報を得る動作記述解析手段と、該ハードウェアの動作情報から該ハードウェアを前記各クロック系統毎にブロックに分割するクロックドメイン分割処理手段と、該各クロック系統毎のブロックについて、該ハードウェアの動作記述から、該ハードウェアの動作がノードと該ノード間を接続する枝とを用いて表現されたコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段とを有する。
【００１９】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置におけるクロック精度モデル生成手段は、前記動作合成処理されたデータとしてのコントロールデータフローグラフの各ノードを、該各ブロックのクロック周波数によりスケジューリングして各ステートに割り振るスケジューリング・ステート割り振り手段と、該各ステート毎に、スケジューリング・ステート割り振り結果を用いて、該ハードウェアをサイクル精度により検証可能な動作モデルを前記クロック精度モデルとして生成するサイクル精度モデル生成手段とを有する。
【００２０】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置において、前記クロック精度モデルおよび前記制御モデルのうちの少なくともいずれかを汎用プログラミング言語により表現された記述として生成する。
【００２１】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置におけるクロック制御モデル生成手段は、前記各クロック系統毎のブロックについて前記クロック精度モデルの計算が実行される時刻を比較し、該計算が実行されるまでの時間が最も短い時間を選定すると共に、該各クロック系統毎のブロックの計算が実行されるブロックとして選定し、選定されたブロックについては次に該クロック精度モデルの計算が実行される時刻を当該ブロックにおけるクロック周期の値に更新し、当該ブロック以外のブロックについては該クロック精度モデルが計算されるまでの時間から該最も短い時間を減算し、順次同様に、計算が実行されるまでの時間が最も短い時間およびブロックの選定処理と、該クロック精度モデルの計算が実行される時刻を更新する処理とを繰り返す。
【００２２】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置におけるクロック制御モデル生成手段は、前記各クロック系統毎のブロックにおけるクロック周期の最大公約数となる時間を計算し、該各クロック系統毎のブロックについて前記クロック精度モデルの計算が実行される時刻を示すカウンタの値に該最大公約数となる時間を加算し、該各クロック系統毎のブロックにおけるクロック周期と該カウンタの値とが一致したブロックについては該クロック精度モデルの計算が実行されるブロックと判定して該カウンタの値を初期化し、それ以外のブロックについては該クロック精度モデルの計算が実行されないブロックと判定して該カウンタの値に該最大公約数となる時間を加算する処理を繰り返し行う。
【００２３】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置におけるクロック制御モデル生成手段は、前記ハードウェアの動作記述から前記各クロック系統毎に指定された回路動作が開始される時刻を解析し、該各クロック系統毎のブロックについてクロック精度モデルの計算が開始される時刻を制御する。
【００２４】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置における動作記述は、回路の機能単位でブロックに分割した形式により記述可能で、各機能ブロックに動作クロックを指定することが可能であり、該各機能ブロックを並列動作させることが指定可能とされている。
【００２５】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置における汎用プログラミング言語としてＣ言語が用いられている。
【００２６】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置におけるクロックドメイン分割処理手段は、前記動作記述において、前記各ブロックの並列動作に関する記述と、該各ブロックに指定された動作クロックとに従って、前記各クロック系統毎に前記ハードウェアをブロックに分割する。
【００２７】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成装置におけるクロックドメイン分割処理手段は、クロックドメイン分割処理の他に、前記各クロック系統毎のブロックについて前記クロック精度モデルの計算が行われる順番を制御するために用いる制御情報として、前記ブロックを示すクロックドメインの名前とクロック周期の値とによって構成されたクロックドメインの制御情報を作成する。
【００２８】
本発明の高位合成装置は、前記動作記述から、多相クロックにより回路動作するハードウェアを高位合成し、高位合成したハードウェアを、本発明の上記ハードウェア検証用プログラミング記述生成装置により生成されたハードウェア検証用プログラミング記述を用いて検証可能とするものであり、そのことにより上記目的が達成される。
【００２９】
本発明のハードウェア検証用プログラミング記述生成方法は、多相クロックにより回路動作するハードウェアについて、構造に関する情報は含まず、処理動作のみが記述された動作記述から、該ハードウエアを各クロック系統毎のブロックに分割し、分割された各ブロック毎に動作合成処理を行う動作合成処理工程と、該動作合成処理されたデータを用いて該ハードウェアをサイクル精度レベルで検証可能なクロック精度モデルを生成するクロック精度モデル生成工程とを有するものであり、そのことにより上記目的が達成される。
【００３０】
また、好ましくは、本発明のハードウェア検証用プログラミング記述生成方法において、前記サイクル精度レベルで前記ハードウェアをシミュレーションする際に前記各クロック系統毎のブロックについて、前記クロック精度モデルの計算が行われる順番を制御するための制御モデルを生成するクロック制御モデル生成工程をさらに有する。
【００３１】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成方法において、前記動作合成処理工程は、前記ハードウェアの動作記述を解析して該ハードウェアの動作情報を得る動作記述解析工程と、該ハードウェアの動作情報から該ハードウェアを前記各クロック系統毎にブロックに分割するクロックドメイン分割処理工程と、該各クロック系統のブロックについて、該ハードウェアの動作記述から、該ハードウェアの動作がノードと該ノード間を接続する枝とを用いて表現されたコントロールデータフローグラフを生成するコントロールデータフローグラフ生成工程とを有する。
【００３２】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成方法において、前記クロック精度モデル生成工程は、前記動作合成処理されたデータとしてのコントロールデータフローグラフの各ノードを、前記各ブロックのクロック周波数によりスケジューリングして各ステートに割り振るスケジューリング・ステート割り振り工程と、該各ステート毎に、スケジューリング・ステート割り振り結果を用いて、該ハードウェアをサイクル精度により検証可能な動作モデルを前記クロック精度モデルとして生成するサイクル精度モデル生成工程とを有する。
【００３３】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成方法において、前記クロック精度モデルおよび前記制御モデルのうちの少なくともいずれかを汎用プログラミング言語により表現された記述として生成する。
【００３４】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成方法におけるクロック制御モデル生成工程は、前記各クロック系統毎のブロックについて前記クロック精度モデルの計算が実行される時刻を比較し、該計算が実行されるまでの時間が最も短い時間を選定すると共に、該各クロック系統毎のブロックを計算が実行されるブロックとして選定し、選定されたブロックについては次に該クロック精度モデルの計算が実行される時刻を当該ブロックにおけるクロック周期の値に更新し、当該ブロック以外のブロックについては該クロック精度モデルが計算されるまでの時間から該最も短い時間を減算し、順次同様に、計算が実行されるまでの時間が最も短い時間およびブロックの選定処理と、該クロック精度モデルの計算が実行される時刻を更新する処理とを繰り返し行う。
【００３５】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成方法におけるクロック制御モデル生成工程は、前記各クロック系統毎のブロックにおけるクロック周期の最大公約数となる時間を計算し、該各クロック系統毎のブロックについて前記クロック精度モデルの計算が実行される時刻を示すカウンタの値に該最大公約数となる時間を加算し、該各クロック系統毎のブロックにおけるクロック周期と該カウンタの値とが一致したブロックについては該クロック精度モデルの計算が実行されるブロックと判定して該カウンタの値を初期化し、それ以外のブロックについては該クロック精度モデルの計算が実行されないブロックと判定して該カウンタの値に該最大公約数となる時間を加算する処理を繰り返し行う。
【００３６】
さらに、好ましくは、本発明のハードウェア検証用プログラミング記述生成方法におけるクロック制御モデル生成工程は、前記ハードウェアの動作記述から前記各クロック系統に指定された回路動作が開始される時刻を解析し、該各クロック系統毎のブロックについて前記クロック精度モデルの計算が開始される時刻を制御する。
【００３７】
本発明のハードウェア検証用プログラム生成方法は、本発明の上記ハードウェア検証用プログラミング記述生成方法により生成されたクロック精度モデルの記述とクロック制御モデルの記述とをコンパイルおよびリンクすることによって、多相クロックにより回路動作するハードウェアの処理動作をサイクル精度レベルで検証可能な実行形式のプログラムを生成するものであり、そのことにより上記目的が達成される。
【００３８】
本発明の制御プログラムは、本発明の上記ハードウェア検証用プログラミング記述生成方法をコンピュータにより実行させるための各処理手順が記述されたものであり、そのことにより上記目的が達成される。
【００３９】
本発明の制御プログラムは、本発明の上記ハードウェア検証用プログラム生成方法により生成されたハードウェア検証用プログラムであって、コンピュータにより実行させるための各処理手順が記述されたものであり、そのことにより上記目的が達成される。
【００４０】
本発明の可読記憶媒体は、本発明の上記制御プログラムが記録されたコンピュータ読み取り可能なものであり、そのことにより上記目的が達成される。
【００４１】
上記構成により、以下に、本発明の作用について説明する。
【００４２】
本発明にあっては、ハードウエアをクロック系統毎にブロック分割し、分割されたブロック（クロックドメイン）毎にハードウェアをサイクル精度レベルで検証可能なサイクル精度モデルを生成し、各クロックドメインのモデルの計算（シミュレーション）が行われる順番を制御する制御モデルを生成するため、多相クロックにより回路動作するハードウェアの処理動作がサイクル精度レベルで検証可能である。また、これらのモデルを汎用プログラミング言語記述として生成することにより、高価で時間がかかるＨＤＬシミュレータを用いなくても、回路動作の検証を行なうことが可能となる。
【００４３】
さらに説明すると、まず、多相クロックにより回路動作するハードウェアの動作記述を解析し、ハードウェアを、互いに周期の異なるクロック系統毎にブロックに分割して、各クロック系統毎のブロックについて、ハードウェアの動作記述からＣＤＦＧデータを生成する。次に、ＣＤＦＧデータを、各ブロックのクロック周波数によりスケジューリングしてステートに割り振って、ステート毎にハードウェアのサイクル精度モデルを汎用プログラミング言語により表現された記述として生成し、回路動作のシミュレーション時（検証時）に各クロック系統のブロックについてサイクル精度モデルの計算が行われる順番を制御する制御モデルを汎用プログラミング言語により表現された記述として生成する。これにより、多相クロックにより回路動作するハードウェアにおいて、各クロック系統毎にサイクル精度モデルの計算を制御してサイクル精度レベルの検証を順次進めることが可能となる。
【００４４】
例えば、各クロック系統のブロックについてサイクル精度モデルの計算が実行される時刻を比較し、計算が実行されるまでの時間が最も短い時間とそのクロック系統のブロックを選定する処理と、選定されたブロックについて、次に、サイクル精度モデルの計算が実行される時刻をそのブロックにおけるクロック周期の値に更新し、選定されたブロック以外のブロックについてサイクル精度モデルが計算されるまでの時間からその最も短い時間を減算する処理を繰り返すことによって、サイクル精度モデルの計算順序を制御することが可能となる。
【００４５】
また、例えば、各クロック系統のブロックにおけるクロック周期の最大公約数となる時間を計算し、各クロック系統のブロックについてサイクル精度モデルの計算が実行される時刻を示すカウンタの値にこの最大公約数となる時間を加算し、各クロック系統のブロックにおけるクロック周期とカウンタ値とが一致したブロックについてサイクル精度モデルの計算が実行されるブロックと判定してカウンタの値を初期化し、それ以外のブロックについては、サイクル制度モデルの計算が実行されないブロックと判定してカウンタの値にその最大公約数となる時間を加算する処理を繰り返し行うことによっても、サイクル精度モデルの計算順序を制御することが可能となる。
【００４６】
ハードウェアの動作記述から各クロック系統に指定された動作が開始される時刻を解析し、オフセット時間を設けることによって、各クロック系統のブロックについてサイクル精度モデルの計算が開始される時刻を制御することが可能となる。
【００４７】
このようにして生成されたサイクル精度モデルの記述と、クロックドメインの制御モデルの記述とをコンパイルおよびリンクすることによって、多相クロックにより動作するハードウェアの動作をサイクル精度レベルで検証可能な実行形式のハードウェア検証用プログラムを生成することが可能となる。
【発明の効果】
【００４８】
以上により、本発明によれば、ハードウエアをクロック系統毎にブロック分割し、分割されたブロック（クロックドメイン）毎にハードウェアをサイクル精度レベルで検証可能なサイクル精度モデルを生成し、各クロックドメインのモデルの計算（シミュレーション）が行われる順番を制御する制御モデルを生成するため、多相クロックにより動作するハードウェアの回路動作をサイクル精度レベルで検証することができる。さらに、これらのモデルを汎用プログラミング言語記述として生成するため、ＨＤＬシミュレータによる回路動作の検証に比べて高速かつ安価に検証を行うことができる。これによって、ＬＳＩ開発において設計と検証に必要な期間を大幅に短縮化できて、システムＬＳＩの開発コストを削減することができる。
【発明を実施するための最良の形態】
【００４９】
本発明のハードウェア検証用プログラミング記述生成装置では、多相クロックにより回路動作するハードウェアを高位合成装置にて高位合成する際に、サイクル精度レベルで、多相クロックを含むハードウェアの処理動作のシミュレーション（検証）を行うために用いられるハードウェア検証用プログラミング記述を生成するために用いる。
【００５０】
ここで、ハードウェアの高位合成とは、高位合成装置を用いて行うものであり、ハードウェアの構造に関する情報は含まれず、処理動作のみが記述された動作記述から、ＲＴＬ（レジスタ・トランスファ・レベル）の論理回路をコンピュータ自動生成する回路設計の技術である。この高位合成の手法は、例えば前述の特許文献３に詳細が述べられているため、ここではその詳細な説明は省略する。なお、本実施形態で説明する多相クロックにより動作するハードウェアの高位合成において、この動作記述は、回路の機能単位でブロックに分割した形式により記述可能で、各機能ブロックに動作クロックを指定することが可能であり、各機能ブロックを並列動作させることが指定可能である。また、本実施形態において生成されるハードウェアをサイクル精度レベルで検証可能なモデルは、汎用プログラミング言語であるＣ言語により記述されるものとするが、Ｃ言語以外の他の言語でも同様に記述することが可能である。
【００５１】
以下に、本発明のハードウェア検証用プログラミング記述生成装置およびこれを用いたハードウェア検証用プログラミング記述生成方法の実施形態について、図面を参照しながら詳細に説明する。
【００５２】
図１は、本発明の実施形態に係るハードウェア検証用プログラミング記述生成装置として機能するコンピュータシステムの基本処理図である。
【００５３】
図１において、本実施形態のハードウェア検証用プログラミング記述生成装置として機能するコンピュータシステム１０は、多相クロックにより回路動作するハードウェアについて、構造に関する情報は含まず、処理動作のみが記述された動作記述４７から、このハードウエアをクロック系統毎のブロックに分割し、分割された各ブロック毎に動作合成処理（ステップＳ１）を行う動作合成処理手段と、この動作合成処理されたデータ（ＣＤＦＧデータ）を用いてハードウェアをサイクル精度レベルで検証可能なクロック精度モデルを生成処理（ステップＳ２）するクロック精度モデル生成手段と、サイクル精度レベルでハードウェアをシミュレーションする際に各クロック系統毎のブロックについて、このクロック精度モデルの計算が行われる順番を制御する制御モデルを生成処理（ステップＳ３）するクロック制御モデル生成手段とを有している。
【００５４】
上記構成により、まず、ステップＳ１の動作合成処理において、多相クロックにより回路動作する検証回路対象であるハードウェア（後述する図４ではハードウェア５）を、互いに周期が異なる回路のクロック系統毎に複数の機能ブロック（クロックドメイン）に分割し、多相クロックで回路動作するハードウェアの動作記述４７から各クロックドメイン毎のＣＤＦＧデータ４８Ａ、４８Ｂ、・・をそれぞれ生成する。
【００５５】
次に、ステップＳ２のクロックモデル生成処理において、ハードウェア仕様により要求される動作周波数によって、ＣＤＦＧデータ４８Ａ、４８Ｂ、・・をスケジューリングしてステート毎に割り振り、ＣＤＦＧデータ４８Ａ、４８Ｂ、・・に含まれるノードの動作情報を用いて各ノードの動作モデルを生成し、ノードの接続情報を用いて各ノードの動作モデルを計算する際の順序付けを行うことによって、各ステートでシミュレーション可能なモデルを生成して、ハードウェアをサイクル精度レベルで検証可能とするＨＷクロック精度記述４９Ａ、４９Ｂ、・・を生成する。
【００５６】
さらに、ステップＳ３のクロックドメインの制御モデル生成処理において、ステップＳ１の動作合成処理で生成されたクロックドメインの制御情報５０から、各クロックドメインのサイクル精度モデルが計算される順番を制御する制御モデルをクロックドメインの制御記述５１として生成する。
【００５７】
このようにして、ＨＷクロック精度記述４９Ａ、４９Ｂ、・・として、クロックドメイン毎にクロック精度で検証可能なハードウェアモデルをプログラミング記述で生成し、クロックの周期を比較してモデルの状態を１クロック分進めるクロックドメインを選定し、ハードウェアのシュミレーションを行う。このように、本発明では、クロックドメインの選定と、モデルの状態を進めるための制御を行うプログラミング記述を生成する。
【００５８】
以上により、検証回路対象のハードウエアをクロック系統毎にクロックドメインに分割し、分割されたクロックドメイン毎にハードウェアをサイクル精度レベルで検証可能なサイクル精度モデル（ＨＷクロック精度記述４９Ａ、４９Ｂ、・・）を生成し、各クロックドメインのモデルの計算（シミュレーション）が行われる順番を制御する制御モデル（クロックドメインの制御記述５１）を生成するため、多相クロックにより動作するハードウェアの回路動作をサイクル精度レベルで検証することができる。さらに、これらのモデルを汎用プログラミング言語記述として生成するため、ＨＤＬシミュレータによる回路動作の検証に比べて高速かつ安価に検証を行うことができる。
【００５９】
以下、以上の本実施形態のハードウェア検証用プログラミング記述生成装置として機能するコンピュータシステム１０および、これを用いたハードウェア検証用プログラミング記述生成方法について更に詳細に説明する。
【００６０】
図２は、図１のコンピュータシステムの要部構成例を示すブロック図である。
【００６１】
図２において、本実施形態のハードウェア検証用プログラミング記述生成装置として機能するコンピュータ１０は、入力情報や処理結果情報などの各種情報を表示可能とする表示画面が設けられたモニタ装置１と、各種入力操作指令を入力可能とするキーボードやマウスなどの入力装置２と、入力装置２からの各種入力操作指令に基づいて各種処理を実行すると共にモニタ装置１に対して表示制御する計算機本体３とを有している。
【００６２】
計算機本体３は、本実施形態のハードウェア検証機能を実行可能とするＣＰＵ（中央演算処理ユニット）からなる制御部３１と、制御部３１が実行するための各種制御プログラムおよびそのデータなどを記憶するコンピュータ読み取り可能なハードディスクや内部メモリなどの可読記録媒体３２と、各種制御プログラムおよびそのデータなどを記憶する小型携帯用メモリである半導体メモリ、光ディスクや磁気ディスクなどのコンピュータ読み取り可能な可読記録媒体３３とを有している。
【００６３】
可読記録媒体３２の内部メモリは、ＣＰＵ起動時に各種制御プログラムおよびそのデータなどを可読記録媒体３２のハードディスクから読み込んでワークメモリ（ＲＡＭ）として機能するかまたは、インターネットやイントラネット、さらには可読記録媒体３３などから各種制御プログラムおよびそのデータなどを読み込んでワークメモリ（ＲＡＭ）として機能する。
【００６４】
磁気ディスクなどの可読記録媒体３３は、小型携帯用メモリであって、本実施形態に係るハードウェア検証用プログラミング記述生成方法の各処理手順をコンピュータによって実行するためのハードウェア検証用プログラミング記述生成プログラムやシミュレーション用プログラム（ハードウェア検証用プログラム）などの各種制御プログラムとしてのハードウェア高位合成プログラム４がコンピュータ読み取り可能に格納されている。
【００６５】
ハードウェア高位合成プログラム４のハードウェア検証用プログラミング記述生成プログラムは、制御部３１により実行されるものであり、多相クロックにより回路動作するハードウェアの動作記述４７を構文解析・字句解析処理する動作記述解析手段としての構文解析・字句解析処理手段４１と、ハードウェアをクロック系統毎に機能ブロック（クロックドメイン）に分割すると共に、クロックドメインのサイクル精度モデルが計算される順番を制御するための制御情報として、各クロックドメインの名前とクロック周期の値とによって構成されたクロックドメインの制御情報を作成するクロックドメイン分割処理手段４２と、ハードウェアの動作記述４７からクロックドメイン応じたＣＤＦＧをそれぞれ生成するＣＤＦＧ生成手段４３と、各クロックドメインのクロック周波数により回路が動作可能なようにスケジューリングされてステートに割り振るスケジューリング・ステート割り振り手段４４と、ステート毎に、ハードウェアをサイクル精度で検証可能なモデルを各クロックドメインのサイクル精度記述としてそれぞれ生成するサイクル精度モデル生成手段４５と、各クロックドメインのクロック精度モデル（サイクル精度モデル）が計算される順番を制御する制御モデルをクロックドメインの制御記述として生成するクロック精度モデル生成手段としてのクロックドメインの制御モデル生成手段４６とを有している。
【００６６】
以下に、本発明の実施形態に係るハードウェア検証用プログラミング記述生成方法の処理手順について、図３のフローチャートを用いて説明する。
【００６７】
図３は、本発明の実施形態に係るハードウェア検証用プログラミング記述生成装置１０のハード構成例を示すブロック図および、その動作を示すフローチャートである。
【００６８】
図３に示すように、制御部３１は、ハードウェア検証用プログラミング記述生成プログラムおよびそのデータに基づいて、まず、ステップＳ１１において、多相クロックにより回路動作するハードウェアについて、構造に関する情報は含まれず、処理動作のみが記述された動作記述４７が、構文解析・字句解析処理手段４１によって構文解析・字句解析処理される。
【００６９】
次に、ステップＳ１２において、クロックドメイン分割処理手段４２によって、ハードウェアがクロック系統毎にブロックに分割される。このクロックドメイン分割処理手段４２では、解析されたハードウェアの動作記述４７から、機能ブロックの並列動作に関する記述と、各機能ブロックに指定された動作クロックに従って、ハードウェアがクロック系統毎にまとめられた機能ブロック（クロックドメイン）に分割する。
【００７０】
以下の説明では、このように分割された機能ブロックをクロックドメインと表記する。機能ブロックの並列動作と動作クロックを指定するための記述例について、以下に説明する。
【００７１】
＃pragmaparallel
＃pragmaclock A
｛
FunctionA();
}
＃pragmaclock B
{
FunctionB();
}
＃pragmaclock C
{
FunctionC();
}
上記記述例において、＃pragma parallelに続く{}で囲まれる記述部分がそれぞれ並列動作する機能ブロック回路として高位合成される。また、＃pragmaclockに続く数値A、B、Cをクロック周期として、続く{}で囲まれる記述部分が各クロック系統の機能ブロックとして高位合成される。本例中、FunctionA()、FunctionB()およびFunctionC()は、回路の動作を表す関数とする。
【００７２】
次に、ステップＳ１３において、クロックドメイン分割処理手段４２によって分割されたクロックドメインが、周期ＡのクロックドメインＡか、周期ＢのクロックドメインＢか、・・それら以外のクロックドメインの制御情報かを判定する。
【００７３】
このようにして、クロックドメイン分割処理手段４２によりハードウェアが、周期が異なる複数種類のクロックドメインに分割処理された後、ステップＳ１４において、クロックドメインＡまたはＢ、・・毎に、ＣＤＦＧ（以下、コントロールデータフローグラフをＣＤＦＧと略す）生成手段４３によってハードウェアの動作記述４７から、クロックドメインＡまたはＢ、・・に応じたＣＤＦＧ４８Ａ、４８Ｂ、・・・がそれぞれ作成される。
【００７４】
図１に示す事例では、ＣＤＦＧ生成手段４３によってクロックドメインＡのＣＤＦＧ４８Ａが作成され、また、ＣＤＦＧ生成手段４３によってクロックドメインＢのＣＤＦＧ４８Ｂが作成される。ＣＤＦＧとは、ハードウェアの動作がノードとノード間を接続する枝とを用いて表現されたものである。ノードはハードウェア中で動作する演算などを示し、ノード間の枝はデータの流れを示している。あるノードから出力されたデータは、そのノードに接続されている枝を通り、接続先のノードの入力として用いられる。
【００７５】
さらに、ステップＳ２１において、生成されたＣＤＦＧ４８Ａ，４８Ｂ・・の各ノードは、スケジューリング・ステート割り振り手段４４によって、各クロックドメインのクロック周波数により回路が動作可能なようにスケジューリングされてステートに割り振られる。
【００７６】
このスケジューリング・ステート割り振り結果を用いて、ステップＳ２２において、サイクル精度モデル生成手段４５によって、ステート毎に、ハードウェアをサイクル精度で検証可能なモデルが、汎用プログラミング言語であるＣ言語により表現されたクロックドメインＡのサイクル精度記述４９Ａ、クロックドメインＢのサイクル精度記述４９Ｂ、・・・として生成される。
【００７７】
なお、サイクル精度モデルの計算を実行することによって、クロックドメインの回路のステートが時間軸方向に１クロック分進められることになる。ＣＤＦＧからハードウェアをサイクル精度レベルで検証可能なモデルを生成する手法は、例えば特許文献２に詳細が述べられているため、ここではその説明を省略する。
【００７８】
一方、上記クロックドメイン分割処理手段４２では、各クロックドメインのサイクル精度モデルが計算される順番を制御するための制御情報として、各クロックドメインの名前とクロック周期の値とによって構成されたクロックドメインの制御情報５０が作成される。ステップＳ１３でクロックドメインの制御情報と判定した場合には、ステップＳ３において、このクロックドメインの制御情報５０を用いて、クロックドメインの制御モデル生成手段４６によって、各クロックドメインのサイクル精度モデルが計算される順番を制御する制御モデルが、汎用プログラミング言語であるＣ言語により表現されたクロックドメインの制御記述５１として生成される。
【００７９】
このようにして生成されたサイクル精度モデルのサイクル精度記述４９Ａ、４９Ｂ、・・・と、クロックドメインの制御記述５１とをコンパイルして作成されたオブジェクトをリンクすることによって、多相クロックにより動作するハードウェアの動作をサイクル精度レベルで検証可能な実行形式のハードウェア検証用プログラム５２が生成される。このハードウェア検証用プログラム５２をコンピュータシステム１０上で実行することによって、そのハードウェアがサイクル精度レベルで要求仕様を満たしているか否かを検証することが可能となる。
【００８０】
次に、各クロックドメインのサイクル精度モデルが計算される順番を制御する方法について説明する。
【００８１】
図４は、本発明の実施形態により作成されるクロックドメインの制御記述５１において、各クロックドメインのサイクル精度モデルが計算される順番を制御する方法を説明するための図であって、多相クロックにより動作するハードウェアにおいて並列動作するクロックドメインの一例を示すブロック図である。
【００８２】
図４において、検証対象であるハードウェア５には、互いに周期が異なる３系統のクロックＡ、クロックＢおよびクロックＣが用いられている。各クロックＡ〜Ｃのクロック周期は、クロックＡが周期Ａ、クロックＢが周期Ｂ、クロックＣが周期Ｃとされている。また、各クロックＡ〜Ｃで動作するクロックドメインとして、クロックＡによりクロックドメインＡ、クロックＢによりクロックドメインＢ、クロックＣによりクロックドメインＣが動作するものとされている。
【００８３】
図５は、本発明の実施形態により作成されるクロックドメインの制御記述５１において、各クロックドメインのサイクル精度モデルが計算される順番を制御する方法を説明するための図であって、図４の各クロックＡ、クロックＢおよびクロックＣの状態を、ハードウェア信号のＨｉｇｈおよびＬｏｗを用いて表した信号波形図である。
【００８４】
図５において、縦軸は信号レベル、横軸は各クロックドメインの制御時間軸ｔを示している。図４のハードウェアでは、クロックの状態がＬｏｗからＨｉｇｈに立ち上がるタイミングで回路のステートが変化するものとする。
【００８５】
サイクル精度モデルを用いた検証では、モデルの計算が実行されることによって回路のステートの変化がシミュレーションされる。回路のステートの変化とは、クロックドメインの回路内部に含まれるレジスタなどの記憶素子の値の変化、および回路外部へ出力される値の変化を意味する。
【００８６】
図５においては、クロックＡ、クロックＢおよびクロックＣにおいて、各クロックＡ〜ＣのクロックドメインであるクロックドメインＡ、クロックドメインＢおよびクロックドメインＣのステートの変化をそれぞれ次のように表している。
【００８７】
クロックドメインＡのステートの変化
ステートＡ０  →  ステートＡ１  →  ステートＡ２
クロックドメインＢのステートの変化
ステートＢ０  →  ステートＢ１
クロックドメインＣのステートの変化
ステートＣ０  →  ステートＣ１
各クロックドメインのサイクル精度モデルが計算される順番を制御する方法としては、例えば以下の２つの方法を用いることができる。なお、以下の説明において、サイクル精度モデルを用いたシミュレーション時刻をｔとし、シミュレーション時刻ｔは”０”を初期値（ｔ０）とする。
【００８８】
制御方法（１）
この制御方法（１）では、ハードウェア５における各クロック系統の機能ブロック（クロックドメインＡ〜Ｃ）についてサイクル精度モデルの計算が実行される時刻を比較して、計算が実行されるまでの時間が最も短い時間を選定すると共にそのクロック系統のブロックを計算が実行されるブロックとして選定する処理と、次にサイクル精度モデルの計算が実行されるまでの時間を更新する処理とが繰り返し行われる。
【００８９】
計算が実行されるまでの時間が最も短い時間およびそのクロック系統の機能ブロック（クロックドメインのモデル）を選定する処理は、以下の式によって表される。
【００９０】
Ｄ（ｘ，ｙ，ｚ）＝ｍｉｎ（ｔＡ（ｘ），ｔＢ（ｙ），ｔＣ（ｚ））
上記式において、ｍｉｎ（）は与えられた引数の中から最小の値を持つクロックドメインのモデルを選定するための関数とする。
【００９１】
図５において、シミュレーション時刻ｔからクロックドメインＡのモデルが計算されるまでの時間をｔＡ（ｘ）、クロックドメインＢのモデルが計算されるまでの時間をｔＢ（ｙ）、クロックドメインＣのモデルが計算されるまでの時間をｔＣ（ｚ）とする。ここで、ｘ、ｙ、ｚの値は、各クロックドメインの計算が実行された回数、即ち、各クロックドメインのステートの状態が変化した回数を表している。計算が行われるクロックドメインのサイクル精度モデルＤ（ｘ，ｙ，ｚ）は、時間ｔＡ（ｘ）、ｔＢ（ｙ）およびｔＣ（ｚ）の中で最小の値を有するクロックドメインのモデルである。例えば、
ｔＡ（ｘ）  ＜  ｔＢ（ｙ）  ＜  ｔＣ（ｚ）
の関係が成り立つ場合には、Ｄ（ｘ，ｙ，ｚ）はクロックドメインＡのモデルとなる。
【００９２】
選定されたクロックドメインＡのモデルが計算されて回路のステートの変化がシミュレーションされた後、シミュレーション時刻ｔと、時間ｔＡ（ｘ）、ｔＢ（ｙ）およびｔＣ（ｚ）の値とが更新される。この更新処理は、選定されて計算が実行されたブロックについては、次にサイクル精度モデルの計算が実行される時刻がそのブロックにおけるクロック周期の値に更新される。また、計算が実行されていないブロックについては、サイクル精度モデルが計算されるまでの時間からその最も短い時間が減算される。この更新処理は、以下の式によって表される。
【００９３】
ｔ＝ｔ＋ｔＡ（ｘ）
ｔＡ（ｘ＋１）＝Ａ
ｔＢ（ｙ）＝ｔＢ（ｙ）−ｔＡ（ｘ）
ｔＣ（ｚ）＝ｔＣ（ｚ）−ｔＡ（ｘ）
次に、計算が実行されるまでの時間が最も短い時間およびそのクロック系統のブロック（クロックドメインのモデル）を選定する処理は、以下の式によって表される。
【００９４】
Ｄ（ｘ＋１，ｙ，ｚ）＝ｍｉｎ（ｔＡ（ｘ＋１），ｔＢ（ｙ），ｔＣ（ｚ））
以上のように、シミュレーション時刻ｔから各クロックドメインのモデルが計算されるまでの時間を比較し、最も時間が短いクロックドメインのモデルを計算して、次に、モデルの計算が実行されるまでの時間を更新する処理を繰り返すことによって、各クロックドメインのモデルが計算される順番を制御することができる。
【００９５】
例えば、時間ｔＡ（ｘ）を１、ｔＢ（ｙ）を２、ｔＣ（ｚ）を４とし、クロック周期Ａを２、クロック周期Ｂを３、クロック周期Ｃを４と仮定した場合に、各クロックドメインのモデルが計算される順番の制御は、以下のようにして行われる。
【００９６】
まず、計算が実行されるクロックドメインのモデルが以下の式によって選定される。
【００９７】
Ｄ（ｘ，ｙ，ｚ）＝ｍｉｎ（１，２，４）
上記式から、Ｄ（ｘ，ｙ，ｚ）はクロックドメインＡのモデルである。
【００９８】
次に、計算が実行されるまでの時間が以下の式によって更新される。
【００９９】
ｔＡ（ｘ＋１）＝２
ｔＢ（ｙ）＝２−１＝１
ｔＣ（ｚ）＝３−１＝２
次に、計算が実行されるクロックドメインのモデルが以下の式によって選定される。
【０１００】
Ｄ（ｘ＋１，ｙ，ｚ）＝ｍｉｎ（２，１，２）
上記式から、Ｄ（ｘ＋１，ｙ，ｚ）はクロックドメインＢのモデルである。
【０１０１】
次に、計算が実行されるまでの時間が以下の式によって更新される。
【０１０２】
ｔＡ（ｘ＋１）＝２−１＝１
ｔＢ（ｙ＋１）＝３
ｔＣ（ｚ）＝２−１＝１
次に、計算が実行されるクロックドメインのモデルが以下の式によって選定される。
【０１０３】
Ｄ（ｘ＋１，ｙ＋１，ｚ）＝ｍｉｎ（１，３，１）
上記式から、Ｄ（ｘ＋１，ｙ＋１，ｚ）はクロックドメインＡとクロックドメインＣのモデルである。この場合、２つのクロックドメインのモデルが計算されるが、計算が行われる順番は任意である。サイクル精度モデルを用いたシミュレーションでは、どちらのクロックドメインのモデルから計算が実行されても、各モデルの計算結果は同じである。上述したように、サイクル精度モデルの計算とは、クロックドメインの回路内部に含まれるレジスタなどの記憶素子の値の変化、および回路外部へ出力される値の変化を求めるものであり、各クロックドメインのモデルの計算が開始される順番が変わっても、回路内部への入力の値は変わらないため、モデルの計算順序によって計算結果は変わらない。このようなサイクル精度モデルの詳細については、例えば特許文献２に述べられている。
【０１０４】
クロックドメインＡのモデルとクロックドメインＣのモデルの計算が実行された後、次に計算が実行されるまでの時間が以下の式によって更新される。
【０１０５】
ｔＡ（ｘ＋２）＝２
ｔＢ（ｙ＋１）＝３−１＝２
ｔＣ（ｚ＋１）＝４
次に、計算が実行されるクロックドメインのモデルが以下の式によって選定される。
【０１０６】
Ｄ（ｘ＋２，ｙ＋１，ｚ＋１）＝ｍｉｎ（２，２，４）
以上により、クロックドメインの制御モデル生成手段４６による制御方法（１）は、各クロック系統毎のブロックについてクロック精度モデルの計算が実行される時刻を比較し、この計算が実行されるまでの時間が最も短い時間を選定すると共に、各クロック系統毎のブロックの計算が実行されるブロックとして選定し、選定されたブロックについては次にクロック精度モデルの計算が実行される時刻を当該ブロックにおけるクロック周期の値に更新し、当該ブロック以外のブロックについてはクロック精度モデルが計算されるまでの時間から最も短い時間を減算し、順次同様に、計算が実行されるまでの時間が最も短い時間およびブロックの選定処理と、クロック精度モデルの計算が実行される時刻を更新する処理とを繰り返し行う。
【０１０７】
以上のように、計算が実行されるモデルを選定する処理と、次に計算が実行されるまでの時間を更新する処理とが繰り返し行われることによって、各クロックドメインのサイクル精度モデルが計算される順番を制御することができる。
【０１０８】
制御方法（２）
この制御方法（２）では、ハードウェア５における各クロック系統の機能ブロック（クロックドメインＡ〜Ｃ）におけるクロック周期の最大公約数となる時間が計算され、各クロック系統のブロックについてサイクル精度モデルの計算が実行される時刻を示すカウンタの値にその最大公約数となる時間が加算されて、各クロック系統のブロックにおけるクロック周期とそのカウンタの値とが一致した場合に、そのブロックのサイクル精度モデルの計算が実行される。計算が実行されたブロックは、カウンタの値が初期化され、それ以外のブロックについてはカウンタの値にその最大公約数となる時間が加算される。
【０１０９】
計算が実行されるブロックを判定する処理は、以下の式によって表される。
【０１１０】
ｅＡ＝ｅｘｅｃ（Ａ−ｃＡ）
ｅＢ＝ｅｘｅｃ（Ｂ−ｃＢ）
ｅＣ＝ｅｘｅｃ（Ｃ−ｃＣ）
上記式において、ｅｘｅｃ（）では、与えられた引数が０である場合に、そのクロックドメインのモデルが計算されると判定される。判定結果は、各クロックドメインにおいてｅＡ、ｅＢおよびｅＣとして表されている。また、各クロックドメインで計算が実行されるまでの時間を示すカウンタの値は、ｃＡ、ｃＢおよびｃＣとして表されている。
【０１１１】
判定結果から計算を実行する必要があると判定されたモデルの計算が実行された後、カウンタの値にサイクル周期Ａ、サイクル周期Ｂおよびサイクル周期Ｃの最大公約数ＧＣＤが加算される。また、シミュレーション時刻ｔには、クロック周期の最大公約数が加算されていく。この処理は、以下の式によって表される。なお、この制御方法（２）の説明においても、上記制御方法（１）の場合と同様に、クロックドメインＡのモデルだけ、計算が実行されたとする。また、カウンタの初期値は、「０」とする。
【０１１２】
ｔ＝ｔ＋ＧＣＤ
ｃＡ＝０
ｃＢ＝ｃＢ＋ＧＣＤ
ｃＣ＝ｃＣ＋ＧＣＤ
以降、同様に、計算の実行判定とカウンタの値にクロックの最大公約数を加算する処理とが繰り返されることによって、各クロックドメインのモデルが計算される順番を制御することができる。
【０１１３】
例えば、カウンタの値ｃＡを０、ｃＢを０、ｃＣを０とし、クロック周期Ａを２、クロック周期Ｂを３、クロック周期Ｃを４と仮定した場合に、各クロックドメインのモデルが計算される順番の制御は、以下のようにして行われる。
【０１１４】
まず、クロック周期の最大公約数が求められる。
【０１１５】
この例では、クロック周期Ａが２、クロック周期Ｂが３、クロック周期Ｃが４であるので、最大公約数は１である。
【０１１６】
次に、計算が実行されるブロックが、以下の式によって判定される。
【０１１７】
ｅＡ＝ｅｘｅｃ（２−０）
ｅＢ＝ｅｘｅｃ（３−０）
ｅＣ＝ｅｘｅｃ（４−０）
上記式から、全てのクロックドメインのモデルについて、計算は実行されないと判定される。
【０１１８】
次に、以下の式によって、カウンタの値に最大公約数が加算される。
【０１１９】
ｃＡ＝０＋１＝１
ｃＢ＝０＋１＝１
ｃＣ＝０＋１＝１
次に、計算が実行されるブロックが、以下の式によって判定される。
【０１２０】
ｅＡ＝ｅｘｅｃ（２−１）
ｅＢ＝ｅｘｅｃ（３−１）
ｅＣ＝ｅｘｅｃ（４−１）
上記式から、全てのクロックドメインのモデルについて、計算は実行されないと判定される。
【０１２１】
次に、以下の式によって、カウンタの値に最大公約数が加算される。
【０１２２】
ｃＡ＝１＋１＝２
ｃＢ＝１＋１＝２
ｃＣ＝１＋１＝２
次に、計算が実行されるブロックが、以下の式によって判定される。
【０１２３】
ｅＡ＝ｅｘｅｃ（２−２）
ｅＢ＝ｅｘｅｃ（３−２）
ｅＣ＝ｅｘｅｃ（４−２）
上記式から、クロックドメインＡの判定においてモデルの計算が実行されると判定され、それ以外のクロックドメインの判定においてはモデルの計算は実行されないと判定される。判定結果から、クロックドメインＡのモデルの計算が実行される。
【０１２４】
次に、以下の式によって、カウンタの値に最大公約数が加算されるか、またはカウンタの値が初期化される。
【０１２５】
ｃＡ＝０
ｃＢ＝２＋１＝３
ｃＣ＝２＋１＝３
次に、計算が実行されるブロックが、以下の式によって判定される。
【０１２６】
ｅＡ＝ｅｘｅｃ（２−０）
ｅＢ＝ｅｘｅｃ（３−３）
ｅＣ＝ｅｘｅｃ（４−３）
上記式から、クロックドメインＢの判定においてモデルの計算が実行されると判定され、それ以外のクロックドメインの判定においてはモデルの計算は実行されないと判定される。判定結果から、クロックドメインＢのモデルの計算が実行される。
【０１２７】
次に、以下の式によって、カウンタの値に最大公約数が加算されるか、またはカウンタの値が初期化される。
【０１２８】
ｃＡ＝０＋１＝１
ｃＢ＝０
ｃＣ＝３＋１＝４
次に、計算が実行されるブロックが、以下の式によって判定される。
【０１２９】
ｅＡ＝ｅｘｅｃ（２−１）
ｅＢ＝ｅｘｅｃ（３−０）
ｅＣ＝ｅｘｅｃ（４−４）
上記式から、クロックドメインＣの判定においてモデルの計算が実行されると判定され、それ以外のクロックドメインの判定においてはモデルの計算は実行されないと判定される。判定結果から、クロックドメインＣのモデルの計算が実行される。
【０１３０】
次に、以下の式によって、カウンタの値に最大公約数が加算されるか、またはカウンタの値が初期化される。
【０１３１】
ｃＡ＝１＋１＝２
ｃＢ＝０＋１＝１
ｃＣ＝０
以上により、クロックドメインの制御モデル生成手段４６による制御方法（２）は、各クロック系統毎のブロックにおけるクロック周期の最大公約数となる時間を計算し、各クロック系統毎のブロックについてクロック精度モデルの計算が実行される時刻を示すカウンタの値に最大公約数となる時間を加算し、各クロック系統毎のブロックにおけるクロック周期とカウンタの値とが一致したブロックについてはクロック精度モデルの計算が実行されるブロックと判定してカウンタの値を初期化し、それ以外のブロックについてはクロック精度モデルの計算が実行されないブロックと判定してカウンタの値に該最大公約数となる時間を加算する処理を繰り返し行う。
【０１３２】
以上のように、計算が実行されるモデルを判定する処理と、カウンタの値にクロック周波数の最大公約数を加算するか、またはカウンタの値を初期化する処理とが繰り返し行われることによって、各クロックドメインのサイクル精度モデルが計算される順番を制御することができる。
【０１３３】
次に、クロックドメインのサイクル精度モデルが計算される順番を制御する方法として、ハードウェアの動作記述から各クロック系統に指定された動作が開始される時刻を解析し、各クロック系統のブロックについてサイクル精度モデルの計算が開始される時刻を制御する方法について説明する。
【０１３４】
各クロックドメインのサイクル精度モデルの計算が開始される時刻とは、シミュレーション時刻ｔの初期値０の時点からの遅延時間であり、オフセット時間を示すものである。本実施形態では、ハードウェアの動作記述に対して、各クロックドメインのサイクル精度モデルの計算が開始されるまでのオフセット時間を指定する。この動作記述にオフセット時間を指定する処理は、例えば以下の式によって表される。
【０１３５】
＃pragmaparallel
＃pragmaclock A
＃pragmaoffset offsetA
{
FunctionA();
}
＃pragmaclock B
＃pragmaoffset offsetB
{
FunctionB();
}
＃pragmaclock C
＃pragmaoffset offsetC
{
FunctionC();
}
上記式において、＃ｐｒａｇｍａ  ｏｆｆｓｅｔに続く数値がオフセット時間とされており、それに続く｛｝で囲まれたクロックドメインが高位合成される。上記例では、ＦｕｎｃｔｉｏｎＡ（）のクロックドメインにオフセット時間ｏｆｆｓｅｔＡが指定され、ＦｕｎｃｔｉｏｎＢ（）のクロックドメインにオフセットｏｆｆｓｅｔＢが指定され、ＦｕｎｃｔｉｏｎＣ（）のクロックドメインにオフセットｏｆｆｓｅｔＣが指定されている。
【０１３６】
上述したクロックドメインのサイクル精度モデルが計算される順番を制御する制御方法（１）においては、図３に示すｔＡ（０）、ｔＢ（０）およびｔＣ（０）の値がオフセット時間としてそれぞれ指定されることになる。また、制御方法（２）においては、ハードウェアのシミュレーション開始時におけるカウンタの値ｃＡ、ｃＢおよびｃＣの初期値がオフセット時間として指定されることになる。
【０１３７】
したがって、ハードウェアの動作記述にオフセット時間を指定することによって、ハードウェアの動作記述から各クロック系統に指定された動作が開始される時刻を解析して、各クロック系統のブロックについてサイクル精度モデルの計算が開始される時刻を制御することができる。
【０１３８】
以上のように、上記実施形態によれば、多相クロックにより動作するハードウェアの動作記述４７を構文解析・字句解析処理手段４１により解析し、クロックドメイン分割処理手段４２によりハードウェアを各クロック系統毎にクロックドメインに分割して、ＣＤＦＧ生成手段４３により各クロックドメイン毎にＣＤＦＧ４８Ａ、４８Ｂ、・・を生成する。そのＣＤＦＧ４８Ａ、４８Ｂ、・・を、スケジューリング・ステート割り振り手段４４で各ブロックのクロック周波数によりスケジューリングしてステートに割り振り、サイクル精度モデル生成手段４５によりステート毎にハードウェアのサイクル精度モデルを汎用プログラミング言語により表現した記述として生成する。シミュレーション時に各クロックドメインのサイクル精度モデルの計算が行われる順番を制御する制御モデルを、クロックドメインの制御モデル生成手段４６によって、汎用プログラミング言語により表現されたクロックドメインの制御記述５１として生成し、各クロックドメインのサイクル精度モデルの計算が行われる順番を制御することができる。これによって、多相クロックにより動作するハードウェアをサイクル精度レベルで検証可能なモデルを汎用プログラミング記述として生成することができる。
【０１３９】
なお、上記実施形態では、特に説明しなかったが、本発明は、要は、多相クロックにより回路動作するハードウェアについて、構造に関する情報は含まず、処理動作のみが記述された動作記述４７から、ハードウエアを各クロック系統毎のブロックに分割し、分割された各ブロック毎に動作合成処理を行う動作合成処理手段と、動作合成処理されたデータを用いてハードウェアをサイクル精度レベルで検証可能なクロック精度モデル（サイクル精度モデル）を生成するクロック精度モデル生成手段とを有すれば、多相クロックにより回路動作するハードウェアをサイクル精度レベルで検証可能なモデルを汎用プログラミング記述として生成することにより、高速かつ安価にハードウェアの回路動作を検証し、ハードウェアの設計および検証期間を短縮して、低コストによりシステムＬＳＩの開発を実現できる本発明の目的を達成することができる。
【０１４０】
以上のように、本発明の好ましい実施形態を用いて本発明を例示してきたが、本発明は、この実施形態に限定して解釈されるべきものではない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。当業者は、本発明の具体的な好ましい実施形態の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。本明細書において引用した特許、特許出願および文献は、その内容自体が具体的に本明細書に記載されているのと同様にその内容が本明細書に対する参考として援用されるべきであることが理解される。
【産業上の利用可能性】
【０１４１】
本発明は、多相クロックにより回路動作するハードウェアの処理動作をサイクル精度レベルで検証可能なモデルを汎用プログラミング記述として生成するハードウェア検証用プログラミング記述生成装置、高位合成装置、このハードウェア検証用プログラミング記述生成装置を用いたハードウェア検証用プログラミング記述生成方法、これを用いたハードウェア検証用プログラム生成方法、このハードウェア検証用プログラミング記述生成方法の各処理手順をコンピュータに実行させるためのハードウェア検証用プログラミング記述生成プログラムおよび、これを用いたハードウェア検証用プログラムなどの制御プログラムおよびこの制御プログラムが記録されたコンピュータ読み取り可能な可読記憶媒体の分野において、ハードウエアをクロック系統毎にブロック分割し、分割されたブロック（クロックドメイン）毎にハードウェアをサイクル精度レベルで検証可能なサイクル精度モデルを生成し、各クロックドメインのモデルの計算（シミュレーション）が行われる順番を制御する制御モデルを生成するため、多相クロックにより動作するハードウェアの回路動作をサイクル精度レベルで検証することができる。さらに、これらのモデルを汎用プログラミング言語記述として生成するため、ＨＤＬシミュレータによる回路動作の検証に比べて高速かつ安価に検証を行うことができる。これによって、ＬＳＩ開発において設計と検証に必要な期間を大幅に短縮化できて、システムＬＳＩの開発コストを削減することができる。
【図面の簡単な説明】
【０１４２】
【図１】本発明の実施形態に係るハードウェア検証用プログラミング記述生成装置として機能するコンピュータシステムの基本処理図である。
【図２】図１のコンピュータシステムの要部構成例を示すブロック図である。
【図３】図２のコンピュータシステムを用いたハードウェア検証用プログラミング記述生成方法の各処理手順を示すフローチャートである。
【図４】多相クロックにより回路動作するハードウェアにおいて並列動作するクロックドメインの例を示すブロック図である。
【図５】図４のクロックＡ、クロックＢおよびクロックＣの状態を、ハードウェア信号のＨｉｇｈおよびＬｏｗを用いて表した信号波形図である。
【図６】従来のハードウェア検証用プログラミング記述生成装置の要部構成例を示すブロック図である。
【符号の説明】
【０１４３】
１  モニタ装置
２  キーボードなどの入力装置
３  計算機本体
３１  制御部（ＣＰＵ）
３２  メモリなどの可読記録媒体
３３  磁気ディスクなどの可読記録媒体
４  ハードウェア高位合成プログラム
４１  構文解析・字句解析処理手段
４２  クロックドメイン分割処理手段
４３  ＣＤＦＧ生成手段
４４  スケジューリング・ステート割り振り手段
４５  サイクル精度モデル生成手段
４６  クロックドメインの制御モデル生成手段
４７  多相クロックにより動作するハードウェアの動作記述
４８Ａ  クロックドメインＡのＣＤＦＧ
４８Ｂ  クロックドメインＢのＣＤＦＧ
４９Ａ  クロックドメインＡのサイクル精度記述
４９Ｂ  クロックドメインＢのサイクル精度記述
５０  クロックドメインの制御情報
５１  クロックドメインの制御記述
５２  多相クロックにより動作するハードウェアの動作をサイクル精度レベルで検証可能な実行形式のハードウェア検証用プログラム
５  検証対象であるハードウェア
１０  ハードウェア検証用プログラミング記述生成装置として機能するコンピュータシステム
【図１】
2008117318.tif 000003
【図２】
2008117318.tif 000004
【図３】
2008117318.tif 000005
【図４】
2008117318.tif 000006
【図５】
2008117318.tif 000007
【図６】
2008117318.tif 000008