(57)【要約】【課題】デバッグの効率向上を図る。【解決手段】インサーキット・エミュレータのＣＰＵエバチップ１４０における手順違反検出部２００は、ＣＰＵ１５０のレジスタ群１５２および周辺エバチップ１７０のレジスタ群１７２に含まれる複数のレジスタに対して書込みの検出を行うと共に、検出したこれらのレジスタへの書込みの順番を監視し、該書込みの順番が予め規定された書込順に一致するか否かを検出する。表示装置１３３は、手順違反検出部２００により不一致が検出されたときに、ユーザに警告を行う。【選択図】図３
2009294743.tif 000002
【特許請求の範囲】
【請求項１】
複数のレジスタに対して、予め規定された値の書込みの検出を行うレジスタ書込検出部と、
該レジスタ書込検出部により検出された前記書込みの順番を監視し、該書込みの順番が前記複数のレジスタに対して予め規定された書込順に一致するか否かを検出する監視部とを備えることを特徴とするデバッグ装置。
【請求項２】
前記監視部により不一致が検出された際に、警告を行うユーザインタフェースをさらに備えることを特徴とする請求項１に記載のデバッグ装置。
【請求項３】
前記監視部により不一致が検出された際に、ユーザプログラムの実行を停止してブレークさせるブレーク制御部をさらに備えることを特徴とする請求項１または２に記載のデバッグ装置。
【請求項４】
トレース処理部と、
前記監視部により不一致が検出された際に、前記トレース処理部によるトレース処理を停止させるトレース制御部とをさらに備えることを特徴とする請求項１から３のいずれか１項に記載のデバッグ装置。
【請求項５】
ガバレッジ処理部と、
前記監視部により不一致が検出された際に、前記ガバレッジ処理部によるガバレッジ処理を停止させるガバレッジ制御部とをさらに備えることを特徴とする請求項１から４のいずれか１項に記載のデバッグ装置。
【請求項６】
エバリュエーションチップをさらに備えたインサーキット・エミュレータであり、
前記複数のレジスタは、前記エバリュエーションチップに含まれることを特徴とする請求項１から５のいずれか１項に記載のデバッグ装置。
【請求項７】
オン・チップデバッグ資源が内蔵されたターゲットデバイスであり、
前記複数のレジスタは、前記ターゲットデバイスに含まれることを特徴とする請求項１から５のいずれか１項に記載のデバッグ装置。
【請求項８】
複数のレジスタに対して、予め規定された値の書込みの検出を行い、
検出された前記書込みの順番を監視し、該書込みの順番が前記複数のレジスタに対して予め規定された書込順に一致するか否かを検出することを特徴とするデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグ技術、特に、エミュレータを用いてターゲットデバイスをデバッグする技術に関する。
【背景技術】
【０００２】
マイクロプロセッサなどのターゲットデバイス上で実行するユーザプログラムの開発時に、ユーザプログラムのデバッグが行われる。このデバッグは、ユーザプログラムを実行しているターゲットデバイスがターゲットシステム上でプログラム開発者が意図したとおりに動作するか否かの検証、および意図したとおりに動作しない場合にはその原因を突き止める作業である。デバッグに際してよく使用されるエミュレータとしては、インサーキット・エミュレータ（以下ＩＣＥという）とオンチップ・デバッグ・エミュレータ（以下ＯＣＤという）が知られている。
【０００３】
ＯＣＤの場合は、ターゲットデバイス自身にブレーク機能やトレース機能などを備えたデバッグ資源が内蔵されており、デバッグ時に、ターゲットシステムにターゲットデバイスを実装して、ターゲットデバイスのデバッグ資源を利用してターゲットデバイス上で実行するユーザプログラムの動作検証を行う。
【０００４】
ＩＣＥの場合、ＩＣＥを接続するためのソケットを有するターゲットシステムを使用し、デバッグ時にターゲットデバイスの代わりにＩＣＥをターゲットシステムに接続し、ＩＣＥに含まれる、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）機能をエミュレーションするＣＰＵエバリュエーションチップ（以下エバチップという）や周辺機能をエミュレーションする周辺エバチップなどで、ホスト装置例えばパーソナルコンピュータ上のデバッガからの命令に基づいて、ターゲットデバイス上で実行される開発対象であるユーザプログラムをＩＣＥで実行することにより、ターゲットデバイスの動作をエミュレーションして、ユーザプログラムを検証する。
【０００５】
デバッグに際して、ＯＣＤの場合には、ターゲットデバイスのレジスタを設定する必要があり、ＩＣＥの場合にはエバチップのレジスタを設定する必要がある。いずれの場合においても、レジスタを正しく設定することが重要である。
【０００６】
ターゲットデバイスのレジスタの中に、設定内容および設定手順が規定されたものがあり、デバッグ時には、規定に沿って、ターゲットデバイスのレジスタまたはエバチップのレジスタを設定しないと、デバッグを正常に行うことができない。
【０００７】
このような規定は、通常、開発マニュアル中に記述されており、それに従ってレジスタの設定を行うことは要求される。しかし、特に複雑なユーザプログラムになると、規定通りにレジスタを設定できていないことが生じやすく、操作者の努力のみで解決することが困難な場合がある。
【０００８】
特許文献１には、上記問題を解決するための開発支援技術が開示されている。この技術は、レジスタに書き込むべきデータを予め記憶しておき、デバッグ時において、書き込まれたデータと、当該レジスタに書き込むべきデータとを比較し、両方のデータが不一致する場合にはエミュレーション動作をブレークする技術が開示されている。
【特許文献１】特開平８−３２８９０３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
ところで、特許文献１に開示された技術は、個々のレジスタについて、設定内容に関する規定違反を検出できるが、複数のレジスタに亘った設定手順に関する規定違反を検出することができない。
【００１０】
その一方、ターゲットデバイスのレジスタの中に、設定内容が規定されたもの以外に、複数のレジスタに亘った設定手順が規定されたものもある。例えば、レジスタＡとレジスタＢについて、レジスタＡへ設定データを書き込んでレジスタＡの設定が完了した後ではないと、レジスタＢへ書き込んだ設定データによる設定が有効にならない場合がある。このような場合、レジスタＡとレジスタＢに対して、規定された設定手順に従って設定しないと、設定ができない、または設定できたとしてもデバイスが正常動作をしない、または動作不安定になるなどの問題がある。
【００１１】
厄介なのは、レジスタの設定手順が間違っても、直後のプログラム実行に影響が出るとは限らず、デバッグ作業は継続して行われることがある。最悪の場合、プログラムのモジュール毎の動作検証の終了後に、プログラム全体のスピードチューニングを行う段階になって初めて異常に気付くことが生じる。このような場合、原因を究明するために、設定を行う処理、設定条件の成立期間においてプログラムの実行内容をトレースする処理、プログラムの実行をブレークしてターゲットデバイスの状態を確認する処理を段階的に行う必要がある。そして、レジスタに正しい値が設定されたにも関わらず、ターゲットデバイスがしかるべき動作をしていないことを発見するに至ってはじめて、レジスタの設定手順に問題があるのではないかを疑い、改めてマニュアルを調べ、設定手順を確認することになる。
【００１２】
このようなことは、原因究明に時間がかかり、デバッグの効率、ひいてはユーザプログラムの開発効率を下げる要因である。
【課題を解決するための手段】
【００１３】
本発明の１つの態様は、デバッグ装置である。この装置は、レジスタ書込検出部と、監視部を備える。
レジスタ書込検出部は、複数のレジスタに対して、予め規定された値の書込みの検出を行い、監視部は、レジスタ書込検出部により検出された書込みの順番を監視し、該書込みの順番がこれらの複数のレジスタに対して予め規定された書込順に一致するか否かを検出する。
【００１４】
なお、上記態様の装置をシステムや方法、コンピュータにより上記装置を実現するためのプログラムとして置き換えて表現したものも、本発明の態様としては有効である。
【発明の効果】
【００１５】
本発明の技術によれば、デバッグの効率向上を図ることができる。
【発明を実施するための最良の形態】
【００１６】
図１は、本発明の実施の形態にかかるデバッグシステム１００を示す。デバッグシステム１００は、ホスト装置となるホスト・コンピュータ（以下ホストＰＣという）１１０と、インサーキット・エミュレータ（以下ＩＣＥという）１３０と、ターゲットシステム１９０を備え、ホストＰＣ１１０とＩＣＥ１３０は、通信ケーブル１２０により接続される。ＩＣＥ１３０とターゲットシステム１９０はそれぞれプローブ１８０とソケット１９２を有し、プローブ１８０の先端がソケット１９２に挿入されることによってＩＣＥ１３０とターゲットシステム１９０が接続される。
【００１７】
ホストＰＣ１１０には、デバッグ用のプログラムが実装されたデバッガ１１２を備える。
デバッガ１１２がＩＣＥ１３０にデバッグに関する命令をすると、ＩＣＥ１４０は、その命令に基づいて処理を行うと共に、処理結果をデバッガ１１２に返送する。
【００１８】
図２は、ＩＣＥ１３０を示す。ＩＣＥ１３０は、ホストインタフェース（以下ホストＩ／Ｆという）１３２と、表示装置１３３と、エミュレーションメモリ１３４と、トレースメモリ１３６と、ガバレッジメモリ１３８と、ＣＰＵエバチップ１４０と、周辺エバチップ１７０を備える。
【００１９】
ホストＩ／Ｆ１３２は、通信ケーブル１２０を介してホストＰＣ１１０と接続され、ＩＣＥ１３０とホストＰＣ１１０におけるデバッガ１１２間のデータの入出力を担う。
【００２０】
表示装置１３３は、ＣＰＵエバチップ１４０から後述する手順違反検出信号Ｔを受信すると、例えばＬＥＤランプの点灯や警告音などによりユーザに警告を行う警告部として機能する。
【００２１】
エミュレーションメモリ１３４は、ユーザプログラムの格納、外部メモリの代替え、エミュレータシステムプログラムの格納などを担う。
トレースメモリ１３６は、ユーザプログラムの実行内容を記録し、ガバレッジメモリ１３８は、ユーザプログラムがアクセスした番地などを記録する。
周辺エバチップ１７０は、ターゲットデバイスの周辺機能を担う。
【００２２】
ＣＰＵエバチップ１４０は、ターゲットデバイスのＣＰＵのエミュレーションすなわちユーザプログラムの実行と、ポートなどの周辺機能の一部と、トレースやガバレッジなどのデバッグ機能の制御などを行う。また、ＣＰＵエバチップ１４０は、周辺エバチップ１７０のレジスタにアクセスすることにより、周辺エバチップ１７０が担う周辺機能の制御も行う。図３を参照してＣＰＵエバチップ１４０の詳細を説明する。
【００２３】
図３に示すように、ＣＰＵエバチップ１４０は、ＣＰＵ１５０、ブレークコントローラ１５３、イベントコントローラ１５４、周辺Ｉ／Ｆコントローラ１５５、エミュレーションメモリコントローラ１５６、ガバレッジコントローラ１５７、トレースコントローラ１５８、ポート１５９、手順違反検出部２００を備え、これらの機能ブロックは、データバス１６２とアドレスバス１６４を介して接続される。
【００２４】
ＣＰＵ１５０は、レジスタ群１５２を有し、ユーザプログラムおよびエミュレータシステムプログラムを実行する。ＣＰＵ１５０は、プローブ１８０を介して、ターゲットデバイスに供されるべくユーザクロックやリセット信号などのターゲットＩ／Ｆ信号をターゲットシステム１９０から入力する。
【００２５】
イベントコントローラ１５４は、デバッガ１１２により指定されたイベントをモニタリングし、モニタリング対象となるイベントが発生したときに、その旨を当該機能ブロックに通知する。
ブレークコントローラ１５３は、イベントコントローラ１５４からのイベント通知に応じてＣＰＵ１５０に対してブレーク要求をする。
周辺Ｉ／Ｆコントローラ１５５は、ＣＰＵエバチップ１４０と周辺エバチップ１７０間の入出力を制御する。
【００２６】
エミュレーションメモリコントローラ１５６、ガバレッジコントローラ１５７は、エミュレーションメモリ１３４へのアクセス、ガバレッジメモリ１３８へのアクセスをそれぞれ制御する。
トレースコントローラ１５８は、イベントコントローラ１５４からのイベント通知に応じて、トレースメモリ１３６へのアクセスを制御する。
【００２７】
ポート１５９は、プローブ１８０を介してターゲットシステム１９０と接続され、ポート機能をエミュレーションする。
【００２８】
ＣＰＵエバチップ１４０において、手順違反検出部２００を除いた他の機能ブロックは、通常のＩＣＥに備えられるものであり、以下、手順違反検出部２００について詳細に説明する。
【００２９】
手順違反検出部２００は、ＣＰＵ１５０のレジスタ群１５２および周辺エバチップ１７０のレジスタ群１７２に含まれるレジスタに対して、設定値の書込みの順番が仕様通りの設定手順に違反するか否かの検出を行う。図４は、手順違反検出部２００を示す。なお、例として、手順違反検出部２００の監視対象のレジスタは、レジスタ１、レジスタ２、レジスタ３、・・・、レジスタ８の８つである。
【００３０】
手順違反検出部２００は、各々のレジスタへの規定値の書込み（ライトアクセス）を検出するレジスタライトアクセス検出部２１０と、監視部２５０を備える。レジスタライトアクセス検出部２１０は、それぞれのレジスタへの規定値の書込みを検出する検出部を備えており、図示のように、レジスタ１〜８に対して、レジスタ１ライトアクセス検出部２１１、レジスタ２ライトアクセス検出部２１２、・・・、レジスタ８ライトアクセス検出部２１８の８つの検出部がある。レジスタ１ライトアクセス検出部２１１は、レジスタ１への書込みを検出するとライトアクセス検出信号Ｓ１を監視部２５０に出力するように、各検出部は、当該レジスタへの書込みを検出すると、該レジスタのライトアクセス検出信号を出力する。
【００３１】
レジスタ１ライトアクセス検出部２１１〜２１８は、書込みの検出対象のレジスタが異なる点以外、同様の構成を有する。ここでレジスタ１ライトアクセス検出部２１１を例にしてレジスタライトアクセス検出部２１０に含まれる各検出部を説明する。
【００３２】
図５は、レジスタ１ライトアクセス検出部２１１を示す。レジスタ１ライトアクセス検出部２１１は、アドレス１格納レジスタ２２０、アドレス比較器２２２、データ１格納レジスタ２３０、データ比較器２３２、論理積回路２４０を備える。アドレス１格納レジスタ２２０とデータ１格納レジスタ２３０は、データバス１６２とアドレスバス１６４に接続され、アドレス比較器２２２は、アドレス１格納レジスタ２２０とアドレスバス１６４に接続され、データ比較器２３２は、データ１格納レジスタ２３０とデータバス１６２に接続される。論理積回路２４０は、アドレス比較器２２２の出力と、データ比較器２３２の出力と、ライトストローブに接続される。
【００３３】
アドレス１格納レジスタ２２０は、レジスタ１のアドレスを格納しており、データ１格納レジスタ２３０は、レジスタ１に設定すべきデータを格納している。
【００３４】
アドレス比較器２２２は、アドレスバス１６４上のアドレスと、アドレス１格納レジスタ２２０に格納されたアドレスとを比較し、一致する場合にはＨｉを出力する。
データ比較器２３２は、データバス１６２上のデータと、データ１格納レジスタ２３０に格納されたデータとを比較し、一致する場合にはＨｉを出力する。
【００３５】
論理積回路２４０は、アドレス比較器２２２の出力がＨｉであり、かつデータ比較器２３２の出力がＨｉであり、かつライトストローブもアクティブ（Ｈｉ）であることを条件に、レジスタ１に設定すべきデータが書き込まれたことを示すライトアクセス検出信号Ｓ１を監視部２５０に出力する。
【００３６】
すなわち、本実施の形態において、レジスタ１ライトアクセス検出部２１１〜２１８を含むレジスタライトアクセス検出部２１０は、監視対象の８つのレジスタのいずれかに、当該レジスタに書き込むべきデータが書き込まれたときに、そのレジスタについてのライトアクセス検出信号を監視部２５０に出力する。
【００３７】
図６は、監視部２５０を示す。ライトアクセスフラグレジスタ２６０と、違反値記憶部２７０と、比較部２８０を有する。
【００３８】
ライトアクセスフラグレジスタ２６０は、監視対象の各レジスタのそれぞれの設定状態に対応するアクセスフラグを備え、これらのフラグは、Ｓ１〜Ｓ８によりセットされる。
【００３９】
図７は、ライトアクセスフラグレジスタ２６０のフォーマット例を示す。図示のように、ライトアクセスフラグレジスタ２６０は、監視対象のレジスタの数分のフラグを有し、各フラグは、初期状態において「０」である。なお、リセットされたときにも、各フラグは「０」の初期状態に戻される。
【００４０】
図６に戻って説明する。違反値記憶部２７０は、監視対象の複数のレジスタに対する書込みの順番が予め規定された順番に違反したときの、ライトアクセスフラグレジスタ２６０の取りうる値（以下違反値という）を記憶している。なお、違反値の数は、ターゲットデバイスの仕様によって異なり、違反値記憶部２７０は、違反値の数の分のレジスタを備えており、これらのレジスタが、それぞれの違反値を格納している。例えば、違反値が違反値１、違反値２、違反値３の３つであるときに、違反値記憶部２７０は、違反値１を格納する違反値１格納レジスタ２７１と、違反値２を格納する格納レジスタ２７２と、違反値３を格納する違反値３格納レジスタ２７３を用いる。違反値について、ターゲットデバイスの仕様例を用いて説明する。
【００４１】
＜仕様例１＞
レジスタ１に「０１Ｈ」を設定した後ではないと、レジスタ２に「０４Ｈ」を設定しても、レジスタ２への設定が有効にならない。
【００４２】
「レジスタ２への設定が有効にならない」とは、ターゲットデバイスがレジスタ２の設定値に従って動作をしないことを意味する。
【００４３】
この仕様例の場合、レジスタ１とレジスタ２への設定データの書込みについて仕様に違反していない場合には、ライトアクセスフラグレジスタ２６０の取りうる値は以下の３通りである。
１．００Ｈ＝「フラグ１：０、フラグ２：０」
これは、レジスタ１に「０１Ｈ」が未設定で、レジスタ２に「０４Ｈ」が未設定の状態であり、ターゲットデバイスのリセット後の初期状態に相当する。
２．０１Ｈ＝「フラグ１：１、フラグ２：０」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が未設定の状態である。
３．０３Ｈ＝「フラグ１：１、フラグ２：１」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が設定された状態である。
【００４４】
一方、仕様に違反している場合には、ライトアクセスフラグレジスタ２６０の取りうる値は下記の１通りである。
４．Ｏ２Ｈ＝「フラグ１：０、フラグ２：１」
これは、レジスタ１に「０１Ｈ」が設定されておらず、レジスタ２に「０４Ｈ」が設定された状態である。
この仕様の場合、違反値が「０２Ｈ」しかないので、違反値記憶部２７０においては、「０２Ｈ」を格納する違反値１格納レジスタ２７１のみが使用される。
【００４５】
＜仕様例２＞
レジスタ１に「０１Ｈ」、レジスタ２に「０４Ｈ」を設定した後ではないと、レジスタ３に「８０Ｈ」を設定しても、レジスタ３への設定が有効にならない。
【００４６】
この仕様の場合、仕様に違反していない場合には、ライトアクセスフラグレジスタ２６０取りうる値は以下の５通りである。
１．００Ｈ＝「フラグ１：０、フラグ２：０、フラグ３：０」
これは、レジスタ１に「０１Ｈ」が未設定で、レジスタ２に「０４Ｈ」が未設定で、レジスタ３に「８０Ｈ」が未設定の状態であり、ターゲットデバイスのリセット後の初期状態に相当する。
２．０１Ｈ＝「フラグ１：１、フラグ２：０、フラグ３：０」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が未設定で、レジスタ３に「８０Ｈ」が未設定の状態である。
３．０２Ｈ＝「フラグ１：０、フラグ２：１、フラグ３：０」
これは、レジスタ１に「０１Ｈ」が未設定で、レジスタ２に「０４Ｈ」が設定され、レジスタ３に「８０Ｈ」が未設定の状態である。
４．０３Ｈ＝「フラグ１：１、フラグ２：１、フラグ３：０」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が設定され、レジスタ３に「８０Ｈ」が未設定の状態である。
５．０７Ｈ＝「フラグ１：１、フラグ２：１、フラグ３：１」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が設定され、レジスタ３に「８０Ｈ」が設定された状態である。
【００４７】
一方、仕様に違反している場合には、ライトアクセスフラグレジスタ２６０の取りうる値は下記の３通りである。
６．０４Ｈ＝「フラグ１：０、フラグ２：０、フラグ３：１」
これは、レジスタ１に「０１Ｈ」が未設定で、レジスタ２に「０４Ｈ」が未設定で、レジスタ３に「８０Ｈ」が設定された状態である。
７．０５Ｈ＝「フラグ１：１、フラグ２：０、フラグ３：１」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が未設定で、レジスタ３に「８０Ｈ」が設定された状態である。
８．０６Ｈ＝「フラグ１：０、フラグ２：１、フラグ３：１」
これは、レジスタ１に「０１Ｈ」が未設定で、レジスタ２に「０４Ｈ」が設定され、レジスタ３に「８０Ｈ」が設定された状態である。
【００４８】
この仕様例の場合、違反値が「０４Ｈ」と、「０５Ｈ」と、「０６Ｈ」の３つであるため、違反値記憶部２７０においては、「０４Ｈ」、「０５Ｈ」、「０６Ｈ」をそれぞれ格納する違反値１格納レジスタ２７１、違反値２格納レジスタ２７２、違反値３格納レジスタ２７３の３つが使用される。
【００４９】
＜仕様例３＞
レジスタ１に「０Ｈ」を設定した後ではないと、レジスタ２に「０４Ｈ」を設定しても、レジスタ２への設定が有効にならない。かつ、レジスタ２に「０４Ｈ」を設定した後ではないと、レジスタ３に「８０Ｈ」を設定しても、レジスタ３への設定が有効にならない。
【００５０】
この仕様の場合、仕様に違反していない場合には、ライトアクセスフラグレジスタ２６０取りうる値は以下の５通りである。
１．００Ｈ＝「フラグ１：０、フラグ２：０、フラグ３：０」
これは、レジスタ１に「０１Ｈ」が未設定で、レジスタ２に「０４Ｈ」が未設定で、レジスタ３に「８０Ｈ」が未設定の状態であり、ターゲットデバイスのリセット後の初期状態に相当する。
２．０１Ｈ＝「フラグ１：１、フラグ２：０、フラグ３：０」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が未設定で、レジスタ３に「８０Ｈ」が未設定の状態である。
３．０３Ｈ＝「フラグ１：１、フラグ２：１、フラグ３：０」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が設定され、レジスタ３に「８０Ｈ」が未設定の状態である。
４．０７Ｈ＝「フラグ１：１、フラグ２：１、フラグ３：１」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が設定され、レジスタ３に「８０Ｈ」が設定された状態である。
【００５１】
一方、仕様に違反している場合には、ライトアクセスフラグレジスタ２６０の取りうる値は下記の４通りである。
５．０２Ｈ＝「フラグ１：０、フラグ２：１、フラグ３：０」
これは、レジスタ１に「０１Ｈ」が未設定で、レジスタ２に「０４Ｈ」が設定され、レジスタ３に「８０Ｈ」が未設定の状態である。
６．０４Ｈ＝「フラグ１：０、フラグ２：０、フラグ３：１」
これは、レジスタ１に「０１Ｈ」が未設定で、レジスタ２に「０４Ｈ」が未設定で、レジスタ３に「８０Ｈ」が設定された状態である。
７．０５Ｈ＝「フラグ１：１、フラグ２：０、フラグ３：１」
これは、レジスタ１に「０１Ｈ」が設定され、レジスタ２に「０４Ｈ」が未設定で、レジスタ３に「８０Ｈ」が設定された状態である。
８．０６Ｈ＝「フラグ１：０、フラグ２：１、フラグ３：１」
これは、レジスタ１に「０１Ｈ」が未設定で、レジスタ２に「０４Ｈ」が設定され、レジスタ３に「８０Ｈ」が設定された状態である。
【００５２】
この仕様の場合、違反値は「０２Ｈ」、「０４Ｈ」、「０５Ｈ」、「０６Ｈ」の４つであるが、状態１（「ライトアクセスフラグレジスタ２６０の値：００Ｈ」）から状態８（「ライトアクセスフラグレジスタ２６０の値：１１１」）に遷移するには、必ず状態５（「ライトアクセスフラグレジスタ２６０の値：０２Ｈ」）、または状態６（「ライトアクセスフラグレジスタ２６０の値：０４Ｈ」）を経由するので、違反値「０２Ｈ」、「０４Ｈ」、「０５Ｈ」のみを使用すればよい。そのため、この場合、違反値記憶部２７０においては、「０２Ｈ」、「０４Ｈ」、「０５Ｈ」をそれぞれ格納する違反値１格納レジスタ２７１、違反値２格納レジスタ２７２、違反値３格納レジスタ２７３の３つが使用される。
【００５３】
監視部２５０における比較部２８０は、違反値の数の分の比較器（比較器２８１、比較器２８２、比較器２８３、・・・）と、ＯＲ回路２９０を有する。比較器２８０の各比較器は、自身と対応する違反値を格納する違反値格納レジスタに格納された違反値とライトアクセスフラグレジスタ２６０の値とを比較し、比較結果をＯＲ回路２９０に出力する。例えば、違反値が違反値１、違反値２、違反値３の３つであるときに、比較器２８１〜２８３が用いられ、比較器２８１は、違反値１格納レジスタ２７１に格納された違反値１とライトアクセスフラグレジスタ２６０の値とを比較し、比較器２８２は、違反値２格納レジスタ２７２に格納された違反値２とライトアクセスフラグレジスタ２６０の値とを比較し、比較器２８３は、違反値３格納レジスタ２７３に格納された違反値３とライトアクセスフラグレジスタ２６０の値とを比較する。
【００５４】
ＯＲ回路２９０は、すべての比較器の比較結果のＯＲ値を出力する。このＯＲ値は、手順違反検出信号Ｔとなる。
【００５５】
このように、レジスタライトアクセス検出部２１０からライトアクセス検出信号が監視部２５０に入力される度に、ライトアクセスフラグレジスタ２６０の値と、違反値記憶部２７０に記憶されたすべての違反値が比較される。比較の結果、ライトアクセスフラグレジスタ２６０の値が、いずれかの違反値と一致する場合に、仕様に違反したことを示す手順違反検出信号Ｔは、表示装置１３３、ブレークコントローラ１５３、ガバレッジコントローラ１５７、トレースコントローラ１５８に出力される。
【００５６】
図８は、デバッグシステム１００における処理の例を示すフローチャートである。この例は、ターゲットデバイスの仕様が前述した仕様例１についてのものである。なお、分かりやすいように、図８は、ＩＣＥ１３０のＣＰＵエバチップ１４０におけるＣＰＵ１５０のレジスタ群１５２への書込みに関連する処理のみを示す。
【００５７】
図８に示す処理例のように、まず、デバッガ１１２を介して、手順違反検出部２００におけるレジスタ１ライトアクセス検出部２１１のアドレス１格納レジスタ２２０にレジスタ１のアドレスが設定され、データ１格納レジスタ２３０にレジスタ１に設定すべき値「０１Ｈ」が設定される（Ｓ１００）。同様に、デバッガ１１２を介して、レジスタ２ライトアクセス検出部２１２のアドレス格納レジスタとデータ格納レジスタに、レジスタ２のアドレスと、レジスタ２に設定すべき値「０４Ｈ」がそれぞれ設定される（Ｓ１０２）。
【００５８】
続いて、デバッガ１１２を介して、手順違反検出部２００の監視部２５０における違反値１格納レジスタ２７１に違反値「０２Ｈ」が設定される（Ｓ１０４）。
【００５９】
設定後、ＣＰＵエバチップ１４０のＣＰＵ１５０によりユーザプログラムが実行される（Ｓ１１０）。
ユーザプログラムの実行中に、ＣＰＵ１５０のレジスタ群１５２におけるレジスタ１へ「０１Ｈ」の書込みがあれば（Ｓ１２０：Ｙｅｓ）、レジスタライトアクセス検出部２１０におけるレジスタ１ライトアクセス検出部２１１は、それを検出してライトアクセス検出信号Ｓ１を監視部２５０に出力する（Ｓ１２２）。これにより、監視部２５０のライトアクセスフラグレジスタ２６０のフラグ１がセットされる（Ｓ１２４）。
【００６０】
一方、レジスタ１への「０１Ｈ」の書込みではなく、レジスタ２へ「０４Ｈ」の書込みがあれば（Ｓ１２０：Ｎｏ、Ｓ１３０：Ｙｅｓ）、レジスタライトアクセス検出部２１０におけるレジスタ２ライトアクセス検出部２１２は、それを検出してライトアクセス検出信号Ｓ２を監視部２５０に出力する（Ｓ１３２）。これにより、監視部２５０のライトアクセスフラグレジスタ２６０のフラグ２がセットされる（Ｓ１３４）。
【００６１】
なお、レジスタ１とレジスタ２のいずれにも書込みが無いときには、ユーザプログラムが手順違反以外の要因によるブレークまで続行される（Ｓ１２０：Ｎｏ、Ｓ１３０：Ｎｏ、Ｓ１５０）。
【００６２】
レジスタ１へ「０１Ｈ」の書込み、またはレジスタ２へ「０４Ｈ」の書込みの後（Ｓ１２０：Ｙｅｓ、Ｓ１２２、Ｓ１２４。または、Ｓ１２０：Ｎｏ、Ｓ１３０：Ｙｅｓ、Ｓ１３２、Ｓ１３４）、監視部２５０は、ライトアクセスフラグレジスタ２６０の値と、レジスタ１ライトアクセス検出部２１１に格納された違反値「０２Ｈ」とを比較する（Ｓ１４０）。
【００６３】
比較の結果、ライトアクセスフラグレジスタ２６０の値と違反値「０２Ｈ」が一致しない場合には、監視部２５０から手順違反検出信号Ｔの出力が無く、ユーザプログラムが続行される（Ｓ１４２：Ｎｏ、Ｓ１５０）。
【００６４】
一方、比較の結果、ライトアクセスフラグレジスタ２６０の値と違反値「０２Ｈ」が一致する場合には、仕様例１により規定された設定手順に違反したとして、監視部２５０から手順違反検出信号Ｔが出力され、設定手順違反時の処理がなされる（Ｓ１４２：Ｙｅｓ、Ｓ１４４、Ｓ１４６）。
【００６５】
なお、本実施の形態では、ステップＳ１４４において、手順違反検出信号Ｔは、表示装置１３３、ブレークコントローラ１５３、ガバレッジコントローラ１５７、トレースコントローラ１５８に出力される。また、ステップＳ１４６における手順違反時処理は、表示装置１３３による警告、トレースコントローラ１５８によるトレースの停止、ガバレッジコントローラ１５７によるガバレッジの停止、ブレークコントローラ１５３によるブレーク要求である。なお、ＣＰＵ１５０は、ブレークコントローラ１５３からブレーク要求を受けると、ユーザプログラムを停止する。
【００６６】
このように、本実施の形態において、ＩＣＥ１３０のＣＰＵエバチップ１４０は、ＣＰＵ１５０のレジスタ群１５２へのライトアクセスを監視し、監視対象のレジスタの設定順番がターゲットデバイスの仕様により規定された書込み順と一致しない場合に、表示装置１３３を介して警告を行う。こうすることにより、開発者に設定手順の違反を早く知らせ、開発の効率向上を図ることができる。
【００６７】
また、手順の違反を検出した際に、ブレーク、トレースの停止、ガバレッジの停止をするようにしているので、無駄な処理を防ぐことができる。
【００６８】
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、さまざまな変更、増減を加えてもよい。これらの変更、増減が加えられた変形例も本発明の範囲にあることは当業者に理解されるところである。
【００６９】
例えば、上述した実施の形態は、本発明の技術をＩＣＥのエバチップにおけるＣＰＵのレジスタの設定手順の監視に適用したものであるが、予め書込順が規定された複数のレジスタであれば、それらへのライトアクセスの監視に本発明の技術を適用することができる。例えば、ＩＣＥの周辺エバチップの複数のレジスタの設定手順の監視には勿論、ＯＣＤの場合には、マイクロプロセッサなどのターゲットデバイスの複数のレジスタの監視にも適用できる。
【図面の簡単な説明】
【００７０】
【図１】本発明の実施の形態にかかるデバッグシステムを示す図である。
【図２】図１に示すデバッグシステムにおけるインサーキット・エミュレータを示す図である。
【図３】図２に示すインサーキット・エミュレータにおけるＣＰＵエバチップを示す図である。
【図４】図３に示すＣＰＵエバチップにおける手順違反検出部を示す図である。
【図５】図４に示す手順違反検出部におけるレジスタライトアクセス検出部のレジスタ１ライトアクセス検出部を示す図である。
【図６】図４に示す手順違反検出部における監視部を示す図である。
【図７】図６に示すライトアクセスフラグレジスタのフォーマット例を示す図である。
【図８】図１に示すデバッグシステムの処理の流れを示すフローチャートである。
【符号の説明】
【００７１】
１００  デバッグシステム  １１０  ホストＰＣ
１１２  デバッガ  １２０  通信ケーブル
１３０  ＩＣＥ  １３２  ホストＩ／Ｆ
１３３  表示装置  １３４  エミュレーションメモリ
１３６  トレースメモリ  １３８  ガバレッジメモリ
１４０  ＣＰＵエバチップ  １５０  ＣＰＵ
１５２  レジスタ群  １５３  ブレークコントローラ
１５４  イベントコントローラ  １５５  周辺Ｉ／Ｆコントローラ
１５６  エミュレーションメモリコントローラ  １５７  ガバレッジコントローラ
１５８  トレースコントローラ  １５９  ポート
１６２  データバス  １６４  アドレスバス
１７０  周辺エバチップ  １７２  レジスタ群
１８０  プローブ  １９０  ターゲットシステム
１９２  ソケット  ２００  手順違反検出部
２１０  レジスタライトアクセス検出部  ２１１  レジスタ１ライトアクセス検出部
２１２  レジスタ２ライトアクセス検出部  ２１３  レジスタ３ライトアクセス検出部
２１８  レジスタ４ライトアクセス検出部  ２２０  アドレス１格納レジスタ
２２２  アドレス比較器  ２３０  データ１格納レジスタ
２３２  データ比較器  ２４０  論理積回路
２５０  監視部  ２６０  ライトアクセスフラグレジスタ
２７０  違反値記憶部  ２７１  違反値１格納レジスタ
２７２  違反値２格納レジスタ  ２７３  違反値３格納レジスタ
２８０  比較部  ２８１  比較器
２８２  比較器  ２８３  比較器
２９０  ＯＲ回路  Ｓ１  ライトアクセス検出信号
Ｓ２  ライトアクセス検出信号  Ｓ３  ライトアクセス検出信号
Ｔ  手順違反検出信号
【図１】
2009294743.tif 000003
【図２】
2009294743.tif 000004
【図３】
2009294743.tif 000005
【図４】
2009294743.tif 000006
【図５】
2009294743.tif 000007
【図６】
2009294743.tif 000008
【図７】
2009294743.tif 000009
【図８】
2009294743.tif 000010