JP2010009279A - デバッグ方法およびデバッグプログラム - Google Patents

デバッグ方法およびデバッグプログラム Download PDF

Info

Publication number
JP2010009279A
JP2010009279A JP2008167187A JP2008167187A JP2010009279A JP 2010009279 A JP2010009279 A JP 2010009279A JP 2008167187 A JP2008167187 A JP 2008167187A JP 2008167187 A JP2008167187 A JP 2008167187A JP 2010009279 A JP2010009279 A JP 2010009279A
Authority
JP
Japan
Prior art keywords
cpu
software
file
execution
debug
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2008167187A
Other languages
English (en)
Other versions
JP5120103B2 (ja
Inventor
Hiroaki Fujimoto
博昭 藤本
Takashi Fujita
隆司 藤田
Takayuki Sasaki
貴行 佐々木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2008167187A priority Critical patent/JP5120103B2/ja
Publication of JP2010009279A publication Critical patent/JP2010009279A/ja
Application granted granted Critical
Publication of JP5120103B2 publication Critical patent/JP5120103B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】 ハードウェア/ソフトウェア混在システムについてソフトウェアデバッグを短時間で実施する。
【解決手段】 システムのシミュレーションにより生成された波形データファイル、CPUの構成要素を定義したCPU定義ファイル、ソフトウェアのソースファイルおよびソフトウェアの実行ファイルが入力される。波形データファイルおよびCPU定義ファイルに基づいて時刻情報およびCPU内部動作情報が取得されてCPUのソフトウェア実行状態が再現される。時刻情報、CPU内部動作情報、ソフトウェアのソースファイルおよびソフトウェアの実行ファイルに基づいてデバッグ情報が表示される。
【選択図】 図3

Description

本発明は、CPU(Central Processing Unit)を含むハードウェアおよびCPUにより実行されるソフトウェアを組み合わせて実現されるシステム(ハードウェア/ソフトウェア混在システム)についてコンピュータ上でソフトウェアをデバッグする技術に関する。
図15は、SoC(System on Chip)の一例を示している。図16は、SoC開発工程の一例を示している。図15に示すように、ファームウェアを実行するCPU1、各種データを格納するメモリ2および各種周辺機能を具現する機能ブロック3、4、5等を集積したSoC6のようなハードウェア/ソフトウェア混在システムを開発する場合、図16に示すように、ハードウェアおよびソフトウェア(CPU上で実行されるファームウェア)の各々に関して仕様決定、実装および検証を順次実施した後、ハードウェアおよびソフトウェアを組み合わせて実現されるシステムに関しての検証(システムレベル検証)を実施する必要がある。ハードウェア/ソフトウェア混在システムのデバッグにおいては、不具合発生時にハードウェア側またはソフトウェア側のどちらに問題があるのかを切り分けるために、ハードウェアおよびソフトウェアの双方の状態を確認する必要がある。
ハードウェア/ソフトウェア混在システムを検証する手法として、ハードウェア/ソフトウェア協調検証手法が知られている。ハードウェア/ソフトウェア協調検証手法では、CPU以外のハードウェアの動作が論理シミュレータ等により実行され、CPUの動作(ソフトウェアの実行)が命令セットシミュレータ(ISS:Instruction Set Simulator)により実行される。ISSおよび論理シミュレータ等は相互に接続されており、CPUおよびCPU以外のハードウェア間のデータ授受が再現されることで、CPUとその他のハードウェアとを組み合わせたシステムとしての動作が再現される。ハードウェア/ソフトウェア協調検証手法には、論理シミュレータを使用する手法(コ・シミュレーション)と論理エミュレータを使用する手法(コ・エミュレーション)とが存在する。
図17は、コ・シミュレーションの概要を示している。コ・シミュレーションでは、CPUにより実行されるソフトウェアについてソースファイルをビルド(コンパイルおよびリンク)して実行ファイルを生成した後、ソフトウェアのソースファイルおよび実行ファイルとCPU以外のハードウェアに関するHDL(Hardware Design Language)記述ファイルとを入力としてISSおよび論理シミュレータによりシミュレーションが実行される。コ・シミュレーションは、例えば、図17に示すように、コンピュータ11上のソフトウェア開発ツール12(ISS13およびデバッガ14を具備)と論理シミュレータ15とを使用して実現される。この場合、論理シミュレータ15によりCPU以外のハードウェアの動作が実行され、ISS13によりCPUの動作が実行され、ISS13に接続されたデバッガ14によりソフトウェアデバッグ機能が実現される。このようなコ・シミュレーションにおいては、CPU以外のハードウェアに関するシミュレーションには多くの時間を要するため、これがボトルネックとなり実行速度が例えば数十〜数百Hz程度と遅くなる問題がある。例えば、シミュレーション実行開始後、ブレークポイントに到達するまでに数時間を要してしまうことがある。従って、コ・シミュレーションをソフトウェアデバッグに使用することは現実的ではない。
図18は、コ・エミュレーションの概要を示している。コ・シミュレーションにおいて論理シミュレータによりCPU以外のハードウェアの動作が実行されるのに対して、コ・エミュレーションでは、論理エミュレータによりCPU以外のハードウェアの動作が実行される。コ・エミュレーションは、例えば、図18に示ように、コンピュータ21上のエミュレータ制御ツール22(ISS23およびデバッガ24を具備)とコンピュータ21に接続された論理エミュレータ25とを使用して実現される。このようなコ・エミュレーションにおいては、論理エミュレータの実行速度(1MHz)に比べてISSの実行速度が遅いことに加えて、ISSを具備するコンピュータと論理エミュレータとが物理的に別の装置であり、両者を接続するためのインタフェース部分が存在することに起因して、実行速度が著しく低下する。このため、CPUを含めたハードウェア全体をエミュレータにマッピングしてエミュレータ単体で動作させた場合に比べて、実行速度が例えば数十kHz程度と遅くなるという問題がある。
特開2002−366602号公報
コ・シミュレーションまたはコ・エミュレーションのいずれについても、実行速度が非常に遅いため、ソフトウェアデバッグを短時間で実施することは困難であった。
本発明の目的は、ハードウェア/ソフトウェア混在システムについてソフトウェアデバッグを短時間で実施することにある。
本発明の一態様では、CPUを含むハードウェアおよびCPUにより実行されるソフトウェアを組み合わせて実現されるシステムについてコンピュータ上でソフトウェアをデバッグする際に、第1〜第3工程が実施される。第1工程では、システムのシミュレーションにより生成された波形データファイル、CPUの構成要素を定義したCPU定義ファイル、ソフトウェアのソースファイルおよびソフトウェアの実行ファイルが入力される。第2工程では、波形データファイルおよびCPU定義ファイルに基づいて時刻情報およびCPU内部動作情報が取得されてCPUのソフトウェア実行状態が再現される。第3工程では、時刻情報、CPU内部動作情報、ソフトウェアのソースファイルおよびソフトウェアの実行ファイルに基づいてデバッグ情報が表示される。
ハードウェア/ソフトウェア混在システムについてソフトウェアデバッグを短時間で実施することができる。この結果、ハードウェア/ソフトウェア混在システムの開発期間の短縮に大きく寄与することができる。
以下、本発明の実施形態について図面を用いて説明する。
図1は、本発明の一実施形態を示している。図2は、CPU定義ファイルの一例を示している。図3は、ソフトウェアデバッグ部の詳細を示している。図4は、デバッグAPI(Application Program Interface)の一例を示している。図5は、波形情報取得APIの一例を示している。
本発明の一実施形態では、図1に示すように、SoCのデバッグを実施する前に、SoCにおけるCPUにより実行されるソフトウェアについて、コンピュータ100上でコンパイラ/リンカ200によりソースファイル110をビルド(コンパイルおよびリンク)して実行ファイル120(バイナリファイル)を生成する。このとき、ソースファイル110をデバッグオプション付きでビルドすることにより、実行ファイル120にデバッグ用付加情報(命令アドレスおよびソースコード行の対応関係を示す情報等)が含まれるようにする。
次に、SoC全体(CPUを含む)のHDL記述ファイル130をエミュレータ300にマッピングするとともに、実行ファイル120をエミュレータ300内のメモリにロードした後、エミュレータ300単体でエミューションを実行して波形データファイル140を生成する。波形データファイル140は、CPUを含むハードウェアの内部信号の信号名、信号値および時刻等の情報を含むものである。なお、波形データファイル140の形式としては、Verilog−HDLで規定されているVCD(Value Change Dump)ファイルがある。
この後、コンピュータ100上でデバッグプログラム400により実現されるハードウェアデバッグ機能(内部信号波形表示)およびソフトウェアデバッグ機能(初期化、ブレークポイント設定、継続実行、ステップ実行、ソースコード表示、変数値表示やメモリデータ表示等)を使用してSoCのデバッグを実施する。これにより、コ・シミュレーションやコ・エミュレーションを用いた場合と同様に、ハードウェアおよびソフトウェアを同時にデバッグすることが可能である。
デバッグプログラム400は、ソースファイル110、実行ファイル120、波形データファイル140およびCPU定義ファイル150を入力とし、デバッグ制御部160、デバッグ情報出力部170および波形情報出力部180等のGUI(Graphical User Interface)と連動することにより、デバッグ機能を実現している。例えば、デバッグプログラム400は、ソフトウェアデバッグ機能を実現するソフトウェアデバッグ部410、波形データファイル140から時刻や信号値等の情報を取得する波形情報取得部420、波形表示機能(ハードウェアデバッグ機能)を実現する波形情報表示部430等を具現している。
なお、ソースファイル110はソースコード表示の際に使用され、実行ファイル120はソースコード表示や変数値表示の際に使用される。波形データファイル140は、波形表示の際に使用されるとともに、ソフトウェアデバッグ機能を実現するためにCPUの内部動作に関する情報を取得する際に使用される。CPU定義ファイル150は、波形データファイル140からCPUの内部動作に関する情報を取得する際に使用される。CPU定義ファイル150は、例えば、図2に示すように、CPUの基本的な構成要素(クロック、リセット、プログラムカウンタ、スタックポインタ、フレームポインタ、ステータスレジスタ、命令メモリ、データメモリや汎用レジスタ等)およびそれに対応する内部信号の信号名の情報を含むものである。また、デバッグ制御部160は、ソフトウェアデバッグ機能を実現するための各種処理(初期化処理、ブレークポイント設定処理、継続実行処理、ステップ実行処理、ソースコード表示処理、変数値表示処理やメモリデータ表示処理等)のコマンドを入力する際に使用される。デバッグ情報出力部170は、デバッグ情報(ソースコード、変数値やメモリデータ等)を表示する際に使用される。波形情報出力部180は、波形情報を表示する際に使用される。
ソフトウェアデバッグ部410は、例えば、図3に示すように、デバッグ処理部411およびデバッグ情報取得部416を有している。デバッグ処理部411は、デバッグAPIを用いて、デバッグ情報取得部416から必要な情報を取得してソースコード表示、変数値表示やメモリデータ表示等の機能を実現するとともに、デバッグ情報取得部416に必要な指示を発行して初期化、ブレークポイント設定、継続実行やステップ実行等の機能を実現する。例えば、デバッグ処理部411は、初期化機能を実現するための初期化制御部412、継続実行機能やステップ実行機能を実現するための実行制御部413、ブレークポイント設定機能を実現するためのブレーク制御部414、ソースコード表示機能、変数値表示機能やメモリデータ表示機能を実現するためのデバッグ情報表示部415等を有している。
デバッグ情報取得部416は、CPU定義ファイル150に基づいて波形情報取得APIを用いて時刻やCPUの構成要素(内部信号)の値を波形情報取得部420(波形データファイル140)から取得する。波形情報取得部420(波形データファイル140)から情報を取得する際にCPU定義ファイル150が使用されることで、CPUの種類が変更された場合でもCPU定義ファイル150の内容を変更するだけで容易に対応することが可能になる。なお、コ・シミュレーションやコ・エミュレーションを用いた場合には、ISSが必要となるため、CPUのベンダからISSが提供されていない場合にはハードウェアおよびソフトウェアを同時にデバッグすることができない。
例えば、デバッグ情報取得部416は、波形情報取得APIを用いて波形情報取得部420との間で情報の授受を実施する波形情報処理部417、デバッグAPIを用いてデバッグ処理部411との間で情報の授受を実施するデバッグ情報処理部418、時刻、クロックサイクル数、プログラムカウンタ(PC:Program Counter)の値やブレークポイントの値等を保持する情報保持部419等を有している。なお、情報保持部419で保持されるクロックサイクル数は、情報保持部419で保持される時刻が波形データファイル140内のシミュレーション開始時点から何サイクル目に相当するのかを示すものである。情報保持部419では、保持される時刻を波形データファイル140に基づいて予め算出されたCPU内のクロック信号の1サイクルの時間で割った値がクロックサイクル数として保持される。
デバッグ情報取得部416において、時刻、クロックサイクル数およびプログラムカウンタの値が保持されることで、ある時刻にソフトウェアのどの部分が実行されているのかを特定することができる。従って、デバッグ情報取得部416は、時刻、クロックサイクル数およびプログラムカウンタの値に基づいてCPUの内部動作に関する情報をデバッグ処理部411に供給することで、実際にはソフトウェアを実行していないにも拘わらず、擬似的にCPUが動作しているようにデバッグ処理部411に対して応答することが可能になる。
なお、デバッグAPIの種類としては、例えば、図4に示すように、初期化API、ブレークポイント設定API、継続実行API、ステップ実行API、PCリードAPI、メモリリードAPI、ブレーク発生通知APIや実行停止通知API等がある。初期化APIは、デバッグ処理部411がデバッグ情報取得部416にソフトウェア実行開始位置情報(CPU内のリセット信号の立ち下がりエッジの発生時刻およびその時刻に対応するCPU内のプログラムカウンタの値)を保持させる際に使用される。ブレークポイント設定APIは、デバッグ処理部416がデバッグ情報取得部416に指定ブレークポイント値を保持させる際に使用される。継続実行APIは、デバッグ処理部411がデバッグ情報取得部416にプログラムカウンタの値をブレークポイントの値、指定ステップ数後の値またはソフトウェアの終端に対応する値のいずれかまで進めさせる際に使用される。ステップ実行APIは、デバッグ処理部411がデバッグ情報取得部416にプログラムカウンタの値を1ステップ後の値まで進めさせる際に使用される。PCリードAPIは、デバッグ処理部411がCPU内のプログラムカウンタの値をデバッグ情報取得部416から取得する際に使用される。メモリリードAPIは、デバッグ処理部411がCPU内のメモリの指定アドレスのデータをデバッグ情報取得部416から取得する際に使用される。ブレーク発生通知APIは、デバッグ情報取得部416がデバッグ処理部411にブレーク発生(プログラムカウンタの値およびブレークポイントの値の一致)を通知する際に使用される。実行停止通知APIは、デバッグ情報取得部416がデバッグ処理部411に実行停止(プログラムカウンタの値を更新する処理の終了)を通知する際に使用される。
また、波形情報取得APIの種類としては、例えば、図5に示すように、信号値取得APIや信号変化位置取得API等がある。信号値取得APIは、デバッグ情報取得部416が指定信号名の信号に関して指定時刻の値を波形情報取得部420から取得する際に使用される。信号変化位置取得APIは、デバッグ情報取得部416が指定信号名の信号に関して指定時刻後で最初に指定エッジ(立ち上がりエッジ、立ち下がりエッジまたは両エッジ)が発生する時刻およびその時刻の信号値(変化後の信号値)を波形情報取得部420から取得する際に使用される。
ここで、デバッグ機能を実現するための各種処理(初期化処理、ブレークポイント設定処理、継続実行処理、ステップ実行処理、ソースコード表示処理、変数値表示処理、メモリデータ表示処理および波形表示処理)について説明する。
図6は、初期化処理を示している。図6(a)は初期化処理時のデータの流れを示しており、図6(b)は初期化処理時の動作を示している。デバッグ制御部160(GUI)を介して初期化コマンドが入力されると、デバッグ処理部411は、デバッグ情報取得部416に対して初期化指示を発行する。これに伴って、デバッグ情報取得部416は、波形情報取得部420を介して波形データファイル140からリセット解除位置情報(CPU内のリセット信号の立ち下がりエッジの発生時刻およびその時刻に対応するCPU内のプログラムカウンタの値)を取得する(ステップS11)。そして、デバッグ情報取得部416は、波形データファイル140から取得した時刻およびプログラムカウンタの値を保持する(ステップS12)。これにより、デバッグ情報取得部416で再現されるCPUのソフトウェア実行状態がソフトウェア実行開始時の状態に設定されたことになる。
図7は、ブレークポイント設定処理を示している。図7(a)はブレークポイント設定処理時のデータの流れを示しており、図7(b)はブレークポイント設定処理時の動作を示している。デバッグ制御部160(GUI)を介してブレークポイント設定コマンド(ブレークポイントの値を含む)が入力されると、デバッグ処理部411は、デバッグ情報取得部416に対してブレークポイント設定指示を発行する。これに伴って、デバッグ情報取得部416は、デバッグ処理部411から供給されるブレークポイントの値を保持する(ステップS21)。なお、ブレークポイントについては、複数の値を設定することが可能である。
図8は、継続実行処理を示している。図8(a)は継続実行処理時のデータの流れを示しており、図8(b)は継続実行処理時の動作を示している。デバッグ制御部160(GUI)を介して継続実行コマンド(ステップ数を含む)が入力されると、デバッグ処理部411は、デバッグ情報取得部416に対して継続実行指示を発行する。これに伴って、デバッグ情報取得部416は、波形情報取得部420を介して波形データファイル140からPC変化位置情報(プログラムカウンタの値が次に変化する時刻およびプログラムカウンタの変化後の値)を取得する(ステップS31)。そして、デバッグ情報取得部416は、波形データファイル140から取得した時刻およびプログラムカウンタの値を保持する(ステップS32)。この後、デバッグ情報取得部416は、保持しているプログラムカウンタの値がブレークポイントの値と一致するか否かを判定する(ステップS33)。デバッグ情報取得部416は、プログラムカウンタの値はブレークポイントの値と一致しないと判定した場合、プログラムカウンタの値が変化する毎にCPUのソフトウェア実行状態が1ステップ進むものとして、CPUのソフトウェア実行状態が指定ステップ数(デバッグ処理部411から供給されるステップ数)後の状態まで進んでいるか否かを判定する(ステップS34)。デバッグ情報取得部416は、CPUのソフトウェア実行状態は指定ステップ数後の状態まで進んでいないと判定した場合、保持しているプログラムカウンタの値がソフトウェアの終端に対応する値と一致するか否かを判定する(ステップS35)。デバッグ情報取得部416は、プログラムカウンタの値はソフトウェアの終端に対応する値と一致しないと判定した場合、ステップS31以降の処理を再び実施する。そして、デバッグ情報取得部416は、ステップS33にてプログラムカウンタの値はブレークポイントの値と一致すると判定した場合には、デバッグ処理部411に対してブレーク発生通知(プログラムカウンタの値を含む)を発行し、ステップS34にてCPUのソフトウェア実行状態は指定ステップ数後の状態まで進んでいると判定した場合あるいはステップS35にてプログラムカウンタの値はソフトウェアの終端に対応する値と一致すると判定した場合には、デバッグ処理部411に対して実行停止通知(プログラムカウンタの値を含む)を発行する(ステップS36)。これと同時に、デバッグ情報取得部416は、波形情報表示部430に対して波形表示指示を発行する。これにより、デバッグ情報取得部416で再現されるCPUのソフトウェア実行状態がブレーク発生時の状態、指定ステップ数後の状態またはソフトウェア実行終了時の状態のいずれかまで進められたことになる。
図9は、ステップ実行処理を示している。図9(a)はステップ実行処理時のデータの流れを示しており、図9(b)はステップ実行処理時の動作を示している。デバッグ制御部160(GUI)を介してステップ実行コマンドが入力されると、デバッグ処理部411は、デバッグ情報取得部416に対してステップ実行指示を発行する。これに伴って、デバッグ情報取得部416は、波形情報取得部420を介して波形データファイル140からPC変化位置情報(プログラムカウンタの値が次に変化する時刻およびプログラムカウンタの変化後の値)を取得する(ステップS41)。そして、デバッグ情報取得部416は、波形データファイル140から取得した時刻およびプログラムカウンタの値を保持する(ステップS42)。この後、デバッグ情報取得部416は、保持しているプログラムカウンタの値がブレークポイントの値と一致するか否かを判定する(ステップS43)。次に、デバッグ情報取得部416は、保持しているプログラムカウンタの値がソフトウェアの終端に対応する値と一致するか否かを判定する(ステップS44)。そして、デバッグ情報取得部416は、ステップS43にてプログラムカウンタの値はブレークポイントの値と一致すると判定した場合には、デバッグ処理部411に対してブレーク発生通知(プログラムカウンタの値を含む)を発行し、ステップS43にてプログラムカウンタの値はブレークポイントの値と一致しないと判定した場合には、デバッグ処理部411に対して実行停止通知(プログラムカウンタの値を含む)を発行する(ステップS45)。これと同時に、デバッグ情報取得部416は、波形情報表示部430に対して波形表示指示を発行する。これにより、デバッグ情報取得部416で再現されるCPUのソフトウェア実行状態が1ステップ後の状態まで進められたことになる。
図10は、ソースコード表示処理を示している。図10(a)はソースコード表示処理時のデータの流れを示しており、図10(b)はソースコード表示処理時の動作を示している。デバッグ情報取得部416からデバッグ処理部411に対してブレーク発生通知または実行停止通知が発行されると(継続実行処理またはステップ実行処理が終了すると)、デバッグ処理部411は、デバッグ情報取得部416で保持されているプログラムカウンタの値を取得する(ステップS51)。次に、デバッグ処理部411は、実行ファイル120内のデバッグ用付加情報(命令アドレスおよびソースコード行の対応関係を示す情報)を利用して、デバッグ情報取得部416から取得したプログラムカウンタの値に対応するソースコード行を特定する(ステップS52)。そして、デバッグ処理部411は、実行ファイル120内のデバッグ用付加情報に基づいて特定したソースコード行についてソースファイル110からソースコードを取得し(ステップS53)、取得したソースコードをデバッグ情報出力部170(GUI)に表示する(ステップS54)。なお、デバッグ処理部411は、デバッグ情報取得部416で保持されているプログラムカウンタの値に加えて時刻やクロックサイクル数を取得し、ソースコードに加えてプログラムカウンタの値、時刻やクロックサイクル数をデバッグ情報出力部170(GUI)に表示することも可能である。
図11は、変数値表示処理を示している。図11(a)は変数値表示処理時のデータの流れを示しており、図11(b)は変数値表示処理時の動作を示している。デバッグ制御部160(GUI)を介して変数値表示コマンド(変数名を含む)が予め入力されている場合には、デバッグ情報取得部416からデバッグ処理部411に対してブレーク発生通知または実行停止通知が発行されると、デバッグ処理部411は、実行ファイル120内のデバッグ用付加情報を利用して、指定変数名の変数についてアドレスおよび種類を特定する(ステップS61)。次に、デバッグ処理部411は、変数の種類がグローバル変数であるか否かを判定する(ステップS62)。デバッグ処理部411は、変数の種類はグローバル変数であると判定した場合、波形情報取得部420およびデバッグ情報取得部416を介して波形データファイル140からCPU内のメモリの該当アドレス(ステップS61で特定したアドレス)のデータを変数の値として取得し(ステップS63)、取得した変数の値をデバッグ情報出力部170(GUI)に表示する(ステップS64)。また、デバッグ処理部411は、変数の種類はグローバル変数ではない(変数の種類はローカル変数である)と判定した場合、波形情報取得部420およびデバッグ情報取得部416を介して波形データファイル140からCPU内のメモリに格納されている実行対象関数のスタックフレームデータを取得し(ステップS65)、取得したスタックフレームデータに指定変数名の変数が含まれているか否かを判定する(ステップS66)。デバッグ処理部411は、スタックフレームデータに指定変数名の変数は含まれていると判定した場合、スタックフレームデータから変数の値を抽出し(ステップS67)、抽出した変数の値をデバッグ情報出力部170(GUI)に表示する(ステップS68)。なお、デバッグ処理部411は、スタックフレームデータに指定変数名の変数は含まれていないと判定した場合、デバッグ情報出力部170(GUI)に何も表示しない。
図12は、メモリデータ表示処理を示している。図12(a)はメモリデータ表示処理時のデータの流れを示しており、図12(b)はメモリデータ表示処理時の動作を示している。デバッグ制御部160(GUI)を介してメモリデータ表示コマンド(アドレスを含む)が予め入力されている場合には、デバッグ情報取得部416からデバッグ情報処理部411に対してブレーク発生通知または実行停止通知が発行されると、デバッグ処理部411は、波形情報取得部420およびデバッグ情報取得部416を介して波形データファイル140からCPU内のメモリの指定アドレス(指定アドレス範囲)のデータを取得し(ステップS71)、取得したメモリデータをデバッグ情報出力部170(GUI)に表示する(ステップS72)。
図13は、波形表示処理を示している。図13(a)は波形表示処理時のデータの流れを示しており、図13(b)は波形表示処理時の動作を示している。デバッグ情報取得部416から波形情報表示部430に対して波形表示指示(時刻を含む)が発行されると(継続実行処理またはステップ実行処理が終了すると)、波形情報表示部430は、デバッグ情報取得部416で保持されている時刻を取得する(ステップS81)。そして、波形情報表示部430は、波形情報取得部420を介して波形データファイル140から指定時刻(デバッグ情報取得部416から供給される時刻)に対応する波形情報を取得し(ステップS82)、取得した波形情報を波形情報出力部180(GUI)に表示する(ステップS83)。これにより、波形情報の表示とデバッグ情報(ソースコード、変数値やメモリデータ等)の表示とを同期させることが可能である。
次に、以上のような各種処理により実現されるデバッグ機能を使用してソフトウェアデバッグを実施する場合について説明する。
図14は、ソフトウェアデバッグの処理フローの一例を示している。まず、ソフトウェア開発者がデバッグ制御部160(GUI)を介して初期化コマンドを入力することで、デバッグ情報取得部416において、波形データファイル140から取得したソフトウェア実行開始位置情報(時刻およびプログラムカウンタの値)が保持される(ステップS101)。次に、ソフトウェア開発者がデバッグ制御部160(GUI)を介してブレークポイント設定コマンドを入力することで、デバッグ情報取得部416において、ブレークポイントの値が保持される(ステップS102)。この後、ソフトウェア開発者がデバッグ制御部160(GUI)を介して継続実行コマンドを入力することで、デバッグ情報取得部416において、保持されているプログラムカウンタの値がブレークポイントの値と一致するまで、PC変化位置情報(時刻およびプログラムカウンタの値)を取得して時刻およびプログラムカウンタの値を更新する処理が繰り返される(ステップS103)。デバッグ情報取得部416において、保持されているプログラムカウンタの値がブレークポイントの値と一致すると、デバッグ情報取得部416からデバッグ処理部411に対してブレーク発生通知が発行される(ステップS104)。これに伴って、デバッグ情報(プログラムカウンタの値に対応するソースコード等)がデバッグ情報出力部170(GUI)に表示される(ステップS105)。そして、ソフトウェア開発者は、デバッグ情報出力部170(GUI)に表示されたデバッグ情報に基づいてソフトウェアの不具合解析を実施し、デバッグを終了するか否かを判断する(ステップS106)。ソフトウェア開発者がデバッグを終了しない(デバッグを継続する)と判断した場合には、ソフトウェア開発者がデバッグ制御部160(GUI)を介してステップ実行コマンドを入力することで、デバッグ情報取得部416において、保持されている時刻およびプログラムカウンタの値が更新され、CPUのソフトウェア実行状態が擬似的に1ステップ進められる(ステップS107)。これに伴って、デバッグ情報出力部170(GUI)に表示されるデバッグ情報が更新される。そして、ソフトウェア開発者は、ソフトウェアの不具合を特定できた場合、デバッグを終了すると判断し、ソースファイル110のソースコードを修正する(ステップS108)。
以上のような本発明の一実施形態では、ISSを使用せずに波形データファイルからCPUの内部動作に関する情報を取得してソフトウェアデバッグ機能を実現しているため、ハードウェアのシミュレーションを同時に実施する必要がなくなる。従って、コ・エミュレーションを用いた場合に比べて大幅に実行速度を向上させることが可能になる(コ・エミュレーション:数十kHz程度、本発明の一実施形態:数百kHz程度)。これにより、ソフトウェアデバッグを短時間で実施することができる。この結果、ハードウェア/ソフトウェア混在システムの開発期間の短縮に大きく寄与することができる。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
CPUを含むハードウェアおよび前記CPUにより実行されるソフトウェアを組み合わせて実現されるシステムについて、コンピュータ上で前記ソフトウェアをデバッグするデバッグ方法であって、
前記システムのシミュレーションにより生成された波形データファイル、前記CPUの構成要素を定義したCPU定義ファイル、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルを入力する第1工程と、
前記波形データファイルおよび前記CPU定義ファイルに基づいて時刻情報およびCPU内部動作情報を取得して、前記CPUのソフトウェア実行状態を再現する第2工程と、
前記時刻情報、前記CPU内部動作情報、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルに基づいてデバッグ情報を表示する第3工程とを含むことを特徴とするデバッグ方法。
(付記2)
付記1に記載のデバッグ方法において、
前記第2工程は、
前記時刻情報および前記CPU内部動作情報を前記CPU内のプログラムカウンタの値が次に変化する際の情報に更新する処理を繰り返すことにより、前記CPUのソフトウェア実行状態を所望の状態まで進める継続実行工程と、
前記時刻情報および前記CPU内部動作情報を前記CPU内のプログラムカウンタの値が次に変化する際の情報に更新することにより、前記CPUのソフトウェア実行状態を次の状態まで進めるステップ実行工程とを含むことを特徴とするデバッグ方法。
(付記3)
付記2に記載のデバッグ方法において、
前記第2工程は、前記継続実行工程の実施中に前記CPU内部動作情報に含まれる前記CPU内のプログラムカウンタの値が予め設定されたブレークポイントの値と一致するのに伴って、ブレーク発生を通知して前記継続実行工程を終了させるブレーク工程を含むことを特徴とするデバッグ方法。
(付記4)
付記1〜付記3のいずれか1項に記載のデバッグ方法において、
前記第3工程は、前記CPU内部動作情報に含まれる前記CPU内のプログラムカウンタの値に対応する前記ソフトウェアのソースコードを表示するソースコード表示工程を含むことを特徴とするデバッグ方法。
(付記5)
付記1〜付記4のいずれか1項に記載のデバッグ方法において、
前記第3工程は、前記CPU内部動作情報に含まれる前記ソフトウェアの指定変数の値を表示する変数値表示工程を含むことを特徴とするデバッグ方法。
(付記6)
付記1〜付記5のいずれか1項に記載のデバッグ方法において、
前記第3工程は、前記CPU内部動作情報に含まれる前記CPU内のメモリの指定アドレスのデータを表示するメモリデータ表示工程を含むことを特徴とするデバッグ方法。
(付記7)
付記1〜付記6のいずれか1項に記載のデバッグ方法において、
前記時刻情報および前記波形データファイルに基づいて波形情報を表示する第4工程を含むことを特徴とするデバッグ方法。
(付記8)
CPUを含むハードウェアおよび前記CPUにより実行されるソフトウェアを組み合わせて実現されるシステムについて前記ソフトウェアをデバッグするためのコンピュータに、
前記システムのシミュレーションにより生成された波形データファイル、前記CPUの構成要素を定義したCPU定義ファイル、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルを入力する第1工程と、
前記波形データファイルおよび前記CPU定義ファイルに基づいて時刻情報およびCPU内部動作情報を取得して前記CPUのソフトウェア実行状態を再現する第2工程と、
前記時刻情報、前記CPU内部動作情報、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルに基づいてデバッグ情報を表示する第3工程とを実行させることを特徴とするデバッグプログラム。
以上、本発明について詳細に説明してきたが、前述の実施形態は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
本発明の一実施形態を示す図である。 CPU定義ファイルの一例を示す図である。 ソフトウェアデバッグ部の詳細を示す図である。 デバッグAPIの一例を示す図である。 波形情報取得APIの一例を示す図である。 初期化処理を示す図である。 ブレークポイント設定処理示す図である。 継続実行処理を示す図である。 ステップ実行処理を示す図である。 ソースコード表示処理を示す図である。 変数値表示処理を示す図である。 メモリデータ表示処理を示す図である。 波形表示処理を示す図である。 ソフトウェアデバッグの処理フローの一例を示す図である。 SoCの一例を示す図である。 SoC開発工程の一例を示す図である。 コ・シミュレーションの概要を示す図である。 コ・エミュレーションの概要を示す図である。
符号の説明
100‥コンピュータ;110‥ソースファイル;120‥実行ファイル;130‥HDL記述ファイル;140‥波形データファイル;150‥CPU定義ファイル;160‥デバッグ制御部;170‥デバッグ情報出力部;180‥波形情報出力部;200‥コンパイラ/リンカ;300‥エミュレータ;400‥デバッグプログラム;410‥ソフトウェアデバッグ部;411‥デバッグ処理部;412‥初期化制御部;413‥実行制御部;414‥ブレーク制御部;415‥デバッグ情報表示部;416‥デバッグ情報取得部;417‥波形情報処理部;418‥デバッグ情報処理部;419‥情報保持部;420‥波形情報取得部;430‥波形情報表示部

Claims (5)

  1. CPUを含むハードウェアおよび前記CPUにより実行されるソフトウェアを組み合わせて実現されるシステムについて、コンピュータ上で前記ソフトウェアをデバッグするデバッグ方法であって、
    前記システムのシミュレーションにより生成された波形データファイル、前記CPUの構成要素を定義したCPU定義ファイル、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルを入力する第1工程と、
    前記波形データファイルおよび前記CPU定義ファイルに基づいて時刻情報およびCPU内部動作情報を取得して、前記CPUのソフトウェア実行状態を再現する第2工程と、
    前記時刻情報、前記CPU内部動作情報、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルに基づいてデバッグ情報を表示する第3工程とを含むことを特徴とするデバッグ方法。
  2. 請求項1に記載のデバッグ方法において、
    前記第2工程は、
    前記時刻情報および前記CPU内部動作情報を前記CPU内のプログラムカウンタの値が次に変化する際の情報に更新する処理を繰り返すことにより、前記CPUのソフトウェア実行状態を所望の状態まで進める継続実行工程と、
    前記時刻情報および前記CPU内部動作情報を前記CPU内のプログラムカウンタの値が次に変化する際の情報に更新することにより、前記CPUのソフトウェア実行状態を次の状態まで進めるステップ実行工程とを含むことを特徴とするデバッグ方法。
  3. 請求項2に記載のデバッグ方法において、
    前記第2工程は、前記継続実行工程の実施中に前記CPU内部動作情報に含まれる前記CPU内のプログラムカウンタの値が予め設定されたブレークポイントの値と一致するのに伴って、ブレーク発生を通知して前記継続実行工程を終了させるブレーク工程を含むことを特徴とするデバッグ方法。
  4. 請求項1〜請求項3のいずれか1項に記載のデバッグ方法において、
    前記第3工程は、前記CPU内部動作情報に含まれる前記CPU内のプログラムカウンタの値に対応する前記ソフトウェアのソースコードを表示するソースコード表示工程を含むことを特徴とするデバッグ方法。
  5. CPUを含むハードウェアおよび前記CPUにより実行されるソフトウェアを組み合わせて実現されるシステムについて前記ソフトウェアをデバッグするためのコンピュータに、
    前記システムのシミュレーションにより生成された波形データファイル、前記CPUの構成要素を定義したCPU定義ファイル、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルを入力する第1工程と、
    前記波形データファイルおよび前記CPU定義ファイルに基づいて時刻情報およびCPU内部動作情報を取得して前記CPUのソフトウェア実行状態を再現する第2工程と、
    前記時刻情報、前記CPU内部動作情報、前記ソフトウェアのソースファイルおよび前記ソフトウェアの実行ファイルに基づいてデバッグ情報を表示する第3工程とを実行させることを特徴とするデバッグプログラム。
JP2008167187A 2008-06-26 2008-06-26 デバッグ方法およびデバッグプログラム Expired - Fee Related JP5120103B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008167187A JP5120103B2 (ja) 2008-06-26 2008-06-26 デバッグ方法およびデバッグプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008167187A JP5120103B2 (ja) 2008-06-26 2008-06-26 デバッグ方法およびデバッグプログラム

Publications (2)

Publication Number Publication Date
JP2010009279A true JP2010009279A (ja) 2010-01-14
JP5120103B2 JP5120103B2 (ja) 2013-01-16

Family

ID=41589705

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008167187A Expired - Fee Related JP5120103B2 (ja) 2008-06-26 2008-06-26 デバッグ方法およびデバッグプログラム

Country Status (1)

Country Link
JP (1) JP5120103B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016206963A (ja) * 2015-04-23 2016-12-08 株式会社明電舎 デジタル回路シミュレータの波形とソフトウェア設計図との連携方法および連携プログラム
CN112948200A (zh) * 2021-02-01 2021-06-11 湖南品腾电子科技有限公司 基于mcu存储器可重用性验证***及方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001350646A (ja) * 2000-06-06 2001-12-21 Advantest Corp 半導体試験システム
JP2002108649A (ja) * 2000-09-29 2002-04-12 Toshiba Corp トレース解析を支援するためのプログラムを記録した記録媒体及びプログラム製品
JP2002342113A (ja) * 2001-05-15 2002-11-29 Hitachi Ltd プログラム実行状況表示方法及びその実施装置並びにその処理プログラム
JP2007334812A (ja) * 2006-06-19 2007-12-27 Nec Electronics Corp シミュレータ及びシミュレーション方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001350646A (ja) * 2000-06-06 2001-12-21 Advantest Corp 半導体試験システム
JP2002108649A (ja) * 2000-09-29 2002-04-12 Toshiba Corp トレース解析を支援するためのプログラムを記録した記録媒体及びプログラム製品
JP2002342113A (ja) * 2001-05-15 2002-11-29 Hitachi Ltd プログラム実行状況表示方法及びその実施装置並びにその処理プログラム
JP2007334812A (ja) * 2006-06-19 2007-12-27 Nec Electronics Corp シミュレータ及びシミュレーション方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016206963A (ja) * 2015-04-23 2016-12-08 株式会社明電舎 デジタル回路シミュレータの波形とソフトウェア設計図との連携方法および連携プログラム
CN112948200A (zh) * 2021-02-01 2021-06-11 湖南品腾电子科技有限公司 基于mcu存储器可重用性验证***及方法

Also Published As

Publication number Publication date
JP5120103B2 (ja) 2013-01-16

Similar Documents

Publication Publication Date Title
US8180620B2 (en) Apparatus and method for performing hardware and software co-verification testing
JP2018136985A5 (ja)
WO2007001108A1 (en) System for providing feature-oriented software product line engineering environment
JP2017084082A (ja) シミュレーション装置、試験シナリオファイル作成方法、及び試験シナリオファイルを用いた試験方法
US9235670B2 (en) Method and an apparatus for automatic generation of verification environment for processor design and verification
US8140315B2 (en) Test bench, method, and computer program product for performing a test case on an integrated circuit
Iyenghar et al. Towards model-based test automation for embedded systems using UML and UTP
JP6763153B2 (ja) ハードウェア/ソフトウェア協調検証装置およびハードウェア/ソフトウェア協調検証方法
EP3532936A1 (en) Debugging system and method
US7606694B1 (en) Framework for cycle accurate simulation
JP2004348606A (ja) 高位合成装置、ハードウェア検証用モデル生成方法およびハードウェア検証方法
JP5120103B2 (ja) デバッグ方法およびデバッグプログラム
CN117435483A (zh) 基于Formal工具的仿真验证激励生成方法、装置、介质及终端
Patel et al. Model-driven validation of SystemC designs
CN114328062B (zh) 校验缓存一致性的方法、装置和存储介质
Tolvanen et al. Metamodeling for medical devices: Code generation, model-debugging and run-time synchronization
Friske et al. Improving test coverage for UML state machines using transition instrumentation
JP5387521B2 (ja) 論理検証シナリオ生成装置、及び、論理検証シナリオ生成プログラム
JP2016045676A (ja) デバッグ回路、デバッガ装置、半導体装置及びデバッグ方法
JP2016126700A (ja) プログラム検証装置、プログラム検証方法及びプログラム検証プログラム
JP3745968B2 (ja) 試験システム及び試験方法及び試験プログラム及び試験プログラムを記録した計算機で読み取り可能な記録媒体
CN117313650B (zh) 一种芯片测试验证方法及其应用装置
JP2009217720A (ja) プログラム生成装置およびプログラム生成方法
JP4893028B2 (ja) チップセットのエミュレーション装置および方法
US7904289B2 (en) Method and system for testing functionality of a chip checker

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110315

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120912

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120925

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121008

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151102

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees