(57)【要約】【課題】ターゲット装置に搭載可能で、且つ、プロセッサ・コアを含み且つ当該プロセッサ・コアの改造無しに、ターゲット装置を制御するプログラムに対して、様々な種類のデバッグ処理を行うのに好適な情報処理装置、当該情報処理装置における、各種デバッグ処理の実行方法を提供する。【解決手段】デバッグシステム１を、情報処理装置２０の搭載されたターゲット装置２と、ホスト装置３と、シリアル通信ケーブル４と、を含んだ構成とし、情報処理装置２０を、ＣＰＵコア２０ａと、マルチプレクサ２０ｂと、プログラムＲＯＭ２０ｃと、アドレスコンパレータ２０ｄと、エミュレートコードＲＯＭ２０ｅと、エミュレートコードＲＡＭ２０ｆと、エミュレータＩ／Ｆレジスタ２０ｇと、アドレストレースＲＡＭ２０ｈと、コンパクタ２０ｉと、データメモリ２０ｊと、シリアル通信Ｉ／Ｆ部２０ｋと、を含んだ構成とした。【選択図】      図１
2005122350.tif 000002
【特許請求の範囲】
【請求項１】
ターゲット装置に搭載可能で、且つ、外部にあるホスト装置からの指示に応じて、前記ターゲット装置を制御するプログラムのデバッグ処理を行うことが可能な情報処理装置であって、
所定のプログラムを実行可能なプロセッサ・コアと、
前記ターゲット装置を制御するための前記プロセッサ・コアが実行可能なターゲット用プログラムを記憶する第１のプログラム用メモリと、
前記プロセッサ・コアによって実行される前記ターゲット用プログラムをデバッグするための、前記プロセッサ・コアが実行可能なデバッグ用プログラムを記憶する第２のプログラム用メモリと、
前記プロセッサ・コアがプログラムの実行時に使用するデータを記憶するデータ用メモリと、
前記ホスト装置からの指示に基づき、前記プロセッサ・コアに対するプログラムの供給元を、前記第１のプログラム用メモリ又は前記第２のプログラム用メモリのいずれか一方に切り替える切り替え手段と、
前記ホスト装置との間でデータの送受信を行うためのデータ送受信手段と、を備えることを特徴とする情報処理装置。
【請求項２】
前記第１のプログラム用メモリのアドレス空間における現在実行中の前記ターゲット用プログラムの使用するアドレスと、予め設定された比較用アドレスと、を比較するアドレス比較手段と、
前記ホスト装置により、任意のアドレスを前記比較用アドレスとして設定可能な比較用アドレス設定手段と、を備えることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記デバッグ用プログラムの実行時に、前記プロセッサ・コアの有するレジスタの内容及びプログラムカウンタの値を退避するための退避手段を備えることを特徴とする請求項１又は請求項２記載の情報処理装置。
【請求項４】
前記第１のプログラム用メモリのアドレス空間において、前記プロセッサ・コアが前記ターゲット用プログラムの実行時に使用するメモリアドレスのデータを、前記データ送受信手段を介して前記ホスト装置に送信可能なアドレス送信手段を備えることを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記プロセッサ・コアが前記ターゲット用プログラムの命令コードをフェッチしたか否かを監視するフェッチ監視手段を備えることを特徴とする請求項３又は請求項４記載の情報処理装置。
【請求項６】
前記ホスト装置から前記データ送受信手段を介して前記デバッグ用プログラムを取得するデバッグ用プログラム取得手段を備えることを特徴とする請求項１乃至請求項５のいずれか１項に記載の情報処理装置。
【請求項７】
請求項３乃至請求項５のいずれか１項に記載の情報処理装置において、前記ホスト装置によって前記プロセッサ・コアが実行中の前記ターゲット用プログラムを中断する方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記実行中のターゲット用プログラムを中断するための中断用プログラムを記憶し、
前記ホスト装置からの指示に応じて、
前記切り替え手段によって、前記プログラムの供給元を前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替え、
前記第２のプログラム用メモリに記憶された前記中断用プログラムを前記プロセッサ・コアに実行させることで、実行中の前記ターゲット用プログラムを中断することを特徴とするプログラム中断方法。
【請求項８】
請求項３乃至請求項５のいずれか１項に記載の情報処理装置において、前記ターゲット用プログラムが前記第１のプログラム用メモリのアドレス空間における任意のアドレスを使用したときに、前記プロセッサ・コアにおいて実行中の前記ターゲット用プログラムを中断する方法であって、
前記第２のプログラム用メモリに、前記実行中のターゲット用プログラムを中断するための中断用プログラムを記憶し、
前記比較用アドレス設定手段によって、前記ホスト装置により前記比較用アドレスを設定し、
前記ターゲット用プログラムの実行中に、前記アドレス比較手段の比較結果が、現在使用中のアドレスと前記比較用アドレスとが一致する結果となったときに、前記切り替え手段によって、前記プログラムの供給元を、前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替え、
前記第２のプログラム用メモリに記憶された前記中断用プログラムを前記プロセッサ・コアに実行させることで、実行中の前記ターゲット用プログラムを中断することを特徴とするプログラム中断方法。
【請求項９】
前記切り替え手段によって、前記プログラムの供給元を前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替えるときに、前記退避手段によって、前記ターゲット用プログラムの実行時に使用する、前記プロセッサ・コアのレジスタの内容及びプログラムカウンタの値を退避することを特徴とする請求項７又は請求項８記載のプログラム中断方法。
【請求項１０】
請求項３乃至請求項５のいずれか１項に記載の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記プロセッサ・コアの有する前記レジスタの内容を前記ホスト装置に送信する方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記退避手段によって退避されたレジスタの内容を前記データ送受信手段を介して前記ホスト装置に送信するためのレジスタダンププログラムを記憶し、
請求項９記載のプログラム中断方法により、実行中の前記ターゲット用プログラムを中断し、
前記ホスト装置からの指示に応じて、
前記第２のプログラム用メモリに記憶された前記レジスタダンププログラムを前記プロセッサ・コアに実行させることで、前記プロセッサ・コアの有する前記レジスタの内容を前記ホスト装置に送信することを特徴とするレジスタダンプ方法。
【請求項１１】
請求項３乃至請求項５のいずれか１項に記載の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記プロセッサ・コアの有する前記レジスタの内容を前記ホスト装置によって書換える方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記レジスタの内容を書換えるためのレジスタ書換え用プログラムと、前記退避手段の退避内容に基づき、前記プロセッサ・コアの有する前記レジスタの内容及び前記プログラムカウンタの値を書換えるレストアプログラムと、を記憶し、
請求項９記載のプログラム中断方法により、実行中の前記ターゲット用プログラムを中断し、
前記ホスト装置からの指示に応じて、
前記第２のプログラム用メモリに記憶された前記レジスタ書換え用プログラムを前記プロセッサ・コアに実行させることで、前記ホスト装置からの指示に応じて前記退避手段によって退避されたレジスタの内容を書換える処理に移行し、
前記書換え処理終了後に、前記第２のプログラム用メモリに記憶された前記レストアプログラムを前記プロセッサ・コアに実行させることで、前記プロセッサ・コアの有する前記レジスタの内容を書換えることを特徴とするレジスタ書換え方法。
【請求項１２】
請求項３乃至請求項５のいずれか１項に記載の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記データ用メモリに記憶されたデータを前記ホスト装置に送信する方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記データ用メモリのデータを前記ホスト装置に送信するためのメモリダンププログラムを記憶し、
請求項９記載のプログラム中断方法により、実行中の前記ターゲット用プログラムを中断し、
前記ホスト装置からの指示に応じて、
前記第２のプログラム用メモリに記憶された前記メモリダンププログラムを前記プロセッサ・コアに実行させることで、前記ホスト装置からの指示に基づき、前記データ用メモリに記憶された所定のデータを前記データ送受信手段を介して前記ホスト装置に送信する処理を行うことを特徴とするメモリダンプ方法。
【請求項１３】
請求項３乃至請求項５のいずれか１項に記載の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記データ用メモリに記憶されたデータを前記ホスト装置によって書換える方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記データ用メモリに記憶されたデータを書換えるためのデータ書換え用プログラムを記憶し、
請求項９記載のプログラム中断方法により、実行中の前記ターゲット用プログラムを中断し、
前記ホスト装置からの指示に応じて、
前記第２のプログラム用メモリに記憶された前記データ書換え用プログラムを前記プロセッサ・コアに実行させることで、前記ホスト装置からの指示に基づき、前記データ用メモリに記憶された所定のデータを書換えることを特徴とするメモリ書換え方法。
【請求項１４】
請求項４又は請求項５記載の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記第１のプログラム用メモリのアドレスを前記ホスト装置に送信する方法であって、
前記ホスト装置からの指示に応じて、
前記ターゲット用プログラムの実行時に、前記アドレス送信手段によって、前記プロセッサ・コアが前記ターゲット用プログラムの実行時に使用するメモリアドレスのデータを、前記データ送受信手段を介して前記ホスト装置に送信することを特徴とするアドレストレース方法。
【請求項１５】
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記プロセッサ・コアにＮＯＰ命令を実行させるためのＮＯＰプログラムと、前記退避手段の退避内容に基づき、前記プロセッサ・コアの有する前記レジスタの内容及び前記プログラムカウンタの値を書換えるレストアプログラムと、を記憶し、
前記第１のプログラム用メモリのアドレスに記憶された前記ターゲット用プログラムの命令が順番に実行される場合は、前記アドレス送信手段によって、前記ターゲット用プログラムの順次実行を示すデータを前記データ送受信手段を介して前記ホスト装置に送信する第１の処理手順と、
前記ターゲット用プログラムの実行中にジャンプ命令が発生したときに、前記退避手段によって、前記プロセッサ・コアの有する前記レジスタの内容及び前記プログラムカウンタの値を退避する第２の処理手順と、
前記ジャンプ命令の実行前に前記切り替え手段によって、前記プログラムの供給元を、前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替える第３の処理手順と、
前記第２のプログラム用メモリが前記切り替え手段によってプログラムの供給元となったときに、前記アドレス送信手段が前記ジャンプ命令によるジャンプ先のアドレスデータを前記ホスト装置に送信する処理を完了するまで、前記第２のプログラム用メモリに記憶された前記ＮＯＰプログラムを前記プロセッサ・コアに実行させる第４の処理手順と、
前記ジャンプ先のアドレスデータの送信処理が完了したときに、前記プロセッサ・コアに前記レストアプログラムを実行させる第５の処理手順と、
当該レストアプログラムの実行後に、前記切り替え手段によって、前記プログラムの供給元を、前記第２のプログラム用メモリから前記第１のプログラム用メモリに切り替えて、前記プロセッサ・コアに前記ジャンプ命令を実行させる第６の処理手順と、
前記ジャンプ命令によるジャンプ先の次のアドレスから前記アドレス送信手段によるアドレスの送信処理を再開する第７の処理手順と、を備え、
前記第１〜第７の処理手順を繰り返し行うことで、前記ターゲット用プログラム実行時における前記第１のプログラム用メモリのアドレスを、前記ターゲット用プログラムの命令実行順に前記ホスト装置に送信することを特徴とする請求項１４記載のアドレストレース方法。
【請求項１６】
請求項５記載の情報処理装置において、前記ホスト装置によって前記プロセッサ・コアに前記ターゲット用プログラムを１命令ずつ順番に実行させるための方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記退避手段の記憶内容に基づき前記プロセッサ・コアの前記レジスタの内容及び前記プログラムカウンタの値を書換えるレストアプログラムを記憶し、
前記ホスト装置からの指示に応じて、
前記ターゲット用プログラムの実行を開始し、前記フェッチ監視手段の監視結果に基づき、１命令のフェッチ後において、当該フェッチした命令の実行後で且つ次命令のフェッチ前に、前記切り替え手段によって前記プログラムの供給元を、前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替える第１の処理手順と、
前記退避手段によって、前記フェッチした命令の実行時に使用される、前記プロセッサ・コアの有する前記レジスタの内容及び前記プログラムカウンタの値を退避する第２の処理手順と、
前記退避手段によって退避された前記プログラムカウンタの値を前記フェッチされた命令の次の命令を前記プロセッサ・コアに実行させる値に書換える第３の処理手順と、
前記第２のプログラム用メモリに記憶された前記レストアプログラムを前記プロセッサ・コアに実行させる第４の処理手順と、
当該レストアプログラムの実行後に、前記切り替え手段によって、前記プロセッサ・コアへのプログラムの供給元を、前記第２のプログラム用メモリから前記第１のプログラム用メモリに切り替える第５の処理手順と、を備え、
前記第１〜第５の処理手順を繰り返し行うことで、前記コアプログラムに前記ターゲット用プログラムを１命令ずつ順番に実行させることを特徴とするターゲット用プログラムのステップ実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ターゲット装置の動作を制御するターゲット用プログラムをデバッグする装置に係り、特に、プロセッサ・コアを含み且つ当該プロセッサ・コアの改造無しに様々な種類のデバッグ処理を行うのに好適な情報処理装置に関する。
【背景技術】
【０００２】
従来、ターゲット機のハードウェア及びソフトウェアの少なくともいずれかをデバッグするための技術として、例えば、フルＩＣＥ−ボンドアウトチップ方式とオンチップデバッガ−シリアルデバッグ方式とがある。
フルＩＣＥ−ボンドアウトチップ方式は、通常チップの機能を含みデバッグ用の論理を備えたボンドアウトチップと外部ロジックとを用いてデバッグを行うものである。
【０００３】
外部に設けた論理によりボンドアウトチップに対してデバッグ割り込みを発行してデバッガプログラムを起動し、該プログラム内でレジスタの書換え、メモリの読み出し等を行っている。
また、通常の割り込み線とは異なる、デバッグ専用の割り込み線を使ってトリガをかけ、一般には通常のアドレス空間から隔離されたデバッグ専用のアドレス空間内にて所望の処理をさせることで任意のタイミングでの外部ブレークを実現していた。
【０００４】
また、外部に設けたアドレスコンパレータによりプログラムアドレスを監視して、アドレスマッチをトリガとして、通常の割り込み線とは異なるデバッグ専用の割り込み線を使って制御を移し、一般には通常のアドレス空間から隔離されたデバッグ専用のアドレス空間内にて所望の処理をさせることで所望のアドレスブレークを実現していた。
また、プログラムのトレースは、外部に設けたアドレス監視論理によりプログラムアドレスを監視して、これをメモリに格納していくことで実現していた。通常は、特定アドレスマッチをトリガとしてメモリ格納の開始・中断を行うことで、プログラム実行のトレースを実現する。
【０００５】
また、外部に設けたバス監視論理によりプログラムコードのフェッチを監視して、通常コードのフェッチをトリガとして、通常の割り込み線とは異なるデバッグ専用の割り込み線を使って制御を移し、一般には通常のアドレス空間から隔離されたデバッグ専用のアドレス空間内にて所望の処理をさせることでプログラムのステップ実行を実現していた。
一方、オンチップデバッガ−シリアルデバッグ方式は、チップ上にデバッグ用の論理を搭載し、デバッグ用の論理のための専用デバッグ割り込みを準備して、当該デバッグ割り込みを発行してデバッガプログラムを起動し、そのプログラム内にてレジスタの書換え、メモリの読み出し等を行っている。
【０００６】
また、デバッグ専用のチャネル（通常はシリアル入出力）を用意して、オンチップのデバッグ用の論理に対して所望のトリガをかけたり、制御をおこなっていた。
また、チップ上にアドレスコンパレータを搭載し、このコンパレータにデバッグ専用のチャネルにより比較アドレスをセットし、アドレスブレークを実現していた。
また、チップ上にプログラムアドレスの監視手段とメモリとを設け、該メモリにプログラムアドレスを格納していくことでトレースを実現していた。しかし、入出力本数の制限等から、アドレスの一部のみを出力したり、差分のみを出力したりすることが行われている。
【０００７】
また、チップ上に１命令実行毎に割り込みをかけるトレースフラグ等を準備し、１命令実行毎にトレース割り込みをかけて、プログラムのステップ実行を実現していた。
また、従来、ターゲット機のハードウェア及びソフトウェアの少なくともいずれかをデバッグするための技術として、例えば、特許文献１（以下、第１の従来例と言う）に開示されているデバッグ装置及び情報記憶媒体、特許文献２（以下、第２の従来例と言う）に開示されている、デバッグ装置、情報処理装置及び情報記憶媒体、特許文献３（以下、第３の従来例と言う）に開示されているデバッグ装置、情報処理装置及び情報記憶媒体があった。
【０００８】
第１の従来例は、デバッグ用に実行されるプログラムの出力情報に基づき、ユーザがそのデバッグ用に実行されるプログラムの実行内容や実行位置等を容易に理解できる情報を提供できるデバッグ装置及び情報記憶媒体を提供することを課題としたものである。
このデバッグ装置は、デバッグ対象であるターゲット機をデバッグ装置であるホスト機に通信線で接続してデバッグを行う構成となっている。ターゲット機では、デバッグ用プログラムが実行され、該デバッグ用プログラムの出力情報をホスト機に送信し、ホスト機からのコマンドを待ち、コマンドが送られてきた場合にはそのコマンドの処理を行う。ホスト機では、表示部にターゲット機で実行された機能診断ルーチンの、ＩＤ番号、行番号、ソースファイル、コメント等が出力される。
【０００９】
第２の従来例は、通信機能の利用の有無に応じて、実行時間の遅延を招かないようにデバッグ処理を行うことができ、デバッグ段階のみならず、製造後・出荷後の情報処理装置の障害解析を容易にするデバッグ装置を提供することを課題としたものである。
このデバッグ装置は、デバッグ対象であるターゲット機をデバッグ装置であるホスト機に通信線で接続してデバッグを行う構成となっている。ターゲット機では、デバッグ用プログラムが実行され、該デバッグ用プログラムの出力情報をホスト機に送信し、ホスト機からのコマンドを待ち、コマンドが送られてきた場合にはそのコマンドの処理を行う。ターゲット機ではホスト存在フラグを設定し、前記ホスト存在フラグがたっていない場合はホスト機が存在しないものとして処理を行う。
【００１０】
第３の従来例は、デバッグ段階及び製造後、出荷後においてハードウェアに障害を含む情報処理装置のハードウェア及びソフトウェアのデバッグ作業を容易にし、また、前記情報処理装置の形状又は状態に関わらずデバッグが可能なデバッグ装置を提供することを課題としたものである。
このデバッグ装置は、デバッグ対象であるターゲット機をデバッグ装置であるホスト機に通信線で接続してデバッグを行う構成となっている。ターゲット機では、デバッグ用プログラムが実行され、その出力情報をホスト機に送信し、ホスト機からコマンドが送られてきた場合にはそのコマンドの処理を行う。ホスト機では、ホストプログラムが実行され、自動的に又はユーザの指示によりターゲットにプログラムを送って実行させたり、ターゲットにメモリ読み出しなどのコマンドを送り・結果を受け取り・表示したりする。
【特許文献１】特開平１０−３０１８０１号公報
【特許文献２】特開平１０−３０１８０２号公報
【特許文献３】特開平１０−３０１８０３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、フルＩＣＥ−ボンドアウトチップ方式及びオンチップデバッガ−シリアルデバッグ方式のいずれにしても、最低、デバッグ用の割り込み線を準備しなければ、デバッグを行えないため、ＣＰＵのコアまわりの変更が必須となる。ここで、他の割り込み線との共用でも一部機能実現は不可能ではないが、該当の割り込みデバッグが不可となるだけでなく、本来、最優先であるはずのデバッガ要求が一般処理とまぎれるのは好ましくない。
【００１２】
また、上記第１〜第３の従来例は、いずれも、ＰＣ等のターゲット機の備える、ハードウェアの制御を行うＢＩＯＳの有するＰＯＤ（Power On Diagnostic）と呼ばれる特殊なプログラムの実行に対してブレークを行うことでホスト機に制御を切り替え、ＯＳ等のターゲット機を制御するソフトウェアの起動前に、ホスト機からのコマンド送信によりターゲット機のハードウェアのデバッグを行うことを主体としたものである。そのため、ターゲット機を制御するＯＳ等のソフトウェアのデバッグに対しては本文中に述べられていない。更に、ターゲット機のＰＯＤの動作を中断して、ホスト機による制御に切り替える部分についての具体的な構成（専用の割り込み線等の必要性など）も述べられていない。
【００１３】
そこで、本発明は、このような従来の技術の有する未解決の課題に着目してなされたものであって、ターゲット装置に搭載可能で、且つ、プロセッサ・コアを含み且つ当該プロセッサ・コアの改造無しに、ターゲット装置を制御するプログラムに対して、様々な種類のデバッグ処理を行うのに好適な情報処理装置、当該情報処理装置における、プログラム中断方法、レジスタダンプ方法、レジスタ書換え方法、メモリダンプ方法、メモリ書換え方法、アドレストレース方法及びターゲット用プログラムのステップ実行方法を提供することを目的としている。
【課題を解決するための手段】
【００１４】
〔発明１〕
上記目的を達成するために、発明１の情報処理装置は、ターゲット装置に搭載可能で、且つ、外部にあるホスト装置からの指示に応じて、前記ターゲット装置を制御するプログラムのデバッグ処理を行うことが可能な情報処理装置であって、
所定のプログラムを実行可能なプロセッサ・コアと、
前記ターゲット装置を制御するための前記プロセッサ・コアが実行可能なターゲット用プログラムを記憶する第１のプログラム用メモリと、
前記プロセッサ・コアによって実行される前記ターゲット用プログラムをデバッグするための、前記プロセッサ・コアが実行可能なデバッグ用プログラムを記憶する第２のプログラム用メモリと、
前記プロセッサ・コアがプログラムの実行時に使用するデータを記憶するデータ用メモリと、
前記ホスト装置からの指示に基づき、前記プロセッサ・コアに対するプログラムの供給元を、前記第１のプログラム用メモリ又は前記第２のプログラム用メモリのいずれか一方に切り替える切り替え手段と、
前記ホスト装置との間でデータの送受信を行うためのデータ送受信手段と、を備えることを特徴としている。
【００１５】
このような構成であれば、プロセッサ・コアによって、所定のプログラムを実行可能であり、第１のプログラム用メモリによって、ターゲット装置を制御するための前記プロセッサ・コアが実行可能なターゲット用プログラムを記憶することが可能であり、第２のプログラム用メモリによって、前記プロセッサ・コアによって実行される前記ターゲット用プログラムをデバッグするための、前記プロセッサ・コアが実行可能なデバッグ用プログラムを記憶することが可能であり、データ用メモリによって、前記プロセッサ・コアがプログラムの実行時に使用するデータを記憶することが可能であり、切り替え手段によって、ホスト装置からの指示に基づき、前記プロセッサ・コアに対するプログラムの供給元を、前記第１のプログラム用メモリ又は前記第２のプログラム用メモリのいずれか一方に切り替えることが可能であり、データ送受信手段によって、ホスト装置との間でデータの送受信を行うことが可能である。
【００１６】
従って、データ送受信手段によって、ターゲット装置からの指示を取得したり、ターゲット装置に対して応答を返したりすることが可能である。
また、切り替え手段によって、プロセッサ・コアにプログラムを供給するメモリを、ターゲット用プログラムの記憶された第１のプログラム用メモリからデバッグ用プログラムの記憶された第２のプログラム用メモリに切り替えることで、プロセッサ・コアに、デバッグ用のプログラムを実行させることが可能であるので、従来の、専用の割り込み線を用いて実行中のターゲット用プログラムを中断し、プロセッサ・コアにデバッグ用プログラムを実行させる方法のように、プロセッサ・コアを改造して割り込み線を設ける必要が無い。
【００１７】
ここで、ターゲット装置とは、本発明の情報処理装置によって実行されるターゲット用プログラムによってその動作が制御される装置であり、つまりは、情報処理装置（プロセッサ）を搭載したカーナビゲーション装置、オーディオ機器、ビデオ機器等の電気製品全般である。
また、ホスト装置とは、ＰＣ、ＷＳ等の情報処理機器であり、ターゲット装置にデバッグ用のコマンドを入力可能な情報処理機器である。
【００１８】
また、プロセッサ・コアとは、ＣＰＵ等のプロセッサにおいて、プログラムの命令を解釈しその命令を実行することができる演算処理部分であり、一般に、このプロセッサ・コアにターゲット装置制御用プログラムの記憶されたメモリやこのプログラムの実行を補助するメモリや、外部とのインターフェース機能部等を組み込むことで１つのプロセッサとして形成される。
〔発明２〕
更に、発明２の情報処理装置は、発明１の情報処理装置において、前記第１のプログラム用メモリのアドレス空間における現在実行中の前記ターゲット用プログラムの使用するアドレスと、予め設定された比較用アドレスと、を比較するアドレス比較手段と、
前記ホスト装置により、任意のアドレスを前記比較用アドレスとして設定可能な比較用アドレス設定手段と、を備えることを特徴としている。
【００１９】
つまり、アドレス比較手段によって、第１のプログラム用メモリのアドレス空間における現在実行中の前記ターゲット用プログラムの使用するアドレスと、予め設定された比較用アドレスと、を比較することが可能であり、比較用アドレス設定手段によって、前記ホスト装置により、任意のアドレスを前記比較用アドレスとして設定可能である。
従って、アドレスの比較結果に応じて、切り替え手段による切り替え処理を行う等が可能となる。
〔発明３〕
更に、発明３の情報処理装置は、発明１又は２の情報処理装置において、前記デバッグ用プログラムの実行時に、前記プロセッサ・コアの有するレジスタの内容及びプログラムカウンタの値を退避するための退避手段を備えることを特徴としている。
【００２０】
つまり、退避手段によって、前記デバッグ用プログラムの実行時に使用される、前記プロセッサ・コアの有するレジスタの内容及びプログラムカウンタの値を退避することが可能である。
従って、デバッグ用プログラムの実行時などに、実行中のターゲット用プログラムが使用している、レジスタの内容及びプログラムカウンタの値を退避することが可能となる。
【００２１】
ここで、退避とは、退避用の専用メモリに、プロセッサ・コアの有するレジスタの内容及びプログラムカウンタの値を一時記憶することである。
〔発明４〕
更に、発明４の情報処理装置は、発明３の情報処理装置において、前記第１のプログラム用メモリのアドレス空間において、前記プロセッサ・コアが前記ターゲット用プログラムの実行時に使用するメモリアドレスのデータを、前記データ送受信手段を介して前記ホスト装置に送信可能なアドレス送信手段を備えることを特徴としている。
【００２２】
つまり、アドレス送信手段によって、第１のプログラム用メモリのアドレス空間において、前記プロセッサ・コアが前記ターゲット用プログラムの実行時に使用するメモリアドレスのデータを、前記データ送受信手段を介して前記ホスト装置に送信可能である。
従って、ホスト装置は、ターゲット用プログラム実行時のアドレスを取得することが可能である。
〔発明５〕
更に、発明５の情報処理装置は、発明３又は発明４の情報処理装置において、前記プロセッサ・コアが前記ターゲット用プログラムの命令コードをフェッチしたか否かを監視するフェッチ監視手段を備えることを特徴としている。
【００２３】
つまり、フェッチ監視手段によって、プロセッサ・コアが前記ターゲット用プログラムの命令コードをフェッチしたか否かを監視することが可能である。
従って、１命令のフェッチに応じて、切り替え手段による切り替え処理を行うことが可能となる。
〔発明６〕
更に、発明６の情報処理装置は、発明１乃至発明５のいずれか１の情報処理装置において、前記ホスト装置から前記データ送受信手段を介して前記デバッグ用プログラムを取得するデバッグ用プログラム取得手段を備えることを特徴としている。
【００２４】
つまり、デバッグ用プログラム取得手段によって、前記ホスト装置から前記データ送受信手段を介して前記デバッグ用プログラムを取得することが可能である。
従って、デバッグ処理を行うときに、毎回ホスト装置からデバッグ用プログラムを取得するようにすることにより、常に最新のデバッグ用プログラムを使用してデバッグを行いやすく、また、デバッグ用プログラムの更新処理なども容易となる。
〔発明７〕
更に、発明７のプログラム中断方法は、発明３乃至発明５のいずれか１の情報処理装置において、前記ホスト装置によって前記プロセッサ・コアが実行中の前記ターゲット用プログラムを中断する方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記実行中のターゲット用プログラムを中断するための中断用プログラムを記憶し、
前記ホスト装置からの指示に応じて、
前記切り替え手段によって、前記プログラムの供給元を前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替え、
前記第２のプログラム用メモリに記憶された前記中断用プログラムを前記プロセッサ・コアに実行させることで、実行中の前記ターゲット用プログラムを中断することを特徴としている。
【００２５】
従って、プロセッサ・コアを改造して専用の割り込み線を設ける等することなく、簡易な構成によって、実行中のターゲット用プログラムの任意時点での中断を行うことが可能となる。
〔発明８〕
更に、発明８のプログラム中断方法は、発明３乃至発明５のいずれか１の情報処理装置において、前記ターゲット用プログラムが前記第１のプログラム用メモリのアドレス空間における任意のアドレスを使用したときに、前記プロセッサ・コアにおいて実行中の前記ターゲット用プログラムを中断する方法であって、
前記第２のプログラム用メモリに、前記実行中のターゲット用プログラムを中断するための中断用プログラムを記憶し、
前記比較用アドレス設定手段によって、前記ホスト装置により前記比較用アドレスを設定し、
前記ターゲット用プログラムの実行中に、前記アドレス比較手段の比較結果が、現在使用中のアドレスと前記比較用アドレスとが一致する結果となったときに、前記切り替え手段によって、前記プログラムの供給元を、前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替え、
前記第２のプログラム用メモリに記憶された前記中断用プログラムを前記プロセッサ・コアに実行させることで、実行中の前記ターゲット用プログラムを中断することを特徴としている。
【００２６】
従って、プロセッサ・コアを改造して専用の割り込み線を設ける等することなく、簡易な構成によって、実行中のターゲット用プログラムの任意アドレス使用時での中断を行うことが可能となる。
〔発明９〕
更に、発明９のプログラム中断方法は、発明７又は発明８の情報処理装置において、前記切り替え手段によって、前記プログラムの供給元を前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替えるときに、前記退避手段によって、前記ターゲット用プログラムの実行時に使用する、前記プロセッサ・コアのレジスタの内容及びプログラムカウンタの値を退避することを特徴としている。
【００２７】
従って、退避手段により、ターゲット用プログラムの中断時における、当該ターゲット用プログラムの使用しているプロセッサ・コアの有するレジスタの内容及びプログラムカウンタの値を退避するようにしたので、デバッグ用プログラムの使用により、プロセッサ・コアの有するレジスタの内容及びプログラムカウンタの値が破壊されたとしても、これらの内容を簡易に復帰させることが可能となる。
〔発明１０〕
更に、発明１０のプログラム中断方法は、発明３乃至発明５のいずれか１の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記プロセッサ・コアの有する前記レジスタの内容を前記ホスト装置に送信する方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記退避手段によって退避されたレジスタの内容を前記データ送受信手段を介して前記ホスト装置に送信するためのレジスタダンププログラムを記憶し、
請求項９記載のプログラム中断方法により、実行中の前記ターゲット用プログラムを中断し、
前記ホスト装置からの指示に応じて、
前記第２のプログラム用メモリに記憶された前記レジスタダンププログラムを前記プロセッサ・コアに実行させることで、前記プロセッサ・コアの有する前記レジスタの内容を前記ホスト装置に送信することを特徴としている。
【００２８】
従って、プロセッサ・コアを改造して専用の割り込み線を設ける等することなく、簡易な構成によって、ターゲット用プログラム実行時の任意時点又は任意アドレスに格納された命令実行時のプロセッサ・コアの有するレジスタの内容をホスト装置に送信することが可能である。
〔発明１１〕
更に、発明１１のレジスタ書換え方法は、発明３乃至発明５のいずれか１の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記プロセッサ・コアの有する前記レジスタの内容を前記ホスト装置によって書換える方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記レジスタの内容を書換えるためのレジスタ書換え用プログラムと、前記退避手段の退避内容に基づき、前記プロセッサ・コアの有する前記レジスタの内容及び前記プログラムカウンタの値を書換えるレストアプログラムと、を記憶し、
請求項９記載のプログラム中断方法により、実行中の前記ターゲット用プログラムを中断し、
前記ホスト装置からの指示に応じて、
前記第２のプログラム用メモリに記憶された前記レジスタ書換え用プログラムを前記プロセッサ・コアに実行させることで、前記ホスト装置からの指示に応じて前記退避手段によって退避されたレジスタの内容を書換える処理に移行し、
前記書換え処理終了後に、前記第２のプログラム用メモリに記憶された前記レストアプログラムを前記プロセッサ・コアに実行させることで、前記プロセッサ・コアの有する前記レジスタの内容を書換えることを特徴としている。
【００２９】
従って、プロセッサ・コアを改造して専用の割り込み線を設ける等することなく、簡易な構成によって、ターゲット用プログラム実行時の任意の時点又は任意のアドレスに格納された命令実行時のプロセッサ・コアのレジスタの内容を書換えることが可能である。
〔発明１２〕
更に、発明１２のメモリダンプ方法は、発明３乃至発明５のいずれか１の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記データ用メモリに記憶されたデータを前記ホスト装置に送信する方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記データ用メモリのデータを前記ホスト装置に送信するためのメモリダンププログラムを記憶し、
請求項９記載のプログラム中断方法により、実行中の前記ターゲット用プログラムを中断し、
前記ホスト装置からの指示に応じて、
前記第２のプログラム用メモリに記憶された前記メモリダンププログラムを前記プロセッサ・コアに実行させることで、前記ホスト装置からの指示に基づき、前記データ用メモリに記憶された所定のデータを前記データ送受信手段を介して前記ホスト装置に送信する処理を行うことを特徴としている。
【００３０】
従って、プロセッサ・コアを改造して専用の割り込み線を設ける等することなく、簡易な構成によって、データ用メモリに記憶された任意のデータをホスト装置に送信することが可能である。
〔発明１３〕
更に、発明１３のレジスタダンプ方法は、発明３乃至発明５のいずれか１の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記データ用メモリに記憶されたデータを前記ホスト装置によって書換える方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記データ用メモリに記憶されたデータを書換えるためのデータ書換え用プログラムを記憶し、
請求項９記載のプログラム中断方法により、実行中の前記ターゲット用プログラムを中断し、
前記ホスト装置からの指示に応じて、
前記第２のプログラム用メモリに記憶された前記データ書換え用プログラムを前記プロセッサ・コアに実行させることで、前記ホスト装置からの指示に基づき、前記データ用メモリに記憶された所定のデータを書換えることを特徴としている。
【００３１】
従って、プロセッサ・コアを改造して専用の割り込み線を設ける等することなく、簡易な構成によって、データ用メモリに記憶された任意のデータを書換えることが可能である。
〔発明１４〕
更に、発明１４のアドレストレース方法は、発明４又は発明５の情報処理装置において、前記ターゲット用プログラムの実行時に使用される前記第１のプログラム用メモリのアドレスを前記ホスト装置に送信する方法であって、
前記ホスト装置からの指示に応じて、
前記ターゲット用プログラムの実行時に、前記アドレス送信手段によって、前記プロセッサ・コアが前記ターゲット用プログラムの実行時に使用するメモリアドレスのデータを、前記データ送受信手段を介して前記ホスト装置に送信することを特徴としている。
【００３２】
従って、ターゲット用プログラム実行時のメモリアドレスのデータをホスト装置に送信することが可能である。
〔発明１５〕
更に、発明１５のアドレストレース方法は、発明１４のアドレストレース方法において、前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記プロセッサ・コアにＮＯＰ命令を実行させるためのＮＯＰプログラムと、前記退避手段の退避内容に基づき、前記プロセッサ・コアの有する前記レジスタの内容及び前記プログラムカウンタの値を書換えるレストアプログラムと、を記憶し、
前記第１のプログラム用メモリのアドレスに記憶された前記ターゲット用プログラムの命令が順番に実行される場合は、前記アドレス送信手段によって、前記ターゲット用プログラムの順次実行を示すデータを前記データ送受信手段を介して前記ホスト装置に送信する第１の処理手順と、
前記ターゲット用プログラムの実行中にジャンプ命令が発生したときに、前記退避手段によって、前記プロセッサ・コアの有する前記レジスタの内容及び前記プログラムカウンタの値を退避する第２の処理手順と、
前記ジャンプ命令の実行前に前記切り替え手段によって、前記プログラムの供給元を、前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替える第３の処理手順と、
前記第２のプログラム用メモリが前記切り替え手段によってプログラムの供給元となったときに、前記アドレス送信手段が前記ジャンプ命令によるジャンプ先のアドレスデータを前記ホスト装置に送信する処理を完了するまで、前記第２のプログラム用メモリに記憶された前記ＮＯＰプログラムを前記プロセッサ・コアに実行させる第４の処理手順と、
前記ジャンプ先のアドレスデータの送信処理が完了したときに、前記プロセッサ・コアに前記レストアプログラムを実行させる第５の処理手順と、
当該レストアプログラムの実行後に、前記切り替え手段によって、前記プログラムの供給元を、前記第２のプログラム用メモリから前記第１のプログラム用メモリに切り替えて、前記プロセッサ・コアに前記ジャンプ命令を実行させる第６の処理手順と、
前記ジャンプ命令によるジャンプ先の次のアドレスから前記アドレス送信手段によるアドレスの送信処理を再開する第７の処理手順と、を備え、
前記第１〜第７の処理手順を繰り返し行うことで、前記ターゲット用プログラム実行時における前記第１のプログラム用メモリのアドレスを、前記ターゲット用プログラムの命令実行順に前記ホスト装置に送信することを特徴としている。
【００３３】
従って、順番に命令が実行される場合はそのことを示すデータを送信し、ジャンプ命令が発生した場合はプロセッサ・コアにＮＯＰ命令を実行させることで、アドレス送信手段によるアドレスデータの送信速度（メモリ速度）とターゲット用プログラムの実行速度とを合わせるようにしたので、プロセッサ・コア等の改造をすることなく、アドレスデータ送信時に使用するメモリのオーバーフロー等による送信遅延を防ぐことが可能である。
〔発明１６〕
さらに、発明１６のプログラムのステップ実行方法は、発明５の情報処理装置において、前記ホスト装置によって前記プロセッサ・コアに前記ターゲット用プログラムを１命令ずつ順番に実行させるための方法であって、
前記第２のプログラム用メモリに、前記デバッグ用プログラムとして、前記退避手段の記憶内容に基づき前記プロセッサ・コアの前記レジスタの内容及び前記プログラムカウンタの値を書換えるレストアプログラムを記憶し、
前記ホスト装置からの指示に応じて、
前記ターゲット用プログラムの実行を開始し、前記フェッチ監視手段の監視結果に基づき、１命令のフェッチ後において、当該フェッチした命令の実行後で且つ次命令のフェッチ前に、前記切り替え手段によって前記プログラムの供給元を、前記第１のプログラム用メモリから前記第２のプログラム用メモリに切り替える第１の処理手順と、
前記退避手段によって、前記フェッチした命令の実行時に使用される、前記プロセッサ・コアの有する前記レジスタの内容及び前記プログラムカウンタの値を退避する第２の処理手順と、
前記退避手段によって退避された前記プログラムカウンタの値を前記フェッチされた命令の次の命令を前記プロセッサ・コアに実行させる値に書換える第３の処理手順と、
前記第２のプログラム用メモリに記憶された前記レストアプログラムを前記プロセッサ・コアに実行させる第４の処理手順と、
当該レストアプログラムの実行後に、前記切り替え手段によって、前記プロセッサ・コアへのプログラムの供給元を、前記第２のプログラム用メモリから前記第１のプログラム用メモリに切り替える第５の処理手順と、を備え、
前記第１〜第５の処理手順を繰り返し行うことで、前記コアプログラムに前記ターゲット用プログラムを１命令ずつ順番に実行させることを特徴としている。
【００３４】
従って、プロセッサ・コアを改造して専用の割り込み線を設ける等することなく、簡易な構成で、ターゲット用プログラムのステップ実行を行うことが可能となる。
【発明を実施するための最良の形態】
【００３５】
以下、本発明の実施の形態を図面に基づいて説明する。図１〜図１５は、本発明に係る情報処理装置を適用したデバッグシステムの実施の形態を示す図である。
まず、本発明に係るデバッグシステムの構成を図１に基づいて説明する。図１は、本発明に係るデバッグシステム１の構成を示すブロック図である。
デバッグシステム１は、図１に示すように、ターゲット装置２と、ホスト装置３と、シリアル通信ケーブル４と、を含んだ構成となっている。
【００３６】
ターゲット装置２は、情報処理装置２０を含んでおり、当該情報処理装置２０によってターゲット用プログラムを実行することで、このプログラムの制御により動作する装置である。なお、情報処理装置２０の詳細な構成は後述する。
ホスト装置３は、上記したターゲット用プログラムをデバッグするための指示データを、上記した情報処理装置２０に送信するためのＩ／Ｆプログラムを備えており、更に、情報処理装置２０からの応答データを表示するための表示機能も備えたものである。例えば、ＰＣとディスプレイ装置とにより構成されるものである。
【００３７】
シリアル通信ケーブル４は、ホスト装置３と情報処理装置２０との間のデータ通信を行うために、両者を接続するためのケーブルである。ここで、ホスト装置３と情報処理装置２０とはこのケーブルを介してシリアルデータ通信を行う機能を有している。
更に、図２に基づき、情報処理装置２０の詳細な構成を説明する。図２は、情報処理装置２０の詳細構成を示すブロック図である。
【００３８】
図２に示すように、情報処理装置２０は、ＣＰＵコア２０ａと、マルチプレクサ２０ｂと、プログラムＲＯＭ２０ｃと、アドレスコンパレータ２０ｄと、エミュレートコードＲＯＭ（以下、ＥＣＲＯＭと称す）２０ｅと、エミュレートコードＲＡＭ（以下、ＥＣＲＡＭと称す）２０ｆと、エミュレータＩ／Ｆレジスタ２０ｇと、アドレストレースＲＡＭ２０ｈと、コンパクタ２０ｉと、データメモリ２０ｊと、シリアル通信Ｉ／Ｆ部２０ｋと、を含んだ構成となっている。
【００３９】
ＣＰＵコア２０ａは、命令発行器や演算器などを組み合わせた構造を有し、プログラムＲＯＭ２０ｃ、ＥＣＲＯＭ２０ｅ及びＥＣＲＡＭ２０ｆの有するプログラムを解釈して実行させることが可能な装置である。一般のＣＰＵコアと同様に、プログラムを実行するためのレジスタやＰＣカウンタ等を備えている。
マルチプレクサ２０ｂは、アドレスコンパレータ２０ｄからの指示に応じて、ＣＰＵコア２０ａにプログラムを供給するメモリを、プログラムＲＯＭ２０ｃ、ＥＣＲＯＭ２０ｅ及びＥＣＲＡＭ２０ｆのうちいずれか１つに切り替える機能を備えたものである。
【００４０】
プログラムＲＯＭ２０ｃは、デバッグ対象であるターゲット用プログラムの記憶されたメモリであり、ＣＰＵコア２０ａにターゲット用プログラムを供給する。
アドレスコンパレータ２０ｄは、ＣＰＵコア２０ａが実行する命令のアドレスと、自己に設定されたアドレスと、を比較する機能を有したものである。更に、本実施の形態においては、マルチプレクサ２０ｂ、アドレストレースＲＡＭ２０ｈ、エミュレータＩ／Ｆレジスタ２０ｇ等のデバッグ処理に関連する各構成要素を制御する機能も有している。なお更に、ＣＰＵコア２０ａによる命令のフェッチを監視する機能も有している。
【００４１】
ＥＣＲＯＭ２０ｅは、デバッグ処理の初期設定時に、ホスト装置３からシリアル通信Ｉ／Ｆ部２０ｋを介してデバッグ用プログラムを取得するためのプログラムが記憶されたメモリである。
ＥＣＲＡＭ２０ｆは、ＥＣＲＯＭ２０ｅの取得プログラムによって取得した、デバッグ用プログラムを記憶するためのメモリである。ここで、デバッグ用プログラムには、後述する各種プログラムがホスト装置３からダウンロードされ記憶される。
【００４２】
エミュレータＩ／Ｆレジスタ２０ｇは、ターゲット用プログラム実行時の、ＣＰＵコアの有するレジスタの内容及びＰＣカウンタの値を、デバッグ時に一時記憶して退避させるためのメモリで、レジスタ退避領域及びＰＣカウンタ退避領域のそれぞれ専用の記憶領域を有している。
アドレストレースＲＡＭ２０ｈは、ＣＰＵコア２０ａが実行する命令の格納されたアドレスを、コンパクタ２０ｉ及びシリアル通信Ｉ／Ｆ部２０ｋを介してホスト装置３に送信するためのバッファメモリである。
【００４３】
コンパクタ２０ｉは、アドレストレースＲＡＭから送られてくるアドレスデータを圧縮してデータ量を減らすためのデータ圧縮機能を備えたものである。
データメモリ２０ｊは、ターゲット用プログラムの実行に係るデータを記憶するメモリであり、本実施の形態においては、メモリアドレス空間及びＩ／Ｏアドレス空間の２種類のアドレス空間を有しており、ＣＰＵコア２０ａは、Ｉ／Ｏアドレス空間を介することで、外部周辺機器とアクセスすることが可能となっている。
【００４４】
シリアル通信Ｉ／Ｆ部２０ｋは、上記したシリアル通信ケーブル４を介して、ホスト装置３から送られてくるデータを取得したりホスト装置３にデータを送信したりするための、データのシリアル送受信機能を備えたものである。
更に、デバッグシステム１の具体的な動作を説明する。
まず、ホスト装置３の電源を投入し、更にデバッグ用のＩ／Ｆプログラムを実行する。次に、ターゲット装置２の電源を投入する。これにより、シリアル通信Ｉ／Ｆ部２０ｋに設けられたエミュレータイネーブルＰＡＤを介して、ホスト装置３がターゲット装置２（正確には情報処理装置２０）に接続されていることを示す信号がアドレスコンパレータ２０ｄに入力される。ここで、ターゲット装置２の電源を投入したときに、ホスト装置３が接続されていない場合は、接続されていないことを示す信号がアドレスコンパレータ２０ｄに入力され、ターゲット装置２は、ＣＰＵコア２０ａによりターゲット用プログラムを実行して通常の動作を行う。
【００４５】
一方、上記したようにターゲット装置２に、ホスト装置３が接続されているときは、アドレスコンパレータ２０ｄは、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元をＥＣＲＯＭ２０ｅに切り替える。ここで、本実施の形態において、ターゲット装置２の電源投入時のＣＰＵコア２０ａへのプログラムの供給元は、デフォルトでプログラムＲＯＭ２０ｃになっていることとする。
【００４６】
従って、ＣＰＵコア２０ａには、ＥＣＲＯＭ２０ｅから、デバッグ用プログラムをＥＣＲＡＭ２０ｆにダウンロードするためのプログラムが供給される。そして、ＣＰＵコア２０ａに、このダウンロードプログラムを実行させることにより、ホスト装置３に、デバッグ用プログラムの取得要求がシリアル通信Ｉ／Ｆ部２０ｋ及びシリアル通信ケーブル４を介して送信される。
【００４７】
この取得要求を受けたホスト装置３は、自己の有するデバッグ用プログラムを、シリアル通信ケーブル４及びシリアル通信Ｉ／Ｆ部２０ｋを介して情報処理装置２０に送信する。情報処理装置２０は、シリアル通信Ｉ／Ｆ部２０ｋを介して受信したデバッグ用プログラムをＥＣＲＡＭ２０ｆに記憶する。ここで、本実施の形態においては、このデバッグ用プログラムのダウンロード時に、アドレスコンパレータ２０ｄへのブレークアドレスも一緒にホスト装置３からダウンロードされる。このブレークアドレスは、シリアル通信Ｉ／Ｆ部２０ｋを介してアドレスコンパレータ２０ｄに送られ設定される。ブレークアドレス設定後は、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元をＥＣＲＯＭ２０ｅからプログラムＲＯＭ２０ｃに切り替え、ＣＰＵコア２０ａにターゲット用プログラムを実行させ通常動作へ移行する。
【００４８】
更に、ターゲット装置２において、ターゲット用プログラムが実行され通常動作が開始されると、アドレスコンパレータ２０ｄは、ＣＰＵコア２０ａによって実行される命令のアドレスを監視し、これと、上記設定されたブレークアドレスと、を比較する処理を行う。もし、実行される命令のアドレスとブレークアドレスとが一致したときは、アドレスコンパレータ２０ｄは、次の命令が実行される前に、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元をＥＣＲＡＭ２０ｆに切り替え、且つ、ブレーク用プログラムを実行する。このとき、アドレスコンパレータ２０ｄは、切り替え時におけるＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域及びプログラムカウンタ退避領域にそれぞれ記憶する処理を行う。
【００４９】
また、本実施の形態においては、ホスト装置３から情報処理装置２に中断命令を与えることで、任意の時点で、実行中のターゲット用プログラムを中断することが可能である。つまり、情報処理装置２は、アドレスコンパレータ２０ｄによって、ホスト装置３からシリアル通信ケーブル４及びシリアル通信Ｉ／Ｆ部２０ｋを介して中断命令を受信すると、次の命令が実行される前に、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元をＥＣＲＡＭ２０ｆに切り替え、且つ、ブレーク用プログラムを実行する。このとき、アドレスコンパレータ２０ｄは、切り替え時におけるＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域及びプログラムカウンタ退避領域にそれぞれ記憶する処理を行う。
【００５０】
更に、ＣＰＵコア２０ａによって、ブレーク用プログラムが実行されると、実行中のターゲット用プログラムは中断した状態と等価となり、各種デバッグ用プログラムの実行が可能となる。
本実施の形態において、デバッグ用プログラムの実行は、ホスト装置３から情報処理装置２に各種デバッグ用プログラムの実行コマンドを与えることにより行われ、これにより、以下に示す（１）〜（８）のデバッグ処理を行うことが可能である。
（１）レジスタダンプ：ターゲット用プログラムの中断時点におけるＣＰＵコア２０ａのレジスタの内容をホスト装置３に送信する。ホスト装置３側では、取得したレジスタの内容をディスプレイ装置に表示する。
（２）レジスタ書換え：ターゲット用プログラムの中断時点におけるＣＰＵコア２０ａのレジスタの内容を書換える。
（３）メモリダンプ：データメモリに記憶された、指定Ｉ／Ｏアドレス空間のデータをホスト装置３に送信する。ホスト装置３側では、取得したデータをディスプレイ装置に表示する。
（４）データメモリ２０ｊの書換え：データメモリに記憶された指定Ｉ／Ｏアドレス空間のデータを書換える。
（５）ブレークアドレスの設定：新たなブレークアドレスをアドレスコンパレータ２０ｄに設定。
（６）ＥＣＲＡＭ２０ｆの部分書換え：ＥＣＲＡＭ２０ｆのデバッグ用プログラムの一部書換え。
（７）レストア：ＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域及びプログラムカウンタ退避領域にそれぞれ記憶されたレジスタの内容及びプログラムカウンタの値に書換える。
（８）ステップ実行：ターゲット用プログラムを１命令ずつ順番に実行する。
【００５１】
更に、上記（１）〜（８）の各デバッグ処理の具体的な動作を説明する。
上記（１）のレジスタダンプは、ホスト装置３により、レジスタダンププログラムの実行命令コマンドを情報処理装置２０に送信することで行われる。情報処理装置２０は、アドレスコンパレータ２０ｄにより、レジスタダンププログラムの実行命令を取得すると、ＥＣＲＡＭ２０ｆからレジスタダンププログラムをＣＰＵコア２０ａに供給し、且つ、このプログラムを実行させる。これにより、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域に記憶されたレジスタの内容を読み出し、これをアドレスコンパレータ２０ｄ及びシリアル通信Ｉ／Ｆ部２０ｋを介してホスト装置３に送信する。ホスト装置３は、情報処理装置２０から送信されたレジスタの内容を取得すると、これをディスプレイ装置に表示する。
【００５２】
更に、上記（２）のレジスタ書換えは、ホスト装置３により、レジスタ書換えプログラムの実行命令コマンドを情報処理装置２０に送信することで行われる。情報処理装置２０は、アドレスコンパレータ２０ｄにより、レジスタ書換えプログラムの実行命令を取得すると、ＥＣＲＡＭ２０ｆからレジスタ書換えプログラムをＣＰＵコア２０ａに供給し、且つ、このプログラムを実行させる。これにより、ホスト装置３から書換え内容が取得されると、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域に記憶されたレジスタの内容をホスト装置３から取得した内容に書換える。この後に、上記した（７）のレストアを行うことにより、この書換えられた内容がＣＰＵコア２０ａのレジスタに書き込まれることになる。
【００５３】
更に、上記（３）のメモリダンプは、ホスト装置３により、メモリダンププログラムの実行命令コマンドを情報処理装置２０に送信することで行われる。情報処理装置２０は、アドレスコンパレータ２０ｄにより、メモリダンププログラムの実行命令を取得すると、ＥＣＲＡＭ２０ｆからメモリダンププログラムをＣＰＵコア２０ａに供給し、且つ、このプログラムを実行させる。これにより、ホスト装置３から指定された、データメモリ２０ｊのＩ／Ｏアドレス空間のアドレスのデータを読み出し、これをシリアル通信Ｉ／Ｆ部２０ｋを介してホスト装置３に送信する。ホスト装置３は、情報処理装置２０から送信されたデータを取得すると、これをディスプレイ装置に表示する。
【００５４】
更に、上記（４）のデータメモリ２０ｊの書換えは、ホスト装置３により、メモリ書換えプログラムの実行命令コマンドを情報処理装置２０に送信することで行われる。情報処理装置２０は、アドレスコンパレータ２０ｄにより、メモリ書換えプログラムの実行命令を取得すると、ＥＣＲＡＭ２０ｆからメモリ書換えプログラムをＣＰＵコア２０ａに供給し、且つ、このプログラムを実行させる。これにより、ホスト装置３から書換え内容及びそのアドレスが取得されると、データメモリ２０ｊのＩ／Ｏアドレス空間における指定アドレスのデータを、ホスト装置３から取得した内容に書換える。
【００５５】
更に、上記（５）のブレークアドレスの設定は、ホスト装置３により、ブレークアドレスの設定プログラムの実行命令コマンドを情報処理装置２０に送信することで行われる。情報処理装置２０は、アドレスコンパレータ２０ｄにより、ブレークアドレスの設定プログラムの実行命令を取得すると、ＥＣＲＡＭ２０ｆからブレークアドレスの設定プログラムをＣＰＵコア２０ａに供給し、且つ、このプログラムを実行させる。これにより、ホスト装置３から取得したブレークアドレスをアドレスコンパレータ２０ｄに設定する。
【００５６】
更に、上記（６）のＥＣＲＡＭ２０ｆの部分書換えは、ホスト装置３により、ＥＣＲＡＭ２０ｆの部分書換えプログラムの実行命令コマンドを情報処理装置２０に送信することで行われる。情報処理装置２０は、アドレスコンパレータ２０ｄにより、ＥＣＲＡＭ２０ｆの部分書換えプログラムの実行命令を取得すると、ＥＣＲＡＭ２０ｆからＥＣＲＡＭ２０ｆの部分書換えプログラムをＣＰＵコア２０ａに供給し、且つ、このプログラムを実行させる。これにより、ＥＣＲＡＭ２０ｆに記憶された任意のデバッグ用プログラムを、ホスト装置３から取得したプログラムに書換える。
【００５７】
更に、上記（７）のレストアは、ホスト装置３により、レストアプログラムの実行命令コマンドを情報処理装置２０に送信することで行われる。情報処理装置２０は、アドレスコンパレータ２０ｄにより、レストアプログラムの実行命令を取得すると、ＥＣＲＡＭ２０ｆからレストアプログラムをＣＰＵコア２０ａに供給し、且つ、このプログラムを実行させる。これにより、現在のＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域及びプログラムカウンタ退避領域にそれぞれ記憶されたレジスタの内容及びプログラムカウンタの値に書換える。
【００５８】
ここで、レストアプログラムの実行後に、アドレスコンパレータ２０ｄは、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、プログラムＲＯＭ２０ｃに切り替える処理を行う。このとき、レストアによるターゲット用プログラムの実行復帰直後に、またすぐにプログラムが中断しないように、アドレスコンパレータ２０ｄは、設定されたブレークアドレスに対するブレーク処理を無視し、ブレーク処理を行わないようになっている。
【００５９】
更に、上記（８）のステップ実行は、ホスト装置３により、ステップ実行プログラムの実行命令コマンドを情報処理装置２０に送信することで行われる。情報処理装置２０は、アドレスコンパレータ２０ｄにより、ステップ実行プログラムの実行命令を取得すると、ＥＣＲＡＭ２０ｆからステップ実行プログラムをＣＰＵコア２０ａに供給し、且つ、このプログラムを実行させる。
【００６０】
これにより、上記（７）のレストアプログラムが実行されると共に、マルチプレクサ２０ｂに切り替え指示が与えられ、ＣＰＵコア２０ａへのプログラムの供給元が、ＥＣＲＡＭ２０ｆからプログラムＲＯＭ２０ｃに切り替えられ、レストアプログラムによって書換えられたプログラムカウンタの値に基づき、ターゲット用プログラムが実行される。このとき、アドレスコンパレータ２０ｄは、ＣＰＵコア２０ａの命令フェッチを監視し、１命令をフェッチしてこれを実行した直後に、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、プログラムＲＯＭ２０ｃからＥＣＲＡＭ２０ｆに切り替える。このとき、切り替え時におけるＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域及びプログラムカウンタ退避領域にそれぞれ記憶する。
【００６１】
更に、エミュレータＩ／Ｆレジスタ２０ｇのプログラムカウンタ退避領域に記憶されたプログラムカウンタの値を１インクリメントし、更に、アドレスコンパレータ２０ｄに次に実行される命令の更に次の命令のアドレスをブレークアドレスとして設定する。そして、本実施の形態においては、この時点におけるＩ／Ｆレジスタ２０ｇのレジスタ退避領域に記憶されたレジスタの内容をホスト装置３に送信（レジスタダンプ）し、レストアプログラムを実行して、再び、ＣＰＵコア２０ａへのプログラムの供給元を、ＥＣＲＡＭ２０ｆからプログラムＲＯＭ２０ｃに切り替え、ターゲット用プログラムを実行する。ここで、前回フェッチされた命令実行時のプログラムカウンタの値を１インクリメントしているので、ＣＰＵコア２０ａにおいて前回フェッチされた命令（これを命令１と称す）の次の命令（これを命令２と称す）が実行されることになる。更に、アドレスコンパレータ２０ｄには、ブレークアドレスとして、命令２の次の命令（これを命令３と称す）のアドレスがブレークアドレスとして設定されているので、命令２の実行直後に、プログラムの供給元をＥＣＲＡＭ２０ｆに切り替え、上記同様の処理を行う。
【００６２】
これら一連の処理は、情報処理装置２０に中断命令を送信するまで繰り返し行われる。本実施の形態においては、このようにして、ターゲット用プログラムを１命令毎に実行し、実行後のレジスタの内容をホスト装置３に送信するターゲット用プログラムのステップ実行が行われる。
更に、本実施の形態においては、上記した（１）〜（８）のデバッグ処理の他に、以下の（９）に示すデバッグ処理も可能である。
（９）アドレストレース：ターゲット用プログラム実行中の各命令のアドレスを命令実行順にホスト装置３に送信する。
【００６３】
上記（９）のアドレストレース処理を具体的に説明すると、まず、上記（１）〜（８）と同様に、ホスト装置３により、アドレストレースの実行命令コマンドを情報処理装置２０に送信することで行われる。これにより、アドレスコンパレータ２０ｄは、ＣＰＵコア２０ａにより実行された命令のアドレスデータを、アドレストレースＲＡＭ２０ｈに供給し、且つ、アドレストレースＲＡＭ２０ｈ及びコンパクタ２０ｉに、シリアル通信Ｉ／Ｆ部２０ｋを介して、供給したアドレスデータをホスト装置３に送信させる処理を開始する。このとき、アドレスコンパレータ２０ｄは、ＣＰＵコア２０ａにフェッチされた命令がジャンプ命令か否かを監視すると共に、アドレストレースＲＡＭ２０ｈからあふれ信号を受信したか否かを監視する。
【００６４】
ここで、ジャンプ命令とは、通常は、アドレスの格納順番に実行される命令が、このジャンプ命令の発生により、例えば、現在の命令のアドレスから１００番地先のアドレスの命令に飛ぶ（ジャンプする）といったものである。
また、あふれ信号とは、アドレストレースＲＡＭ２０ｈに供給されるアドレスデータが、ホスト装置３に送信仕切れずにメモリ容量を超えて供給された場合に、アドレストレースＲＡＭ２０ｈからアドレスコンパレータ２０ｄに向けて送信される信号である。
【００６５】
アドレスコンパレータ２０ｄは、上記したジャンプ命令のフェッチ及びあふれ信号の受信のいずれが発生した場合にも、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、プログラムＲＯＭ２０ｃからＥＣＲＡＭ２０ｆに切り替える。このとき、切り替え時におけるＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域及びプログラムカウンタ退避領域にそれぞれ記憶する。
【００６６】
そして、ＥＣＲＡＭ２０ｆに記憶されたＮＯＰプログラムを、ＣＰＵコア２０ａに供給し、且つ、このプログラムを実行させる。ここで、ＮＯＰプログラムは、ＣＰＵコア２０ａに何もさせずに１クロック費やさせる命令を実行させるものである。
アドレスコンパレータ２０ｄは、このＮＯＰ命令が実行されている間に、ジャンプ命令の場合は、アドレストレースＲＡＭ２０ｈのメモリ内にある全アドレスデータ及びジャンプ先のアドレスを、アドレストレースＲＡＭ２０ｈ、コンパクタ２０ｉ及びシリアル通信Ｉ／Ｆ部２０ｋを介して、ホスト装置３に送信する。
【００６７】
一方、あふれ信号を受信した場合は、アドレストレースＲＡＭ２０ｈ及びコンパクタ２０ｉに、メモリ内のアドレスを、シリアル通信Ｉ／Ｆ部２０ｋを介して、ホスト装置３に送信させる。
そして、ジャンプ先のアドレスの送信処理、又は、メモリ内の全アドレスデータの送信処理が終わると、終了信号をアドレスコンパレータ２０ｄに送信する。
【００６８】
アドレスコンパレータ２０ｄは、終了信号を受信すると、レストアプログラムを実行し、ＣＰＵ２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇに記憶された内容に書換え、更に、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、ＥＣＲＡＭ２０ｆからプログラムＲＯＭ２０ｃに切り替え、ターゲット用プログラムを実行する。
【００６９】
これと同時に、アドレスコンパレータ２０ｄは、アドレストレースＲＡＭ２０ｈへの実行命令のアドレスデータの供給を再開する。
以上のように、ジャンプ命令の発生やアドレストレースＲＡＭ２０ｈのメモリあふれが発生した場合には、アドレストレースＲＡＭ２０ｈ内のアドレスが全てホスト装置３に送信されるまで、ＣＰＵコア２０ａにＮＯＰプログラムを実行させる。これにより、アドレストレースＲＡＭ２０ｈにおけるアドレスデータの送信速度と、ターゲット用プログラムの実行速度と、を合わせることが可能である。
【００７０】
更に、図３に基づき、情報処理装置２の初期設定時の動作処理の流れを説明する。図３は、情報処理装置２の初期設定時の動作処理を示すフローチャートである。
図３に示すように、まずステップＳ１００に移行し、情報処理装置２０の電源を投入するか、又は、リセットをしてステップＳ１０２に移行する。
ステップＳ１０２では、アドレスコンパレータ２０ｄによって、エミュレータイネーブルＰＡＤを介して入力される信号に基づき、ホスト装置３が接続されているか否かを判定し、接続されていると判定された場合(Yes)はステップＳ１０４に移行し、そうでない場合(No)はステップＳ１１８に移行する。
【００７１】
ステップＳ１０４に移行した場合は、アドレスコンパレータ２０ｄは、マルチプレクサ２０ｂに切り替え指示を与え、ＣＰＵコア２０ａへのプログラムの供給元を、プログラムＲＯＭ２０ｃからＥＣＲＯＭ２０ｅに切り替えてステップＳ１０６に移行する。
ステップＳ１０６では、アドレスコンパレータ２０ｄは、ＣＰＵコア２０ａに、ＥＣＲＯＭ２０ｅに記憶されたデバッグ用プログラムのダウンロードプログラムを供給し、且つ、このプログラムを実行させてステップＳ１０８に移行する。
【００７２】
ステップＳ１０８では、ダウンロードプログラムの実行により、ホスト装置３から、シリアル通信Ｉ／Ｆ部２０ｋを介して、デバッグ用プログラムのＥＣＲＡＭ２０ｆへのダウンロードを行いステップＳ１１０に移行する。
ステップＳ１１０では、ダウンロードプログラムの実行により、ホスト装置３から、アドレスコンパレータ２０ｄへのブレークアドレスのダウンロードを行いステップＳ１１２に移行する。
【００７３】
ステップＳ１１２では、アドレスコンパレータ２０ｄに、ダウンロードしたブレークアドレスを設定し、且つ、アドレスコンパレータ２０ｄの比較処理を有効（イネーブル）にしてステップＳ１１４に移行する。
ステップＳ１１４では、アドレスコンパレータ２０ｄによって、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、ＥＣＲＡＭ２０ｆからプログラムＲＯＭ２０ｃに切り替えステップＳ１１６に移行する。
【００７４】
ステップＳ１１６では、ＣＰＵコア２０ａに、ターゲット用プログラムを実行させて通常動作へと移行し初期設定処理を終了する。
一方、ステップＳ１０２において、ホスト装置３が接続されておらず、ステップＳ１１８に移行した場合は、ＣＰＵコア２０ａに、ターゲット用プログラムを実行させて通常動作へと移行し初期設定処理を終了する。
【００７５】
更に、図４に基づき、情報処理装置２０におけるアドレスブレーク処理の流れを説明する。図４は、情報処理装置２０におけるアドレスブレーク処理を示すフローチャートである。
図４に示すように、まずステップＳ２００に移行し、アドレスコンパレータ２０ｄにおいて、ＣＰＵコア２０ａにおいて実行された命令のアドレスがブレークアドレスと同じである（ヒット）ことが検出されたか否かを判定し、検出されたと判定された場合(Yes)はステップＳ２０２に移行し、そうでない場合(No)はヒットが検出されるまで比較処理を続行する。
【００７６】
ステップＳ２０２に移行した場合は、アドレスコンパレータ２０ｄは、マルチプレクサ２０ｂに切り替え指示を与え、ＣＰＵコア２０ａへのプログラムの供給元を、プログラムＲＯＭ２０ｃからＥＣＲＡＭ２０ｆに切り替えてステップＳ２０４に移行する。
ステップＳ２０４では、アドレスコンパレータ２０ｄにおいて、上記切り替えが完了したか否かを判定し、切り替えが完了したと判定された場合(Yes)はステップＳ２０６に移行し、そうでない場合(No)は切り替えが完了するまで待機する。
【００７７】
ステップＳ２０６に移行した場合は、ＣＰＵコア２０ａにブレーク用プログラムを実行させて、デバッグ用プログラム実行モードへと移行し、ステップＳ２０８に移行する。
ステップＳ２０８では、アドレスコンパレータ２０ｄにおいて、レストアプログラムの実行によりデバッグが終了したか否かを判定し、終了したと判定された場合(Yes)はステップＳ２１０に移行し、そうでない場合(No)は終了するまでデバッグ用プログラム実行モードを続行する。
【００７８】
ステップＳ２１０に移行した場合は、アドレスコンパレータ２０ｄは、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、ＥＣＲＡＭ２０ｆからプログラムＲＯＭ２０ｃに切り替えステップＳ２１２に移行する。
ステップＳ２１２では、ＣＰＵコア２０ａに、ターゲット用プログラムを実行させて通常動作へと移行しアドレスブレーク処理を終了する。
【００７９】
更に、図５に基づき、情報処理装置２０における外部ブレーク処理の流れを説明する。図５は、情報処理装置２０における外部ブレーク処理を示すフローチャートである。
図５に示すように、まずステップＳ３００に移行し、アドレスコンパレータ２０ｄにおいて、ホスト装置３から中断命令を受信したか否かを判定し、受信したと判定された場合(Yes)はステップＳ３０２に移行し、そうでない場合(No)は取得するまで他の処理を続行する。
【００８０】
ステップＳ３０２に移行した場合は、アドレスコンパレータ２０ｄは、マルチプレクサ２０ｂに切り替え指示を与え、ＣＰＵコア２０ａへのプログラムの供給元を、プログラムＲＯＭ２０ｃからＥＣＲＡＭ２０ｆに切り替えてステップＳ３０４に移行する。
ステップＳ３０４では、アドレスコンパレータ２０ｄにおいて、上記切り替えが完了したか否かを判定し、切り替えが完了したと判定された場合(Yes)はステップＳ３０６に移行し、そうでない場合(No)は切り替えが完了するまで待機する。
【００８１】
ステップＳ３０６に移行した場合は、ＣＰＵコア２０ａにブレーク用プログラムを実行させて、デバッグ用プログラム実行モードへと移行し、ステップＳ３０８に移行する。
ステップＳ３０８では、アドレスコンパレータ２０ｄにおいて、レストアプログラムの実行によりデバッグが終了したか否かを判定し、終了したと判定された場合(Yes)はステップＳ３１０に移行し、そうでない場合(No)は終了するまでデバッグ用プログラム実行モードを続行する。
【００８２】
ステップＳ３１０に移行した場合は、アドレスコンパレータ２０ｄは、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、ＥＣＲＡＭ２０ｆからプログラムＲＯＭ２０ｃに切り替えステップＳ３１２に移行する。
ステップＳ３１２では、ＣＰＵコア２０ａに、ターゲット用プログラムを実行させて通常動作へと移行しアドレスブレーク処理を終了する。
【００８３】
更に、図６に基づき、デバッグ用プログラム実行モードへと移行時の情報処理装置２０の動作処理の流れを説明する。図６は、デバッグ用プログラム実行モードへと移行時の情報処理装置２０の動作処理を示すフローチャートである。
図６に示すように、まずステップＳ４００に移行し、アドレスコンパレータ２０ｄは、マルチプレクサ２０ｂによって、ＣＰＵコア２０ａへのプログラムの供給元を、プログラムＲＯＭ２０ｃからＥＣＲＡＭ２０ｆに切り替えた時点の、ＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域及びプログラムカウンタ退避領域にそれぞれ記憶してステップＳ４０２に移行する。
【００８４】
ステップＳ４０２では、アドレスコンパレータ２０ｄは、ホスト装置３からの各種コマンド入力を、シリアル通信Ｉ／Ｆ部２０ｋを介して取得し、ステップＳ４０４に移行する。
ステップＳ４０４では、アドレスコンパレータ２０ｄにおいて、取得したコマンドを解析し、取得したコマンドが、レジスタダンププログラムの実行命令コマンドである場合は、ステップＳ４０６に移行し、レジスタ書換えプログラムの実行命令コマンドである場合は、ステップＳ４０８に移行し、メモリダンププログラムの実行命令コマンドである場合は、ステップＳ４１０に移行し、データメモリ２０ｊの書換えプログラムの実行命令コマンドである場合は、ステップＳ４１２に移行し、ブレークアドレスの設定プログラムの実行命令コマンドである場合は、ステップＳ４１４に移行し、ＥＣＲＡＭ２０ｆの部分書換えプログラムの実行命令コマンドである場合は、ステップＳ４１６に移行し、レストアプログラムの実行命令コマンドである場合は、ステップＳ４１８に移行し、ステップ実行プログラムの実行命令コマンドである場合は、ステップＳ４２０に移行する。
【００８５】
更に、図７に基づき、レジスタダンププログラム実行時の情報処理装置２０の動作処理の流れを説明する。図７は、レジスタダンププログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
図７に示すように、まずステップＳ５００に移行し、ＣＰＵコア２０ａにレジスタダンププログラムを実行させてステップＳ５０２に移行する。
【００８６】
ステップＳ５０２では、ＣＰＵコア２０ａによって、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域に記憶されたレジスタの内容を読み出しステップＳ５０４に移行する。
ステップＳ５０４では、ＣＰＵコア２０ａによって、上記読み出されたレジスタの内容を、アドレスコンパレータ２０ｄを介してシリアル通信Ｉ／Ｆ部２０ｋに送信してステップＳ５０６に移行する。
【００８７】
ステップＳ５０６では、シリアル通信Ｉ／Ｆ部２０ｋにおいて、上記レジスタの内容をホスト装置３に送信して処理を終了する。
更に、図８に基づき、レジスタ書換えプログラム実行時の情報処理装置２０の動作処理の流れを説明する。図８は、レジスタ書換えプログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【００８８】
図８に示すように、まずステップＳ６００に移行し、ＣＰＵコア２０ａにレジスタ書換えプログラムを実行させてステップＳ６０２に移行する。
ステップＳ６０２では、ＣＰＵコア２０ａによって、ホスト装置３から、書換え内容を取得したか否かを判定し、取得したと判定された場合(Yes)はステップＳ６０４に移行し、そうでない場合(No)は取得するまで待機する。
【００８９】
ステップＳ６０４に移行した場合は、ＣＰＵコア２０ａからの指示によって、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域に記憶されたレジスタの内容を、上記取得した内容に書換えて処理を終了する。
更に、図９に基づき、メモリダンププログラム実行時の情報処理装置２０の動作処理の流れを説明する。図９は、メモリダンププログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【００９０】
図９に示すように、まずステップＳ７００に移行し、ＣＰＵコア２０ａにメモリダンププログラムを実行させてステップＳ７０２に移行する。
ステップＳ７０２では、ＣＰＵコア２０ａによって、ホスト装置３から、対象アドレスを取得したか否かを判定し、取得したと判定された場合(Yes)はステップＳ７０４に移行し、そうでない場合(No)は取得するまで待機する。
【００９１】
ステップＳ７０４に移行した場合は、ＣＰＵコア２０ａからの指示によって、データメモリ２０ｊにおけるＩ／Ｏアドレス空間の対象アドレスのデータを読み出してステップＳ７０６に移行する。
ステップＳ７０６では、ＣＰＵコア２０ａによって、読み出したデータをシリアル通信Ｉ／Ｆ部２０ｋに送信してステップＳ７０８に移行する。
【００９２】
ステップＳ７０８では、シリアル通信Ｉ／Ｆ部２０ｋにおいて、上記読み出したデータをホスト装置３に送信して処理を終了する。
更に、図１０に基づき、メモリ書換えプログラム実行時の情報処理装置２０の動作処理の流れを説明する。図１０は、メモリ書換えプログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【００９３】
図１０に示すように、まずステップＳ８００に移行し、ＣＰＵコア２０ａにメモリ書換えプログラムを実行させてステップＳ８０２に移行する。
ステップＳ８０２では、ＣＰＵコア２０ａによって、ホスト装置３から、書換え内容及び対象アドレスを取得したか否かを判定し、取得したと判定された場合(Yes)はステップＳ８０４に移行し、そうでない場合(No)は取得するまで待機する。
【００９４】
ステップＳ８０４に移行した場合は、ＣＰＵコア２０ａからの指示によって、データメモリ２０ｊのＩ／Ｏアドレス空間内の対象アドレスのデータを、上記取得した内容に書換えて処理を終了する。
更に、図１１に基づき、ブレークアドレス設定プログラム実行時の情報処理装置２０の動作処理の流れを説明する。図１１は、ブレークアドレス設定プログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【００９５】
図１１に示すように、まずステップＳ９００に移行し、ＣＰＵコア２０ａにブレークアドレス設定プログラムを実行させてステップＳ９０２に移行する。
ステップＳ９０２では、ＣＰＵコア２０ａによって、ホスト装置３から、新たなブレークアドレスを取得したか否かを判定し、取得したと判定された場合(Yes)はステップＳ９０４に移行し、そうでない場合(No)は取得するまで待機する。
【００９６】
ステップＳ９０４に移行した場合は、ＣＰＵ２０ａによって、取得したアドレスをアドレスコンパレータ２０ｄに送信し、アドレスコンパレータ２０ｄにおいて、上記取得したブレークアドレスを設定して処理を終了する。
更に、図１２に基づき、ＥＣＲＡＭ２０ｆの部分書換えプログラム実行時の情報処理装置２０の動作処理の流れを説明する。図１２は、ＥＣＲＡＭ２０ｆの部分書換えプログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【００９７】
図１２に示すように、まずステップＳ１０００に移行し、ＣＰＵコア２０ａにＥＣＲＡＭ２０ｆの部分書換えプログラムを実行させてステップＳ１００２に移行する。
ステップＳ１００２では、ＣＰＵコア２０ａによって、ホスト装置３から、書換え内容を取得したか否かを判定し、取得したと判定された場合(Yes)はステップＳ１００４に移行し、そうでない場合(No)は取得するまで待機する。
【００９８】
ステップＳ１００４に移行した場合は、ＣＰＵコア２０ａからの指示によって、ＥＣＲＡＭ２０ｆ内に記憶された対象のデバッグ用プログラムを、上記取得した内容に書換えて処理を終了する。
更に、図１３に基づき、レストアプログラム実行時の情報処理装置２０の動作処理の流れを説明する。図１３は、レストアプログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【００９９】
図１３に示すように、まずステップＳ１１００に移行し、ＣＰＵコア２０ａにレストアプログラムを実行させてステップＳ１１０２に移行する。
ステップＳ１１０２では、ＣＰＵコア２０ａの指示によって、現在のＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域及びプログラムカウンタ退避領域にそれぞれ記憶されたレジスタの内容及びプログラムカウンタの値に書換えて処理を終了する。
【０１００】
更に、図１４に基づき、ステップ実行プログラム実行時の情報処理装置２０の動作処理の流れを説明する。図１４は、ステップ実行プログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
図１４に示すように、まずステップＳ１２００に移行し、ＣＰＵコア２０ａにステップ実行プログラムを実行させてステップＳ１２０２に移行する。ここで、ステップ実行プログラムの実行により、レストアプログラムが実行されると共に、マルチプレクサ２０ｂに切り替え指示が与えられ、ＣＰＵコア２０ａへのプログラムの供給元が、ＥＣＲＡＭ２０ｆからプログラムＲＯＭ２０ｃに切り替えられ、レストアプログラムによって書換えられたプログラムカウンタの値に基づき、ターゲット用プログラムが実行される。
【０１０１】
ステップＳ１２０２では、ＣＰＵコア２０ａにおいて、アドレスコンパレータ２０ｄによって、ＣＰＵコア２０ａにおいて、命令がフェッチされたか否かを判定し、フェッチされたと判定された場合(Yes)はステップＳ１２０４に移行し、そうでない場合(No)はステップＳ１２１６に移行する。
ステップＳ１２０４に移行した場合は、ＣＰＵコア２０ａにおいて、上記フェッチした命令を実行しステップＳ１２０６に移行する。
【０１０２】
ステップＳ１２０６では、フェッチした命令の実行直後に、アドレスコンパレータ２０ｄにおいて、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、プログラムＲＯＭ２０ｃからＥＣＲＡＭ２０ｆに切り替えてステップＳ１２０８に移行する。
ステップＳ１２０８では、切り替え時におけるＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を、エミュレータＩ／Ｆレジスタ２０ｇのレジスタ退避領域及びプログラムカウンタ退避領域にそれぞれ記憶してステップＳ１２１０に移行する。
【０１０３】
ステップＳ１２１０では、エミュレータＩ／Ｆレジスタ２０ｇのプログラムカウンタ退避領域に記憶されたプログラムカウンタの値を１インクリメントしてステップＳ１２１２に移行する。
ステップＳ１２１２では、ＣＰＵコア２０ａにレジスタダンププログラムを実行させてステップＳ１２１４に移行する。
【０１０４】
ステップＳ１２１４では、ＣＰＵコア２０ａにレストアプログラムを実行させてステップＳ１２１６に移行する。
ステップＳ１２１６では、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、ＥＣＲＡＭ２０ｆからプログラムＲＯＭ２０ｃに切り替えてステップＳ１２１８に移行する。
【０１０５】
ステップＳ１２１８では、ＣＰＵコア２０ａに、レストアプログラムによって書換えられたプログラムカウンタの値からターゲット用プログラムを実行させてステップＳ１２０２に移行する。
一方、ステップＳ１２０２の判定処理において、命令がフェッチされずステップＳ１２２０に移行した場合は、アドレスコンパレータ２０ｄによって、ホスト装置３からのステップ実行の中断指示があったか否かを判定し、中断指示があったと判定された場合(Yes)はステップ実行を中断して処理を終了し、そうでない場合（No)はステップＳ１２０２に移行する。
【０１０６】
更に、図１５に基づき、アドレストレース実行時の情報処理装置２０の動作処理の流れを説明する。図１５は、アドレストレース実行時の情報処理装置２０の動作処理を示すフローチャートである。
図１５に示すように、まずステップＳ１３００に移行し、アドレスコンパレータ２０ｄにおいて、ホスト装置３からのコマンドに応じてアドレストレース処理を開始してステップＳ１３０２に移行する。
【０１０７】
ステップＳ１３０２では、アドレスコンパレータ２０ｄにおいて、アドレストレースＲＡＭ２０ｈからあふれ信号を受信したか否かを判定し、受信したと判定された場合(Yes)はステップＳ１３１０に移行し、そうでない場合(No)はステップＳ１３０４に移行する。
ステップＳ１３０４に移行した場合は、ＣＰＵコア２０ａによりターゲット用プログラムの１命令を実行してステップＳ１３０６に移行する。
【０１０８】
ステップＳ１３０６では、アドレスコンパレータ２０ｄによって、上記実行された１命令のアドレスをアドレストレースＲＡＭ２０ｈに送信してステップＳ１３０８に移行する。
ステップＳ１３０８では、アドレスコンパレータ２０ｄにおいて、次に実行する命令がジャンプ命令か否かを判定し、ジャンプ命令であると判定された場合(Yes)はステップＳ１３１０に移行し、そうでない場合(No)はステップＳ１３２０に移行する。
【０１０９】
ステップＳ１３１０に移行した場合は、アドレスコンパレータ２０ｄにおいて、マルチプレクサ２０ｂに切り替え指示を与えて、ＣＰＵコア２０ａへのプログラムの供給元を、プログラムＲＯＭ２０ｃからＥＣＲＡＭ２０ｆに切り替えてステップＳ１３１２に移行する。
ステップＳ１３１２では、ＣＰＵコア２０ａにＮＯＰプログラムを実行させてステップＳ１３１４に移行する。
【０１１０】
ステップＳ１３１４では、ジャンプ命令が発生した場合は、ジャンプ先のアドレスを、アドレストレースＲＡＭ２０ｈに供給し、当該アドレストレースＲＡＭ２０ｈのメモリ内の全アドレスを、コンパクタ２０ｉ及びシリアル通信Ｉ／Ｆ部２０ｋを介してホスト装置３に送信し、一方、あふれ信号を受信した場合は、アドレストレースＲＡＭ２０ｈ及びコンパクタ２０ｉに、メモリ内の全アドレスを、シリアル通信Ｉ／Ｆ部２０ｋを介してホスト装置３に送信させる処理を行いステップＳ１３１６に移行する。
【０１１１】
ステップＳ１３１６では、アドレスコンパレータ２０ｄにおいて、終了信号を受信したか否かを判定し、受信したと判定された場合(Yes)はステップＳ１３１８に移行し、そうでない場合(No)はステップＳ１３０８に移行する。
一方、ステップＳ１３０８において、次の命令がジャンプ命令ではなく、ステップＳ１３２０に移行した場合は、ＣＰＵコア２０ａによってその命令を実行してステップＳ１３２２に移行する。
【０１１２】
ステップＳ１３２２では、アドレスコンパレータ２０ｄによって、前回のアドレスをインクリメントしたものを、アドレストレースＲＡＭ２０ｈに供給してステップＳ１３０８に移行する。
以上、上記デバッグシステム１によれば、ホスト装置３からターゲット装置２への中断命令の送信又は予め設定したブレークアドレスのヒット検出によって、ＣＰＵコア２０ａへのプログラムの供給元をプログラムＲＯＭ２０ｃからエミュレータコードＲＡＭ２０ｆに切り替え且つエミュレータコードＲＡＭ２０ｆのブレーク用プログラムを実行することにより、ＣＰＵコア２０ａにおいて実行中のターゲット用プログラムの実行を中断することが可能である。
【０１１３】
また、ブレーク用プログラムの実行による中断中に、エミュレータコードＲＡＭ２０ｆに記憶されたデバッグ用プログラムにより、上記した（１）〜（８）の処理が可能である。
また、ホスト装置３からターゲット装置３にアドレストレースの実行指示を与えることにより、アドレスコンパレータ２０ｄ、アドレストレースＲＡＭ２０ｈ、コンパクタ２０ｉ及びシリアル通信Ｉ／Ｆ部２０ｋによって、実行アドレスのホスト装置３への送信処理が可能である。なお、送信処理時に、ジャンプ命令の発生又はアドレストレースＲＡＭ２０ｈのあふれ状態発生により、エミュレータコードＲＡＭ２０ｆのＮＯＰプログラムによって、ＣＰＵコア２０ａにＮＯＰ命令を実行させることにより、アドレスの送信遅延にＣＰＵコア２０ａの実行動作を合わせることが可能である。
【０１１４】
また、ブレーク用プログラムなどによるプログラムの中断時に、アドレスコンパレータ２０ｄ及びエミュレータＩ／Ｆレジスタ２０ｇによって、中断時のＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値を一時退避することが可能である。
ここで、図１に示すシリアル通信ケーブル４及び図２に示すシリアル通信Ｉ／Ｆ部２０ｋは、発明１、４、６、１０、１２、１４及び１５のいずれか１のデータ送受信手段に対応し、図２に示す、ＣＰＵコア２０ａは、発明１、３〜５及び７〜１６のいずれか１のプロセッサ・コアに対応し、マルチプレクサ２０ｂ及びアドレスコンパレータ２０ｄによるＣＰＵコア２０ａへのプログラム供給元のメモリの切り替え処理は、発明、１、７、９、１５及び１６のいずれか１の切り替え手段に対応し、プログラムＲＯＭ２０ｃは、発明１、２、４、７〜９及び１４〜１６のいずれか１の第１のプログラム用メモリに対応し、エミュレートコードＲＡＭ２０ｆは、発明１、７〜１３、１５及び１６のいずれか１の第２のプログラム用メモリに対応し、データメモリ２０ｊは、発明１、１２及び１３のいずれか１のデータ用メモリに対応し、アドレスコンパレータ２０ｄによるブレークアドレスと実行命令のアドレスとの比較処理は、発明２又は８のアドレス比較手段に対応し、ＣＰＵ２０ａによるブレークアドレス設定用プログラム実行によるアドレスコンパレータ２０ｄへのブレークアドレスの設定処理は、発明２又は８の比較用アドレス設定手段に対応し、アドレスコンパレータ２０ｄ及びエミュレータＩ／Ｆレジスタ２０ｇによるＣＰＵコア２０ａのレジスタの内容及びプログラムカウンタの値の退避処理は、発明３、９〜１２、１５及び１６のいずれか１の退避手段に対応し、アドレスコンパレータ２０ｄ、アドレストレースＲＡＭ２０ｈ、コンパクタ２０ｉ及びシリアル通信Ｉ／Ｆ部２０ｋによる実行命令のホスト装置３へのアドレス送信処理は、発明４、１４及び１５のいずれか１のアドレス送信手段に対応し、アドレスコンパレータ２０ｄによる命令フェッチの監視処理は、発明５又は１６のフェッチ監視手段に対応し、エミュレートコードＲＯＭ２０ｅのデバッグ用プログラムのダウンロードプログラムによるホスト装置３からのデバッグ用プログラムのダウンロード処理は、発明６のデバッグ用プログラム取得手段に対応する。
【０１１５】
なお、上記実施の形態においては、初期設定時に、デバッグ用プログラムのダウンロードプログラムによりホスト装置３からデバッグ用プログラムをダウンロードしてエミュレータコードＲＡＭ２０ｆに記憶することで、デバッグ用プログラムを用意するようにしているが、これに限らず、エミュレートコードＲＯＭ２０ｅなどに予めデバッグ用プログラムを用意するようにしても良い。
【０１１６】
また、上記実施の形態においては、アドレスコンパレータ２０ｄに、デバッグ処理用の各種機能を備えるような構成となっているが、これに限らず、別の構成としても良い。
【図面の簡単な説明】
【０１１７】
【図１】本発明に係るデバッグシステム１の構成を示すブロック図である。
【図２】情報処理装置２０の詳細構成を示すブロック図である。
【図３】情報処理装置２の初期設定時の動作処理を示すフローチャートである。
【図４】情報処理装置２０におけるアドレスブレーク処理を示すフローチャートである。
【図５】情報処理装置２０における外部ブレーク処理を示すフローチャートである。
【図６】デバッグ用プログラム実行モードへと移行時の情報処理装置２０の動作処理を示すフローチャートである。
【図７】レジスタダンププログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【図８】レジスタ書換えプログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【図９】メモリダンププログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【図１０】メモリ書換えプログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【図１１】ブレークアドレス設定プログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【図１２】ＥＣＲＡＭ２０ｆの部分書換えプログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【図１３】レストアプログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【図１４】ステップ実行プログラム実行時の情報処理装置２０の動作処理を示すフローチャートである。
【図１５】アドレストレース実行時の情報処理装置２０の動作処理を示すフローチャートである。
【符号の説明】
【０１１８】
１…デバッグシステム、２…ターゲット装置、３…ホスト装置、４…シリアル通信ケーブル、２０…情報処理装置、２０ａ…ＣＰＵコア、２０ｂ…マルチプレクサ、２０ｃ…プログラムＲＯＭ、２０ｄ…アドレスコンパレータ、２０ｅ…エミュレートコードＲＯＭ、２０ｆ…エミュレートコードＲＡＭ２０ｆ、２０ｇ…エミュレータＩ／Ｆレジスタ、２０ｈ…アドレストレースＲＡＭ、２０ｉ…コンパクタ、２０ｊ…データメモリ、２０ｋ…シリアル通信Ｉ／Ｆ部
【図１】
2005122350.tif 000003
【図２】
2005122350.tif 000004
【図３】
2005122350.tif 000005
【図４】
2005122350.tif 000006
【図５】
2005122350.tif 000007
【図６】
2005122350.tif 000008
【図７】
2005122350.tif 000009
【図８】
2005122350.tif 000010
【図９】
2005122350.tif 000011
【図１０】
2005122350.tif 000012
【図１１】
2005122350.tif 000013
【図１２】
2005122350.tif 000014
【図１３】
2005122350.tif 000015
【図１４】
2005122350.tif 000016
【図１５】
2005122350.tif 000017