JP2009217720A - プログラム生成装置およびプログラム生成方法 - Google Patents
プログラム生成装置およびプログラム生成方法 Download PDFInfo
- Publication number
- JP2009217720A JP2009217720A JP2008062941A JP2008062941A JP2009217720A JP 2009217720 A JP2009217720 A JP 2009217720A JP 2008062941 A JP2008062941 A JP 2008062941A JP 2008062941 A JP2008062941 A JP 2008062941A JP 2009217720 A JP2009217720 A JP 2009217720A
- Authority
- JP
- Japan
- Prior art keywords
- function
- input value
- test program
- description
- received
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】複数の入力値それぞれに対する処理を順次実行するLSIのRTL記述であっても、そのRTL記述を正しく検証することが可能なソフトウェアを、動作記述の検証用のテストプログラムを用いて生成することができるソフトウェア生成装置を実現する。
【解決手段】ソフトウェア生成装置10は、RTL記述を制御するためのドライバ関数を生成する。さらに、ソフトウェア生成装置10は、合否判定を実行するタイミングをパイプライン・ステージ数分だけずらすための機能が組み込まれた、新たな判定処理関数を生成する。この判定処理関数は、テストプログラムから入力値と出力値との組を受け取る度に受け取った入力値をバッファに保存し、テストプログラムから入力値と出力値との組を受け取った回数がパイプライン・ステージ数を越えたことを条件に、判定処理を実行する。
【選択図】 図1
【解決手段】ソフトウェア生成装置10は、RTL記述を制御するためのドライバ関数を生成する。さらに、ソフトウェア生成装置10は、合否判定を実行するタイミングをパイプライン・ステージ数分だけずらすための機能が組み込まれた、新たな判定処理関数を生成する。この判定処理関数は、テストプログラムから入力値と出力値との組を受け取る度に受け取った入力値をバッファに保存し、テストプログラムから入力値と出力値との組を受け取った回数がパイプライン・ステージ数を越えたことを条件に、判定処理を実行する。
【選択図】 図1
Description
本発明はソフトウェアを生成するプログラム生成装置およびプログラム生成方法に関し、特に高位合成によって得られるRTL記述を検証するためのソフトウェアを生成するプログラム生成装置およびプログラム生成方法に関する。
近年、半導体技術の進歩により、高機能のLSIまたはVLSIが広く普及している。最近では、動画像のようなデータストリームをリアルタイムに処理するためのLSIの開発も進められている。
このようなLSIの設計を支援するためのツールとしては、高位合成が知られている。高位合成は、C言語のような高級プログラミング言語でLSIの動作のみを記述した動作記述から、クロック・サイクルおよびレジスタも含むハードウェアレベルの記述であるRTL(レジスタ転送レベル)記述を生成する処理である。この高位合成により、LSIの設計期間の短縮化を図ることができる。
ところで、高位合成を用いたLSIの設計工程においては、まず、C言語で記述された動作記述の内容を検証するために、テストプログラム(Cテストベンチ)によって動作記述を検証することが必要となる。
さらに、動作記述を高位合成することによってRTL記述を生成した後においては、そのRTL記述の内容を検証することが必要とされる。この場合、RTL記述を検証するための専用のテストプログラムを新たに用意することが必要となる。従来では、RTL記述を検証するための専用のテストプログラムは手作業によって作成されており、そのプログラム作成工程に多くの時間が費やされていた。
特許文献1には、ソフトウェアモデルとハードウェアモデルとの間のインタフェースを用いて、ハードウェアモデルを検証するシステムが開示されている。
このシステムにおいては、ソフトウェアモデル側のテストプログラムの実行時に、ドライバを介してハードウェアモデルがコールされる。ハードウェアモデル上で行われた処理の結果はソフトウェアモデル側のテストプログラムに返される。ハードウェアモデルの処理の結果はソフトウェアモデルで行われた処理の結果と比較され、その比較結果に基づいてハードウェアモデルの検証が行われる。
このシステムが実現されたならば、ソフトウェアモデル用のテストプログラムを、ハードウェアモデルのテストにも利用し得る。
特開2007−310449号公報
しかし、特許文献1のシステムにおいては、複数の入力値それぞれに対する処理を順次実行するように設計されたハードウェアモデルの検証については何等考慮されていない。
データストリームをリアルタイムに処理するためのLSIにおいては、一連の入力をクロック・サイクル毎に順次入力しながら処理し、所定クロック・サイクルだけ経過した後に、一連の入力に対応する一連の出力をクロック・サイクル毎に順次出力することが要求される。
特許文献1のシステムは、ある入力に対応する出力がハードウェアモデルから返されるのを待って、次の入力をハードウェアモデルに与えるという構成である。換言すれば、ある入力に対応する出力がハードウェアモデルから返されるまでは、次の入力をハードウェアモデルに与えることができない。したがって、複数の入力値それぞれに対する処理を順次実行するように設計されたLSIの動作のテストを行うことは困難である。
よって、複数の入力値それぞれに対する処理を順次実行するように設計されたLSIのRTL記述(例えば、パイプライン回路を含むハードウェアモデル)であっても、そのRTL記述を正しく検証することが可能なソフトウェアを容易に生成するための新たなツールの実現が必要である。
本発明は上述の事情を考慮してなされたものであり、複数の入力値それぞれに対する処理を順次実行するLSIのRTL記述であっても、そのRTL記述を正しく検証することが可能なソフトウェアを、動作記述の検証用のテストプログラムを用いて生成することができるソフトウェア生成装置およびソフトウェア生成方法を提供することを目的とする。
本発明の一態様によれば、高級プログラミング言語によってLSIの動作を記述した動作記述を高位合成することによって得られるRTL記述を検証するためのソフトウェアを生成するソフトウェア生成装置であって、前記動作記述の内容を検証するためのテストプログラムを格納する記憶部と、前記テストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記RTL記述に与え且つ前記RTL記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成手段と、前記RTL記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力手段と、前記記憶部に格納された前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成手段とを具備し、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記RTL記述を検証するための前記ソフトウェアとして機能することを特徴とするソフトウェア生成装置が提供される。
また、本発明の別の態様によれば、高級プログラミング言語によってLSIの動作を記述した動作記述を高位合成することによって得られるRTL記述を検証するためのソフトウェアを生成する処理をコンピュータによって実行するソフトウェア生成方法であって、前記動作記述の内容を検証するためのテストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記RTL記述に与え且つ前記RTL記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成ステップと、前記RTL記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力ステップと、前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成ステップとを具備し、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記RTL記述を検証するための前記ソフトウェアとして機能することを特徴とするソフトウェア生成方法が提供される。
また、本発明のさらに別の態様によれば、高級プログラミング言語によってLSIの動作を記述した動作記述を高位合成することによって得られるRTL記述を検証するためのソフトウェアを生成する処理をコンピュータに実行させるプログラムであって、前記動作記述の内容を検証するためのテストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記RTL記述に与え且つ前記RTL記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成手順と、前記RTL記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力手順と、前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成手順とを前記コンピュータに実行させ、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記RTL記述を検証するための前記ソフトウェアとして機能することを特徴とするプログラムが提供される。
本発明によれば、複数の入力値それぞれに対する処理を順次実行するLSIのRTL記述であっても、そのRTL記述を正しく検証することが可能なソフトウェアを、動作記述の検証用のテストプログラムを用いて生成することができる。
以下、図面を参照して本発明の実施形態を説明する。
図1は、本発明の一実施形態に係るソフトウェア生成装置10の構成を示すブロック図である。このソフトウェア生成装置10は、高級プログラミング言語によってLSIの動作を記述した動作記述を高位合成することによって得られるRTL(レジスタ転送レベル)記述を検証するためのソフトウェアを生成する装置である。RTLを検証するためのソフトウェアは、動作記述を検証するために作成されたテストプログラムを用いて自動生成される。
すなわち、このソフトウェア生成装置10は、図2に示すように、例えばC言語によって記述されたLSIの動作記述(C記述)を検証するために作成されたテストプログラム(Cテストベンチ記述)を、RTL記述を検証するためのソフトウェア(RTLテストベンチ記述)に自動的に変換するテストベンチ変換システムとして機能する。
動作記述は設計対象のLSIの動作(機能)のみをC言語のような高級プログラミング言語によって記述したものである。RTL記述は、LSIの構成をクロック・サイクルおよびレジスタを含むハードウェアレベルで記述したものである。RTL記述は、動作記述を高位合成ツール20によって高位合成することによって自動生成される。高位合成ツール20は、高位合成を実行するためのソフトウェアによって実現し得る。
ソフトウェア生成装置10は、例えば、動作記述を検証するためのCテストベンチ記述をRTLテストベンチ記述に変換するためのテストベンチ変換プログラムがインストールされたコンピュータによって実現されている。
このソフトウェア生成装置10は、図1に示すように、テストベンチ記述記憶部101、テストベンチ記述解析部102、テストベンチ情報記憶部103、合否判定関数指定受理部104、合否判定関数情報記憶部105、パイプライン・ステージ数受理部106、パイプライン・ステージ数情報記憶部107、ドライバ関数生成部108、ドライバ呼び出し関数生成部109、合否判定関数変更部110、入力値保存バッファ生成部111、および変換後のテストベンチ記述群を格納する変換結果記憶部112を備えている。テストベンチ記述解析部102、合否判定関数指定受理部104、パイプライン・ステージ数受理部106、ドライバ関数生成部108、ドライバ呼び出し関数生成部109、合否判定関数変更部110、および入力値保存バッファ生成部111は、それぞれ上述のテストベンチ変換プログラムを構成する機能モジュールとして実現することができる。
テストベンチ記述記憶部101は、C言語によって記述されたLSIの動作記述を検証するためのCテストベンチ記述を記憶する。このCテストベンチ記述もC言語などのプログラムで書かれている。このため、Cテストベンチ記述は、テストプログラムと称される。Cテストベンチ記述においては、C言語によって記述された動作記述に含まれるテスト対象関数(LSIの動作を記述した関数)に対して入力を与え、そのテスト対象関数から出力(返り値など)を得て、それら入力と出力との関係に基づいて、テスト対象関数の合否判定(検証)を行なうという手順が記述されている。通常、動作記述の検証は、値の異なる様々な入力値に対して行うことが必要となる。
したがって、Cテストベンチ記述(テストプログラム)は、値の異なる様々な入力値に対して動作記述の検証を行うために、複数の入力値それぞれに対応する複数のテスト記述を含んでいる。各テスト記述は、例えば、第1のコードと第2のコードとを含んでいる。
第1のコードは動作記述(テスト対象関数)との入出力を行うために使用される。すなわち、第1のコードは、動作記述に含まれる、LSIの動作を表すテスト対象関数、を呼び出すと共に、当該テスト対象関数に対して入力値を与え且つ動作記述(当該テスト対象関数)から出力値を得るコードである。
第2のコードは、対応する第1のコードによって動作記述に与えられた入力値と動作記述から得られた出力値との関係が正しいか否かを判定するために使用される。すなわち、第2のコードは、入力値と出力値との関係が期待する関係であるか否かを、所定の検証アルゴリズムに従って判定するためのコードである。
テストベンチ記述解析部102は、テストベンチ記述記憶部101に格納されているCテストベンチ記述(テストプログラムのソースファイル)を解析して、Cテストベンチ記述のどこがテスト対象関数(動作記述)を呼び出している部分(第1のコード)であるかなどを検出する。例えば、Cテストベンチ記述中に、テスト対象関数を呼び出している部分を指定するフラグ/コメントを付加しておくようにしてもよい。この場合、テストベンチ記述解析部102は、そのフラグ/コメントに基づいて、Cテストベンチ記述の中で、テスト対象関数を呼び出している部分を検出することができる。また、関数の名前付けルールを定めておくようにしてもよい。この場合、テストベンチ記述解析部102は、名前付けルールに基づいて、テスト対象関数に使用されている関数名を予測することができるので、Cテストベンチ記述中に含まれる、テスト対象関数を呼び出している部分を検出することができる。また、テストベンチ記述解析部102は、Cテストベンチ記述中に含まれる、上述の第2のコードを検出することもできる。
テストベンチ情報記憶部103は、テストベンチ記述解析部102による解析によって得られた情報、つまり第1のコードに関する情報等をテストベンチ情報として格納する。
合否判定関数指定受理部104は、テストベンチ記述記憶部101に格納されているCテストベンチ記述中のどこが合否判定部分(第2のコード)であるかを指定する入力情報を受け付ける部分である。この入力情報は、例えば、ユーザから与えられる。もちろん、テストベンチ記述解析部102または他のツールが、Cテストベンチ記述を解析してCテストベンチ記述中のどこが合否判定部分(第2のコード)であるかを検出し、その検出結果を、合否判定関数指定受理部104に通知するようにしてもよい。合否判定部分(第2のコード)を検出する処理においても、上述のフラグ/コメントや、名前付けルールなどを利用することができる。
なお、合否判定部分(第2のコード)は必ずしも一つの独立した関数として記述されている必要はなく、入力値と出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定するための関数を少なくとも含む複数のコード群から構成してもよい。
合否判定関数情報記憶部105は、合否判定部分(第2のコード)の記述を格納する。
パイプライン・ステージ数受理部106は、RTL記述(ハードウェアモデル)が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を指定する入力情報(サイクル数情報)を受け付ける部分である。この入力情報は、例えば、ユーザから与えられる。RTL記述(ハードウェアモデル)の実行サイクル数は、そのRTL記述を生成した高位合成ツール20からのレポートによってユーザに提示されるので、ユーザは、その実行サイクル数をパイプライン・ステージ数受理部106に対して入力することができる。
高位合成ツール20によって生成されるRTL記述が複数の入力値それぞれに対する処理を順次実行するパイプライン回路の構成をハードウェアモデルとして表している場合には、実行サイクル数は、パイプライン回路のパイプライン段数(パイプライン・ステージ数)によって与えられる。パイプライン・ステージ数受理部106によって入力されたパイプライン段数のようなサイクル数情報は、パイプライン・ステージ数情報記憶部107に格納される。
なお、パイプライン段数のようなサイクル数情報は必ずしもユーザが入力する必要はない。例えば、パイプライン・ステージ数受理部106は、高位合成ツール20から自動的にパイプライン段数のようなサイクル数情報を入力することもできる。
ドライバ関数生成部108は、RTL記述(ハードウェアモデル)の内容に基づいて、RTL記述(ハードウェアモデル)に対して入出力操作を行うためのドライバ関数を生成する。このドライバ関数は、テストプログラム(Cテストベンチ記述)から順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に、当該受け取った入力値をRTL記述に与え且つRTL記述の現在の出力値をテストプログラムに返す。ドライバ関数の生成には、例えば、上述の特開2007−310449号公報に記載された方法を使用し得る。
ドライバ呼び出し関数生成部109は、テストベンチ情報記憶部103に格納されたテストベンチ情報つまり第1のコードに関する情報から、動作記述内のテスト対象関数に関する情報(テスト対象関数の関数名、引数の数、引数の型、等)を抽出し、その抽出したテスト対象関数に関する情報に基づいて、例えば、テスト対象関数と同じ関数名を有し、第1のコードの実行の度に呼び出されるドライバ呼び出し関数を生成する。このドライバ呼び出し関数は、第1のコードによるテスト対象関数の呼び出しを、上述のドライバ関数に呼び出しに変更するための関数として使用される。
このドライバ呼び出し関数がテストプログラムの第1のコードによって呼び出された時、このドライバ呼び出し関数は、ドライバ関数を呼び出し、テストプログラムの第1のコードから受け取った入力値をドライバ関数に与え且つドライバ関数から返されるRTL記述の現在の出力値を、テストプログラムの第1のコードに返す。
なお、ドライバ呼び出し関数生成部109は、テストベンチ記述記憶部101に格納されたテストプログラム(Cテストベンチ記述)からテスト対象関数に関する情報を直接的に抽出することもできる。また、ドライバ呼び出し関数を介してドライバ関数を呼び出す代わりに、テストプログラム中の第1のコード内のテスト対象関数の関数名を、ドライバ関数の関数名に書き換えるようにしてもよい。これにより、テストプログラムから直接的にドライバ関数を呼び出すことが出来る。
合否判定関数変更部110は、テストプログラム(Cテストベンチ記述)中の合否判定処理部分を、合否判定関数情報記憶部105に格納された合否判定関数情報とパイプライン・ステージ数情報記憶部107に格納されたサイクル数情報(パイプライン・ステージ数)とに基づいて変更する部分である。すなわち、合否判定関数変更部110は、テストベンチ記述記憶部101に格納されたテストプログラム(Cテストベンチ記述)または合否判定関数情報記憶部105に格納された合否判定関数情報から、第2のコードに含まれる合否判定のための関数に関する情報(合否判定関数の関数名、引数の数、引数の型、等)を抽出する。そして、合否判定関数変更部110は、抽出した情報と、合否判定関数指定受理部104によって入力されたサイクル数情報とに基づいて、新たな判定処理関数を生成する。
RTL記述が複数の入力値それぞれに対する処理を順次実行するハードウェアモデル(パイプライン回路)を表す場合、そのハードウェアモデルは、一連の入力をクロック・サイクル毎に順次入力しながら処理し、所定クロック・サイクルだけ経過した後に、一連の入力に対応する一連の出力をクロック・サイクル毎に順次出力する。例えば、パイプライン・ステージ数が3であれば、ハードウェアモデルは、一連の入力値(入力データ1,2,3,4,5,…)をクロック・サイクル毎に順次入力しながら処理し、4つ目の入力値(入力データ4)を入力したときに、1つ目の入力値(入力データ1)対応する出力値(処理結果データ)を出力する。
このようなハードウェアモデルの動作を正しく検証できるようにするために、新たな判定処理関数には、判定処理のタイミングをずらすための仕組みが含まれている。すなわち、新たな判定処理関数は、テストプログラムから入力値と出力値との組を受け取った回数が、サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する。
具体的には、この判定処理関数は、例えば、(1)テストプログラムから順次与えられる、入力値と出力値との組それぞれを受け取る手続きと、(2)テストプログラムから入力値と出力値との組を受け取る度に、受け取った入力値を記憶領域としてのバッファに保存する手続きと、(3)テストプログラムから入力値と出力値との組を受け取った回数がサイクル数情報によって示される実行サイクル数を越えたことを条件に、バッファに保存されている最も古い入力値を読み出し当該読み出した入力値とテストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定する判定手続きとを実行する。
判定処理関数は、例えば第2のコードによって呼び出される合否判定のための関数と同じ関数名を有しており、第2のコードの実行の度にテストプログラムから呼び出される。
入力値保存バッファ生成部111は、幾つかの入力値を保存するための上述のバッファを生成する部分である。バッファのサイズは、少なくともパイプライン・ステージ数以上である。
変換結果記憶部112は、ドライバ関数生成部108によって生成されたドライバ関数、ドライバ呼び出し関数生成部109によって生成されたドライバ呼び出し関数、合否判定関数変更部110によって生成された判定処理関数を格納する。
これらドライバ関数、ドライバ呼び出し関数、および判定処理関数を用いることにより、動作記述を検証するためのテストプログラム(Cテストベンチ記述)を、RTL記述の検証に再利用することが可能となる。すなわち、これらドライバ関数、ドライバ呼び出し関数、および判定処理関数は、動作記述を検証するためのテストプログラム(Cテストベンチ記述)と一緒に、RTL記述を検証するためのソフトウェア(RTLテストベンチ記述)として機能する。RTL記述を検証するためのソフトウェア(RTLテストベンチ記述)においては、動作記述を検証するためのテストプログラムがそのまま再利用される。
次に、図3を参照して、ソフトウェア生成装置10によって生成される、RTL記述を検証するためのソフトウェア(RTLテストベンチ記述)の具体例を説明する。
RTLテストベンチ記述は、上述したように、テストプログラム(Cテストベンチ記述)を用いて生成される。
図2において、201はテストプログラム(Cテストベンチ記述)である。このテストプログラム201の記述例においては、C言語で記述された動作記述内のテスト対象関数がfunction1()であり、合否判定関数がjudge1()である。すなわち、y1=function1(x1)の部分が上述の第1のコードに相当し、judge1(x1,y1)が上述の第2のコードに相当する。
ここで、テスト対象関数function1は整数型の引数を1個受け取り、整数型の計算結果1個を返すというものである。
y1=function1(x1)は、動作記述内のテスト対象関数function1を呼び出して、テスト対象関数function1に対して入力値X1を与え且つ動作記述から出力値Y1を得るという手順を実行するためのコードである。judge1(x1,y1)は、入力値x1と出力値y1との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定するという手順を実行するためのコードである。y1=function1(x1)とjudge1(x1,y1)とによって1つ目のテスト記述が構成されている。
同様に、y2=function1(x2)とjudge1(x2,y2)は2つ目のテスト記述を構成し、y3=function1(x3)とjudge1(x3,y3)は3つ目のテスト記述を構成し、y4=function1(x4)とjudge1(x4,y4)は4つ目のテスト記述を構成し、y5=function1(x5)とjudge1(x5,y5)は5つ目のテスト記述を構成している。
テストプログラム201の実行時には、各々が第1のコードと第2のコードとを含む複数のテスト記述がシーケンシャルに実行される。
202は、第1のコードによるfunction1()の呼び出しを、ドライバ関数function1-driver()の呼び出しに変更するためのドライバ呼び出し関数である。このドライバ呼び出し関数202は、第1のコードの実行の度に呼び出される。すなわち、ドライバ呼び出し関数202は第1のコードによって呼び出されるべきテスト対象関数function1()と同じ関数名を有している。
このドライバ呼び出し関数202は、ドライバ関数203を呼び出し、第1のコードから受け取った入力値をドライバ関数203を通じてRTL記述に与え且つドライバ関数203から返されるRTL記述の現在の出力値を第1のコードに返す。
ドライバ関数203はRTL記述を制御するための関数であり、入力に対する出力が返ってくるまで待つのではなく、入力時の出力をすぐに返すような動作をするように構成されている。このドライバ関数203は、RTL記述の内容に基づいて、ユーザがコーディングすることも可能である。
204は上述の判定処理関数(以下、判定関数と称する)である。C言語で記述された動作記述(テスト対象関数)は、入力に対する出力を瞬時に返すので、動作記述の検証時においては、テストプログラム201は入力値と出力値との関係が期待する関係であるか否かを判定する処理を即座に実行することができる。しかし、パイプライン回路を含むRTL記述(ハードウェアモデル)の検証時には、入力に対する出力がすぐには返ってこない。そのため、RTL記述の検証時には、入力に対する出力が返されるまで、入力値と出力値との関係が期待する関係であるか否かを判定する処理の実行を待つことが必要となる。しかも、待機期間中においても、RTL記述に対しては、後続する入力値を順次与えることが必要である。そのため、判定関数204には、上述したように、第2のコードから受け取った入力値をバッファに保存する手続きと、テストプログラムから受け取った入力値の数つまりテストプログラムから判定関数204が呼び出された回数、が実行サイクル数(パイプライン・ステージ数)を超えたことを条件に、バッファに保存されている最も古い入力値を読み出して、当該読み出した入力値とテストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを判定する手続きとが含まれている。
判定関数204は、例えば、第2のコードの実行時に呼び出されるように、第2のコード内に含まれる合否判定関数と同じ関数名を有している。この判定関数204の引数は2つで、整数型のxとyである。xは動作記述またはRTL記述に与えられるべき入力値であり、yは動作記述またはRTL記述から得られる出力値である。判定関数204が第2のコードによって呼び出された時、判定関数204は、第2のコードから入力値xと出力値yを受け取る。
判定関数204において、countは判定関数204が呼び出された回数をカウントするための変数である。count++は、呼び出された回数を更新(カウントアップ)するための記述である。buf_push_back(x)は、入力値を一旦バッファに入れるための記述である。if (count > パイプライン・ステージ数)は、呼び出された回数が実行サイクル数(パイプライン・ステージ数)を超えるという条件が成立したか否かを判定するための記述である。x1 = buf_pop_front()は、バッファに保存されている最も古い入力値を読み出すための記述である。judge1-本体 (x1, y)は、バッファから読み出された入力値x1と第2のコードから受け取った現在の出力値yとが期待する関係であるか否かを判定する記述である。
例えばパイプライン・ステージ数が3ならば、最初の入力値x1に対応する出力y4がRTL記述から返されるタイミングは、4つ目のテスト記述のために入力値x4をRTL記述に与える時である。この場合、判定関数204は、4つ目のテスト記述に含まれる第2のコードによって呼び出された時点から、合否判定処理を開始する。合否判定処理では、バッファに保存されている最も古い入力値(ここでは、入力値x1)がバッファから取り出され、この入力値x1と、第2のコードから受け取った最新の出力値y(入力値x1に対応するRTL記述からの出力値)とが期待する関係であるか否かが判定される。
図4は、判定関数204によって実行される処理の手順を示すフローチャートである。
テストプログラム201内の第2のコードが実行される度に、判定関数204が第2のコードによってコールされる。この場合、判定関数204は、以下の処理を実行する。
判定関数204は、第2のコードから入力値と出力値との組を受け取り、受け取った入力値をバッファに保存し(ステップS101)、そして変数countの値を+1更新する(ステップS102)。そして、判定関数204は、現在の変数countの値がパイプライン・ステージ数よりも大きいか否かを判定する(ステップS103)。
現在の変数countの値がパイプライン・ステージ数よりも大きくないならば(ステップS103のNO)、判定関数204は終了され、テストプログラム201に制御が戻される。
現在の変数countの値がパイプライン・ステージ数よりも大きいならば(ステップS103のYES)、判定関数204は、バッファに保存されている最も古い入力値を読み出し(ステップS104)、この入力値と、第2のコードから受け取った最新の出力値とが期待する関係であるか否かを判定する(ステップS105)。
次に、図2で説明したドライバ呼び出し関数202、ドライバ関数203、判定関数204それぞれを生成するための具体的な処理の手順の例について説明する。
<ドライバ呼び出し関数202の生成>
ドライバ呼び出し関数202は、以下の手順で生成される。
ドライバ呼び出し関数202は、以下の手順で生成される。
1. ソフトウェア生成装置10は、C言語で記述された動作記述またはCテストベンチ記述から、第1のコードによって呼び出されるテスト対象関数に関する情報(テスト対象関数の関数名、返り値の型、引数の数と型、等)を抽出する。
2. ソフトウェア生成装置10は、テスト対象関数に関する情報を用いて、ドライバ呼び出し関数202の殻の部分(int function1(int x) { })を作る。
3. ソフトウェア生成装置10は、ドライバ呼び出し関数202の関数の殻の中に、ドライバ関数function1-driver()を呼び出して入力値を与え、ドライバ関数function1-driver()からの結果を返す記述を加える。
<ドライバ関数203の生成>
ドライバ関数203の関数名はドライバ呼び出し関数202の作成時に既に生成されているので、その関数名(「テスト対象関数名-driver」)。ドライバ関数203が扱う返り値の型、引数の数と型も、テスト対象関数と同じである。つまり、ドライバ関数203は、以下の手順で生成される。
ドライバ関数203の関数名はドライバ呼び出し関数202の作成時に既に生成されているので、その関数名(「テスト対象関数名-driver」)。ドライバ関数203が扱う返り値の型、引数の数と型も、テスト対象関数と同じである。つまり、ドライバ関数203は、以下の手順で生成される。
1. ソフトウェア生成装置10は、ドライバ関数203の関数名を生成し、そして返り値の型、引数の数と型をテスト対象関数と同じものを用いて、ドライバ関数203の関数の殻の部分(int function1-driver(int x) { })を生成する。
2. ソフトウェア生成装置10は、ドライバ関数203の関数の殻の中に、ハードウェアモデル(HWモデル)を起動する記述、ドライバ呼び出し関数202から受け取った入力値をハードウェアモデルに与え、その時点でのハードウェアモデルの出力値をドライバ呼び出し関数202に返す記述を加える。
<判定関数204の生成>
判定関数204の関数の名としては、第2のコードによって呼び出される合否判定関数と同じものが用いられる。判定関数204の引数の数と型、返り値の型も、やはり合否判定関数と同じものを用いることができる。判定関数204の内容のほとんどの部分は固定的に作れるものでうり、可変となるのは、パイプライン・ステージ数の部分等である。パイプライン・ステージ数の値は、高位合成ツール20から入力することが出来る。バッファについては、予め用意しておくことができる。すなわち、判定関数204は、以下の手順で生成される。
判定関数204の関数の名としては、第2のコードによって呼び出される合否判定関数と同じものが用いられる。判定関数204の引数の数と型、返り値の型も、やはり合否判定関数と同じものを用いることができる。判定関数204の内容のほとんどの部分は固定的に作れるものでうり、可変となるのは、パイプライン・ステージ数の部分等である。パイプライン・ステージ数の値は、高位合成ツール20から入力することが出来る。バッファについては、予め用意しておくことができる。すなわち、判定関数204は、以下の手順で生成される。
1. ソフトウェア生成装置10は、Cテストベンチ記述から、第2のコード内に含まれる合否判定関数に関する情報(合否判定関数の関数名、返り値の型、引数の数と型、等)を抽出する。
2. ソフトウェア生成装置10は、合否判定関数に関する情報を用いて、判定関数204の殻の部分(void judge1(int x, int y) { })を作る。
3. ソフトウェア生成装置10は、判定関数204の殻の中に、判定関数204が何回呼ばれたかをカウントするためのstatic変数countの宣言を追加する。
4. ソフトウェア生成装置10は、判定関数204の殻の中に、入力の値xの判定タイミングをずらすために必要な変数x1の宣言を追加する。この変数x1は判定関数204内のローカル変数であるため、変数x1の名称は判定関数204内でユニークであれば何でもよい(この例では x1 としている)。
5. ソフトウェア生成装置10は、判定関数204の殻の中に、入力データをバッファに格納するための記述(buf_push_back(x);)を追加する。
6. ソフトウェア生成装置10は、判定関数204の殻の中に、判定関数204が呼び出された回数を示す変数 count をカウントアップする記述(count++;)を追加する。
7. 合否判定を開始するのは、RTL記述(ハードウェアモデル)から「意味のある出力」が出てくるようなタイミングになってからである。このタイミングが到来するのは、判定関数204が「パイプライン・ステージ数」だけ呼ばれた後になる。つまり、テストプログラム中の、「パイプライン・ステージ数」と同数のテスト記述が実行されて、「パイプライン・ステージ数」に対応する個数の入力値がRTL記述に与えられた後に、最初のテスト記述によってRTL記述に与えられた入力値に対するRTL記述の動作の検証を開始することが必要となる。したがって、ソフトウェア生成装置10は、判定関数204の殻の中に、「パイプライン・ステージ数」だけの回数呼ばれてから判定するという条件判断の記述(if (count > パイプライン・ステージ数) { })を追加する。パイプライン・ステージ数は、実際には単なる数値となる。
8. ソフトウェア生成装置10は、バッファから最も古い入力値を取り出し、合否判定を行なう記述を生成する。合否判定を行なうタイミングは、上述の通り意味のある出力が出てくるようになってからなので、バッファから最も古い入力値を取り出し、合否判定を行なう記述は、上述の if 文の中に生成される。if 文の中に生成すべき、合否判定を行なう関数としては、第2のコードの中に書かれている記述をそのまま使えばよい。但し、関数名だけは変えておく必要がある(ここでは judge1-本体 ()とした)。つまり、ソフトウェア生成装置10は、「x1 = buf_pop_front();」という記述と、「judge1-本体 (x1, y);」という記述を if 文の中に生成する。
以上の手順を実行することにより、RTL記述を検証するためのソフトウェア(ドライバ呼び出し関数202、ドライバ関数203、判定関数204)を生成することができる。テストプログラム201、ドライバ呼び出し関数202、ドライバ関数203、判定関数204をそれぞれコンパイルおよびリンクすることにより、RTL記述を検証するためのソフトウェアをバイナリーフォーマットに変換することができる。
次に、図5のフローチャートを参照して、ソフトウェア生成装置10によって実行されるテストベンチ変換処理の手順を説明する。
ソフトウェア生成装置10は、まず、Cテストベンチ記述を解析する(ステップS301)。このステップS301では、図1のテストベンチ記述解析部102が、Cテストベンチ記述を解析して、Cテストベンチ記述からテスト対象関数(動作記述)を呼び出している部分(第1のコード)を抽出する。次いで、ソフトウェア生成装置10は、合否判定関数を指定する情報を入力する(ステップS302)。このステップS302では、合否判定関数指定受理部104が、たとえばユーザから与えられる、Cテストベンチ記述中のどこが合否判定部分(第2のコード)であるかを指定する入力情報を受理する。もちろん、テストベンチ記述解析部102が、Cテストベンチ記述を解析して、Cテストベンチ記述から合否判定部分(第2のコード)を抽出することもできる。
この後、ソフトウェア生成装置10は、パイプライン・ステージ数を示すサイクル数情報を入力する(ステップS303)。このステップS303では、パイプライン・ステージ数受理部106が、例えば、ユーザまたは高位合成ツール20から与えられる、サイクル数情報を入力する。
そして、ソフトウェア生成装置10は、ドライバ関数203を生成する(ステップS304)。ステップS304では、ドライバ関数生成部108が、RTL記述(ハードウェアモデル)の内容に基づいて、ドライバ関数203を生成する。次いで、ソフトウェア生成装置10は、テスト対象関数の呼び出しをドライバ関数203の呼び出しに変更するために使用されるドライバ呼び出し関数202を生成する(ステップS305)。このステップS305では、ドライバ呼び出し関数生成部109は、第1のコードに関する情報からテスト対象関数に関する情報を抽出し、その抽出したテスト対象関数に関する情報に基づいて、ドライバ呼び出し関数202を生成する。ドライバ呼び出し関数202にはテスト対象関数と同じ関数名が付与される。これにより、第1のコードの実行の度にドライバ呼び出し関数202が呼び出される。
次いで、ソフトウェア生成装置10は、バッファ(入力値保存バッファ)を生成する(ステップS306)。このステップS306では、入力値保存バッファ生成部111は、少なくともパイプライン・ステージ数と同じ個数の入力値を保存可能なサイズを有する入力値保存バッファを生成する。この後、ソフトウェア生成装置10は、判定関数204を生成する(ステップS307)。このステップS307においては、合否判定関数変更部110は、第2のコードに含まれる合否判定関数に関する情報を抽出し、その抽出した情報と、サイクル数情報とに基づいて、判定関数204を生成する。判定関数204には合否判定関数と同じ関数名が付与される。これにより、第2のコードの実行の度に判定関数204が呼び出される。判定関数204には、合否判定を実行するタイミングをパイプライン・ステージ数に対応する分だけずらすための機能が組み込まれている。
以上のように、本実施形態によれば、複数の入力値それぞれに対する処理を順次実行するLSIのRTL記述であっても、そのRTL記述を正しく検証することが可能なソフトウェアを、動作記述検証用のテストプログラムを用いて自動生成することができる。この場合、動作記述検証用のテストプログラムに記述された、入力値群および合否判定アルゴリズム等を何等変更することなく、RTL記述の検証処理に利用することができる。
なお、本実施形態では、ドライバ呼び出し関数生成部109および合否判定関数生成部110とは独立したモジュールとしてテストベンチ記述解析部102を設ける例を説明したが、ドライバ呼び出し関数生成部109および合否判定関数生成部110がそれぞれテストベンチ記述解析部102と同等のソースプログラム解析機能を有していても良い。この場合、ドライバ呼び出し関数生成部109は、テストプログラムを解析することによって当該テストプログラムからテスト対象関数に関する情報を抽出し、その抽出した情報に基づいて、ドライバ呼び出し関数202を生成する。また、合否判定関数生成部110は、テストプログラムを解析することによって当該テストプログラムから第2のコードに含まれる合否判定関数に関する情報を抽出し、その抽出した情報と、入力されたサイクル数情報とに基づいて、判定関数204を生成する。
また、本実施形態では、判定関数204が呼び出された回数をカウントし、そのカウント値に基づいて、判定関数204が呼び出された回数、つまり判定関数204がテストプログラムから入力値と出力値との組を受け取った回数、が実行サイクル数を超えたか否かを判別したが、バッファが複数の入力値で満たされるというバッフフルの有無に基づいて、判定関数204が呼び出された回数、つまり判定関数204がテストプログラムから入力値と出力値との組を受け取った回数、が実行サイクル数を超えたか否かを判別してもよい。
また、本実施形態では、判定関数204は、テストプログラムから受け取った入力値それぞれをバッファに保存することによって判定処理のタイミングをずらしたが、バッファに限らず、例えば、複数の入力値を保持可能な、配列またはリスト構造等を用いて、判定処理のタイミングをずらすこともできる。
また、本実施形態では、第2のコードから直接的に判定関数204を呼び出すようにしたが、例えば、第2のコードに含まれる合否判定関数と同じ関数名を有する別の関数を生成し、この別の関数から判定関数204を呼び出すようにしてもよい。この場合、判定関数204の関数名は合否判定関数の関数名と同じにする必要はない。
また、本実施形態のテストベンチ変換処理機能は全てコンピュータプログラムによって実現できるので、このコンピュータプログラムが格納されたコンピュータ読み取り可能な記憶媒体を介して本コンピュータプログラムを通常のコンピュータにインストールするだけで、本実施形態と同様の効果を容易に実現することが可能となる。
また、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
10…ソフトウェア生成装置、101…テストベンチ記述記憶部、102…テストベンチ記述解析部、103…テストベンチ情報記憶部、104…合否判定関数指定受理部、105…合否判定関数情報記憶部、106…パイプライン・ステージ数受理部、107…パイプライン・ステージ数情報記憶部、108…ドライバ関数生成部、109…ドライバ呼び出し関数生成部、110…合否判定関数変更部、111…入力値保存バッファ生成部。
Claims (11)
- 高級プログラミング言語によってLSIの動作を記述した動作記述を高位合成することによって得られるRTL記述を検証するためのソフトウェアを生成するソフトウェア生成装置であって、
前記動作記述の内容を検証するためのテストプログラムを格納する記憶部と、
前記テストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に、当該受け取った入力値を前記RTL記述に与え、且つ、前記RTL記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成手段と、
前記RTL記述が入力値を入力してから、当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を、入力する入力手段と、
前記記憶部に格納された前記テストプログラムと、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから、入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に、当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成手段とを具備し、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが、前記RTL記述を検証するための前記ソフトウェアとして機能することを特徴とするソフトウェア生成装置。 - 前記判定処理関数は、前記テストプログラムから順次与えられる、入力値と出力値との組それぞれを受け取る手続きと、前記テストプログラムから入力値と出力値との組を受け取る度に前記受け取った入力値をバッファに保存する手続きと、前記テストプログラムから入力値と出力値との組を受け取った回数が前記サイクル数情報によって示される実行サイクル数を越えたことを条件に、前記バッファに保存されている最も古い入力値を読み出し当該読み出した入力値と前記テストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定する判定手続きとを実行することを特徴とする請求項1記載のソフトウェア生成装置。
- 前記テストプログラムは、前記動作記述に入力値を与え且つ前記動作記述から出力値を得る第1のコードと、前記入力値と前記出力値との関係が期待する関係であるか否かを判定するための関数を含む第2のコードとを各々が含む複数のテスト記述を含み、
前記判定処理関数は、前記第2のコードの実行の度に前記テストプログラムから呼び出されることを特徴とする請求項1記載のソフトウェア生成装置。 - 前記判定処理関数は、前記判定処理関数が呼び出された回数をカウントし、前記カウント値が前記実行サイクル数を超えた場合に、前記テストプログラムから入力値と出力値との組を受け取った回数が前記実行サイクル数を越えたという条件が成立したと判定することを特徴とする請求項3記載のソフトウェア生成装置。
- 前記第1のコードは、前記動作記述に含まれる前記LSIの動作を表す所定の関数を呼び出すと共に前記所定の関数に対して入力値を与え且つ前記動作記述から出力値を得る記述を含み、
前記テストプログラムから前記所定の関数に関する情報を抽出し、前記抽出した情報に基づいて、前記第1のコードの実行の度に呼び出されるドライバ呼び出し関数を生成するドライバ呼び出し関数生成手段であって、前記ドライバ呼び出し関数は、前記ドライバ関数を呼び出し、前記テストプログラムから受け取った入力値を前記ドライバ関数に与え且つ前記ドライバ関数から返される前記RTL記述の現在の出力値を前記テストプログラムに返す、ドライバ呼び出し関数生成手段をさらに具備することを特徴とする請求項3記載のソフトウェア生成装置。 - 前記高位合成によって得られるRTL記述は、複数の入力値それぞれに対する処理を順次実行するパイプライン回路の構成を表しており、
前記実行サイクル数は、前記パイプライン回路のパイプライン段数を示すことを特徴とする請求項1記載のソフトウェア生成装置。 - 前記パイプライン回路のパイプライン段数を示す値は、前記高位合成を実行するための高位合成処理プログラムから入力されることを特徴とする請求項6記載のソフトウェア生成装置。
- 高級プログラミング言語によってLSIの動作を記述した動作記述を高位合成することによって得られるRTL記述を検証するためのソフトウェアを生成する処理をコンピュータによって実行するソフトウェア生成方法であって、
前記動作記述の内容を検証するためのテストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記RTL記述に与え且つ前記RTL記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成ステップと、
前記RTL記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力ステップと、
前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成ステップとを具備し、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記RTL記述を検証するための前記ソフトウェアとして機能することを特徴とするソフトウェア生成方法。 - 前記判定処理関数は、前記テストプログラムから順次与えられる、入力値と出力値との組それぞれを受け取る手続きと、前記テストプログラムから入力値と出力値との組を受け取る度に前記受け取った入力値をバッファに保存する手続きと、前記テストプログラムから入力値と出力値との組を受け取った回数が前記サイクル数情報によって示される実行サイクル数を越えたことを条件に、前記バッファに保存されている最も古い入力値を読み出し当該読み出した入力値と前記テストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定する判定手続きとを実行することを特徴とする請求項8記載のソフトウェア生成方法。
- 高級プログラミング言語によってLSIの動作を記述した動作記述を高位合成することによって得られるRTL記述を検証するためのソフトウェアを生成する処理をコンピュータに実行させるプログラムであって、
前記動作記述の内容を検証するためのテストプログラムから順次与えられる入力値それぞれを受け取り、一つの入力値を受け取る度に当該受け取った入力値を前記RTL記述に与え且つ前記RTL記述の現在の出力値を前記テストプログラムに返すドライバ関数を生成するドライバ関数生成手順と、
前記RTL記述が入力値を入力してから当該入力値に対応する出力値を出力するまでに要する実行サイクル数を示すサイクル数情報を入力する入力手順と、
前記テストプログラムから判定のための関数に関する情報を抽出し、前記抽出した情報と、前記入力されたサイクル数情報とに基づいて、前記テストプログラムから入力値と出力値との組を受け取った回数が、前記サイクル数情報によって示される実行サイクル数を越えたことを条件に判定処理を開始し、前記テストプログラムから受け取った入力値毎に当該入力値と当該入力値に対応する出力値との関係が期待する関係であるか否かを判定する判定処理関数を生成する判定処理関数生成手順とを前記コンピュータに実行させ、前記テストプログラムと前記ドライバ関数と前記判定処理関数とが前記RTL記述を検証するための前記ソフトウェアとして機能することを特徴とするプログラム。 - 前記判定処理関数は、前記テストプログラムから順次与えられる、入力値と出力値との組それぞれを受け取る手続きと、前記テストプログラムから入力値と出力値との組を受け取る度に前記受け取った入力値をバッファに保存する手続きと、前記テストプログラムから入力値と出力値との組を受け取った回数が前記サイクル数情報によって示される実行サイクル数を越えたことを条件に、前記バッファに保存されている最も古い入力値を読み出し当該読み出した入力値と前記テストプログラムから受け取った最新の出力値との関係が期待する関係であるか否かを所定の検証アルゴリズムに従って判定する判定手続きとを実行することを特徴とする請求項10記載のプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008062941A JP2009217720A (ja) | 2008-03-12 | 2008-03-12 | プログラム生成装置およびプログラム生成方法 |
US12/350,597 US20090235223A1 (en) | 2008-03-12 | 2009-01-08 | Program generation apparatus and program generation method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008062941A JP2009217720A (ja) | 2008-03-12 | 2008-03-12 | プログラム生成装置およびプログラム生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009217720A true JP2009217720A (ja) | 2009-09-24 |
Family
ID=41064384
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008062941A Pending JP2009217720A (ja) | 2008-03-12 | 2008-03-12 | プログラム生成装置およびプログラム生成方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20090235223A1 (ja) |
JP (1) | JP2009217720A (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9075945B1 (en) * | 2014-06-27 | 2015-07-07 | Google Inc. | Method for implementing efficient entropy decoder by using high level synthesis |
GB2561299B (en) * | 2015-05-01 | 2019-04-03 | Imagination Tech Ltd | Control path verification of hardware design for pipelined process |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020152061A1 (en) * | 2001-04-06 | 2002-10-17 | Shintaro Shimogori | Data processing system and design system |
-
2008
- 2008-03-12 JP JP2008062941A patent/JP2009217720A/ja active Pending
-
2009
- 2009-01-08 US US12/350,597 patent/US20090235223A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20090235223A1 (en) | 2009-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2006024006A (ja) | テストケース生成装置、テストケース生成プログラム、モデルベース開発プログラム、ソースコード生成妥当性診断装置、ソースコード生成妥当性診断プログラム、およびモデルベース開発方法。 | |
US20020152061A1 (en) | Data processing system and design system | |
JPH11513512A (ja) | ディジタル信号プロセッサの製造方法 | |
TWI309384B (ja) | ||
JP2006285333A (ja) | 動作合成装置及び方法 | |
JP5109143B2 (ja) | 検証装置および検証方法 | |
JP2009301231A (ja) | シミュレーション装置,シミュレーション方法,シミュレーションプログラム及び同プログラムを記録したコンピュータ読取可能な記録媒体 | |
JP5233355B2 (ja) | プロパティ生成システムおよびプロパティ検証システム | |
JP5504960B2 (ja) | シミュレーション装置及びシミュレーション方法 | |
JP4888790B2 (ja) | 契約定義関数検証装置、その方法及びそのプログラム | |
JP2009217720A (ja) | プログラム生成装置およびプログラム生成方法 | |
JP2005108007A (ja) | Lsi設計検証装置及びlsi設計検証方法 | |
JP4152659B2 (ja) | データ処理システムおよび設計システム | |
JP2007018313A (ja) | 回路設計プログラム、回路設計装置、回路設計方法 | |
JP5120103B2 (ja) | デバッグ方法およびデバッグプログラム | |
JP5233354B2 (ja) | プロパティ検証システム、プロパティ検証方法、及びプログラム | |
JP5387521B2 (ja) | 論理検証シナリオ生成装置、及び、論理検証シナリオ生成プログラム | |
JP5755861B2 (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム | |
JP2005174045A (ja) | ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体 | |
JP4594704B2 (ja) | プログラム開発支援システム、プログラムおよび記録媒体 | |
JP5034867B2 (ja) | ソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法 | |
JP2011034517A (ja) | 等価性検証装置、そのデータ処理方法、およびプログラム | |
JP2006236088A (ja) | トレースデータ収集装置、トレースデータ収集支援装置、トレースデータ収集方法、トレースデータ収集プログラムおよびトレースデータ収集支援プログラム | |
JP2009223861A (ja) | 論理検証システム | |
JP2008217071A (ja) | 高位合成装置および高位合成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090929 |