(57)【要約】【課題】ソフトウェアデバッグの効率向上を図る。【解決手段】制御ＬＳＩ１２には、ＣＰＵコア２１がメモリ空間をアクセスする際に使用する内部バス２７を監視し、予め指定された変数の状態をモニタするモニタ回路２２が備えられている。モニタ回路２２は、プログラム内の予め設定された変数に対してＣＰＵコア２１による書き換え動作が発生する場合にその更新データ（変数値）を記憶し、自身の内部レジスタに保持している変数情報を所定の送信サイクルでデバッグＩ／Ｆ２３を介してデバッグツール１４に送信する。【選択図】      図１
2005070949.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行するＣＰＵと、
前記ＣＰＵと同一の半導体基板上に集積された前記ＣＰＵがメモリ空間をアクセスする際に使用する内部バスと、
前記内部バスを監視して前記プログラム内の予め指定された変数の状態を１以上モニタするモニタ回路と、
を備えることを特徴とするプログラム処理装置。
【請求項２】
プログラムを実行するＣＰＵと、
前記ＣＰＵと同一の半導体基板上に集積された前記ＣＰＵがメモリ空間をアクセスする際に使用する内部バスと、
前記内部バスを監視して前記プログラム内の予め指定された変数の状態を１以上モニタし、該モニタする変数の値が前記ＣＰＵにより書き換えられる場合にその更新データを記憶するモニタ回路と、
を備えることを特徴とするプログラム処理装置。
【請求項３】
前記モニタ回路は、
モニタする変数のアドレス値を１以上保持するアドレスレジスタと、
前記アドレス値に基づいてモニタした変数の値を該アドレス毎に保持するデータレジスタと
を備えることを特徴とする請求項１又は２記載のプログラム処理装置。
【請求項４】
前記モニタ回路は、
インタフェース装置を介してデバッグ装置に接続され、前記アドレス値とそのアドレス値に基づいてモニタした変数の値を、所定の送信用コマンドに続く変数情報として前記デバッグ装置に送信することを特徴とする請求項３記載のプログラム処理装置。
【請求項５】
前記モニタ回路は、
前記変数情報を所定の送信サイクルにて前記デバッグ装置に定期的にあるいは前記変数情報が更新される毎に送信することを特徴とする請求項４記載のプログラム処理装置。
【請求項６】
前記モニタ回路は、
前記変数情報をシリアルデータとして送信することを特徴とする請求項４記載のプログラム処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム処理装置に係り、詳しくは組み込みソフトウェア（ファームウェア）等の動作検証を行う場合に使用して好適な制御ＬＳＩに関する。
【背景技術】
【０００２】
近年、ＣＰＵを内蔵したマイクロコンピュータ等のＬＳＩが組み込み用途として用いられ、ソフトウェアの開発にはエバリュエーションチップ（以下エバチップ）が一般的に用いられる。エバチップには、ターゲットシステムに搭載されるＣＰＵに加えて、ソフトウェアのデバッグを支援するインタフェース回路が搭載されている。そして、ユーザボードに搭載したエバチップにインサーキットエミュレータ（ＩＣＥ(Ｒ)）を接続して、該ＩＣＥからデバッグ用コマンドをＣＰＵに与えることにより、ソフトウェアデバッグが行われている。なお、エバチップを使用したデバッグシステムに関連する先行技術として例えば特許文献１が知られている。
【特許文献１】特開平１１−２８２７１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、ＣＰＵを含めた周辺回路を１チップ上に搭載してシステムレベルの機能を実現するＳＯＣ（System On a Chip）等においては、ＣＰＵのバスやコントロール信号がチップ内部に集約されてしまうため、デバッグ効率が低下するという問題があった。即ち、このようなＳＯＣにおけるソフト開発では、ＣＰＵを個別に評価用ボードに載せてデバッグを行う必要があるため、最終的に１チップにする開発費が必要になるとともに、設計期間が長くなりＴＡＴ（Turn Around Time）を低下させるという問題があった。
【０００４】
加えて、このようなソフトウェアデバッグ等の試験コストは極力低減させることが要求されており、デバッグに使用できる端子は少数に制限されているのが実情である。このため、デバッグを効率良く行うことができないという問題を有していた。
【０００５】
また、現状では、ソフトウェアの開発段階において、予めプログラムのソースコード中にブレイクポイントを設定し、そこを通過する際にプログラムの実行を停止させることで、デバッグを行うようにしている。しかしながら、この方法では、ブレイクポイントでＣＰＵの動作が停止されるために、デバッグ効率が低下するとともに、ブレイクポイントの設定のためにプログラムメモリを書き換える必要があるため、デバッグ作業が繁雑であるという問題があった。
【０００６】
本発明はこうした実情に鑑みてなされたものであり、その目的はソフトウェアデバッグの効率向上を図ることのできるプログラム処理装置を提供することにある。
【課題を解決するための手段】
【０００７】
上記の目的を達成するため、請求項１に記載の発明によれば、プログラム処理装置は、プログラムを実行するＣＰＵと、前記ＣＰＵと同一の半導体基板上に集積された、前記ＣＰＵがメモリ空間をアクセスする際に使用する内部バスと、前記内部バスを監視して前記プログラム内の予め指定された変数の状態を１以上モニタするモニタ回路と、を備える。この構成によれば、プログラム内にてユーザがチェックしたい変数を任意に設定してデバッグを行うことができる。また、ＣＰＵの動作を停止させることなくプログラムの動作状態をリアルタイムにモニタすることができるため、デバッグ作業を効率的に行うことがで
きる。
【０００８】
請求項２に記載の発明によれば、プログラム処理装置は、プログラムを実行するＣＰＵと、前記ＣＰＵと同一の半導体基板上に集積された、前記ＣＰＵがメモリ空間をアクセスする際に使用する内部バスと、前記内部バスを監視して前記プログラム内の予め指定された変数の状態を１以上モニタし、該モニタする変数の値が前記ＣＰＵにより書き換えられる場合にその更新データを記憶するモニタ回路と、を備える。この構成によれば、ＣＰＵの動作を停止させることなく、変数の状態を随時確認しながらデバッグ作業を進めることができる。
【０００９】
請求項３に記載の発明によれば、モニタ回路は、モニタする変数のアドレス値を１以上保持するアドレスレジスタと、そのアドレス値に基づいてモニタした変数の値をアドレス毎に保持するデータレジスタとを備えている。この構成によれば、モニタする変数のアドレス値を複数設定して、複数の変数の状態をチェックすることができる。
【００１０】
請求項４に記載の発明によれば、モニタ回路は、インタフェース装置を介してデバッグ装置に接続されており、前記アドレス値とそのアドレス値に基づいてモニタした変数の値を、所定の送信用コマンドに続く変数情報としてデバッグ装置に送信する。これにより、デバッグ装置は、モニタ回路にてモニタする複数の変数情報を受信することができる。
【００１１】
請求項５に記載の発明によれば、モニタ回路は、前記変数情報を所定の送信サイクルにてデバッグ装置に定期的にあるいは前記変数情報が更新される毎に送信する。これにより、変数の値が更新される場合にもユーザはその状態を随時確認することが可能となり、プログラムの動作状態をより的確に把握することが可能となる。
【００１２】
請求項６に記載の発明によれば、モニタ回路は、前記変数情報をシリアルデータとして送信する。これにより、デバッグ用端子を少数にすることができ、チップサイズの増加を抑制することができる。
【発明の効果】
【００１３】
本発明によれば、ソフトウェアデバッグの効率向上を図ることのできるプログラム処理装置を提供することができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明に係るプログラム処理装置を例えばファームウェアのデバッグを行うための制御ＬＳＩに適用した一実施の形態を図面に従って説明する。
【００１５】
図１は、本実施形態のデバッグシステム１１の概略を示すブロック図である。デバッグシステム１１は、プログラム処理装置としての制御ＬＳＩ１２及びその制御ＬＳＩ１２とツールバスを介して接続されるデバッグ装置としてのパーソナルコンピュータ（以下ＰＣ）１３を含む。後述するように、制御ＬＳＩ１２は、ＣＰＵを含めた周辺回路を１チップに搭載してシステムレベルの機能を実現するシステムＬＳＩである。ＰＣ１３は、例えばＩＣＥ（Ｒ）等にてなるデバッグツール１４を有している。
【００１６】
詳述すると、制御ＬＳＩ１２にはデバッグ用端子（図示略）が備えられ、そのデバッグ用端子にツールバスのバスケーブル１５が接続されている。デバッグ用端子は、制御ＬＳＩ１２のチップサイズに与える影響を少なくするために少数（本実施形態では例えば２ピン）で設けられ、同制御ＬＳＩ１２はバスケーブル１５を介してデバッグツール１４とシリアル通信する。尚、本実施形態では、２つのデバッグ用端子にそれぞれクロックバスとデータバスとが接続され、制御ＬＳＩ１２とデバッグツール１４の間のデータ転送（双方向）はクロックに同期して行われるようになっている。
【００１７】
制御ＬＳＩ１２は、ＣＰＵコア２１、モニタ回路２２、デバッグインタフェース（以下デバッグＩ／Ｆ）２３、外部バスインタフェース（以下外部バスＩ／Ｆ）２４、周辺回路としての内部ＲＡＭ２５及び内部レジスタ２６を同一の半導体基板上に有している。また、制御ＬＳＩ１２は、図示していないが、ＣＰＵコア２１によって動作制御される信号処理回路も有している。
【００１８】
ＣＰＵコア２１、モニタ回路２２、外部バスＩ／Ｆ２４、内部ＲＡＭ２５及び内部レジスタ２６は内部バス２７を介して相互に接続されている。ＣＰＵコア２１とモニタ回路２２は内部バス２８を介して接続され、ＣＰＵコア２１とデバッグＩ／Ｆ２３は内部バス２９を介して接続されている。モニタ回路２２とデバッグＩ／Ｆ２３は内部バス３０を介して接続されている。
【００１９】
外部バスＩ／Ｆ２４には外部バス３１を介してプログラムメモリ３２が接続されている。プログラムメモリ３２は、本実施形態では例えばフラッシュメモリで構成され、同メモリ３２にはデバッグ対象となるファームウェアがＣＰＵコア２１にて実行可能な形態で格納されている。より具体的には、Ｃ言語等の高級言語にて記述されたファームウェア（プログラム）にコンパイル処理及びリンク処理が施され、ＣＰＵコア２１が実行することのできる機械語の命令列に変換されて格納されている。
【００２０】
ＣＰＵコア２１は、プログラムメモリ３２に格納されているプログラムを読み込んで命令をデコードし、該デコード結果に応じた各種の処理を同ＣＰＵコア２１のメモリマップにマッピングされたアドレスにて指定される領域（メモリ空間）をアクセスすることにより実行する。尚、本実施形態において、ＣＰＵコア２１がアクセスするメモリ空間としては、内部バス２７を介して接続される内部ＲＡＭ２５や内部レジスタ２６の他、外部バス３１を介して接続される図示しない周辺回路等のメモリ空間を含む。
【００２１】
モニタ回路２２は、ＣＰＵコア２１によるプログラム実行時において、同ＣＰＵコア２１がメモリ空間をアクセスする際に使用する内部バス２７を監視して、プログラムのソースコード内に設定されている変数の状態を１又は複数モニタする。
【００２２】
詳述すると、モニタ回路２２には、内部レジスタ４１（図２）が備えられており、この内部レジスタ４１には、モニタ回路２２がモニタする変数のアドレス値が設定されている。モニタ回路２２は、ＣＰＵコア２１によるプログラムの実行時に内部バス２７（具体的にはアドレスバス）を監視し、前記内部レジスタ４１に設定されているアドレスが内部バス２７に送出されたかどうか（即ち、変数がＣＰＵコア２１によりアクセスされたか否か）をチェックする。そして、その変数に対してＣＰＵコア２１により書き換え動作が行われる場合に、その更新データを内部バス２７（具体的にはデータバス）より取得して内部レジスタ４１に記憶するようになっている。これにより、プログラム実行時において、モニタ回路２２は、プログラム内の予め指定された変数をモニタする。
【００２３】
前記内部レジスタ４１の具体的構成について説明すると、図２に示すように、内部レジスタ４１は、例えば１２種類の変数情報を保持するアドレスレジスタ４２とデータレジスタ４３とから構成されている。尚、本実施形態において、変数情報とは、モニタする変数のアドレス値及びそのアドレス値に基づいてモニタした変数の値のことをいう。
【００２４】
即ち、モニタ回路２２は、１２種類の変数の状態をモニタ可能であり、各変数情報はそれぞれモニタデータ「ＭＯＮ０」〜「ＭＯＮ１１」としてアドレスレジスタ４２とデータレジスタ４３とに保持されるようになっている。
【００２５】
アドレスレジスタ４２には、第１，第２，第３レジスタ「ＡＤＲＨ」，「ＡＤＲＭ」，「ＡＤＲＬ」にそれぞれ８ビットで格納されているデータ（計２４ビット）がプログラム内でモニタする変数のアドレス値として設定されている。
【００２６】
データレジスタ４３（「ＤＡＴＡ」）には、そのアドレスレジスタ４２に設定されているアドレス値（各２４ビット）に基づいてモニタした８ビットの変数値が記憶されるようになっている。
【００２７】
モニタ回路２２は、これらのモニタデータ「ＭＯＮ０」〜「ＭＯＮ１１」において、アドレスレジスタ４２により指定される変数をモニタし、その変数に対してＣＰＵコア２１による書き換え動作が発生する場合にその更新される変数値をデータレジスタ４３に保存する。
【００２８】
例えば、モニタ回路２２は、図２に示す第１，第２，第３レジスタ「ＡＤＲＨ」，「ＡＤＲＭ」，「ＡＤＲＬ」である「03:0000h」，「03:0001h」，「03:0002h」によって指定されるモニタデータ「ＭＯＮ０」の変数をモニタする。そして、モニタ回路２２は、その変数が書き換えられる場合に該更新される変数値をデータレジスタ４３の「03:0003h」に保存する。
【００２９】
上記のように構成されるモニタ回路２２は、内部レジスタ４１（アドレスレジスタ４２及びデータレジスタ４３）に保持している変数情報を、所定の送信用コマンドにて定期的にデバッグＩ／Ｆ２３を介してデバッグツール１４（ＰＣ１３）に送信する。このとき、本実施形態では、バスケーブル１５を２ピンとしているので、シリアルデータが送信されることになる。
【００３０】
例えば、モニタ回路２２は、送信用コマンド「C0h」，「04h」（図示略）に続く変数情報として、モニタデータ「ＭＯＮ０」の第１，第２，第３レジスタ「ＡＤＲＨ」，「ＡＤＲＭ」，「ＡＤＲＬ」である「03:0000h」，「03:0001h」，「03:0002h」に格納された変数のアドレス値を送信した後、そのアドレス値に基づいてモニタした変数値として「03:0003h」に保存されたデータを送信する。
【００３１】
そして、モニタ回路２２は、ＣＰＵコア２１のクロック周波数に基づいて予め設定された所定の送信サイクルに従って、モニタデータ「ＭＯＮ０」，「ＭＯＮ１」，…「ＭＯＮ１１」，「ＭＯＮ０」の順に変数情報をデバッグツール１４に送信するようになっている。
【００３２】
前記モニタ回路２２（内部レジスタ４１）へのアドレス値の設定はデバッグツール１４によって行われる。デバッグツール１４は、ＰＣ１３の入力装置（図示略）より入力される開発者（ユーザ）からの指示に基づいて、モニタ回路２２にてモニタする変数のアドレスを制御ＬＳＩ１２へ送信する。具体的には、デバッグツール１４は、ＣＰＵコア２１のメモリマップに従って、プログラム内の変数がマッピングされているアドレス値を算出し、そのアドレスをバスケーブル１５を介してＰＣ１３から制御ＬＳＩ１２に転送する。
【００３３】
ＣＰＵコア２１は、転送されたアドレス（変数のアドレス値）をデバッグＩ／Ｆ２３から内部バス２９を介して受け取り、該受け取ったアドレスを内部バス２８を通じてモニタ回路２２（内部レジスタ４１）に設定する。
【００３４】
その後、デバッグツール１４は、ＣＰＵコア２１にプログラム（ファームウェア）を実行させる。その実行過程において、モニタ回路２２は、予め設定された変数のアドレス値に対してデータ（変数値）の書き換え動作が行われていないかどうかを常時監視し、書き
換えが発生した場合に該更新された変数値を内部レジスタ４１に記憶する。そして、モニタ回路２２は、その内部レジスタ４１に保持している変数情報を所定の送信用コマンドにて内部バス３０を介してデバッグＩ／Ｆ２３からデバッグツール１４（ＰＣ１３）に送信する。
【００３５】
デバッグツール１４は、このようにして制御ＬＳＩ１２から定期的に送信される変数情報を順次取り込み、その内容をＰＣ１３の表示装置（図示略）に出力する。これにより、ユーザは、プログラムの動作状態を確認し、ファームウェアのデバッグを進める。
【００３６】
以上記述した本実施形態によれば、以下の効果を奏する。
【００３７】
（１）制御ＬＳＩ１２には、ＣＰＵコア２１がメモリ空間をアクセスする際に使用する内部バス２７を監視し、予め指定された変数の状態をモニタするモニタ回路２２が備えられている。このモニタ回路２２は、プログラム内の予め設定された変数に対してＣＰＵコア２１による書き換え動作が発生する場合にその更新データ（変数値）を記憶し、内部レジスタ４１に保持している複数の変数情報を所定の送信サイクルで定期的にデバッグツール１４に送信する。この構成によれば、プログラム内にてユーザがチェックしたい変数（例えば分岐発生個所における変数等）を任意に設定して、デバッグを行うことができる。また、この構成では、ＣＰＵコア２１の動作を停止させることなく、プログラムの動作状態をリアルタイムで監視することができる。従って、デバッグ作業を効率良く行うことができる。
【００３８】
（２）本実施形態では、予め指定した複数の変数に対して、モニタ回路２２から順次シリアルで送信される変数情報を元にデバッグを行うようにした。このため、クロックバスとデータバスの２本のバスケーブル１５でデバッグを実現することができる。このようにデバッグ用端子数を少なくすることで、制御ＬＳＩ１２のチップサイズの増加を抑えつつ、デバッグ作業を効率良く行うことができる。
【００３９】
（３）本実施形態では、従来のように変数情報を取得するためにブレイクポイントをプログラムのソースコード中に設定する必要は必ずしもない。このため、ブレイクポイント設定のためのプログラムメモリの書き換え作業等を不要とすることもできる。ただし、ブレイクポイントをプログラムのソースコード中に設定しつつ、変数情報を取得することも勿論できる。
【００４０】
（４）本実施形態では、マイコン等のソフト開発において、ＣＰＵ（ＣＰＵコア２１）を搭載したままでソフトウェアデバッグを行うことができる。これにより、ソフト開発効率を向上させて、開発コストの低減を図ることができる。延いては、設計期間を短縮してＴＡＴの向上を図ることができる。
【００４１】
尚、上記実施形態は、以下のように変更して実施してもよい。
【００４２】
・本実施形態において、制御ＬＳＩ１２（システムＬＳＩ）は、内部ＲＡＭ２５及び内部レジスタ２６（図１）を備えるが、チップ内にＣＰＵコア２１とともに搭載される周辺回路としては本実施形態に限定されない。
【００４３】
・モニタ回路２２の内部レジスタ４１の構成は、図２に示す態様に限定されるものではない。また、モニタデータとして保持する複数の変数情報は本実施形態で例述した１２種類に限定されず、少なくとも１つの変数情報を保持することができればよい。
【００４４】
・本実施形態では、内部レジスタ４１に保持している変数情報を定期的に送信する場合の適用例を示したが、これに限定されない。例えば変数情報が更新される毎に送信するなど、あらかじめ決められた方法により送信されればよい。
【００４５】
・本実施形態では、ファームウェアのデバッグを行う場合に適用したが、この適用例に限定されるものではない。
【００４６】
上記実施形態から把握できる技術思想を以下に記載する。
（イ）  プログラムを実行するＣＰＵと、該ＣＰＵがメモリ空間をアクセスする際に使用する内部バスを監視して前記プログラム内の予め指定された変数の状態を１以上モニタするモニタ回路と、を同一チップ上に有するプログラム処理装置と、
前記プログラム処理装置に接続され、前記モニタ回路から送信される変数情報を受信して出力するデバッグ装置と
を備えることを特徴とするデバッグシステム。
（ロ）  前記モニタ回路にてモニタすべき変数情報を前記デバッグ装置から設定可能としたことを特徴とする（イ）記載のデバッグシステム。
【図面の簡単な説明】
【００４７】
【図１】一実施の形態のデバッグシステムの概略構成を示すブロック図である。
【図２】モニタ回路の内部レジスタを示す説明図である。
【符号の説明】
【００４８】
１２：プログラム処理装置としての制御ＬＳＩ、１３：デバッグ装置としてのパーソナルコンピュータ（ＰＣ）、２１：ＣＰＵとしてのＣＰＵコア、２２：モニタ回路、２３：インタフェース装置としてのデバッグＩ／Ｆ、２５：周辺回路としての内部ＲＡＭ、２６：周辺回路としての内部レジスタ、２７：内部バス、４２：アドレスレジスタ、４３：データレジスタ。
【図１】
2005070949.tif 000003
【図２】
2005070949.tif 000004