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