(57)【要約】【課題】  被検査回路の動作検証を高速化できる回路検証装置および方法を提供する。【解決手段】  被検査回路を分割して得られた複数の回路部分１０３をそれぞれ実装したエミュレータ１および２をバス１０によって相互接続し、バス１０を通して通信を行うことにより被検査回路の機能的動作の検証を実行する。被検査回路は、被検査回路内の回路ユニット間の通信発生パターンに基づいて、回路部分間で通信発生回数が最も小さくなるように分割される。バス１０の入出力信号は信号変化率の高い順にバスアドレス空間に配置され、アドレスが近傍に存在する場合にはバースト転送を利用する。また、被検査回路内部の貫通パスを探索し、貫通パスの数が複数の回路部分間で最も少なくなるように複数の回路ユニットを分割する。【選択図】      図１
2005084957.tif 000002
【特許請求の範囲】
【請求項１】
被検査回路の機能的動作をシミュレーションにより検証する回路動作検証装置において、
前記被検査回路を複数の回路部分に分割し、それぞれの機能的動作をシミュレーションにより実現するための複数のシミュレーション手段と、
前記複数のシミュレーション手段を接続して相互通信を可能にするバスと、
前記バスを制御するバス制御手段と、
前記バス制御手段を制御して前記複数のシミュレーション手段間で通信を行うことにより前記被検査回路の機能的動作の検証を実行する上位制御手段と、
を有することを特徴とする回路動作検証装置。
【請求項２】
前記バス制御手段および前記複数のシミュレーション手段はいずれもバスマスタになることで通信を実行することを特徴とする請求項１に記載の回路動作検証装置。
【請求項３】
前記バス制御手段がバスマスタとして動作し、前記複数のシミュレーション手段はいずれも前記バス制御手段の制御の下で通信を実行することを特徴とする請求項１に記載の回路動作検証装置。
【請求項４】
前記複数のシミュレーション手段の各々において、前記バスからの入力信号および前記バスへの出力信号は、信号変化率の高い順にバスアドレス空間に配置されることを特徴とする請求項１に記載の回路動作検証装置。
【請求項５】
前記複数のシミュレーション手段の各々の入力信号および出力信号は、転送すべき信号のアドレスが近傍に存在する場合にはバースト転送により送受信されることを特徴とする請求項１に記載の回路動作検証装置。
【請求項６】
前記複数のシミュレーション手段間に存在する貫通パスの信号は、前記複数のシミュレーション手段の各々においてバスアドレス空間の一部にまとめて配置されることを特徴とする請求項１に記載の回路動作検証装置。
【請求項７】
前記バス制御手段がバスマスタとして動作し、前記貫通パスの信号を転送する場合はバースト転送により送受信されることを特徴とする請求項６に記載の回路動作検証装置。
【請求項８】
前記複数のシミュレーション手段の各々は変化した信号を送受信することを特徴とする請求項１に記載の回路動作検証装置。
【請求項９】
前記複数のシミュレーション手段は、前記被検査回路の対応回路部分を実装した少なくとも１個のエミュレータを含むことを特徴とする請求項１に記載の回路動作検証装置。
【請求項１０】
前記少なくとも１個のエミュレータの各々は、
前記バスに接続するバスインターフェースと、
前記被検査回路の対応回路部分の動作をエミュレーションするプログラマブル回路と、
前記バスインターフェースと前記プログラマブル回路との間で変化した信号を転送する通信回路と、
を有することを特徴とする請求項９に記載の回路動作検証装置。
【請求項１１】
前記通信回路は、前記バスインターフェースから受け取った入力信号を保持するレジスタを有することを特徴とする請求項１０に記載の回路動作検証装置。
【請求項１２】
前記通信回路は、前記プログラマブル回路から出力された出力信号を前記バスインターフェースへ転送する３−ステートバッファを有し、前記３−ステートバッファは前記プログラマブル回路により提供されることを特徴とする請求項１０に記載の回路動作検証装置。
【請求項１３】
前記複数のシミュレーション手段は、前記被検査回路の対応回路部分の動作をソフトウエアによりシミュレーションした少なくとも１個のシミュレータを含むことを特徴とする請求項１に記載の回路動作検証装置。
【請求項１４】
前記被検査回路は、それぞれ少なくとも１個の回路素子からなる複数の回路ユニットからなり、前記複数の回路ユニット間における時間的通信発生パターンに基づいて前記複数のシミュレーション手段の間で発生する通信回数が最も小さくなるように前記複数の回路ユニットを分割して前記複数のシミュレーション手段を生成することを特徴とする請求項１に記載の回路動作検証装置。
【請求項１５】
前記被検査回路は、それぞれ少なくとも１個の回路素子からなる複数の回路ユニットからなり、前記複数のシミュレーション手段の間の貫通パス数が最も少なくなるように前記複数の回路ユニットを分割して前記複数のシミュレーション手段を生成することを特徴とする請求項１に記載の回路動作検証装置。
【請求項１６】
被検査回路の機能的動作を模擬動作により検証する回路動作検証方法において、
ａ）前記被検査回路を複数の回路部分に分割した時に前記複数の回路部分の間で通信回数が最も少なくなるように、前記被検査回路を前記複数の回路部分に分割するステップと、
ｂ）前記複数の回路部分の機能的動作を模擬動作によりそれぞれ実現する複数のシミュレーション回路をバスにより相互通信可能に接続するステップと、
ｃ）前記複数のシミュレーション回路間で通信を行うことにより前記被検査回路の機能的動作を検証するステップと、
を有することを特徴とする回路動作検証方法。
【請求項１７】
前記ステップａ）は、
ａ．１）前記被検査回路を構成する複数の回路ユニットの任意の組合せにおける時間的通信発生パターンを入力するステップと、
ａ．２）前記複数の回路ユニットの前記時間的通信発生パターンに基づいて、前記複数の回路部分に分割した時に前記複数の回路部分の間で通信発生回数が最も小さくなるように前記複数の回路ユニットを分割して前記複数の回路部分を得るステップと、
を有することを特徴とする請求項１６に記載の回路動作検証方法。
【請求項１８】
前記ステップｂ）において、前記複数のシミュレーション回路の各々における前記バスからの入力信号および前記バスへの出力信号は、信号変化率の高い順にバスアドレス空間に配置することを特徴とする請求項１６に記載の回路動作検証方法。
【請求項１９】
前記ステップｃ）において、前記複数のシミュレーション回路の各々の入力信号および出力信号は、転送すべき信号のアドレスが近傍に存在する場合にはバースト転送により送受信されることを特徴とする請求項１６に記載の回路動作検証方法。
【請求項２０】
前記ステップａ）は、
ａ．１）前記被検査回路を構成する複数の回路ユニットの間の貫通パスを探索するステップと、
ａ．２）前記複数の回路部分に分割した時に前記複数の回路部分の間で前記貫通パスの数が最も少なくなるように前記複数の回路ユニットを分割するステップと、
を有することを特徴とする請求項１６に記載の回路動作検証方法。
【請求項２１】
前記ステップｂ）において、前記複数のシミュレーション手段間に存在する貫通パスの信号は、前記複数のシミュレーション回路の各々におけるバスアドレス空間の一部にまとめて配置することを特徴とする請求項２０に記載の回路動作検証方法。
【請求項２２】
前記ステップｃ）において、前記貫通パスの信号は、転送すべき信号のアドレスが近傍に存在する場合にはバースト転送により送受信されることを特徴とする請求項２１に記載の回路動作検証方法。
【請求項２３】
前記ステップｃ）は、
ｃ．１）前記複数のシミュレーション回路と前記バスを制御するバス制御部とを順次バスマスタにするステップと、
ｃ．２）バスマスタとなったシミュレーション回路が出力信号を他のシミュレーション回路へ転送するステップと、
ｃ．３）バスマスタとなった前記バス制御部が、ブレーク条件判定の後、前記複数のシミュレーション回路のクロック信号をそれぞれアクティブにするステップと、
を有することを特徴とする請求項１６に記載の回路動作検証方法。
【請求項２４】
前記ステップｃ）は、
ｃ．１）前記バスを制御するバス制御部が前記複数のシミュレーション回路における転送信号を各シミュレーション回路に設定するステップと、
ｃ．２）前記複数の回路ユニットの間の貫通パスを通る信号を転送するステップと、
ｃ．３）前記バス制御部が、ブレーク条件判定の後、前記複数のシミュレーション回路のクロック信号をそれぞれアクティブにするステップと、
を有することを特徴とする請求項１６に記載の回路動作検証方法。
【請求項２５】
コンピュータに、被検査回路の機能的動作を模擬動作により検証させるためのプログラムにおいて、
ａ）前記被検査回路を複数の回路部分に分割した時に前記複数の回路部分の間で通信回数が最も少なくなるように、前記被検査回路を前記複数の回路部分に分割するステップと、
ｂ）前記複数の回路部分の機能的動作を模擬動作によりそれぞれ実現する複数のシミュレーション回路をバスにより相互通信可能に接続するステップと、
ｃ）前記複数のシミュレーション回路間で通信を行うことにより前記被検査回路の機能的動作を検証するステップと、
を有することを特徴とする回路動作検証プログラム。
【請求項２６】
前記ステップａ）は、
ａ．１）前記被検査回路を構成する複数の回路ユニットの任意の組合せにおける時間的通信発生パターンを入力するステップと、
ａ．２）前記複数の回路ユニットの前記時間的通信発生パターンに基づいて、前記複数の回路部分に分割した時に前記複数の回路部分の間で通信発生回数が最も小さくなるように前記複数の回路ユニットを分割して前記複数の回路部分を得るステップと、
を有することを特徴とする請求項２５に記載の回路動作検証プログラム。
【請求項２７】
前記ステップａ）は、
ａ．１）前記被検査回路を構成する複数の回路ユニットの間の貫通パスを探索するステップと、
ａ．２）前記複数の回路部分に分割した時に前記複数の回路部分の間で前記貫通パスの数が最も少なくなるように前記複数の回路ユニットを分割するステップと、
を有することを特徴とする請求項２５に記載の回路動作検証プログラム。
【請求項２８】
前記ステップｃ）は、
ｃ．１）前記複数のシミュレーション回路と前記バスを制御するバス制御部とを順次バスマスタにするステップと、
ｃ．２）バスマスタとなったシミュレーション回路が出力信号を他のシミュレーション回路へ転送するステップと、
ｃ．３）バスマスタとなった前記バス制御部が、ブレーク条件判定の後、前記複数のシミュレーション回路のクロック信号をそれぞれアクティブにするステップと、
を有することを特徴とする請求項２５に記載の回路動作検証プログラム。
【請求項２９】
前記ステップｃ）は、
ｃ．１）前記バスを制御するバス制御部が前記複数のシミュレーション回路における転送信号を各シミュレーション回路に設定するステップと、
ｃ．２）前記複数の回路ユニットの間の貫通パスを通る信号を転送するステップと、
ｃ．３）前記バス制御部が、ブレーク条件判定の後、前記複数のシミュレーション回路のクロック信号をそれぞれアクティブにするステップと、
を有することを特徴とする請求項２５に記載の回路動作検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は論理回路の設計支援技術に係り、特に回路の動作検証を実行するための装置および方法に関する。
【背景技術】
【０００２】
ディジタルＬＳＩに実装できる回路規模が年々大きくなるのに伴って、動作検証の高速化が益々重要な課題となっている。検証速度を向上させる一般的な方法は、ＦＰＧＡ、ＣＰＬＤなどのプログラマブル素子を用いたハードウエアエミュレータを採用することである。
【０００３】
特開２０００−２１５２２６号公報（特許文献１）には、論理情報が構造レベルまで確定したモジュールとそうでないモジュールとが混在する場合に論理検証を効率的に実行する論理検証装置が開示されている。詳しくは、論理情報の抽象度レベルに応じて、検証される回路をハードウエアエミュレータにより検証する第１の部分とソフトウエアシミュレータにより検証する第２の部分とに分割し、これらハードウエアエミュレータおよびソフトウエアシミュレータのクロックを同期させてデータの相互転送を行うことで回路検証を実行する（段落００４６〜００５２、図１、図２）。被検証論理をソフトウェアシミュレータだけでなく、ハードウェアエミュレータでも実行しているためソフトウェアシミュレータ単体より高速に検証できる。
【０００４】
【特許文献１】特開２０００−２１５２２６号公報（段落００４６〜００５２、図１、図２）。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来の論理検証装置における回路の分割は、論理情報の抽象度レベルに応じて行われるために、回路分割の自由度がなく検証の高速化を達成することができない。
【０００６】
さらに、上記従来の論理検証装置のソフトウエアシミュレータでは、ＣＰＵのシステムバスを通してハードウエアエミュレータとの間でデータが送受信されるが、その送受信データの割付はシステムバスの仕様に従っている（特許文献１の段落００４８参照）。このために、回路の検証速度はバス転送速度によって決定され、効率的なデータ転送を行うことができない。
【０００７】
そこで、本発明の目的は、被検査回路の動作検証を高速化できる回路検証装置および方法を提供することにある。
【０００８】
本発明の他の目的は、分割された回路エミュレータあるいはシミュレータの間の通信回数を低減させる回路検証装置および方法を提供することにある。
【０００９】
さらに、本発明の別の目的は、回路分割の自由度を向上させる回路検証装置および方法を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の第１の側面によれば、被検査回路を分割して得られた複数の回路部分の各機能的動作をシミュレーションにより実現するシミュレーション手段を設け、それらをバスによって相互接続し、バスを通して複数のシミュレーション手段間で通信を行うことにより被検査回路の機能的動作の検証を実行することを特徴とする。
【００１１】
複数のシミュレーション手段の各々において、バスからの入力信号およびバスへの出力信号は信号変化率の高い順にバスアドレス空間に配置されることが望ましい。複数のシミュレーション手段の各々の入力信号および出力信号は、転送すべき信号のアドレスが近傍に存在する場合にはバースト転送により送受信される。
【００１２】
また、複数のシミュレーション手段間に存在する貫通パスの信号は、複数のシミュレーション手段の各々においてバスアドレス空間の一部にまとめて配置されることが望ましい。バスを制御するバス制御手段がバスマスタの時に貫通パスの信号を転送する場合はバースト転送により送受信される。
【００１３】
複数のシミュレーション手段の各々は、プログラマブル回路を用いたエミュレータまたはソフトウエアによるシミュレータである。
【００１４】
本発明の第２の側面によれば、被検査回路の機能的動作を模擬動作により検証する回路動作検証方法において、ａ）前記被検査回路を複数の回路部分に分割した時に前記複数の回路部分の間で通信回数が最も少なくなるように、前記被検査回路を前記複数の回路部分に分割するステップと、ｂ）前記複数の回路部分の機能的動作を模擬動作によりそれぞれ実現する複数のシミュレーション回路をバスにより相互通信可能に接続するステップと、ｃ）前記複数のシミュレーション回路間で通信を行うことにより前記被検査回路の機能的動作を検証するステップと、を有することを特徴とする。
【００１５】
ステップａ）は、ａ．１）前記被検査回路を構成する複数の回路ユニットの任意の組合せにおける時間的通信発生パターンを入力するステップと、ａ．２）前記複数の回路ユニットの前記時間的通信発生パターンに基づいて、前記複数の回路部分に分割した時に前記複数の回路部分の間で通信発生回数が最も小さくなるように前記複数の回路ユニットを分割して前記複数の回路部分を得るステップと、を有することが望ましい。
【００１６】
あるいは、ステップａ）は、ａ．１）前記被検査回路を構成する複数の回路ユニットの間の貫通パスを探索するステップと、ａ．２）前記複数の回路部分に分割した時に前記複数の回路部分の間で前記貫通パスの数が最も少なくなるように前記複数の回路ユニットを分割するステップと、を有することが望ましい。
【発明の効果】
【００１７】
本発明によれば、複数のシミュレーション手段をバス接続したことで、回路の分割の自由度を向上させることができ、回路分割による動作検証の高速化が可能となる。
【００１８】
また、被検査回路を複数の回路部分に分割した時に複数の回路部分の間で通信回数が最も少なくなるように被検査回路を分割することで、動作検証を高速化できる。
【００１９】
被検査回路を構成する複数の回路ユニットの任意の組合せにおける時間的通信発生パターンを用いることで、分割した回路部分の間で通信発生回数が最も小さくなるように複数の回路ユニットを分割することができる。
【００２０】
さらに、バスからの入力信号およびバスへの出力信号は信号変化率の高い順にバスアドレス空間に配置することで、変化した信号のアドレスが近傍に存在する場合にはバースト転送を利用することができ、通信回数を低減させることができる。
【００２１】
また、複数の回路ユニットの間の貫通パスを探索し、貫通パスの数が複数の回路部分間で最も少なくなるように複数のモジュールを分割する。貫通パスは信号が回路部分を通過するだけであるから、貫通パスの数が最小となるように分割することで回路部分間の通信回数が減少させることができる。
【発明を実施するための最良の形態】
【００２２】
１．第１実施形態
１．１）システム構成
図１は本発明の第１実施形態による回路検証装置の概略的ブロック構成図である。本実施形態では、検証される回路全体を構成する複数の回路素子あるいは複数のモジュールをを２つの回路部分１０３．１および１０３．２に分割し、それぞれをエミュレータ１および２に実装している。エミュレータ１および２はバス１０に接続され、バス１０にはさらにバスコントローラ１１が接続されている。本実施形態では、バスコントローラ１１、エミュレータ１およびエミュレータ２のすべてがバス１０のバスマスタになることができる。
【００２３】
上位コンピュータシステム１２はバスコントローラ１１、ユーザインターフェース１３および表示装置１４に接続されている。ユーザはユーザインターフェース１３を用いてバスコントローラ１１の動作を制御でき、また、バスコントローラ１１を通して得た情報は表示装置１４によりユーザに提示される。たとえば、ユーザは、ユーザインターフェース１３および表示装置１４を通して、エミュレータ１およびエミュレータ２にそれぞれ実装された被検証回路部分１０３．１および１０３．２の入力信号の値を変更することができる。
【００２４】
バスコントローラ１１は、上位コンピュータシステム１２からの命令によって動作が規定され、バスマスタになりうるエミュレータ１および２のバス制御権を調停する。また、バスコントローラ１１自身もバスマスタになり、エミュレータ１および２に対してデータの書き込みおよび読み出しができる。
【００２５】
エミュレータ１とエミュレータ２とは、それぞれに実装された分割回路１０３．１および１０３．２を除いて、同一の構成を有する。エミュレータ１は、バス１０に接続してデータの授受を可能にするバスインターフェース１０１．１、被検証回路部分１０３．１、および、それらを接続して後述する相互通信を可能にする通信回路１０２．１を有する。エミュレータ２も同様に、バスインターフェース１０１．２、被検証回路部分１０３．２および通信回路１０２．２を有する。以下、エミュレータの構成をさらに詳細に説明する。
【００２６】
図２は本発明の第１実施形態におけるエミュレータの詳細な構成を示すブロック図である。エミュレータ１および２はいずれも、バスインターフェース１０１、通信回路１０２および被検証回路部分１０３からなる基本構成を有する。通信回路１０２は、バスインターフェース１０１から入力した書き込みデータＷＤＡＴＡなどを入力信号inputとして被検証回路部分１０３へ与え、被検証回路部分１０３からの出力信号outputをバスインターフェース１０１のアドレス信号ＡＤに従って選択し、バスインターフェース１０１に転送する。
【００２７】
より詳しくは、通信回路１０２は、クロック制御回路２０１、レジスタ２０２、アドレスデコーダ２０３、制御回路２０４およびセレクタ２０５を有する。クロック制御回路２０１は、書き込みデータＷＤＡＴＡと書き込みイネーブル信号ＷＥおよびセレクタ信号ＳＥＬとを入力してクロック信号ＣＬＫを生成し、被検証回路部分１０３、制御回路２０４およびセレクタ２０５へ供給する。レジスタ２０２は、書き込みデータＷＤＡＴＡと書き込みイネーブル信号ＷＥおよびセレクタ信号ＳＥＬとを入力し、入力信号input、入出力信号in/outおよびリセット信号ＲＳＴを生成して被検証回路部分１０３へ出力する。アドレスデコーダ２０３は、バスインターフェース１０１から入力したアドレス信号ＡＤをデコードしてセレクト信号ＳＥＬとＳＥＬTXとを生成し、クロック制御回路２０１およびレジスタ２０２とセレクタ２０５とにそれぞれ供給する。制御回路２０４は、クロック信号ＣＬＫおよびリセット信号ＲＳＴに基づき、セレクタ２０５からの送信要求信号ＴｘＲＱに応じて、マスタ要求ＲＱ、送信アドレス信号ＴｘＡＤおよびバースト数ＢＮをバスインターフェース１０１へ出力する。セレクタ２０５は、被検出回路部分１０３の出力信号outputおよび入出力信号in/outからセレクタ信号ＳＥＬTXに従って送信データＴｘＤを選択してインターフェース１０１へ出力すると共に、出力信号outputおよび入出力信号in/outに基づいて送信要求信号ＴｘＲＱを生成して制御回路２０４へ出力する。
【００２８】
なお、被検証回路部分１０３の入力信号inputおよび入出力信号in/outの入力信号、出力信号outputおよび入出力信号in/outの出力信号には、それぞれ１つずつアドレスが割り振られている。１アドレスで特定されるデータの最大ビット数は、書き込みデータＷＤＡＴＡおよび送信データＴｘＤのビット幅に等しい。アドレス信号ＡＤによるアドレスは、バス１０のアドレス空間の一部でもよいし、また別空間のアドレスでもよい。このアドレスは、バス１０から被検証回路部分１０３のデータの位置が一意に決定できればよく、アドレス信号ＡＤがバス１０のアドレス空間の一部でない時はバスインターフェース１０１が必要なアドレス変換を行う。ただし、各データのアドレスの割り振りにおいて、１アドレスに接続先の異なるエミュレータのデータを割り振ることはできない。
【００２９】
図３（Ａ）は第１実施形態におけるクロック制御回路２０１のブロック図であり、図３（Ｂ）はクロック制御回路２０１により生成されるクロック波形の一例を示す波形図である。図３（Ａ）に示すように、クロック制御回路２０１は記憶素子３０１、クロック発生装置３０２およびＡＮＤゲート３０３から構成される。記憶素子３０１は、セレクト信号ＳＥＬと書き込みイネーブル信号ＷＥとが共にアクティブになった時に、書き込みデータＷＤＡＴＡの値をラッチし、その値をクロック生成値としてクロック発生回路３０２へ出力する。また、クロック発生回路３０２からのクリア信号によって、記録素子３０１に保持されたデータはリセットされる。クロック発生回路３０２は、記憶素子３０１からのクロック生成値に従ってクロック信号ＣＬＫの波形を変化させ、終了するとクリア信号を記憶素子３０１へ出力する。
【００３０】
具体的には、図３（Ｂ）に示すように、クロック発生回路３０２はクロック生成値がＮの時、クロック信号ＣＬＫをＮ回変動させる。たとえば、クロック生成値が１の時には、クロック信号ＣＬＫを１回変化させ（立ち上げ）、クロック生成値が２の時には、クロック信号ＣＬＫを２回変化させ（立ち上げと立ち下げ）、以下同様である。こうしてクロック生成値の回数だけクロック信号ＣＬＫを変化させた後、クリア信号をアクティブにして記憶素子３０１の値を０にリセットし、クロック信号ＣＬＫの変化をストップする。
【００３１】
このように、書き込みデータＷＤＡＴＡによって指定された数だけクロック信号ＣＬＫを変化させることできるために、被検証回路部分１０３のクロック信号ＣＬＫはバス１０に接続されたデバイスすべてから変更可能となる。
【００３２】
図４は第１実施形態におけるレジスタ２０２のブロック図である。レジスタ２０２は、被検証回路部分１０３の入力信号inputおよび入出力信号in/outの入力信号の数の合計と同じ個数の記憶素子４０１〜４０７を有する。ここでは、書き込みデータＷＤＡＴＡのビット幅が３、被検証回路部分１０３の入力信号および入出力信号の数の合計が７の場合を一例として示している。また、図中のＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇは、７個の入力信号および入出力信号をそれぞれ示す。なお、記憶素子４０１〜４０７はバスインターフェース１０１からのクロック信号で動作するが、簡略化のためにクロック信号の図示は省略されている。また書き込みデータＷＤＡＴＡ［０］〜ＷＤＡＴＡ［２］やセレクタ信号ＳＥＬ［０］〜ＳＥＬ［２］における［ｘ］は、その信号のビット番号を表している。
【００３３】
図４のようにレジスタ２０２を構成することで、各記憶素子をバス１０から一意に特定することができ、被検証回路部分１０３の入力信号および入出力信号Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇのすべての値をバス１０に接続されたデバイスすべてから変更可能である。たとえば、書き込みデータＷＤＡＴＡ［０］〜ＷＤＡＴＡ［２］＝（１，０，０）、アドレス信号ＡＤをデコードしたセレクタ信号ＳＥＬ［０］〜ＳＥＬ［２］＝（１，０，０）とすれば、書き込みイネーブル信号ＷＥがアクティブになり、図示されていないクロックが立ち上がった時点で、記憶素子４０１〜４０３にそれぞれデータ“１”、“０”、“０”が保持される。
【００３４】
図５は第１実施形態におけるセレクタ２０５のブロック図である。ここでは、送信データＴｘＤのビット幅が３、被検証回路部分１０３の出力信号outputおよび入出力信号in/outの出力信号の数の合計が８の場合を一例として示している。図中のＯＡ，ＯＢ，ＯＣ，ＯＤ，ＯＥ，ＯＦ，ＯＧ，ＯＨは、被検証回路部分１０３の出力信号outputを表す。
【００３５】
セレクタ２０５は３個のドライブ回路５０１〜５０３からなる。ドライブ回路５０１には被検証回路部分１０３からの出力信号ＯＡ，ＯＢ，ＯＣが入力端子Ｉ０〜Ｉ２にそれぞれ入力し、さらにセレクタ信号ＳＥＬTX［０］およびクロック信号ＣＬＫが入力する。ドライブ回路５０２には被検証回路部分１０３からの出力信号ＯＤ，ＯＥ，ＯＦが入力端子Ｉ０〜Ｉ２にそれぞれ入力し、さらにセレクタ信号ＳＥＬTX［１］およびクロック信号ＣＬＫが入力する。ドライブ回路５０３には被検証回路部分１０３からの出力信号ＯＧ，ＯＨおよび“０”が入力端子Ｉ０〜Ｉ２にそれぞれ入力し、さらにセレクタ信号ＳＥＬTX［２］およびクロック信号ＣＬＫが入力する。ドライブ回路５０１〜５０３の３個の出力端子はそれぞれ接続され、３ビットの送信データＴｘＤ［０］〜ＴｘＤ［２］をバスインターフェース１０１へ出力する。また、後述するように、ドライブ回路５０１〜５０３はそれぞれ送信要求信号ＴｘＲＱ［０］〜ＴｘＲＱ［２］を制御回路２０４へ出力する。
【００３６】
図６は、図５におけるドライブ回路の詳細な回路図である。ドライブ回路５０１〜５０３は、それぞれ３ステートバッファ６０１〜６０３と変更検出回路６０４とを有する。３ステートバッファ６０１〜６０３は、それぞれ入力端子Ｉ０〜Ｉ２からのデータを入力とし、セレクタ信号ＳＥＬTXを制御信号として送信データＴｘＤ［０］〜ＴｘＤ［２］を出力する。３ステートバッファ６０１〜６０３は、被検証回路を実装したプログラマブル素子が提供する３ステートバッファを使用することが望ましい。
【００３７】
また、変更検出回路６０４はクロック信号ＣＬＫと入力端子Ｉ０〜Ｉ２からのデータとを入力し、１サイクル前の入力信号から変化したか否かを検出し、変化したときに送信要求信号ＴｘＲＱを出力する。
【００３８】
図７は、図６における変更検出回路の詳細な回路図である。変更検出回路６０４は、入力端子Ｉ０〜Ｉ２にそれぞれ対応する記憶素子７０１〜７０３を有し、クロック信号ＣＬＫのタイミングで入力端子Ｉ０〜Ｉ２からのデータを保持する。さらに入力端子Ｉ０〜Ｉ２からのデータと記憶素子７０１〜７０３に保持された１サイクル前のデータとの排他的論理和をＥＸ−ＯＲ７０４〜７０６によって計算し、その結果をＯＲゲート７０７を通して送信要求信号ＴｘＲＱとして出力する。
【００３９】
制御回路２０４は、セレクタ信号ＳＥＬTXにより特定されるアドレスに対応する送信要求信号ＴｘＲＱがアクティブになると、そのアドレスを送信アドレス信号ＴｘＡＤとしてバスインターフェース１０１へ出力し、マスタ要求ＲＱをアクティブにする。これにより、バスインターフェース１０１に対して、セレクタ２０５からの送信データＴｘＤをバス１０に出力するように要求する。
【００４０】
バスインターフェース１０１はマスタ要求ＲＱがアクティブになると、バスコントローラ１１にバス１０の使用権を要求し、要求が受け付けられると、バス１０のバスマスタになる。その後、バスインターフェース１０１は、送信アドレス信号ＴｘＡＤおよびバースト数ＢＮの値に応じて、データ転送をバス１０に対して実行する。ただし、バスインターフェース１０１は、バス１０のマスタとして動作する時、セレクタ２０５がアドレスに対応した送信データＴｘＤを選択するように常にアドレス信号ＡＤを出力する。
【００４１】
図８は検証される回路を分割して複数のエミュレータに実装するまでの概略的な流れを示すフローチャートである。まず、複数の実装回路からなる回路全体のシミュレーションを行い回路全体の全信号の波形を求める（アーキテクチャ検証：ステップＳ１０１）。続いて、求められた信号波形から各信号の信号変化率の算出、回路分割に必要な通信発生パターンの算出および／または回路全体の貫通パスの探索を行う（ステップＳ１０２）。通信発生パターンおよび貫通パスについては後述する。なお、回路の分割に必要な情報はユーザインターフェース１３を通してユーザが与えてもよい。
【００４２】
続いて、通信発生パターンおよび／または貫通パスの情報に基づいて回路全体を分割するが、その分割の仕方は、後述するように、検証される回路が複数の実装回路に分割されたときにそれらの間で通信回数が最も少なくなるように行われる（ステップＳ１０３）。
【００４３】
続いて、各エミュレータに実装する被検証回路部分（１０３．１、１０３．２）の入力と出力とのバスアドレス空間における配置を決定する（ステップＳ１０４）。詳しくは後述するが、バースト転送が効率的に実行されるように、信号変化率に基づいて入力信号input、入出力信号in/outおよび出力信号outputのアドレス配置を決定する。決定されたアドレス配置から通信回路１０２を生成する（ステップＳ１０５）。
【００４４】
ステップＳ１０３において分割された被検証回路をエミュレータごとに生成し、またステップＳ１０５において通信回路１０２をエミュレータごとに生成すると、エミュレータ毎の被検証回路部分および通信回路をエミュレータに実装する（ステップＳ１０６）。実装する手法についてはエミュレータの構成によって異なる。たとえば、一つのエミュレータが一つのプログラマブル素子から構成される場合、あらかじめバスインターフェース１０１および通信回路１０２を用意する他に、被検証回路部分、通信回路１０２およびバスインターフェース１０１をインスタンスした最上位回路を合成ツールを用いて合成してもよく、その結果を配置配線しプログラマブル素子をコンフィグレーションする。
【００４５】
１．２）回路分割
次に、被検証回路の分割方法（ステップＳ１０１〜Ｓ１０３）についてさらに詳細に説明する。本実施形態では、通信発生パターンに基づいた分割方法と貫通パス情報に基づいた分割方法とを使用することができる。上述したように、複数の回路素子あるいは複数のモジュールからなる被検証回路は、分割された回路部分を実装する複数のエミュレータ間でバス１０を通した通信回数が最も少なくなるように分割される。ここで、被検証回路は複数の回路ユニットからなるものとし、各回路ユニットは１個または複数個の回路素子からなるものとする。
【００４６】
通信発生パターンに基づいた回路分割
通信発生パターンに基づいた回路分割の基本的な手順を次に示す。
【００４７】
Ａ１）  複数の回路ユニットから構成される被検証回路のハードウェア記述言語を読み込み、各回路ユニットの入力および出力の各々がどこの回路ユニットに接続しているかを解析する；
Ａ２）  エミュレータの数、各エミュレータの回路規模および各回路ユニットの回路規模を算出する。エミュレータの数および各エミュレータの回路規模はユーザが手動で与え、各回路ユニットの回路規模は当該回路ユニットに対するハードウェア記述言語を読み込んで推定する；
Ａ３）  被検証回路全体をソフトウェアシミュレータなどを用いて動作させ、各回路ユニットの各入出力信号が変化した回数と変化した時間を記憶して、回路ユニットの各組合せ間での時間的な通信発生パターンを生成する；および
Ａ４）  上記ステップＡ１〜Ａ３により得られた情報からエミュレータ間の通信回数が最小となるように被検証回路を分割する。たとえば、被検証回路を構成する複数の回路ユニットを複数のエミュレータに割り当てる組み合わせのすべてについて通信回数を計算（全探索）し、通信回数が最も少ない組合せを選択することで分割の仕方を決定することができる。その際、１個のエミュレータがエミュレートできる回路規模と同じくらいの回路となるように分割することができれば、エミュレータ間の通信をさらに少なくすることができる。
【００４８】
通信発生パターンに基づいた回路分割の理解を助けるために、簡単な例を用いて説明する。ここでは、４個の回路Ａ，Ｂ，Ｃ，Ｄを２個のエミュレータ１および２に実装する場合を想定し、各回路の回路規模は各エミュレータが実装できる回路規模の４０％程度であるものとする。
【００４９】
図９（Ａ）はすべての回路間での通信の有無を時間ごとに記録した通信発生パターンを示す図であり、図９（Ｂ）は回路分割の仕方と通信回数との関係を示す図である。図９（Ａ）に示すように、すべての組合せの回路間で時刻１〜９の間に行われた通信の有無を記録して通信発生パターンを得る。たとえば、回路Ａと回路Ｄとの組合せでは、時刻１，２，５，６，８，９において通信が発生している。
【００５０】
続いて、図９（Ｂ）に示すように、図９（Ａ）に示す情報から４個の回路Ａ，Ｂ，Ｃ，Ｄをエミュレータ１および２に割り当てたすべての場合についてエミュレータ間の通信回数をカウントする。たとえば、エミュレータ１に回路ＡおよびＢを、エミュレータ２に回路ＣおよびＤをそれぞれ割り当てた場合、エミュレータ１の回路Ａとエミュレータ２の回路Ｃとの間では時刻４，７で通信があり、回路ＡとＤとの間では時刻１，２，５，６，８，９において通信があり、回路ＢとＣとの間では時刻２，３，５，６，８において通信があるから、結局、すべての時刻１〜９で通信が必要であることがわかる。
【００５１】
このように、すべての組合せの回路間で通信発生パターンを求め、それらの通信パターンからすべての割り当て候補における通信回数を求めることで、図９（Ｂ）に示すように、エミュレータ１に回路ＡおよびＤを、エミュレータ２に回路ＢおよびＣをそれぞれ実装するのが最も通信回数を少なくする分割の仕方であることがわかる。
【００５２】
貫通パス情報に基づいた回路分割
貫通パス情報に基づいた回路分割の基本的な手順を次に示す。貫通パスは、各エミュレータがエミュレートする被検証回路の入力と出力との間に記憶素子を含まないパスとして定義される。エミュレータ間で貫通パスが多いと通信回数が多くなるので、エミュレータ間での貫通パスをできるだけ少なくするように回路を分割することが望ましい。
【００５３】
Ｂ１）  複数の回路ユニットから構成される被検証回路のハードウェア記述言語を読み込み、各回路ユニットの入力および出力の各々がどこの回路ユニットに接続しているかを解析する；
Ｂ２）  エミュレータの数、各エミュレータの回路規模および各回路ユニットの回路規模を算出する。エミュレータの数および各エミュレータの回路規模はユーザが手動で与え、各回路ユニットの回路規模は当該回路ユニットに対するハードウェア記述言語を読み込んで推定する；
Ｂ３）  被検証回路全体のハードウェア記述言語を読み込み、各回路ユニットに含まれる貫通パスの入力と出力とを記憶する；および
Ｂ４）  上記ステップＢ１〜Ｂ３により得られた情報から貫通パスの数が最小となるように被検証回路を分割する。たとえば、被検証回路を構成する複数の回路ユニットを複数のエミュレータに割り当てる組み合わせのすべてについて貫通パスを探索し、貫通パス数が最も少ない組合せを選択することで分割の仕方を決定することができる。その際、１個のエミュレータがエミュレートできる回路規模と同じくらいの回路となるように分割することができれば、エミュレータ間の通信をさらに少なくすることができる。
【００５４】
貫通パス情報に基づいた回路分割の理解を助けるために、簡単な例を用いて説明する。ここでは、４個の回路Ａ，Ｂ，Ｃ，Ｄを２個のエミュレータ１および２に実装する場合を想定し、各回路の回路規模は各エミュレータが実装できる回路規模の４０％程度であるものとする。
【００５５】
図１０（Ａ）は全回路で探索された貫通パスを示すブロック図、図１０（Ｂ）は回路の各組合せにおける貫通パスの本数を示す図、図１０（Ｃ）は回路分割の仕方と貫通パス本数との関係を示す図である。図１０（Ａ）に示すように、回路Ａでは回路Ｂからの入力と回路Ｄへの出力との間に記憶素子を含まないパスが存在するから、回路Ａ−Ｂ間および回路Ａ−Ｄ間でそれぞれ１本の貫通パスが存在する。各回路について同様に探索することで、図１０（Ｂ）に示す貫通パスの探索結果を得る。
【００５６】
続いて、図１０（Ｂ）に示す貫通パスの探索結果から、４個の回路Ａ，Ｂ，Ｃ，Ｄをエミュレータ１および２に割り当てたすべての場合についてエミュレータ間の貫通パス数をカウントする。たとえば、エミュレータ１に回路ＡおよびＢを、エミュレータ２に回路ＣおよびＤをそれぞれ割り当てた場合、エミュレータ１の回路Ａとエミュレータ２の回路Ｃとの間には貫通パスは存在せず、回路ＡとＤとの間で１本、回路ＢとＣとの間で１本および回路ＢとＤとの間で１本、合計３本の貫通パスが存在することがわかる。
【００５７】
このように貫通パス数をすべての組合せでカウントすると、図１０（Ｃ）に示すように、エミュレータ１に回路ＡおよびＢを、エミュレータ２に回路ＣおよびＤをそれぞれ実装するのがエミュレータ間で最も貫通パス数が少なくなる分割の仕方であることがわかる。
【００５８】
１．３）アドレス配置
次に、図８におけるステップＳ１０４のアドレス配置計算についてさらに詳細に説明する。ステップＳ１０４において、バースト転送が効率的に実行されるように、信号変化率に基づいて、各エミュレータに実装する被検証回路部分（１０３．１、１０３．２）の入力信号input、入出力信号in/outおよび出力信号outputのアドレス配置を決定する。
【００５９】
アドレス配置を決定する手法は、各エミュレータに実装する被検証回路部分の入力信号のうち信号変化率の高い順にアドレスを配置する。出力信号も同様に信号変化率の高い順にアドレスを配置する。このとき、入力信号および出力信号のアドレスは同じでも構わない。同じアドレスを配置することで、アドレスデコーダを小さくでき、一つのプログラマブル素子でバスインターフェース１０１、通信回路１０２および被検証回路１０３をエミュレートするような場合、被検証回路１０３に実装できる回路規模を大きくすることができる。また、信号変化率の高い順にアドレス配置することでバースト転送を効率よく使用できるため、データ通信にかかる時間を少なくすることができる。このことは結果として回路の検証速度向上につながる。
【００６０】
図１に示すバス構成を用いてアドレス配置の具体例を示す。ここでは、被検証回路部分１０３．１および１０３．２に実装される回路をそれぞれＡおよびＢとし、回路Ａの出力信号が送信データＴｘＤとしてバス１０を介して回路Ｂへ送信され、回路Ｂの入力信号になるものとする。さらに、バス１０のデータ幅は３２ビット、回路Ａの出力信号は、２つの３２ビットデータＶおよびＷ、同一タイミングで出力される２つの１６ビットデータＸおよびＹからなり、データＶは信号変化率１、ＸおよびＹは信号変化率０．９、および、Ｗは信号変化率０．０１であると仮定する。
【００６１】
この場合、出力信号Ｖ，Ｗ，Ｘ，Ｙは、信号変化率の高い順にバス１０のアドレス空間に配置されるから、たとえばデータＶにアドレス０ｘ０が、データＸ，Ｙにアドレス０ｘ４が、最後に信号変化率が最も低いデータＷがアドレス０ｘ８に、それぞれ配置される。
【００６２】
このように信号変化率の高い順に予め配置されるために、信号変化率の高いデータ同士は、近傍のあるいは連続したアドレスに配置され、しかも共に変化する確率が高い。したがって、バス１０がバースト転送をサポートしている場合、連続したアドレスに配置され変化したデータをまとめてバースト転送する場合が多くなり、データ転送速度を大幅に効率化することができる。
【００６３】
たとえばＰＣＩバスの場合には、シングルライトには２サイクル必要であるから、データＶおよびＸ，Ｙを転送する場合には、通常、計４サイクルが必要となる。これに対して、本実施形態では、ＰＣＩバスのバースト転送を利用して、同じデータＶ，Ｘ，Ｙを３サイクルで転送することができる。この１サイクル分少ない時間で転送できることは、実際のシステムに適用すればきわめて大きな効果となる。
【００６４】
１．４）動作検証
図１１は、第１実施形態による動作検証装置の動作を示すフローチャートである。ここでは、一方のエミュレータのほとんどの出力信号が他方のエミュレータの入力信号となり、一方のエミュレータの出力信号のうち他のエミュレータに接続されていないものは被検証回路の出力信号あるいは上位コンピュータシステム１２の観測用信号であり、被検証回路の入力信号のうち他のエミュレータの出力信号と接続されていないものは、被検証回路の最上位回路の入力信号である。これらの信号はすべてバスコントローラ１１によって制御される。なお、ここでは貫通パスがない場合を説明する。
【００６５】
まず、すべてのエミュレータ１および２、バスコントローラ１１の電源を投入する（ステップＳ２０１）。続いて、バスコントローラ１１は、上位コンピュータシステム１２の指令により、被検証回路の最上位の入力信号（エミュレータ１にあるとする）に値を定め、通信回路１０２．１を通して被検証回路部分１０３．１のリセットＲＳＴをアクティブにする。エミュレータ２についても同様に、通信回路１０２．２を通して被検証回路部分１０３．３のリセットＲＳＴをアクティブにする。これらの動作により被検証回路はリセットされる（ステップＳ２０２）。
【００６６】
次に、エミュレータ１は被検証回路部分１０３．１の出力信号の値とエミュレータ２の被検証回路部分１０３．２の入力信号の値とを同じにするために、バス制御権を要求する。リセット直後は、各エミュレータに実装された被検証回路部分の入力信号は不定なため、エミュレータ１およびエミュレータ２に実装された被検証回路部分のすべての出力信号を他方の入力に定める必要がある。そのため、通信回路１０２の制御回路２０４は被検証回路部分のリセットＲＳＴがアクティブになると、マスタ要求ＲＱをアクティブにする。これはエミュレータ１とエミュレータ２とで同時に起こるが、バスコントローラ１１は先にエミュレータ１にバス制御権を渡し、エミュレータ１をバスマスタする（ステップＳ２０３）。なお、バスコントローラ１１が先にエミュレータ２にバス制御権を渡しても問題はない。
【００６７】
バス制御権を取得したエミュレータ１は、エミュレータ２に対して、エミュレータ１に実装した被検証回路部分の出力信号および入出力信号について書き込みを行い、被検証回路部分１０３．２の入力信号を被検証回路部分１０３．１の出力信号と同じにする（ステップＳ２０４）。その後エミュレータ１はバス制御権を放棄する。
【００６８】
続いて、エミュレータ２は、被検証回路部分１０３．２の出力信号をエミュレータ１の被検証回路部分１０３．１の入力信号に定めるためにバス制御権を要求し、バスコントローラ１１はエミュレータ２にバスの制御権を渡す（ステップＳ２０５）。
【００６９】
バス制御権を取得したエミュレータ２は、エミュレータ１に対して、エミュレータ２に実装した被検証回路部分の出力信号および入出力信号について書き込みを行い、被検証回路部分１０３．１の入力信号を被検証回路部分１０３．２の出力信号と同じにする（ステップＳ２０６）。その後エミュレータ２はバス制御権を放棄する。
【００７０】
次に、バスコントローラ１１がバス制御権を取得し（ステップＳ２０７）、上位コンピュータシステム１２が起動時に設定したブレーク条件に一致している場合は（ステップＳ２０８のＹｅｓ）、状態を停止し、上位コンピュータシステム１２からの命令が来るまで待機する（ステップＳ２０９）。ただし、リセット直後のステップでは必ず停止し、上位コンピュータシステム１２からの命令を待つ。上位コンピュータシステム１２によって与えられたブレーク条件に一致しない場合は（ステップＳ２０８のＮｏ）、ステップＳ２１０へ進む。
【００７１】
ブレーク条件に一致している場合は（ステップＳ２０８のＹｅｓ）、ユーザに次にどのような操作を行うかユーザインターフェース１３を通じて指定されるまで待機する（ステップＳ２０９）。ユーザが指定できる命令は主に、ブレークの設定、ステップ命令、何サイクルまでユーザに意見を求めず動作させるか等である。それらはすべて上位コンピュータシステム１２を通じてバスコントローラ１１に格納される。バスコントローラ１１は、常に、設定された条件が成立するか否かを判断している（ステップＳ２０８）。
【００７２】
次に、バスコントローラ１１は、エミュレータ１に実装された回路部分１０３．１に供給するクロックＣＬＫをアクティブにする（ステップＳ２１０）。クロックＣＬＫをアクティブにした後、エミュレータ１の被検証回路部分１０３．１の出力信号が変更された場合、エミュレータ１はバス制御権を要求してくるが、バスコントローラ１１はそれにまだ応じない。
【００７３】
続いて、バスコントローラ１１は、エミュレータ２に実装された回路部分１０３．２に供給するクロックＣＬＫをアクティブにする（ステップＳ２１１）。クロックＣＬＫをアクティブにした後、エミュレータ２の被検証回路部分１０３．２の出力信号が変更された場合、エミュレータ２はバス制御権を要求してくるが、バスコントローラ１１はそれにまだ応じない。こうして、制御はステップＳ２０３へ戻り、以下上記ステップＳ２０３からＳ２１１を繰り返す。
【００７４】
このように、被検証回路部分をそれぞれ実装したエミュレータもバスマスタになることができるために、バスマスタになったエミュレータは変化した信号だけを相手側へ転送することができ、結果としてエミュレータ間の通信回数を削減することができる。
【００７５】
２．第２実施形態
２．１）システム構成
図１２は本発明の第２実施形態による回路検証装置の概略的ブロック構成図である。第２実施形態においても、第１実施形態と同様に、エミュレータ１および２はバス１０に接続され、バス１０にはさらにバスコントローラ８０４が接続されているが、第２実施形態ではバスコントローラ８０４以外はバスマスタになりえず、エミュレータ１およびエミュレータ２は常にバスのスレーブデバイスとして動作する。
【００７６】
また、バスコントローラ８０４は、被検証回路内部の指定された信号の値を順次保存するためのメモリ８０５を有する。被検証回路内部のどの信号を指定するかは、ユーザがユーザインターフェース１３を通してバスコントローラ８０４に予め指示しておく。たとえば、ブレーク条件を設定した信号を指定しておく。
【００７７】
エミュレータ１およびエミュレータ２が常にバスのスレーブデバイスとして動作するために、エミュレータ１および２におけるバスインターフェース８０１および通信回路８０２は、いずれもバスマスタ動作をサポートする必要がなく、より単純に構成することができる。
【００７８】
図１３は本発明の第２実施形態におけるエミュレータの詳細な構成を示すブロック図である。エミュレータ１およびエミュレータ２における通信回路８０２は、第１実施形態における通信回路１０２から制御回路２０４を除いた構成を有する。したがって、図２と同じ機能を有するブロックおよび同じ信号には同一参照番号／符号を付して説明は省略する。
【００７９】
図１３において、セレクタ２０５から出力される送信要求ＴｘＲＱはセレクタ２０５自身の入力信号となる。送信要求ＴｘＲＱは、すでに述べたように、変更検出回路６０４から出力されるために、セレクタ２０５のドライブ回路に入力することで、被検証回路部分８０３の出力信号のうち、どのアドレスが１サイクル前と値が変化したのかを知ることができる。この機能により無駄なデータ転送が省略でき、バスコントローラ以外がバスマスタになることができないシステムにおいても動作速度を向上させることができる。
【００８０】
図１４は、第２実施形態における被検証回路の分割から複数のエミュレータへの実装までの概略的な流れを示すフローチャートである。図８に示す第１実施形態と同じステップには同一参照番号を付して説明は省略する。第２実施形態における被検証回路実装フローでは、各エミュレータに実装した被検証回路部分の貫通パスを解析するステップＳ３０１が追加されている。ステップＳ３０１では、各エミュレータに実装した被検証回路部分の貫通パスを探索し、後述するバスコントローラ８０４の動作において使用される。
【００８１】
２．２）貫通パス
貫通パスとは、すでに定義したように、被検証回路部分の入力信号と出力信号との間に記憶素子が一つもない内部パスを含むパスをいう。
【００８２】
図１５はエミュレータ間での貫通パスの一例を示す模式図である。この例では、被検証回路部分８０３．１の入力信号Ｓ２と出力信号Ｓ３との間に記憶素子を含まないパスＰ２が存在し、被検証回路部分８０３．２の入力信号Ｓ４と出力信号Ｓ５との間に記憶素子を含まないパスＰ４が存在するものとする。この場合、被検証回路部分８０３．２に含まれる記憶素子１００１の出力である信号Ｓ１を被検証回路部分８０３．１の入力信号Ｓ２にパスＰ１を通して接続し、被検証回路部分８０３．１の出力信号Ｓ３を被検証回路部分８０３．２の入力信号Ｓ４にパスＰ３を通して接続し、被検証回路部分８０３．２の出力信号Ｓ５を被検証回路部分８０３．１に含まれる記憶素子１００２の入力となる信号Ｓ６にパスＰ５を通して接続すれば、記憶素子１００１からパスＰ１、Ｐ２、Ｐ３、Ｐ４、およびＰ５を通して記憶素子１００２に至るまでが貫通パスとなる。
【００８３】
２．３）動作検証
図１６は、本発明の第２実施形態による動作検証装置の動作を示すフローチャートである。上述したように、第２実施形態ではバスコントローラ８０４だけがバスマスタになるために、各エミュレータの入力信号の設定や信号の読み取りなどはすべてバスコントローラ８０４が行う。また、ユーザによって予め指定された信号の履歴は、メモリ８０５に順次格納される。
【００８４】
図１６において、電源が投入され（ステップＳ４０１）、図１１で説明したようにリセット処理を行うと（ステップＳ４０２）、バスコントローラ８０４はエミュレータ１の出力信号を読み取り（ステップＳ４０３）、接続先のエミュレータ２の入力信号を設定する（ステップＳ４０４）。同様に、バスコントローラ８０４はエミュレータ２の出力信号を読み取り（ステップＳ４０５）、接続先のエミュレータ１の入力信号を設定する（ステップＳ４０６）。
【００８５】
エミュレータの出力信号を読み込む際、無駄な読み込みを防ぐために、セレクタ２０５の変更検出回路からの送信要求ＴｘＲＱを読み出して、変更されたアドレスだけを読み込むことが望ましい。ただし、送信要求ＴｘＲＱを読み出すよりもバースト転送で一気に読み出した方が早い場合はそれを利用する。バースト転送で読み出す場合は無駄なデータを読み込む可能性もあるが、結果的にはバースト転送の方が読み込み速度は速くなる。
【００８６】
次に、バスコントローラ８０４は、上記ステップＳ３０１で予め解析してある貫通パスを通るデータを転送する（ステップＳ４０７）。続いて、バスコントローラ８０４は、メモリ８０５に格納したブレーク条件に一致したか否かを判定し（ステップＳ４０８）、一致している場合は（ステップＳ４０８のＹｅｓ）、状態を停止し、ユーザに次にどのような操作を行うかユーザインターフェース１３を通じて指定されるまで待機する（ステップＳ４０９）。ブレーク条件に一致しない場合は（ステップＳ４０８のＮｏ）、ステップＳ４１０へ進む。
【００８７】
ユーザ設定ステップＳ４０９において、ユーザは、ブレークの設定、ステップ命令、何サイクルまでユーザに意見を求めず動作させるか等を設定することができる。その際、メモリ８０５には、指定された信号の履歴が格納されているから、ユーザは表示装置１４を通して指定した信号の過去の値を参照することができ、回路のデバッグ等に役立つ。
【００８８】
以下、図１１と同様に、バスコントローラ８０４は、エミュレータ１に実装された回路部分１０３．１に供給するクロックＣＬＫをアクティブにし（ステップＳ４１０）、続いてエミュレータ２に実装された回路部分１０３．２に供給するクロックＣＬＫをアクティブにしてから（ステップＳ４１１）、ステップＳ４０３へ戻り、以下上記ステップＳ４０３からＳ４１１を繰り返す。
【００８９】
次に、ステップＳ４０７における貫通パスの転送について、図１５に示す貫通パスを例にとって説明する。まず、ステップＳ４０２のリセット処理によって記憶素子１００１の出力信号Ｓ１は値が定まっている。つぎにステップＳ４０５およびＳ４０６により出力信号Ｓ１の値は、エミュレータ１の入力信号Ｓ２に転送されている。上述したようにパスＰ１〜Ｐ５は貫通パスを構成しているから、貫通パス転送ステップＳ４０７では、被検証回路部分１０３．１の出力信号Ｓ３の値を被検証回路１０３．２の入力信号Ｓ４に転送し、さらに被検証回路１０３．２の出力信号Ｓ５を被検証回路１０３．１の入力信号Ｓ６に転送する。上述したように、信号の転送は、出力信号Ｓ１の値が前回の値よりも変更された時あるいはリセット時にバスコントローラ８０４によって行われる。また、上述したように、貫通パスの信号が複数ある場合には、それらをバスアドレス空間における同じアドレスあるいは近くのアドレスに配置することにより、まとめて転送したりバースト転送を利用したりできるために、貫通パス転送のための時間を短縮することができる。
【００９０】
３．第３実施形態
上記第１および第２実施形態では、被検証回路を２つに分割してそれぞれエミュレータ１および２に実装したが、本発明は２分割構成に限定されるものではない。上述したように、被検証回路は分割後のエミュレータ間で通信回数が最も少なくなるように所望の数に分割することが可能である。どのように分割しても、各エミュレータは上述した基本構成を有し、バス１０により相互に接続され、全体として被検証回路の動作検証が実行される。
【００９１】
同様に、本発明によれば、被検証回路を複数のシミュレーションデバイス、すなわちエミュレータおよび／またはシミュレータ、に分割し、それらをバス１０によって相互接続することも容易である。以下、本発明の第３実施形態として、２つのエミュレータと１つのシミュレータとをバス１０で接続した形態の動作検証装置について説明する。
【００９２】
図１７は本発明の第３実施形態による回路検証装置の概略的ブロック構成図である。本実施形態では、第１実施形態と同様に回路部分１０３．１および１０３．２がそれぞれエミュレータ１および２に実装され、さらに被検証回路のロジック部を実際に動作させるシミュレータ３がバス１０に追加されている。
【００９３】
シミュレータ３は、バス１０と通信をするためのバスインターフェース１１０１、メモリ１１０２、および、被検証回路のロジック部分を実際に動作させるシミュレーションエンジン１１０３から構成される。メモリ１１０２は、シミュレーションエンジン１１０３でシミュレーションされる回路部分の入力信号および出力信号を一時的に保持する。シミュレーションエンジン１１０３はイベントドリブン形式なので、入力信号が変動することによって計算が実行され、その計算結果である出力信号がメモリ１１０２に書き込まれる。
【００９４】
また、バスインターフェース１１０１は、エミュレータのバスインターフェース１０１および通信回路１０２と同じように、シミュレーションエンジン１１０３の出力信号のメモリ１１０２に格納されたもののうち、値が一サイクル前と変化した位置のデータのみを接続先のエミュレータへ転送する。
【００９５】
なお、本実施形態による動作検証装置は、第１実施形態と同様に、バスコントローラ１１、エミュレータ１、エミュレータ２およびシミュレータ３のすべてがバス１０のバスマスタになることができるものとする。
【００９６】
図１８は、本発明の第３実施形態による動作検証装置の動作を示すフローチャートである。電源が投入され（ステップＳ５０１）、図１１で説明したようにリセット処理を行うと（ステップＳ５０２）、エミュレータ１はバス制御権を要求し、バスマスタとなる（ステップＳ５０３）。
【００９７】
バスマスタとなったエミュレータ１は、被検証回路部分１０３．１の変化した出力信号をエミュレータ２の被検証回路部分１０３．２の入力信号として転送し、かつ、シミュレータ３のメモリ１１０２に保持されている入力信号として転送する（ステップＳ５０４）。その後エミュレータ１はバス制御権を放棄する。
【００９８】
続いて、エミュレータ２がバス制御権を要求し、バスマスタとなる（ステップＳ５０５）。バスマスタになったエミュレータ２は、被検証回路部分１０３．２の変化した出力信号をエミュレータ１の被検証回路部分１０３．１の入力信号として転送し、かつ、シミュレータ３のメモリ１１０２に保持されている入力信号として転送する（ステップＳ５０６）。その後エミュレータ２はバス制御権を放棄する。
【００９９】
続いて、シミュレータ３がバス制御権を要求し、バスマスタとなる（ステップＳ５０７）。バスマスタになったシミュレータ３は、メモリ１１０２の変化した出力信号をエミュレータ１の被検証回路部分１０３．１およびエミュレータ２の被検証回路部分１０３．２の入力信号として転送する（ステップＳ５０８）。その後シミュレータ３はバス制御権を放棄する。
【０１００】
次に、バスコントローラ１１がバス制御権を取得し（ステップＳ５０９）、マスタ要求ＲＱがあるか否かを判定する（ステップＳ５１０）。マスタ要求ＲＱがある場合には（ステップＳ５１０のＹＥＳ）、要求を受け入れて転送を許可し（ステップＳ５１１）、ステップＳ５１０へ戻る。マスタ要求ＲＱが内場合には（ステップＳ５１０のＮＯ）、上位コンピュータシステム１２が起動時に設定したブレーク条件に一致しているか否かを判定する（ステップＳ５１２）。一致している場合は（ステップＳ５１２のＹｅｓ）、状態を停止して、すでに説明したようにユーザ設定を行い（ステップＳ５１３）、一致しない場合は（ステップＳ５１２のＮｏ）、そのままステップＳ５１４へ進む。
【０１０１】
次に、バスコントローラ１１は、エミュレータ１に実装された回路部分１０３．１に供給するクロックＣＬＫをアクティブにし（ステップＳ５１４）、続いて、エミュレータ２に実装された回路部分１０３．２に供給するクロックＣＬＫをアクティブにする（ステップＳ５１５）。
【０１０２】
次に、バスコントローラ１１は、シミュレータ３のバスインターフェース１１０１に対して一サイクル進む要求を送信し、これによってシミュレータエンジン１１０３におけるクロック信号を変更する（ステップＳ５１６）。シミュレータエンジン１１０３で動作させている被検証回路の入力信号が変更された場合、バスインターフェース１１０１はメモリ１１０２に値を書き込むだけでなく、どの信号がどのように変更されたのかシミュレータエンジン１１０３に知らせる。この入力信号変動通知に応じて、シミュレータエンジン１１０３はその変更を反映するように計算し、回路シミュレーションを実行する。このシミュレーションの結果はメモリ１１０２に書き込まれる。こうして、制御はステップＳ５０３へ戻り、以下上記ステップＳ５０３〜Ｓ５１６を繰り返す。
【０１０３】
４．第４実施形態
図１９は本発明の第４実施形態による動作検証装置を示す概略的ブロック図である。本実施形態では、バス１０にプログラム制御プロセッサ１２０１を接続し、プログラム制御プロセッサ１２０１がＲＯＭに格納された動作検証プログラム１２０２を実行することで、上述したバスコントローラ１１および上位コンピュータシステム１２の機能を実現している。プログラム制御プロセッサ１２０１により実行される動作は第１〜第３実施形態で説明した動作と同じであるから説明は省略する。
【図面の簡単な説明】
【０１０４】
【図１】本発明の第１実施形態による回路検証装置の概略的ブロック構成図である。
【図２】本発明の第１実施形態におけるエミュレータの詳細な構成を示すブロック図である。
【図３】（Ａ）は第１実施形態におけるクロック制御回路２０１のブロック図であり、（Ｂ）はクロック制御回路２０１により生成されるクロック波形の一例を示す波形図である。
【図４】第１実施形態におけるレジスタ２０２のブロック図である。
【図５】第１実施形態におけるセレクタ２０５のブロック図である。
【図６】図５におけるドライブ回路の詳細な回路図である。
【図７】図６における変更検出回路の詳細な回路図である。
【図８】検証される回路を分割して複数のエミュレータに実装するまでの概略的な流れを示すフローチャートである。
【図９】（Ａ）はすべての回路間での通信の有無を時間ごとに記録した通信発生パターンを示す図であり、（Ｂ）は回路分割の仕方と通信回数との関係を示す図である。
【図１０】（Ａ）は全回路で探索された貫通パスを示すブロック図、（Ｂ）は回路の各組合せにおける貫通パスの本数を示す図、（Ｃ）は回路分割の仕方と貫通パス本数との関係を示す図である。
【図１１】第１実施形態による動作検証装置の動作を示すフローチャートである。
【図１２】本発明の第２実施形態による回路検証装置の概略的ブロック構成図である。
【図１３】本発明の第２実施形態におけるエミュレータの詳細な構成を示すブロック図である。
【図１４】第２実施形態における被検証回路の分割から複数のエミュレータへの実装までの概略的な流れを示すフローチャートである。
【図１５】エミュレータ間での貫通パスの一例を示す模式図である。
【図１６】本発明の第２実施形態による動作検証装置の動作を示すフローチャートである。
【図１７】本発明の第３実施形態による回路検証装置の概略的ブロック構成図である。
【図１８】本発明の第３実施形態による動作検証装置の動作を示すフローチャートである。
【図１９】本発明の第４実施形態による回路検証装置の概略的ブロック構成図である。
【符号の説明】
【０１０５】
１  エミュレータ
２  エミュレータ
３  シミュレータ
１０  バス
１１  バスコントローラ
１２  上位コンピュータシステム
１３  ユーザインターフェース
１４  表示装置
１０１  バスインターフェース
１０２  通信回路
１０３  被検証回路部分
【図１】
2005084957.tif 000003
【図２】
2005084957.tif 000004
【図３】
2005084957.tif 000005
【図４】
2005084957.tif 000006
【図５】
2005084957.tif 000007
【図６】
2005084957.tif 000008
【図７】
2005084957.tif 000009
【図８】
2005084957.tif 000010
【図９】
2005084957.tif 000011
【図１０】
2005084957.tif 000012
【図１１】
2005084957.tif 000013
【図１２】
2005084957.tif 000014
【図１３】
2005084957.tif 000015
【図１４】
2005084957.tif 000016
【図１５】
2005084957.tif 000017
【図１６】
2005084957.tif 000018
【図１７】
2005084957.tif 000019
【図１８】
2005084957.tif 000020
【図１９】
2005084957.tif 000021