(57)【要約】【課題】複数の入力値それぞれに対する処理を順次実行するＬＳＩのＲＴＬ記述であっても、そのＲＴＬ記述を正しく検証することが可能なソフトウェアを、動作記述の検証用のテストプログラムを用いて生成することができるソフトウェア生成装置を実現する。【解決手段】ソフトウェア生成装置１０は、ＲＴＬ記述を制御するためのドライバ関数を生成する。さらに、ソフトウェア生成装置１０は、合否判定を実行するタイミングをパイプライン・ステージ数分だけずらすための機能が組み込まれた、新たな判定処理関数を生成する。この判定処理関数は、テストプログラムから入力値と出力値との組を受け取る度に受け取った入力値をバッファに保存し、テストプログラムから入力値と出力値との組を受け取った回数がパイプライン・ステージ数を越えたことを条件に、判定処理を実行する。【選択図】      図１
2009217720.tif 000002
【特許請求の範囲】
【請求項１】
高級プログラミング言語によってＬＳＩの動作を記述した動作記述を高位合成することによって得られるＲＴＬ記述を検証するためのソフトウェアを生成するソフトウェア生成装置であって、
前記動作記述の内容を検証するためのテストプログラムを格納する記憶部と、
前記テストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に、当該受け取った入力値を前記ＲＴＬ記述に与え、且つ、前記ＲＴＬ記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成手段と、
前記ＲＴＬ記述が入力値を入力してから、当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を、入力する入力手段と、
前記記憶部に格納された前記テストプログラムと、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから、入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に、当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成手段とを具備し、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが、前記ＲＴＬ記述を検証するための前記ソフトウェアとして機能することを特徴とするソフトウェア生成装置。
【請求項２】
前記判定処理関数は、前記テストプログラムから順次与えられる、入力値と出力値との組それぞれを受け取る手続きと、前記テストプログラムから入力値と出力値との組を受け取る度に前記受け取った入力値をバッファに保存する手続きと、前記テストプログラムから入力値と出力値との組を受け取った回数が前記サイクル数情報によって示される実行サイクル数を越えたことを条件に、前記バッファに保存されている最も古い入力値を読み出し当該読み出した入力値と前記テストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定する判定手続きとを実行することを特徴とする請求項１記載のソフトウェア生成装置。
【請求項３】
前記テストプログラムは、前記動作記述に入力値を与え且つ前記動作記述から出力値を得る第１のコードと、前記入力値と前記出力値との関係が期待する関係であるか否かを判定するための関数を含む第２のコードとを各々が含む複数のテスト記述を含み、
前記判定処理関数は、前記第２のコードの実行の度に前記テストプログラムから呼び出されることを特徴とする請求項１記載のソフトウェア生成装置。
【請求項４】
前記判定処理関数は、前記判定処理関数が呼び出された回数をカウントし、前記カウント値が前記実行サイクル数を超えた場合に、前記テストプログラムから入力値と出力値との組を受け取った回数が前記実行サイクル数を越えたという条件が成立したと判定することを特徴とする請求項３記載のソフトウェア生成装置。
【請求項５】
前記第１のコードは、前記動作記述に含まれる前記ＬＳＩの動作を表す所定の関数を呼び出すと共に前記所定の関数に対して入力値を与え且つ前記動作記述から出力値を得る記述を含み、
前記テストプログラムから前記所定の関数に関する情報を抽出し、前記抽出した情報に基づいて、前記第１のコードの実行の度に呼び出されるドライバ呼び出し関数を生成するドライバ呼び出し関数生成手段であって、前記ドライバ呼び出し関数は、前記ドライバ関数を呼び出し、前記テストプログラムから受け取った入力値を前記ドライバ関数に与え且つ前記ドライバ関数から返される前記ＲＴＬ記述の現在の出力値を前記テストプログラムに返す、ドライバ呼び出し関数生成手段をさらに具備することを特徴とする請求項３記載のソフトウェア生成装置。
【請求項６】
前記高位合成によって得られるＲＴＬ記述は、複数の入力値それぞれに対する処理を順次実行するパイプライン回路の構成を表しており、
前記実行サイクル数は、前記パイプライン回路のパイプライン段数を示すことを特徴とする請求項１記載のソフトウェア生成装置。
【請求項７】
前記パイプライン回路のパイプライン段数を示す値は、前記高位合成を実行するための高位合成処理プログラムから入力されることを特徴とする請求項６記載のソフトウェア生成装置。
【請求項８】
高級プログラミング言語によってＬＳＩの動作を記述した動作記述を高位合成することによって得られるＲＴＬ記述を検証するためのソフトウェアを生成する処理をコンピュータによって実行するソフトウェア生成方法であって、
前記動作記述の内容を検証するためのテストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記ＲＴＬ記述に与え且つ前記ＲＴＬ記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成ステップと、
前記ＲＴＬ記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力ステップと、
前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成ステップとを具備し、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記ＲＴＬ記述を検証するための前記ソフトウェアとして機能することを特徴とするソフトウェア生成方法。
【請求項９】
前記判定処理関数は、前記テストプログラムから順次与えられる、入力値と出力値との組それぞれを受け取る手続きと、前記テストプログラムから入力値と出力値との組を受け取る度に前記受け取った入力値をバッファに保存する手続きと、前記テストプログラムから入力値と出力値との組を受け取った回数が前記サイクル数情報によって示される実行サイクル数を越えたことを条件に、前記バッファに保存されている最も古い入力値を読み出し当該読み出した入力値と前記テストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定する判定手続きとを実行することを特徴とする請求項８記載のソフトウェア生成方法。
【請求項１０】
高級プログラミング言語によってＬＳＩの動作を記述した動作記述を高位合成することによって得られるＲＴＬ記述を検証するためのソフトウェアを生成する処理をコンピュータに実行させるプログラムであって、
前記動作記述の内容を検証するためのテストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記ＲＴＬ記述に与え且つ前記ＲＴＬ記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成手順と、
前記ＲＴＬ記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力手順と、
前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成手順とを前記コンピュータに実行させ、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記ＲＴＬ記述を検証するための前記ソフトウェアとして機能することを特徴とするプログラム。
【請求項１１】
前記判定処理関数は、前記テストプログラムから順次与えられる、入力値と出力値との組それぞれを受け取る手続きと、前記テストプログラムから入力値と出力値との組を受け取る度に前記受け取った入力値をバッファに保存する手続きと、前記テストプログラムから入力値と出力値との組を受け取った回数が前記サイクル数情報によって示される実行サイクル数を越えたことを条件に、前記バッファに保存されている最も古い入力値を読み出し当該読み出した入力値と前記テストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定する判定手続きとを実行することを特徴とする請求項１０記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソフトウェアを生成するプログラム生成装置およびプログラム生成方法に関し、特に高位合成によって得られるＲＴＬ記述を検証するためのソフトウェアを生成するプログラム生成装置およびプログラム生成方法に関する。
【背景技術】
【０００２】
近年、半導体技術の進歩により、高機能のＬＳＩまたはＶＬＳＩが広く普及している。最近では、動画像のようなデータストリームをリアルタイムに処理するためのＬＳＩの開発も進められている。
【０００３】
このようなＬＳＩの設計を支援するためのツールとしては、高位合成が知られている。高位合成は、Ｃ言語のような高級プログラミング言語でＬＳＩの動作のみを記述した動作記述から、クロック・サイクルおよびレジスタも含むハードウェアレベルの記述であるＲＴＬ（レジスタ転送レベル）記述を生成する処理である。この高位合成により、ＬＳＩの設計期間の短縮化を図ることができる。
【０００４】
ところで、高位合成を用いたＬＳＩの設計工程においては、まず、Ｃ言語で記述された動作記述の内容を検証するために、テストプログラム（Ｃテストベンチ）によって動作記述を検証することが必要となる。
【０００５】
さらに、動作記述を高位合成することによってＲＴＬ記述を生成した後においては、そのＲＴＬ記述の内容を検証することが必要とされる。この場合、ＲＴＬ記述を検証するための専用のテストプログラムを新たに用意することが必要となる。従来では、ＲＴＬ記述を検証するための専用のテストプログラムは手作業によって作成されており、そのプログラム作成工程に多くの時間が費やされていた。
【０００６】
特許文献１には、ソフトウェアモデルとハードウェアモデルとの間のインタフェースを用いて、ハードウェアモデルを検証するシステムが開示されている。
【０００７】
このシステムにおいては、ソフトウェアモデル側のテストプログラムの実行時に、ドライバを介してハードウェアモデルがコールされる。ハードウェアモデル上で行われた処理の結果はソフトウェアモデル側のテストプログラムに返される。ハードウェアモデルの処理の結果はソフトウェアモデルで行われた処理の結果と比較され、その比較結果に基づいてハードウェアモデルの検証が行われる。
【０００８】
このシステムが実現されたならば、ソフトウェアモデル用のテストプログラムを、ハードウェアモデルのテストにも利用し得る。
【特許文献１】特開２００７−３１０４４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかし、特許文献１のシステムにおいては、複数の入力値それぞれに対する処理を順次実行するように設計されたハードウェアモデルの検証については何等考慮されていない。
【００１０】
データストリームをリアルタイムに処理するためのＬＳＩにおいては、一連の入力をクロック・サイクル毎に順次入力しながら処理し、所定クロック・サイクルだけ経過した後に、一連の入力に対応する一連の出力をクロック・サイクル毎に順次出力することが要求される。
【００１１】
特許文献１のシステムは、ある入力に対応する出力がハードウェアモデルから返されるのを待って、次の入力をハードウェアモデルに与えるという構成である。換言すれば、ある入力に対応する出力がハードウェアモデルから返されるまでは、次の入力をハードウェアモデルに与えることができない。したがって、複数の入力値それぞれに対する処理を順次実行するように設計されたＬＳＩの動作のテストを行うことは困難である。
【００１２】
よって、複数の入力値それぞれに対する処理を順次実行するように設計されたＬＳＩのＲＴＬ記述（例えば、パイプライン回路を含むハードウェアモデル）であっても、そのＲＴＬ記述を正しく検証することが可能なソフトウェアを容易に生成するための新たなツールの実現が必要である。
【００１３】
本発明は上述の事情を考慮してなされたものであり、複数の入力値それぞれに対する処理を順次実行するＬＳＩのＲＴＬ記述であっても、そのＲＴＬ記述を正しく検証することが可能なソフトウェアを、動作記述の検証用のテストプログラムを用いて生成することができるソフトウェア生成装置およびソフトウェア生成方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の一態様によれば、高級プログラミング言語によってＬＳＩの動作を記述した動作記述を高位合成することによって得られるＲＴＬ記述を検証するためのソフトウェアを生成するソフトウェア生成装置であって、前記動作記述の内容を検証するためのテストプログラムを格納する記憶部と、前記テストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記ＲＴＬ記述に与え且つ前記ＲＴＬ記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成手段と、前記ＲＴＬ記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力手段と、前記記憶部に格納された前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成手段とを具備し、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記ＲＴＬ記述を検証するための前記ソフトウェアとして機能することを特徴とするソフトウェア生成装置が提供される。
【００１５】
また、本発明の別の態様によれば、高級プログラミング言語によってＬＳＩの動作を記述した動作記述を高位合成することによって得られるＲＴＬ記述を検証するためのソフトウェアを生成する処理をコンピュータによって実行するソフトウェア生成方法であって、前記動作記述の内容を検証するためのテストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記ＲＴＬ記述に与え且つ前記ＲＴＬ記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成ステップと、前記ＲＴＬ記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力ステップと、前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成ステップとを具備し、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記ＲＴＬ記述を検証するための前記ソフトウェアとして機能することを特徴とするソフトウェア生成方法が提供される。
【００１６】
また、本発明のさらに別の態様によれば、高級プログラミング言語によってＬＳＩの動作を記述した動作記述を高位合成することによって得られるＲＴＬ記述を検証するためのソフトウェアを生成する処理をコンピュータに実行させるプログラムであって、前記動作記述の内容を検証するためのテストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記ＲＴＬ記述に与え且つ前記ＲＴＬ記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成手順と、前記ＲＴＬ記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力手順と、前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成手順とを前記コンピュータに実行させ、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記ＲＴＬ記述を検証するための前記ソフトウェアとして機能することを特徴とするプログラムが提供される。
【発明の効果】
【００１７】
本発明によれば、複数の入力値それぞれに対する処理を順次実行するＬＳＩのＲＴＬ記述であっても、そのＲＴＬ記述を正しく検証することが可能なソフトウェアを、動作記述の検証用のテストプログラムを用いて生成することができる。
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照して本発明の実施形態を説明する。
【００１９】
図１は、本発明の一実施形態に係るソフトウェア生成装置１０の構成を示すブロック図である。このソフトウェア生成装置１０は、高級プログラミング言語によってＬＳＩの動作を記述した動作記述を高位合成することによって得られるＲＴＬ（レジスタ転送レベル）記述を検証するためのソフトウェアを生成する装置である。ＲＴＬを検証するためのソフトウェアは、動作記述を検証するために作成されたテストプログラムを用いて自動生成される。
【００２０】
すなわち、このソフトウェア生成装置１０は、図２に示すように、例えばＣ言語によって記述されたＬＳＩの動作記述（Ｃ記述）を検証するために作成されたテストプログラム（Ｃテストベンチ記述）を、ＲＴＬ記述を検証するためのソフトウェア（ＲＴＬテストベンチ記述）に自動的に変換するテストベンチ変換システムとして機能する。
【００２１】
動作記述は設計対象のＬＳＩの動作（機能）のみをＣ言語のような高級プログラミング言語によって記述したものである。ＲＴＬ記述は、ＬＳＩの構成をクロック・サイクルおよびレジスタを含むハードウェアレベルで記述したものである。ＲＴＬ記述は、動作記述を高位合成ツール２０によって高位合成することによって自動生成される。高位合成ツール２０は、高位合成を実行するためのソフトウェアによって実現し得る。
【００２２】
ソフトウェア生成装置１０は、例えば、動作記述を検証するためのＣテストベンチ記述をＲＴＬテストベンチ記述に変換するためのテストベンチ変換プログラムがインストールされたコンピュータによって実現されている。
【００２３】
このソフトウェア生成装置１０は、図１に示すように、テストベンチ記述記憶部１０１、テストベンチ記述解析部１０２、テストベンチ情報記憶部１０３、合否判定関数指定受理部１０４、合否判定関数情報記憶部１０５、パイプライン・ステージ数受理部１０６、パイプライン・ステージ数情報記憶部１０７、ドライバ関数生成部１０８、ドライバ呼び出し関数生成部１０９、合否判定関数変更部１１０、入力値保存バッファ生成部１１１、および変換後のテストベンチ記述群を格納する変換結果記憶部１１２を備えている。テストベンチ記述解析部１０２、合否判定関数指定受理部１０４、パイプライン・ステージ数受理部１０６、ドライバ関数生成部１０８、ドライバ呼び出し関数生成部１０９、合否判定関数変更部１１０、および入力値保存バッファ生成部１１１は、それぞれ上述のテストベンチ変換プログラムを構成する機能モジュールとして実現することができる。
【００２４】
テストベンチ記述記憶部１０１は、Ｃ言語によって記述されたＬＳＩの動作記述を検証するためのＣテストベンチ記述を記憶する。このＣテストベンチ記述もＣ言語などのプログラムで書かれている。このため、Ｃテストベンチ記述は、テストプログラムと称される。Ｃテストベンチ記述においては、Ｃ言語によって記述された動作記述に含まれるテスト対象関数（ＬＳＩの動作を記述した関数）に対して入力を与え、そのテスト対象関数から出力（返り値など）を得て、それら入力と出力との関係に基づいて、テスト対象関数の合否判定（検証）を行なうという手順が記述されている。通常、動作記述の検証は、値の異なる様々な入力値に対して行うことが必要となる。
【００２５】
したがって、Ｃテストベンチ記述（テストプログラム）は、値の異なる様々な入力値に対して動作記述の検証を行うために、複数の入力値それぞれに対応する複数のテスト記述を含んでいる。各テスト記述は、例えば、第１のコードと第２のコードとを含んでいる。
【００２６】
第１のコードは動作記述（テスト対象関数）との入出力を行うために使用される。すなわち、第１のコードは、動作記述に含まれる、ＬＳＩの動作を表すテスト対象関数、を呼び出すと共に、当該テスト対象関数に対して入力値を与え且つ動作記述（当該テスト対象関数）から出力値を得るコードである。
【００２７】
第２のコードは、対応する第１のコードによって動作記述に与えられた入力値と動作記述から得られた出力値との関係が正しいか否かを判定するために使用される。すなわち、第２のコードは、入力値と出力値との関係が期待する関係であるか否かを、所定の検証アルゴリズムに従って判定するためのコードである。
【００２８】
テストベンチ記述解析部１０２は、テストベンチ記述記憶部１０１に格納されているＣテストベンチ記述（テストプログラムのソースファイル）を解析して、Ｃテストベンチ記述のどこがテスト対象関数（動作記述）を呼び出している部分（第１のコード）であるかなどを検出する。例えば、Ｃテストベンチ記述中に、テスト対象関数を呼び出している部分を指定するフラグ／コメントを付加しておくようにしてもよい。この場合、テストベンチ記述解析部１０２は、そのフラグ／コメントに基づいて、Ｃテストベンチ記述の中で、テスト対象関数を呼び出している部分を検出することができる。また、関数の名前付けルールを定めておくようにしてもよい。この場合、テストベンチ記述解析部１０２は、名前付けルールに基づいて、テスト対象関数に使用されている関数名を予測することができるので、Ｃテストベンチ記述中に含まれる、テスト対象関数を呼び出している部分を検出することができる。また、テストベンチ記述解析部１０２は、Ｃテストベンチ記述中に含まれる、上述の第２のコードを検出することもできる。
【００２９】
テストベンチ情報記憶部１０３は、テストベンチ記述解析部１０２による解析によって得られた情報、つまり第１のコードに関する情報等をテストベンチ情報として格納する。
【００３０】
合否判定関数指定受理部１０４は、テストベンチ記述記憶部１０１に格納されているＣテストベンチ記述中のどこが合否判定部分（第２のコード）であるかを指定する入力情報を受け付ける部分である。この入力情報は、例えば、ユーザから与えられる。もちろん、テストベンチ記述解析部１０２または他のツールが、Ｃテストベンチ記述を解析してＣテストベンチ記述中のどこが合否判定部分（第２のコード）であるかを検出し、その検出結果を、合否判定関数指定受理部１０４に通知するようにしてもよい。合否判定部分（第２のコード）を検出する処理においても、上述のフラグ／コメントや、名前付けルールなどを利用することができる。
【００３１】
なお、合否判定部分（第２のコード）は必ずしも一つの独立した関数として記述されている必要はなく、入力値と出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定するための関数を少なくとも含む複数のコード群から構成してもよい。
【００３２】
合否判定関数情報記憶部１０５は、合否判定部分（第２のコード）の記述を格納する。
【００３３】
パイプライン・ステージ数受理部１０６は、ＲＴＬ記述（ハードウェアモデル）が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を指定する入力情報（サイクル数情報）を受け付ける部分である。この入力情報は、例えば、ユーザから与えられる。ＲＴＬ記述（ハードウェアモデル）の実行サイクル数は、そのＲＴＬ記述を生成した高位合成ツール２０からのレポートによってユーザに提示されるので、ユーザは、その実行サイクル数をパイプライン・ステージ数受理部１０６に対して入力することができる。
【００３４】
高位合成ツール２０によって生成されるＲＴＬ記述が複数の入力値それぞれに対する処理を順次実行するパイプライン回路の構成をハードウェアモデルとして表している場合には、実行サイクル数は、パイプライン回路のパイプライン段数（パイプライン・ステージ数）によって与えられる。パイプライン・ステージ数受理部１０６によって入力されたパイプライン段数のようなサイクル数情報は、パイプライン・ステージ数情報記憶部１０７に格納される。
【００３５】
なお、パイプライン段数のようなサイクル数情報は必ずしもユーザが入力する必要はない。例えば、パイプライン・ステージ数受理部１０６は、高位合成ツール２０から自動的にパイプライン段数のようなサイクル数情報を入力することもできる。
【００３６】
ドライバ関数生成部１０８は、ＲＴＬ記述（ハードウェアモデル）の内容に基づいて、ＲＴＬ記述（ハードウェアモデル）に対して入出力操作を行うためのドライバ関数を生成する。このドライバ関数は、テストプログラム（Ｃテストベンチ記述）から順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に、当該受け取った入力値をＲＴＬ記述に与え且つＲＴＬ記述の現在の出力値をテストプログラムに返す。ドライバ関数の生成には、例えば、上述の特開２００７−３１０４４９号公報に記載された方法を使用し得る。
【００３７】
ドライバ呼び出し関数生成部１０９は、テストベンチ情報記憶部１０３に格納されたテストベンチ情報つまり第１のコードに関する情報から、動作記述内のテスト対象関数に関する情報（テスト対象関数の関数名、引数の数、引数の型、等）を抽出し、その抽出したテスト対象関数に関する情報に基づいて、例えば、テスト対象関数と同じ関数名を有し、第１のコードの実行の度に呼び出されるドライバ呼び出し関数を生成する。このドライバ呼び出し関数は、第１のコードによるテスト対象関数の呼び出しを、上述のドライバ関数に呼び出しに変更するための関数として使用される。
【００３８】
このドライバ呼び出し関数がテストプログラムの第１のコードによって呼び出された時、このドライバ呼び出し関数は、ドライバ関数を呼び出し、テストプログラムの第１のコードから受け取った入力値をドライバ関数に与え且つドライバ関数から返されるＲＴＬ記述の現在の出力値を、テストプログラムの第１のコードに返す。
【００３９】
なお、ドライバ呼び出し関数生成部１０９は、テストベンチ記述記憶部１０１に格納されたテストプログラム(Ｃテストベンチ記述)からテスト対象関数に関する情報を直接的に抽出することもできる。また、ドライバ呼び出し関数を介してドライバ関数を呼び出す代わりに、テストプログラム中の第１のコード内のテスト対象関数の関数名を、ドライバ関数の関数名に書き換えるようにしてもよい。これにより、テストプログラムから直接的にドライバ関数を呼び出すことが出来る。
【００４０】
合否判定関数変更部１１０は、テストプログラム(Ｃテストベンチ記述)中の合否判定処理部分を、合否判定関数情報記憶部１０５に格納された合否判定関数情報とパイプライン・ステージ数情報記憶部１０７に格納されたサイクル数情報（パイプライン・ステージ数）とに基づいて変更する部分である。すなわち、合否判定関数変更部１１０は、テストベンチ記述記憶部１０１に格納されたテストプログラム(Ｃテストベンチ記述)または合否判定関数情報記憶部１０５に格納された合否判定関数情報から、第２のコードに含まれる合否判定のための関数に関する情報（合否判定関数の関数名、引数の数、引数の型、等）を抽出する。そして、合否判定関数変更部１１０は、抽出した情報と、合否判定関数指定受理部１０４によって入力されたサイクル数情報とに基づいて、新たな判定処理関数を生成する。
【００４１】
ＲＴＬ記述が複数の入力値それぞれに対する処理を順次実行するハードウェアモデル（パイプライン回路）を表す場合、そのハードウェアモデルは、一連の入力をクロック・サイクル毎に順次入力しながら処理し、所定クロック・サイクルだけ経過した後に、一連の入力に対応する一連の出力をクロック・サイクル毎に順次出力する。例えば、パイプライン・ステージ数が３であれば、ハードウェアモデルは、一連の入力値（入力データ１，２，３，４，５，…）をクロック・サイクル毎に順次入力しながら処理し、４つ目の入力値（入力データ４）を入力したときに、１つ目の入力値（入力データ１）対応する出力値（処理結果データ）を出力する。
【００４２】
このようなハードウェアモデルの動作を正しく検証できるようにするために、新たな判定処理関数には、判定処理のタイミングをずらすための仕組みが含まれている。すなわち、新たな判定処理関数は、テストプログラムから入力値と出力値との組を受け取った回数が、サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する。
【００４３】
具体的には、この判定処理関数は、例えば、（１）テストプログラムから順次与えられる、入力値と出力値との組それぞれを受け取る手続きと、（２）テストプログラムから入力値と出力値との組を受け取る度に、受け取った入力値を記憶領域としてのバッファに保存する手続きと、（３）テストプログラムから入力値と出力値との組を受け取った回数がサイクル数情報によって示される実行サイクル数を越えたことを条件に、バッファに保存されている最も古い入力値を読み出し当該読み出した入力値とテストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定する判定手続きとを実行する。
【００４４】
判定処理関数は、例えば第２のコードによって呼び出される合否判定のための関数と同じ関数名を有しており、第２のコードの実行の度にテストプログラムから呼び出される。
【００４５】
入力値保存バッファ生成部１１１は、幾つかの入力値を保存するための上述のバッファを生成する部分である。バッファのサイズは、少なくともパイプライン・ステージ数以上である。
【００４６】
変換結果記憶部１１２は、ドライバ関数生成部１０８によって生成されたドライバ関数、ドライバ呼び出し関数生成部１０９によって生成されたドライバ呼び出し関数、合否判定関数変更部１１０によって生成された判定処理関数を格納する。
【００４７】
これらドライバ関数、ドライバ呼び出し関数、および判定処理関数を用いることにより、動作記述を検証するためのテストプログラム（Ｃテストベンチ記述）を、ＲＴＬ記述の検証に再利用することが可能となる。すなわち、これらドライバ関数、ドライバ呼び出し関数、および判定処理関数は、動作記述を検証するためのテストプログラム（Ｃテストベンチ記述）と一緒に、ＲＴＬ記述を検証するためのソフトウェア（ＲＴＬテストベンチ記述）として機能する。ＲＴＬ記述を検証するためのソフトウェア（ＲＴＬテストベンチ記述）においては、動作記述を検証するためのテストプログラムがそのまま再利用される。
【００４８】
次に、図３を参照して、ソフトウェア生成装置１０によって生成される、ＲＴＬ記述を検証するためのソフトウェア（ＲＴＬテストベンチ記述）の具体例を説明する。
【００４９】
ＲＴＬテストベンチ記述は、上述したように、テストプログラム（Ｃテストベンチ記述）を用いて生成される。
【００５０】
図２において、２０１はテストプログラム（Ｃテストベンチ記述）である。このテストプログラム２０１の記述例においては、Ｃ言語で記述された動作記述内のテスト対象関数がfunction1()であり、合否判定関数がjudge1()である。すなわち、y1=function1(x1)の部分が上述の第１のコードに相当し、judge1(x1,y1)が上述の第２のコードに相当する。
【００５１】
ここで、テスト対象関数function1は整数型の引数を１個受け取り、整数型の計算結果１個を返すというものである。
【００５２】
y1=function1(x1)は、動作記述内のテスト対象関数function1を呼び出して、テスト対象関数function1に対して入力値X1を与え且つ動作記述から出力値Y1を得るという手順を実行するためのコードである。judge1(x1,y1)は、入力値x1と出力値y1との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定するという手順を実行するためのコードである。y1=function1(x1)とjudge1(x1,y1)とによって１つ目のテスト記述が構成されている。
【００５３】
同様に、y2=function1(x2)とjudge1(x2,y2)は２つ目のテスト記述を構成し、y3=function1(x3)とjudge1(x3,y3)は３つ目のテスト記述を構成し、y4=function1(x4)とjudge1(x4,y4)は４つ目のテスト記述を構成し、y5=function1(x5)とjudge1(x5,y5)は５つ目のテスト記述を構成している。
【００５４】
テストプログラム２０１の実行時には、各々が第１のコードと第２のコードとを含む複数のテスト記述がシーケンシャルに実行される。
【００５５】
２０２は、第１のコードによるfunction1()の呼び出しを、ドライバ関数function1-driver()の呼び出しに変更するためのドライバ呼び出し関数である。このドライバ呼び出し関数２０２は、第１のコードの実行の度に呼び出される。すなわち、ドライバ呼び出し関数２０２は第１のコードによって呼び出されるべきテスト対象関数function1()と同じ関数名を有している。
【００５６】
このドライバ呼び出し関数２０２は、ドライバ関数２０３を呼び出し、第１のコードから受け取った入力値をドライバ関数２０３を通じてＲＴＬ記述に与え且つドライバ関数２０３から返されるＲＴＬ記述の現在の出力値を第１のコードに返す。
【００５７】
ドライバ関数２０３はＲＴＬ記述を制御するための関数であり、入力に対する出力が返ってくるまで待つのではなく、入力時の出力をすぐに返すような動作をするように構成されている。このドライバ関数２０３は、ＲＴＬ記述の内容に基づいて、ユーザがコーディングすることも可能である。
【００５８】
２０４は上述の判定処理関数（以下、判定関数と称する）である。Ｃ言語で記述された動作記述（テスト対象関数）は、入力に対する出力を瞬時に返すので、動作記述の検証時においては、テストプログラム２０１は入力値と出力値との関係が期待する関係であるか否かを判定する処理を即座に実行することができる。しかし、パイプライン回路を含むＲＴＬ記述（ハードウェアモデル）の検証時には、入力に対する出力がすぐには返ってこない。そのため、ＲＴＬ記述の検証時には、入力に対する出力が返されるまで、入力値と出力値との関係が期待する関係であるか否かを判定する処理の実行を待つことが必要となる。しかも、待機期間中においても、ＲＴＬ記述に対しては、後続する入力値を順次与えることが必要である。そのため、判定関数２０４には、上述したように、第２のコードから受け取った入力値をバッファに保存する手続きと、テストプログラムから受け取った入力値の数つまりテストプログラムから判定関数２０４が呼び出された回数、が実行サイクル数（パイプライン・ステージ数）を超えたことを条件に、バッファに保存されている最も古い入力値を読み出して、当該読み出した入力値とテストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを判定する手続きとが含まれている。
【００５９】
判定関数２０４は、例えば、第２のコードの実行時に呼び出されるように、第２のコード内に含まれる合否判定関数と同じ関数名を有している。この判定関数２０４の引数は２つで、整数型のxとyである。xは動作記述またはＲＴＬ記述に与えられるべき入力値であり、yは動作記述またはＲＴＬ記述から得られる出力値である。判定関数２０４が第２のコードによって呼び出された時、判定関数２０４は、第２のコードから入力値xと出力値yを受け取る。
【００６０】
判定関数２０４において、countは判定関数２０４が呼び出された回数をカウントするための変数である。count++は、呼び出された回数を更新（カウントアップ）するための記述である。buf_push_back(x)は、入力値を一旦バッファに入れるための記述である。if (count > パイプライン・ステージ数)は、呼び出された回数が実行サイクル数（パイプライン・ステージ数）を超えるという条件が成立したか否かを判定するための記述である。x1 = buf_pop_front()は、バッファに保存されている最も古い入力値を読み出すための記述である。judge1-本体 (x1, y)は、バッファから読み出された入力値x1と第２のコードから受け取った現在の出力値yとが期待する関係であるか否かを判定する記述である。
【００６１】
例えばパイプライン・ステージ数が３ならば、最初の入力値x1に対応する出力y4がＲＴＬ記述から返されるタイミングは、４つ目のテスト記述のために入力値x4をＲＴＬ記述に与える時である。この場合、判定関数２０４は、４つ目のテスト記述に含まれる第２のコードによって呼び出された時点から、合否判定処理を開始する。合否判定処理では、バッファに保存されている最も古い入力値（ここでは、入力値x1）がバッファから取り出され、この入力値x1と、第２のコードから受け取った最新の出力値y（入力値x1に対応するＲＴＬ記述からの出力値）とが期待する関係であるか否かが判定される。
【００６２】
図４は、判定関数２０４によって実行される処理の手順を示すフローチャートである。
【００６３】
テストプログラム２０１内の第２のコードが実行される度に、判定関数２０４が第２のコードによってコールされる。この場合、判定関数２０４は、以下の処理を実行する。
【００６４】
判定関数２０４は、第２のコードから入力値と出力値との組を受け取り、受け取った入力値をバッファに保存し（ステップＳ１０１）、そして変数countの値を＋１更新する（ステップＳ１０２）。そして、判定関数２０４は、現在の変数countの値がパイプライン・ステージ数よりも大きいか否かを判定する（ステップＳ１０３）。
【００６５】
現在の変数countの値がパイプライン・ステージ数よりも大きくないならば（ステップＳ１０３のＮＯ）、判定関数２０４は終了され、テストプログラム２０１に制御が戻される。
【００６６】
現在の変数countの値がパイプライン・ステージ数よりも大きいならば（ステップＳ１０３のＹＥＳ）、判定関数２０４は、バッファに保存されている最も古い入力値を読み出し（ステップＳ１０４）、この入力値と、第２のコードから受け取った最新の出力値とが期待する関係であるか否かを判定する（ステップＳ１０５）。
【００６７】
次に、図２で説明したドライバ呼び出し関数２０２、ドライバ関数２０３、判定関数２０４それぞれを生成するための具体的な処理の手順の例について説明する。
【００６８】
＜ドライバ呼び出し関数２０２の生成＞
ドライバ呼び出し関数２０２は、以下の手順で生成される。
【００６９】
１．  ソフトウェア生成装置１０は、Ｃ言語で記述された動作記述またはＣテストベンチ記述から、第１のコードによって呼び出されるテスト対象関数に関する情報（テスト対象関数の関数名、返り値の型、引数の数と型、等）を抽出する。
【００７０】
２．  ソフトウェア生成装置１０は、テスト対象関数に関する情報を用いて、ドライバ呼び出し関数２０２の殻の部分（int function1(int x) { }）を作る。
【００７１】
３．  ソフトウェア生成装置１０は、ドライバ呼び出し関数２０２の関数の殻の中に、ドライバ関数function1-driver()を呼び出して入力値を与え、ドライバ関数function1-driver()からの結果を返す記述を加える。
【００７２】
＜ドライバ関数２０３の生成＞
ドライバ関数２０３の関数名はドライバ呼び出し関数２０２の作成時に既に生成されているので、その関数名（「テスト対象関数名-driver」）。ドライバ関数２０３が扱う返り値の型、引数の数と型も、テスト対象関数と同じである。つまり、ドライバ関数２０３は、以下の手順で生成される。
【００７３】
１．  ソフトウェア生成装置１０は、ドライバ関数２０３の関数名を生成し、そして返り値の型、引数の数と型をテスト対象関数と同じものを用いて、ドライバ関数２０３の関数の殻の部分（int function1-driver(int x) { }）を生成する。
【００７４】
２．  ソフトウェア生成装置１０は、ドライバ関数２０３の関数の殻の中に、ハードウェアモデル（ＨＷモデル）を起動する記述、ドライバ呼び出し関数２０２から受け取った入力値をハードウェアモデルに与え、その時点でのハードウェアモデルの出力値をドライバ呼び出し関数２０２に返す記述を加える。
【００７５】
＜判定関数２０４の生成＞
判定関数２０４の関数の名としては、第２のコードによって呼び出される合否判定関数と同じものが用いられる。判定関数２０４の引数の数と型、返り値の型も、やはり合否判定関数と同じものを用いることができる。判定関数２０４の内容のほとんどの部分は固定的に作れるものでうり、可変となるのは、パイプライン・ステージ数の部分等である。パイプライン・ステージ数の値は、高位合成ツール２０から入力することが出来る。バッファについては、予め用意しておくことができる。すなわち、判定関数２０４は、以下の手順で生成される。
【００７６】
１．  ソフトウェア生成装置１０は、Ｃテストベンチ記述から、第２のコード内に含まれる合否判定関数に関する情報（合否判定関数の関数名、返り値の型、引数の数と型、等）を抽出する。
【００７７】
２．  ソフトウェア生成装置１０は、合否判定関数に関する情報を用いて、判定関数２０４の殻の部分（void judge1(int x, int y) { }）を作る。
【００７８】
３．  ソフトウェア生成装置１０は、判定関数２０４の殻の中に、判定関数２０４が何回呼ばれたかをカウントするためのstatic変数countの宣言を追加する。
【００７９】
４．  ソフトウェア生成装置１０は、判定関数２０４の殻の中に、入力の値xの判定タイミングをずらすために必要な変数x1の宣言を追加する。この変数x1は判定関数２０４内のローカル変数であるため、変数x1の名称は判定関数２０４内でユニークであれば何でもよい（この例では x1 としている）。
【００８０】
５．  ソフトウェア生成装置１０は、判定関数２０４の殻の中に、入力データをバッファに格納するための記述（buf_push_back(x);）を追加する。
【００８１】
６．  ソフトウェア生成装置１０は、判定関数２０４の殻の中に、判定関数２０４が呼び出された回数を示す変数 count をカウントアップする記述（count++;）を追加する。
【００８２】
７．  合否判定を開始するのは、ＲＴＬ記述（ハードウェアモデル）から「意味のある出力」が出てくるようなタイミングになってからである。このタイミングが到来するのは、判定関数２０４が「パイプライン・ステージ数」だけ呼ばれた後になる。つまり、テストプログラム中の、「パイプライン・ステージ数」と同数のテスト記述が実行されて、「パイプライン・ステージ数」に対応する個数の入力値がＲＴＬ記述に与えられた後に、最初のテスト記述によってＲＴＬ記述に与えられた入力値に対するＲＴＬ記述の動作の検証を開始することが必要となる。したがって、ソフトウェア生成装置１０は、判定関数２０４の殻の中に、「パイプライン・ステージ数」だけの回数呼ばれてから判定するという条件判断の記述（if (count > パイプライン・ステージ数) { }）を追加する。パイプライン・ステージ数は、実際には単なる数値となる。
【００８３】
８．  ソフトウェア生成装置１０は、バッファから最も古い入力値を取り出し、合否判定を行なう記述を生成する。合否判定を行なうタイミングは、上述の通り意味のある出力が出てくるようになってからなので、バッファから最も古い入力値を取り出し、合否判定を行なう記述は、上述の if 文の中に生成される。if 文の中に生成すべき、合否判定を行なう関数としては、第２のコードの中に書かれている記述をそのまま使えばよい。但し、関数名だけは変えておく必要がある（ここでは judge1-本体 ()とした）。つまり、ソフトウェア生成装置１０は、「x1 = buf_pop_front();」という記述と、「judge1-本体 (x1, y);」という記述を if 文の中に生成する。
【００８４】
以上の手順を実行することにより、ＲＴＬ記述を検証するためのソフトウェア（ドライバ呼び出し関数２０２、ドライバ関数２０３、判定関数２０４）を生成することができる。テストプログラム２０１、ドライバ呼び出し関数２０２、ドライバ関数２０３、判定関数２０４をそれぞれコンパイルおよびリンクすることにより、ＲＴＬ記述を検証するためのソフトウェアをバイナリーフォーマットに変換することができる。
【００８５】
次に、図５のフローチャートを参照して、ソフトウェア生成装置１０によって実行されるテストベンチ変換処理の手順を説明する。
【００８６】
ソフトウェア生成装置１０は、まず、Ｃテストベンチ記述を解析する（ステップＳ３０１）。このステップＳ３０１では、図１のテストベンチ記述解析部１０２が、Ｃテストベンチ記述を解析して、Ｃテストベンチ記述からテスト対象関数（動作記述）を呼び出している部分（第１のコード）を抽出する。次いで、ソフトウェア生成装置１０は、合否判定関数を指定する情報を入力する（ステップＳ３０２）。このステップＳ３０２では、合否判定関数指定受理部１０４が、たとえばユーザから与えられる、Ｃテストベンチ記述中のどこが合否判定部分（第２のコード）であるかを指定する入力情報を受理する。もちろん、テストベンチ記述解析部１０２が、Ｃテストベンチ記述を解析して、Ｃテストベンチ記述から合否判定部分（第２のコード）を抽出することもできる。
【００８７】
この後、ソフトウェア生成装置１０は、パイプライン・ステージ数を示すサイクル数情報を入力する（ステップＳ３０３）。このステップＳ３０３では、パイプライン・ステージ数受理部１０６が、例えば、ユーザまたは高位合成ツール２０から与えられる、サイクル数情報を入力する。
【００８８】
そして、ソフトウェア生成装置１０は、ドライバ関数２０３を生成する（ステップＳ３０４）。ステップＳ３０４では、ドライバ関数生成部１０８が、ＲＴＬ記述（ハードウェアモデル）の内容に基づいて、ドライバ関数２０３を生成する。次いで、ソフトウェア生成装置１０は、テスト対象関数の呼び出しをドライバ関数２０３の呼び出しに変更するために使用されるドライバ呼び出し関数２０２を生成する（ステップＳ３０５）。このステップＳ３０５では、ドライバ呼び出し関数生成部１０９は、第１のコードに関する情報からテスト対象関数に関する情報を抽出し、その抽出したテスト対象関数に関する情報に基づいて、ドライバ呼び出し関数２０２を生成する。ドライバ呼び出し関数２０２にはテスト対象関数と同じ関数名が付与される。これにより、第１のコードの実行の度にドライバ呼び出し関数２０２が呼び出される。
【００８９】
次いで、ソフトウェア生成装置１０は、バッファ（入力値保存バッファ）を生成する（ステップＳ３０６）。このステップＳ３０６では、入力値保存バッファ生成部１１１は、少なくともパイプライン・ステージ数と同じ個数の入力値を保存可能なサイズを有する入力値保存バッファを生成する。この後、ソフトウェア生成装置１０は、判定関数２０４を生成する（ステップＳ３０７）。このステップＳ３０７においては、合否判定関数変更部１１０は、第２のコードに含まれる合否判定関数に関する情報を抽出し、その抽出した情報と、サイクル数情報とに基づいて、判定関数２０４を生成する。判定関数２０４には合否判定関数と同じ関数名が付与される。これにより、第２のコードの実行の度に判定関数２０４が呼び出される。判定関数２０４には、合否判定を実行するタイミングをパイプライン・ステージ数に対応する分だけずらすための機能が組み込まれている。
【００９０】
以上のように、本実施形態によれば、複数の入力値それぞれに対する処理を順次実行するＬＳＩのＲＴＬ記述であっても、そのＲＴＬ記述を正しく検証することが可能なソフトウェアを、動作記述検証用のテストプログラムを用いて自動生成することができる。この場合、動作記述検証用のテストプログラムに記述された、入力値群および合否判定アルゴリズム等を何等変更することなく、ＲＴＬ記述の検証処理に利用することができる。
【００９１】
なお、本実施形態では、ドライバ呼び出し関数生成部１０９および合否判定関数生成部１１０とは独立したモジュールとしてテストベンチ記述解析部１０２を設ける例を説明したが、ドライバ呼び出し関数生成部１０９および合否判定関数生成部１１０がそれぞれテストベンチ記述解析部１０２と同等のソースプログラム解析機能を有していても良い。この場合、ドライバ呼び出し関数生成部１０９は、テストプログラムを解析することによって当該テストプログラムからテスト対象関数に関する情報を抽出し、その抽出した情報に基づいて、ドライバ呼び出し関数２０２を生成する。また、合否判定関数生成部１１０は、テストプログラムを解析することによって当該テストプログラムから第２のコードに含まれる合否判定関数に関する情報を抽出し、その抽出した情報と、入力されたサイクル数情報とに基づいて、判定関数２０４を生成する。
【００９２】
また、本実施形態では、判定関数２０４が呼び出された回数をカウントし、そのカウント値に基づいて、判定関数２０４が呼び出された回数、つまり判定関数２０４がテストプログラムから入力値と出力値との組を受け取った回数、が実行サイクル数を超えたか否かを判別したが、バッファが複数の入力値で満たされるというバッフフルの有無に基づいて、判定関数２０４が呼び出された回数、つまり判定関数２０４がテストプログラムから入力値と出力値との組を受け取った回数、が実行サイクル数を超えたか否かを判別してもよい。
【００９３】
また、本実施形態では、判定関数２０４は、テストプログラムから受け取った入力値それぞれをバッファに保存することによって判定処理のタイミングをずらしたが、バッファに限らず、例えば、複数の入力値を保持可能な、配列またはリスト構造等を用いて、判定処理のタイミングをずらすこともできる。
【００９４】
また、本実施形態では、第２のコードから直接的に判定関数２０４を呼び出すようにしたが、例えば、第２のコードに含まれる合否判定関数と同じ関数名を有する別の関数を生成し、この別の関数から判定関数２０４を呼び出すようにしてもよい。この場合、判定関数２０４の関数名は合否判定関数の関数名と同じにする必要はない。
【００９５】
また、本実施形態のテストベンチ変換処理機能は全てコンピュータプログラムによって実現できるので、このコンピュータプログラムが格納されたコンピュータ読み取り可能な記憶媒体を介して本コンピュータプログラムを通常のコンピュータにインストールするだけで、本実施形態と同様の効果を容易に実現することが可能となる。
【００９６】
また、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００９７】
【図１】本発明の一実施形態に係るソフトウェア生成装置のシステム構成を示すブロック図。
【図２】同実施形態のソフトウェア生成装置がテストベンチ変換システムとして機能することを説明するための図。
【図３】同実施形態のソフトウェア生成装置によって生成されるプログラム群それぞれの構成を説明するための図。
【図４】同実施形態のソフトウェア生成装置によって生成される判定関数によって実行される手順を説明するためのフローチャート。
【図５】同実施形態のソフトウェア生成装置によって実行されるテストベンチ変換処理の手順を示すフローチャート。
【符号の説明】
【００９８】
１０…ソフトウェア生成装置、１０１…テストベンチ記述記憶部、１０２…テストベンチ記述解析部、１０３…テストベンチ情報記憶部、１０４…合否判定関数指定受理部、１０５…合否判定関数情報記憶部、１０６…パイプライン・ステージ数受理部、１０７…パイプライン・ステージ数情報記憶部、１０８…ドライバ関数生成部、１０９…ドライバ呼び出し関数生成部、１１０…合否判定関数変更部、１１１…入力値保存バッファ生成部。
【図１】
2009217720.tif 000003
【図２】
2009217720.tif 000004
【図３】
2009217720.tif 000005
【図４】
2009217720.tif 000006
【図５】
2009217720.tif 000007