(57)【要約】【課題】  本発明の課題は、半導体集積回路の論理回路をシミュレーションするする装置に関し、特に、ハードウェアとソフトウェアとの協調動作によって論理回路を検証することを目的とする。【解決手段】  上記課題は、評価回路の論理回路部を表すハードウェアと、前記評価回路の動作モデルとして機能する動作モデル部とを用いてシミュレーションする協調シミュレーション装置であって、前記ハードウェアは、該ハードウェア内部で検出した信号の変化毎に生成した第1番号を、該信号の変化を前記ソフトウェアに通知するデータに付加する第１番号付加手段を有し、前記動作モデル部は、受信した前記データの前記第1番号と、第１期待値とを比較する比較手段として機能することにより達成される。【選択図】  図４
2011039781.tif 000002
【特許請求の範囲】
【請求項１】
評価回路の論理回路部を表すハードウェアと、前記評価回路の動作モデルとして機能する動作モデル部とを用いてシミュレーションする協調シミュレーション装置であって、
前記ハードウェアは、
該ハードウェア内部で検出した信号の変化毎に生成した第1番号を、該信号の変化を前記ソフトウェアに通知するデータに付加する第１番号付加手段を有し、
前記動作モデル部は、
受信した前記データの前記第1番号と、第１期待値とを比較する比較手段として機能することを特徴とする協調シミュレーション装置。
【請求項２】
前記ハードウェアは、前記動作モデル部への通知毎に生成した第２番号を前記データに付加する第２番号付加手段を有し、
前記比較手段として機能する前記動作モデル部は、前記データに付加された前記第２番号と、第２期待値とを比較することを特徴とする付記１記載の協調シミュレーション装置。
【請求項３】
前記ハードウェアは、前記動作モデル部への前記データの通知を制御する制御手段を更に有し、
前記制御手段は、前記データの通知中でない状態で、前記信号の変化が次にＬｏｗからＨｉｇｈとなる順番においてＬｏｗからＨｉｇｈへの変化を検出した場合、または前記信号の変化が次にＨｉｇｈからＬｏｗとなる順番においてＨｉｇｈからＬｏｗへの変化を検出した場合に、前記ソフトウェアへ前記データを通知するように制御することを特徴とする請求項１又は２記載の協調シミュレーション装置。
【請求項４】
半導体集積回路の論理回路をエミュレーションするエミュレーション装置であって、
前記エミュレーション装置内部で検出した信号の変化毎に生成した第１番号を該信号の変化を通知するデータに付加する第１番号付加手段と、
前記第１通し番号が付加された前記データの、前記半導体集積回路のプロセッサをシミュレーションするシミュレーション装置への通知を制御する制御手段とを有することを特徴とするエミュレーション装置。
【請求項５】
半導体集積回路のプロセッサをシミュレーションするシミュレーション装置におけるシミュレーション方法であって、
前記半導体集積回路のプロセッサ以外の論理回路をエミュレーションするエミュレーション装置から、該エミュレーション装置内で検出した信号の変化毎に生成した第１番号、又は、該エミュレーション装置によって該信号の変化の通知毎に生成した第２番号の少なくとも１つが付加されたデータを、コールバック関数を用いて取得するデータ取得手順と、
前記データに付加された前記第１番号又は前記第２番号の少なくとも１つを、少なくとも１つの期待値と比較する比較手順とを有することを特徴とするシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路（以下、ＬＳＩと言う）の論理回路をシミュレーションする装置に関し、特に、ハードウェアとソフトウェアとの協調動作によって論理回路を検証する協調シミュレーション装置及びシミュレーション方法に関する。
【背景技術】
【０００２】
従来より、ＣＰＵ等を含むシステムＬＳＩを開発する際には、事前に論理回路でシミュレーションをして動作確認することが行なわれている。論理回路を記述するＲＴＬ（Register Transfer Level）にてシミュレーションするＲＴＬシミュレータでは、ハード動作のシミュレーション結果は非常に精度が良いが、ソフトウェアを動作させて確認する場合には、非常にシミュレーションに時間がかがり作業負荷が大きい。
【０００３】
マイコンのソフトウェアを開発する場合の方法として、ソフトウェア開発用の装置ＩＣＥ（In Circuit Emulator）を使用して、評価ボードに予め搭載しているソケットから信号の送受信を行い、外部装置との通信を行なう方法がある。ＩＣＥを用いた検証では、評価を行なうためのＬＳＩ（これを評価用chip又はEVA-chipと呼ぶことがある）を作成する必要があるが、このEVA-chipの開発には時間を要する。
【０００４】
EVA-chipを用いない他の方法として、ソフトウェアデバッグ用に、擬似的にＣＰＵの動作をするソフトウェアモデルであるＩＳＳ（Instruction Set Simulator）と、擬似的なＲＯＭ、ＲＡＭ、及び通信マクロとを組み合わせたシミュレータを用いて、ソフトウェアデバッグを行なう方法がある。この方法では、ＩＳＳシミュレータは、ソフトウェアで構成されており外部装置と通信することができない。また、通信マクロもソフトウェアで構成した擬似モデルであり、外部装置と通信することができない。
【０００５】
外部装置と通信可能とするため、例えば、ソフトウェアデバッグを行なうＰＣ（パーソナルコンピュータ）にＦＰＧＡ（Field Programmable Gate Array）等を搭載したＰＣＩボートを設置し、そのＦＰＧＡと外部通信装置とを通信ケーブルで接続し、ソフトウェアのデバッグをするハードウェア／ソフトウェア協調シミュレータ（Co-Simulator）が行なわれるようになった。このような構成によって、実際に外部通信装置と接続して、ソフトウェアのデバッグができるようになった。
【０００６】
ハードウェア／ソフトウェア協調シミュレータの動作環境では、動作クロックに依存するＦＰＧＡ等のハードウェア動作環境と、その動作クロックに依存しないソフトウェアモデルのＩＳＳのソフトウェア動作環境との協調動作では、ハードウェアとソフトウェア間での信号授受のタイミング制御が問題となってくる。
【０００７】
そのために、例えば、ハードウェアエミュレータからシステムシミュレータに出力する出力信号が変化した時のみシステムエミュレータに対し変化検出信号を出力したり、初回のシミュレーション実行時における信号の変化回数に基づいてシミュレーションが再度実行された際には、その変化回数に用いて必要となる信号のみをシステムシミュレータが読み出したりすることにより、信号の通信量を制限してシミュレーションの動作スピードを改善することが提案されている（例えば、特許文献１、２を参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−３３２１６２号公報
【特許文献２】特開２００６−３３１２６９号公報
【特許文献３】特開２００７−９４５９１号公報
【特許文献４】特開平１０−３１２３１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記従来のハードウェア／ソフトウェア協調シミュレータでは、ソフトウェア側の処理よりもハードウェア側の速度が速いことによる、ハードウェア側にて発生した信号をＩＳＳモデル側に通知する際のソフトウェア側における信号線の変化を処理できないといった問題を解決することができない。
【課題を解決するための手段】
【００１０】
開示の協調シミュレーション装置は、評価回路の論理回路部を表すハードウェアと、前記評価回路の動作モデルとして機能する動作モデル部とを用いてシミュレーションする装置であって、前記ハードウェアは、該ハードウェア内部で検出した信号の変化毎に生成した第1番号を、該信号の変化を前記ソフトウェアに通知するデータに付加する第１番号付加手段を有し、前記動作モデル部は、受信した前記データの前記第1番号と、第１期待値とを比較する比較手段として機能する。
【発明の効果】
【００１１】
開示の協調シミュレーション装置において、ハードウェア側にて検出した信号の変化を通知するデータに通し番号が付加されることにより、その通し番号と期待値との比較によって、ソフトウェア側の処理がハードウェア側の処理速度より遅いことに起因して、信号の変化の通知ができなかったか否かを判断することができる。
【図面の簡単な説明】
【００１２】
【図１】協調シミュレーション装置のハードウェア構成を示すブロック図である。
【図２】協調シミュレーションの動作環境例を示す図である。
【図３】協調シミュレーションにおけるデータ送受信の仕組みを説明するための図である。
【図４】トランザクタの構成例を示す図である。
【図５】データフォーマットの例を示す図である。
【図６】シミュレータ制御部での処理を説明するためのフローチャート図である。
【図７】ＣＰＵ（ＩＳＳ）モデルでの処理を説明するためのフローチャート図である。
【図８】シミュレータ制御部によって表示される画面構成例を示す図である。
【図９】トランザクタのタイムチャートを示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態を図面に基づいて説明する。本実施例におけるハードウェアとソフトウェアとの協調動作によって論理回路を検証する協調シミュレーション装置１００は、例えば、図１に示すようなハードウェア構成を有する。図１は、協調シミュレーション装置のハードウェア構成を示すブロック図である。
【００１４】
図１において、協調シミュレーション装置１００は、コンピュータによって制御される端末であって、ＣＰＵ（Central Processing Unit）１１と、メモリユニット１２と、表示ユニット１３と、出力ユニット１４と、入力ユニット１５と、通信ユニット１６と、記憶装置１７と、ドライバ１８とを有し、バスＢに接続される。協調シミュレーション装置１００は、更にハードウェアエミュレータとして動作するＦＰＧＡ（Field Programmable Gate Array）４を搭載したＰＣＩボード３を実装することによって、ハードウェア／ソフトウェア協調シミュレーションの動作環境を成す。
【００１５】
ＣＰＵ１１は、メモリユニット１２に格納されたシミュレーションプログラムに従って協調シミュレーション装置１００を制御する。シミュレーションプログラムは、ＣＰＵ１１によって実行されることにより、後述されるシミュレータ制御部として機能する他、評価チップのプロセッサを含む構成部を擬似的に表現することにより、ＩＳＳ（Instruction Set Simulator）モデルによって擬似的に評価チップのターゲットプロセッサとして動作し、また、ＲＯＭモデル及びＲＡＭモデルによって評価チップのＲＯＭ及びＲＡＭの動作を擬似的に行う。更に、例えばＳＣＥ−ＭＩ（Standard Co-Emulation and Modeling Interface）を介してＦＰＧＡ４とのデータ送受信を行うハードウェアトランザクタのためのプロキシ（proxy）として動作する。また、シミュレーションプログラムは、ＣＰＵ１１によって実行されることにより、デバッグに必要なＧＵＩを表示ユニット１３に表示したり、入力ユニットから入力された指示に応じてシミュレーションを制御する等のデバッグ環境をユーザへ提供する。
【００１６】
メモリユニット１２には、ＲＡＭ（Random Access Memory）やＲＯＭ（Read-Only Memory）等が用いられ、ＣＰＵ１１にて実行されるシミュレーションプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を格納する。また、メモリユニット１２の一部の領域が、ＣＰＵ１１での処理に利用されるワークエリアとして割り付けられている。
【００１７】
表示ユニット１３は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。出力ユニット１４は、プリンタ等を有し、ユーザからの指示に応じて各種情報を出力するために用いられる。入力ユニット１５は、マウス、キーボード等を有し、ユーザが協調シミュレーション装置１００が処理を行なうための必要な各種情報を入力するために用いられる。通信ユニット１６は、例えばインターネット、ＬＡＮ（Local Area Network）等に接続し、外部装置との間の通信制御をするための装置である。記憶装置１７には、例えば、ハードディスクユニットが用いられ、各種処理を実行するプログラム等のデータを格納する。
【００１８】
協調シミュレーション装置１００よって行われる処理を実現するシミュレーションプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によって協調シミュレーション装置１００に提供される。即ち、シミュレーションプログラムが保存された記憶媒体１９がドライバ１８にセットされると、ドライバ１８が記憶媒体１９からプログラムを読み出し、その読み出されたシミュレーションプログラムがバスＢを介して記憶装置１７にインストールされる。そして、プログラムが起動されると、記憶装置１７にインストールされたシミュレーションプログラムに従ってＣＰＵ１１がその処理を開始する。
【００１９】
尚、シミュレーションプログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。本実施例に係る処理を実現するプログラムは、通信ユニット１６によってネットワークを介してダウンロードし、記憶装置１７にインストールするようにしても良い。また、ＵＳＢ対応の協調シミュレーション装置１００であれば、ＵＳＢ接続可能な外部記憶装置からインストールするようにしても良い。更に、ＳＤカード等のフラッシュメモリ対応の協調シミュレーション装置１００であれば、そのようなメモリカードからインストールするようにしても良い。
【００２０】
ＦＰＧＡ４は、ＲＴＬ（Register Transfer Level）等のハードウェア記述言語によるプログラムによって論理回路として動作するプログラマブル素子を有するハードウェアエミュレータであり、ＰＣＩボード３に搭載される。評価チップの論理回路の動作を実行するＲＴＬプログラムがロードされたＦＰＧＡ４を搭載したＰＣＩボード３が、協調シミュレーション装置１００に実装される。
【００２１】
図２は、協調シミュレーションの動作環境例を示す図である。図２において、協調シミュレーション装置１００は、ＦＰＧＡ４が実装したＰＣＩボード３を搭載し、ＦＰＧＡ４が通信ケーブル５によって外部通信装置６に接続されることによって、外部通信装置６と通信可能となる。
【００２２】
協調シミュレーション装置１００は、本発明に係るシミュレーションプログラムを実行することによって、シミュレータ制御部２０と、動作モデル２３として機能する。動作モデル２３は、例えば、評価チップの通信機能部分を除く構成部を擬似的にソフトウェアで実現する部分であって、ＣＰＵ（ＩＳＳ）モデル２３ａと、ＲＯＭモデル２３ｂと、ＲＡＭモデル２３ｃと、プロキシ２３ｄとを有する。ＲＯＭモデル２３ｂには、ユーザプログラム２３ｕが含まれている。
【００２３】
ＣＰＵ（ＩＳＳ）モデル２３ａは、評価ＬＳＩのターゲットプロセッサとして動作し、ＲＯＭモデル２３ｂとＲＡＭモデル２３ｃとを制御して、ＲＯＭモデル２３ｂに格納されているユーザプログラム２３ｕを実行する。また、ＣＰＵ（ＩＳＳ）モデル２３ａは、評価ＬＳＩの通信部分となるＦＰＧＡ４の通信マクロ４２とのデータ送受信をプロキシ２３ｄを介して行なう。
【００２４】
ＦＰＧＡ４は、論理回路の動作をハードウェア記述言語で記述した論理回路マクロをエミュレーションするハードウェアエミュレータであり、トランザクタ４１と、通信マクロ４２とを有する。トランザクタ４１は、ＳＣＥ−ＭＩに対応したデータ送受信を制御する。通信マクロ４２は、例えば、評価ＬＳＩのうちターゲットプロセッサ以外の論理回路の動作をＲＴＬ等のハードウェア記述言語によって記述したプログラムであり、ＦＰＧＡ４のプログラマブル素子にロードされている。
【００２５】
図３は、協調シミュレーションにおけるデータ送受信の仕組みを説明するための図である。図３（Ａ）において、動作モデル２３のＣＰＵ（ＩＳＳ）モデル２３ａによって実行されるハードウェア側のＦＰＧＡ４からデータを受信するためのプログラム例が、シミュレーションプログラム２３ｍで示される。
【００２６】
協調シミュレーション装置１００とＦＰＧＡ４とのアクセスのやり取りにおいて、ＣＰＵ（ＩＳＳ）モデル２３ａがシミュレーションプログラム２３ｍ内のＳＣＥ−ＭＩで提供されるＣの関数Service_loop()を呼ぶことにより、ＦＰＧＡ４からデータの受信があれば、予めcallbackとして宣言された関数IsReady()にジャンプし、その関数の中で、変数に代入することによりデータを受信する。
【００２７】
ＦＰＧＡ４では、送信を行う信号線としてデータ受信可能ReceiveReady信号、データ送信可能TransmitReady信号、及びデータData[31:0]信号がインターフェイス信号として存在する。ＩＳＳモデル２３ａ側がデータを受信可能な場合はデータ受信可能ReceiveReady信号がＨｉｇｈとなる。通信マクロ４２からの割込み信号などの信号に応じてＦＰＧＡ４側からＩＳＳモデル２３ａ側へデータを送信する場合、ＦＰＧＡ４はデータ送信可能TransmitReady信号をＬｏｗからＨｉｇｈに変化させ、ＩＳＳモデル２３ａ側は両信号ともＨｉｇｈの時にデータData[31:0]信号を受信する。
【００２８】
図３（Ｂ）は、データ受信可能ReceiveReady信号がＨｉｇｈの状態でかつデータ送信可能TransmitReady信号がＨｉｇｈとなった期間に、ＣＰＵ（ＩＳＳ）モデル２３ａが関数IsReady()によってデータData[31:0]信号を受信した様子をタイミングチャートで示している。
【００２９】
本実施例では、データ受信が適切に行なわれなかった原因が、ＣＰＵ（ＩＳＳ）モデル２３ａの処理速度が遅いことによるものであるのか、シミュレーションプログラム２３ｍのバグによるものであるのかを判別するために、ＦＰＧＡ４のトランザクタ４１にて、信号線が変化したことを検出した時に、個別の通し番号をふるようにする。また、ＣＰＵ（ＩＳＳ）モデル２３ａへデータを通知した回数を示す通し番号を作成し、その２つの番号とともに、ＦＰＧＡ４側からＣＰＵ（ＩＳＳ）モデル２３ａ側へ信号線の状態を通知する。ＣＰＵ（ＩＳＳ）モデル２３ａ側への通知は、信号線の状態が変わった時に1回だけ通知する。尚、信号線が変化したことを検出した時に生成される通し番号と、トランザクタ４１がＣＰＵ（ＩＳＳ）モデル２３ａへデータを通知した回数を示す通し番号の両方が必ずしも必要なわけではなく、片方のみを用いてもよい。特に、信号線が変化したことを検出した時に付される通し番号により、データ受信が適切に行なわれなかった原因が、ＣＰＵ（ＩＳＳ）モデル２３ａの処理速度が遅いことによるものであることを検出することができる。
【００３０】
図４は、トランザクタの構成例を示す図である。図４において、トランザクタ４１は、通知する割込み信号などの信号をサンプリングしてＬｏｗからＨｉｇｈ及びＨｉｇｈからＬｏｗになったことを検出するエッジ検出部４１ｃと、エッジ検出信号をカウントするカウント部４１ｂと、ＳＣＥ−ＭＩインターフェイス信号を制御する制御部４１ａと、動作モデル２３（ソフトウェア）側にデータを通知した回数をカウントする通知カウンタ部４１ｅと、通知されるデータを保持するレジスタ４１ｄとを有する。
【００３１】
制御部４１ａは、データ受信可能ReceiveReady信号、データ送信可能TransmitReady信号、及びデータData[31:0]信号のＳＣＥ−ＭＩインターフェイス信号を制御する制御部であり、協調シミュレーション装置１００へデータ通知するデータ通知状態となった回数をカウントするための通知カウンタ部４１ｅを有する。制御部４１ａは、エッジ検出部４１ｃから送出されるエッジ検出信号に応じて、データ受信可能ReceiveReady信号がＨｉｇｈの場合に、データ送信可能TransmitReady信号をＬｏｗからＨｉｇｈに変化させると共に、通知カウンタ部４１ｅに通知番号をインクリメントさせる。通知カウンタ部４１ｅは、レジスタ４１ｄに通知番号を設定する。
【００３２】
エッジカウンタ部４１ｂは、エッジ検出部４１ｃから送出されるエッジ検出信号の受信に応じて、エッジ番号をインクリメントしてレジスタ４１ｄにエッジ番号を設定する。エッジ検出部４１ｃは、通信マクロ４２から送出されるレジスタ４１ｄに書き込まれる割込み信号などの信号を受信して、エッジ検出信号をエッジカウンタ部４１ｂと制御部４１ａとに送出する。
【００３３】
レジスタ４１ｄは、エッジカウンタ部４１ｂでカウント制御されるエッジ番号と、制御部４１ａの通知カウンタ部４１ｅでカウント制御される通知番号と、通信マクロ４２から送出される信号の値とを保持する。
【００３４】
このような構成において、エッジ検出部４１ｃから送出されるエッジ検出信号は制御部４１ａへ伝播し、制御部４１ａが通知可能な状態であれば、データ送信するためのデータ送信可能TransmitReady信号をアサートする。通知可能な状態とは、
・制御部４１ａが動作モデル２３（ソフトウェア）側に通知中ではない
・次にＬｏｗからＨｉｇｈとなったことを通知する順番であること
・ＬｏｗからＨｉｇｈへの変化を検出したこと
を示す。信号がＨｉｇｈからＬｏｗに変化した場合は、
・制御部４１ａが動作モデル２３（ソフトウェア）側に通知中ではない
・次にＨｉｇｈからＬｏｗとなったことを通知する順番であること
・ＨｉｇｈからＬｏｗへの変化を検出したこと
を検出すると、動作モデル２３（ソフトウェア）側へデータを通知する。ＣＰＵ（ＩＳＳ）モデル２３ａがデータを読み取った時、それを示すデータ受信可能ReceiveReady信号をアサートする。両信号がアサートされた時、そのデータがＣＰＵ（ＩＳＳ）モデル２３ａによって読み取られたことを示し、次のデータ送信をすることができる。ＣＰＵ（ＩＳＳ）モデル２３ａは、通知されたデータを確認し、エッジ番号が連番でない場合は、エラーメッセージを表示ユニット１３に表示させ、ユーザはこのエラーメッセージによりソフトウェア側の処理が遅いと判断することができる。また、通知番号が連番でない場合においても同様に、エラーメッセージを表示ユニット１３に表示させ、ユーザはこのエラーメッセージによりソフトウェアにバグがあると判断することができる。
【００３５】
図５は、データフォーマットの例を示す図である。図５において、データData[31:0]信号のデータフォーマットは、例えば、ビット０は通信マクロ４２からの信号の状態（Ｈｉｇｈ又はＬｏｗ）示し、ビット１６から２３は通知カウンタ部４１ｅの制御による通知番号を示し、ビット２４から３１にエッジカウンタ部４１ｂの制御によるエッジ番号を示す。
【００３６】
図５では、レジスタ４１ｄが３２ビットレジスタである場合のデータフォーマットの例を示したが、３２ビットレジスタに限定されるものではなく、１回のデータ送信において、エッジ番号と、通知番号と、信号の値とが同時に協調シミュレーション装置１００に送信されれば良い。
【００３７】
次に、協調シミュレーション装置１００での動作について説明する。図６は、シミュレータ制御部での処理を説明するためのフローチャート図である。図６において、シミュレータ制御部２０は、表示ユニット１３に、評価対象のユーザプログラム２３ｕをデバッグするためのＲＵＮボタン等の制御ボタンを表示させ、又は、エラーが発生していたらエラーメッセージを表示させる（ステップＳ１１）。初期状態、又は、ＣＰＵ（ＩＳＳ）モデル２３ａによってブレークポイントにユーザプログラム２３ｕが到達した状態では、シミュレータ制御部２０は、ユーザプログラム２３ｕを実行するためのＲＵＮボタン等の制御ボタンを表示する。一方、ＣＰＵ（ＩＳＳ）モデル２３ａからエラー発生が通知されている場合、シミュレータ制御部２０は、表示ユニット１３にエラーメッセージを表示する。
【００３８】
シミュレータ制御部２０は、エラー発生か否かを判断する（ステップＳ１２）。エラー発生の場合、この処理を終了する。ユーザは、表示ユニット１３に表示されたエラーメッセージに基づいて、エラーの発生がＣＰＵ（ＩＳＳ）モデル２３ａの処理速度が遅いことによるものであるのか、シミュレーションプログラム２３ｍのバグによるものであるのかを判別する。
【００３９】
一方、エラー発生ではない場合、シミュレータ制御部２０は、ユーザプログラム２３ｕを表示ユニット１３に表示させ（ステップＳ１３）、更に、ユーザによって指定されたブレークポイントを表示ユニット１３に表示されたユーザプログラム２３ｕと対応させて表示させる（ステップＳ１４）。
【００４０】
シミュレータ制御部２０は、ユーザからのＲＵＮボタンの操作によるＲＵＮコマンドの入力待ちとなり（ステップＳ１５）、ＲＵＮコマンドが入力されるとＣＰＵ（ＩＳＳ）モデル２３ａに制御を移し、ＣＰＵ（ＩＳＳ）モデル２３ａによる処理が実行される（ステップＳ１６）。ブレークポイントにユーザプログラム２３ｕが到達した場合、又は、エラーが発生した場合等により、ＣＰＵ（ＩＳＳ）モデル２３ａからシミュレータ制御部２０へと制御が戻り、シミュレータ制御部２０は、ステップＳ１１から上述同様の処理を繰り返す。
【００４１】
図７は、ＣＰＵ（ＩＳＳ）モデルでの処理を説明するためのフローチャート図である。図７において、ＣＰＵ（ＩＳＳ）モデル２３ａは、エラーが発生しているか否かを判断する（ステップＳ２１）。エラーが発生している場合、ＣＰＵ（ＩＳＳ）モデル２３ａは、この処理を終了し、シミュレーション制御部２０へと制御が戻る。
【００４２】
一方、エラーが発生していない場合、ＣＰＵ（ＩＳＳ）モデル２３ａは、ユーザプログラム２３ｕの実行がブレークポイントに到達したか、又は、プログラムの終了となったか否かを判断する（ステップＳ２２）。ブレークポイントに到達した場合、ＣＰＵ（ＩＳＳ）モデル２３ａは、この処理を終了し、シミュレーション制御部２０へと制御が戻る。
【００４３】
一方、ブレークポイントに到達していない場合、ＣＰＵ（ＩＳＳ）モデル２３ａは、プログラムカウンタのアドレスから命令コードをリードし、プログラムカウンタを更新する（ステップＳ２３）。
【００４４】
ここで、命令コードの内容により分類される４種類の動作について説明する。
【００４５】
１．ＣＰＵ（ＩＳＳ）モデル２３ａの外部に対しアクセスをしない
２．ＣＰＵの外部に対しリードアクセスをする（ＦＰＧＡ４内の通信マクロ４２へのリードを除く）
３．ＣＰＵの外部に対しライトアクセスをする（ＦＰＧＡ４内の通信マクロ４２へのライトを除く）
４．ＳＣＥ−ＭＩ（プロキシ２３ｄ及びトランザクタ４１）を経由して、ＦＰＧＡ４内の通信マクロ４２へアクセスする
【００４６】
命令には、上記の命令以外にも、ＣＰＵのアキュムレートレジスタの計算のみの命令が存在するが、この命令は外部アクセスをしない上記動作種類１に分類できる。動作種類４にて、通信マクロ４２が外部通信装置６とやり取りを行ったり、外部通信装置６よりデータを受信すると、通信マクロ４２はＣＰＵへ割込みを通知する。この割込みは、ＳＣＥ−ＭＩを通して、ＣＰＵ（ＩＳＳ）モデル２３ａに通知される。ＣＰＵ（ＩＳＳ）モデル２３ａでは、ＣＰＵにて１命令実行後、割込みがあるかどうかをチェックし、もしＳＣＥ−ＭＩを通して割込みが来ていればエッジ番号と通知番号をチェックし、期待値と違っていればエラーが発生したとみなす。
【００４７】
処理の説明に戻り、ステップＳ２３にて、ＣＰＵ（ＩＳＳ）モデル２３ａは、命令コードの内容により上述した４種類の動作に応じた処理を行う。読み出した命令コードが外部アクセスをしない処理の場合、ステップＳ２７へと進む。読み出した命令コードがリード命令である場合、命令の解釈によりアドレスを計算し、そのアドレスからデータをリードし（ステップＳ２４）、ステップＳ２７へと進む。読み出した命令コードがライト命令である場合、命令の解釈によりアドレスを計算し、そのアドレスからデータをライトし（ステップＳ２５）、ステップＳ２７へと進む。読み出した命令コードが通信マクロ４２へのアクセスである場合、ＳＣＥ−ＭＩを介して、ＦＰＧＡ４内の通信マクロ４２にアクセスして（ステップＳ２６）、ステップＳ２７へと進む。
【００４８】
ＣＰＵ（ＩＳＳ）モデル２３ａは、ＦＰＧＡ４内の通信マクロ４２からの割込みが在るか否かをチェックし、エッジ番号及び通知番号をチェックして期待値と違っていればエラーが発生したと見なし（ステップＳ２７）、ステップＳ２１へと戻る。エラーが発生していてステップＳ２１へ戻った場合、ＣＰＵ（ＩＳＳ）モデル２３ａは、この処理を終了し、シミュレーション制御部２０へと制御が戻る。
【００４９】
エラーの発生もなく、かつ、プログラムカウンタがブレークポイントに達することなくステップＳ２１へと戻った場合、ＣＰＵ（ＩＳＳ）モデル２３ａは、ステップＳ２３で次の命令をリードして上述同様の処理を繰り返す。ユーザプログラム２３ｕの終了でない場合も同様である。
【００５０】
図８は、シミュレータ制御部によって表示される画面構成例を示す図である。図８において、シミュレータ制御部２０は、ユーザプログラム２３ｕを実行するためのＲＵＮボタン等のデバッグ操作に必要な制御ボタンを表示する制御ボタン表示域８１と、ユーザプログラム２３ｕを表示するユーザプログラム表示域８２と、ユーザによって指定されたブレークポイント８３と、エラーメッセージを表示するエラーメッセージ表示域８４とを有する。
【００５１】
制御ボタン表示域８１のＲＵＮボタン８１ａが押下されると、シミュレータ制御部２０は制御をＣＰＵ（ＩＳＳ）２３ａに移す。ＣＰＵ（ＩＳＳ）２３ａでの処理にて、ブレークポイント８３まで実行されて制御がシミュレータ制御部２０に戻ると、そのブレークポイント８３に対応するコードを含めてその前後のユーザプログラム２３ｕのコードがユーザプログラム表示域８２に表示される。そして、ユーザの操作が可能となる。
【００５２】
また、ＣＰＵ（ＩＳＳ）２３ａでの処理にてエラーが発生して制御がシミュレータ制御部２０に戻った場合、ＣＰＵ（ＩＳＳ）２３ａからのエラー通知内容に応じてエラーメッセージ表示域８４にエラーメッセージを表示する。例えば、
《エラー発生!! Edge No.=0xAA(0xCC), Notify No.=0xBB(0xBB) 》
のようなエラーメッセージが表示される。「Edge No.」と「Notify No.」とは、ＣＰＵ（ＩＳＳ）２３ａで受信したエッジ番号と通知番号とを示し、各値の（  ）内には期待値が示される。この例では、通知番号は期待値「0xBB」と一致したものの、エッジ番号は期待値が「0xCC」であるところ、受信した値は「0xAA」であったため、エラー発生と見なされたことが分かる。
【００５３】
図９は、トランザクタのタイムチャートを示す図である。図９において、sig_d0信号は、通信マクロ４２からエッジ検出部４１ｃに供給される割込み信号である（図９（ａ））。エッジ検出部４１ｃは、通信マクロ４２から受信した割込みsig_d0信号を１クロック遅延させた遅延sig_d1信号（図９（ｂ））を用いて、割込みsig_d0信号のエッジを検出してエッジ検出edge_det信号（図９（ｃ））をエッジカウンタ部４１ｂと制御部４１ａとに送出する。
【００５４】
エッジカウンタ部４１ｂは、エッジ検出部４１ｃからのエッジ検出を示すエッジ検出edge_det信号を受信するごとにインクリメントしたエッジ番号を示すエッジ番号edge_no信号（図９（ｄ））を用いてレジスタ４１ｄに設定する。
【００５５】
一方、レジスタ４１ｄでは、通信マクロ４２からの割込みsig_d0信号がＨｉｇｈの状態を検出するためのsignal_h_det_enable信号（図９（ｆ））と、割込み信号がＬｏｗの状態を検出するためのsignal_l_det_enable信号（図９（ｈ））とを有し、夫々検出後に切り替えて交互に割込みsig_d0信号のＨｉｇｈとＬｏｗの状態を検出する。signal_h_det_enable信号によって検出された割込みsig_d0信号のＨｉｇｈの状態は、h_set_p信号（図９（ｇ））として出力される。同様に、signal_l_det_enable信号によって検出された割込みsig_d0信号のＨｉｇｈの状態は、l_set_p信号（図９（ｉ））として出力される。割込みsig_d0信号の状態を設定するsig_level信号（図９（ｍ））は、h_set_p信号の出力に応じて図５に示すデータフォーマットの信号の状態を示すビット０に「１」を設定し、l_set_p信号の出力に応じて図５に示すデータフォーマットの信号の状態を示すビット０に「０」を設定する。
【００５６】
つまり、signal_h_det_enable信号は、次にＬｏｗからＨｉｇｈとなる順番であることを示し、h_set_p信号は、ＬｏｗからＨｉｇｈを検出したことを示す。同様に、signal_l_det_enable信号は、次にＨｉｇｈからＬｏｗとなる順番であることを示し、l_set_p信号は、ＨｉｇｈからＬｏｗを検出したことを示す。
【００５７】
このような割込みsig_d0信号の状態の検出は、データ送信可能TransmitReady信号（図９（ｋ））を反転させたsense_enable信号（図９（ｅ））がＨｉｇｈの間に行なわれ、検出と同時にデータ送信可能TransmitReady信号がＨｉｇｈとなるため、sense_enable信号はＬｏｗとなる。sense_enable信号は制御部４１ａから供給されるようにすればよい。
【００５８】
制御部４１ａは、エッジ検出信号edge_det信号（図９（ｃ））の受信毎に、通知カウンタ部４１ｅにインクリメントした通知番号notify_no信号（図９（ｎ））をレジスタ４１ｄに送出させる。
【００５９】
レジスタ４１ｄのデータData[31:0]信号（図９（ｌ））は、データ送信可能TransmitReady信号がＨｉｇｈとなった時に、協調シミュレーション装置１００に送信され、協調シミュレーション装置１００からデータ受信可能ReceiveReady信号を受信することによって、協調シミュレーション装置１００のＣＰＵ（ＩＳＳ）モデル２３ａでデータが読み取られたことを示し、その後、データ送信可能TransmitReady信号とデータ受信可能ReceiveReady信号とがＬｏｗとなる。
【００６０】
ソフトウェア側のＣＰＵ（ＩＳＳ）モデル２３ａがcallbackとして宣言された関数IsReady()によって取得した割込み通知の内容が、図９（ｏ）に示される。割込み通知の内容は、データData[31:0]信号のフォーマットに従って、エッジ番号edge_noと、通知番号notify_noと、信号の状態levelとを有する。ＣＰＵ（ＩＳＳ）モデル２３ａでは、割込み通知の内容と期待値とを比較して不一致の場合、図８に示す画面構成８のエラーメッセージ表示域８４に割込み通知の内容を表示する。
【００６１】
図９に示すタイミングチャートの例において、エッジ番号edge_no=1で検出された割込みsig_d0信号のＨｉｇｈの状態はlevel=1で示され、通知番号notify_no=1で協調シミュレーション装置１００に一回目のデータ送信が行われる。
【００６２】
次に、エッジ番号edge_no=2で検出された割込みsig_d0信号のＬｏｗの状態はlevel=0でレジスタ４１ｄに格納されるが、協調シミュレーション装置１００のデータ受信可能ReceiveReady状態になるまでの時間が掛かると、エッジ変化の通知が追いつかずに、エッジ番号がedge_no=3に上書きされてしまう。エッジ番号edge_no=3に上書きされた状態で、割込みsig_d0信号のＬｏｗの状態をlevel=0で示し、通知番号notify_no=2で協調シミュレーション装置１００に二回目のデータ送信が行われる。ＣＰＵ（ＩＳＳ）モデル２３ａによってエッジ番号edge_no=2の期待値と比較され、不一致となるためエラーと判断される。エッジ番号が不一致となるエラーの場合、シミュレーション処理が遅いためであると判断できる。
【００６３】
その後の処理において、通知番号notify_noは必ず連番でデータ送信されるところ、通知番号notify_no=7の七回目のデータ送信後に通知番号notify_no=9で割込み通知が行われた場合、ＣＰＵ（ＩＳＳ）モデル２３ａによって通知番号notify_no=8の期待値と比較され、不一致となるためエラーと判断される。通知番号が不一致となるエラーの場合、シミュレーションプログラム２３ｍにバグがあると判断できる。
【００６４】
上記実施例によれば、ＦＰＧＡ４のトランザクタ４１に、通信マクロ４２からの割込み信号が変化したことを検出した際に、個別の通し番号をふり、また、ＣＰＵ（ＩＳＳ）モデル２３ａへ通知した回数を示す通し番号を作成し、それら２つの番号と共に、ＦＰＧＡ４側からＣＰＵ（ＩＳＳ）モデル２３ａ側へ通信マクロ４２からの割込み信号の状態を通知する。ＣＰＵ（ＩＳＳ）モデル２３ａ側への通知は、割込み信号の状態が変化した時に１回だけ通知する。ＣＰＵ（ＩＳＳ）モデル２３ａは、エッジ検出番号及び通知番号を同様に通し番号で期待値を作成し、受信した割込み信号と比較してエラーを検出する。
【００６５】
このような仕組みによって、ＣＰＵ（ＩＳＳ）モデル２３ａが各エッジ検出番号及び通知番号をチェックすることにより、ＣＰＵ（ＩＳＳ）モデル２３ａの処理が遅いことによる読み取りミス、又は、ＦＰＧＡ４からの通知を受信しているが処理が抜けてしまう不具合であるかを判別できる。
【００６６】
以上の説明に関し、更に以下の項を開示する。
（付記１）
評価回路の論理回路部を表すハードウェアと、前記評価回路の動作モデルとして機能する動作モデル部とを用いてシミュレーションする協調シミュレーション装置であって、
前記ハードウェアは、
該ハードウェア内部で検出した信号の変化毎に生成した第1番号を、該信号の変化を前記ソフトウェアに通知するデータに付加する第１番号付加手段を有し、
前記動作モデル部は、
受信した前記データの前記第1番号と、第１期待値とを比較する比較手段として機能することを特徴とする協調シミュレーション装置。
（付記２）
前記ハードウェアは、前記動作モデル部への通知毎に生成した第２番号を前記データに付加する第２番号付加手段を有し、
前記比較手段として機能する前記動作モデル部は、前記データに付加された前記第２番号と、第２期待値とを比較することを特徴とする付記１記載の協調シミュレーション装置。
（付記３）
前記ハードウェアは、前記動作モデル部への前記データの通知を制御する制御手段を更に有し、
前記制御手段は、前記データの通知中でない状態で、前記信号の変化が次にＬｏｗからＨｉｇｈとなる順番においてＬｏｗからＨｉｇｈへの変化を検出した場合、または前記信号の変化が次にＨｉｇｈからＬｏｗとなる順番においてＨｉｇｈからＬｏｗへの変化を検出した場合に、前記ソフトウェアへ前記データを通知するように制御することを特徴とする付記１又は２記載の協調シミュレーション装置。
（付記４）
半導体集積回路の論理回路をエミュレーションするエミュレーション装置であって、
前記エミュレーション装置内部で検出した信号の変化毎に生成した第１番号を該信号の変化を通知するデータに付加する第１番号付加手段と、
前記第１通し番号が付加された前記データの、前記半導体集積回路のプロセッサをシミュレーションするシミュレーション装置への通知を制御する制御手段とを有することを特徴とするエミュレーション装置。
（付記５）
前記制御手段は、前記シミュレーション装置への通知毎に生成した第２番号を前記データに付加する第２番号付加手段を有し、
前記第１番号と前記第２番号とが付加された前記データを前記シミュレーション装置に通知するように制御することを特徴とする付記４記載のエミュレーション装置。
（付記６）
前記制御手段は、前記データの通知中でない状態で、前記信号の変化が次にＬｏｗからＨｉｇｈとなる順番においてＬｏｗからＨｉｇｈへの変化を検出した場合、または前記信号の変化が次にＨｉｇｈからＬｏｗとなる順番においてＨｉｇｈからＬｏｗへの変化を検出した場合に、前記ソフトウェアへ前記データを通知するように制御することを特徴とする付記４又は５記載のエミュレーション装置。
（付記７）
半導体集積回路のプロセッサをシミュレーションするシミュレーション装置であって、
前記半導体集積回路のプロセッサ以外の論理回路をエミュレーションするエミュレーション装置から、該エミュレーション装置内で検出した信号の変化毎に生成した第１番号、又は、該エミュレーション装置によって該信号の変化の通知毎に生成した第２番号の少なくとも１つが付加された該割込み信号の変化を通知するデータを、コールバック関数を用いて取得するデータ取得手段と、
前記データに付加された前記第１番号又は前記第２番号の少なくとも１つと、該少なくとも１つの期待値とを比較する比較手段とを有することを特徴とするシミュレーション装置。
（付記８）
半導体集積回路のプロセッサをシミュレーションするシミュレーション装置におけるシミュレーション方法であって、
前記半導体集積回路のプロセッサ以外の論理回路をエミュレーションするエミュレーション装置から、該エミュレーション装置内で検出した信号の変化毎に生成した第１番号、又は、該エミュレーション装置によって該信号の変化の通知毎に生成した第２番号の少なくとも１つが付加されたデータを、コールバック関数を用いて取得するデータ取得手順と、
前記データに付加された前記第１番号又は前記第２番号の少なくとも１つを、少なくとも１つの期待値と比較する比較手順とを有することを特徴とするシミュレーション方法。
（付記９）
コンピュータに、半導体集積回路のプロセッサをシミュレーションさせるシミュレーションプログラムであって、該コンピュータに、
前記半導体集積回路のプロセッサ以外の論理回路をエミュレーションするエミュレーション装置から、該エミュレーション装置内で検出した信号の変化毎に生成した第１番号、又は、該エミュレーション装置によって該信号の変化の通知毎に生成した第２番号の少なくとも１つが付加されたデータを、コールバック関数を用いて取得するデータ取得手順と、
前記データに付加された前記第１番号又は前記第２番号の少なくとも１つを、少なくとも１つの期待値と比較する比較手順とを実行させることを特徴とするシミュレーションプログラム。
【００６７】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【００６８】
３              ＰＣＩボード
４              ＦＰＧＡ
４１            トランザクタ
４１ａ          制御部
４１ｂ          エッジカウンタ部
４１ｃ          エッジ検出部
４１ｄ          レジスタ
４１ｅ          通知カウンタ部
４２            通信マクロ
５              通信ケーブル
６              外部通信装置
８              画面構成
８１            制御ボタン表示域
８１ａ          ＲＵＮボタン
８２            ユーザプログラム表示域
８３            ブレークポイント
８４            エラーメッセージ表示域
１１            ＣＰＵ
１２            メモリユニット
１３            表示ユニット
１４            出力ユニット
１５            入力ユニット
１６            通信ユニット
１７            記憶装置
１８            ドライバ
１９            記憶媒体
２０            シミュレータ制御部
２３            動作モデル
２３ａ          ＣＰＵ（ＩＳＳ）モデル
２３ｂ          ＲＯＭモデル
２３ｃ          ＲＡＭモデル
２３ｄ          プロキシ（proxy）
２３ｍ          シミュレーションプログラム
２３ｕ          ユーザプログラム
１００          協調シミュレーション装置
【図１】
2011039781.tif 000003
【図２】
2011039781.tif 000004
【図３】
2011039781.tif 000005
【図４】
2011039781.tif 000006
【図５】
2011039781.tif 000007
【図６】
2011039781.tif 000008
【図７】
2011039781.tif 000009
【図８】
2011039781.tif 000010
【図９】
2011039781.tif 000011