(57)【要約】【課題】  ハードウェア／ソフトウェア混在システムについてソフトウェアデバッグを短時間で実施する。【解決手段】  システムのシミュレーションにより生成された波形データファイル、ＣＰＵの構成要素を定義したＣＰＵ定義ファイル、ソフトウェアのソースファイルおよびソフトウェアの実行ファイルが入力される。波形データファイルおよびＣＰＵ定義ファイルに基づいて時刻情報およびＣＰＵ内部動作情報が取得されてＣＰＵのソフトウェア実行状態が再現される。時刻情報、ＣＰＵ内部動作情報、ソフトウェアのソースファイルおよびソフトウェアの実行ファイルに基づいてデバッグ情報が表示される。【選択図】    図３
2010009279.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵを含むハードウェアおよび前記ＣＰＵにより実行されるソフトウェアを組み合わせて実現されるシステムについて、コンピュータ上で前記ソフトウェアをデバッグするデバッグ方法であって、
前記システムのシミュレーションにより生成された波形データファイル、前記ＣＰＵの構成要素を定義したＣＰＵ定義ファイル、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルを入力する第１工程と、
前記波形データファイルおよび前記ＣＰＵ定義ファイルに基づいて時刻情報およびＣＰＵ内部動作情報を取得して、前記ＣＰＵのソフトウェア実行状態を再現する第２工程と、
前記時刻情報、前記ＣＰＵ内部動作情報、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルに基づいてデバッグ情報を表示する第３工程とを含むことを特徴とするデバッグ方法。
【請求項２】
請求項１に記載のデバッグ方法において、
前記第２工程は、
前記時刻情報および前記ＣＰＵ内部動作情報を前記ＣＰＵ内のプログラムカウンタの値が次に変化する際の情報に更新する処理を繰り返すことにより、前記ＣＰＵのソフトウェア実行状態を所望の状態まで進める継続実行工程と、
前記時刻情報および前記ＣＰＵ内部動作情報を前記ＣＰＵ内のプログラムカウンタの値が次に変化する際の情報に更新することにより、前記ＣＰＵのソフトウェア実行状態を次の状態まで進めるステップ実行工程とを含むことを特徴とするデバッグ方法。
【請求項３】
請求項２に記載のデバッグ方法において、
前記第２工程は、前記継続実行工程の実施中に前記ＣＰＵ内部動作情報に含まれる前記ＣＰＵ内のプログラムカウンタの値が予め設定されたブレークポイントの値と一致するのに伴って、ブレーク発生を通知して前記継続実行工程を終了させるブレーク工程を含むことを特徴とするデバッグ方法。
【請求項４】
請求項１〜請求項３のいずれか１項に記載のデバッグ方法において、
前記第３工程は、前記ＣＰＵ内部動作情報に含まれる前記ＣＰＵ内のプログラムカウンタの値に対応する前記ソフトウェアのソースコードを表示するソースコード表示工程を含むことを特徴とするデバッグ方法。
【請求項５】
ＣＰＵを含むハードウェアおよび前記ＣＰＵにより実行されるソフトウェアを組み合わせて実現されるシステムについて前記ソフトウェアをデバッグするためのコンピュータに、
前記システムのシミュレーションにより生成された波形データファイル、前記ＣＰＵの構成要素を定義したＣＰＵ定義ファイル、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルを入力する第１工程と、
前記波形データファイルおよび前記ＣＰＵ定義ファイルに基づいて時刻情報およびＣＰＵ内部動作情報を取得して前記ＣＰＵのソフトウェア実行状態を再現する第２工程と、
前記時刻情報、前記ＣＰＵ内部動作情報、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルに基づいてデバッグ情報を表示する第３工程とを実行させることを特徴とするデバッグプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵ（Central Processing Unit）を含むハードウェアおよびＣＰＵにより実行されるソフトウェアを組み合わせて実現されるシステム（ハードウェア／ソフトウェア混在システム）についてコンピュータ上でソフトウェアをデバッグする技術に関する。
【背景技術】
【０００２】
図１５は、ＳｏＣ（System on Chip）の一例を示している。図１６は、ＳｏＣ開発工程の一例を示している。図１５に示すように、ファームウェアを実行するＣＰＵ１、各種データを格納するメモリ２および各種周辺機能を具現する機能ブロック３、４、５等を集積したＳｏＣ６のようなハードウェア／ソフトウェア混在システムを開発する場合、図１６に示すように、ハードウェアおよびソフトウェア（ＣＰＵ上で実行されるファームウェア）の各々に関して仕様決定、実装および検証を順次実施した後、ハードウェアおよびソフトウェアを組み合わせて実現されるシステムに関しての検証（システムレベル検証）を実施する必要がある。ハードウェア／ソフトウェア混在システムのデバッグにおいては、不具合発生時にハードウェア側またはソフトウェア側のどちらに問題があるのかを切り分けるために、ハードウェアおよびソフトウェアの双方の状態を確認する必要がある。
【０００３】
ハードウェア／ソフトウェア混在システムを検証する手法として、ハードウェア／ソフトウェア協調検証手法が知られている。ハードウェア／ソフトウェア協調検証手法では、ＣＰＵ以外のハードウェアの動作が論理シミュレータ等により実行され、ＣＰＵの動作（ソフトウェアの実行）が命令セットシミュレータ（ＩＳＳ：Instruction Set Simulator）により実行される。ＩＳＳおよび論理シミュレータ等は相互に接続されており、ＣＰＵおよびＣＰＵ以外のハードウェア間のデータ授受が再現されることで、ＣＰＵとその他のハードウェアとを組み合わせたシステムとしての動作が再現される。ハードウェア／ソフトウェア協調検証手法には、論理シミュレータを使用する手法（コ・シミュレーション）と論理エミュレータを使用する手法（コ・エミュレーション）とが存在する。
【０００４】
図１７は、コ・シミュレーションの概要を示している。コ・シミュレーションでは、ＣＰＵにより実行されるソフトウェアについてソースファイルをビルド（コンパイルおよびリンク）して実行ファイルを生成した後、ソフトウェアのソースファイルおよび実行ファイルとＣＰＵ以外のハードウェアに関するＨＤＬ（Hardware Design Language）記述ファイルとを入力としてＩＳＳおよび論理シミュレータによりシミュレーションが実行される。コ・シミュレーションは、例えば、図１７に示すように、コンピュータ１１上のソフトウェア開発ツール１２（ＩＳＳ１３およびデバッガ１４を具備）と論理シミュレータ１５とを使用して実現される。この場合、論理シミュレータ１５によりＣＰＵ以外のハードウェアの動作が実行され、ＩＳＳ１３によりＣＰＵの動作が実行され、ＩＳＳ１３に接続されたデバッガ１４によりソフトウェアデバッグ機能が実現される。このようなコ・シミュレーションにおいては、ＣＰＵ以外のハードウェアに関するシミュレーションには多くの時間を要するため、これがボトルネックとなり実行速度が例えば数十〜数百Ｈｚ程度と遅くなる問題がある。例えば、シミュレーション実行開始後、ブレークポイントに到達するまでに数時間を要してしまうことがある。従って、コ・シミュレーションをソフトウェアデバッグに使用することは現実的ではない。
【０００５】
図１８は、コ・エミュレーションの概要を示している。コ・シミュレーションにおいて論理シミュレータによりＣＰＵ以外のハードウェアの動作が実行されるのに対して、コ・エミュレーションでは、論理エミュレータによりＣＰＵ以外のハードウェアの動作が実行される。コ・エミュレーションは、例えば、図１８に示ように、コンピュータ２１上のエミュレータ制御ツール２２（ＩＳＳ２３およびデバッガ２４を具備）とコンピュータ２１に接続された論理エミュレータ２５とを使用して実現される。このようなコ・エミュレーションにおいては、論理エミュレータの実行速度（１ＭＨｚ）に比べてＩＳＳの実行速度が遅いことに加えて、ＩＳＳを具備するコンピュータと論理エミュレータとが物理的に別の装置であり、両者を接続するためのインタフェース部分が存在することに起因して、実行速度が著しく低下する。このため、ＣＰＵを含めたハードウェア全体をエミュレータにマッピングしてエミュレータ単体で動作させた場合に比べて、実行速度が例えば数十ｋＨｚ程度と遅くなるという問題がある。
【特許文献１】特開２００２−３６６６０２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
コ・シミュレーションまたはコ・エミュレーションのいずれについても、実行速度が非常に遅いため、ソフトウェアデバッグを短時間で実施することは困難であった。
【０００７】
本発明の目的は、ハードウェア／ソフトウェア混在システムについてソフトウェアデバッグを短時間で実施することにある。
【課題を解決するための手段】
【０００８】
本発明の一態様では、ＣＰＵを含むハードウェアおよびＣＰＵにより実行されるソフトウェアを組み合わせて実現されるシステムについてコンピュータ上でソフトウェアをデバッグする際に、第１〜第３工程が実施される。第１工程では、システムのシミュレーションにより生成された波形データファイル、ＣＰＵの構成要素を定義したＣＰＵ定義ファイル、ソフトウェアのソースファイルおよびソフトウェアの実行ファイルが入力される。第２工程では、波形データファイルおよびＣＰＵ定義ファイルに基づいて時刻情報およびＣＰＵ内部動作情報が取得されてＣＰＵのソフトウェア実行状態が再現される。第３工程では、時刻情報、ＣＰＵ内部動作情報、ソフトウェアのソースファイルおよびソフトウェアの実行ファイルに基づいてデバッグ情報が表示される。
【発明の効果】
【０００９】
ハードウェア／ソフトウェア混在システムについてソフトウェアデバッグを短時間で実施することができる。この結果、ハードウェア／ソフトウェア混在システムの開発期間の短縮に大きく寄与することができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施形態について図面を用いて説明する。
【００１１】
図１は、本発明の一実施形態を示している。図２は、ＣＰＵ定義ファイルの一例を示している。図３は、ソフトウェアデバッグ部の詳細を示している。図４は、デバッグＡＰＩ（Application Program Interface）の一例を示している。図５は、波形情報取得ＡＰＩの一例を示している。
【００１２】
本発明の一実施形態では、図１に示すように、ＳｏＣのデバッグを実施する前に、ＳｏＣにおけるＣＰＵにより実行されるソフトウェアについて、コンピュータ１００上でコンパイラ／リンカ２００によりソースファイル１１０をビルド（コンパイルおよびリンク）して実行ファイル１２０（バイナリファイル）を生成する。このとき、ソースファイル１１０をデバッグオプション付きでビルドすることにより、実行ファイル１２０にデバッグ用付加情報（命令アドレスおよびソースコード行の対応関係を示す情報等）が含まれるようにする。
【００１３】
次に、ＳｏＣ全体（ＣＰＵを含む）のＨＤＬ記述ファイル１３０をエミュレータ３００にマッピングするとともに、実行ファイル１２０をエミュレータ３００内のメモリにロードした後、エミュレータ３００単体でエミューションを実行して波形データファイル１４０を生成する。波形データファイル１４０は、ＣＰＵを含むハードウェアの内部信号の信号名、信号値および時刻等の情報を含むものである。なお、波形データファイル１４０の形式としては、Ｖｅｒｉｌｏｇ−ＨＤＬで規定されているＶＣＤ（Value Change Dump）ファイルがある。
【００１４】
この後、コンピュータ１００上でデバッグプログラム４００により実現されるハードウェアデバッグ機能（内部信号波形表示）およびソフトウェアデバッグ機能（初期化、ブレークポイント設定、継続実行、ステップ実行、ソースコード表示、変数値表示やメモリデータ表示等）を使用してＳｏＣのデバッグを実施する。これにより、コ・シミュレーションやコ・エミュレーションを用いた場合と同様に、ハードウェアおよびソフトウェアを同時にデバッグすることが可能である。
【００１５】
デバッグプログラム４００は、ソースファイル１１０、実行ファイル１２０、波形データファイル１４０およびＣＰＵ定義ファイル１５０を入力とし、デバッグ制御部１６０、デバッグ情報出力部１７０および波形情報出力部１８０等のＧＵＩ（Graphical User Interface）と連動することにより、デバッグ機能を実現している。例えば、デバッグプログラム４００は、ソフトウェアデバッグ機能を実現するソフトウェアデバッグ部４１０、波形データファイル１４０から時刻や信号値等の情報を取得する波形情報取得部４２０、波形表示機能（ハードウェアデバッグ機能）を実現する波形情報表示部４３０等を具現している。
【００１６】
なお、ソースファイル１１０はソースコード表示の際に使用され、実行ファイル１２０はソースコード表示や変数値表示の際に使用される。波形データファイル１４０は、波形表示の際に使用されるとともに、ソフトウェアデバッグ機能を実現するためにＣＰＵの内部動作に関する情報を取得する際に使用される。ＣＰＵ定義ファイル１５０は、波形データファイル１４０からＣＰＵの内部動作に関する情報を取得する際に使用される。ＣＰＵ定義ファイル１５０は、例えば、図２に示すように、ＣＰＵの基本的な構成要素（クロック、リセット、プログラムカウンタ、スタックポインタ、フレームポインタ、ステータスレジスタ、命令メモリ、データメモリや汎用レジスタ等）およびそれに対応する内部信号の信号名の情報を含むものである。また、デバッグ制御部１６０は、ソフトウェアデバッグ機能を実現するための各種処理（初期化処理、ブレークポイント設定処理、継続実行処理、ステップ実行処理、ソースコード表示処理、変数値表示処理やメモリデータ表示処理等）のコマンドを入力する際に使用される。デバッグ情報出力部１７０は、デバッグ情報（ソースコード、変数値やメモリデータ等）を表示する際に使用される。波形情報出力部１８０は、波形情報を表示する際に使用される。
【００１７】
ソフトウェアデバッグ部４１０は、例えば、図３に示すように、デバッグ処理部４１１およびデバッグ情報取得部４１６を有している。デバッグ処理部４１１は、デバッグＡＰＩを用いて、デバッグ情報取得部４１６から必要な情報を取得してソースコード表示、変数値表示やメモリデータ表示等の機能を実現するとともに、デバッグ情報取得部４１６に必要な指示を発行して初期化、ブレークポイント設定、継続実行やステップ実行等の機能を実現する。例えば、デバッグ処理部４１１は、初期化機能を実現するための初期化制御部４１２、継続実行機能やステップ実行機能を実現するための実行制御部４１３、ブレークポイント設定機能を実現するためのブレーク制御部４１４、ソースコード表示機能、変数値表示機能やメモリデータ表示機能を実現するためのデバッグ情報表示部４１５等を有している。
【００１８】
デバッグ情報取得部４１６は、ＣＰＵ定義ファイル１５０に基づいて波形情報取得ＡＰＩを用いて時刻やＣＰＵの構成要素（内部信号）の値を波形情報取得部４２０（波形データファイル１４０）から取得する。波形情報取得部４２０（波形データファイル１４０）から情報を取得する際にＣＰＵ定義ファイル１５０が使用されることで、ＣＰＵの種類が変更された場合でもＣＰＵ定義ファイル１５０の内容を変更するだけで容易に対応することが可能になる。なお、コ・シミュレーションやコ・エミュレーションを用いた場合には、ＩＳＳが必要となるため、ＣＰＵのベンダからＩＳＳが提供されていない場合にはハードウェアおよびソフトウェアを同時にデバッグすることができない。
【００１９】
例えば、デバッグ情報取得部４１６は、波形情報取得ＡＰＩを用いて波形情報取得部４２０との間で情報の授受を実施する波形情報処理部４１７、デバッグＡＰＩを用いてデバッグ処理部４１１との間で情報の授受を実施するデバッグ情報処理部４１８、時刻、クロックサイクル数、プログラムカウンタ（ＰＣ：Program Counter）の値やブレークポイントの値等を保持する情報保持部４１９等を有している。なお、情報保持部４１９で保持されるクロックサイクル数は、情報保持部４１９で保持される時刻が波形データファイル１４０内のシミュレーション開始時点から何サイクル目に相当するのかを示すものである。情報保持部４１９では、保持される時刻を波形データファイル１４０に基づいて予め算出されたＣＰＵ内のクロック信号の１サイクルの時間で割った値がクロックサイクル数として保持される。
【００２０】
デバッグ情報取得部４１６において、時刻、クロックサイクル数およびプログラムカウンタの値が保持されることで、ある時刻にソフトウェアのどの部分が実行されているのかを特定することができる。従って、デバッグ情報取得部４１６は、時刻、クロックサイクル数およびプログラムカウンタの値に基づいてＣＰＵの内部動作に関する情報をデバッグ処理部４１１に供給することで、実際にはソフトウェアを実行していないにも拘わらず、擬似的にＣＰＵが動作しているようにデバッグ処理部４１１に対して応答することが可能になる。
【００２１】
なお、デバッグＡＰＩの種類としては、例えば、図４に示すように、初期化ＡＰＩ、ブレークポイント設定ＡＰＩ、継続実行ＡＰＩ、ステップ実行ＡＰＩ、ＰＣリードＡＰＩ、メモリリードＡＰＩ、ブレーク発生通知ＡＰＩや実行停止通知ＡＰＩ等がある。初期化ＡＰＩは、デバッグ処理部４１１がデバッグ情報取得部４１６にソフトウェア実行開始位置情報（ＣＰＵ内のリセット信号の立ち下がりエッジの発生時刻およびその時刻に対応するＣＰＵ内のプログラムカウンタの値）を保持させる際に使用される。ブレークポイント設定ＡＰＩは、デバッグ処理部４１６がデバッグ情報取得部４１６に指定ブレークポイント値を保持させる際に使用される。継続実行ＡＰＩは、デバッグ処理部４１１がデバッグ情報取得部４１６にプログラムカウンタの値をブレークポイントの値、指定ステップ数後の値またはソフトウェアの終端に対応する値のいずれかまで進めさせる際に使用される。ステップ実行ＡＰＩは、デバッグ処理部４１１がデバッグ情報取得部４１６にプログラムカウンタの値を１ステップ後の値まで進めさせる際に使用される。ＰＣリードＡＰＩは、デバッグ処理部４１１がＣＰＵ内のプログラムカウンタの値をデバッグ情報取得部４１６から取得する際に使用される。メモリリードＡＰＩは、デバッグ処理部４１１がＣＰＵ内のメモリの指定アドレスのデータをデバッグ情報取得部４１６から取得する際に使用される。ブレーク発生通知ＡＰＩは、デバッグ情報取得部４１６がデバッグ処理部４１１にブレーク発生（プログラムカウンタの値およびブレークポイントの値の一致）を通知する際に使用される。実行停止通知ＡＰＩは、デバッグ情報取得部４１６がデバッグ処理部４１１に実行停止（プログラムカウンタの値を更新する処理の終了）を通知する際に使用される。
【００２２】
また、波形情報取得ＡＰＩの種類としては、例えば、図５に示すように、信号値取得ＡＰＩや信号変化位置取得ＡＰＩ等がある。信号値取得ＡＰＩは、デバッグ情報取得部４１６が指定信号名の信号に関して指定時刻の値を波形情報取得部４２０から取得する際に使用される。信号変化位置取得ＡＰＩは、デバッグ情報取得部４１６が指定信号名の信号に関して指定時刻後で最初に指定エッジ（立ち上がりエッジ、立ち下がりエッジまたは両エッジ）が発生する時刻およびその時刻の信号値（変化後の信号値）を波形情報取得部４２０から取得する際に使用される。
【００２３】
ここで、デバッグ機能を実現するための各種処理（初期化処理、ブレークポイント設定処理、継続実行処理、ステップ実行処理、ソースコード表示処理、変数値表示処理、メモリデータ表示処理および波形表示処理）について説明する。
【００２４】
図６は、初期化処理を示している。図６（ａ）は初期化処理時のデータの流れを示しており、図６（ｂ）は初期化処理時の動作を示している。デバッグ制御部１６０（ＧＵＩ）を介して初期化コマンドが入力されると、デバッグ処理部４１１は、デバッグ情報取得部４１６に対して初期化指示を発行する。これに伴って、デバッグ情報取得部４１６は、波形情報取得部４２０を介して波形データファイル１４０からリセット解除位置情報（ＣＰＵ内のリセット信号の立ち下がりエッジの発生時刻およびその時刻に対応するＣＰＵ内のプログラムカウンタの値）を取得する（ステップＳ１１）。そして、デバッグ情報取得部４１６は、波形データファイル１４０から取得した時刻およびプログラムカウンタの値を保持する（ステップＳ１２）。これにより、デバッグ情報取得部４１６で再現されるＣＰＵのソフトウェア実行状態がソフトウェア実行開始時の状態に設定されたことになる。
【００２５】
図７は、ブレークポイント設定処理を示している。図７（ａ）はブレークポイント設定処理時のデータの流れを示しており、図７（ｂ）はブレークポイント設定処理時の動作を示している。デバッグ制御部１６０（ＧＵＩ）を介してブレークポイント設定コマンド（ブレークポイントの値を含む）が入力されると、デバッグ処理部４１１は、デバッグ情報取得部４１６に対してブレークポイント設定指示を発行する。これに伴って、デバッグ情報取得部４１６は、デバッグ処理部４１１から供給されるブレークポイントの値を保持する（ステップＳ２１）。なお、ブレークポイントについては、複数の値を設定することが可能である。
【００２６】
図８は、継続実行処理を示している。図８（ａ）は継続実行処理時のデータの流れを示しており、図８（ｂ）は継続実行処理時の動作を示している。デバッグ制御部１６０（ＧＵＩ）を介して継続実行コマンド（ステップ数を含む）が入力されると、デバッグ処理部４１１は、デバッグ情報取得部４１６に対して継続実行指示を発行する。これに伴って、デバッグ情報取得部４１６は、波形情報取得部４２０を介して波形データファイル１４０からＰＣ変化位置情報（プログラムカウンタの値が次に変化する時刻およびプログラムカウンタの変化後の値）を取得する（ステップＳ３１）。そして、デバッグ情報取得部４１６は、波形データファイル１４０から取得した時刻およびプログラムカウンタの値を保持する（ステップＳ３２）。この後、デバッグ情報取得部４１６は、保持しているプログラムカウンタの値がブレークポイントの値と一致するか否かを判定する（ステップＳ３３）。デバッグ情報取得部４１６は、プログラムカウンタの値はブレークポイントの値と一致しないと判定した場合、プログラムカウンタの値が変化する毎にＣＰＵのソフトウェア実行状態が１ステップ進むものとして、ＣＰＵのソフトウェア実行状態が指定ステップ数（デバッグ処理部４１１から供給されるステップ数）後の状態まで進んでいるか否かを判定する（ステップＳ３４）。デバッグ情報取得部４１６は、ＣＰＵのソフトウェア実行状態は指定ステップ数後の状態まで進んでいないと判定した場合、保持しているプログラムカウンタの値がソフトウェアの終端に対応する値と一致するか否かを判定する（ステップＳ３５）。デバッグ情報取得部４１６は、プログラムカウンタの値はソフトウェアの終端に対応する値と一致しないと判定した場合、ステップＳ３１以降の処理を再び実施する。そして、デバッグ情報取得部４１６は、ステップＳ３３にてプログラムカウンタの値はブレークポイントの値と一致すると判定した場合には、デバッグ処理部４１１に対してブレーク発生通知（プログラムカウンタの値を含む）を発行し、ステップＳ３４にてＣＰＵのソフトウェア実行状態は指定ステップ数後の状態まで進んでいると判定した場合あるいはステップＳ３５にてプログラムカウンタの値はソフトウェアの終端に対応する値と一致すると判定した場合には、デバッグ処理部４１１に対して実行停止通知（プログラムカウンタの値を含む）を発行する（ステップＳ３６）。これと同時に、デバッグ情報取得部４１６は、波形情報表示部４３０に対して波形表示指示を発行する。これにより、デバッグ情報取得部４１６で再現されるＣＰＵのソフトウェア実行状態がブレーク発生時の状態、指定ステップ数後の状態またはソフトウェア実行終了時の状態のいずれかまで進められたことになる。
【００２７】
図９は、ステップ実行処理を示している。図９（ａ）はステップ実行処理時のデータの流れを示しており、図９（ｂ）はステップ実行処理時の動作を示している。デバッグ制御部１６０（ＧＵＩ）を介してステップ実行コマンドが入力されると、デバッグ処理部４１１は、デバッグ情報取得部４１６に対してステップ実行指示を発行する。これに伴って、デバッグ情報取得部４１６は、波形情報取得部４２０を介して波形データファイル１４０からＰＣ変化位置情報（プログラムカウンタの値が次に変化する時刻およびプログラムカウンタの変化後の値）を取得する（ステップＳ４１）。そして、デバッグ情報取得部４１６は、波形データファイル１４０から取得した時刻およびプログラムカウンタの値を保持する（ステップＳ４２）。この後、デバッグ情報取得部４１６は、保持しているプログラムカウンタの値がブレークポイントの値と一致するか否かを判定する（ステップＳ４３）。次に、デバッグ情報取得部４１６は、保持しているプログラムカウンタの値がソフトウェアの終端に対応する値と一致するか否かを判定する（ステップＳ４４）。そして、デバッグ情報取得部４１６は、ステップＳ４３にてプログラムカウンタの値はブレークポイントの値と一致すると判定した場合には、デバッグ処理部４１１に対してブレーク発生通知（プログラムカウンタの値を含む）を発行し、ステップＳ４３にてプログラムカウンタの値はブレークポイントの値と一致しないと判定した場合には、デバッグ処理部４１１に対して実行停止通知（プログラムカウンタの値を含む）を発行する（ステップＳ４５）。これと同時に、デバッグ情報取得部４１６は、波形情報表示部４３０に対して波形表示指示を発行する。これにより、デバッグ情報取得部４１６で再現されるＣＰＵのソフトウェア実行状態が１ステップ後の状態まで進められたことになる。
【００２８】
図１０は、ソースコード表示処理を示している。図１０（ａ）はソースコード表示処理時のデータの流れを示しており、図１０（ｂ）はソースコード表示処理時の動作を示している。デバッグ情報取得部４１６からデバッグ処理部４１１に対してブレーク発生通知または実行停止通知が発行されると（継続実行処理またはステップ実行処理が終了すると）、デバッグ処理部４１１は、デバッグ情報取得部４１６で保持されているプログラムカウンタの値を取得する（ステップＳ５１）。次に、デバッグ処理部４１１は、実行ファイル１２０内のデバッグ用付加情報（命令アドレスおよびソースコード行の対応関係を示す情報）を利用して、デバッグ情報取得部４１６から取得したプログラムカウンタの値に対応するソースコード行を特定する（ステップＳ５２）。そして、デバッグ処理部４１１は、実行ファイル１２０内のデバッグ用付加情報に基づいて特定したソースコード行についてソースファイル１１０からソースコードを取得し（ステップＳ５３）、取得したソースコードをデバッグ情報出力部１７０（ＧＵＩ）に表示する（ステップＳ５４）。なお、デバッグ処理部４１１は、デバッグ情報取得部４１６で保持されているプログラムカウンタの値に加えて時刻やクロックサイクル数を取得し、ソースコードに加えてプログラムカウンタの値、時刻やクロックサイクル数をデバッグ情報出力部１７０（ＧＵＩ）に表示することも可能である。
【００２９】
図１１は、変数値表示処理を示している。図１１（ａ）は変数値表示処理時のデータの流れを示しており、図１１（ｂ）は変数値表示処理時の動作を示している。デバッグ制御部１６０（ＧＵＩ）を介して変数値表示コマンド（変数名を含む）が予め入力されている場合には、デバッグ情報取得部４１６からデバッグ処理部４１１に対してブレーク発生通知または実行停止通知が発行されると、デバッグ処理部４１１は、実行ファイル１２０内のデバッグ用付加情報を利用して、指定変数名の変数についてアドレスおよび種類を特定する（ステップＳ６１）。次に、デバッグ処理部４１１は、変数の種類がグローバル変数であるか否かを判定する（ステップＳ６２）。デバッグ処理部４１１は、変数の種類はグローバル変数であると判定した場合、波形情報取得部４２０およびデバッグ情報取得部４１６を介して波形データファイル１４０からＣＰＵ内のメモリの該当アドレス（ステップＳ６１で特定したアドレス）のデータを変数の値として取得し（ステップＳ６３）、取得した変数の値をデバッグ情報出力部１７０（ＧＵＩ）に表示する（ステップＳ６４）。また、デバッグ処理部４１１は、変数の種類はグローバル変数ではない（変数の種類はローカル変数である）と判定した場合、波形情報取得部４２０およびデバッグ情報取得部４１６を介して波形データファイル１４０からＣＰＵ内のメモリに格納されている実行対象関数のスタックフレームデータを取得し（ステップＳ６５）、取得したスタックフレームデータに指定変数名の変数が含まれているか否かを判定する（ステップＳ６６）。デバッグ処理部４１１は、スタックフレームデータに指定変数名の変数は含まれていると判定した場合、スタックフレームデータから変数の値を抽出し（ステップＳ６７）、抽出した変数の値をデバッグ情報出力部１７０（ＧＵＩ）に表示する（ステップＳ６８）。なお、デバッグ処理部４１１は、スタックフレームデータに指定変数名の変数は含まれていないと判定した場合、デバッグ情報出力部１７０（ＧＵＩ）に何も表示しない。
【００３０】
図１２は、メモリデータ表示処理を示している。図１２（ａ）はメモリデータ表示処理時のデータの流れを示しており、図１２（ｂ）はメモリデータ表示処理時の動作を示している。デバッグ制御部１６０（ＧＵＩ）を介してメモリデータ表示コマンド（アドレスを含む）が予め入力されている場合には、デバッグ情報取得部４１６からデバッグ情報処理部４１１に対してブレーク発生通知または実行停止通知が発行されると、デバッグ処理部４１１は、波形情報取得部４２０およびデバッグ情報取得部４１６を介して波形データファイル１４０からＣＰＵ内のメモリの指定アドレス（指定アドレス範囲）のデータを取得し（ステップＳ７１）、取得したメモリデータをデバッグ情報出力部１７０（ＧＵＩ）に表示する（ステップＳ７２）。
【００３１】
図１３は、波形表示処理を示している。図１３（ａ）は波形表示処理時のデータの流れを示しており、図１３（ｂ）は波形表示処理時の動作を示している。デバッグ情報取得部４１６から波形情報表示部４３０に対して波形表示指示（時刻を含む）が発行されると（継続実行処理またはステップ実行処理が終了すると）、波形情報表示部４３０は、デバッグ情報取得部４１６で保持されている時刻を取得する（ステップＳ８１）。そして、波形情報表示部４３０は、波形情報取得部４２０を介して波形データファイル１４０から指定時刻（デバッグ情報取得部４１６から供給される時刻）に対応する波形情報を取得し（ステップＳ８２）、取得した波形情報を波形情報出力部１８０（ＧＵＩ）に表示する（ステップＳ８３）。これにより、波形情報の表示とデバッグ情報（ソースコード、変数値やメモリデータ等）の表示とを同期させることが可能である。
【００３２】
次に、以上のような各種処理により実現されるデバッグ機能を使用してソフトウェアデバッグを実施する場合について説明する。
【００３３】
図１４は、ソフトウェアデバッグの処理フローの一例を示している。まず、ソフトウェア開発者がデバッグ制御部１６０（ＧＵＩ）を介して初期化コマンドを入力することで、デバッグ情報取得部４１６において、波形データファイル１４０から取得したソフトウェア実行開始位置情報（時刻およびプログラムカウンタの値）が保持される（ステップＳ１０１）。次に、ソフトウェア開発者がデバッグ制御部１６０（ＧＵＩ）を介してブレークポイント設定コマンドを入力することで、デバッグ情報取得部４１６において、ブレークポイントの値が保持される（ステップＳ１０２）。この後、ソフトウェア開発者がデバッグ制御部１６０（ＧＵＩ）を介して継続実行コマンドを入力することで、デバッグ情報取得部４１６において、保持されているプログラムカウンタの値がブレークポイントの値と一致するまで、ＰＣ変化位置情報（時刻およびプログラムカウンタの値）を取得して時刻およびプログラムカウンタの値を更新する処理が繰り返される（ステップＳ１０３）。デバッグ情報取得部４１６において、保持されているプログラムカウンタの値がブレークポイントの値と一致すると、デバッグ情報取得部４１６からデバッグ処理部４１１に対してブレーク発生通知が発行される（ステップＳ１０４）。これに伴って、デバッグ情報（プログラムカウンタの値に対応するソースコード等）がデバッグ情報出力部１７０（ＧＵＩ）に表示される（ステップＳ１０５）。そして、ソフトウェア開発者は、デバッグ情報出力部１７０（ＧＵＩ）に表示されたデバッグ情報に基づいてソフトウェアの不具合解析を実施し、デバッグを終了するか否かを判断する（ステップＳ１０６）。ソフトウェア開発者がデバッグを終了しない（デバッグを継続する）と判断した場合には、ソフトウェア開発者がデバッグ制御部１６０（ＧＵＩ）を介してステップ実行コマンドを入力することで、デバッグ情報取得部４１６において、保持されている時刻およびプログラムカウンタの値が更新され、ＣＰＵのソフトウェア実行状態が擬似的に１ステップ進められる（ステップＳ１０７）。これに伴って、デバッグ情報出力部１７０（ＧＵＩ）に表示されるデバッグ情報が更新される。そして、ソフトウェア開発者は、ソフトウェアの不具合を特定できた場合、デバッグを終了すると判断し、ソースファイル１１０のソースコードを修正する（ステップＳ１０８）。
【００３４】
以上のような本発明の一実施形態では、ＩＳＳを使用せずに波形データファイルからＣＰＵの内部動作に関する情報を取得してソフトウェアデバッグ機能を実現しているため、ハードウェアのシミュレーションを同時に実施する必要がなくなる。従って、コ・エミュレーションを用いた場合に比べて大幅に実行速度を向上させることが可能になる（コ・エミュレーション：数十ｋＨｚ程度、本発明の一実施形態：数百ｋＨｚ程度）。これにより、ソフトウェアデバッグを短時間で実施することができる。この結果、ハードウェア／ソフトウェア混在システムの開発期間の短縮に大きく寄与することができる。
【００３５】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
ＣＰＵを含むハードウェアおよび前記ＣＰＵにより実行されるソフトウェアを組み合わせて実現されるシステムについて、コンピュータ上で前記ソフトウェアをデバッグするデバッグ方法であって、
前記システムのシミュレーションにより生成された波形データファイル、前記ＣＰＵの構成要素を定義したＣＰＵ定義ファイル、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルを入力する第１工程と、
前記波形データファイルおよび前記ＣＰＵ定義ファイルに基づいて時刻情報およびＣＰＵ内部動作情報を取得して、前記ＣＰＵのソフトウェア実行状態を再現する第２工程と、
前記時刻情報、前記ＣＰＵ内部動作情報、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルに基づいてデバッグ情報を表示する第３工程とを含むことを特徴とするデバッグ方法。
（付記２）
付記１に記載のデバッグ方法において、
前記第２工程は、
前記時刻情報および前記ＣＰＵ内部動作情報を前記ＣＰＵ内のプログラムカウンタの値が次に変化する際の情報に更新する処理を繰り返すことにより、前記ＣＰＵのソフトウェア実行状態を所望の状態まで進める継続実行工程と、
前記時刻情報および前記ＣＰＵ内部動作情報を前記ＣＰＵ内のプログラムカウンタの値が次に変化する際の情報に更新することにより、前記ＣＰＵのソフトウェア実行状態を次の状態まで進めるステップ実行工程とを含むことを特徴とするデバッグ方法。
（付記３）
付記２に記載のデバッグ方法において、
前記第２工程は、前記継続実行工程の実施中に前記ＣＰＵ内部動作情報に含まれる前記ＣＰＵ内のプログラムカウンタの値が予め設定されたブレークポイントの値と一致するのに伴って、ブレーク発生を通知して前記継続実行工程を終了させるブレーク工程を含むことを特徴とするデバッグ方法。
（付記４）
付記１〜付記３のいずれか１項に記載のデバッグ方法において、
前記第３工程は、前記ＣＰＵ内部動作情報に含まれる前記ＣＰＵ内のプログラムカウンタの値に対応する前記ソフトウェアのソースコードを表示するソースコード表示工程を含むことを特徴とするデバッグ方法。
（付記５）
付記１〜付記４のいずれか１項に記載のデバッグ方法において、
前記第３工程は、前記ＣＰＵ内部動作情報に含まれる前記ソフトウェアの指定変数の値を表示する変数値表示工程を含むことを特徴とするデバッグ方法。
（付記６）
付記１〜付記５のいずれか１項に記載のデバッグ方法において、
前記第３工程は、前記ＣＰＵ内部動作情報に含まれる前記ＣＰＵ内のメモリの指定アドレスのデータを表示するメモリデータ表示工程を含むことを特徴とするデバッグ方法。
（付記７）
付記１〜付記６のいずれか１項に記載のデバッグ方法において、
前記時刻情報および前記波形データファイルに基づいて波形情報を表示する第４工程を含むことを特徴とするデバッグ方法。
（付記８）
ＣＰＵを含むハードウェアおよび前記ＣＰＵにより実行されるソフトウェアを組み合わせて実現されるシステムについて前記ソフトウェアをデバッグするためのコンピュータに、
前記システムのシミュレーションにより生成された波形データファイル、前記ＣＰＵの構成要素を定義したＣＰＵ定義ファイル、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルを入力する第１工程と、
前記波形データファイルおよび前記ＣＰＵ定義ファイルに基づいて時刻情報およびＣＰＵ内部動作情報を取得して前記ＣＰＵのソフトウェア実行状態を再現する第２工程と、
前記時刻情報、前記ＣＰＵ内部動作情報、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルに基づいてデバッグ情報を表示する第３工程とを実行させることを特徴とするデバッグプログラム。
【００３６】
以上、本発明について詳細に説明してきたが、前述の実施形態は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
【図面の簡単な説明】
【００３７】
【図１】本発明の一実施形態を示す図である。
【図２】ＣＰＵ定義ファイルの一例を示す図である。
【図３】ソフトウェアデバッグ部の詳細を示す図である。
【図４】デバッグＡＰＩの一例を示す図である。
【図５】波形情報取得ＡＰＩの一例を示す図である。
【図６】初期化処理を示す図である。
【図７】ブレークポイント設定処理示す図である。
【図８】継続実行処理を示す図である。
【図９】ステップ実行処理を示す図である。
【図１０】ソースコード表示処理を示す図である。
【図１１】変数値表示処理を示す図である。
【図１２】メモリデータ表示処理を示す図である。
【図１３】波形表示処理を示す図である。
【図１４】ソフトウェアデバッグの処理フローの一例を示す図である。
【図１５】ＳｏＣの一例を示す図である。
【図１６】ＳｏＣ開発工程の一例を示す図である。
【図１７】コ・シミュレーションの概要を示す図である。
【図１８】コ・エミュレーションの概要を示す図である。
【符号の説明】
【００３８】
１００‥コンピュータ；１１０‥ソースファイル；１２０‥実行ファイル；１３０‥ＨＤＬ記述ファイル；１４０‥波形データファイル；１５０‥ＣＰＵ定義ファイル；１６０‥デバッグ制御部；１７０‥デバッグ情報出力部；１８０‥波形情報出力部；２００‥コンパイラ／リンカ；３００‥エミュレータ；４００‥デバッグプログラム；４１０‥ソフトウェアデバッグ部；４１１‥デバッグ処理部；４１２‥初期化制御部；４１３‥実行制御部；４１４‥ブレーク制御部；４１５‥デバッグ情報表示部；４１６‥デバッグ情報取得部；４１７‥波形情報処理部；４１８‥デバッグ情報処理部；４１９‥情報保持部；４２０‥波形情報取得部；４３０‥波形情報表示部
【図１】
2010009279.tif 000003
【図２】
2010009279.tif 000004
【図３】
2010009279.tif 000005
【図４】
2010009279.tif 000006
【図５】
2010009279.tif 000007
【図６】
2010009279.tif 000008
【図７】
2010009279.tif 000009
【図８】
2010009279.tif 000010
【図９】
2010009279.tif 000011
【図１０】
2010009279.tif 000012
【図１１】
2010009279.tif 000013
【図１２】
2010009279.tif 000014
【図１３】
2010009279.tif 000015
【図１４】
2010009279.tif 000016
【図１５】
2010009279.tif 000017
【図１６】
2010009279.tif 000018
【図１７】
2010009279.tif 000019
【図１８】
2010009279.tif 000020