(57)【特許請求の範囲】
【請求項１】
所定の言語で回路が記述された手本モデルと、前記手本モデルのためのテストベクタ生成モデルである手本モデル用テストベクタ生成モデルとを用いて、前記手本モデルを元に生成され且つ前記手本モデルとの間でポートの対応が可能にされた検証対象モデルの等価性を検証する方法であり、それぞれコンピュータ装置で実行する処理として、
サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う第１処理と、
前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う第２処理と、
前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する第３処理と、
前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む第４処理と、
前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判定を行う第５処理と、を含み、
前記第１処理及び第２処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが第１の入力ＦＩＦＯ閾値で規定される数以上のデータを保持するようになったとき又は入力ＦＩＦＯの一つでもフルになったとき実行停止され、それ以外の状態で実行される、等価性検証方法。
【請求項２】
前記検証対象モデルは、前記手本モデルとの間で一対一対応されるポート名を有する、請求項１記載の等価性検証方法。
【請求項３】
所定の言語で回路が記述された手本モデルと前記手本モデルのためのテストベクタ生成モデルである手本モデル用テストベクタ生成モデルとを用いて、前記手本モデルを元に生成され且つ前記手本モデルとの間でポートの対応が可能にされた検証対象モデルの等価性を検証する方法であり、それぞれコンピュータ装置で実行する処理として、
サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う第１処理と、
前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う第２処理と、
前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する第３処理と、
前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む第４処理と、
前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判定を行う第５処理と、を含み、
前記第３処理及び第４処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが所定の数以上のデータを保持するようになるのを待って実行開始される、等価性検証方法。
【請求項４】
実行開始された前記第３処理及び第４処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが第２の入力ＦＩＦＯ閾値で規定される数以下のデータを保持するようになったとき又は入力ＦＩＦＯの一つでもエンプティーになったとき実行停止され、それ以外の状態で実行される、請求項３記載の等価性検証方法。
【請求項５】
所定の言語で回路が記述された手本モデルと、前記手本モデルのためのテストベクタ生成モデルである手本モデル用テストベクタ生成モデルとを用いて、前記手本モデルを元に生成され且つ前記手本モデルとの間でポートの対応が可能にされた検証対象モデルの等価性を検証する方法であり、それぞれコンピュータ装置で実行する処理として、
サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う第１処理と、
前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う第２処理と、
前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する第３処理と、
前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む第４処理と、
前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判定を行う第５処理と、を含み、
コンピュータ装置で実行する処理として、入力ＦＩＦＯのデータ保持数が所定の数に達する毎にＦＩＦＯ段数を増加させるサイズアップ処理を更に含む、等価性検証方法。
【請求項６】
前記入力ＦＩＦＯのデータ保持数が所定の数に達するとは、入力ＦＩＦＯの書き込みポインタの値に対する読出しポインタの差が第３の入力ＦＩＦＯ閾値以上になることである、請求項５記載の等価性検証方法。
【請求項７】
前記第３の入力ＦＩＦＯ閾値は、前記サイズアップ処理毎に増加される変数にしたがって増加される数である、請求項６記載の等価性検証方法。
【請求項８】
所定の言語で回路が記述された手本モデルと、前記手本モデルのためのテストベクタ生成モデルである手本モデル用テストベクタ生成モデルとを用いて、前記手本モデルを元に生成され且つ前記手本モデルとの間でポートの対応が可能にされた検証対象モデルの等価性を検証する方法であり、それぞれコンピュータ装置で実行する処理として、
サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う第１処理と、
前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う第２処理と、
前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する第３処理と、
前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む第４処理と、
前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判定を行う第５処理と、を含み、
コンピュータ装置で実行する処理として、出力ＦＩＦＯのデータ保持数が所定の数に達する毎にＦＩＦＯ段数を増加させるサイズアップ処理を更に含む、等価性検証方法。
【請求項９】
前記出力ＦＩＦＯのデータ保持数が所定の数に達するとは、出力ＦＩＦＯの書き込みポインタの値に対する読出しポインタの差が出力ＦＩＦＯ閾値以上になることである、請求項８記載の等価性検証方法。
【請求項１０】
前記出力ＦＩＦＯ閾値は、前記サイズアップ処理毎に増加される変数にしたがって増加される数である、請求項９記載の等価性検証方法。
【請求項１１】
所定の言語で回路が記述された手本モデルと、前記手本モデルのためのテストベクタ生成モデルである手本モデル用テストベクタ生成モデルとを用いて、前記手本モデルを元に生成され且つ前記手本モデルとの間でポートの対応が可能にされた検証対象モデルの等価性を検証する第１乃至第５処理をコンピュータ装置に実行させるプログラムであり、
前記第１処理は、サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う処理であり、
前記第２処理は、前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う処理であり、
前記第３処理は、前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する処理であり、
前記第４処理は、前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む処理であり、
前記第５処理は、前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判定を行う処理であり、
前記第１処理及び第２処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが第１の入力ＦＩＦＯ閾値で規定される数以上のデータを保持するようになったとき又は入力ＦＩＦＯの一つでもフルになったとき実行停止され、それ以外の状態で実行される、等価性検証用プログラム。
【請求項１２】
前記検証対象モデルは、前記手本モデルとの間で一対一対応されるポート名を有する、請求項１１記載の等価性検証用プログラム。
【請求項１３】
所定の言語で回路が記述された手本モデルと、前記手本モデルのためのテストベクタ生成モデルである手本モデル用テストベクタ生成モデルとを用いて、前記手本モデルを元に生成され且つ前記手本モデルとの間でポートの対応が可能にされた検証対象モデルの等価性を検証する第１乃至第５処理をコンピュータ装置に実行させるプログラムであり、
前記第１処理は、サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う処理であり、
前記第２処理は、前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う処理であり、
前記第３処理は、前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する処理であり、
前記第４処理は、前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む処理であり、
前記第５処理は、前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判定を行う処理であり、
前記第３処理及び第４処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが所定の数以上のデータを保持するようになるのを待って実行開始される、等価性検証用プログラム。
【請求項１４】
実行開始された前記第３処理及び第４処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが第２の入力ＦＩＦＯ閾値で規定される数以下のデータを保持するようになったとき又は入力ＦＩＦＯの一つでもエンプティーになったとき実行停止され、それ以外の状態で実行される、請求項１３記載の等価性検証用プログラム。
【請求項１５】
所定の言語で回路が記述された手本モデルと、前記手本モデルのためのテストベクタ生成モデルである手本モデル用テストベクタ生成モデルとを用いて、前記手本モデルを元に生成され且つ前記手本モデルとの間でポートの対応が可能にされた検証対象モデルの等価性を検証する第１乃至第５処理をコンピュータ装置に実行させるプログラムであり、
前記第１処理は、サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う処理であり、
前記第２処理は、前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う処理であり、
前記第３処理は、前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する処理であり、
前記第４処理は、前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む処理であり、
前記第５処理は、前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判定を行う処理であり、
コンピュータ装置で実行する処理として、入力ＦＩＦＯのデータ保持数が所定の数に達する毎にＦＩＦＯ段数を増加させるサイズアップ処理を更に含む、等価性検証用プログラム。
【請求項１６】
前記入力ＦＩＦＯのデータ保持数が所定の数に達するとは、入力ＦＩＦＯの書き込みポインタの値に対する読出しポインタの差が第３の入力ＦＩＦＯ閾値以上になることである、請求項１５記載の等価性検証用プログラム。
【請求項１７】
前記第３の入力ＦＩＦＯ閾値は、前記サイズアップ処理毎に増加される変数にしたがって増加される数である、請求項１６記載の等価性検証用プログラム。
【請求項１８】
所定の言語で回路が記述された手本モデルと、前記手本モデルのためのテストベクタ生成モデルである手本モデル用テストベクタ生成モデルとを用いて、前記手本モデルを元に生成され且つ前記手本モデルとの間でポートの対応が可能にされた検証対象モデルの等価性を検証する第１乃至第５処理をコンピュータ装置に実行させるプログラムであり、
前記第１処理は、サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う処理であり、
前記第２処理は、前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う処理であり、
前記第３処理は、前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する処理であり、
前記第４処理は、前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む処理であり、
前記第５処理は、前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判定を行う処理であり、
コンピュータ装置で実行する処理として、出力ＦＩＦＯのデータ保持数が所定の数に達する毎にＦＩＦＯ段数を増加させるサイズアップ処理を更に含む、等価性検証用プログラム。
【請求項１９】
前記出力ＦＩＦＯのデータ保持数が所定の数に達するとは、出力ＦＩＦＯの書き込みポインタの値に対する読出しポインタの差が出力ＦＩＦＯ閾値以上になることである、請求項１８記載の等価性検証用プログラム。
【請求項２０】
前記出力ＦＩＦＯ閾値は、前記サイズアップ処理毎に増加される変数にしたがって増加される数である、請求項１９記載の等価性検証用プログラム。
【請求項２１】
所定の言語で回路が記述された手本モデルと、前記手本モデルのためのテストベクタ生成モデルである手本モデル用テストベクタ生成モデルとを用いて、前記手本モデルを元に生成され且つ前記手本モデルとの間でポートの対応が可能にされた検証対象モデルの等価性を検証するための等価性検証用プログラムを生成する方法であって、それぞれコンピュータ装置で実行する処理として、
前記手本モデル、前記テストベクタ生成モデル、及びパラメータ設定ファイルをコンピュータ装置に読み込む処理と、
サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルから入力するデータを入力ＦＩＦＯ群に書き込む操作を行うための手本モデルテスト入力フェッチモデルを生成する処理と、
前記検証対象モデルの動作タイミングに従って前記入力ＦＩＦＯ群からデータを読み出して前記検証対象モデルへ出力する操作を行うための検証対象モデルテスト入力出力モデルを生成する処理と、
前記手本モデルテスト入力フェッチモデル及び検証対象モデルテスト入力出力モデルに基づいて前記入力ＦＩＦＯ群のモデルを生成する処理と、
前記手本モデルの出力と前記検証対象モデルの出力を対応する信号名毎に入力して保持する出力ＦＩＦＯペア群を生成する処理と、
前記出力ＦＩＦＯペア群の信号名毎の出力ペアの一致判定を行う一致判定モデルを生成する処理と、を含み、
前記読み込む処理及び前記手本モデルテスト入力フェッチモデルを生成する処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが第１の入力ＦＩＦＯ閾値で規定される数以上のデータを保持するようになったとき又は入力ＦＩＦＯの一つでもフルになったとき実行停止され、それ以外の状態で実行される、等価性検証用プログラムの生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フロー（回路の機能や振る舞い）の等価性を維持して開発された新たな回路に対する検証環境を生成する技術に関し、例えばフロー等価性を維持して機能拡張された半導体集積回路のテスト環境の生成並びにそのテスト環境を用いたテストに適用して有効な技術に関する。
【背景技術】
【０００２】
特許文献１には、システムレベル設計言語で記述された動作レベルの回路記述とHDL（Hardware Description Language）で記述されたRTL（Register Transfer Level）回路記述との等価性をシミュレーションにて判定する手法に関する発明が記載される。これは、夫々の回路記述に対して個別にシミュレーションを実行し、信号波形情報を取得後、信号値遷移の波形順序が維持されているかの判定を行う事で、等価性判定を行っている。従って、夫々の回路記述に対して個別にテストベンチ（回路記述をテストする為のテストパターンを発生させるプログラム）を構成する事となり、同一のテストベンチを用いた等価性判定は実現できない。
【０００３】
特許文献２には、動作合成での内部処理ステップに着目し、各内部処理での変更・操作が正しく行われているかをチェックする事を目的として成され、合成前後の等価性判定を行うようにした発明が記載される。これは、動作合成ツールが行う入力記述の各変形処理で記述変更が正しく行われている事を、動作合成ツールが各変形処理で生成する中間表現に直接アクセスする事で証明を実施している。変形処理前後での中間表現から夫々EFSM（Ｅxtended Ｆinite Ｓtate Ｍachine）を抽出し、夫々のEFSMの次状態関数、出力関数をSymbolic Simulationで求め、得られた次状態関数と出力関数が夫々等しいかを検証する事で等価性検証を実施している。即ち、特許文献２に記載の技術は、テストベンチを用いたシミュレーションによる等価性検証手法ではない。
【０００４】
特許文献３には、動作合成への入力記述と出力結果RTLのシミュレーション結果波形を比較する事で、等価性検証を実施可能とする事を目的になされ、合成前後の等価性判定を行うようにした発明が記載される。この発明では、動作合成への入力記述と出力結果RTLを個別にシミュレーションし、入力記述に対する割り当てサイクル指定情報又は動作合成が挿入したサイクル情報を用いて、夫々の出力波形でのトランザクションの対応を識別し、トランザクション単位で出力波形比較を行う事で、入力記述と出力記述の等価性検証を実施している。従って、入力記述、出力結果RTLの夫々に対してテストベンチの記述が必要となる。
【０００５】
【特許文献１】特開2005-316595号公報
【特許文献２】特開2003-141202号公報
【特許文献３】特開2004-145712号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明者は基本になる回路モデルに対して新たに開発する回路の等価性の検証に当該基本になる回路モデルのためのテスト環境を実現するためのテストベンチを流用することについて検討してきた。上記特許文献１乃至３については何れもそのような意味でテストベンチを流用するには不適当である。前述の通り特許文献１の技術ではシステムレベル設計言語で記述された動作レベルの回路記述とHDLで記述されたRTL回路記述との夫々の回路記述に対して同一のテストベンチを用いた等価性判定は実現できない。特許文献２の技術はそもそもテストベンチを用いたシミュレーションによる等価性検証手法ではない。特許文献３の技術では入力記述、出力結果RTLの夫々に対してテストベンチの記述が必要になる。
【０００７】
本発明者は、合成前後でのテストベンチの流用が単純には行えないという問題点は、動作合成でのスケジューリングにより、合成入力記述の入力及び出力アクセスタイミングサイクルと、合成結果の入力及び出力アクセスタイミングサイクルとが異なる事に起因する、という点に着目した。入力及び出力アクセスタイミングサイクルが合成前後で異なるため、合成入力記述で用いていたテストベンチをそのまま流用する事ができない。合成結果を解析した上で、接続可能なように人手で修正を行う場合にはその工数が大幅に増大することが予想される。
【０００８】
本発明の目的は、基本になる回路モデルに対して新たに開発する回路の等価性の検証に当該基本になる回路モデルのためのテストベンチを流用する検証方法を提供することにある。
【０００９】
本発明の別の目的は、動作合成ツールを用いて得られたRTL記述モデルやシミュレーションモデル等に対する等価性の検証を既存のテストベンチを流用して実施可能にするための検証環境を生成するプログラムを提供することにある。
【００１０】
本発明の更に別の目的は、動作合成ツールを用いて得られたRTL記述モデルやシミュレーションモデル等に対する等価性の検査を既存のテストベンチを流用して実施可能にするための検証環境を生成する方法を提供することにある。
【００１１】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１３】
すなわち、所定の言語で回路が記述された手本モデルと前記手本モデルのためのテストベクタ生成モデルとを用いて検証対象モデルの等価性を検証するために、サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行いながら、前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む処理と、前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する処理を行ない、前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込み、書き込まれた信号名毎のペア出力に対して一致判判定を行う。
【００１４】
これにより、前記手本モデルとそのテストベンチであるテストベクタ生成モデルとの間の入力及び出力アクセスタイミングサイクルと、前記検証対象モデルと前記テストベクタ生成モデルとの間の入力及び出力アクセスタイミングサイクルとの相違は、入力ＦＩＦＯ群と出力ＦＩＦＯペア群によって吸収される。よって、検証対象モデルの等価性評価に手本モデルのテストベンチの流用が可能になる。
【発明の効果】
【００１５】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【００１６】
すなわち、基本になる回路モデルに対して新たに開発する回路の等価性の検証に当該基本になる回路モデルのためのテストベンチを流用することが可能になる。
【発明を実施するための最良の形態】
【００１７】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１８】
〔１〕本発明の一つの具体的な形態に係る等価性検証方法は、所定の言語で回路が記述された手本モデルと前記手本モデルのためのテストベクタ生成モデルとを用いて検証対象モデルの等価性を検証する方法であり、それぞれコンピュータ装置で実行する処理として第１処理乃至第５処理を含む。第１処理は、サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う処理である。第２処理は、前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う処理である。第３処理は、前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する処理である。第４処理は、前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む処理である。第５処理は、前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判判定を行う処理である。
【００１９】
これにより、前記手本モデルとそのテストベンチであるテストベクタ生成モデルとの間の入力及び出力アクセスタイミングサイクルと、前記検証対象モデルと前記テストベクタ生成モデルとの間の入力及び出力アクセスタイミングサイクルとの相違は、入力ＦＩＦＯ群と出力ＦＩＦＯペア群を用いた第２乃至第４処理によって吸収される。よって、検証対象モデルの等価性評価に手本モデルのテストベンチの流用が可能になる。
【００２０】
〔２〕項１の等価性検証方法において、例えば前記第１処理及び第２処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが第１の入力ＦＩＦＯ閾値（D(port)/2、D(port)×（N-1)/N、D(port)/N、任意指定正数から選ばれた値）で規定される数以上のデータを保持するようになったとき又は入力ＦＩＦＯの一つでもフルになったとき実行停止され、それ以外の状態で実行される。前記全ての入力ＦＩＦＯが第１の入力ＦＩＦＯ閾値で規定される数以上のデータを保持するようになったときに第１及び第２処理の実行を停止するから、個々の入力ＦＩＦＯがランダムに且つ頻繁にフルになる状態を緩和することができ、検証処理効率の向上に資することができる。
【００２１】
〔３〕項１の等価性検証方法において、例えば前記第３処理及び第４処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが所定の数以上のデータを保持するようになるのを待って実行開始される。処理の開始前に、前記手本モデルと前記検証対象モデルとの間の入力及び出力アクセスタイミングサイクルの相違を予め吸収して検証処理の効率化を図るためである。
【００２２】
〔４〕項３の等価性検証方法において、実行開始された前記第３処理及び第４処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが第２の入力ＦＩＦＯ閾値（D(port)/2、D(port)×（N-1)/N、D(port)/N、任意指定正数から選ばれた値）で規定される数以下のデータを保持するようになったとき又は入力ＦＩＦＯの一つでもエンプティーになったとき実行停止され、それ以外の状態で実行される。個々の入力ＦＩＦＯがランダムに且つ頻繁にエンプティーになる状態を緩和することができ、検証処理効率の向上に資することができる。
【００２３】
〔５〕項１の等価性検証方法は、コンピュータ装置で実行する処理として、入力ＦＩＦＯのデータ保持数が所定の数に達する毎にＦＩＦＯ段数を増加させるサイズアップ処理を更に含む。頻繁に入出力が行われる信号に対応して入力ＦＩＦＯの段数を動的に増加させることができるから、特定のＦＩＦＯがフルに成る可能性を低減することができ、検証処理効率の向上に資することができる。
【００２４】
〔６〕項５の等価性検証方法において前記入力ＦＩＦＯのデータ保持数が所定の数に達するとは、例えば入力ＦＩＦＯの書き込みポインタの値に対する読出しポインタの差が第３の入力ＦＩＦＯ閾値（D(port)/2、D(port)×（N-1)/N、D(port)/N、任意指定正数から選ばれた値）以上になることである。入力ＦＩＦＯに対する書き込みと読出しの動作速度差に応じてサイズアップの可否を制御することができる。
【００２５】
〔７〕項６の等価性検証方法において、例えば前記第３の入力ＦＩＦＯ閾値は、前記サイズアップ処理毎に増加される変数（Ｎ）にしたがって増加される数である。一旦サイズアップされた次のサイズアップの可否も適正に制御することが容易になる。
【００２６】
〔８〕項１の等価性検証方法は、コンピュータ装置で実行する処理として、出力ＦＩＦＯのデータ保持数が所定の数に達する毎にＦＩＦＯ段数を増加させるサイズアップ処理を更に含む。頻繁に入出力が行われる信号に対応して出力ＦＩＦＯの段数を動的に増加させることができるから、特定の出力ＦＩＦＯがフルに成る可能性を低減することができ、検証処理効率の向上に資することができる。
【００２７】
〔９〕項８の等価性検証方法において、例えば前記出力ＦＩＦＯのデータ保持数が所定の数に達するとは、出力ＦＩＦＯの書き込みポインタの値に対する読出しポインタの差が出力ＦＩＦＯ閾値（D(port)/2、D(port)×（N-1)/N、D(port)/N、任意指定正数から選ばれた値）以上になることである。出力ＦＩＦＯに対する書き込みと読出しの動作速度差に応じてサイズアップの可否を制御することができる。
【００２８】
〔１０〕項９の等価性検証方法において前記出力ＦＩＦＯ閾値は、例えば前記サイズアップ処理毎に増加される変数（Ｎ）にしたがって増加される数である。一旦サイズアップされた次のサイズアップの可否も適正に制御することが容易になる。
【００２９】
〔１１〕本発明の別の具体的な形態に係る等価性検証用プログラムは、所定の言語で回路が記述された手本モデルと前記手本モデルのためのテストベクタ生成モデルとを用いて検証対象モデルの等価性を検証する第１乃至第５処理をコンピュータ装置に実行させるプログラムである。前記第１処理は、サイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルとの間で信号の入出力を行う処理である。前記第２処理は、前記手本モデルと同じタイミングで前記手本モデル用テストベクタ生成モデルからの出力を手本モデルの信号毎に入力ＦＩＦＯ群に書き込む制御を行う処理である。前記第３処理は、前記検証対象モデルと同じ動作タイミングで前記入力ＦＩＦＯ群からデータを読み込んで前記検証対象モデルに出力する処理である。前記第４処理は、前記手本モデルの出力と前記検証対象モデルの出力とを対応する信号名毎に出力ＦＩＦＯペア群に書き込む処理である。前記第５処理は、前記出力ＦＩＦＯペア群の信号名毎のペア出力に対して一致判判定を行う処理である。
【００３０】
この等価性検証用プログラムをコンピュータ装置で実行することにより、手本モデルのテストベンチを流用して検証対象モデルの等価性評価を容易に行うことが可能になる。
【００３１】
〔１２〕項１１の等価性検証用プログラムにおいて、例えば前記第１処理及び第２処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが第１の入力ＦＩＦＯ閾値で規定される数以上のデータを保持するようになったとき又は入力ＦＩＦＯの一つでもフルになったとき実行停止され、それ以外の状態で実行される。
【００３２】
〔１３〕項１１の等価性検証用プログラムにおいて、例えば前記第３処理及び第４処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが所定の数以上のデータを保持するようになるのを待って実行開始される。
【００３３】
〔１４〕項１３の等価性検証用プログラムにおいて、例えば実行開始された前記第３処理及び第４処理は、前記入力ＦＩＦＯ群の全ての入力ＦＩＦＯが第２の入力ＦＩＦＯ閾値で規定される数以下のデータを保持するようになったとき又は入力ＦＩＦＯの一つでもエンプティーになったとき実行停止され、それ以外の状態で実行される。
【００３４】
〔１５〕項１１の等価性検証用プログラムは、コンピュータ装置で実行する処理として、例えば入力ＦＩＦＯのデータ保持数が所定の数に達する毎にＦＩＦＯ段数を増加させるサイズアップ処理を更に含む。
【００３５】
〔１６〕項１５の等価性検証用プログラムにおいて、例えば前記入力ＦＩＦＯのデータ保持数が所定の数に達するとは、入力ＦＩＦＯの書き込みポインタの値に対する読出しポインタの差が第３の入力ＦＩＦＯ閾値以上になることである。
【００３６】
〔１７〕項１６の等価性検証用プログラムにおいて、前記第３の入力ＦＩＦＯ閾値は、例えば前記サイズアップ処理毎に増加される変数にしたがって増加される数である。
【００３７】
〔１８〕項１１の等価性検証用プログラムは、コンピュータ装置で実行する処理として、例えば出力ＦＩＦＯのデータ保持数が所定の数に達する毎にＦＩＦＯ段数を増加させるサイズアップ処理を更に含む。
【００３８】
〔１９〕項１８の等価性検証用プログラムにおいて、前記出力ＦＩＦＯのデータ保持数が所定の数に達するとは、例えば出力ＦＩＦＯの書き込みポインタの値に対する読出しポインタの差が出力ＦＩＦＯ閾値以上になることである。
【００３９】
〔２０〕項１９の等価性検証用プログラムにおいて、前記出力ＦＩＦＯ閾値は、例えば前記サイズアップ処理毎に増加される変数にしたがって増加される数である。
【００４０】
〔２１〕本発明の更に別の具体的な形態に係る等価性検証用プログラムの生成方法は、所定の言語で回路が記述された手本モデルと前記手本モデルのためのテストベクタ生成モデルとを用いて検証対象モデルの等価性を検証するための等価性検証用プログラムを生成する方法であって、それぞれコンピュータ装置で実行する処理として、第１乃至第６処理を含む。第１処理は前記手本モデル、前記テストベクタ生成モデル、及びパラメータ設定ファイルをコンピュータ装置に読み込む処理である。第２処理はサイクル精度で前記手本モデルが前記手本モデル用テストベクタ生成モデルから入力するデータを入力ＦＩＦＯ群に書き込む操作を行うための手本モデルテスト入力フェッチモデルを生成する処理である。第３処理は前記検証対象モデルの動作タイミングに従って前記入力ＦＩＦＯ群からデータを読み出して前記検証対象モデルへ出力する操作を行うための検証対象モデルテスト入力出力モデルを生成する処理である。第４処理は前記手本モデルテスト入力フェッチモデル及び検証対象モデルテスト入力出力モデルに基づいて前記入力ＦＩＦＯ群のモデルを生成する処理である。第５処理は前記手本モデルの出力と前記検証対象モデルの出力を対応する信号名毎に入力して保持する出力ＦＩＦＯペア群を生成する処理である。第６処理は前記出力ＦＩＦＯペア群の信号名毎の出力ペアの一致判定を行う一致判定モデルを生成する処理である。
【００４１】
この方法を用いることにより、手本モデルのテストベンチを流用して検証対象モデルの等価性評価を行うための等価性検証用プログラムを容易に得ることができるようになる。
【００４２】
２．実施の形態の詳細
実施の形態について更に詳述する。以下、本発明を実施するための形態を図面に基づいて詳細に説明する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【００４３】
《既存テストベンチを流用したテスト環境の概要》
図１には本発明のテスト環境生成方法によって生成された仮想的なテスト環境の構成が例示される。同図に示されるテスト環境は、手本モデル１に対してポート間での対応取りが可能な検証対象モデル２を手本モデル用のテストベクタ生成モデル３を用いて機能検証可能とするものである。手本モデル１と検証対象モデル２は、相互に一対一対応されるポート名を有していて、時間若しくはタイミングを無視したとき入力信号系列に対して等価な出力信号系列を得ることができる関係（入出力の等価性）を有することが想定されている。例えば検証対象モデル２は手本モデル１に対して内部処理がパイプライン化されたり、内部動作に対して実行サイクルが付加された関係を有する。手本モデル用のテストベクタ生成モデル３は、手本モデルの機能を検証するためのテストベンチということになり、図１のテスト環境は手本モデルのテストベンチを流用して検証対象モデルを検証可能とする。
【００４４】
テストベンチはＥＷＳ（エンジニアリング・ワーク・ステーション）等のコンピュータ装置によって実行可能なプログラムとして構成されている。図１において、手本モデル１、検証対象モデル２、手本モデル用のテストベクタ生成モデル３、手本モデルテスト入力フェッチモデル４、入力ＦＩＦＯ群５、検証対象モデルテスト入力出力モデル６、出力ＦＩＦＯペア群７、クロック停止制御部８、及び一致判定モデル９のそれぞれは機能的に分割されたプログラムモジュールとして位置付けられる。それぞれはコンピュータ装置によって実行される。
【００４５】
手本モデル１はサイクル精度で手本モデル用テストベクタ生成モデル３との間で信号入出力を行う。手本モデルテスト入力フェッチモデル４は、手本モデル１と同じタイミングで手本モデル用テスト生成ベクタ生成モデル３からの出力をフェッチして入力ＦＩＦＯ群５の対応する信号名（ポート名）のＦＩＦＯに書き込む（プッシュ）制御を行う。検証対象モデルテスト入力出力モデル６は検証対象モデル２と同じタイミングで入力ＦＩＦＯ群５から入力データを読み込んで（ポップ）フェッチし、フェッチしたデータを検証対象モデル３に出力する。出力ＦＩＦＯペア群７は手本モデル１の出力と検証対象モデル２の出力を信号名毎に保持する。出力ＦＩＦＯペア群７のＦＩＦＯは入力の値が変化したときにプッシュされる。クロック停止制御部８は入力ＦＩＦＯ群５がフル又はエンプティーにならないように、テスト環境の各コンポーネントを制御する。一致判定モデル９は出力ＦＩＦＯペア群７の出力ＦＩＦＯペアの双方が先頭にポップ可能なデータを持っているとき当該ＦＩＦＯペアからデータをフェッチしてデータの一致比較を行う。これにより、手本モデル１に対して入出力の等価性を持つ検証対象モデル２を手本モデルのテストベンチを流用して機能検証することが可能になる。出力ＦＩＦＯペア群７にサイクル情報も併せて格納させれば一致判定モデルにて出力データの不一致を検出した際にシミュレーション結果波形のどの部分を比較すれば良いかが判定可能となり、サイクルのズレを考慮した検証も可能になる。また、サイクル情報を確認する事で、期待したサイクルのズレが発生しているかの確認も可能となる。以下、上記テスト環境の生成方法等について詳述する。
【００４６】
《テスト環境生成処理の概要》
図２にはテスト環境生成処理の概要が示される。ポート間で対応取りが可能な抽象度が異なる２つのモデルである前記手本モデル１と前記検証対象モデル２、並びに前記手本モデル用テストベクタ生成モデル３をプログラム修正装置１１に入力とする。例えば手本モデル１はシステムＣ（SystemC）などのシステムレベル言語で記述されており、検証対象モデル２は、システムレベル言語またはＨＤＬ（hardware description language）で記述されているものとする。特に、手本モデル１又は検証対象モデル２がＨＤＬで記述されたモデルである場合、前記ＨＤＬ記述とサイクルレベルで動作が一致するシステム記述言語で記述された手本モデル１または検証対象モデル２をも入力とする。ここで、検証対象モデル２の前記HDL記述は、手本モデル１に対してプログラムパス上への割り当てサイクルを指定したり、パイプライン化指定を行って動作合成ツールにて合成した結果得られるＲＴＬ（register transfer level）記述であっても良い。また、市販動作合成ツールは多くの場合、当該ＲＴＬとサイクルレベルで動作が一致するシステム記述言語で記述された検証対象モデルを生成する機能を有しているため、ここでは検証対象モデル２はそれを用いて生成されたものとする。
【００４７】
プログラム修正装置１１は、システムレベル言語で記述された手本モデル１から、入力データをフェッチした直後に当該データを入力ＦＩＦＯ群５に書き込む手本モデルテスト入力フェッチモデル４を生成し、システムレベル言語又はＨＤＬで記述された検証対象モデル２への入力データフェッチを前記入力ＦＩＦＯ群から行って当該入力データを検証対象モデル２へ出力する検証対象モデルテスト入力出力モデル６を生成する。
【００４８】
統合装置１３は、前記手本モデル１、検証対象モデル２、手本モデル用テストベクタ生成モデル３、手本モデルテスト入力フェッチモデル４、及び検証対象モデルテスト入力出力モデル６、パラメータ設定ファイル１２を入力し、それらに基づいて入力ＦＩＦＯ群５、出力ＦＩＦＯペア群７、及び一致判定モデル９を生成すると共に生成した全てのモデルを統合して、図１で説明した評価環境生成プログラム１５を生成する。評価環境生成プログラム１５はコンパイルされて実行コードに変換される（１６）。コンピュータ装置は実行コードを介して評価環境生成プログラム１５を実行し（１７）、評価対象モデル２の出力ポート毎にサイクル精度で手本モデル１の出力との一致又は不一致を得ることができる（１８）。手本モデル１または検証対象モデル２がＨＤＬ記述の場合は、市販シミュレータのコシミュレーション機能を用いるのがよい。したがって、統合装置１３における統合とは、コシミュレーション機能を用いて評価可能なように一部のモデルを統合することも意味する。
【００４９】
前記評価環境生成プログラム１５が実行されることにより、手本モデルテスト入力フェッチモデル４により手本モデル１が手本モデル用テストベクタ生成モデル３からフェッチした入力データ系列を入力ＦＩＦＯ群５へ転送し、検証対象モデルテスト入力出力モデル６により前記入力ＦＩＦＯ群５から検証対象モデル２が入力データをフェッチするタイミングにてデータフェッチを行い、検証対象モデル２へのデータ入力を行う。手本モデル１及び検証対象モデル２の各出力ポートには出力ＦＩＦＯペア７が設けられており、前記出力ＦＩＦＯペア７は手本モデルの対応する出力ポートからの出力値が変化したときのみ値を格納する。出力ＦＩＦＯペア７の両方のＦＩＦＯの先頭にデータが格納されている間、一致判定モデル９は値の比較を実施し、手本モデル１の出力と検証対象モデル２の出力との一致又は不一致、即ち等価性判定を行う。クロック停止制御部８は入力ＦＩＦＯ群５からフル情報、エンプティー情報を取得する事で、入力ＦＩＦＯＩ群５でのフル又はエンプティーの状態が起こらないよう各モデルのクロックの制御、即ち、動作停止制御及び動作再開制御を行う。入力ＦＩＦＯ群５や出力ＦＩＦＯペア7のＦＩＦＯ初期段数の指定、ＦＩＦＯの段数変更の態様等はパラメータ設定ファイル１２で設定される。それらの指定が無い場合は統合装置１３にてデフォルト値に設定されるものとする。
【００５０】
尚、ポートは、手本モデルと検証対象モデルとの間で対応取りが出来る限りにおいて、ピン精度であっても、ＴＬ（Transaction Level）ポートであってもよい。
【００５１】
《フロー等価性》
２つの回路や機能ブロック（プロセス）のフロー等価とは、時間を無視した場合に双方のプロセスの各入力ポートに対してに等価な入力データ系列を入力した場合に、時間を無視したとき双方のプロセスの各出力ポートから得られるデータ系列がプロセス間で一致対応することをいう。例えば、夫々のプロセスでの入力ポート群と出力ポート群の入力・出力の順番や実行順までもが時間を無視して２つのプロセスで同じ場合は、夫々に、入力データをフェッチした状態と出力データ値が変化した状態を実行順に基づいて結ぶ事で、状態遷移グラフを構築した場合、これら状態遷移グラフが互いにTime Abstracted Bisimilar（対応日本語訳を記入してください：時間抽象化を伴う双模倣等価）な関係となっている。本願において開示されるテスト環境の全体構成では、入力ＦＩＦＯ群５等のＦＩＦＯにおいてフル・エンプティーの制御を行っているが、この操作では各プロセスの出力値が同じタイミングで変化しなくなるだけであり、その値の変化に基づいて等価性判定を行っているため、等価性判定には影響を与えない。この等価性の概念についての詳細は、例えば、文献「Paul Le Guernic, Jean-Pierre Talpin, and Jean-Christophe Le Lann, "POLYCHRONY FOR SYSTEM DESIGN," Journal of Circuits, Systems, and Computers, 12(3), pp.261-304, 2003」に記載がある。
【００５２】
《手本モデルの記述》
手本モデル１の入力記述が例えばサイクル精度で記述されたシステムＣによる動作記述であるとき、手本モデル用テストベクタ生成モデル３は当該システムＣによる動作記述のテストベンチである。手本モデル１と手本モデル用テストベクタ生成モデル３の両者は接続されてシミュレーション可能である事が前提となる。
【００５３】
《検証対象モデルの記述》
例えば手本モデル１がサイクル精度でシステムＣによる動作記述として作成されている場合、動作一致検証において比較対象となる検証対象モデル２は、内部ループをパイプライン化、全体処理をパイプライン化、プログラムのあるポイントからあるポイントまでのプログラムパスに対してサイクル割当て実施を任意に適用して得られる動作記述、又は前記３項目を任意に動作合成にて実施して得られるＲＴＬである。前記検証対象モデル２の動作記述は、市販の動作合成ツールなどを用いる事で、合成結果のＲＴＬのシミュレーションモデルとして出力されるシステムＣ記述として取得する事も可能である。
【００５４】
《パラメータ設定ファイル》
パラメータ設定ファイル１２は入力ＦＩＦＯ群５のＦＩＦＯ（単に入力ＦＩＦＯとも称する）に対するパラメータと出力ＦＩＦＯペア７のＦＩＦＯ（単に出力ＦＩＦＯとも称する）に対するパラメータを規定する。
【００５５】
入力ＦＩＦＯ群５のパラメータは、第１に、ＦＩＦＯ段数である。これは、各入力ポートに対応して配置されるＦＩＦＯの段数を設定するパラメータである。別途説明する入力ＦＩＦＯ段数決定処理でのＦＩＦＯ段数計算での乗数としてこのパラメータを用いる。指定なき場合は、デフォルト値として例えば２を採用するものとする。尚、任意に指定可能としても良い。第２に、クロック停止制御部８への通知内容に関する設定である。クロック停止制御部８への通知内容としては、リセット解除後、ＦＩＦＯの蓄積データ量（ＦＩＦＯのデータ蓄積段数）がある量に到達するまでＦＩＦＯのポップ側の動作クロックを停止するために当該ある量まで到達した事の通知、ＦＩＦＯの蓄積データ量がある一定量以上になった事の通知、及び、ＦＩＦＯのデータ蓄積量がある一定量以下になった事の通知がある。設定パラメータをNとし、Nを用いて、後述する入力ＦＩＦＯ闘値設定手段にて上記通知に必要なパラメータを決定する。Nの指定がない場合は、デフォルト値として例えば４を採用するものとする。第３に、ＦＩＦＯのサイズアップに関する設定である。これは各入力ポートに対応して配置されるＦＩＦＯの段数の動的増加に関するパラメータである。パラメータで設定可能な態様は、ＦＩＦＯへの書き込みポインタの値が例えばＦＩＦＯサイズ又はその近傍の値に達した場合に、無条件で倍の段数へ増加、又は「書き込みポインタ−読み出しポインタ≧後述する入力ＦＩＦＯ闘値」の場合に倍の段数に増加の何れかである。特に、後述する入力ＦＩＦＯ闘値を指定しない場合は、前者が選択されるものとする。
【００５６】
出力ＦＩＦＯペア７のパラメータは、第１に、ＦＩＦＯ段数である。これは、各出力ポートに対応して配置されるＦＩＦＯの段数を設定するパラメータである。このパラメータ値に基づいて、別途説明する出力ＦＩＦＯ段数決定処理にて個々のＦＩＦＯ段数が決定される。指定なき場合は、デフォルト値として例えば８段を採用するものとする。尚、任意に指定可能としても良い。第２に、ＦＩＦＯのサイズアップに関する設定である。これは、各入力ポートに対応して配置されるＦＩＦＯの段数増加に関する設定パラメータである。ＦＩＦＯへの書き込みポインタの値がＦＩＦＯサイズ又はその近傍の値に達した場合に、無条件で倍の段数へ増加、又は「書き込みポインタ−読み出しポインタ≧後述する入力FIFO闘値」の場合に、倍の段数に増加の何れかである。特に、後述する入力ＦＩＦＯ闘値を指定しない場合は、前者が選択されるものとする。
【００５７】
《評価環境生成プログラムの生成フロー全体》
図３には評価環境生成プログラムの生成フローが全体的に例示される。その生成フローはモデル修正処理（Ｓ１１）、ＦＩＦＯパラメータ設定及びＦＩＦＯ記述生成処理（Ｓ１２）、クロック停止制御部生成処理（Ｓ１３）、及び全体接続処理（Ｓ１４）から成る。
【００５８】
モデル修正処理（Ｓ１１）は、システム記述言語で記述された手本モデル１に基づいて入力データをフェッチした直後に当該データを入力ＦＩＦＯ群に書き込む手本モデルテスト入力フェッチモデル４を生成し、システム記述言語で記述された検証対象モデル２に基づいて入力データのフェッチを前記入力ＦＩＦＯ群５から行って得られた入力データを出力する検証対象モデルテスト入力出力モデル６を生成する処理である。
【００５９】
ＦＩＦＯパラメータ設定及びＦＩＦＯ記述生成処理（Ｓ１２）は、入力ＦＩＦＯ群５及び出力ＦＩＦＯペア７の、各ＦＩＦＯのＦＩＦＯ段数、クロック停止制御部８への信号通知を行うに必要となるＦＩＦＯ残量の設定、段数増加形態などが設定された、入力ＦＩＦＯ群５および出力ＦＩＦＯペア７の記述を生成する処理である。
【００６０】
クロック停止制御部生成処理（Ｓ１３）は、入力ＦＩＦＯ群５からの信号通知を受けて、手本モデル１、手本モデル用テストベクタ生成モデル３、及び手本モデルテスト入力フェッチモデル４からなる前段モジュール群、そして、検証対象モデル２、検証対象モデルテスト入力出力モデル６からなる後段モジュール群へのクロック供給停止やクロック供給再開の制御を行うモジュールの記述を生成する処理である。
【００６１】
全体接続処理（Ｓ１４）は、モデル修正処理にて得られたモデル、入力ＦＩＦＯ群５、出力ＦＩＦＯペア７、クロック停止制御部８、手本モデル１、検証対象モデル２、及び一致判定モデル９を接続する処理である。
【００６２】
《モデル修正処理》
モデル修正処理（Ｓ１１）について詳細を説明する。モデル修正処理（Ｓ１１）は図４に例示されるように、モジュール名・ポート宣言記述部の修正処理（Ｓ１１１）、動作記述部の修正処理（Ｓ１１２）、及びモジュール名・ポート宣言記述部の後続修正処理（Ｓ１１３）から成る。
【００６３】
先ずモジュール名・ポート宣言記述部の修正処理（Ｓ１１１）について説明する。図５には手本モデル１に対するモジュール名・ポート宣言記述部の修正処理（Ｓ１１１）の詳細が例示される。この処理はヘッダ記述を修正する処理である。すなわち、この修正処理では、手本モデル記述のモジュール名・ポート宣言記述部を入力として、モジュール名、入力ポート宣言及び出力ポート宣言の識別を実施し、モジュール名を変更し、各入力ポート変数を元に各入力ポートに対応する入力ＦＩＦＯの関数プロトタイプ宣言を定義し、前記新たに定義した入力ＦＩＦＯの関数プロトタイプ宣言をポート宣言記述部に追加する。識別した出力ポート宣言はシグナル変数宣言へ変更する。識別した入力信号名、出力信号名は入力信号名テーブル、出力信号名テーブルへ夫々格納する。出力信号名テーブルには信号の型も図１１の対応テーブルを参照して登録する。得られたモジュール名・ポート宣言記述部のファイル名を“_元のファイル名”とし、入力信号テーブルに格納する。
【００６４】
尚、入力ＦＩＦＯ関数のプロトタイプ宣言は、「void fifo_入力信号名(char rst, char rw_flg, 入力信号の型 wdata, 入力信号の型* rdata);」で与えられているものとする。従って、プロトタイプ宣言追加時には、識別した入力ポートの情報から入力信号名、入力信号の型の情報を取得し、適時置換されているものとする。前記入力ＦＩＦＯ関数の引数、char rst， char rw_flg，入力信号の型 wdata，入力信号の型* rdataの意義は、下記の通り、
char rst; // ０で初期化動作、１で通常動作、
char rw_flg; // １でFIFOリード、０でFIFOライト、
入力信号の型 wdata; // rw_flgを１に設定するとwdataがFIFOへデータpushされる、
入力信号の型* rdata; // rw_flgを０に設定するとFIFOからデータがpopされrdataに値反映される、となる。
【００６５】
図６には検証対象モデル２に対するモジュール名・ポート宣言記述部の修正処理（Ｓ１１１）の詳細が例示される。この修正処理では、検証対象モデル記述のモジュール名・ポート宣言記述部を入力として、入力ポート宣言及び関数プロトタイプ宣言を識別し、関数プロトタイプ宣言を元に新たな関数を定義し、各入力ポート変数を元に新たな出力ポート変数を定義し、前記新たに定義した出力ポート変数宣言及び関数プロトタイプ宣言を修正済みの手本モデルのモジュール名ポート宣言記述部（“_元のファイル名”）に追加する。メンバローカル変数宣言がある場合は、それらを識別し、メンバローカル変数テーブルへ格納を行い、各ローカル変数の変数名を“_ローカル変数名”とした変数宣言の追加を行う。
【００６６】
図７には手本モデル１のモジュール名・ポート記述部を図５の手順で変換した結果が例示される。アンダーライン部分が変換によって追加された記述部分である。
【００６７】
図８には検証対象モデル２のモジュール名・ポート記述部と図６の手順で変換した結果が例示される。図８のアンダーライン部分が図７の変換結果に対して埋め込まれた記述部分である。
【００６８】
次に動作記述の修正処理（Ｓ１１２）について説明する。図９は動作記述を修正するための手本モデル及び機能検証モデルの双方に対する共通処理が概念的に示される。先ず、各々コントロールフローグラフ（ＣＦＧ）へと展開し、図示のように、if(条件式)-else if(条件式)分岐構造をif(条件式)-else{if(条件式)}分岐構造へコード上での変換を実施する。
【００６９】
図１０には図９に示す変換処理を含め、手本モデルから手本モデルテスト入力フェッチモデルの動作記述への変換を行なう処理のフローチャートが示される。入力信号名テーブルより入力信号変数名と型の情報を読み出し、各入力信号に対して、“tmp_入力信号名”なる同一型または次項の対応に基づいて定めた型のローカル変数宣言記述を動作記述部に挿入する。特に入力信号変数の変数型がsc_uint<T>やsc_int<T>のSystemCデータ型である場合、図１１の対応テーブルを用いて、“tmp_入力変数名”として宣言する関数内ローカル変数の型を定めるものとする。この型決定操作は出力ＦＩＦＯでも同様に行うものとする。
【００７０】
図１２には手本モデル１に対する動作記述部の修正処理の具体例が示される。手本モデルの動作記述を読み込み、各入力ポートに対して生成したＦＩＦＯ関数の初期化記述を、動作記述の初期化記述部に埋め込み、内部動作記述部では、入力ポートから読み込んだ値を、“tmp_入力信号名”の変数へ代入し、当該変数をＦＩＦＯ関数の引数へ渡す事で、ＦＩＦＯへの入力信号値のプッシュ動作を実現する記述の埋め込みを実施する。図１４には手本モデルの動作記述部と図１２の処理による変換結果が例示される。
【００７１】
図１３には検証対象モデル２に対する動作記述部の修正処理の具体例が示される。検証対象モデルの動作記述を読み込み、読み込んだ内部動作記述部に対して、“tmp_入力信号名”の変数を引数として各入力ポートに対応して構築したＦＩＦＯ関数コール記述を埋め込む事で、ポップ動作にてＦＩＦＯから読み込んだ値を“tmp_入力信号名”へ代入し、代入された“tmp_入力信号名”を“_入力信号名”へ代入する文を埋め込む事により、検証対象モデルへの入力信号出力を実現する。図１５には検証対象モデルの動作記述部と図１３の処理による変換結果が例示される。
【００７２】
次に、モジュール名・ポート宣言記述部の後続修正処理（Ｓ１１３）について説明する。この処理は停止制御用の修正処理である。図１６にはモジュール名・ポート宣言記述部の後続修正処理（Ｓ１１３）の一例が示される。モジュール名・ポート宣言記述修正（Ｓ１１１）にて生成されたモジュール名・ポート宣言記述、入力信号テーブルを読み込み、各入力信号に対して、bool型の、入力信号名Empty、入力信号名EmptyAlart、入力信号名Full、入力信号名FullAlart、入力信号名Start、なる名称の出力ポート宣言記述を追加し、検証対象モデルテスト入力出力モデルのスレッド登録でのクロック極性記述を反転させる処理を行う。修正後の出力ファイル名は修正前の入力ファイル名と同一とする。図１７には図１６の修正処理による変換結果が例示される。
【００７３】
《ＦＩＦＯパラメータ設定及びＦＩＦＯ記述生成処理》
図１８にはＦＩＦＯパラメータ設定及びＦＩＦＯ記述生成処理Ｓ１２の詳細が例示される。Ｓ１２の処理は、手本モデルテスト入力フェッチモデル及び検証対象モデルテスト入力出力モデルにより関数コールされる各入力信号に対して構成される入力ＦＩＦＯのサイズ決定処理（Ｓ１２１）、そのモデル生成処理（Ｓ１２２）、手本モデルや検証対象モデルの各出力信号に対して構成される出力ＦＩＦＯのサイズ決定処理（Ｓ１２３）、そのモデル生成処理（Ｓ１２４）、及び、手本モデルと検証対象モデルで同一名の出力信号の夫々に接続された２つの出力FIFOからの出力信号フェッチ及び信号値比較を行なって一致不一致判定を行う信号出力一致判定モデル生成処理（Ｓ１２５）からなる。
【００７４】
《入力ＦＩＦＯ群に関するパラメータ設定及び記述生成》
入力ＦＩＦＯモデルのＦＩＦＯ段数については以下の基本的な考えを採用する。各入力ポートに対応して配置されるＦＩＦＯの段数設定パラメータをNとする。以下に記載する入力ＦＩＦＯ段数決定処理でのＦＩＦＯ段数計算での乗数としてこのパラメータNを用いる。指定なき場合は、デフォルト値として例えば２を採用するものとする。尚、任意に指定可能としても良い。
【００７５】
ＦＩＦＯ段数決定では、手本モデル１での各入力ポートのアクセス間隔サイクルの最大値OrigInMax(port)と最小値OrigInMin(port)、並びに、検証対象モデルでの各入力ポートのアクセス間隔サイクルの最大値TgtInMas(port)と最小値TgtInMin(port)を取得し、各入力ポートに対応して配置されるＦＩＦＯの段数を決定するとき、OrigInMin(port)≧TgtInMin(port)ならば当該入力ポートへの接続するFIFO段数＝ceil(OrigInMax(port)/TgtInMin(port))×Nとする。ただし、算出結果が８以下なら、Nの値を結果が８以上となるよう調整するものとする。また、OrigInMin(port)＜TgtInMin(port)ならば、当該入力ポートへの接続するFIFO段数＝ceil(TgtInMax(port)/OrigInMin(port))×Nとする。ただし、算出結果が８以下なら、Nの値を結果が８以上となるよう調整するものとする。
【００７６】
尚、アクセス間隔サイクルの最大値と最小値の取得では、文献「Yau-Tsun Steven Li and Sharad Malik, "Performance analysis of embedded software using implicit path enumeration," IEEE Trans. on CAD of Integrated Circuits and Systems 16(12), pp.1477-1487, 1997」でのILPによる手法を応用し、文献内でのベーシックブロックの処理時間を、モデルに記載されている実行サイクル数として、対象入力ポート間のプログラム実行サイクルの最大値と最小値を求めることができる。
【００７７】
図１９には入力ＦＩＦＯ群を構成するＦＩＦＯの段数決定処理フローが例示される。例えば、入力ファイル形式を「FIFO_DEPTH_PARAM = N」とした場合、入力ファイルを読み込み最後の数値を取得し、入力信号名テーブル、手本モデル、及び検証対象モデルを読み込み、前項に記載した処理を実施し、各入力ポートに対応する入力ＦＩＦＯの初期段数を入力ＦＩＦＯ初期段数テーブルに格納する。
【００７８】
クロック停止制御部８への通知内容に関する設定について説明する。クロック停止制御部への通知内容としては、（１）リセット解除後、ＦＩＦＯの蓄積データ量がある量まで到達するまでＦＩＦＯ後段部のクロックを停止するため、ある量まで到達した事の通知、（２）ＦＩＦＯのデータ蓄積量がある一定量以上になった事の通知、（３）ＦＩＦＯのデータ蓄積量がある一定量以下になった事の通知、がある。設定パラメータをNとし、Nを用いて、以下に記述する入力FIFO闘値設定処理にて（１）、（２）、（３）の通知を行うための値を決定する。Nの指定がない場合は、デフォルト値として例えば４を採用するものとする。またNとして４以上でかつ、出力ポートに対応するＦＩＦＯの中で最小の段数以下の整数のみ指定可能とする。違反した場合は、上記のデフォルト値を採用する。Nの値はＦＩＦＯ段数が倍の値になる度に、同様に２倍に補正されていくものとする。上記（１）のパラメータは、各入力ポートに対応するＦＩＦＯの初期段数をDInit(port)とすると、DInit(port)/2とされる。上記（２）のパラメータは各入力ポートに対応するＦＩＦＯの動的な段数増加を考慮した段数をD(port)とすると、D(port)×(N-1)/Nとなる。上記（３）のパラメータはD(port)/Nになる。
【００７９】
尚、クロック停止制御部８への通知方法に関しては、以下の通りとする。リセット解除後に全ての入力ＦＩＦＯが（１）のパラメータ値以上となったか否かを1bit信号“入力信号名Start”で通知する。各入力ＦＩＦＯに対して（２）のパラメータ値以上となったか否かを1bit信号“入力信号名Full”で通知する。各入力ＦＩＦＯに対して（３）のパラメータ値以下となったか否かを1bit信号“入力信号名Empty”で通知する。
【００８０】
入力ＦＩＦＯの動的なサイズアップについて説明する。各入力ポートに対応して配置される入力ＦＩＦＯの段数増加に関する設定パラメータは以下の如く設定可能にされる。入力ＦＩＦＯへの書き込みポインタが当該入力ＦＩＦＯのサイズもしくはその近傍に達した場合に、無条件で倍のＦＩＦＯ段数へ増加、又は「書き込みポインタ−読み出しポインタ≧後述する入力FIFO闘値」の場合に、倍のＦＩＦＯ段数に増加の何れかが指定される。特に、後述する入力ＦＩＦＯ闘値を指定しない場合は、前者が選択されるものとする。後者の入力ＦＩＦＯ闘値として、D(port)/2〔文字列“HALF”〕、D(port)×（N-1)/N〔文字列“FULL”〕、D(port)/N〔文字列“EMPTY” 〕、任意指定正数(ただし、初期FIFO段数以下)を指定可能とする。ここで、D(port)は入力ＦＩＦＯの段数の動的な増加を考慮した段数を、NはＦＩＦＯ段数増加毎に倍になる変数を表す。
【００８１】
入力ＦＩＦＯのサイズアップ指定ファイル形式は、例えば、入力ファイル形式を「FIFO_SIZE_UP = 文字列」とし、文字列として、HALF、FULL、EMPTY、正数値、又は空を指定可能とする。当然であるが文字列FULL、EMPTYは入力ＦＩＦＯの実際のフル、エンプティーには対応しない。これに対応するのは後述する入力信号名FullAlart、入力信号名EmptyAlartである。
【００８２】
《入力ＦＩＦＯ群に関する動作仕様》
ここで入力ＦＩＦＯの動作仕様について整理して説明する。１）入力ＦＩＦＯへのプッシュは手本モデルテスト入力フェッチモデル４で、第１引数char rstが１のＦＩＦＯ関数コールが行われる度に行われる。２）入力ＦＩＦＯからのポップ（pop）は検証対象モデルテスト入力出力モデル６で、ＦＩＦＯ関数コールが行われる度に行われる。３）入力ＦＩＦＯのサイズアップは、入力ＦＩＦＯに対して最初のポップが行われるまでの期間においては入力ＦＩＦＯの書き込みポインタが入力ＦＩＦＯの「段数−１」に到達すると、サイズを倍に増加させる。入力ＦＩＦＯに対してポップ動作が一旦行われた以降の期間においては、闘値設定なしの場合には入力ＦＩＦＯの書き込みポインタが入力ＦＩＦＯの「段数−１」に到達すると、サイズを倍に増加させる、闘値設定ありの場合には「書き込みポインタ−読み出しポインタ≧闘値」の場合に倍の段数に増加させる。４）入力信号名Startは、入力ＦＩＦＯ内のデータ数が、初期設定段数を半分を超えて以降常にアサートされ、半分を超えるまではディアサートとされる。５）入力信号名Fulは、入力ＦＩＦＯ内のデータ蓄積段数が前記D(port)×(N-1)/Nで定めた段数に対応する値以上となったときアサートされ、それ以外はディアサートされる。６）入力信号名FullAlartは入力FIFOがフルとなったときアサートされ、それ以外はディアサートにされる。７）入力信号名Emptyは入力ＦＩＦＯ内のデータ蓄積段数が前記D(port) /Nで定めた段数に対応する値以下となったときアサートされ、それ以外はディアサートとされる。８）入力信号名EmptyAlartは入力ＦＩＦＯがエンプティーとなったときアサートされ、それ以外はディアサートとされる。
【００８３】
《入力ＦＩＦＯ群に関するＦＩＦＯ記述生成》
図２０には入力ＦＩＦＯの記述を生成する処理が例示される。入力ＦＩＦＯの記述を生成するには、先ずＦＩＦＯサイズアップ指定ファイルを読み込み、サイズアップの闘値設定なしの場合の雛形記述か、サイズアップの闘値設定ありの場合の雛形記述を読み込み、入力信号テーブル、入力ＦＩＦＯ初期段数テーブルを読み込み、入力信号名毎に、雛形記述内のキーワードを適時置換し、入力信号名毎にファイル名“fifo_入力信号名.cpp”なるファイルを生成する。
【００８４】
例えばサイズアップの闘値設定なしの場合、ＦＩＦＯサイズアップ指定ファイルが読み込まれ、＝以降に何も記載されていないときは以下の処理が行なわれる。先ず、ＦＩＦＯ関数雛形記述、入力信号テーブル、入力ＦＩＦＯ初期段数テーブルが読み込まれ、入力信号名毎に、雛形記述で下記の置換が実施され、fifo_入力信号名.cppファイルが生成される。「_手本モデルのファイル名」は、入力信号テーブルに格納されたファイル名に置換され、「入力信号の型」は入力信号テーブル内の入力信号に対応付けられた型名に置換される。「FIFO段数決定手段で入力された値N」は入力FIFO段数指定ファイルに指定された正数をＦＩＦＯ段数決定処理で更新した値に置換される。「FIFO段数決定処理で求めた正数値」は入力ＦＩＦＯ初期段数テーブル内の入力信号名に対応付けられた正数に置換される。「入力信号名」は現在対象としている入力信号名に置換される。図２１及び図２２にはサイズアップの闘値設定なしの場合に生成された入力ＦＩＦＯの記述が例示される。
【００８５】
サイズアップの闘値設定ありの場合、ＦＩＦＯサイズアップ指定ファイルが読み込まれ、＝以降にHALF、EMPTY、FULL、正数の何れかが記載されているとき以下の処理が行なわれる。先ず、ＦＩＦＯ関数雛形記述、入力信号テーブル、入力ＦＩＦＯ初期段数テーブルが読み込まれ、入力信号名毎に、雛形記述で下記の置換が実施され、fifo_入力信号名.cppファイルが生成される。「_手本モデルのファイル名」は入力信号テーブルに格納されたファイル名に置換される。「入力信号の型」は入力信号テーブル内の入力信号に対応付けられた型名に置換される。「ＦＩＦＯ段数決定処理で入力された値N」は入力FIFO段数指定ファイルに指定された正数をＦＩＦＯ段数決定処理で更新した値に置換される。「ＦＩＦＯ段数決定処理で求めた正数値」は入力ＦＩＦＯ初期段数テーブル内の入力信号名に対応付けられた正数に置換される。「ＦＩＦＯ段数増加で指定した闘値または闘値変数」は指定がHALFならhalf_thに置換され、指定がEMPTYならempty_thに置換され、指定がFULLならfull_thに置換され、指定が正数なら正数に置換される。「入力信号名」は現在対象としている入力信号名に置換される。図２３乃至図２５にはサイズアップの闘値設定ありの場合に生成された入力ＦＩＦＯの記述が例示される。
【００８６】
《出力ＦＩＦＯペアに関するパラメータ設定及び記述生成》
次に、出力ＦＩＦＯペア７に関してパラメータ設定及びＦＩＦＯ記述生成処理を説明する。出力ＦＩＦＯペア７を構成する出力ＦＩＦＯ段数については以下の基本的な考え方を採用する。各出力ポートに対応して配置される出力ＦＩＦＯの段数設定パラメータをNとする。このパラメータ値に基づいて、下記に記載する出力ＦＩＦＯ段数決定処理にて個々の出力ＦＩＦＯの段数決定を実施する。指定なき場合は、デフォルト値として８段を採用するものとする。パラメータNは前記デフォルト値以上の整数値のみ指定可能とする。尚、任意に指定可能としても良い。
【００８７】
出力ＦＩＦＯ段数決定では、手本となるサイクル精度モデルでの各出力ポートのアクセス間隔サイクルの最大値OrigOutMax(port)と最小値OrigOutMin(port)、並ぶに比較対象となる動作モデルでの各出力ポートのアクセス間隔サイクルの最大値TgtOutMas(port)と最小値TgtOutMin(port)を取得し、OrigOutMin(port)≧TgtOutMin(port)のときには、手本モデルの当該出力ポートへの接続するＦＩＦＯ段数をNとし、比較対象である検証対象モデルの当該出力ポートへの接続する出力ＦＩＦＯ段数をceil(OrigOutMax(port)/TgtOutMin(port))×Nとする。一方、OrigOutMin(port)＜TgtOutMin(port)のときには、手本モデルの当該出力ポートへの接続する出力ＦＩＦＯＩ段数をceil(TgtOutMax(port)/OrigOutMin(port))×Nとし、比較対象である検証対象モデルの当該出力ポートへ接続する出力ＦＩＦＯ段数をNとする。これによって各出力ポートに対応して配置される出力ＦＩＦＯの段数が決定される。
【００８８】
尚、アクセス間隔サイクルの最大値と最小値の取得では、文献「Yau-Tsun Steven Li and Sharad Malik, "Performance analysis of embedded software using implicit path enumeration," IEEE Trans. on CAD of Integrated Circuits and Systems 16(12), pp.1477-1487, 1997」でのILPによる手法を応用し、文献内でのベーシックブロックの処理時間を、モデルに記載されている実行サイクル数として、対象出力ポート間のプログラム実行サイクルの最大値と最小値を求めることができる。
【００８９】
図２６は出力ＦＩＦＯペア７を構成する出力ＦＩＦＯ段数を決定する処理フローが示される。例えば、入力ファイル形式をFIFO_DEPTH_PARAM = Nとした場合、入力ファイルを読み込み最後の数値を取得し、出力信号名テーブル、手本モデル１、及び検証対象モデル２を読み込み、前項に記載した処理を実施し、各出力ポートに対応する出力ＦＩＦＯの初期段数を出力ＦＩＦＯ初期段数テーブルに格納する。
【００９０】
出力ＦＩＦＯペア７のサイズアップについて説明する。各出力ポートに対応して配置される出力ＦＩＦＯの段数増加に関するパラメータは以下の如く設定可能にされる。出力ＦＩＦＯへの書き込みポインタが当該ＦＩＦＯのサイズ又はその近傍に達した場合に、無条件で倍の段数へ増加する設定、又は「書き込みポインタ−読み出しポインタ≧後述する出力ＦＩＦＯ闘値」の場合に倍の段数に増加する設定のいずれかが選択される。特に、後述する出力ＦＩＦＯ闘値を指定しない場合は、前者が選択されるものとする。 
前記出力ＦＩＦＯ閾値として、D(port)/2〔文字列“HALF”〕、D(port)*（N-1)/N〔文字列“FULL”〕、D(port)/N〔文字列“EMPTY”〕、又は任意指定正数(ただし、初期ＦＩＦＯ段数以下)が指定可能にされる。ここで、D(port)は出力ＦＩＦＯの段数の動的な増加を考慮した段数を、Nは、段数増加毎に倍になる変数を表す。
【００９１】
出力ＦＩＦＯのサイズアップ指定ファイル形式は例えば、入力ファイル形式を「FIFO_SIZE_UP = 文字列」とし、文字列として、HALF、FULL、EMPTY、正数値、又は空が指定可能とされる。
【００９２】
《出力ＦＩＦＯペアに関する動作仕様》
ここで出力ＦＩＦＯペア７の動作仕様について説明する。手本モデル１の出力ポートに接続される出力ＦＩＦＯペア７の一方の出力ＦＩＦＯ（手本モデル用出力ＦＩＦＯ）については、システムリセット解除後から動作を開始する。最初のサイクルでは接続された出力ポートからの信号を受け取り内部ＦＩＦＯにデータのプッシュを行い、クロックカウントを内部のクロック値格納ＦＩＦＯへプッシュする。それ以降は、毎サイクルクロックをカウントアップさせつつ、出力ポートの値が変化したときのみ信号を受け取り内部ＦＩＦＯにデータのプッシュ（Push）を実施し、クロックカウントを内部のクロック値格納ＦＩＦＯへプッシュする。内部ＦＩＦＯがエンプティーの場合、出力信号“Orig出力信号名Empty”を１とし、空でない場合は０とする。外部からの入力信号“Orig出力信号名Read”が１のときのみ、内部ＦＩＦＯからデータをポップし、出力信号である“Orig出力信号名”を介してデータ出力を行い、内部のクロック値格納ＦＩＦＯからクロックカウント値をポップし、出力信号である“Orig出力信号名Clk”を介してデータ出力を行う。内部ＦＩＦＯの書き込みポインタが「ＦＩＦＯ段数−１」に達したとき、設定に基づいて必要なら条件判定を実施した後、段数を倍増する。
【００９３】
検証対象モデルの出力ポートに接続される出力ＦＩＦＯペア７のもう一方の出力ＦＩＦＯ（検証対象モデル用出力ＦＩＦＯ）については、信号“start”が０から１に変化した後、動作を開始する。最初のサイクルでは接続された出力ポートからの信号を受け取り内部ＦＩＦＯにデータのプッシュ（Push）を行い、クロックカウントを内部のクロック値格納ＦＩＦＯへプッシュする。それ以降は、毎サイクルクロックをカウントアップさせつつ、出力ポートの値が変化したときのみ信号を受け取り内部ＦＩＦＯにデータのプッシュを実施し、クロックカウントを内部のクロック値格納ＦＩＦＯへプッシュする。内部ＦＩＦＯがエンプティーの場合、出力信号“Tgt出力信号名Empty”を１とし、空でない場合は０とする。外部からの入力信号“Tgt出力信号名Read”が１のときのみ、内部ＦＩＦＯからデータをポップし、出力信号である“Tgt出力信号名”を介してデータ出力を行い、内部のクロック値格納ＦＩＦＯからクロックカウント値をPopし、出力信号である“Tgt出力信号名Clk”を介してデータ出力を行う。内部ＦＩＦＯの書き込みポインタが「ＦＩＦＯ段数−１」に達したとき、設定に基づいて必要なら条件判定を実施した後、段数を倍増する。
【００９４】
《出力ＦＩＦＯペアに関するＦＩＦＯ記述生成》
図２７には手本モデル用出力ＦＩＦＯのヘッダファイル生成処理が示される。この処理では、手本モデル用出力ＦＩＦＯのヘッダファイル雛形記述と出力信号テーブルが読み込まれ、出力信号名毎に、雛形記述内のキーワードを適時置換し、入力信号名毎にファイル名“OrigFifo出力信号名.h”なるファイルが生成される。図２８には手本モデル用出力ＦＩＦＯのヘッダファイルの雛形記述が例示される。
【００９５】
図２９には手本モデル用出力ＦＩＦＯの動作記述ファイルを生成する処理フローが例示される。この処理では、ＦＩＦＯサイズアップ指定ファイルが読み込まれ、サイズアップの闘値設定なしの場合又はサイズアップの闘値設定ありの場合の手本モデル用出力ＦＩＦＯの雛形記述が読み込まれ、出力信号テーブル、出力ＦＩＦＯ初期段数テーブルが読み込まれ、入力信号名毎に、雛形記述内のキーワードが適時置換されて、入力信号名毎にファイル名“OrigFifo出力信号名.cpp”なるファイルが生成される。図３０乃至図３２には手本モデル用出力ＦＩＦＯの無条件サイズアップを行う動作記述の雛形記述が例示される。図３３乃至図３５には手本モデル用出力ＦＩＦＯの条件付きサイズアップを行う動作記述の雛形記述が例示される。
【００９６】
《検証対象用ＦＩＦＯペア群に関するＦＩＦＯ記述生成》
図３６には検証対象モデル用出力ＦＩＦＯのヘッダファイル生成処理が示される。この処理では、検証用モデル用出力ＦＩＦＯのヘッダファイル雛形記述と出力信号テーブルが読み込まれ、出力信号名毎に、雛形記述内のキーワードが適時置換されて、入力信号名毎にファイル名“TgtFifo出力信号名.h”なるファイルが生成される。図３７には検証対象モデル用出力ＦＩＦＯのヘッダファイルの雛形記述が例示される。
【００９７】
図３８には検証対象モデル用出力ＦＩＦＯの動作記述ファイルを生成する処理フローが例示される。この処理では、ＦＩＦＯサイズアップ指定ファイルが読み込まれ、サイズアップの闘値設定なしの場合又はサイズアップの闘値設定ありの場合の検証対象モデル用出力ＦＩＦＯの雛形記述が読み込まれ、出力信号テーブル、出力ＦＩＦＯ初期段数テーブルが読み込まれ、入力信号名毎に、雛形記述内のキーワードが適時置換されて、入力信号名毎にファイル名“TgtFifo出力信号名.cpp”なるファイルが生成される。図３９乃至図４１には検証対象モデル用出力ＦＩＦＯの無条件サイズアップを行う動作記述の雛形記述が例示される。図４２乃至図４４には検証対象モデル用出力ＦＩＦＯの条件付きサイズアップを行う動作記述の雛形記述が例示される。
【００９８】
《一致判定モデルの生成処理》
出力ＦＩＦＯペア７の出力信号値に対する一致判定モデル９の動作仕様について説明する。同一の出力信号名を持つ手本モデル用出力ＦＩＦＯと検証対象モデル用出力ＦＩＦＯから「Orig出力信号名Empty」と「Tgt出力信号名Empty」の信号を入力として受け、双方が０ならば、「出力信号Orig出力信号名Read」とTgt出力信号名Read」の信号を１にアサートし、そうでなければ、この２つの出力信号を０にディアサートする。また、「Orig出力信号名」と「Tgt出力信号名」の信号を入力として受け、双方の値が一致していたなら、出力信号「Compare出力信号名」を１にアサートし、そうでなければ、この出力信号を０にディアサートする。
【００９９】
図４５には出力ＦＩＦＯペア７の出力信号値の一致判定モデル９のヘッダファイルを生成する処理フローが例示される。この処理では、出力ＦＩＦＯペア７の出力信号値の一致判定モデル９のヘッダファイル雛形記述と出力信号テーブルが読み込まれ、出力信号名毎に、雛形記述内のキーワードが適時置換されて、入力信号名毎にファイル名 “Comp出力信号名.h”なるファイルが生成される。図４６には出力ＦＩＦＯペア７の出力信号値の一致判定モデル９に関するヘッダファイルの雛形記述が例示される。
【０１００】
図４７には出力ＦＩＦＯペア７の出力信号値一致に係る判定モデル９の動作記述を生成する処理フローが例示される。この処理では、出力ＦＩＦＯペア７の出力信号値一致に係る判定モデル９の動作モデル雛形記述と出力信号テーブルが読み込まれ、出力信号名毎に、雛形記述内のキーワードが適時置換されて、入力信号名毎にファイル名“Comp出力信号名.cpp”なるファイルが生成される。図４８には出力ＦＩＦＯペア７の出力信号値一致判定モデル９に係る動作記述の雛形記述が例示される。特に、出力ポートが構造体など特殊なデータ型である場合は、出力ＦＩＦＯペアの出力信号値一致判定モデルのヘッダファイルの雛形記述に、ＯＳ（オペレーティング・システム）の適切なオーバーロディ−ング記述を追加し、出力ＦＩＦＯペアの出力信号値一致判定モデルの動作記述の雛形記述を適時修正すれば、生成アルゴリズムを変更するなく対応可能である。
【０１０１】
《クロック停止制御部の生成処理》
図４９にはクロック停止制御部８の入力信号と出力信号が示される。クロック停止制御部８の動作仕様は以下の通りである。１）検証対象モデル出力ＦＩＦＯへのstart信号出力機能を有する。全ての入力信号名Startの論理積の結果を内部Bool変数tmp_startへ代入し、tmp_startを出力信号startへ代入する。即ち、全ての入力ＦＩＦＯが初期段数に対して闘値以上の回数ポップされた事をstart=1で示す。２）テストベンチ、手本モデル、手本モデルテスト入力フェッチモデルへのクロックPreClkの供給機能を持つ。全ての入力信号名FullAlartの論理和の結果を内部Bool変数full_alartへ代入し、全ての入力信号名Fullの否定の論理和の結果を内部Bool変数fullへ代入し、(ful&&~full_alart||~tmp_start)&&システムクロックをPreClkへ代入し、full&&~full_alart||~tmp_startをsc_out変数write_condへ代入する。即ち、全ての入力ＦＩＦＯがある闘値以上データを保有しているか、ある入力ＦＩＦＯがフルの場合クロック停止、それ以外はクロック供給を行う。３）検証対象モデルテスト入力出力モデルへのクロックPostClk供給機能を有する。全ての入力信号名EmptyAlartの論理和の結果を内部Bool変数empty_alartへ代入し、全ての入力信号名Emptyの否定の論理和の結果を内部Bool変数emptyへ代入し、empty&&~empty_alart&&tmp_startを内部Bool変数tmp_read_condへ代入し、tmp_read_cond&&システムクロックをPostClkへ代入する。即ち、全ての入力ＦＩＦＯがある闘値以下のデータしか保有していないか、ある入力ＦＩＦＯがエンプティーの場合クロック停止、それ以外はクロック供給を行う。４）検証対象モデルへのクロックPostClk2の供給を行う。tmp_read_condをbool型のsc_out変数read_condを介して１ビットFlip-Flopへ入力し、その出力であるbool型のsc_signal変数read_cond2を用いて、read_cond2&&システムクロックをPostClkへ代入する。即ち、PostClkより１クロック遅れてクロック停止・供給を実施する。
【０１０２】
クロック停止制御部８のヘッダファイル生成は以下のようにして行われる。すなわち、出力信号テーブルが読み込まれ、システムクロック、システムリセット、及び各信号名の後ろに、Start、Empty、EmptyAlart、Full、FullAlartを付加したbool型の入力信号を定義し、モジュール名をControl、SC_METHODへ登録する動作スレッドをctrlとし、Flip-Flopを実現するためのSC_CTHREADへ登録する動作スレッドをFFとし、Bool型の出力信号宣言を記述したヘッダファイルControl.hを生成する。ここで、SC_METHODプロセスへのセンシティビティ・リストへは、全ての入力信号、及びシステムクロックが登録される。このように出力信号テーブルから定型的な処理でヘッダファイルの生成が可能であるため、自動生成ができる事は自明であり、その詳細な説明は省略する。クロック停止制御部の動作記述ファイルの生成についても、動作仕様から出力信号テーブルを読み込んで動作記述ファイルControl.cppを自動生成することは自明であるからその詳細な説明は省略する。図５０にはクロック停止制御部のヘッダファイル記述が例示される。図５１にはクロック停止制御部８の動作記述が例示される。
【０１０３】
《全体接続処理》
コンピュータ装置を用いた上述の処理で生成されたモデルと入力モデルを整理すると以下のモジュールが得られることになる。１）手本モデル用テストベクタ生成モデル３としてのテストベンチのモジュール、２）手本モデル１のモジュール、３）検証対象モデル２のモジュール、４）手本モデルテスト入力フェッチモデル４、入力ＦＩＦＯ群５、検証対象モデルテスト入力出力モデル６からなるモジュール、５）出力ＦＩＦＯペア７を構成する手本モデル出力ＦＩＦＯのモジュール群、６）出力ＦＩＦＯペア７を構成する検証対象モデル出力ＦＩＦＯモジュール群、７）クロック停止制御部８のモジュール、８）出力一致判定モデル９のモジュールである。ここで、クロック停止制御部８のモジュールの接続関係に関しては、既にクロック停止処理の説明部で説明した。基本的には、入力信号名が対応するもの同士、出力信号名が対応するもの同士を接続すればよいが、手本モデル１と検証対象モデル２は同じ出力信号を有するため、そのままでは接続できない。従って、手本モデル１のモジュールと手本モデル出力ＦＩＦＯのモジュール群と、検証対象モデル２のモジュールと検証対象モデル出力ＦＩＦＯモジュール群とをそれぞれ別の階層として纏め、トップモジュールを構成し残りのモジュールとの接続を行えばよい。信号名、モジュール名全てが与えられているため、前記に導入した階層を表すモジュールを作成し、その中で信号宣言と含まれモジュールのインスタンス宣言記述を構成してポート接続を実施し、更にトップモジュール内で信号宣言を行い階層で作成したモジュールと残りの各モジュールのインスタンス化を実施し、ポート接続を行えばよい。システムＣ（SystemC）の書式に従って、信号名、モジュール名、接続関係、階層構造が全て与えられているため全体接続記述の自動生成が可能な事は自明であり、その詳細な説明は省略する。
【０１０４】
以上説明した開発環境の生成方法によれば以下の作用効果を得ることができる。
【０１０５】
従来の設計手法では、合成結果のRTLやモデルを解析した上で、テストベンチの修正箇所を同定し、テストベンチを人手で修正する事で、合成結果RTLの検証環境を構築していた。多くの候補RTLを生成した場合、それら全てに対して、人手でのテストベンチ修正やテストベンチ構築が必要となり実際には、多数の候補RTLを生成しての最適RTLの決定の実現は困難であった。本発明の上記手法では、テストベンチの流用が自動化されているため、多数の候補RTLを生成しての最適解の探索が可能となる。
【０１０６】
動作合成を用いたIP（Intellectual Property）開発での検証環境構築の為の工数を削減することができる。また、動作合成を用いての同一モデルからの多種多様なRTL生成での生成RTLの検証自動化を行うことができる。また、SoC（System on Chip）やマイコンなど全製品での設計効率を向上させることができる。
【０１０７】
上記開発環境の生成技術は前記特許文献１乃至３に対して以下の優位性がある。
【０１０８】
特許文献１では、信号値遷移の波形順序が一致している場合のみ等価と判断しているため、例えばRTL実装にてデータ依存関係の無いポート信号の発生順を変更して実装した場合、仮にRTL実装がシステムレベル設計言語で記述された回路記述の機能を維持していたとしても不一致であると判断する。本発明ではそのような場合であっても等価と判断可能である。検証対象モデルに対しても同一のテストベンチを用いた等価性判定手法を実現しているからである。
【０１０９】
特許文献２では、動作合成ツールの詳細な内部処理結果にアクセスできる事が前提であり、一般にそのような情報に、動作合成開発元以外がアクセスを行う事は極めて困難である。また、内部処理がどのような処理で構成されているかは動作合成ツールの実装に依存しており、特にパイプライン合成などの場合には、その開示技術のみを用いて直接等価性検証を実施できるとは言い難い。本発明の場合には、動作合成への入力記述の検証で用いたテストベンチを変更する事なく、パイプライン合成を含む任意の合成結果記述との等価性検証を、前記テストベンチを用いて行うことができる。
【０１１０】
特許文献３では、入力記述、出力結果RTL夫々に対してテストベンチの記述が必要となる。本発明の場合には、動作合成の入力記述の検証を目的として記述したテストベンチを、動作合成結果の出力RTLを変更することなく流用することができる。
【０１１１】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１１２】
Portがsc_in/sc_outなどのピン（Pin）レベルではなく、sc_port/sc_exportなどのTLM Portである場合は、TLM Port同士の接続を実施する事とし、RTL記述とSystemC記述の接続を行う場合は、上記に加え、市販Simulatorが必要とするRTLとSystemCのコシミュレーションのための記述を別途準備するものとする。ここで、コシミュレーションのための記述は、市販のシミュレータにより自動生成が可能である。また、コシミュレーションのための記述は、ポート情報さえあれば、ポートに関連する記述以外が一定の書式で与えられるため、雛形記述を準備し、ポート情報を取得し両者を組み合わせる事で、自動生成が可能である。
【０１１３】
また、本発明は、システムの一部を置き換えて検証を行う場合への適用が考えられる。例えば図５２に例示されるように、置き換え対象モデルの前段に置き換え前のモデルのモデルスライス、入力ＦＩＦＯペア、置き換え後のモデルの修正モデル、を配置し、後段に、入力ＦＩＦＯペアと同じ構成のＦＩＦＯ群、及び後段接続モデルの修正モデルを配置し、クロック停止制御モデルを配置した後、全体接続すれば良い。図では後段・前段モデルが完全に分離されている形式の図が示されているが、そのような制約は不要である。例えば前段モデルへの出力がある場合は、前段モデルへの入力に対して、入力ＦＩＦＯペアと前段モデルのスライスモデルを接続し、前記入力ＦＩＦＯペアへ置き換え後のモデルの出力を接続すれば良いからである。尚、クロック停止制御モデルには、必要に応じてユーザがライブラリ登録を行うものとする。図５２の例の場合、２つの入力ＦＩＦＯペアからの信号入力を受けて、夫々へのＦＩＦＯ増加指示信号の出力と、PreEnable、PostEnable信号の出力を行うモデルとなる。
【図面の簡単な説明】
【０１１４】
【図１】図１は本発明のテスト環境生成方法によって生成された仮想的なテスト環境の構成を例示する説明図である。
【図２】図２はテスト環境生成処理の概要を示すフローチャートである。
【図３】図３は評価環境生成プログラムの生成フローを全体的に例示するフローチャートである。
【図４】図４はモデル修正処理（Ｓ１１）の詳細を示すフローチャートである。
【図５】図５は手本モデルに対するモジュール名・ポート宣言記述部の修正処理（Ｓ１１１）の詳細を例示するフローチャートである。
【図６】図６は検証対象モデルに対するモジュール名・ポート宣言記述部の修正処理（Ｓ１１１）の詳細を例示するフローチャートである。
【図７】図７は手本モデルのモジュール名・ポート記述部を図５の手順で変換した結果を例示する説明図である。
【図８】図８は検証対象モデルのモジュール名・ポート記述部と図６の手順で変換した結果を例示する説明図である。
【図９】図９は動作記述を修正するための手本モデル及び機能検証モデルの双方に対する共通処理を概念的に示す説明図である。
【図１０】図１０は図９に示す変換処理を含め、手本モデルから手本モデルテスト入力フェッチモデルの動作記述への変換を行なう処理を例示するフローチャートである。
【図１１】関数内ローカル変数の型を定めるときに用いる対応テーブルを例示する説明図である。
【図１２】図１２は手本モデルに対する動作記述部の修正処理の具体例を示すフローチャートである。
【図１３】図1３は検証対象モデルに対する動作記述部の修正処理の具体例を示するフローチャートである。
【図１４】図１４は手本モデルの動作記述部と図１２の処理による変換結果を例示する説明図である。
【図１５】図１５は検証対象モデルの動作記述部と図１３の処理による変換結果がを例示する説明図である。
【図１６】図１６はモジュール名・ポート宣言記述部の後続修正処理（Ｓ１１３）の一例を示すフローチャートである。
【図１７】図１７は図１６の修正処理による変換結果を例示する説明図である。
【図１８】図１８はＦＩＦＯパラメータ設定及びＦＩＦＯ記述生成処理Ｓ１２の詳細を例示するフローチャートである。
【図１９】図１９は入力ＦＩＦＯ群を構成するＦＩＦＯの段数決定処理を例示するフローチャートである。
【図２０】図２０には入力ＦＩＦＯの記述を生成する処理を例示するフローチャートである。
【図２１】図２１はサイズアップの闘値設定なしの場合に生成された入力ＦＩＦＯの記述の一部を例示する説明図である。
【図２２】図２２は図２１に続く入力ＦＩＦＯの記述を例示する説明図である。
【図２３】図２３はサイズアップの闘値設定ありの場合に生成された入力ＦＩＦＯの記述の一部を例示する説明図である。
【図２４】図２４は図２３に続く入力ＦＩＦＯの記述を例示する説明図である。
【図２５】図２５は図２４に続く入力ＦＩＦＯの記述を例示する説明図である。
【図２６】図２６は出力ＦＩＦＯペア群を構成する出力ＦＩＦＯ段数を決定する処理を例示するフローチャートである。
【図２７】図２７は手本モデル用出力ＦＩＦＯのヘッダファイル生成処理を例示するフローチャートである。
【図２８】図２８は手本モデル用出力ＦＩＦＯのヘッダファイルの雛形記述を例示する説明図である。
【図２９】図２９は手本モデル用出力ＦＩＦＯの動作記述ファイルを生成する処理を例示するフローチャートである。
【図３０】図３０は手本モデル用出力ＦＩＦＯの無条件サイズアップを行う動作記述の雛形記述が例示される説明図である。
【図３１】図３１は図３０に続く雛形記述を例示する説明図である。
【図３２】図３２は図３１に続く雛形記述を例示する説明図である。
【図３３】図３３は手本モデル用出力ＦＩＦＯの条件付きサイズアップを行う動作記述の雛形記述が例示される説明図である。
【図３４】図３４は図３３に続く雛形記述を例示する説明図である。
【図３５】図３５は図３４に続く雛形記述を例示する説明図である。
【図３６】図３６は検証対象モデル用出力ＦＩＦＯのヘッダファイル生成処理を例示するフローチャートである。
【図３７】図３７は検証対象モデル用出力ＦＩＦＯのヘッダファイルの雛形記述を例示する説明図である。
【図３８】図３８は検証対象モデル用出力ＦＩＦＯの動作記述ファイルを生成する処理が例示されるフローチャートである。
【図３９】図３９は検証対象モデル用出力ＦＩＦＯの無条件サイズアップを行う動作記述の雛形記述が例示される説明図である。
【図４０】図４０は図３９に続く雛形記述を例示する説明図である。
【図４１】図４１は図４０に続く雛形記述を例示する説明図である。
【図４２】図４２乃至図４４は検証対象モデル用出力ＦＩＦＯの条件付きサイズアップを行う動作記述の雛形記述が例示される説明図である。
【図４３】図４３は図４２に続く雛形記述を例示する説明図である。
【図４４】図４４は図４３に続く雛形記述を例示する説明図である。
【図４５】図４５は出力ＦＩＦＯペアの出力信号値の一致判定モデルのヘッダファイルを生成する処理が例示されるフローチャートである。
【図４６】図４６は出力ＦＩＦＯペアの出力信号値の一致判定モデルに関するヘッダファイルの雛形記述が例示される説明図である。
【図４７】図４７は出力ＦＩＦＯペアの出力信号値一致に係る判定モデルの動作記述を生成する処理が例示されるフローチャートである。
【図４８】図４８は出力ＦＩＦＯペアの出力信号値一致判定モデルに係る動作記述の雛形記述が例示される説明図である。
【図４９】図４９はクロック停止制御部の入力信号と出力信号を示す説明図である。
【図５０】図５０はクロック停止制御部のヘッダファイル記述を例示する説明図である。
【図５１】図５１はクロック停止制御部の動作記述を例示する説明図である。
【図５２】図５２はシステムの一部を置き換えて検証を行う場合に本発明を適用した場合における仮想的なテスト環境の構成を例示する説明図である。
【符号の説明】
【０１１５】
１  手本モデル
２  検証対象モデル
３  手本モデル用のテストベクタ生成モデル
４  手本モデルテスト入力フェッチモデル
５  入力ＦＩＦＯ群
６  検証対象モデルテスト入力出力モデル
７  出力ＦＩＦＯペア群
８  クロック停止制御部
９  一致判定モデル
１１  プログラム修正装置
１２  パラメータ設定ファイル
１３  全体統合装置
１５  評価環境生成プログラム
【図１】
0005065113.tif 000002
【図２】
0005065113.tif 000003
【図３】
0005065113.tif 000004
【図４】
0005065113.tif 000005
【図５】
0005065113.tif 000006
【図６】
0005065113.tif 000007
【図７】
0005065113.tif 000008
【図８】
0005065113.tif 000009
【図９】
0005065113.tif 000010
【図１０】
0005065113.tif 000011
【図１１】
0005065113.tif 000012
【図１２】
0005065113.tif 000013
【図１３】
0005065113.tif 000014
【図１４】
0005065113.tif 000015
【図１５】
0005065113.tif 000016
【図１６】
0005065113.tif 000017
【図１７】
0005065113.tif 000018
【図１８】
0005065113.tif 000019
【図１９】
0005065113.tif 000020
【図２０】
0005065113.tif 000021
【図２１】
0005065113.tif 000022
【図２２】
0005065113.tif 000023
【図２３】
0005065113.tif 000024
【図２４】
0005065113.tif 000025
【図２５】
0005065113.tif 000026
【図２６】
0005065113.tif 000027
【図２７】
0005065113.tif 000028
【図２８】
0005065113.tif 000029
【図２９】
0005065113.tif 000030
【図３０】
0005065113.tif 000031
【図３１】
0005065113.tif 000032
【図３２】
0005065113.tif 000033
【図３３】
0005065113.tif 000034
【図３４】
0005065113.tif 000035
【図３５】
0005065113.tif 000036
【図３６】
0005065113.tif 000037
【図３７】
0005065113.tif 000038
【図３８】
0005065113.tif 000039
【図３９】
0005065113.tif 000040
【図４０】
0005065113.tif 000041
【図４１】
0005065113.tif 000042
【図４２】
0005065113.tif 000043
【図４３】
0005065113.tif 000044
【図４４】
0005065113.tif 000045
【図４５】
0005065113.tif 000046
【図４６】
0005065113.tif 000047
【図４７】
0005065113.tif 000048
【図４８】
0005065113.tif 000049
【図４９】
0005065113.tif 000050
【図５０】
0005065113.tif 000051
【図５１】
0005065113.tif 000052
【図５２】
0005065113.tif 000053