(57)【要約】【課題】ターゲットシステム上のＩ／Ｏ機器を制御でき、デバッグするには十分なＲＡＭを持たない、またはデバッグ支援ハードウエアを持たないマイコンであっても、従来と同様のデバッグ環境を提供すること可能とする。【解決手段】ユーザプログラムはホストコンピュータ上のデバッガ内のＣＰＵシミュレータで実行され、実行される命令がＩ／Ｏ機器を制御する命令、または、ターゲットＣＰＵの割り込みフラグを変更する命令の場合、その命令はターゲットシステム上で実行される。また、ターゲットシステム上のＣＰＵが割り込みを検出した場合、その割り込み番号と割り込みフラグはＣＰＵシミュレータに通知され、ＣＰＵシミュレータは割り込み処理シーケンスを開始することが可能となる。【選択図】図１
2005353020.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットシステムをホストコンピュータ上で模擬するシミュレーション方式において、前記ホストコンピュータにターゲットシステムを通信手段により接続し、被シミュレーションプログラムのシミュレーション中にＩ／Ｏ空間をアクセスする命令を検出した場合、前記検出したＩ／Ｏ空間をアクセスする命令を、前記通信手段を介して前記ターゲットシステム上で実行させることにより、前記ターゲットシステムを実際に動作させる、ことを特徴とするシミュレーション方式。
【請求項２】
ターゲットシステムが割り込み要求を受け付けた場合、前記割り込み要求の割り込み番号と割り込みフラグをホストコンピュータに通信手段を介して通知し、前記ホストコンピュータ上のシミュレータは通知された前記割り込み要求の割り込み番号と割り込みフラグにしたがって、前記ターゲットシステムの代わりに前記シミュレータが割り込み処理シーケンスを開始する機能を有する、請求項１のシミュレーション方式。
【発明の詳細な説明】
【技術分野】
【０００１】本発明は、プログラムのシミュレーション及びデバッグに係り、特に組み込み制御に用いられるシングルチップマイコンに好適に利用できるものである。
【背景技術】
【０００２】ソフトウエアの動作検証や不具合個所の修正作業に使用されるツールとして、デバッガが知られている。デバッガは、ユーザプログラムの指定された位置にブレークポイント（停止位置）を設定し、その位置でユーザプログラムを中断することができる。また、ユーザはその位置でのＣＰＵ（中央演算処理装置）のレジスタ値や、変数の内容などの確認を行うことができる。この作業を繰り返すことによって、ユーザはユーザプログラムの動作検証を行う。【０００３】デバッガにはターゲットシステムを必要としないシミュレーションデバッグ方式、ターゲットシステムとホストコンピュータが通信手段を介して接続し、ユーザプログラムをターゲットシステム上のメモリに書き込み、ホストコンピュータがターゲットシステムを制御しデバッグするリモートデバッグ方式が存在する。リモートデバッグ方式には、ユーザプログラムをＲＡＭ上に書き込みデバッグを行う方法と、ユーザプログラムをＲＯＭ上に書き込みデバッグを行う方法が存在する。【０００４】シミュレーションデバッグ方式では、Ｉ／Ｏ機器や割り込み処理を含むデバッグを行うためには、デバッグ対象となるＩ／Ｏ機器の読み書きデータファイルか、デバッグ対象となるＩ／Ｏ機器をシミュレートするプログラムを用意する必要がある。【０００５】また、ＲＡＭ上でデバッグを行うリモートデバッグ方式では、ユーザプログラムの停止方法は、停止位置にＣＰＵのトラップ命令を書き込むことで行われる。ユーザプログラムがトラップ命令を実行すると、制御がデバッガに移行し、デバッガはユーザに停止位置を表示する。任意の位置で停止を行うためには、デバッグ対象となるプログラムがターゲットシステム上のＲＡＭに書き込まれる必要がある。【０００６】そして、ＲＯＭ上でデバッグを行うリモートデバッグ方式では、ユーザプログラムの停止方法は、ＣＰＵが命令を実行中に指定された命令読み込みアドレスで割り込みが発生するデバッグ支援ハードウエアを使用して行われる。デバッグ支援ハードウエアが割り込みを発生すると、制御がデバッガに移り、デバッガはユーザに停止位置を表示する。ユーザプログラムはターゲットシステム上のＲＯＭに書き込まれる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】シミュレーションデバッグ方式では、Ｉ／Ｏ機器のアクセスや割り込み処理はシミュレートされるため、実際のＩ／Ｏ機器を制御する場合に比べ、完全な動作検証を行う事ができなかった。【０００８】ＲＡＭ上でデバッグを行うリモートデバッグ方式では、ユーザプログラムをＲＡＭに書き込む必要がある。しかしながら、昨今のシングルチップマイコンでは全ユーザプログラムを書き込めるだけのＲＡＭを内蔵しておらず、なおかつ、外部にＲＡＭを接続できないマイコンも存在する。これらのマイコンでは、ＲＡＭ上でのリモートデバッグ方式は適応できなかった。【０００９】ＲＯＭ上でデバッグを行うリモートデバッグ方式では、任意に設定できるブレークポイント個数はデバッグ支援ハードウエアに依存し、前記２種類のデバッグ方法に比べ、ブレークポイントの設定個数は極めて少ない。そして、ユーザプログラムが変更される度に、ユーザプログラムはターゲットシステム上のＲＯＭに書き込まれる。ＲＯＭへの書き込み時間はＲＡＭへの書き込み時間に比べ非常に長く、本方式は、デバッガとしての操作性には問題があった。【００１０】そこで、本発明は、ターゲットシステム上のＩ／Ｏ機器のアクセスや割り込み処理を可能とし、デバッグには十分なＲＡＭや、デバッグ支援ハードウエアを持たないマイコンであっても、従来のデバッガと同等なブレークポイント設定を可能とする、シミュレーション方式を提供する事を目的とする。
【課題を解決するための手段】
【００１１】上記課題を解決し目的を達成するために、本発明はホストコンピュータとターゲットシステムより構成される。前記ホストコンピュータに前記ターゲットシステムを通信手段により接続し、ユーザプログラムは前記ホストコンピュータ上のデバッガ内のシミュレータで実行される。前記シミュレータは前記ユーザプログラムがＩ／Ｏ空間をアクセスする命令を検出した場合、検出した命令を、前記ターゲットシステム上で実行し、前記ターゲットシステムを実際に動作させる。【００１２】前記ターゲットシステムが割り込み要求を受け付けた場合、前記割り込み要求の割り込み番号と割り込みフラグを前記ホストコンピュータに通信手段を介して通知し、前記シミュレータは通知された前記割り込み要求の割り込み番号と割り込みフラグにしたがって、前記ターゲットシステムの代わりに前記シミュレータが割り込み処理シーケンスを開始する。
【発明の効果】
【００１３】以上述べてきたように、本発明のシミュレーション方式では、ホストコンピュータ上でシミュレートされるユーザプログラムは、ターゲットシステム上のＩ／Ｏ機器を実際に動作させ、ターゲットシステムからの割り込みにも応答できる。従って、ターゲットシステム上のＣＰＵが十分なＲＡＭやデバッグ支援ハードウエアを持たず、従来のデバッグ方式では対応困難であったターゲットシステムに対しても従来と同等なデバッグ環境が実現可能となる。
【発明を実施するための最良の形態】
【００１４】次に図面を参照して、本発明の実施の形態を説明する。図１は、本発明の実施の形態に係るデバッガの実行環境を表す構成図である。図１に示すように、本発明は、ホストコンピュータ１０上のデバッガ１１と、インターフェース１９を通じて接続されたターゲットシステム２０から構成される。【００１５】デバッガ１１は、ターゲットシステム２０上のＣＰＵ２１の命令をシミュレートするＣＰＵシミュレータ１２、ＣＰＵシミュレータ１２が実行する命令がＩ／Ｏ空間をアクセスする命令であるか判定するアドレス判定１３、ホストコンピュータ１０上のＲＡＭを利用したＣＰＵシミュレータ１２用メモリの仮想メモリ１５、インターフェース１９を通じてターゲットシステム２０を制御するターゲット制御１７、Ｉ／Ｏ空間をアクセスする命令を保存するＩ／Ｏキュー１８から構成される。【００１６】ターゲットシステム２０は、対象ＣＰＵであるＣＰＵ２１、ＣＰＵ２１に接続されたメモリ２２、入出力機器のＩ／Ｏ機器２５から構成される。【００１７】デバッグ対象であるユーザプログラム１６はデバッガ１１開始時に仮想メモリ１５に書き込まれるため、ユーザが書き込み時間を意識する事はない。そして、ユーザプログラム１６はホストコンピュータ１０のＲＡＭ上に存在するため、任意の位置にトラップ命令を書き込み可能なため、任意の位置にブレークポイントを設定できる。【００１８】ＣＰＵシミュレータ１２はアドレス判定１３を通じて仮想メモリ１５に接続され、ＣＰＵシミュレータ１２は仮想メモリ１５より、ユーザプログラム１６を読み出す。読み出されたＣＰＵ命令は、割り込みフラグを変更する命令、Ｉ／Ｏ専用命令、メモリを読み書きする命令、これら以外の命令に区別される。これら以外の命令はＣＰＵシミュレータ１２上で実行される。そして、割り込みフラグを変更する命令とＩ／Ｏ専用命令はターゲット制御１７に送られる。メモリを読み書きする命令はアドレス判定１３に送られる。メモリを読み書きする命令は、メモリ読み出し命令、メモリ書き込み命令、メモリ読み出し後メモリに書き込む命令、メモリから読み出されたデータを演算しメモリに書き込む命令に分けられる。【００１９】アドレス判定１３は、ＣＰＵシミュレータ１２から送られるメモリを読み書きする命令に対して、そのアドレスがアドレス領域表１４のどの領域に属するか判定する。アドレス領域表１４は複数のアドレス領域情報から構成され、ユーザが定義したＲＯＭ、ＲＡＭ、Ｉ／Ｏ機器領域が登録される。アドレス領域情報は、領域開始アドレス、領域終了アドレス、読み出し可能を示す読み出し属性、書き込み可能を示す書き込み属性、Ｉ／Ｏ機器領域を示すＩ／Ｏ属性、この領域を読み出した場合のＣＰＵの基本実行時間に対する相対値であるサイクル数、この領域に書き込んだ場合のサイクル数から構成される。基本実行時間はＣＰＵに供給されるクロック周波数の逆数であり、クロック周波数はユーザによって設定される。そして、アドレス判定１３は、読み書きアドレスが、アドレス領域情報の領域開始アドレス以上、領域終了アドレス以下であった場合、この領域に属すると判定する。【００２０】メモリ読み書きアドレスが、アドレス判定１３によって、属する領域が存在しないと判定された場合、デバッガ１１はユーザプログラム１６の実行を中止し、ＣＰＵが異常動作を検出した場合に実行するＣＰＵ例外処理を開始することや、そのメモリ読み書きアドレスをユーザに通知することも可能である。また、属する領域が存在すると判定された場合、アドレス判定１３は、アドレス領域表１４の読み込み属性と書き込み属性を参照する。メモリ読み込み命令の場合、読み込み属性が有効であるか、メモリ書き込み命令の場合、書き込み属性が有効であるか、メモリ読み出し後書き込み命令とメモリ読み出し後データを演算しメモリに書き込む命令の場合、読み込み属性と書き込み属性が有効であるか確認する。もし、これらの属性が合致しない場合は、デバッガ１１はプログラムの実行を中止し、ＣＰＵ例外処理を開始することや、メモリ読み書きアドレスをユーザに通知することも可能である。そして、アドレス判定１３は、アドレス領域表１４のＩ／Ｏ属性を確認し、Ｉ／Ｏ属性が無効の場合、仮想メモリ１５に対して読み書きを行う。アドレス判定１３は、この読み書きに対するサイクル数を計算し、サイクル数をＣＰＵシミュレータ１２へ返す。そして、メモリ読み込み命令の場合、読み込みデータもＣＰＵシミュレータ１２へ返す。次に、Ｉ／Ｏ属性が有効であった場合、メモリ読み込み命令とメモリ書き込み命令はＩ／Ｏキュー１８に送られ、メモリ読み出し後書き込み命令とメモリ読み出し後データを演算しメモリに書き込む命令は、ターゲット制御１７に送られる。そして、各要求先より、応答が返信され、返信された情報はＣＰＵシミュレータ１２に返信される。【００２１】ＣＰＵシミュレータ１２に返信される実行結果には、読み出された値やフラグ値と読み書きに費やしたサイクル数が含まれる。実行結果に含まれる読み出された値やフラグの値は、ＣＰＵ命令指示に従って、ＣＰＵシミュレータ１２上のレジスタに書き戻される。ＣＰＵシミュレータ１２はＣＰＵ命令の実行サイクル数を計算する。また、読み書きサイクル数も、実行サイクル数の計算に加えられる。ＣＰＵシミュレータ１２上で実行される各命令の実行時間と実際のＣＰＵの実行時間とは異なる。そこで、ユーザが設定したクロック周波数と計算されたＣＰＵ命令の実行サイクル数より、ＣＰＵ命令の実行時間を計算する。そして、ホストコンピュータ１０上のユーザに設定されたＣＰＵシミュレータ１２のクロック周波数より高い周波数のタイマを用いて、ＣＰＵシミュレータ１２が実行に費やした時間を計測する。計測時間が、ＣＰＵ命令の実行時間に満たない場合、満たすまでＣＰＵシミュレータ１２は実行を停止する。この結果ＣＰＵシミュレータ１２上で実行される命令の実行時間は実際のＣＰＵの処理時間に近づけることができる。【００２２】Ｉ／Ｏキュー１８は、複数の書き込み命令を保存する機能、連続する複数の書き込み命令のアドレスが同一であった場合、そのアドレスを省略する機能、ターゲット制御１７の指示によって保存されている命令を実行する機能を有する。Ｉ／Ｏキュー１８が読み込み命令を受け取った場合、保存されている書き込み命令は読み込み命令と一緒にターゲット制御１７に送られる。そして、ターゲット制御１７より応答が返信され、返信された情報はアドレス判定１３に返信される。また、Ｉ／Ｏキュー１８は、複数の書き込み命令を保存する機能を禁止する機能も有する。【００２３】Ｉ／Ｏキュー１８は読み書きアドレスサイズと書き込みデータサイズを圧縮する機能を有する。圧縮方法は、過去に使用された読み込みまたは書き込みアドレスを保存するアドレス配列２６の配列参照番号を、読み書きアドレスの代わりに使用し、配列参照番号のサイズが読み書きアドレスのサイズより小さいことを利用して行われる。そして、アドレス配列２６が使用された順番を記録するアドレス参照履歴配列２７を用意する。図２にアドレス配列２６の構成図を、図３にアドレス参照履歴配列２７の構成図を示す。アドレス参照履歴配列２７の要素数はアドレス配列２６の要素数と同一とする。アドレス参照履歴配列２７の先頭要素の配列参照番号は最近使用されたアドレス配列２６の配列参照番号を表し、最終要素の配列参照番号は最も過去に使用されたアドレス配列２６の配列参照番号を表す。読み書きアドレスがアドレス配列２６に存在する場合、そのアドレス配列２６の参照番号が先頭に来るようにアドレス参照履歴配列２７内の順番を入れ替え、その配列参照番号を使用して、Ｉ／Ｏ領域のアクセスを行う。読み書きアドレスがアドレス配列２６内に存在しない場合、読み書きアドレスを使用して、Ｉ／Ｏ領域のアクセスを行う。そして、読み書きアドレスをアドレス配列２６に登録する。もし、全てのアドレス配列２６が使用されている場合、アドレス参照履歴配列２７より、最も過去に使用されたアドレス配列２６の要素番号を取得し、そこにアドレスを登録する。そして、そのアドレス配列２６の参照番号が先頭に来るようにアドレス参照履歴配列２７内の順番を入れ替える。ターゲットシステム２０側もＩ／Ｏキュー１８と同じ方法でアドレスの管理を行うため、受信したアドレス配列２６の参照番号から実際のアドレスを取得する事ができる。そして、インターフェース１９上にてエラーが発生した場合、Ｉ／Ｏキュー１８とターゲットシステム２０上のアドレス配列２６、アドレス参照履歴配列２７は共に初期化される。また、書き込み命令の書き込みデータに対しても同じ方法を用いて、圧縮が行われる。【００２４】ターゲット制御１７は、アドレス判定１３からの要求をターゲットシステム２０に実行させる機能とＩ／Ｏキュー１８からの要求をターゲットシステム２０に実行させる機能とＣＰＵシミュレータ１２からの要求を実行する機能とターゲットシステム２０からの応答を処理する機能を有する。ターゲット制御１７は、アドレス判定１３、ＣＰＵシミュレータ１２からの要求を受け付けた時、Ｉ／Ｏキュー１８に書き込み命令が保存されている場合、その書き込み要求を全て実行した後に、アドレス判定１３、ＣＰＵシミュレータ１２からの要求を実行する。【００２５】ターゲット制御１７の命令を処理するプログラムがＩ／Ｏモニタプログラム２３である。図４にＩ／Ｏモニタプログラム２３のフローチャートを示す。Ｉ／Ｏモニタプログラム２３は、割り込み処理を受け付けた回数を示す割り込み処理カウンタなどの初期化を行う。そして、割り込み処理カウンタが１以上の場合、割り込み番号と割り込みフラグをターゲット制御１７に通知する。また、割り込み処理カウンタが０の場合、ターゲット制御１７からの命令の受信を確認し、命令を受信した場合、その命令を実行する。実行完了後、Ｉ／Ｏモニタプログラム２３は、応答をターゲット制御１７に返信する。その後、割り込み処理カウンタの判定から処理を繰り返す。Ｉ／Ｏモニタプログラム２３から応答を受信したターゲット制御１７は、応答内容を要求元に返信する。【００２６】また、ターゲットシステム２０上のＣＰＵ２１が割り込み処理要求を受け付けた場合の動作について説明する。割り込み要求はターゲットシステム２０上の割り込み処理プログラム２４によって処理される。図５にフローチャートを示す。割り込み処理を受け付けたＣＰＵ２１は、ＣＰＵ２１のプログラムアドレス、割り込みフラグを含むステータスレジスタをメモリ２２に保存し、割り込み処理プログラム２４に制御を移す。割り込み処理プログラム２４は、割り込み番号と割り込みフラグを保存し、ＣＰＵ２１によってメモリ２２上に保存されている割り込みフラグを、割り込み処理受付後の割り込みフラグに変更し、割り込み処理カウンタに１を加算し、割り込み処理は終了する。割り込み処理カウンタはＩ／Ｏモニタプログラム２３によって１以上の場合、割り込み番号と割り込みフラグがインターフェース１９を通じてターゲット制御１７に通知される。ターゲット制御１７は割り込み番号と割り込みフラグをＣＰＵシミュレータ１２に通知し、ＣＰＵシミュレータ１２は、現在実行中のユーザプログラム１６を中断し、プログラムカウンタとステータスレジスタを保存し、ステータスレジスタ内の割り込みフラグを受信した割り込みフラグの内容に書き換え、割り込み番号から割り込み処理プログラムアドレスを取得し、そのプログラムアドレスに制御を移す。また、ＣＰＵシミュレータ１２は、割り込みフラグを変更する命令を検出した場合、その命令はターゲット制御１７に送られ、Ｉ／Ｏモニタプログラム２３がＣＰＵ２１の割り込みフラグを変更する。これらの動作によって、ＣＰＵシミュレータ１２とＣＰＵ２１の割り込みフラグは同一状態に保たれ、ＣＰＵ２１の割り込み処理要求が、あたかもＣＰＵシミュレータ１２上で受け付けたかのように振舞う。ただし、ユーザプログラム１６の開始以前はＣＰＵシミュレータ１２とＣＰＵ２１の割り込みフラグは同一とする。
【図面の簡単な説明】
【００２７】
【図１】本発明のデバッグ方法を説明する図である。
【図２】本発明のＩ／Ｏキューで使用されるアドレス配列を説明する図である。
【図３】本発明のＩ／Ｏキューで使用されるアドレス参照履歴配列を説明する図である。
【図４】本発明のＩ／Ｏモニタプログラムの主たる動作を説明するフローチャートである。
【図５】本発明のＩ／Ｏモニタプログラムの割り込み処理動作を説明するフローチャートである。
【符号の説明】
【００２８】１０  ホストコンピュータ
１１  本発明のデバッガ
１２  ＣＰＵシミュレータ
１３  アドレス判定
１４  アドレス領域表
１５  仮想メモリ
１６  ユーザプログラム
１７  ターゲット制御
１８  Ｉ／Ｏキュー
１９  インターフェース
２０  ターゲットシステム
２１  ＣＰＵ
２２  メモリ
２３  Ｉ／Ｏモニタプログラム
２４  割り込み処理プログラム
２５  Ｉ／Ｏ機器
２６  アドレス配列
２７  アドレス参照履歴配列
【図１】
2005353020.tif 000003
【図２】
2005353020.tif 000004
【図３】
2005353020.tif 000005
【図４】
2005353020.tif 000006
【図５】
2005353020.tif 000007