(57)【特許請求の範囲】
【請求項１】
サイクル動作を行う設計対象回路が実装されるプログラマブル回路と、時間制約のない動作記述として作成されたプログラムを実行するコンピュータとを具備するシミュレーション装置であって、
前記プログラマブル回路は、
前記コンピュータ及び前記設計対象回路間のデータ転送をトランザクション単位で行うデータ転送回路と、
前記設計対象回路の動作が仕様を満たしているかを検証し、前記設計対象回路の動作が前記仕様を満たしていないときにエラー検出として通知する検証回路と、
前記エラーの検出が通知された場合に前記設計対象回路の動作を一時的に停止させて、前記検証回路による検証の結果を前記コンピュータに転送する検証結果転送回路
とを備えることを特徴とするシミュレーション装置。
【請求項２】
前記検証結果転送回路は、複数の検証回路が前記エラーを同時に検出したときに、各検証回路による検証の結果をシーケンシャルに読み出すことを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記検証回路及び前記検証結果転送回路はそれぞれ複数設けられ、前記検証回路及び前記検証結果転送回路のそれぞれの個数が等しいことを特徴とする請求項１に記載のシミュレーション装置。
【請求項４】
前記検証結果転送回路は、前記エラーの検出が通知されてから一定サイクル期間経過後に前記設計対象回路の動作を一時的に停止させることを特徴とする請求項１に記載のシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はトランザクションレベルの協調シミュレーションに使用されるシミュレーション装置及びシミュレーション方法に関する。
【背景技術】
【０００２】
大規模化・複雑化するシステムＬＳＩ（システム・オン・チップ（ＳｏＣ））の設計において、シミュレーションに要する時間や労力が増大している。また、検証の網羅性等を改善するために、検証の高速化、設計上流での検証、及び実機や設計資産（ＩＰ）を接続しての検証等が必要である。一方、レジスタ・トランスファ・レベル（ＲＴＬ）のハードウェア記述言語（ＨＤＬ）等で記述された回路記述が仕様を満たしているかどうかを検証するために、回路記述等に複数のアサーションが挿入される場合がある（例えば、特許文献１参照。）。「アサーション」とは、エラーのないプログラムを作成するための手法であり、プログラム中で、ある条件が成立していなければならない箇所に検証用のコード（アサーション記述）を挿入し、条件に違反している場合はエラーを出力してプログラムの状態をチェックできるようにする。アサーションを利用する場合、ＨＤＬシミュレータによるアサーション検証がコンピュータ上で実行される。
【０００３】
更に、検証の高速化等を目的として、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）等のプログラマブル回路を用いたシミュレーションが利用される。システムＬＳＩにおいてハードウェア化する機能をＦＰＧＡに実装（ロード）し、ハードウェア化しない機能をＣ／Ｃ＋＋言語等を用いてコンピュータに実行させる。プログラマブル回路とコンピュータとを使用したハードウェア及びソフトウェアのシミュレーションは「協調シミュレーション」と呼ばれる。
【０００４】
しかしながら、上述した協調シミュレーションにおいては、プログラマブル回路に実装される設計対象回路に対し、アサーションを含めたシミュレーションを行うことができない。よって、プログラマブル回路に実装された設計対象回路の内部動作（内部信号）の観測性が低く、シミュレーション品質を十分に高めることができない。
【特許文献１】特開２００５−１０８００７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、ハードウェア及びソフトウェアの協調シミュレーションのシミュレーション品質を向上させることが可能なシミュレーション装置及びシミュレーション方法を提供する。
【課題を解決するための手段】
【０００６】
本発明の一態様によれば、サイクル動作を行う設計対象回路が実装されるプログラマブル回路と、時間制約のない動作記述として作成されたプログラムを実行するコンピュータとを具備するシミュレーション装置であって、プログラマブル回路は、（ａ）コンピュータ及び設計対象回路間のデータ転送をトランザクション単位で行うデータ転送回路と、（ｂ）設計対象回路の動作が仕様を満たしているかを検証し、設計対象回路の動作が仕様を満たしていないときにエラー検出として通知する検証回路と、（ｃ）エラーの検出が通知された場合に設計対象回路の動作を一時的に停止させて、検証回路による検証の結果をコンピュータに転送する検証結果転送回路とを備えるシミュレーション装置が提供される。
【０００７】
本発明の他の態様によれば、（ａ）サイクル動作を行う設計対象回路をプログラマブル回路に実装し、（ｂ）時間制約のない動作記述として作成されたプログラムをコンピュータ上で実行し、（ｃ）コンピュータ及び設計対象回路間のデータ転送をトランザクション単位で行い、（ｄ）設計対象回路の動作が仕様を満たしているかを検証して、設計対象回路の動作が仕様を満たしていないときにエラー検出として通知し、（ｅ）エラーの検出が通知された場合に設計対象回路の動作を一時的に停止させて、設計対象回路の動作が仕様を満たしているかの検証の結果をコンピュータに転送することを含むシミュレーション方法が提供される。
【発明の効果】
【０００８】
本発明によれば、ハードウェア及びソフトウェアの協調シミュレーションのシミュレーション品質を向上させることが可能なシミュレーション装置及びシミュレーション方法を提供できる。
【発明を実施するための最良の形態】
【０００９】
次に、図面を参照して、本発明の第１〜第３実施形態を説明する。以下の第１〜第３実施形態における図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
【００１０】
（第１実施形態）
本発明の第１実施形態に係るシミュレーション装置は、図１に示すように、サイクル動作を行う設計対象回路３ａが実装されるプログラマブル回路１ａと、時間制約のない動作記述として作成されたプログラムを実行するコンピュータ２とを具備する。ここで、「サイクル動作」とは、クロックと同期した動作を意味する。「時間制約のない」とは、クロックと非同期の動作を意味する。以下の説明においては、時間制約のない動作を「アンタイムドな動作」と呼ぶ。プログラマブル回路１ａとしては、例えばＦＰＧＡが使用できる。また、以下の説明においては、コンピュータ２が実行するプログラムとして、Ｃ言語又はＣ＋＋言語で記述されたプログラム（以下において「Ｃ／Ｃ＋＋プログラム」と略記する。）を使用する一例を説明する。Ｃ／Ｃ＋＋プログラムは、例えば、設計対象回路３ａと協調動作するソフトウェアであり、設計対象回路３ａに対するデータ入力及びデータ出力を行うものである。
【００１１】
プログラマブル回路１ａには、コンピュータ２及び設計対象回路３ａ間のデータ転送をトランザクション単位で行う第１及び第２データ転送回路４１ａ及び４１ｂと、設計対象回路３ａ内に実装され、設計対象回路３ａの内部動作が仕様を満たしているかを示すアサーションを検証する第１検証回路３１＿１と、設計対象回路３ａの動作が仕様を満たしているかを検証し、設計対象回路３ａの動作が仕様を満たしていないときにエラー検出として通知する第１検証回路３１＿１と、エラーの検出が通知された場合に設計対象回路３ａの動作を一時的に停止させて、第１検証回路３１＿１による検証の結果をコンピュータ２に転送する第１検証結果転送回路４２ａが実装される。プログラマブル回路１ａ内の各回路は、ＨＤＬ記述等を論理合成等して得られる回路データに応じて構成される。尚、「トランザクション」とは、関連する複数の処理を１つの処理単位としてまとめたものを意味する。
【００１２】
また、第１検証結果転送回路４２ａからコンピュータ２に転送される検証結果の情報としては、例えば、エラー検出の有無、エラーが検出された際の検証対象信号の値、及びシミュレーション開始からエラー検出までのサイクル数の情報等が挙げられる。
【００１３】
第１データ転送回路４１ａは設計対象回路３ａの入力端子（図示省略）に対するデータ入力時に用いられ、第２データ転送回路４１ｂは設計対象回路の出力端子（図示省略）からのデータ出力時に用いられる。第１及び第２データ転送回路４１ａ及び４１ｂは、サイクル動作を行うハードウェア（設計対象回路３ａ）と、アンタイムドな動作を行うソフトウェア（Ｃ／Ｃ＋＋プログラム）との橋渡しを行う。
【００１４】
しがって、ハードウェア（設計対象回路３ａ）とソフトウェア（Ｃ／Ｃ＋＋プログラム）との間のデータ転送がトランザクション単位、即ち複数クロック単位で実現できる。即ち、プログラマブル回路１ａに実装された設計対象回路３ａが数十〜数百サイクル程度連続して動作する毎に、コンピュータ２及び設計対象回路３ａ間でデータの入出力が行われる。この結果、設計対象回路３ａが１サイクル動作する毎にクロックが停止してデータの入出力を行う手法と比較して、協調シミュレーションを高速に実行でき、シミュレーションに要する時間を短縮できる。
【００１５】
また、図１に示す例においては、第１検証結果転送回路４２ａに加えて、第２検証結果転送回路４２ｂがプログラマブル回路１ａに実装されている。尚、データ転送回路及び検証結果転送回路のそれぞれの個数は２個に限らず、３個以上を使用しても良い。或いは、第１データ転送回路４１ａ、第２データ転送回路４１ｂ、第１検証結果転送回路４２ａ、及び第２検証結果転送回路４２ｂを１つのステートマシンとして実装し、ステートマシンに第１データ転送回路４１ａ、第２データ転送回路４１ｂ、第１検証結果転送回路４２ａ、及び第２検証結果転送回路４２ｂの各機能を実現をさせても構わない。
【００１６】
更に、設計対象回路３ａの内部には、第１検証結果転送回路４２ａに検証結果を通知する複数の（第１〜第ｎ）検証回路３１＿１〜３１＿ｎと、第２検証結果転送回路４２ｂに検証の結果を通知する複数の（第１〜第ｋ）検証回路３２＿１〜３２＿ｋが実装される（ｎ，ｋ；２以上の整数）。
【００１７】
また、プログラマブル回路１ａは、コンピュータ２に接続される入出力（Ｉ／Ｏ）ポート５を備える。Ｉ／Ｏポート５としては、例えば、トランザクションレベルの検証を行うためのインターフェース規格であるＳＣＥ−ＭＩ（Ｓｔａｎｄａｒｄ Ｃｏ−Ｅｍｕｌａｔｉｏｎ Ｍｏｄｅｌｉｎｇ Ｉｎｔｅｒｆａｃｅ）規格に準拠したＩ／Ｏポートが使用できる。Ｉ／Ｏポート５及びコンピュータ２間は、例えばＰＣＩバス等を介して接続される。
【００１８】
更に、第１〜第ｎ検証回路３１＿１〜３１＿ｎのそれぞれは、図２及び図３に示すようなアサーション記述に基づいて構成される。即ち、第１〜第ｎ検証回路３１＿１〜３１＿ｎ及び第１〜第ｋ検証回路３２＿１〜３２＿ｋの総個数は、ＨＤＬ記述中に挿入されるアサーション記述の数に対応している。以下においては、図１に示す第１検証回路３１＿１が、図２及び図３に示すアサーション記述に相当する構成を有している場合について説明する。
【００１９】
図２は、ＨＤＬ記述によるアサーションプロパティ記述の一例を示している。図２に示すように、設計者が定義した仕様を“ｓｅｑｕｅｎｃｅ”として表現することで、複数サイクルに渡る動作が検証される。図２に示す例においては、“ｒｅｑｕｅｓｔ”信号が論理値“１”になった後、１〜３サイクル後に“ｇｒａｎｔ”信号が発生し、その次のサイクルで“ｒｅｑｕｅｓｔ”信号がデアサートされ、更にその次のサイクルで“ｇｒａｎｔ”信号がデアサートされなければならないという仕様が記述されている。
【００２０】
図３は、図２のアサーションプロパティをチェックするためにＨＤＬ記述中に挿入されるアサーション指定の一例である。図３においては、設計対象回路３ａの内部動作状態が“ＦＥＴＣH”になったときに、図２のアサーションプロパティをチェックするという一例を示している。
【００２１】
通常、図２及び図３に示すようなアサーション記述を含むＨＤＬ記述は、ＨＤＬシミュレータ等によりコンピュータ上で実行されてアサーション検証が行われる。これに対して、図１に示すようにプログラマブル回路１ａに、アサーション記述に対応する複数の検証回路３１＿１〜３１＿ｎ，３２＿１〜３２＿ｋを実装することにより、実際にハードウェアとして構成した場合の設計対象回路３ａの内部動作（内部信号）を高精度に検証することが可能となる。
【００２２】
次に、図４を用いて、図１に示すプログラマブル回路１ａの動作概要を、Ｉ／Ｏポート５、第１検証結果転送回路４２ａ、及び第１検証回路３１＿１を例にして説明する。Ｉ／Ｏポート５は、図１に示すコンピュータ２から供給される基準クロックＣＬＫ１を第１検証結果転送回路４２ａ、第１検証回路３１＿１、及び動作クロック生成回路６に伝達する。即ち、図１に示す第１及び第２データ転送回路４１ａ及び４１ｂと、第１及び第２検証結果転送回路４２ａ及び４２ａとは、基準クロックＣＬＫ１に同期して動作する。
【００２３】
動作クロック生成回路６は、基準クロックＣＬＫ１に基づいて動作クロックＣＬＫ２を生成する。設計対象回路３ａは、動作クロックＣＬＫ２に同期して動作する。第１検証回路３１＿１は、エラー検出を通知するまでは動作クロックＣＬＫ２に同期して動作するが、エラー検出を通知した後は基準クロックＣＬＫ１に同期して動作する。動作クロックＣＬＫ２は、例えば基準クロックＣＬＫ１と等しい周波数に設定される。
【００２４】
したがって、設計対象回路３ａの動作が停止している間に、図１に示す第１及び第２データ転送回路４１ａ及び４１ｂが、Ｃ／Ｃ＋＋プログラムからデータを受け取って設計対象回路３ａにデータを渡す準備ができ、設計対象回路３ａから受け取ったデータをＣ／Ｃ＋＋プログラムに転送できる。
【００２５】
図４に示す第１検証回路３１＿１は、エラーを検出するとエラー検出通知信号ＥＲ１を第１検証結果転送回路４２ａに出力する。第１検証結果転送回路４２ａは、エラー検出通知信号ＥＲ１を受け取ると、動作クロック生成回路６に対して動作クロック停止指示信号ＣＣを出力する。動作クロック生成回路６は、動作クロック停止指示信号ＣＣを受け取ると、動作クロックＣＬＫ２の生成を中断する。動作クロック生成回路６は、動作クロックＣＬＫ２が停止しているかどうかを示す動作クロック判定信号ＣＥを第１検証結果転送回路４２ａに出力する。
【００２６】
尚、図１に示す第２検証結果転送回路４２ｂから動作クロック生成回路６に対しても動作クロック停止指示信号ＣＣが出力されるが、動作クロック生成回路６は、第１及び第２検証結果転送回路４２ａ及び４２ｂのいずれか一方から動作クロック停止指示信号ＣＣが出力された時点で動作クロックＣＬＫ２の生成を中断する。
【００２７】
したがって、エラーの検出から一定期間においては、設計対象回路３ａの動作が停止するが、第１検証結果転送回路４２ａは基準クロックＣＬＫ１に同期して動作し続ける。第１検証回路３１＿１は、検証対象信号にエラーが検出された場合に、基準クロックＣＬＫ１に同期して、エラー検出時の検証対象信号の値ＳＶ１を第１検証結果転送回路４２ａに供給する。設計対象回路３ａの動作が停止している間に、第１検証結果転送回路４２ａは、エラー検出時の検証対象信号の値ＳＶ１を第１検証回路３１＿１から読み出し、読み出した検証対象信号の値ＳＶ１をコンピュータ２に転送する。
【００２８】
第１検証回路３１＿１は、第１検証結果転送回路４２ａに対し、検証対象信号の値ＳＶ１の出力が完了すると、検証対象信号の値ＳＶ１の出力が完了した旨を第１検証結果転送回路４２ａに報告する。
【００２９】
図４においては、設計対象回路３ａを動作させる動作クロックＣＬＫ２が１つで、動作クロックＣＬＫ２が基準クロックＣＬＫ１と同一周波数であると説明したが、動作クロックＣＬＫ２が複数で、動作クロックＣＬＫ２が基準クロックＣＬＫ１と異なる周波数であっても構わない。
【００３０】
次に、図５を参照して、図１及び図４に示す第１検証回路３１＿１の内部構成例について説明する。第１検証回路３１＿１は、論理回路３０１、第１シフトレジスタ３０２、及び第２シフトレジスタ３０３を備える。図５に示す“ｒｅｑｕｅｓｔ”信号は、図２に示すアサーションプロパティ例の“ｒｅｑｕｅｓｔ”に対応している。また、図５に示す“ｇｒａｎｔ”信号は、図２に示すアサーションプロパティ例の“ｇｒａｎｔ”に対応している。“ｒｅｑｕｅｓｔ”信号及び“ｇｒａｎｔ”信号は検証対象信号であり、論理回路３０１により検証が行われる。
【００３１】
更に、“ｓｔａｔｅ”信号は設計対象回路３ａの内部動作状態を示す信号であり、図３に示すアサーション指定例の“ｓｔａｔｅ”に対応している。論理回路３０１、第１シフトレジスタ３０２、及び第２シフトレジスタ３０３は、“ｓｔａｔｅ”信号に応じて動作の開始、終了、及び中断を行う。一例として、設計対象回路３ａの内部動作状態が“ＦＥＴＣＨ”ステートになったときに、“ｓｔａｔｅ”信号が論理値“１”になり、アサーション検証動作が開始される。“ｓｔａｔｅ”信号が論理値“０”になった場合は、アサーション検出動作は、終了又は中断され、第１及び第２シフトレジスタ３０２及び３０３に保持された値等がリセットされる。
【００３２】
第１シフトレジスタ３０２は、検証対象信号である“ｒｅｑｕｅｓｔ”信号を取り込み、動作クロックＣＬＫ２に同期して“ｒｅｑｕｅｓｔ”信号を順次シフトする。シフトされた“ｒｅｑｕｅｓｔ”信号は論理回路３０１に入力される。第２シフトレジスタ３０３は、検証対象信号である“ｇｒａｎｔ”信号を取り込み、動作クロックＣＬＫ２に同期して“ｇｒａｎｔ”信号を順次シフトする。シフトされた“ｇｒａｎｔ”信号は論理回路３０１に入力される。この結果、論理回路３０１は、“ｒｅｑｕｅｓｔ”信号及び“ｇｒａｎｔ”信号の複数サイクル間の遷移を検証可能となる。
【００３３】
論理回路３０１は、“ｒｅｑｕｅｓｔ”信号及び“ｇｒａｎｔ”信号のそれぞれの値に基づいてエラーを検出する。具体的には、“ｒｅｑｕｅｓｔ”信号が論理値“１”になった後、１〜３サイクル後に“ｇｒａｎｔ”信号が発生し、その次のサイクルで“ｒｅｑｕｅｓｔ”信号がデアサートされ、更にその次のサイクルで“ｇｒａｎｔ”信号がデアサートされるという仕様が満たされているかを判定する。仕様が満たされていない場合には、エラー検出通知信号ＥＲ１を図１及び図４に示す第１検証結果転送回路４２ａに出力する。
【００３４】
第１検証結果転送回路４２ａは、エラー検出通知信号ＥＲ１に基づいて、エラー検出時の検証対象信号（“ｒｅｑｕｅｓｔ”信号、“ｇｒａｎｔ”信号）の信号値の読み出し開始を指示するプローブ信号ＰＲ１を論理回路３０１に供給する。論理回路３０１は、プローブ信号ＰＲ１に応答して、エラー検出時の検証対象信号（“ｒｅｑｕｅｓｔ”信号、“ｇｒａｎｔ”信号）の信号値ＳＶ１を第１検証結果転送回路４２ａに出力する。
【００３５】
次に、図６を用いて、図１及び図４に示す第１検証結果転送回路４２ａの内部構成例について説明する。第１検証結果転送回路４２ａは、制御回路４２２、カウンタ４２５、及び複数の（第１〜第ｎ）レジスタ４２１＿１〜４２１＿ｎを備える。制御回路４２２は、エラー検出時の検証対象信号値を一時的に保持する第１レジスタ４２３と、カウンタ４２５のカウント値を保持する第２レジスタ４２４を備える。
【００３６】
制御回路４２２には、図１に示す第１〜第ｎ検証回路３１＿１〜３１＿ｎから、エラー検出通知信号ＥＲ１〜ＥＲｎと、エラー検出時の検証対象信号値ＳＶ１〜ＳＶｎとが入力される。第１〜第ｎレジスタ４２１＿１〜４２１＿ｎは、エラー検出通知信号ＥＲ１〜ＥＲｎをそれぞれ保持する。制御回路４２２は、エラー検出通知信号ＥＲ１〜ＥＲｎのうちの２つ以上が同時に生成された場合に、第１〜第ｎレジスタ４２１＿１〜４２１＿ｎを参照することでエラーを検出した検証回路を識別する。尚、読み出しが完了すると第１〜第ｎレジスタ４２１＿１〜４２１＿ｎに保持された値はリセットされる。
【００３７】
また、第１検証結果転送回路４２ａは、エラー検出通知信号ＥＲ１〜ＥＲｎに応じて、第１〜第ｎ検証回路３１＿１〜３１＿ｎに対してプローブ信号ＰＲ１〜ＰＲｎを出力する。即ち、制御回路４２２は、第１〜第ｎ検証回路３１＿１〜３１＿ｎのうちの２つ以上が同時にエラーを検出した場合に、プローブ信号ＰＲ１〜ＰＲｎを用いて、検証対象信号値ＳＶ１〜ＳＶｎの読み出し動作をシーケンシャルに行う。
【００３８】
更に、制御回路４２２には、図１及び図４に示すＩ／Ｏポート５から、受信制御信号ＲＲ及び基準クロックＣＬＫ１が入力される。制御回路４２２は、Ｉ／Ｏポート５に対して、送信制御信号ＴＲ及び検証結果出力信号ＯＵＴを出力する。Ｉ／Ｏポート５及び制御回路４２２間で受信制御信号ＲＲ及び送信制御信号ＴＲを送受信することで、Ｉ／Ｏポート５及び制御回路４２２間のデータ転送が制御される。
【００３９】
カウンタ４２５は、シミュレーション開始からの動作クロックＣＬＫ２のサイクル数をカウントして、カウント値を第２レジスタ４２４に出力する。或いは、カウンタ４２５は、基準クロックＣＬＫ１と動作クロック判定信号ＣＥとからカウント動作を行っても良い。また、カウンタ４２５を設けずに、Ｃ／Ｃ＋＋プログラムのＳＣＥ−ＭＩアプリケーション・プログラミング・インターフェース（ＡＰＩ）からクロック数を取り出す構成でも構わない。
【００４０】
このように、制御回路４２２は、第１〜第ｎ検証回路３１＿１〜３１＿ｎのエラー検出に応じて、エラーが検出された際の検証対象信号値ＳＶ１〜ＳＶｎの読み出し動作を行い、シミュレーション開始からエラー検出までのサイクル数を取得する。エラーが検出された際の検証対象信号値ＳＶ１〜ＳＶｎ及びシミュレーション開始からエラー検出までのサイクル数の情報は、検証結果として、Ｉ／Ｏポート５を介して図１に示すコンピュータ２へ転送される。
【００４１】
次に、図７に示すタイムチャートを参照して、図１に示すプログラマブル回路１ａの動作を、第１検証回路３１＿１、第ｎ検証回路３１＿ｎ、及び第１検証結果転送回路４２ａを例に説明する。図７においては、第１検証回路３１＿１及び第ｎ検証回路３１＿ｎがエラーを同時に検出した場合の動作を示している。
【００４２】
図７の時刻ｔ１において、第１検証回路３１＿１の検証動作が開始される。時刻ｔ２において、第ｎ検証回路３１＿ｎの検証動作が開始される。
【００４３】
時刻ｔ３において、第１及び第ｎ検証回路３１＿１及び３１＿ｎがエラーを同時に検出したと仮定する。エラーが検出されると、図４に示す動作クロック生成回路６は、時刻ｔ４において、図５（ｂ）に示す動作クロックＣＬＫ２の生成を停止する。動作クロックＣＬＫ２が停止すると、図１に示す設計対象回路３ａの動作が停止するが、第１及び第ｎ検証回路３１＿１及び３１＿ｎと第１検証結果転送回路４２ａは、図５（ａ）に示す基準クロックＣＬＫ１に同期して動作を継続する。
【００４４】
時刻ｔ４〜ｔ５の期間においては、第１検証結果転送回路４２ａは、第１検証回路３１＿１による検証の結果を読み出す。第１検証回路３１＿１から読み出された検証結果は、Ｉ／Ｏポート５を介してコンピュータ２に転送される。
【００４５】
時刻ｔ６〜ｔ７の期間においては、第１検証結果転送回路４２ａは、第ｎ検証回路３１＿ｎによる検証の結果を読み出す。第ｎ検証回路３１＿ｎから読み出された検証結果は、Ｉ／Ｏポート５を介してコンピュータ２に転送される。
【００４６】
このように、第１及び第ｎ検証回路３１＿１及び３１＿ｎのエラー検出が同時である場合には、動作クロックＣＬＫ２を停止させた後に、第１検証回路３１＿１による検証の結果の取り出しと、第ｎ検証回路３１＿ｎによる検証の結果の読み出しが、シーケンシャルに実行されている。
【００４７】
尚、図７においては基準クロックＣＬＫ１が常に連続して動作しているが、コンピュータ２上で実行されるＣ／Ｃ＋＋プログラムと、プログラマブル回路１ａがＰＣＩバスを介してデータをやり取りする場合は、基準クロックＣＬＫ１が停止する場合もある。
【００４８】
次に、図８に示すフローチャートを参照して、第１実施形態に係るシミュレーション方法を説明する。但し、検証（シミュレーション）時におけるエラーの同時発生を考慮しない場合について説明する。
【００４９】
ステップＳ１０１において、図１に示すコンピュータ２は、動作記述から回路データを作成する。具体的には、動作記述から高位合成等によりＨＤＬ記述を作成する。ＨＤＬ記述中にはアサーション記述が挿入される。ＨＤＬ記述を論理合成することで回路データ（ネットリスト）が作成される。アサーション記述に対しては、例えば予め用意されたライブラリからアサーション記述に対応した回路データを取得することにより、アサーション記述用の回路データが作成される。
【００５０】
ステップＳ１０２において、ステップＳ１０１で作成された回路データが、所定のデータフォーマットに変換後、プログラマブル回路１ａに実装される。また、ステップＳ１０３において、コンピュータ２は、アンタイムドな動作を行うＣ／Ｃ＋＋プログラムを実行する。
【００５１】
ステップＳ１０４において、設計対象回路３ａのサイクル動作が開始される。
【００５２】
ステップＳ１０５において、データ転送回路は、コンピュータ２及び設計対象回路３ａ間のデータ転送をトランザクション単位で行う。
【００５３】
ステップＳ１０５において、複数の検証回路３１＿１〜３１＿ｎ，３２＿１〜３２＿ｋは、設計対象回路３ａの内部信号を所定のタイミングで監視して、仕様を満たしているか否かを検証する。仕様を満たさずにエラーが検出された場合、ステップＳ１０８に進む。エラーが検出されない場合、ステップＳ１０７に進む。
【００５４】
ステップＳ１０７においてシミュレーションを終了すると判定された場合、シミュレーションが終了する。これに対して、ステップＳ１０７においてシミュレーションを終了しないと判定された場合、ステップＳ１０５に処理が戻る。
【００５５】
ステップＳ１０８において、設計対象回路３ａの動作が停止される。また、設計対象回路３ａの動作が停止される期間において、検証結果がコンピュータ２に転送される。
【００５６】
ステップＳ１０９においてシミュレーションを終了すると判定された場合、シミュレーションが終了する。これに対して、ステップＳ１０７においてシミュレーションを終了しないと判定された場合、ステップＳ１０４に処理が戻り、設計対象回路３ａのサイクル動作が再開される。
【００５７】
以上詳細に述べたように、第１実施形態によれば、プログラマブル回路１ａを用いたトランザクションレベルの協調シミュレーションにおいてもアサーション検証が可能になる。したがって、プログラマブル回路１ａに実装される設計対象回路３ａの内部信号の観測性を十分に高めることができるので、設計品質（シミュレーション品質）の向上を計ることができる。更に、設計対象回路３ａ及びＣ／Ｃ＋＋プログラム間のデータ転送がトランザクション単位で実行されるため、シミュレーションを高速に実行でき、シミュレーションに要する時間を短縮できる。
【００５８】
（第１実施形態の第１変形例）
上述した第１実施形態においては、エラー検出通知があった直後に設計対象回路３ａの動作を停止させる一例を説明した。しかしながら、本発明の第１実施形態の第１変形例として、エラー検出通知から一定サイクル経過後に設計対象回路３ａの動作を停止させても良い。この結果、あるエラーが検出されてから、一定サイクル期間内に発生した他のエラーをも検出可能となる。
【００５９】
図４に示す動作クロック生成回路６は、例えば、第１検証結果転送回路４２ａから動作クロック停止指示信号ＣＣを受け取った時点から基準クロックＣＬＫ１をカウントし、カウント値が一定値となるまでは動作クロックＣＬＫ２の生成を継続する。
【００６０】
また、図１に示す第１及び第２検証結果転送回路４２ａ及び４２ｂのそれぞれは、エラー検出通知から一定サイクル期間内に検出されたエラーに対して、エラー検出時の検証対象信号の値をシーケンシャルに読み出す。
【００６１】
このように、第１実施形態の変形例によれば、あるエラーが検出されてから一定サイクル期間は設計対象回路３ａを動作させることにより、一定サイクル期間内に他のエラーを検出することが可能となる。
【００６２】
（第１実施形態の第２変形例）
本発明の第１実施形態の第２変形例として、プログラマブル回路１ａに対する回路データの実装前に、複数の検証回路３１＿１〜３１＿ｎ，３２＿１〜３２＿ｋのうち、エラーが同時に検出される可能性の高い検証回路同士を異なる検証結果転送回路に割り振る一例について説明する。
【００６３】
図１に示すように検証結果転送回路４２ａが複数の検証回路３１＿１〜３１＿ｎの検証結果を読み出す場合に、シミュレーション実行時のエラーの同時発生頻度を見積もり、エラーを同時に検出する可能性の高い検証回路同士を、異なる検証結果転送回路に割り当てる。
【００６４】
例えば、検証対象の信号が同一である検証回路は、エラーを同時に検出する可能性が高いと判断できる。よって、検証対象の信号が同一である検証回路同士を異なる検証結果転送回路に割り振ることが好ましい。
【００６５】
次に、図９に示すフローチャートを参照して、第１実施形態の第２変形例に係るシミュレーション方法を説明する。但し、図８に示すフローチャートと同様の処理については重複する説明を省略する。
【００６６】
ステップＳ２０１において、図１に示すコンピュータ２は、動作記述から高位合成等によりＨＤＬ記述を作成する。ＨＤＬ記述中にはアサーション記述が挿入される。更に、コンピュータ２は、ＨＤＬ記述中に挿入されたアサーション記述を解析して、複数のアサーション記述から検証対象の信号が同一であるアサーション記述を検索する。
【００６７】
また、コンピュータ２は、ＨＤＬ記述を論理合成することで回路データ（ネットリスト）を作成する。アサーション記述に対しては、例えば予め用意されたライブラリからアサーション記述に対応した回路データを取得することにより、アサーション記述用の回路データが作成される。ここで、検証対象の信号が同一であるアサーション記述の回路データに対しては、異なる検証結果転送回路の回路データに割り振る。
【００６８】
ステップＳ１０２においては、ステップＳ２０１で作成された回路データがプログラマブル回路１ａに実装される。以降の処理については図８と同様である。
【００６９】
このように、第１実施形態の第２変形例によれば、回路データをプログラマブル回路１ａに実装する前に、検証回路と検証結果転送回路の対応関係を最適化することで、複数の検証回路が同時にエラーを検出した場合に、コンピュータ２に対して、検証結果の転送動作を短時間で完了できる。
【００７０】
（第１実施形態の第３変形例）
本発明の第１実施形態の第３変形例として、上述した第１実施形態の第２変形例と異なる方法で、エラーが同時に検出される可能性の高い検証回路同士を異なる検証結果転送回路に割り振る一例について説明する。具体的には、一度シミュレーションを実行した結果から、同時にエラーを検出した２以上の検証回路を、異なる検証結果転送回路に割り振る。
【００７１】
次に、図１０に示すフローチャートを参照して、第１実施形態の第３変形例に係るシミュレーション方法を説明する。但し、図８に示すフローチャートと同様の処理については重複する説明を省略する。
【００７２】
ステップＳ１０７又はステップＳ１０９において、１回目のシミュレーションを終了すると判定された場合、ステップＳ３０１に進む。ステップＳ３０１においては、シミュレーションを再開するか否かが判定される。シミュレーションを再開すると判定された場合、ステップＳ３０２に進む。シミュレーションを再開しないと判定された場合、シミュレーションが終了する。
【００７３】
ステップＳ３０２においては、１回目のシミュレーション中に同時にエラーを検出した２以上の検証回路を特定し、特定された２以上の検証回路を異なる検証結果転送回路に割り振るようにステップＳ１０１で作成された回路データを変更する。回路データが変更されるとステップＳ１０２に処理が戻る。
【００７４】
このように、第１実施形態の第３変形例によれば、一度シミュレーションを実行した結果から、同時にエラーを検出した２以上の検証回路を、異なる検証結果転送回路に割り振ることで、検証回路と検証結果転送回路の対応関係を最適化できる。
【００７５】
（第２実施形態）
本発明の第２実施形態に係るシミュレーション装置は、図１１に示すように、プログラマブル回路１ｂにおいて、１つの検証回路に１つの検証結果転送回路が割り振られている点が図１と異なる。即ち、図１１に示す第１検証結果転送回路４３ａは、第１検証回路３１による検証の結果のみを読み出す。同様に、第２検証結果転送回路４３ｂは、第２検証回路３２による検証の結果のみを読み出す。その他の構成については図１に示すシミュレーション装置の構成と同様である。
【００７６】
図１に示すシミュレーション装置では、第１〜第ｎ検証回路３１＿１〜３１＿ｎが第１検証結果転送回路４２ａに接続され、第１〜第ｎ検証回路３１＿１〜３１＿ｎでエラーが同時に発生した場合に第１検証結果転送回路４２ａが検証結果をシーケンシャルに読み出す場合を説明した。一方、図１１に示すシミュレーション装置は、複数の検証回路３１，３２，・・・に複数の検証結果転送回路４３ａ，４３ｂ，・・・がそれぞれ割り振られているため、エラーが同時に発生した際に検証結果の転送に要する時間を短縮できる。
【００７７】
次に、図１２に示すタイムチャートを参照して、図１１に示すプログラマブル回路１ｂの動作を、第１検証回路３１、第２検証回路３２、第１検証結果転送回路４３ａ、及び第２検証結果転送回路４３ｂを例に説明する。図１２においては、第１及び第２検証回路３１及び３２がエラーを同時に検出した場合の動作を示している。但し、図１に示すプログラマブル回路１ａと同様の動作については重複する説明を省略する。
【００７８】
図１２の時刻ｔ３において、図１１に示す第１及び第２検証回路３１及び３２がエラーを同時に検出したと仮定する。エラーが検出されると、図１１に示す設計対象回路３ｂの動作が停止するが、第１検証回路３１、第２検証回路３２、第１検証結果転送回路４３ａ、及び第１検証結果転送回路４３ａは、図１２（ａ）に示す基準クロックＣＬＫ１に同期して動作を継続する。
【００７９】
時刻ｔ４〜ｔ５の期間において、第１検証結果転送回路４３ａは、第１検証回路３１による検証の結果を読み出す。第１検証回路３１＿１から読み出された検証結果は、Ｉ／Ｏポート５を介してコンピュータ２に転送される。同様に、時刻ｔ４〜ｔ５の期間において、第２検証結果転送回路４３ｂは、第２検証回路３２による検証の結果を読み出す。第２検証回路３２から読み出された検証結果は、Ｉ／Ｏポート５を介してコンピュータ２に転送される。
【００８０】
このように、第２実施形態によれば、複数の検証回路３１，３２，・・・が同時にエラーを検出した場合に、検証結果をコンピュータ２に短時間で転送できる。この結果、検証結果の読み出しに要するオーバーヘッドを削減し、全体のシミュレーション時間を短縮できる。
【００８１】
（第３実施形態）
本発明の第３実施形態に係るシミュレーション装置は、図１３に示すように、複数の検証回路３１，３２，・・・と複数の検証結果転送回路４３ａ，４３ｂ，・・・との間に接続された切り替え回路８を備える点が図１と異なる。切り替え回路８は、例えば、コンピュータ２からＩ／Ｏポート５を介して伝達される切り替え制御信号に応じて、複数の検証回路３１，３２，・・・と複数の検証結果転送回路４３ａ，４３ｂ，・・・との接続関係を切り替える。
【００８２】
したがって、プログラマブル回路１ｃに回路データを実装した後においても、複数の検証回路３１，３２，・・・と複数の検証結果転送回路４３ａ，４３ｂ，・・・との接続関係を切り替え可能となる。
【００８３】
例えば、第１検証回路３１を、第１及び第２検証結果転送回路４３ａ及び４３ｂのいずれに接続するかを、シミュレーション開始前又はシミュレーション中断時等に任意に変更できる。同様に、第２検証回路３２を、第１及び第２検証結果転送回路４３ａ及び４３ｂのいずれに接続するかを、シミュレーション開始前又はシミュレーション中断時等に任意に変更できる。
【００８４】
尚、複数の検証回路３１，３２，・・・と複数の検証結果転送回路４３ａ，４３ｂ，・・・との接続関係を切り替える際には、コンピュータ２において、検証対象の信号名と複数の検証結果転送回路４３ａ，４３ｂ，・・・との対応テーブル（クロスリファレンス）の変更が必要である。
【００８５】
次に、図１４に示すフローチャートを参照して、第３実施形態に係るシミュレーション方法を説明する。但し、シミュレーションを一度実行した結果に基づいて、複数の検証回路３１，３２，・・・と複数の検証結果転送回路４３ａ，４３ｂ，・・・との接続関係を切り替える場合について説明する。また、図８に示すフローチャートと同様の処理については重複する説明を省略する。
【００８６】
ステップＳ４０１において、コンピュータ２は、複数の検証回路３１，３２，・・・と複数の検証結果転送回路４３ａ，４３ｂ，・・・との接続関係を切り替えてシミュレーションを再開するか否か判定する。接続関係を切り替えてシミュレーションを再開すると判定された場合、ステップＳ４０２に進む。接続関係を切り替えてシミュレーションを再開しないと判定された場合、シミュレーションが終了する。
【００８７】
ステップＳ４０２においては、コンピュータ２は、Ｉ／Ｏポート５を介して切り替え回路８に切り替え制御信号を送信し、複数の検証回路３１，３２，・・・と複数の検証結果転送回路４３ａ，４３ｂ，・・・との接続関係が変更される。
【００８８】
このように、第３実施形態によれば、回路データを変更することなく、複数の検証回路３１，３２，・・・と複数の検証結果転送回路４３ａ，４３ｂ，・・・との接続関係を動的に再構成することができる。
【００８９】
（その他の実施形態）
上記のように、本発明は第１〜第３実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。
【００９０】
既に述べた実施の形態の説明においては、プログラマブル回路１ａに１つの設計対象回路３ａが実装される一例を説明したが、複数の設計対象回路をプログラマブル回路１ａに実装しても良い。
【００９１】
また、１つのプログラマブル回路を使用して協調シミュレーションを行う例を示したが、複数のプログラマブル回路を使用しても良い。複数のプログラマブル回路を使用することにより、より大規模なハードウェアのシミュレーションが可能となる。
【００９２】
上述した第１実施形態の第１変形例においては、エラー検出通知から一定サイクル期間経過後に設計対象回路３ａの動作を停止させる一例を説明した。第２及び第３実施形態においても、エラー検出通知から一定サイクル期間経過後に設計対象回路３ａの動作を停止させる構成を採用できる。
【００９３】
このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
【図面の簡単な説明】
【００９４】
【図１】本発明の第１実施形態に係るシミュレーション装置の全体構成例を示すブロック図である。
【図２】本発明の第１実施形態に係るシミュレーション方法に使用されるアサーション記述（アサーションプロパティ）の一例を示す模式図である。
【図３】本発明の第１実施形態に係るシミュレーション方法に使用されるアサーション記述（アサーション指定）の一例を示す模式図である。
【図４】本発明の第１実施形態に係るプログラマブル回路の一部構成例を示すブロック図である。
【図５】本発明の第１実施形態に係る第１検証回路の内部構成例を示すブロック図である。
【図６】本発明の第１実施形態に係る第１検証結果転送回路の内部構成例を示すブロック図である。
【図７】本発明の第１実施形態に係るプログラマブル回路の動作例を説明するためのタイムチャートである。
【図８】本発明の第１実施形態に係るシミュレーション方法の処理手順例を示すフローチャートである。
【図９】本発明の第１実施形態の第２変形例に係るシミュレーション方法の一例を示すフローチャートである。
【図１０】本発明の第１実施形態の第３変形例に係るシミュレーション方法の一例を示すフローチャートである。
【図１１】本発明の第２実施形態に係るシミュレーション装置の全体構成例を示すブロック図である。
【図１２】本発明の第２実施形態に係るプログラマブル回路の動作例を説明するためのタイムチャートである。
【図１３】本発明の第３実施形態に係るシミュレーション装置の全体構成例を示すブロック図である。
【図１４】本発明の第３実施形態に係るシミュレーション方法の一例を示すフローチャートである。
【符号の説明】
【００９５】
１…検証回路
１ａ〜１ｃ…プログラマブル回路
２…コンピュータ
３ａ，３ｂ…設計対象回路
３１，３２，・・・  …検証回路
４１ａ…第１データ転送回路
４１ｂ…第２データ転送回路
４２ａ，４３ａ…第１検証結果転送回路
４２ｂ，４３ｂ…第２検証結果転送回路
【図１】
0004599266.tif 000002
【図２】
0004599266.tif 000003
【図３】
0004599266.tif 000004
【図４】
0004599266.tif 000005
【図５】
0004599266.tif 000006
【図６】
0004599266.tif 000007
【図７】
0004599266.tif 000008
【図８】
0004599266.tif 000009
【図９】
0004599266.tif 000010
【図１０】
0004599266.tif 000011
【図１１】
0004599266.tif 000012
【図１２】
0004599266.tif 000013
【図１３】
0004599266.tif 000014
【図１４】
0004599266.tif 000015