(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025019921
(43)【公開日】2025-02-07
(54)【発明の名称】デバッグ装置、デバッグ装置の制御方法、及びデバッグ装置の制御プログラム
(51)【国際特許分類】
G06F 11/36 20060101AFI20250131BHJP
【FI】
G06F11/36 164
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023123827
(22)【出願日】2023-07-28
【国等の委託研究の成果に係る記載事項】(出願人による申告)令和4年度、国立研究開発法人新エネルギー・産業技術総合開発機構、「省エネAI半導体及びシステムに関する技術開発事業/AIエッジコンピューティングの産業応用加速のための設計技術開発/RISC-Vシステム設計 プラットフォームの研究開発」、委託研究開発、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】524311859
【氏名又は名称】一般財団法人新システムビジョン研究開発機構
(74)【代理人】
【識別番号】100099759
【弁理士】
【氏名又は名称】青木 篤
(74)【代理人】
【識別番号】100123582
【弁理士】
【氏名又は名称】三橋 真二
(74)【代理人】
【識別番号】100092624
【弁理士】
【氏名又は名称】鶴田 準一
(74)【代理人】
【識別番号】100114018
【弁理士】
【氏名又は名称】南山 知広
(74)【代理人】
【識別番号】100153729
【弁理士】
【氏名又は名称】森本 有一
(74)【代理人】
【識別番号】100160716
【弁理士】
【氏名又は名称】遠藤 力
(72)【発明者】
【氏名】一色 剛
(72)【発明者】
【氏名】吉屋 英二
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042HH07
5B042HH32
(57)【要約】
【課題】検証コストの増大を抑制しつつ、ソフトウェア及びハードウェアモジュールの検証を同時に実行することが可能なデバッグ装置を提供する。
【解決手段】デバッグ装置1は、シミュレーションを実行するシミュレータと、ソフトウェア実行ファイル及びプロセッサの実行状態、プログラム変数、並びにプロセッサが有する複数の記憶回路の監視制御指示を提供する監視制御部と、シミュレーションをシミュレータに実行させるシミュレータ制御部と、を有し、シミュレータ制御部は、監視制御指示が、複数の内部記憶回路及び外部記憶回路に記憶されるデータ、並びにプロセッサの入出力データに関するものであると判定したとき、複数の内部記憶回路及び外部記憶回路に記憶されるデータ、並びにプロセッサの入出力データを監視制御するようにシミュレーションをシミュレータに実行させ、シミュレーションの実行結果を監視制御部に提供する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
それぞれがデータを記憶する複数の内部記憶回路を有し、データが入力されることに応じて処理を実行し、実行状態に応じたデータを出力するプロセッサ、及び前記プロセッサに接続されて、データを記憶する外部記憶回路を含むハードウェアモジュールの動作を記述したハードウェアソースファイルをコンパイルして生成されたハードウェアモジュールモデルと、
複数のプログラム変数を含み、前記プロセッサに実行させる複数のステップを含む処理を記述したソフトウェアソースファイルをコンパイルして生成されたソフトウェア実行ファイルを記憶する記憶部と、
前記ソフトウェアソースファイルに記述された処理を、前記ハードウェアモジュールモデル及び前記ソフトウェア実行ファイルを使用してシミュレーションを実行するシミュレータと、
前記シミュレータによるシミュレーションにおいて、前記ソフトウェア実行ファイル、前記プログラム変数、前記プロセッサの実行状態を示す実行状態データ、前記プロセッサが有する前記複数の内部記憶回路及び前記外部記憶回路に記憶される記憶データ、並びに前記プロセッサが入出力する入出力データの監視制御指示を提供する監視制御部と、
前記シミュレーションを前記シミュレータに実行させるシミュレータ制御部と、を有し、
前記シミュレータ制御部は、
前記監視制御指示が、前記プログラム変数、前記実行状態データ、前記記憶データ、及び前記入出力データの何れに関するものであるかを判定し、
前記監視制御指示が、前記実行状態データ、前記記憶データ、及び前記入出力データの何れかに関するものであると判定したとき、前記実行状態データ、前記記憶データ、及び前記入出力データを監視制御するように前記シミュレーションを前記シミュレータに実行させ、
前記シミュレーションの実行結果を示す実行結果情報を前記監視制御部に提供し、
前記監視制御部は、前記実行結果情報を出力する、
ことを特徴とするデバッグ装置。
【請求項2】
前記シミュレータは、
前記実行状態データ、前記記憶データ、及び前記入出力データを示すシミュレーションデータ構造体と、
前記シミュレーションデータ構造体に対応するデータを更新して、前記ソフトウェアソースファイルで記述された前記複数のステップを含む処理を実行する命令動作部と、
前記ソフトウェア実行ファイル、前記プログラム変数、及び前記シミュレーションデータ構造体のダミーデータであるダミー構造体のそれぞれを記憶するCPUメモリと、
を有する、請求項1に記載のデバッグ装置。
【請求項3】
前記監視制御部は、前記プログラム変数及び前記ダミー構造体の何れかが記憶される領域のアドレス値に関連付けて前記監視制御指示を提供し、
前記シミュレータ制御部は、前記アドレス値に基づいて、前記プログラム変数、前記実行状態データ、前記記憶データ、及び前記入出力データの何れに関するものであるかを判定する、請求項2に記載のデバッグ装置。
【請求項4】
前記ダミー構造体は、前記シミュレータによって更新されず、
前記シミュレータ制御部は、前記監視制御指示と共に入力される前記アドレス値が前記ダミー構造体に関連付けられるとき、前記実行結果情報を前記シミュレーションデータ構造体から取得する、
請求項3に記載のデバッグ装置。
【請求項5】
前記ハードウェアモジュールは、ハードウェアアクセラレータ、バスモジュール、及びI/O回路の少なくとも1つである論理ハードウェアモデルを更に含み、
前記実行状態データは、前記プロセッサの実行状態に加えて前記論理ハードウェアモデルの実行状態を示し、
前記記憶データは、前記複数の内部記憶回路及び前記外部記憶回路に記憶されるデータに加えて、前記論理ハードウェアモデルに記憶されるデータを含み、
前記入出力データは、前記プロセッサが入出力するデータに加えて、前記論理ハードウェアモデルが入出力するデータを含み、
前記シミュレータは、
前記実行状態データ、前記記憶データ、前記入出力データ及びを示すシミュレーションデータ構造体と、
前記シミュレーションデータ構造体に対応するデータを更新して、前記ソフトウェアソースファイルで記述された前記複数のステップを含む処理を実行する命令動作部と、
前記シミュレーションデータ構造体に対応するデータを更新して、前記論理ハードウェアモデルの論理動作を実行する論理動作部と、
前記ソフトウェア実行ファイル、前記プログラム変数、及び前記シミュレーションデータ構造体のダミーデータであるダミー構造体のそれぞれを記憶するCPUメモリと、
を有する、請求項1に記載のデバッグ装置。
【請求項6】
前記ハードウェアモジュールモデルは、前記ソフトウェアソースファイルにおいて、グローバル変数として宣言される、請求項5に記載のデバッグ装置。
【請求項7】
それぞれがデータを記憶する複数の内部記憶回路を有し、データが入力されることに応じて処理を実行し、実行状態に応じたデータを出力するプロセッサ、及び前記プロセッサに接続されて、データを記憶する外部記憶回路を含むハードウェアモジュールの動作を記述したハードウェアソースファイルをコンパイルして生成されたハードウェアモジュールモデルと、
複数のプログラム変数を含み、前記プロセッサに実行させる複数のステップを含む処理を記述したソフトウェアソースファイルをコンパイルして生成されたソフトウェア実行ファイルを記憶する記憶部と、
前記ソフトウェアソースファイルに記述された処理を、前記ハードウェアモジュールモデル及び前記ソフトウェア実行ファイルを使用してシミュレーションを実行するシミュレータと、
前記シミュレータによるシミュレーションにおいて、前記ソフトウェア実行ファイル、前記プログラム変数、前記プロセッサの実行状態を示す実行状態データ、前記プロセッサが有する前記複数の内部記憶回路及び前記外部記憶回路に記憶される記憶データ、並びに前記プロセッサが入出力する入出力データの監視制御指示を提供する監視制御部と、
前記シミュレーションを前記シミュレータに実行させるシミュレータ制御部と、を有するデバッグ装置の制御方法であって、
前記監視制御指示が、前記プログラム変数、前記実行状態データ、前記記憶データ、及び前記入出力データの何れに関するものであるかを判定し、
前記監視制御指示が、前記実行状態データ、前記記憶データ、及び前記入出力データの何れかに関するものであると判定したとき、前記実行状態データ、前記記憶データ、及び前記入出力データを監視制御するように前記シミュレーションを前記シミュレータに実行させ、
前記シミュレーションの実行結果を示す実行結果情報を前記監視制御部に提供し、
前記実行結果情報を出力する、
ことを含む、ことを特徴とするデバッグ装置の制御方法。
【請求項8】
それぞれがデータを記憶する複数の内部記憶回路を有し、データが入力されることに応じて処理を実行し、実行状態に応じたデータを出力するプロセッサ、及び前記プロセッサに接続されて、データを記憶する外部記憶回路を含むハードウェアモジュールの動作を記述したハードウェアソースファイルをコンパイルして生成されたハードウェアモジュールモデルと、
複数のプログラム変数を含み、前記プロセッサに実行させる複数のステップを含む処理を記述したソフトウェアソースファイルをコンパイルして生成されたソフトウェア実行ファイルを記憶する記憶部と、
前記ソフトウェアソースファイルに記述された処理を、前記ハードウェアモジュールモデル及び前記ソフトウェア実行ファイルを使用してシミュレーションを実行するシミュレータと、
前記シミュレータによるシミュレーションにおいて、前記ソフトウェア実行ファイル、前記プログラム変数、前記プロセッサの実行状態を示す実行状態データ、前記プロセッサが有する前記複数の内部記憶回路及び前記外部記憶回路に記憶される記憶データ、並びに前記プロセッサが入出力する入出力データの監視制御指示を提供する監視制御部と、
前記シミュレーションを前記シミュレータに実行させるシミュレータ制御部と、を有するデバッグ装置の制御プログラムであって、
前記監視制御指示が、前記プログラム変数、前記実行状態データ、前記記憶データ、及び前記入出力データの何れに関するものであるかを判定し、
前記監視制御指示が、前記実行状態データ、前記記憶データ、及び前記入出力データの何れかに関するものであると判定したとき、前記実行状態データ、前記記憶データ、及び前記入出力データを監視制御するように前記シミュレーションを前記シミュレータに実行させ、
前記シミュレーションの実行結果を示す実行結果情報を前記監視制御部に提供し、
前記実行結果情報を出力する、
処理をコンピュータに実行させる、ことを特徴とするデバッグ装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デバッグ装置、デバッグ装置の制御方法、及びデバッグ装置の制御プログラムに関する。
【背景技術】
【0002】
組み込み分野のデジタルシステムにおいて、実機を製作する前にCPUを含むハードウェア回路と、CPUによって実行されるソフトウェアとを協調してデバッグを行って、開発期間を短縮すると共に、品質を向上させる技術が知られている。例えば、特許文献1には、ハードウェア記述言語(HDL)で記述されるCPUモデルと、ソフトウェアに記述される処理を実行するCPUの動作をシミュレーションしてシミュレーション結果を表示するHDLシミュレータとを有する検証装置が知られている。特許文献1に記載される検証装置は、高価な論理エミュレータを使用することなく、HDLシミュレータでハードウェアとソフトウェアとの協調処理の動作を検証することができる。しかしながら、特許文献1に記載される検証装置は、記録されるHDLシミュレータによって記憶される波形データの量が膨大になるため、メモリ容量が増大すると共に、シミュレーション時間が増加して、検証コストが増加するおそれがある。
【0003】
特許文献2には、HDLで記述されたLSIモデルの記述ファイルにおいて、ログ情報を取得するか否かを示す取得要否情報を含むログ制御情報を設定し、ログ制御情報に基づいて、転送された転送情報を記憶するか否かを判定する技術が記載される。特許文献2に記載される技術は、不要な転送情報を記憶しないことで、組み込みシステムで動作するソフトウェアの検証が効率化できる。
【0004】
また、特許文献3には、プログラマブル素子によって構築された機能ブロックのソフトウェアの処理に伴う動作を検出するときに、出力データの何れかが変化したと判断した場合に複数の出力データを順に読み込む技術が記載される。特許文献3に記載される技術は、出力データの何れかが変化したと判断したときのみに出力データを読み込むことで、検証コストを圧縮することができる。
【0005】
しかしながら、特許文献2及び3に記載される技術では、シミュレータによって記憶される波形データの量は、特許文献1に記載される技術よりも減少するが、波形データを記憶することに伴って検証コストが増加する可能性は低くはない。
【0006】
一方、特許文献4には、C言語及びC++言語等のソフトウェアを記述するプログラミング言語によって記述された論理回路記述から論理回路を合成する技術が記載される。また、非特許文献1には、プログラミング言語によって記述された論理回路記述から論理回路を合成する技術をCPUの設計に適用する技術が記載される。さらに、非特許文献2には、プログラミング言語によって記述された論理回路記述から論理回路を合成する技術を、CPUを含む種々の回路が実装されるSoCの設計に拡張する技術が記載される。特許文献4並びに非特許文献1及び2に記載される技術により、CPUを含む種々の回路が実装されるSoC全体をプログラミング言語で記述して、SoC全体のレジスタ転送レベル(Register Transfer Level、RTL)記述による論理回路を生成できる。
【0007】
また、非特許文献3には、GNUデバッガ(GDB)をシンボリックデバッガとして使用して検証対象のソフトウェアの実行状態を監視制御すると共に、ハードウェアモジュールのレジスタの動作を、JTAGテスト手法を使用して監視制御する技術が記載される。非特許文献3に記載される技術では、SoCに実装されるCPU及びIPコアを、ソフトウェアのデバッグに使用されるGDBインタフェースを利用してソフトウェアのデバッグと一貫してデバッグすることができる。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2017-162130号公報
【特許文献2】特開2013-174960号公報
【特許文献3】特開2012-037992号公報
【特許文献4】特許第5842255号公報
【非特許文献】
【0009】
【非特許文献1】「Design Verification Methodology of Pipelined RISC-V Processor Using C2RTL Framework」Eiji YOSHIYAら、IEICE TRANSACTIONS on Fundamentals of Electronics, Communications and Computer Sciences, Vol. E105-A No.7 PP.1061-1069 July 01, 2022
【非特許文献2】「LLVM-C2RTL: C/C++ Based System Level RTL Design Framework Using LLVM Compiler Infrastructure」Tamon SADASUEら、IPSJ Transactions on System and LSI Design Methodology, Vol. 16, p. 12-26, February, 2023
【非特許文献3】「A Unified GDB-Based Source-Transaction Level SW/HW Co-Debugging」Tsun-Hsin Changら, 2016 IEEE Pacific Conference on Circuits and Systems, Oct. 25, 2016
【発明の概要】
【発明が解決しようとする課題】
【0010】
上述のように、特許文献1~3に記載される技術では、検証コストが増加するおそれがある。また、特許文献4並びに非特許文献1及び2には、プロセッサに実行させる処理を記述したソフトウェア及びプロセッサを含むハードウェアモジュールのデバッグを同時に実行することは、記載されていない。また、非特許文献3に記載される技術では、ソフトウェア及びハードウェアの検証を同時に実行することは記載されるが、論理合成により生成した論理ゲートレベルの回路にJTAGテスト用のスキャン回路を付加する処理が行われるため、検証コストが増加する。さらに、非特許文献3に記載される技術では、JTAGテスト用のスキャン回路が付加された論理ゲートレベルの回路の動作をシミュレーションで確認するので、シミュレーション時間が増大し、検証コストが更に増加するおそれがある。
【0011】
本発明は、このような課題を解決するものであり、検証コストの増大を抑制しつつ、ソフトウェア及びハードウェアモジュールの検証を同時に実行することが可能なデバッグ装置を提供することを目的とする。
【課題を解決するための手段】
【0012】
本発明に係るデバッグ装置は、それぞれがデータを記憶する複数の内部記憶回路を有し、データが入力されることに応じて処理を実行し、実行状態に応じたデータを出力するプロセッサ、及びプロセッサに接続されて、データを記憶する外部記憶回路を含むハードウェアモジュールの動作を記述したハードウェアソースファイルをコンパイルして生成されたハードウェアモジュールモデルと、複数のプログラム変数を含み、プロセッサに実行させる複数のステップを含む処理を記述したソフトウェアソースファイルをコンパイルして生成されたソフトウェア実行ファイルを記憶する記憶部と、ソフトウェアソースファイルに記述された処理を、ハードウェアモジュールモデル及びソフトウェア実行ファイルを使用してシミュレーションを実行するシミュレータと、シミュレータによるシミュレーションにおいて、ソフトウェア実行ファイル、プログラム変数、プロセッサの実行状態を示す実行状態データ、プロセッサが有する複数の内部記憶回路及び外部記憶回路に記憶される記憶データ、並びにプロセッサが入出力する入出力データの監視制御指示を提供する監視制御部と、シミュレーションをシミュレータに実行させるシミュレータ制御部と、を有し、シミュレータ制御部は、監視制御指示が、プログラム変数、実行状態データ、記憶データ、及び入出力データの何れに関するものであるかを判定し、監視制御指示が、実行状態データ、記憶データ、及び入出力データの何れかに関するものであると判定したとき、実行状態データ、記憶データ、及び入出力データを監視制御するようにシミュレーションをシミュレータに実行させ、シミュレーションの実行結果を示す実行結果情報を監視制御部に提供し、監視制御部は、実行結果情報を出力する。
【0013】
さらに、本発明に係るデバッグ装置では、シミュレータは、実行状態データ、記憶データ、及び入出力データを示すシミュレーションデータ構造体と、シミュレーションデータ構造体に対応するデータを更新して、ソフトウェアソースファイルで記述された複数のステップを含む処理を実行する命令動作部と、ソフトウェア実行ファイル、プログラム変数、及びシミュレーションデータ構造体のダミーデータであるダミー構造体のそれぞれを記憶するCPUメモリとを有することが好ましい。
【0014】
さらに、本発明に係るデバッグ装置では、監視制御部は、プログラム変数及びダミー構造体の何れかが記憶される領域のアドレス値に関連付けて監視制御指示を提供し、シミュレータ制御部は、アドレス値に基づいて、プログラム変数、実行状態データ、記憶データ、及び入出力データの何れに関するものであるかを判定することが好ましい。
【0015】
さらに、本発明に係るデバッグ装置では、ダミー構造体は、シミュレータによって更新されず、シミュレータ制御部は、監視制御指示と共に入力されるアドレス値がダミー構造体に関連付けられるとき、実行結果情報をシミュレーションデータ構造体から取得すことが好ましい。
【0016】
さらに、本発明に係るデバッグ装置では、ハードウェアモジュールは、ハードウェアアクセラレータ、バスモジュール、及びI/O回路の少なくとも1つである論理ハードウェアモデルを更に含み、実行状態データは、プロセッサの実行状態に加えて論理ハードウェアモデルの実行状態を示し、記憶データは、複数の内部記憶回路及び外部記憶回路に記憶されるデータに加えて、論理ハードウェアモデルに記憶されるデータを含み、入出力データは、プロセッサが入出力するデータに加えて、論理ハードウェアモデルが入出力するデータを含み、シミュレータは、実行状態データ、記憶データ、及び入出力データを示すシミュレーションデータ構造体と、シミュレーションデータ構造体に対応するデータを更新して、ソフトウェアソースファイルで記述された複数のステップを含む処理を実行する命令動作部と、シミュレーションデータ構造体に対応するデータを更新して、論理ハードウェアモデルの論理動作を実行する論理動作部と、ソフトウェア実行ファイル、プログラム変数、及びシミュレーションデータ構造体のダミーデータであるダミー構造体のそれぞれを記憶するCPUメモリとを有することが好ましい。
【0017】
さらに、本発明に係るデバッグ装置では、ハードウェアモジュールモデルは、ソフトウェアソースファイルにおいて、グローバル変数として宣言されることが好ましい。
【0018】
また、本発明に係るデバッグ装置の制御方法は、それぞれがデータを記憶する複数の内部記憶回路を有し、データが入力されることに応じて処理を実行し、実行状態に応じたデータを出力するプロセッサ、及びプロセッサに接続されて、データを記憶する外部記憶回路を含むハードウェアモジュールの動作を記述したハードウェアソースファイルをコンパイルして生成されたハードウェアモジュールモデルと、複数のプログラム変数を含み、プロセッサに実行させる複数のステップを含む処理を記述したソフトウェアソースファイルをコンパイルして生成されたソフトウェア実行ファイルを記憶する記憶部と、ソフトウェアソースファイルに記述された処理を、ハードウェアモジュールモデル及びソフトウェア実行ファイルを使用してシミュレーションを実行するシミュレータと、シミュレータによるシミュレーションにおいて、ソフトウェア実行ファイル、プログラム変数、プロセッサの実行状態を示す実行状態データ、プロセッサが有する複数の内部記憶回路及び外部記憶回路に記憶される記憶データ、並びにプロセッサが入出力する入出力データの監視制御指示を提供する監視制御部と、シミュレーションをシミュレータに実行させるシミュレータ制御部と、を有するデバッグ装置の制御方法であって、監視制御指示が、プログラム変数、実行状態データ、記憶データ、及び入出力データの何れに関するものであるかを判定し、監視制御指示が、実行状態データ、記憶データ、及び入出力データの何れかに関するものであると判定したとき、実行状態データ、記憶データ、及び入出力データを監視制御するようにシミュレーションをシミュレータに実行させ、シミュレーションの実行結果を示す実行結果情報を監視制御部に提供し、実行結果情報を出力することを含む。
【0019】
さらに、本発明に係るデバッグ装置の制御プログラムは、それぞれがデータを記憶する複数の内部記憶回路を有し、データが入力されることに応じて処理を実行し、実行状態に応じたデータを出力するプロセッサ、及びプロセッサに接続されて、データを記憶する外部記憶回路を含むハードウェアモジュールの動作を記述したハードウェアソースファイルをコンパイルして生成されたハードウェアモジュールモデルと、複数のプログラム変数を含み、プロセッサに実行させる複数のステップを含む処理を記述したソフトウェアソースファイルをコンパイルして生成されたソフトウェア実行ファイルを記憶する記憶部と、ソフトウェアソースファイルに記述された処理を、ハードウェアモジュールモデル及びソフトウェア実行ファイルを使用してシミュレーションを実行するシミュレータと、シミュレータによるシミュレーションにおいて、ソフトウェア実行ファイル、プログラム変数、プロセッサの実行状態を示す実行状態データ、プロセッサが有する複数の内部記憶回路及び外部記憶回路に記憶される記憶データ、並びにプロセッサが入出力する入出力データの監視制御指示を提供する監視制御部と、シミュレーションをシミュレータに実行させるシミュレータ制御部と、を有するデバッグ装置の制御プログラムであって、監視制御指示が、プログラム変数、実行状態データ、記憶データ、及び入出力データの何れに関するものであるかを判定し、監視制御指示が、実行状態データ、記憶データ、及び入出力データの何れかに関するものであると判定したとき、実行状態データ、記憶データ、及び入出力データを監視制御するようにシミュレーションをシミュレータに実行させ、シミュレーションの実行結果を示す実行結果情報を監視制御部に提供し、実行結果情報を出力する処理をコンピュータに実行させる。
【発明の効果】
【0020】
本発明に係るデバッグ装置は、検証コストの増大を抑制しつつ、ソフトウェア及びハードウェアモジュールの検証を同時に実行することができる。
【図面の簡単な説明】
【0021】
【
図2】第1実施形態に係るデバッグ装置の概要図である。
【
図3】第1実施形態に係るデバッグ装置のブロック図である。
【
図4】
図3に示すデバッグ装置により実行されるCPUシミュレータ生成処理のフローチャートである。
【
図5】(a)はターゲットCPUに対応するCPUモデルの一例を示す図であり、(b)は(a)に示すCPUモデルに対応するターゲットCPUのハードウェア構成を示す図である。
【
図6】
図2に示すアプリケーションソースプログラムの一例を示す図である。
【
図7】
図3に示すデバッグ装置により実行されるデバッグ処理のフローチャートである。
【
図8】第2実施形態に係るデバッグ装置の概要図である。
【
図9】(a)は
図8に示すSoCモデルの概要図であり、(b)は
図8に示すデータ構造体のデータ構造を示す図である。
【
図10】第2実施形態に係るデバッグ装置のブロック図である。
【
図11】
図10に示すデバッグ装置により実行されるCPUシミュレータ生成処理のフローチャートである。
【
図12】(a)は
図8に示すSoCに対応するSoCモデルの一例を示す図であり、(b)は(a)に示すSoCモデルの下位モデルの一例を示す図であり、(c)は(a)に示すSoCモデルに対応するSoCのハードウェア構成を示す図である。
【
図13】
図8に示すアプリケーションソースプログラムの一例を示す図である。
【
図14】
図10に示すデバッグ装置により実行されるデバッグ処理のフローチャートである。
【発明を実施するための形態】
【0022】
以下、添付図面を参照して、実施形態に係るデバッグ装置、デバッグ装置の制御方法、及びデバッグ装置の制御プログラムを説明する。同様な又は対応する要素には同一の符号を付し、重複する説明は省略する。理解を容易にするために、図の縮尺は変更されている場合がある。
【0023】
(第1実施形態に係るデバッグ装置の概要)
図1は比較例に係るデバッグ装置の概要図であり、
図2は第1実施形態に係るデバッグ装置の概要図である。比較例に係るデバッグ装置100及び第1実施形態に係るデバッグ装置1のそれぞれは、クロス開発ソフトウェア(以下、単にSWと称する)デバッグ装置である。なお、クロス開発は、組み込みシステムにおけるSW開発のように、SWを開発するホストCPUと、SWを実行する組み込みシステムに搭載されるCPU(以下、ターゲットCPUとも称する)が異なるときに採用されるSW開発である。
【0024】
比較例に係るデバッグ装置100は、シンボリックデバッガ101と、デバッグサーバー102と、CPUシミュレータ103とを有する。デバッグ装置100は、開発対象のアプリケーションプログラムが、ターゲットCPU上で動作しない場合、アプリケーションプログラムに内在するバグを修正し、アプリケーションプログラムの所望の動作を実現するデバッグ作業を支援する開発環境を提供する。アプリケーションプログラムは、アプリケーション実行ファイル113とも称される。
【0025】
シンボリックデバッガ101は、デバッグ装置100を操作してSWをデバッグするSW開発者とデバッグ装置100との間のインタフェース部である。シンボリックデバッガ101は、SW開発者の指示に応じて、所望のステップでのプログラムの一時停止、及びアプリケーション実行ファイル113に含まれる変数の更新に伴う一時停止等のアプリケーション実行ファイル113の実行状態を制御する。アプリケーション実行ファイル113に含まれる変数は、プログラム変数とも称される。また、シンボリックデバッガ101は、アプリケーション実行ファイル113が一時停止中に、SW開発者の指示に応じて、プログラム変数を監視制御する。シンボリックデバッガ101は、プログラム変数を変更し、プログラム変数を変更した後のアプリケーション実行ファイル113の動作を観測することでSWバグの原因を調査する等のプログラム変数の監視制御により、効率的なSWデバッグ機能を提供する。
【0026】
デバッグサーバー102は、シンボリックデバッガ101から提供されたデバッグ命令をCPUシミュレータ103に提供する。また、デバッグサーバー102は、デバッグ命令を提供することに応じて、CPUシミュレータ103から提供されるデバッグ応答をシンボリックデバッガ101に提供する。デバッグサーバー102は、シンボリックデバッガ101とCPUシミュレータ103との間でデータを中継する中継モジュールである。
【0027】
CPUシミュレータ103は、命令セットシミュレータとも称され、シミュレーションデータ構造体120と、CPUメモリ121と、命令動作部24とを有する。CPUシミュレータ103は、一例ではC++言語であるプログラミング言語で記述されたCPUシミュレータソースファイル110とCPUモデルソースファイル111をコンパイルすることで生成される。CPUモデルソースファイル111は、複数の内部記憶回路を有するプロセッサ、及びプロセッサに接続される外部記憶回路を含むハードウェアモジュールの動作を所定のプログラミング言語で記述したハードウェアソースファイルの一例である。
【0028】
シミュレーションデータ構造体120は、複数の内部記憶回路及び外部記憶回路に記憶される記憶データ、並びにプロセッサが入出力する入出力データを有するターゲットCPUの内部データ構造体を模擬したものである。シミュレーションデータ構造体120は、CPUシミュレータ103がターゲットCPUの命令動作をシミュレーションするときにターゲットCPUの内部に配置されるレジスタ等に記憶されるデータを記憶する。
【0029】
CPUメモリ121は、ターゲットCPUが処理を実行するときのメモリ領域を模擬したものであり、アプリケーションプログラム部122及びアプリケーションデータ部123を有する。アプリケーションプログラム部122は、ターゲットCPUによってアプリケーションソースプログラム112をコンパイルすることによって生成されたアプリケーション実行ファイル113が記憶される。アプリケーションデータ部123は、CPUシミュレータ103がターゲットCPUの命令動作をシミュレーションするときに使用されるプログラム変数を記憶する。
【0030】
命令動作部24は、CPUの動作を模擬し、デバッグサーバー102から提供されたデバッグ命令に応じた処理を実行する。命令動作部24は、アプリケーション実行ファイル113の実行中断条件の登録、シミュレーションデータ構造体120に含まれるデータの書き換え、並びにCPUメモリに記憶されるプログラム変数の読み出し及び書き換え等の処理を実行する。命令動作部24は、デバッグ命令の処理結果を示すデバッグ応答をデバッグサーバー102に提供する。
【0031】
デバッグ装置100により実行されるデバッグ処理において、まず、シンボリックデバッガ101は、SW開発者の指示に応じて、デバッグ命令をデバッグサーバー102に提供する(S11)。シンボリックデバッガ101によって提供されるデバッグ命令は、アプリケーション実行ファイル113の実行状態を示すデータ及びプログラム変数の監視制御を含む。具体的には、デバッグ命令は、アプリケーション実行ファイル113の実行を中断する条件を指定する命令、及びアプリケーション実行ファイル113をステップ毎に実行する条件の指定等のアプリケーション実行ファイル113の実行状態を監視する命令を含む。アプリケーション実行ファイル113の実行状態の監視は、アプリケーション実行ファイル113を所望の箇所での一時停止、及びプログラム変数の更新に伴うアプリケーション実行ファイル113の一時停止を含む。また、デバッグ命令は、CPUメモリに記憶されるプログラム変数等の観測命令、及びCPUメモリに記憶されるプログラム変数等の制御命令を含む。プログラム変数等の観測命令及び制御命令は、プログラム変数を意図的に上書きし、上書きした後のアプリケーション実行ファイル113の動作を観測することでアプリケーション実行ファイル113のバグの原因を調査することを含む。
【0032】
次いで、デバッグサーバー102は、シンボリックデバッガ101から提供されたデバッグ命令を命令動作部24に提供する(S12)。
【0033】
次いで、命令動作部24は、デバッグサーバー102からデバッグ命令が提供されたことに応じて、デバッグ命令に応じた処理を実行する(S13)。命令動作部24は、プログラム変数の読み出し及び書き換えを示すデバッグ命令は、CPUメモリ121に対する処理として実行する。
【0034】
次いで、命令動作部24は、提供されたデバッグ命令に応じたデバッグ応答をデバッグサーバー102に提供する(S14)。そして、デバッグサーバー102は、命令動作部24から提供されたデバッグ応答をシンボリックデバッガ101に提供する(S15)。
【0035】
デバッグ装置100は、SW開発者の指示に応じて、アプリケーション実行ファイル113の実行状態及びプログラム変数を監視制御することで、効率的なSWデバッグ機能を提供することができる。しかしながら、CPUシミュレータ103がターゲットCPUの命令動作を忠実に再現することを前提とするため、CPUモデルソースファイル111が開発中、及びターゲットCPUが設計変更された場合等では、ターゲットCPUが正常に機能しない可能性がある。また、デバッグ装置100では、CPUシミュレータ103に不具合があった場合、不具合を具体的に調査することは容易ではない。
【0036】
第1実施形態に係るデバッグ装置1は、シンボリックデバッガ21と、デバッグサーバー22と、CPUシミュレータ23とを有する。デバッグ装置1では、シンボリックデバッガ21によって提供されるデバッグ命令は、アプリケーション実行ファイル113の実行状態を示すデータプログラム変数の監視制御に加えて、シミュレーションデータ構造体120に保持されるデータの制御監視を含む。デバッグ装置1は、シミュレーションデータ構造体120に保持されるデータを監視制御することで、アプリケーション実行ファイル113のデバッグに併せてターゲットCPUをデバッグすることができる。
【0037】
シンボリックデバッガ21及びデバッグサーバー22のそれぞれは、シンボリックデバッガ101及びデバッグサーバー102と同様な構成及び機能を有する。シンボリックデバッガ21は、シミュレータによるシミュレーションにおいて、ソフトウェア実行ファイル、プログラム変数、プロセッサの実行状態を示す実行状態データ、プロセッサが有する複数の内部記憶回路及び外部記憶回路に記憶される記憶データ、並びにプロセッサが入出力する入出力データの監視制御指示を提供する監視制御部の一例である。また、プログラム変数はソフトウェアソースファイルに関連するデータであり、実行状態データ、記憶データ及び入出力データはハードウェアソースファイルに関連するデータである。デバッグサーバー22は、シミュレーションをシミュレータに実行させ、シミュレーションの実行結果を示す実行結果情報を監視制御部に提供するシミュレータ制御部の一例である。CPUシミュレータ23は、CPUメモリ121がダミー構造体部124を有することがCPUシミュレータ103と相違する。CPUシミュレータ23は、ソフトウェアソースファイルに記述された処理を、ハードウェアモジュールモデル及びソフトウェア実行ファイルを使用してシミュレーションを実行するシミュレータの一例である。
【0038】
ダミー構造体部124は、アプリケーションソースプログラム132をコンパイルしたアプリケーション実行ファイル133をCPUメモリに記憶することでCPUメモリ121にシミュレーションデータ構造体120のダミーデータであるダミー構造体が記憶される。
【0039】
アプリケーションソースプログラム132は、シミュレーションデータ構造体120を含むハードウェアを示すハードウェアモジュールモデルがグローバル変数として宣言されることがアプリケーションソースプログラム112と相違する。アプリケーションソースプログラム132において、シミュレーションデータ構造体120を含むハードウェアモジュールモデルがグローバル変数として宣言されることで、ダミー構造体は、CPUメモリ121のダミー構造体部124に記憶される。
【0040】
デバッグ装置1により実行されるデバッグ処理において、まず、シンボリックデバッガ21は、SW開発者の指示に応じて、デバッグ命令をデバッグサーバー22に提供する(S21)。シンボリックデバッガ21によって提供されるデバッグ命令は、シミュレーションデータ構造体120に保持されるデータの表示の観測命令及びシミュレーションデータ構造体120に保持されるデータの書き換えの制御命令を含む。シミュレーションデータ構造体120に保持されるデータの表示等の観測命令及び制御命令は、シンボリックデバッガ21によって提供されるデバッグ命令を意図的に上書きし、上書きした後のターゲットCPUの動作を観測することターゲットCPUのバグの原因を調査することを含む。
【0041】
次いで、デバッグサーバー22は、シンボリックデバッガ21から提供されたデバッグ命令をCPUシミュレータ23に提供する(S22)。
【0042】
次いで、命令動作部24は、デバッグサーバー22からデバッグ命令が提供されたことに応じて、デバッグ命令に応じた処理を実行する(S23)。命令動作部24は、アプリケーション実行ファイル113の実行中断条件の登録、並びにシミュレーションデータ構造体120に含まれるデータの読み出し及び書き換えを示すデバッグ命令は、対応するデータが記憶されるシミュレーションデータ構造体120に対する処理として実行する。また、命令動作部24は、プログラム変数の読み出し及び書き換えを示すデバッグ命令は、CPUメモリ121に対する処理として実行する。
【0043】
次いで、命令動作部24は、提供されたデバッグ命令に応じたデバッグ応答をデバッグサーバー22に提供する(S24)。そして、デバッグサーバー22は、命令動作部24から提供されたデバッグ応答をシンボリックデバッガ21に提供する(S25)。
【0044】
デバッグ装置1は、SW開発者の指示に応じて、アプリケーション実行ファイル113の実行状態、プログラム変数及びシミュレーションデータ構造体120に保持されるデータを監視制御することで、ターゲットCPU及びアプリケーション実行ファイル113をデバッグできる。
【0045】
(第1実施形態に係るデバッグ装置の構成及び機能)
図3は、第1実施形態に係るデバッグ装置のブロック図である。
【0046】
デバッグ装置1は、通信部11と、記憶部12と、操作部13と、表示部14と、処理部20とを有し、例えばパーソナルコンピュータである。通信部11は、デバッグ装置1を不図示の外部装置と通信可能にするための構成であり、通信インタフェース回路を備える。通信インタフェース回路は、例えば、有線LAN、無線LAN、及びLTE等の通信インタフェース回路である。通信部11は、不図示の外部装置から受信されたデータを処理部20に供給すると共に、処理部20から供給されたデータを不図示の外部装置に送信する。
【0047】
記憶部12は、データ及びプログラムを記憶するための構成であり、例えば半導体メモリを備える。記憶部12は、処理部20による処理に用いられるオペレーティングシステムプログラム、ドライバプログラム、アプリケーションプログラム、データ等を記憶する。記憶部12は、例えば、ターゲットCPU及びアプリケーション実行ファイル115をデバッグするデバッグ処理を処理部20に実行させるためのデバッグプログラムを記憶する。デバッグプログラムは、例えば、CD-ROM、DVD-ROM等のコンピュータ読み取り可能かつ非一時的な可搬型記憶媒体から記憶部12にインストールされる。また、記憶部12は、デバッグ処理を実行するときに使用される種々のデータ及び情報を記憶する。例えば、記憶部12は、シミュレーションデータ構造体120を記憶する。
【0048】
また、記憶部12は、アプリケーションプログラム部122と、アプリケーションデータ部123と、ダミー構造体部124とを有する。アプリケーションプログラム部122、アプリケーションデータ部123及びダミー構造体部124は、CPUメモリ121を形成する。アプリケーションプログラム部122は、アプリケーション実行ファイル115が記憶される領域である。アプリケーションデータ部123は、アプリケーション実行ファイル115が実行されるときに、プログラム変数が記憶される領域である。ダミー構造体部124は、シミュレーションデータ構造体120のダミーデータであるダミー構造体が記憶される領域である。
【0049】
操作部13は、デバッグ装置1を使用するオペレータの操作を受け付けるための構成であり、例えばキーパッドを備える。操作部13は、オペレータの操作に応じた信号を生成して処理部20に供給する。
【0050】
表示部14は、画像を表示するための構成であり、液晶ディスプレイ又は有機ELディスプレイ等のディスプレイを備える。表示部14は、処理部20から供給された信号に基づいて画像を生成して表示する。
【0051】
処理部20は、一又は複数個のプロセッサ及びその周辺回路を有する。処理部20は、デバッグ装置1の全体的な動作を統括的に制御するものであり、例えば、CPUである。処理部20は、記憶部12に記憶されているプログラム(ドライバプログラム、オペレーティングシステムプログラム、アプリケーションプログラム等)に基づいて処理を実行する。また、処理部20は、複数のプログラム(アプリケーションプログラム等)を並列に実行できる。
【0052】
処理部20は、シンボリックデバッガ21と、デバッグサーバー22と、命令動作部24と、コンパイラ25と、ファイル取得部26とを有する。シンボリックデバッガ21、デバッグサーバー22、命令動作部24、コンパイラ25及びファイル取得部26は、処理部20が備えるプロセッサで実行されるプログラムにより実現される機能モジュールである。あるいは、シンボリックデバッガ21、デバッグサーバー22、命令動作部24、コンパイラ25及びファイル取得部26は、ファームウェアとしてデバッグ装置1に実装されてもよい。命令動作部24は、シミュレーションデータ構造体120及びCPUメモリ121と共にCPUシミュレータ23を形成する。
【0053】
(第1実施形態に係るデバッグ装置により実行されるCPUシミュレータ生成処理)
図4は、デバッグ装置1により実行されるCPUシミュレータ生成処理のフローチャートである。
図4に示すCPUシミュレータ生成処理は、予め記憶部12に記憶されているプログラムに基づいて、主に処理部20によりデバッグ装置1の各要素と協働して実行される。
【0054】
まず、コンパイラ25は、CPUモデルソースファイル111をコンパイルする(S101)。CPUモデルソースファイル111は、C++言語で記述される。コンパイラ25は、コンパイルされたCPUモデルソースファイル111を記憶部12に記憶する。
【0055】
図5(a)はターゲットCPUに対応するCPUモデルソースファイル111の一例を示す図であり、
図5(b)は
図5(a)に示すCPUモデルソースファイル111に対応するターゲットCPUのハードウェア構成を示す図である。
【0056】
ターゲットCPU50は、フェッチ部51と、デコード部52と、実行部53と、メモリ部54と、ライトバック部55とを有し、CPUメモリ56のデータを読み出して所定の処理を実行し、実行結果を示す実行結果情報をCPUメモリ56に書き込む。フェッチ部51は、フェッチ回路51aと、命令キャッシュメモリ51bとを有し、CPUメモリ56から命令コードを読み込む。デコード部52は、デコード回路52aと、CPUレジスタとも称される汎用レジスタ52bとを有し、フェッチ部51が読み込んだ命令コードを解析する。実行部53は、実行回路53aを有し、ターゲットCPU50の内部に配置される不図示の演算ユニットにおいて、命令コードに対応する演算を実行する。メモリ部54は、メモリ回路54aと、データキャッシュメモリ54bとを有し、実行部53で実行された演算の結果を記憶する。ライトバック部55は、実行部53で実行された演算の結果を汎用レジスタ52b及びCPUメモリ56に書き込む。ターゲットCPU50はプロセッサの一例であり、命令キャッシュメモリ51b、汎用レジスタ52b及びデータキャッシュメモリ54bは複数の内部記憶回路の一例であり、CPUメモリ56はプロセッサに接続される外部記憶回路の一例である。
【0057】
CPUモデルソースファイル111は、命令キャッシュメモリ51b、汎用レジスタ52b及びデータキャッシュメモリ54bに対応するモデルを有する。また、CPUモデルソースファイル111は、フェッチ部51、デコード部52、実行部53、メモリ部54及びライトバック部55の入出力端子及びフェッチ部51、デコード部52、実行部53、メモリ部54及びライトバック部55の内部レジスタに対応するモデルを有する。シミュレーションデータ構造体120は、CPUモデルソースファイル111が有するレジスタ等の内部記憶回路、及びCPUモデルソースファイル111が有する機能ブロックであるフェッチ部51~ライトバック部55の入出力端子のデータを記憶する。
【0058】
次いで、コンパイラ25は、CPUシミュレータソースファイル110をコンパイルする(S102)。CPUシミュレータソースファイル110は、CPUモデルソースファイル111と同様に、C++言語で記述される。コンパイラ25は、コンパイルされたCPUシミュレータソースファイル110を記憶部12に記憶する。
【0059】
次いで、ファイル取得部26は、アプリケーションソースプログラム114をターゲットCPUでコンパイルすることで生成されたアプリケーション実行ファイル115を取得する(S103)。アプリケーションソースプログラム114は、複数のプログラム変数を含み、プロセッサに実行させる複数のステップを含む処理をプログラミング言語で記述したソフトウェアソースファイルの一例である。アプリケーションソースプログラム114を記述するプログラミング言語は、CPUモデルソースファイル111を記述するプログラミング言語と同一でもよく、相違してもよい。ファイル取得部26は、取得したアプリケーション実行ファイル115を記憶部12のアプリケーションプログラム部122に記憶する。また、アプリケーション実行ファイル115が記憶部12のアプリケーションプログラム部122に記憶されることに応じて、ダミー構造体は、ダミー構造体部124に記憶される。
【0060】
図6は、アプリケーションソースプログラム114の一例を示す図である。
【0061】
アプリケーションソースプログラム114は、宣言部「CPU cpu;」を有する。アプリケーションソースプログラム114が宣言部「CPU cpu;」を有することで、
図5(a)に示すCPUモデルソースファイル111は、アプリケーションソースプログラム114において、グローバル変数として宣言される。
【0062】
ファイル取得部26がされたアプリケーション実行ファイル115を取得することで、CPUシミュレータ23は、形成される。
【0063】
そして、ファイル取得部26は、シミュレーションデータ構造体120が記憶される領域、アプリケーションプログラム部122、アプリケーションデータ部123及びダミー構造体部124を示すアドレス値を取得する(S104)。ファイル取得部26は、S102の処理でコンパイルされたCPUシミュレータソースファイル110に含まれるシミュレーションデータ構造体120が記憶される領域を示すアドレス値を取得する。また、ファイル取得部26は、アプリケーション実行ファイル115、プログラム変数及びダミー構造体が記憶されるアプリケーションプログラム部122、アプリケーションデータ部123及びダミー構造体部124を示すアドレス値を取得する。ファイル取得部26は、取得したアドレス値を、シミュレーションデータ構造体120が記憶される領域、アプリケーションプログラム部122、アプリケーションデータ部123及びダミー構造体部124のそれぞれに関連付けて記憶部12に記憶する。
【0064】
(第1実施形態に係るデバッグ装置により実行されるデバッグ処理)
図7は、デバッグ装置1により実行されるデバッグ処理のフローチャートである。
図7に示すデバッグ処理は、予め記憶部12に記憶されているプログラムに基づいて、主に処理部20によりデバッグ装置1の各要素と協働して実行される。
【0065】
まず、シンボリックデバッガ21は、デバッグ命令を取得する(S201)。シンボリックデバッガ21は、SW開発者のデバッグ命令を、操作部13を介して取得する。シンボリックデバッガ21は、取得した記憶部12に記憶する。
【0066】
次いで、シンボリックデバッガ21は、S201の処理で取得したデバッグ命令をデバッグサーバー22に提供する(S202)。シンボリックデバッガ21は、デバッグ命令がプログラム変数を監視制御する命令を含むとき、アプリケーションデータ部123を示すアドレス値に関連付けてデバッグ命令を提供する。シンボリックデバッガ21は、シミュレーションデータ構造体120に記憶されるデータを監視制御する命令をデバッグ命令が含むとき、ダミー構造体部124を示すアドレス値に関連付けてデバッグ命令を提供する。デバッグサーバー22は、提供されたデバッグ命令を記憶部12に記憶する。
【0067】
次いで、デバッグサーバー22は、提供されたデバッグ命令を命令動作部24に提供する(S203)。デバッグサーバー22は、デバッグ命令が、プログラム変数、及びCPUが有するレジスタ等の複数の内部記憶回路及び外部記憶回路に記憶される記憶データ、並びにプロセッサが入出力する入出力データの何れに関するものであるかを判定する。具体的には、デバッグサーバー22は、アプリケーションデータ部123及びダミー構造体部124の何れかを示すアドレス値にデバッグ命令が関連付けられているかを判定する。デバッグサーバー22は、アプリケーションデータ部123を示すアドレス値にデバッグ命令が関連付けられていると判定したとき、デバッグ命令がプログラム変数に関するものであると判定し、アプリケーションプログラム部122に記憶されるアプリケーション実行ファイルに記憶される変数を書き換える。デバッグサーバー22は、ダミー構造体部124を示すアドレス値にデバッグ命令が関連付けられていると判定したとき、複数の内部記憶回路及び外部記憶回路に記憶される記憶データ、並びにプロセッサが入出力する入出力データの何れかに関するものであると判定し、シミュレーションデータ構造体120に保持されるデータを書き換える。
【0068】
次いで、命令動作部24は、S203の処理でデバックサーバーから提供されたデバッグ命令に応じた処理を実行する(S204)。命令動作部24は、処理の実行結果を示す実行結果情報をシミュレーションデータ構造体120及びアプリケーションデータ部123に記憶する。
【0069】
次いで、デバッグサーバー22は、CPUシミュレータ23から処理の実行結果情報を取得する(S205)。デバッグサーバー22は、アプリケーションデータ部123及びダミー構造体部124の何れかを示すアドレス値にデバッグ命令が関連付けられているかを判定する。デバッグサーバー22は、アプリケーションデータ部123を示すアドレス値にデバッグ命令が関連付けられていると判定したとき、アプリケーションデータ部123に記憶されるプログラム変数を読み出す。デバッグサーバー22は、ダミー構造体部124を示すアドレス値にデバッグ命令が関連付けられていると判定したとき、シミュレーションデータ構造体120に保持されるデータを読み出す。デバッグサーバー22は、取得した実行結果情報を記憶部12に記憶する。
【0070】
次いで、デバッグサーバー22は、S205の処理で取得した実行結果情報をデバッグ応答としてシンボリックデバッガ21に提供する(S206)。シンボリックデバッガ21は、提供されたデバッグ応答を記憶部12に記憶する。
【0071】
そして、シンボリックデバッガ21は、S206の処理で提供されたデバッグ応答を表示部14に出力する(S207)。表示部14は、デバッグ応答が入力されることに応じて、デバッグ応答を示すデバッグ応答画像を表示する。SW開発者は、表示部14に表示されるデバッグ応答画像を視認する。
【0072】
(第1実施形態に係るデバッグ装置の作用効果)
デバッグ装置1は、デバッグサーバー22がシミュレーションデータ構造体120を監視制御するようにCPUシミュレータ120にシミュレーションを実行させることで、検証コストの増大を抑制しつつ、ソフトウェア及びハードウェアモジュールの検証を同時に実行できる。
【0073】
また、デバッグ装置1は、CPUメモリ121がシミュレーションデータ構造体120のダミーデータを記憶するダミー構造体部124を有することで、シミュレーションデータ構造体120を監視制御することができる。
【0074】
また、デバッグ装置1は、アプリケーションデータ部123及びダミー構造体部124のアドレス値に基づいて、デバッグ命令がプログラム変数又はシミュレーションデータ構造体120に関するものであるかを容易に判定することができる。
【0075】
また、デバッグ装置1は、ダミー構造体部124に記憶されるダミー構造体は更新されずに、シミュレーションデータ構造体120から実行結果情報を取得することで、ダミー構造体を更新する処理が省略され、検証コストを低減できる。
【0076】
また、デバッグ装置1は、CPUモデルがアプリケーションソースプログラムにおいて、グローバル変数として宣言されることで、ダミー構造体を簡便にダミー構造体部124に記憶させることができる。
【0077】
(第2実施形態に係るデバッグ装置の概要)
図8は、第2実施形態に係るデバッグ装置の概要図である。第2実施形態に係るデバッグ装置2は、クロス開発SWデバッグ装置である。
【0078】
第2実施形態に係るデバッグ装置2は、SoCシミュレータ28をCPUシミュレータ23の代わりに有することがデバッグ装置1と相違する。SoCシミュレータ28以外のデバッグ装置2の構成要素の構成及び機能は、同一符号が付されたデバッグ装置1の構成要素の構成及び機能と同一なので、ここでは詳細な説明は省略する。SoCシミュレータ28は、ソフトウェアに記述された処理を、ハードウェアモジュールモデル及びソフトウェア実行ファイルを使用してシミュレーションを実行するシミュレータの他の例である。
【0079】
SoCシミュレータ28は、シミュレーションデータ構造体320と、CPUメモリ321と、命令動作部41と、バス論理動作部42と、第1ハードウェア論理動作部431~第Nハードウェア論理動作部43Nとを有する。SoCシミュレータ28は、一例ではC++言語であるプログラミング言語で記述されたSoCシミュレータソースファイル130とSoCモデルソースファイル131をコンパイルすることで生成される。
【0080】
SoCシミュレータソースファイル130は、デバッグサーバー22から提供されたデバッグ命令に応じた処理を実行する。SoCシミュレータソースファイル130は、アプリケーション実行ファイル133の実行中断条件の登録、シミュレーションデータ構造体320に含まれるデータの読み出し及び書き換え、並びにCPUメモリ321に記憶されるプログラム変数の読み出し及び書き換え等の処理を実行する。SoCシミュレータソースファイル130は、デバッグ命令の処理結果を示すデバッグ応答をデバッグサーバー22に提供する。
【0081】
図9(a)は、SoCモデルソースファイル131の概要図である。
【0082】
SoCモデルソースファイル131は、SoCに搭載されるCPUを模擬するCPUモデル131a、CPUと他のハードウェアモジュールとを接続するバスモジュールを模擬するバスモジュールモデル131bを有する。また、SoCモデルソースファイル131は、バスモジュールを介してCPUに接続されるハードウェアモジュールを模擬する第1ハードウェアモジュールモデル131c1~第Nハードウェアモジュールモデル131cNを有する。第1ハードウェアモジュールモデル131c1~第Nハードウェアモジュールモデル131cNによって模擬されるハードウェアモジュールは、ハードウェアアクセラレータ、及びI/O回路の少なくとも1つを含む。
【0083】
CPUモデル131aは、CPUの内部データ構造体を模擬したCPU内部ハードウェア状態データ構造体131dを有する。バスモジュールの内部データ構造体を模擬したバス内部状態データ構造体131eを有する。第1ハードウェアモジュールモデル131c1~第Nハードウェアモジュールモデル131cNは、ハードウェアモジュールの内部データ構造体を模擬したモデルである。第1ハードウェアモジュールモデル131c1~第Nハードウェアモジュールモデル131cNは、第1ハードウェア内部状態データ構造体131f1~第Nハードウェア内部状態データ構造体131fNを有する。
【0084】
データ構造体320は、ターゲットCPUの内部データ構造体を模擬したものであり、CPUシミュレータ103がターゲットCPUの命令動作をシミュレーションするときにターゲットCPUの内部に配置されるレジスタ等に記憶されるデータを記憶する。
【0085】
図9(b)は、シミュレーションデータ構造体320のデータ構造を示す図である。
【0086】
シミュレーションデータ構造体320は、CPU内部ハードウェア状態データ構造体320aと、バス内部状態データ構造体320bと、第1ハードウェア内部状態データ構造体320c1~第Nハードウェア内部状態データ構造体320cNとを有する。データ構造体320は、SoCモデルソースファイル131をコンパイルすることで生成される。CPU内部ハードウェア状態データ構造体320aはCPU内部ハードウェア状態データ構造体131dに対応し、バス内部状態データ構造体320bはバス内部状態データ構造体131eに対応する。第1ハードウェア内部状態データ構造体320c1~第Nハードウェア内部状態データ構造体320cNは、第1ハードウェア内部状態データ構造体131f1~第Nハードウェア内部状態データ構造体131fNに対応する。
【0087】
命令動作部41は、SoCに実装されるCPUの動作を模擬し、デバッグサーバー102から提供されたデバッグ命令に応じた処理を実行する。バス論理動作部42は、SoCに実装されるCPUとハードウェアモジュールとを接続するバスモジュールの論理動作を模擬する。第1ハードウェア論理動作部431~第Nハードウェア論理動作部43Nは、SoCに実装されるハードウェアモジュールの論理動作を模擬する。
【0088】
CPUメモリ321は、SoCに実装されるCPUが処理を実行するときのメモリ領域を模擬したものであり、アプリケーションプログラム部322、アプリケーションデータ部323及びダミー構造体部324を有する。アプリケーションプログラム部322は、ターゲットCPUによってアプリケーションソースプログラム132をコンパイルすることによって生成されたアプリケーション実行ファイル133が記憶される。アプリケーションデータ部323は、SoCシミュレータ28がCPUの命令動作をシミュレーションするときに使用されるプログラム変数を記憶する。
【0089】
ダミー構造体部324は、アプリケーションソースプログラム132をコンパイルしたアプリケーション実行ファイル133をCPUメモリに記憶することでCPUメモリ121にシミュレーションデータ構造体320のダミーデータであるダミー構造体が記憶される。
【0090】
アプリケーションソースプログラム132は、SoCを示すハードウェアモジュールモデルがグローバル変数として宣言される。アプリケーションソースプログラム132において、SoCがグローバル変数として宣言されることで、ダミー構造体は、CPUメモリ321のダミー構造体部324に記憶される。
【0091】
デバッグ装置2により実行されるデバッグ処理において、まず、シンボリックデバッガ21は、SW開発者の指示に応じて、デバッグ命令をデバッグサーバー22に提供する(S31)。シンボリックデバッガ21によって提供されるデバッグ命令は、シミュレーションデータ構造体320に保持されるデータの表示の観測命令及びシミュレーションデータ構造体320に保持されるデータの書き換えの制御命令を含む。
【0092】
次いで、デバッグサーバー22は、シンボリックデバッガ21から提供されたデバッグ命令を命令動作部41に提供する(S32)。
【0093】
次いで、命令動作部41は、デバッグサーバー22からデバッグ命令が提供されたことに応じて、デバッグ命令に応じた処理を実行する(S33)。命令動作部41は、アプリケーション実行ファイル113の実行中断条件の登録、並びにシミュレーションデータ構造体320に含まれるデータの読み出し及び書き換えを示すデバッグ命令は、対応するデータが記憶されるシミュレーションデータ構造体320に対する処理として実行する。また、命令動作部41は、プログラム変数の読み出し及び書き換えを示すデバッグ命令は、CPUメモリ321に対する処理として実行する。
【0094】
次いで、命令動作部41は、提供されたデバッグ命令に応じたデバッグ応答をデバッグサーバー22に提供する(S34)。そして、デバッグサーバー22は、命令動作部41から提供されたデバッグ応答をシンボリックデバッガ21に提供する(S35)。
【0095】
デバッグ装置2は、SW開発者の指示に応じて、アプリケーション実行ファイル133の実行状態、プログラム変数及びシミュレーションデータ構造体320に保持されるデータを監視制御することで、SoC及びアプリケーション実行ファイル133をデバッグできる。
【0096】
(第2実施形態に係るデバッグ装置の構成及び機能)
図10は、第2実施形態に係るデバッグ装置のブロック図である。
【0097】
デバッグ装置2は、記憶部32及び処理部40を記憶部12及び処理部20の代わりに有することがデバッグ装置1と相違する。記憶部32及び処理部40以外のデバッグ装置2の構成要素の構成及び機能は、同一符号が付されたデバッグ装置1の構成要素の構成及び機能と同一なので、ここでは詳細な説明は省略する。
【0098】
記憶部32は、シミュレーションデータ構造体320をシミュレーションデータ構造体120の代わりに記憶することが記憶部12と相違する。記憶部32は、アプリケーションプログラム部322、アプリケーションデータ部323及びダミー構造体部324をアプリケーションプログラム部122、アプリケーションデータ部123及びダミー構造体部124の代わりに有することが記憶部12と相違する。アプリケーションプログラム部322、アプリケーションデータ部323及びダミー構造体部324は、CPUメモリ321を形成する。アプリケーションプログラム部322は、アプリケーション実行ファイル133が記憶される領域である。アプリケーションデータ部323は、アプリケーション実行ファイル133が実行されるときに、プログラム変数が記憶される領域である。ダミー構造体部324は、シミュレーションデータ構造体320のダミーデータであるダミー構造体が記憶される領域である。
【0099】
処理部40は、命令動作部41、バス論理動作部42及び第1ハードウェア論理動作部431~第Nハードウェア論理動作部43Nを命令動作部24の代わりに有することが処理部20と相違する。命令動作部41、バス論理動作部42及び第1ハードウェア論理動作部431~第Nハードウェア論理動作部43N以外の処理部40の構成及び機能は、処理部20の構成及び機能と同一なので、ここでは詳細な説明は省略する。命令動作部41は、シミュレーションデータ構造体320及びCPUメモリ321と共にCPUシミュレータ28を形成する。
【0100】
(第2実施形態に係るデバッグ装置により実行されるSoCシミュレータ生成処理)
図11は、デバッグ装置2により実行されるSoCシミュレータ生成処理のフローチャートである。
図11に示すSoCシミュレータ生成処理は、予め記憶部32に記憶されているプログラムに基づいて、主に処理部40によりデバッグ装置2の各要素と協働して実行される。
【0101】
まず、コンパイラ25は、SoCモデルソースファイル131をコンパイルする(S301)。SoCモデルソースファイル131は、C++言語で記述される。コンパイラ25は、コンパイルされたSoCモデルソースファイル131を記憶部32に記憶する。
【0102】
図12(a)はSoCに対応するSoCモデルソースファイル131の一例を示す図であり、
図12(b)は
図12(a)に示すSoCモデルソースファイル131の下位モデルの一例を示す図であり、
図12(c)はSoCモデルソースファイル131に対応するSoCのハードウェア構成を示す図である。
【0103】
SoC60は、CPU50と、CPUメモリ56と、バスモジュール61と、第1ハードウェアモジュール621~第Nハードウェアモジュール62Nを有する。CPU50及びCPUメモリ56は、
図5を参照して説明されたので、ここでは詳細な説明は省略する。バスモジュール61は、CPU50、CPUメモリ56及び第1ハードウェアモジュール621~第Nハードウェアモジュール62Nを通信可能に接続する。第1ハードウェアモジュール621~第Nハードウェアモジュール62Nは、SoC60に実装されるハードウェア回路である。
【0104】
SoCモデルソースファイル131は、CPU50、CPUメモリ56、バスモジュール61、第1ハードウェアモジュール621~第Nハードウェアモジュール62Nに対応するモデルを有する。シミュレーションデータ構造体320は、CPUモデル131aが有するレジスタ等の内部記憶回路、及びCPUモデル131aが有する機能ブロックであるフェッチ部51~ライトバック部55の入出力端子のデータを記憶する。また、シミュレーションデータ構造体320は、バスモジュール61、第1ハードウェアモジュール621~第Nハードウェアモジュール62Nの入出力端子のデータを記憶する。
【0105】
次いで、コンパイラ25は、SoCシミュレータソースファイル130をコンパイルする(S302)。SoCシミュレータソースファイル130は、SoCモデルソースファイル131と同様に、C++言語で記述される。コンパイラ25は、コンパイルされたSoCシミュレータソースファイル130を記憶部32に記憶する。
【0106】
次いで、ファイル取得部26は、アプリケーションソースプログラム132をターゲットCPUでコンパイルすることで生成されたアプリケーション実行ファイル133を取得する(S303)。ファイル取得部26は、取得したアプリケーション実行ファイル133を記憶部32のアプリケーションプログラム部322に記憶する。また、アプリケーション実行ファイル133が記憶部12のアプリケーションプログラム部322に記憶されることに応じて、ダミー構造体は、ダミー構造体部324に記憶される。
【0107】
図13は、アプリケーションソースプログラム132の一例を示す図である。
【0108】
アプリケーションソースプログラム132は、宣言部「SoC soc;」を有する。アプリケーションソースプログラム132が宣言部「SoC soc;」を有することで、
図12(a)に示すSoCモデルソースファイル131は、アプリケーションソースプログラム132において、グローバル変数として宣言される。
【0109】
ファイル取得部26がされたアプリケーション実行ファイル133を取得することで、SoCシミュレータ28は、形成される。
【0110】
そして、ファイル取得部26は、シミュレーションデータ構造体320が記憶される領域、アプリケーションプログラム部322、アプリケーションデータ部323及びダミー構造体部324を示すアドレス値を取得する(S304)。ファイル取得部26は、S302の処理でコンパイルされたSoCシミュレータソースファイル130に含まれるシミュレーションデータ構造体320が記憶される領域を示すアドレス値を取得する。また、ファイル取得部26は、アプリケーション実行ファイル133、プログラム変数及びダミー構造体が記憶されるアプリケーションプログラム部322、アプリケーションデータ部323及びダミー構造体部324を示すアドレス値を取得する。ファイル取得部26は、取得したアドレス値を、シミュレーションデータ構造体320が記憶される領域、アプリケーションプログラム部322、アプリケーションデータ部323及びダミー構造体部324のそれぞれに関連付けて記憶部32に記憶する。
【0111】
(第2実施形態に係るデバッグ装置により実行されるデバッグ処理)
図14は、デバッグ装置2により実行されるデバッグ処理のフローチャートである。
図14に示すデバッグ処理は、予め記憶部32に記憶されているプログラムに基づいて、主に処理部40によりデバッグ装置2の各要素と協働して実行される。
【0112】
まず、シンボリックデバッガ21は、デバッグ命令を取得する(S401)。シンボリックデバッガ21は、SW開発者のデバッグ命令を、操作部13を介して取得する。シンボリックデバッガ21は、取得した記憶部12に記憶する。
【0113】
次いで、シンボリックデバッガ21は、S401の処理で取得したデバッグ命令をデバッグサーバー22に提供する(S402)。シンボリックデバッガ21は、デバッグ命令がプログラム変数を監視制御する命令を含むとき、アプリケーションデータ部323を示すアドレス値に関連付けてデバッグ命令を提供する。シンボリックデバッガ21は、シミュレーションデータ構造体320に記憶されるデータを監視制御する命令をデバッグ命令が含むとき、ダミー構造体部324を示すアドレス値に関連付けてデバッグ命令を提供する。デバッグサーバー22は、提供されたデバッグ命令を記憶部32に記憶する。
【0114】
次いで、デバッグサーバー22は、提供されたデバッグ命令を命令動作部41に提供する(S403)。デバッグサーバー22は、デバッグ命令が、プログラム変数、及びCPUが有するレジスタ等の複数の内部記憶回路及び外部記憶回路に記憶される記憶データ、並びにプロセッサが入出力する入出力データの何れに関するものであるかを判定する。具体的には、デバッグサーバー22は、アプリケーションデータ部323及びダミー構造体部324の何れかを示すアドレス値にデバッグ命令が関連付けられているかを判定する。デバッグサーバー22は、アプリケーションデータ部323を示すアドレス値にデバッグ命令が関連付けられていると判定したとき、デバッグ命令がプログラム変数に関するものであると判定し、アプリケーションプログラム部322に記憶されるアプリケーション実行ファイルに記憶される変数を書き換える。デバッグサーバー22は、ダミー構造体部324を示すアドレス値にデバッグ命令が関連付けられていると判定したとき、複数の内部記憶回路及び外部記憶回路に記憶される記憶データ、並びにプロセッサが入出力する入出力データの何れかに関するものであると判定し、シミュレーションデータ構造体320に保持されるデータを書き換える。
【0115】
次いで、命令動作部41は、S403の処理でデバッサーバーから提供されたデバッグ命令に応じた処理を実行する(S404)。命令動作部41は、処理の実行結果を示す実行結果情報をデータ構造体320及びアプリケーションデータ部323に記憶する。
【0116】
次いで、デバッグサーバー22は、SoCシミュレータ28から処理の実行結果情報を取得する(S405)。デバッグサーバー22は、アプリケーションデータ部323及びダミー構造体部324の何れかを示すアドレス値にデバッグ命令が関連付けられているかを判定する。デバッグサーバー22は、アプリケーションデータ部323を示すアドレス値にデバッグ命令が関連付けられていると判定したとき、アプリケーションデータ部323に記憶されるプログラム変数を読み出す。デバッグサーバー22は、ダミー構造体部324を示すアドレス値にデバッグ命令が関連付けられていると判定したとき、シミュレーションデータ構造体320に保持されるデータを読み出す。デバッグサーバー22は、取得した実行結果情報を記憶部32に記憶する。
【0117】
次いで、デバッグサーバー22は、S405の処理で取得した実行結果情報をデバッグ応答としてシンボリックデバッガ21に提供する(S406)。シンボリックデバッガ21は、提供されたデバッグ応答を記憶部32に記憶する。
【0118】
そして、シンボリックデバッガ21は、S406の処理で提供されたデバッグ応答を表示部14に出力する(S407)。表示部14は、デバッグ応答が入力されることに応じて、デバッグ応答を示すデバッグ応答画像を表示する。SW開発者は、表示部14に表示されるデバッグ応答画像を視認する。
【0119】
(第2実施形態に係るデバッグ装置の作用効果)
デバッグ装置1は、CPUモデルを含むSoCモデルを使用してシミュレーションすることで、CPUに加えてCPUに接続されるハードウェアモジュールの監視制御が可能になる。
【符号の説明】
【0120】
1、2 デバッグ装置
21 シンボリックデバッガ
22 デバッグサーバー
23 CPUシミュレータ
24、41 命令動作部
25 コンパイラ
26 ファイル取得部
28 SoCシミュレータ
120、320 シミュレーションデータ構造体
121、321 CPUメモリ
122、322 アプリケーションプログラム部
123、323 アプリケーションデータ部
124、324 データ構造体部