(57)【特許請求の範囲】
【請求項１】
デバッグ対象の回路における信号のシーケンスに応じて値が変わる符号化方式で算出される符号値であり、前記信号のシーケンスから検出する検出対象シーケンスを分割した複数のシーケンスのうち、先頭の第１のシーケンスを符号化した第１の符号値と、２以上の第２のシーケンスのそれぞれにおいて、前記検出対象シーケンスの検出結果に影響を与えない値であるドントケア値以外の値である指定値からなる第３のシーケンスを符号化した第２の符号値と、を記憶するとともに、前記２以上の第２のシーケンスのそれぞれにおける前記ドントケア値からなる第４のシーケンスの長さを記憶する記憶部と、
第１の時間ごとに、前記信号のシーケンスを前記符号化方式で符号化して、第３の符号値を算出し出力する符号値算出部と、
前記符号値算出部が前記第１の時間ごとに出力する前記第３の符号値の何れかと、前記第１のシーケンスの長さ分前の前記第３の符号値である第４の符号値との差分と、前記第１の符号値との比較結果に基づき、前記第１のシーケンスを検出する第１シーケンス検出部と、
前記第１のシーケンスが検出されたときの前記第３の符号値である第５の符号値と、前記２以上の第２のシーケンスのうちの１つであり、前記第１のシーケンスに後続する第５のシーケンスに含まれる前記第３のシーケンスを符号化した前記第２の符号値とに基づき、前記第５のシーケンスに含まれる前記第３のシーケンスの終了時における前記第３の符号値の第１の期待値を算出するとともに、前記２以上の第２のシーケンスのうちの前記第５のシーケンス以外である第６のシーケンスの１つ前の、前記２以上の第２のシーケンスのうちの１つの終了が検出されたときの前記第３の符号値である第６の符号値と、前記第６のシーケンスに含まれる前記第３のシーケンスを符号化した前記第２の符号値とに基づき、前記第６のシーケンスに含まれる前記第３のシーケンスの終了時における前記第３の符号値の第２の期待値を算出する期待値算出部と、
前記符号値算出部が前記第１の時間ごとに出力する前記第３の符号値の何れかと前記第１の期待値とが一致するときに、前記第５のシーケンスに含まれる前記第４のシーケンスの長さに基づき、前記第５のシーケンスの終了を検出し、前記第５のシーケンスの終了を検出した旨を前記期待値算出部に通知し、前記符号値算出部が前記第１の時間ごとに出力する前記第３の符号値の何れかと、前記第２の期待値とが一致するときに、前記第６のシーケンスに含まれる前記第４のシーケンスの長さに基づき、前記第６のシーケンスの終了を検出し、前記第６のシーケンスの終了を検出した旨を前記期待値算出部に通知し、前記複数のシーケンスの数に基づいて、全ての前記２以上の第２のシーケンスの終了を検出したときには、前記検出対象シーケンスを検出した旨を示す検出信号を出力する判定部と、
を有することを特徴とするデバッグ回路。
【請求項２】
前記符号化方式は、線形性を有する符号値を算出する方式であることを特徴とする請求項１に記載のデバッグ回路。
【請求項３】
前記判定部は、
前記符号値算出部が前記第１の時間ごとに出力する前記第３の符号値の何れかと前記第１の期待値とを比較し、一致しているか否かを判定する第１の判定部と、
前記第１の判定部で前記符号値算出部が前記第１の時間ごとに出力する前記第３の符号値の何れかと前記第１の期待値との一致が判定されると、前記第６のシーケンスに含まれる前記第４のシーケンスの長さに対応した回数、前記第３の符号値が更新されたときに、前記第６のシーケンスの終了を検出する第２の判定部と、
前記第２の判定部で前記第６のシーケンスの終了が検出されると、前記複数のシーケンスの数に基づいて、全ての前記２以上の第２のシーケンスが終了したか否かを判定する第３の判定部と、
を有することを特徴とする請求項１または２に記載のデバッグ回路。
【請求項４】
前記検出対象シーケンスは前記回路の停止条件を示し、前記判定部は、前記検出信号により、前記回路の動作を停止させる、ことを特徴とする請求項１乃至３の何れか一項に記載のデバッグ回路。
【請求項５】
デバッグ対象の回路と、
前記回路における信号のシーケンスに応じて値が変わる符号化方式で算出される符号値であり、前記信号のシーケンスから検出する検出対象シーケンスを分割した複数のシーケンスのうち、先頭の第１のシーケンスを符号化した第１の符号値と、２以上の第２のシーケンスのそれぞれにおいて、前記検出対象シーケンスの検出結果に影響を与えない値であるドントケア値以外の値である指定値からなる第３のシーケンスを符号化した第２の符号値と、を記憶するとともに、前記２以上の第２のシーケンスのそれぞれにおける前記ドントケア値からなる第４のシーケンスの長さを記憶する記憶部と、第１の時間ごとに、前記信号のシーケンスを前記符号化方式で符号化して、第３の符号値を算出し出力する符号値算出部と、前記符号値算出部が前記第１の時間ごとに出力する前記第３の符号値の何れかと、前記第１のシーケンスの長さ分前の前記第３の符号値である第４の符号値との差分と、前記第１の符号値との比較結果に基づき、前記第１のシーケンスを検出する第１シーケンス検出部と、前記第１のシーケンスが検出されたときの前記第３の符号値である第５の符号値と、前記２以上の第２のシーケンスのうちの１つであり、前記第１のシーケンスに後続する第５のシーケンスに含まれる前記第３のシーケンスを符号化した前記第２の符号値とに基づき、前記第５のシーケンスに含まれる前記第３のシーケンスの終了時における前記第３の符号値の第１の期待値を算出するとともに、前記２以上の第２のシーケンスのうちの前記第５のシーケンス以外である第６のシーケンスの１つ前の、前記２以上の第２のシーケンスのうちの１つの終了が検出されたときの前記第３の符号値である第６の符号値と、前記第６のシーケンスに含まれる前記第３のシーケンスを符号化した前記第２の符号値とに基づき、前記第６のシーケンスに含まれる前記第３のシーケンスの終了時における前記第３の符号値の第２の期待値を算出する期待値算出部と、前記符号値算出部が前記第１の時間ごとに出力する前記第３の符号値の何れかと前記第１の期待値とが一致するときに、前記第５のシーケンスに含まれる前記第４のシーケンスの長さに基づき、前記第５のシーケンスの終了を検出し、前記第５のシーケンスの終了を検出した旨を前記期待値算出部に通知し、前記符号値算出部が前記第１の時間ごとに出力する前記第３の符号値の何れかと、前記第２の期待値とが一致するときに、前記第６のシーケンスに含まれる前記第４のシーケンスの長さに基づき、前記第６のシーケンスの終了を検出し、前記第６のシーケンスの終了を検出した旨を前記期待値算出部に通知し、前記複数のシーケンスの数に基づいて、全ての前記２以上の第２のシーケンスの終了を検出したときには、前記検出対象シーケンスを検出した旨を示す検出信号を出力する判定部と、を備えたデバッグ回路と、
を有することを特徴とする半導体装置。
【請求項６】
デバッガ装置が、
デバッグ対象の回路における信号のシーケンスから検出する検出対象シーケンスを複数のシーケンスに分割し、
前記信号のシーケンスに応じて値が変わる符号化方式で、複数のシーケンスのうち、先頭の第１のシーケンスを符号化した第１の符号値と、２以上の第２のシーケンスのそれぞれにおいて、前記検出対象シーケンスの検出結果に影響を与えない値であるドントケア値以外の値である指定値からなる第３のシーケンスを符号化した第２の符号値を算出し、
前記第１の符号値、前記第２の符号値及び、前記２以上の第２のシーケンスのそれぞれにおける前記ドントケア値からなる第４のシーケンスの長さを送信し、
前記回路を備えた半導体装置が、
前記第１の符号値、前記第２の符号値及び前記第４のシーケンスの長さを受信し、
第１の時間ごとに、前記信号のシーケンスを前記符号化方式で符号化して、第３の符号値を算出し、
前記第１の時間ごとに算出する前記第３の符号値の何れかと、前記第１のシーケンスの長さ分前の前記第３の符号値である第４の符号値との差分と、前記第１の符号値との比較結果に基づき、前記第１のシーケンスを検出し、
前記第１のシーケンスが検出されたときの前記第３の符号値である第５の符号値と、前記２以上の第２のシーケンスのうちの１つであり、前記第１のシーケンスに後続する第５のシーケンスに含まれる前記第３のシーケンスを符号化した前記第２の符号値とに基づき、前記第５のシーケンスに含まれる前記第３のシーケンスの終了時における前記第３の符号値の第１の期待値を算出するとともに、前記２以上の第２のシーケンスのうちの前記第５のシーケンス以外である第６のシーケンスの１つ前の、前記２以上の第２のシーケンスのうちの１つの終了が検出されたときの前記第３の符号値である第６の符号値と、前記第６のシーケンスに含まれる前記第３のシーケンスを符号化した前記第２の符号値とに基づき、前記第６のシーケンスに含まれる前記第３のシーケンスの終了時における前記第３の符号値の第２の期待値を算出し、
前記第１の時間ごとに算出する前記第３の符号値の何れかと前記第１の期待値とが一致するときに、前記第５のシーケンスに含まれる前記第４のシーケンスの長さに基づき、前記第５のシーケンスの終了を検出し、前記第１の時間ごとに算出する前記第３の符号値の何れかと、前記第２の期待値とが一致するときに、前記第６のシーケンスに含まれる前記第４のシーケンスの長さに基づき、前記第６のシーケンスの終了を検出し、前記複数のシーケンスの数に基づいて、全ての前記２以上の第２のシーケンスの終了を検出したときには、前記検出対象シーケンスを検出した旨を示す検出信号を出力する、
ことを特徴とするデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグ回路、半導体装置及びデバッグ方法に関する。
【背景技術】
【０００２】
ハードウェアが正常に動作しているか否かを確認する実機デバッグの手法として、デバッグ対象の回路の実装時に、デバッグ用の回路を挿入してデバッグを行うロジックアナライザ手法がある。
【０００３】
ロジックアナライザ手法において、デバッグ用の回路は、ユーザによって指定されたデバッグ対象の回路の信号のシーケンス（信号の遷移）を監視する。そして、デバッグ用の回路は、信号のシーケンスが所定の停止条件と一致したときには、その回路の動作を停止させ、トレースメモリに格納された信号のシーケンスを表示装置などに出力する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２５０４４２号公報
【特許文献２】特開２００４−８６９１０号公報
【特許文献３】特開２００９−２８９１０６号公報
【非特許文献】
【０００５】
【非特許文献１】M. Walma, "Pipelined Cyclic Redundancy Check (CRC) Calculation", Proc. of 16th Int'l Conf. on Computer Communications and Networks, pp. 365-370, 2007.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、ソフトウェアのデバッグではブレークポイントを使用して、プログラムを様々な条件で停止させることができる。しかしながら、ハードウェアのデバッグでは、トレースメモリの容量やデバッグに使える信号線の本数などのハードウェア上の制約などにより、ユーザが意図した条件やタイミングでハードウェアを停止させることが難しく、効率よくデバッグを行うことは難しい。したがって、デバッグの作業効率を向上することが課題である。
【課題を解決するための手段】
【０００７】
発明の一観点によれば、デバッグ対象の回路における信号のシーケンスに応じて値が変わる符号化方式で算出される符号値であり、前記信号のシーケンスから検出する検出対象シーケンスを分割した複数のシーケンスのうち、先頭の第１のシーケンスを符号化した第１の符号値と、２以上の第２のシーケンスのそれぞれにおける指定値による第３のシーケンスを符号化した第２の符号値と、前記第２のシーケンスのそれぞれにおけるドントケア値による第４のシーケンスの長さを記憶する記憶部と、前記信号のシーケンスを前記符号化方式で符号化して、第３の符号値を算出する符号値算出部と、前記第３の符号値と、前記第１のシーケンスの長さ分前の前記第３の符号値である第４の符号値との差分と、前記第１の符号値との比較結果に基づき、前記第１のシーケンスを検出する第１シーケンス検出部と、前記第３の符号値のうち、前記第１のシーケンスまたは前記第２のシーケンスが検出されたときの第５の符号値と、前記第２の符号値とに基づき、前記第３のシーケンスの終了時における前記第３の符号値の期待値を算出する期待値算出部と、前記第３の符号値と前記期待値とが一致するときに、前記第４のシーケンスの長さに基づき、前記第２のシーケンスの終了を検出し、前記第２のシーケンスを検出した旨を前記期待値算出部に通知し、全ての前記第２のシーケンスの終了を検出したときには、前記検出対象シーケンスを検出した旨を示す検出信号を出力する判定部と、を有するデバッグ回路が提供される。
【０００８】
また、発明の一観点によれば、デバッグ対象の回路と、前記回路における信号のシーケンスに応じて値が変わる符号化方式で算出される符号値であり、前記信号のシーケンスから検出する検出対象シーケンスを分割した複数のシーケンスのうち、先頭の第１のシーケンスを符号化した第１の符号値と、２以上の第２のシーケンスのそれぞれにおける指定値による第３のシーケンスを符号化した第２の符号値と、前記第２のシーケンスのそれぞれにおけるドントケア値による第４のシーケンスの長さを記憶する記憶部と、前記信号のシーケンスを前記符号化方式で符号化して、第３の符号値を算出する符号値算出部と、前記第３の符号値と、前記第１のシーケンスの長さ分前の前記第３の符号値である第４の符号値との差分と、前記第１の符号値との比較結果に基づき、前記第１のシーケンスを検出する第１シーケンス検出部と、前記第３の符号値のうち、前記第１のシーケンスまたは前記第２のシーケンスが検出されたときの第５の符号値と、前記第２の符号値とに基づき、前記第３のシーケンスの終了時における前記第３の符号値の期待値を算出する期待値算出部と、前記第３の符号値と前記期待値とが一致するときに、前記第４のシーケンスの長さに基づき、前記第２のシーケンスの終了を検出し、前記第２のシーケンスを検出した旨を前記期待値算出部に通知し、全ての前記第２のシーケンスの終了を検出したときには、前記検出対象シーケンスを検出した旨を示す検出信号を出力する判定部と、を備えたデバッグ回路と、を有する半導体装置が提供される。
【０００９】
また、発明の一観点によれば、デバッガ装置が、デバッグ対象の回路における信号のシーケンスから検出する検出対象シーケンスを複数のシーケンスに分割し、前記信号のシーケンスに応じて値が変わる符号化方式で、複数のシーケンスのうち、先頭の第１のシーケンスを符号化した第１の符号値と、２以上の第２のシーケンスのそれぞれにおける指定値による第３のシーケンスを符号化した第２の符号値を算出し、前記第１の符号値、前記第２の符号値及び、前記第２のシーケンスのそれぞれにおけるドントケア値による第４のシーケンスの長さを送信し、前記回路を備えた半導体装置が、前記第１の符号値、前記第２の符号値及び前記第４のシーケンスの長さを受信し、前記信号のシーケンスを前記符号化方式で符号化して、第３の符号値を算出し、前記第３の符号値と、前記第１のシーケンスの長さ分前の前記第３の符号値である第４の符号値との差分と、前記第１の符号値との比較結果に基づき、前記第１のシーケンスを検出し、前記第３の符号値のうち、前記第１のシーケンスまたは前記第２のシーケンスが検出されたときの第５の符号値と、前記第２の符号値とに基づき、前記第３のシーケンスの終了時における前記第３の符号値の期待値を算出し、前記第３の符号値と前記期待値とが一致するときに、前記第４のシーケンスの長さに基づき、前記第２のシーケンスの終了を検出し、全ての前記第２のシーケンスの終了を検出したときには、前記検出対象シーケンスを検出した旨を示す検出信号を出力する、デバッグ方法が提供される。
【発明の効果】
【００１０】
開示のデバッグ回路、半導体装置及びデバッグ方法によれば、デバッグの作業効率を向上できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態の半導体装置、デバッグ回路及びデバッガ装置の一例を示す図である。
【図２】第２の実施の形態の半導体装置及びデバッガ装置を含むデバッグシステムの例を示す図である。
【図３】半導体装置の一例を示す図である。
【図４】レジスタへの情報の格納例を示す図である。
【図５】レジスタへの期待値の格納例を示す図である。
【図６】一致判定部の一例を示す図である。
【図７】部分シーケンス終了判定部の一例を示す図である。
【図８】最終シーケンス判定部の一例を示す図である。
【図９】デバッガ装置のハードウェア例を示す図である。
【図１０】デバッガ装置による設定処理の一例の流れを示すフローチャートである。
【図１１】半導体装置による処理の一例の流れを示すフローチャートである。
【図１２】シーケンスＳａの検出例を示す図である。
【図１３】期待値の算出例を示す図である。
【図１４】シーケンスの終了判定処理を説明する図である。
【図１５】入力データの遷移の一例を示す図である。
【図１６】検出対象シーケンスの検出処理時の各シーケンスの検出及び終了判定結果の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
図１は、第１の実施の形態の半導体装置、デバッグ回路及びデバッガ装置の一例を示す図である。
【００１３】
半導体装置１は、デバッグ回路２とデバッグ対象回路３とを有している。デバッグ対象回路３は、たとえば、データの送受信や、計算を行うハードウェアである。
デバッグ回路２は、デバッグ対象回路３における任意の信号のシーケンスから、たとえば、デバッグ対象回路３の停止条件とする所定の信号のシーケンス（以下検出対象シーケンスと呼ぶ）を検出し、検出した旨の検出信号を出力する回路である。検出信号は、たとえば、デバッグ対象回路３の動作を停止させるために用いられる。
【００１４】
なお、検出対象シーケンスは、指定値のほかに、値自体は、検出対象シーケンスの検出結果には影響を与えないドントケア値を含んでいてもよい。そのため、ドントケア値はどんな値でもよい。たとえば、デバッグ時にはわからない値などが、ドントケア値として設定される。なお、ドントケア値によるシーケンスの長さの情報は、たとえば、デバッガ装置４から与えられる。
【００１５】
本実施の形態のデバッグ回路２は、このようなドントケア値を含む信号のシーケンスも検出対象として設定できるようにしたものである。
図１には、検出対象シーケンスＳの一例が示されている。楕円状の複数の要素は、指定値またはドントケア値を表している。図１の例では、検出対象シーケンスＳは３つのシーケンスＳａ，Ｓｂ１，Ｓｂ２に分割されており、２番目のシーケンスＳｂ１には、指定値による長さＬ１のシーケンスのほか、ドントケア値による長さＬ２のシーケンスが含まれている。このように、分割された検出対象シーケンスＳのうち、先頭のシーケンスＳａと最後尾のシーケンスＳｂ２には、ドントケア値が含まないように設定されている。なお、シーケンスの長さＬ１，Ｌ２は、たとえば、バイト数などで表される。
【００１６】
また、検出対象シーケンスＳは、４つ以上のシーケンスに分割されていてもよい。
デバッグ回路２は、記憶部２ａ、符号値算出部２ｂ、遅延部２ｃ、第１シーケンス検出部２ｄ、期待値算出部２ｅ、判定部２ｆを有している。さらに、デバッグ回路２は、デバッグ対象回路３への入力データｘや、デバッグ対象回路３からの出力データｙのデータ数（バイト数）をカウントするカウンタ２ｇを有している。
【００１７】
記憶部２ａは、上記のようなシーケンスＳａを符号化した符号値Ａａと、シーケンスＳｂ１，Ｓｂ２のそれぞれにおける指定値によるシーケンスを符号化した符号値Ａｂ１，Ａｂ２と、ドントケア値によるシーケンスの長さＬ２を記憶する。なお、記憶部２ａは、さらに、シーケンスＳａ，Ｓｂ１，Ｓｂ２の指定値によるシーケンスの長さや、検出対象シーケンスＳの識別情報を記憶するようにしてもよい。
【００１８】
符号値Ａａ，Ａｂ１，Ａｂ２は、デバッグ対象回路３における信号のシーケンスに応じて値が変わる符号化方式で算出される。
符号値Ａａ，Ａｂ１，Ａｂ２は、たとえば、線形性を有する符号値（線形符号）であり、ＣＲＣ（Cyclic Redundancy Check）などの符号化方式で、デバッガ装置４にて算出される。
【００１９】
符号値算出部２ｂは、デバッグ対象回路３に関する信号のシーケンスに基づき、デバッガ装置４が符号値Ａａ，Ａｂ１，Ａｂ２を算出する際の符号化方式と同じ符号化方式で、符号値を算出する。たとえば、符号値算出部２ｂは、バイト単位でデバッグ対象回路３の信号（入力データｘや出力データｙ）を取得して、符号値を更新する。なお、この場合、検出対象シーケンスＳも、バイト単位でのシーケンスとなる。
【００２０】
図１では、デバッグ対象回路３の信号である入力データｘまたは出力データｙがＤ（ｉ）の状態からＤ（ｉ）→…→Ｄ（ｊ）→…→Ｄ（ｊ＋Ｌ１）と遷移したときに算出される符号値の例が示されている。Ｄ（ｉ）の状態は、初期状態でなくてもよく、あるシーケンスの途中の状態であってもよい。ｉ，ｊ，ｊ＋Ｌ１は、カウンタ２ｇのカウント値を示している。なお、ここでは、上記のシーケンスＳｂ１の指定値によるシーケンスの長さＬ１がバイト数（カウント数）で表されるものとしている。入力データｘまたは出力データｙがこのような変化をしたとき、図１の例では、符号値は、ａ（ｉ）→…→ａ（ｊ）→…→ａ（ｊ＋Ｌ１）のように更新される。なお、カウント値は、符号値の更新回数に対応する。
【００２１】
遅延部２ｃは、検出対象シーケンスＳのシーケンスＳａの長さ分前の、符号値算出部２ｂで算出される符号値を出力する。たとえば、遅延部２ｃは、シフトレジスタであり、符号値算出部２ｂで算出される符号値を、シーケンスＳａの長さ分保持したのち、最初に入力された符号値から順次出力する。すなわち、遅延部２ｃは、入力される符号値の出力を遅らせる機能を有する。
【００２２】
以下では、シーケンスＳａの長さを、ｍカウント分（つまりｍバイト分）とする。図１では、遅延部２ｃから符号値ａ（ｊ−ｍ）が出力されている例が示されている。符号値ａ（ｊ−ｍ）は、符号値ａ（ｊ）に対して、ｍカウント分前の符号値である。
【００２３】
第１シーケンス検出部２ｄは、符号値算出部２ｂから出力される符号値と、遅延部２ｃから出力される符号値との差分と、符号値Ａａとの比較結果に基づき、検出対象シーケンスＳを分割した複数のシーケンスのうち、先頭のシーケンスＳａを検出する。すなわち、第１シーケンス検出部２ｄは、ｍカウント分の符号値の変化分と、符号値Ａａとの比較結果に基づきシーケンスＳａを検出する。
【００２４】
たとえば、第１シーケンス検出部２ｄは、符号値算出部２ｂから出力される符号値と、遅延部２ｃから出力される符号値との差分が、符号値Ａａに相当するときに、シーケンスＳａで、デバッグ対象回路３の信号が遷移したことを検出する。
【００２５】
図１には、未知のシーケンスＸの後に、シーケンスＳａが続くときの検出例が示されている。この場合、符号値算出部２ｂから出力される符号値ａ（ｊ）と、遅延部２ｃから出力される符号値ａ（ｊ−ｍ）の差分が、符号値Ａａに相当するため、シーケンスＳａが検出される。
【００２６】
第１シーケンス検出部２ｄは、シーケンスＳａを検出すると、検出したときの符号値算出部２ｂから出力される符号値を期待値算出部２ｅに供給する。図１の例では、符号値ａ（ｊ）が期待値算出部２ｅに供給されている。
【００２７】
期待値算出部２ｅは、符号値算出部２ｂで算出される符号値のうち、シーケンスＳａが検出されたときの符号値と、符号値Ａｂ１とに基づき、シーケンスＳｂ１の指定値によるシーケンス終了時の、符号値算出部２ｂで算出される符号値の期待値を算出する。また、期待値算出部２ｅは、符号値算出部２ｂで算出される符号値のうち、シーケンスＳｂ１が検出されたときの符号値と、符号値Ａｂ２とに基づき、シーケンスＳｂ２の指定値によるシーケンス終了時の、符号値算出部２ｂで算出される符号値の期待値を算出する。
【００２８】
たとえば、期待値算出部２ｅは、シーケンスＳａが検出されたときの符号値が符号値ａ（ｊ）のとき、符号値ａ（ｊ）と符号値Ａｂ１のＸＯＲ演算から期待値ｂ（ｊ＋Ｌ１）を算出する。期待値の算出式の例については後述する（式（３）参照）。
【００２９】
判定部２ｆは、符号値算出部２ｂから出力される符号値と、期待値とが一致するときに、ドントケア値によるシーケンスの長さに基づき、シーケンスＳｂ１，Ｓｂ２の終了を検出し、検出した旨を期待値算出部２ｅに通知する。
【００３０】
図１の例では、シーケンスＳｂ１には、ドントケア値が含まれ、ドントケア値によるシーケンスの長さはＬ２である。判定部２ｆは、カウント値が、符号値算出部２ｂから出力される符号値が期待値ｂ（ｊ＋Ｌ１）と一致したときのカウント値（ｊ＋Ｌ１）にＬ２を足した値（ｊ＋Ｌ１＋Ｌ２）になると、シーケンスＳｂ１が終了したと判定する。シーケンスＳｂ２には、ドントケア値が含まれないため、ドントケア値によるシーケンスの長さは０である。そのため、判定部２ｆは、カウント値が、符号値算出部２ｂから出力される符号値が期待値と一致したときの値になると、シーケンスＳｂ２が終了したと判定する。
【００３１】
また、判定部２ｆは、全てのシーケンスＳｂ１，Ｓｂ２の終了を検出したときには、検出対象シーケンスを検出した旨を示す信号を出力する。
判定部２ｆは、たとえば、図１に示すように、一致判定部２ｆ１、部分シーケンス終了判定部２ｆ２、最終シーケンス判定部２ｆ３を有する。
【００３２】
一致判定部２ｆ１は、期待値算出部２ｅで算出された期待値が、符号値算出部２ｂで算出された符号値と一致しているか否かを判定する。
部分シーケンス終了判定部２ｆ２は、記憶部２ａから、ドントケア値によるシーケンスの長さを取得して、その長さに基づき、シーケンスＳｂ１，Ｓｂ２が終了したか否かを判定する。たとえば、部分シーケンス終了判定部２ｆ２は、一致判定部２ｆ１で符号値と期待値との一致が検出されたときのカウント値から、ドントケア値によるシーケンスの長さ分、カウンタ２ｇのカウント数が進んだとき、シーケンスＳｂ１，Ｓｂ２が終了したと判定する。上記の例では、カウント値が（ｊ＋Ｌ１＋Ｌ２）のとき、シーケンスＳｂ１が終了したと判定される。
【００３３】
部分シーケンス終了判定部２ｆ２は、シーケンスＳｂ１，Ｓｂ２が終了したと判定したときには、シーケンスＳｂ１，Ｓｂ２を検出した旨を期待値算出部２ｅ及び最終シーケンス判定部２ｆ３に通知する。
【００３４】
最終シーケンス判定部２ｆ３は、記憶部２ａに記憶されている情報から、検出対象シーケンスＳを分割することで得られたシーケンス数を検出する。なお、分割することで得られたシーケンス数そのものが記憶部２ａに記憶されていてもよく、その場合、最終シーケンス判定部２ｆ３は、そのシーケンス数を取得する。そして、最終シーケンス判定部２ｆ３は、そのシーケンス数に基づき、部分シーケンス終了判定部２ｆ２から全てのシーケンスＳｂ１，Ｓｂ２の終了が通知されたか判定する。最終シーケンス判定部２ｆ３は、全てのシーケンスＳｂ１，Ｓｂ２の終了が通知されたと判定したときには、検出対象シーケンスを検出した旨の信号を出力する。この信号は、たとえば、デバッグ対象回路３の動作を停止する旨を指示する回路停止信号となる。
【００３５】
最終シーケンス判定部２ｆ３は、たとえば、回路停止信号により、デバッグ対象回路３へクロック信号の供給を停止することで、デバッグ対象回路３の動作を停止する。また、最終シーケンス判定部２ｆ３は、デバッグ対象回路３へのデータの入力またはデバッグ対象回路３からのデータの出力を遮断して、デバッグ対象回路３が停止しているように扱うようにしてもよい。
【００３６】
図１に示されているデバッガ装置４は、半導体装置１と通信してデバッグを行う装置である。デバッガ装置４は、たとえば、コンピュータでありソフトウェアで以下の処理を行う。デバッガ装置４は、まず、ユーザ（デバッグ作業者）から検出対象シーケンスＳを取得する（ステップＳ１）。次にデバッガ装置４は、検出対象シーケンスＳを図１に示すようなシーケンスＳａ，Ｓｂ１，Ｓｂ２に分割する（ステップＳ２）。また、デバッガ装置４は、シーケンスＳａ，Ｓｂ１，Ｓｂ２の指定値によるシーケンスをそれぞれ符号化した符号値Ａａ，Ａｂ１，Ａｂ２を算出する（ステップＳ３）。そして、デバッガ装置４は、算出した符号値Ａａ，Ａｂ１，Ａｂ２やドントケア値によるシーケンスの長さＬ２を含むシーケンスＳａ，Ｓｂ１，Ｓｂ２の情報を半導体装置１に出力（送信）する（ステップＳ４）。
【００３７】
以下、半導体装置１とデバッガ装置４を含むデバッグシステムによるデバッグ方法の一例を説明する。
デバッガ装置４による上記のステップＳ１〜Ｓ４の処理で算出され、送信されたシーケンスＳａ，Ｓｂ１，Ｓｂ２の情報は、半導体装置１のデバッグ回路２の記憶部２ａに記憶される。
【００３８】
デバッグ回路２は、デバッグ対象回路３の信号の遷移を検出しており、符号値算出部２ｂは、図１の例では、入力データｘまたは出力データｙのシーケンスに基づき、符号値を更新する。
【００３９】
たとえば、図１のように、入力データｘまたは出力データｙがＤ（ｉ）の状態からＤ（ｉ）→…→Ｄ（ｊ）→…→Ｄ（ｊ＋Ｌ１）と遷移したとき、符号値算出部２ｂの出力は、符号値ａ（ｉ）→…→ａ（ｊ）→…→ａ（ｊ＋Ｌ１）と更新される。
【００４０】
符号値ａ（ｊ）が符号値算出部２ｂから出力されたとき、遅延部２ｃから出力される符号値ａ（ｊ−ｍ）との差分が、符号値Ａａに相当する場合、第１シーケンス検出部２ｄは、符号値ａ（ｊ）を期待値算出部２ｅに供給する。期待値算出部２ｅは、符号値ａ（ｊ）と符号値Ａｂ１とに基づき期待値ｂ（ｊ＋Ｌ１）を算出する。
【００４１】
一致判定部２ｆ１が、符号値算出部２ｂから出力される符号値ａ（ｊ＋Ｌ１）と期待値ｂ（ｊ＋Ｌ１）との一致を検出すると、部分シーケンス終了判定部２ｆ２は、カウント値（ｊ＋Ｌ１＋Ｌ２）のとき、シーケンスＳｂ１の終了を検出する。
【００４２】
そして、期待値算出部２ｅは、このときの符号値ａ（ｊ＋Ｌ１＋Ｌ２）と、符号値Ａｂ２とに基づき、同様にシーケンスＳｂ２の終了時の期待値を算出する。一致判定部２ｆ１が、その期待値と符号値算出部２ｂから出力される符号値との一致を検出すると、部分シーケンス終了判定部２ｆ２は、シーケンスＳｂ２のドントケア値によるシーケンスの長さは０であるため、シーケンスＳｂ２の終了を検出したことになる。シーケンスＳｂ２の終了が検出されると、最終シーケンス判定部２ｆ３は、検出対象シーケンスＳを検出した旨の信号を出力する。この信号により、たとえば、デバッグ対象回路３の動作が停止される。
【００４３】
その後は、たとえば、デバッガ装置４により、デバッグ対象回路３の各部の信号の様子を調査するなどのデバッグ作業が行われる。
このように、本実施の形態のデバッグ回路２は、ドントケア値を含むシーケンスＳｂ１を、符号値算出部２ｂで算出されるドントケア値部分の符号値を無視して、指定値部分の符号値Ａｂ１と、ドントケア値部分の長さＬ２に基づき検出する。これにより、ドントケア値を含む信号のシーケンスも検出対象として設定できるようになり、検出対象シーケンスの設定自由度が増す。このため、デバッグ時の作業効率が向上する。
【００４４】
また、上記のような符号値を用いることで、ハードウェア上の制約があっても、様々な条件でデバッグ対象回路３を停止することが容易になり、デバッグの作業効率が上がる。
また、デバッグ回路２は、入力データｘや出力データｙを直接扱うのではなく、データ量の小さい符号値を用いて処理を行うため、処理を小規模な回路で行えるとともに高速動作が可能となる。
【００４５】
さらに、複雑なシーケンスを検出対象シーケンスとしたときでも、符号値として表現できるので、記憶部２ａの容量は小さくてすみ、デバッグ回路２及び半導体装置１の回路面積を小さくできる。
【００４６】
また、検出対象シーケンスを変更するとき、記憶部２ａはその検出対象シーケンスを符号化した符号値を記憶すればよいため、特に回路の再実装などを行わなくてすみ、デバッグの作業効率が上がる。
【００４７】
（第２の実施の形態）
図２は、第２の実施の形態の半導体装置及びデバッガ装置を含むデバッグシステムの例を示す図である。
【００４８】
デバッグシステムは、半導体装置１０とデバッガ装置２０を含み、それらは通信ケーブル２０ｂにより接続されている。なお、半導体装置１０とデバッガ装置２０は無線で通信を行ってもよい。
【００４９】
半導体装置１０は、たとえば、ＳｏＣ（System on Chip）であり、デバッグ回路１１とデバッグ対象となるユーザ回路１２を有している。
デバッガ装置２０は、たとえば、コンピュータであり、作業者２０ａにより操作され、通信ケーブル２０ｂを介して半導体装置１０と通信を行い、デバッグ処理を行う。
【００５０】
（半導体装置）
図３は、半導体装置の一例を示す図である。
半導体装置１０は、前述したデバッグ回路１１、ユーザ回路１２の他、デバッガ装置２０から通信ケーブル２０ｂを介して送られてくるデータを受信する受信部１３を有している。
【００５１】
デバッグ回路１１は、レジスタ１１ａ１〜１１ａｐ、レジスタ１１ｂ１〜１１ｂｐ、符号値算出部１１ｃ、シフトレジスタ１１ｄ、第１シーケンス検出部１１ｅ、期待値算出部１１ｆ、レジスタ１１ｇ１〜１１ｇｐ、判定部１１ｈ、カウンタ１１ｉを有している。
【００５２】
レジスタ１１ａ１〜１１ａｐとレジスタ１１ｂ１〜１１ｂｐは、第１の実施の形態のデバッグ回路２における記憶部２ａの機能を有している。レジスタ１１ａ１〜１１ａｐとレジスタ１１ｂ１〜１１ｂｐの代わりに、ＲＡＭ（Random Access Memory）を用いてもよい。
【００５３】
レジスタ１１ａ１〜１１ａｐは、複数（ｐ個）の検出対象シーケンスのそれぞれにおいて、分割されたシーケンスのうちドントケア値を含まない先頭のシーケンスを符号化した符号値などの情報を記憶する。以下では、ある検出対象シーケンスと、それを分割したシーケンスのうち、先頭のシーケンスを第１の実施の形態と同様に、検出対象シーケンスＳ、シーケンスＳａと表記する。
【００５４】
レジスタ１１ｂ１〜１１ｂｐは、分割した複数のシーケンスのうち、残りのシーケンスを符号化した符号値と、ドントケア値によるシーケンスの長さなどの情報を記憶する。以下では、残りのシーケンスを、ｎ−１個あるとして、シーケンスＳｂ１〜Ｓｂｎ−１と表記する。なお、ｎは分割によって得られるシーケンス数であり、ｎ≧１である（ｎ＝１のときは、分割なしを意味する）。また、以下では、符号値は、ＣＲＣで符号化された符号値とするが、これに限定されるものではなく、たとえば、線形性を有する符号値が適用可能である。
【００５５】
図４は、レジスタへの情報の格納例を示す図である。
レジスタ１１ａ１には、シーケンスＳａを含む検出対象シーケンスＳの識別情報ＢＰｉｄ、シーケンスＳａの符号値ＣＲＣ（Ｓａ）、シーケンスＳａの長さＬｅｎ（Ｓａ）が記憶されている。
【００５６】
レジスタ１１ｂ１には、検出対象シーケンスのシーケンスＳｂ１〜Ｓｂｎ−１の情報が記憶されている。図４には、シーケンスＳｂ１〜Ｓｂｎ−１のうち、ｉ番目のシーケンスＳｂｉの情報の格納例が示されている。レジスタ１１ｂ１には、シーケンスＳｂｉを含む検出対象シーケンスＳの識別情報ＢＰｉｄ、シーケンスＳｂｉに含まれる指定値によるシーケンスＳｂａｉの符号値ＣＲＣ（Ｓｂａｉ）とシーケンスＳｂａｉの長さＬｅｎ（Ｓｂａｉ）が記憶されている。さらに、レジスタ１１ｂ１には、シーケンスＳｂｉに含まれるドントケア値によるシーケンスＸｉの長さＬｅｎ（Ｘｉ）と、ｉ＋１番目のシーケンスＳｂｉ+１の情報の格納位置を指定するポインタＮｅｘｔが記憶されている。
【００５７】
識別情報ＢＰｉｄは、シーケンスＳａとシーケンスＳｂａｉが同じ検出対象シーケンスに含まれるものであることを示すために用いられる。
長さＬｅｎ（Ｓａ），Ｌｅｎ（Ｓｂａｉ），Ｌｅｎ（Ｘｉ）は、以下に説明する例ではバイト数で表されるものとする。なお、後述するカウンタ１１ｉが１クロック周期でカウントアップし、符号値算出部１１ｃもそのクロック周期で符号値を算出するものであれば、上記の長さの情報も、そのクロック周期単位で表される。
【００５８】
なお、ｎ−１番目のシーケンスＳｂｎ−１の情報に含まれるポインタＮｅｘｔは、最終のシーケンスであることを示す値（たとえば、“Ｎｕｌｌ”）となっている。
ところで、検出対象シーケンスは、たとえば、ユーザ回路１２に関する信号がどのように遷移したら、ユーザ回路１２を停止させるかを指定するものである。ユーザ回路１２に関する信号としては、ユーザ回路１２の入力データ、出力データ、または内部の信号などである。以下では、検出対象シーケンスは、１つの信号（たとえば、入力データまたは出力データ）の遷移として説明するが、複数の信号の組み合わせの遷移であってもよい。
【００５９】
符号値算出部１１ｃは、ユーザ回路１２に関する信号のシーケンスに基づき、シーケンスによって値が変わる符号値を、デバッガ装置２０で符号値を算出する際の符号化方式と同じ符号化方式（すなわちＣＲＣ）で算出する。
【００６０】
シフトレジスタ１１ｄは、第１の実施の形態のデバッグ回路２における遅延部２ｃの機能を有している。シフトレジスタ１１ｄは、符号値算出部１１ｃで算出される符号値を、シーケンスＳａの長さ分保持したのち、最初に入力された符号値から順次出力する。なお、第１の実施の形態と同様に、シーケンスＳａの長さを、ｍカウント分とする。ｍは、たとえば、シフトレジスタ１１ｄが保持できるデータ容量に基づき決定される。
【００６１】
第１シーケンス検出部１１ｅは、符号値算出部１１ｃから出力される符号値と、シフトレジスタ１１ｄから出力される符号値との差分と、レジスタ１１ａ１〜１１ａｐに記憶されている符号値との比較結果に基づきシーケンスＳａを検出する。
【００６２】
また、第１シーケンス検出部１１ｅは、シーケンスＳａを検出すると、検出したときの符号値を期待値算出部１１ｆに供給する。さらに、第１シーケンス検出部１１ｅは、シーケンスＳａを検出すると、検出した旨を示す信号（たとえば、“１”）を、最終シーケンス判定部１１ｈ３に通知する。
【００６３】
期待値算出部１１ｆは、シーケンスＳａが検出されたときの符号値と、レジスタ１１ｂ１〜１１ｂｐに記憶されている符号値とに基づき、シーケンスＳｂａ１〜Ｓｂａｎ−１の終了時における、符号値算出部１１ｃで算出される符号値の期待値を算出する。シーケンスＳｂａ１〜Ｓｂａｎ−１は、シーケンスＳｂ１〜Ｓｂｎ−１に含まれる指定値によるシーケンスである。
【００６４】
レジスタ１１ｇ１〜１１ｇｐは、期待値算出部１１ｆで算出された、ｐ個の検出対象シーケンスのそれぞれに対応する期待値を記憶する。
図５は、レジスタへの期待値の格納例を示す図である。
【００６５】
レジスタ１１ｇ１は、シーケンスＳｂ１〜Ｓｂｎ−１の指定値によるシーケンスＳｂａ１〜Ｓｂａｎ−１の終了時点での、符号値算出部１１ｃで算出される符号値の期待値を記憶する。図５の例では、シーケンスＳｂａ１の終了時点での期待値ＣＲＣ（Ｘ＆Ｓａ＆Ｓｂａ１）のほか、検出対象シーケンスＳの識別情報ＢＰｉｄと、次のシーケンスＳｂａ２の情報の格納位置を示すポインタＮｅｘｔが記憶されている。なお、“＆”はシーケンスの連接を示している。Ｘは未知のシーケンスであり、期待値ＣＲＣ（Ｘ＆Ｓａ＆Ｓｂａ１）は、未知のシーケンスＸの後にシーケンスＳａとシーケンスＳｂａ１が続くときに得られる符号値の期待値を示している。
【００６６】
図３に示されている判定部１１ｈは、一致判定部１１ｈ１、部分シーケンス終了判定部１１ｈ２、最終シーケンス判定部１１ｈ３を有している。
一致判定部１１ｈ１は、レジスタ１１ｇ１〜１１ｇｐに記憶されている期待値が、符号値算出部１１ｃで算出された符号値と一致しているか否かを判定する。
【００６７】
部分シーケンス終了判定部１１ｈ２は、レジスタ１１ｂ１〜１１ｂｐから、ドントケア値によるシーケンスの長さを取得して、その長さに基づき、シーケンスＳｂ１〜Ｓｂｎ−１が終了したか否かを判定する。部分シーケンス終了判定部１１ｈ２は、シーケンスＳｂ１〜Ｓｂｎ−１のそれぞれが終了したと判定するたび、シーケンスＳｂ１〜Ｓｂｎ−１のそれぞれを検出した旨を期待値算出部１１ｆ及び最終シーケンス判定部１１ｈ３に通知する。
【００６８】
最終シーケンス判定部１１ｈ３は、たとえば、レジスタ１１ｂ１〜１１ｂｐに記憶されている情報から、検出対象シーケンスＳを分割したシーケンス数を検出する。なお、シーケンス数そのものがレジスタ１１ｂ１〜１１ｂｐまたは、レジスタ１１ａ１〜１１ａｐに記憶されていてもよく、その場合、最終シーケンス判定部１１ｈ３は、そのシーケンス数を取得する。
【００６９】
そして、最終シーケンス判定部１１ｈ３は、そのシーケンス数に基づき、部分シーケンス終了判定部１１ｈ２から全てのシーケンスＳｂ１〜Ｓｂｎ−１の終了が通知されたか判定する。最終シーケンス判定部１１ｈ３は、全てのシーケンスＳｂ１〜Ｓｂｎ−１の終了が通知されたと判定したときには、検出対象シーケンスＳを検出した旨の信号を出力する。この信号は、たとえば、デバッグ対象回路３の動作を停止する旨を指示する回路停止信号となる。なお、最終シーケンス判定部１１ｈ３は、シーケンスＳｂｎ−１の終了の通知を受けると、そのシーケンスＳｂｎ−１の情報に含まれるポインタＮｅｘｔ（“ＮＵＬＬ”となっている）を参照して、全シーケンスＳｂ１〜Ｓｂｎ−１の終了を判定してもよい。
【００７０】
判定部１１ｈにおける、一致判定部１１ｈ１、部分シーケンス終了判定部１１ｈ２及び最終シーケンス判定部１１ｈ３は、たとえば、以下のような回路で実現される。
図６は、一致判定部の一例を示す図である。
【００７１】
一致判定部１１ｈ１は、ｎ−１個の比較器１４ａ１〜１４ａｎ−１を有している。比較器１４ａ１〜１４ａｎ−１は、レジスタ１１ｇ１に記憶されている検出対象シーケンスＳについてのｎ−１個の期待値と、符号値算出部１１ｃで算出される符号値とが一致しているか否かを判定する。たとえば、比較器１４ａ１は、シーケンスＳｂａ１の終了時点の期待値ＣＲＣ（Ｘ＆Ｓａ＆Ｓｂａ１）と、符号値算出部１１ｃで算出される符号値とを比較し、両者が一致するときには、“１”を出力する。
【００７２】
なお、レジスタ１１ｇ１〜１１ｇｐのうち、レジスタ１１ｇ１以外に記憶されている他の検出対象シーケンスについてのｎ−１個の期待値を用いた一致判定についても、上記の回路で実現できる。その場合、レジスタ１１ｇ１〜１１ｇｐのいずれかの出力を選択するような選択回路を設ければよい。
【００７３】
図７は、部分シーケンス終了判定部の一例を示す図である。
部分シーケンス終了判定部１１ｈ２は、それぞれｎ−１個の、加算回路１５ａ１〜１５ａｎ−１、バッファ１６ａ１〜１６ａｎ−１、レジスタ１７ａ１〜１７ａｎ−１、比較器１８ａ１〜１８ａｎ−１を有している。
【００７４】
加算回路１５ａ１〜１５ａｎ−１は、レジスタ１１ｂ１に記憶されているシーケンスＳｂ１〜Ｓｂｎ−１に含まれるドントケア値によるシーケンスＸ１〜Ｘｎ−１の長さと、カウンタ１１ｉによるカウント値とを加算する。
【００７５】
バッファ１６ａ１〜１６ａｎ−１は、加算回路１５ａ１〜１５ａｎ−１での加算結果を受け、一致判定部１１ｈ１から対応するシーケンスＳｂ１〜Ｓｂｎ−１に関する期待値と、符号値とが一致した旨の信号を受けたとき、その加算結果を出力する。このときの加算結果は、シーケンスＳｂ１〜Ｓｂｎ−１の終了時点でのカウント値に相当する。
【００７６】
レジスタ１７ａ１〜１７ａｎ−１は、加算結果を記憶する。
比較器１８ａ１〜１８ａｎ−１は、レジスタ１７ａ１〜１７ａｎ−１に記憶されている加算値と、カウンタ１１ｉのカウント値とが一致しているか否かを判定する。たとえば、比較器１８ａ１は、レジスタ１７ａ１に記憶されている、シーケンスＳｂ１の終了時点のカウント値に相当する加算値と、カウンタ１１ｉの現在のカウント値とを比較し、両者が一致したときには、“１”を出力する。
【００７７】
なお、レジスタ１１ｂ１〜１１ｂｐのうち、レジスタ１１ｂ１以外に記憶されている他の検出対象シーケンスについてのドントケア値によるシーケンスの長さを用いた判定についても、上記の回路で実現できる。その場合、レジスタ１１ｂ１〜１１ｂｐのいずれかの出力を選択するような選択回路を設ければよい。
【００７８】
図８は、最終シーケンス判定部の一例を示す図である。
最終シーケンス判定部１１ｈ３は、マルチプレクサ１９を有する。
マルチプレクサ１９は、第１シーケンス検出部１１ｅから出力されるシーケンスＳａが検出されたか否かを示す１ビットの信号を受ける。さらに、マルチプレクサ１９は、部分シーケンス終了判定部１１ｈ２から出力されるシーケンスＳｂ１〜Ｓｂｎ−１が終了したか否かを示すｎ−１ビットの信号を受ける。そして、マルチプレクサ１９は、たとえば、レジスタ１１ｂ１に記憶されている、検出対象シーケンスＳを分割することで得られたシーケンス数（＝ｎ）に基づき、最終シーケンスが終了したか否かを示す信号を出力する。
【００７９】
たとえば、ｎが１のとき、マルチプレクサ１９は、第１シーケンス検出部１１ｅからシーケンスＳａが検出されたことを示す信号を受けると、最終シーケンスが終了した旨の信号、すなわち、検出対象シーケンスを検出した旨の信号を出力する。
【００８０】
また、たとえば、ｎが３のとき、マルチプレクサ１９は、部分シーケンス終了判定部１１ｈ２からシーケンスＳｂ２が終了したことを示す信号を受けると、最終シーケンスが終了した旨の信号、すなわち、検出対象シーケンスを検出した旨の信号を出力する。
【００８１】
第１シーケンス検出部１１ｅ、期待値算出部１１ｆ、判定部１１ｈでの処理例については、後述する。
（デバッガ装置２０）
図９は、デバッガ装置のハードウェア例を示す図である。
【００８２】
デバッガ装置２０は、コンピュータであり、プロセッサ２１によって装置全体が制御されている。プロセッサ２１には、バス２９を介してＲＡＭ２２と複数の周辺機器が接続されている。プロセッサ２１は、マルチプロセッサであってもよい。プロセッサ２１は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ２１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００８３】
ＲＡＭ２２は、デバッガ装置２０の主記憶装置として使用される。ＲＡＭ２２には、プロセッサ２１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ２２には、プロセッサ２１による処理に必要な各種データが格納される。
【００８４】
バス２９に接続されている周辺機器としては、ＨＤＤ（Hard Disk Drive）２３、グラフィック処理装置２４、入力インタフェース２５、光学ドライブ装置２６、機器接続インタフェース２７及びネットワークインタフェース２８がある。
【００８５】
ＨＤＤ２３は、内蔵したディスクに対して、磁気的にデータの書き込み及び読み出しを行う。ＨＤＤ２３は、デバッガ装置２０の補助記憶装置として使用される。ＨＤＤ２３には、ＯＳのプログラム、アプリケーションプログラム、及び各種データが格納される。なお、補助記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
【００８６】
グラフィック処理装置２４には、モニタ２４ａが接続されている。グラフィック処理装置２４は、プロセッサ２１からの命令にしたがって、デバッグ結果などの画像をモニタ２４ａの画面に表示させる。モニタ２４ａとしては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００８７】
入力インタフェース２５には、キーボード２５ａとマウス２５ｂとが接続されている。入力インタフェース２５は、キーボード２５ａやマウス２５ｂから送られてくる信号をプロセッサ２１に送信する。なお、マウス２５ｂは、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００８８】
光学ドライブ装置２６は、レーザ光などを利用して、光ディスク２６ａに記録されたデータの読み取りを行う。光ディスク２６ａは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２６ａには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００８９】
機器接続インタフェース２７は、デバッガ装置２０に周辺機器を接続するための通信インタフェースである。たとえば機器接続インタフェース２７には、メモリ装置２７ａやメモリリーダライタ２７ｂを接続することができる。メモリ装置２７ａは、機器接続インタフェース２７との通信機能を搭載した記録媒体である。メモリリーダライタ２７ｂは、メモリカード２７ｃへのデータの書き込み、またはメモリカード２７ｃからのデータの読み出しを行う装置である。メモリカード２７ｃは、カード型の記録媒体である。
【００９０】
また、機器接続インタフェース２７は、通信ケーブル２０ｂを介して半導体装置１０に接続されている。
ネットワークインタフェース２８は、ネットワーク２８ａに接続されている。ネットワークインタフェース２８は、ネットワーク２８ａを介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００９１】
以上のようなハードウェア構成によって、第２の実施の形態のデバッガ装置２０の処理機能を実現することができる。なお、第１の実施の形態のデバッガ装置４も、図９に示したデバッガ装置２０と同様のハードウェアにより実現することができる。
【００９２】
デバッガ装置２０は、たとえばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。デバッガ装置２０に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。たとえば、デバッガ装置２０に実行させるプログラムをＨＤＤ２３に格納しておくことができる。プロセッサ２１は、ＨＤＤ２３内のプログラムの少なくとも一部をＲＡＭ２２にロードし、プログラムを実行する。またデバッガ装置２０に実行させるプログラムを、光ディスク２６ａ、メモリ装置２７ａ、メモリカード２７ｃなどの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、たとえばプロセッサ２１からの制御により、ＨＤＤ２３にインストールされた後、実行可能となる。またプロセッサ２１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００９３】
（デバッグ方法）
以下、上記の半導体装置１０及びデバッガ装置２０を用いたデバッグ方法の一例を説明する。
【００９４】
図１０は、デバッガ装置による設定処理の一例の流れを示すフローチャートである。
デバッガ装置２０は、たとえば、作業者２０ａによるキーボード２５ａやマウス２５ｂの操作などによって入力される１または複数の検出対象シーケンスを取得する（ステップＳ１０）。
【００９５】
検出対象シーケンスは、指定値のほか、ドントケア値を含んでいてもよい。たとえば、ユーザ回路１２が、ＴＣＰ（Transmission Control Protocol）パケットを処理する回路であるとき、シーケンス番号などは初期値がランダムなため、ドントケア値として設定される。
【００９６】
検出対象シーケンスの取得後、デバッガ装置２０は、検出対象シーケンスを、ドントケア値を含まない先頭のシーケンスＳａと、ドントケア値を含んでいてもよい残りのシーケンスＳｂ１〜Ｓｂｎ−１に分割する（ステップＳ１１）。
【００９７】
さらに、デバッガ装置２０は、シーケンスＳａとシーケンスＳｂ１〜Ｓｂｎ−１の指定値によるシーケンスＳｂａ１〜Ｓｂａｎ−１をそれぞれＣＲＣで符号化した符号値を算出する（ステップＳ１２）。ステップＳ１２の処理では、デバッガ装置２０は、シーケンスＳａの始めの信号（たとえば、１バイト分の入力データまたは出力データ）から符号値を算出し、後続の信号によって符号値を更新していく。シーケンスＳａの最後の信号による符号値の更新が終わると、そのときの符号値がシーケンスＳａによる符号値となる。シーケンスＳｂａ１〜Ｓｂａｎ−１についても同様に処理されて符号値が算出される。
【００９８】
デバッガ装置２０は、ステップＳ１２の処理で算出した符号値を含む図４に示したような情報を、半導体装置１０に送信する（ステップＳ１３）。これによりデバッガ装置２０による設定処理が終了する。
【００９９】
図１１は、半導体装置による処理の一例の流れを示すフローチャートである。
半導体装置１０は、デバッガ装置２０から送信された符号値などの情報を受信部１３で受信する（ステップＳ２０）。そして、半導体装置１０の図示しない制御部は、受信した情報を、図４に示したように、レジスタ１１ａ１〜１１ａｐ，１１ｂ１〜１１ｂｐに設定（記憶）する（ステップＳ２１）。
【０１００】
その後、半導体装置１０の図示しない制御部は、デバッグ対象のユーザ回路１２に動作を開始させる（ステップＳ２２）。
ユーザ回路１２の動作開始後、デバッグ回路１１の符号値算出部１１ｃは、たとえば、バイト単位でユーザ回路１２の入力データｘまたは出力データｙを取得して、ＣＲＣで符号値を算出（更新）する（ステップＳ２３）。
【０１０１】
その後、第１シーケンス検出部１１ｅは、レジスタ１１ａ１〜１１ａｐに記憶された情報を読み出し、シーケンスＳａの検出を行う（ステップＳ２４）。
図１２は、シーケンスＳａの検出例を示す図である。
【０１０２】
図１２では、カウント値（時刻に相当する）＝０から開始されたシーケンスの一例が示されている。あるシーケンスＸの後に検出対象シーケンスＳが続いている。また、図１２では、符号値算出部１１ｃで算出される符号値の例が示されている。シーケンスＸの最後で算出される符号値はＣＲＣ（Ｘ）、シーケンスＳａの最後で算出される符号値はＣＲＣ（Ｘ＆Ｓａ）である。
【０１０３】
ＣＲＣの線形性から、以下の式が成り立つ。
ＣＲＣ（Ｘ＆Ｓａ）＝ＣＲＣ（（Ｘ＆０m）＋（０k＆Ｓａ））＝ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（０k＆Ｓａ）＝ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（Ｓａ）＝Ｈ（ｍ）・ＣＲＣ（Ｘ）＋ＣＲＣ（Ｓａ）                                          （１）
式（１）において、“＋”はＸＯＲ演算を表している（以降のＣＲＣに関する式でも同じである）。また、“０m”は、ｍカウント分、連続してユーザ回路１２の信号が０であるシーケンスを示している。また、シーケンスＸの長さを、ｋカウント分（ｋバイト）とすると、“０k”は、ｋカウント分、連続してユーザ回路１２の信号が０であるシーケンスを示している。
【０１０４】
また、式（１）において、ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（０k＆Ｓａ）＝ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（Ｓａ）であるのは、ＣＲＣの性質から、初期状態から連続する０は、その個数によらず、ＣＲＣの値に影響しないためである。
【０１０５】
また、式（１）においてＨ（ｍ）は、＆０mと同じ効果をもたらすように、ＣＲＣの値を変換する正則行列である。正則行列Ｈを用いたＣＲＣの演算の例は、たとえば、非特許文献１に記載されている。
【０１０６】
カウント値がｊで、符号値算出部１１ｃが算出する符号値をａ（ｊ）とする。カウント値がｊのとき、シフトレジスタ１１ｄは、ｍカウント分前の符号値ａ（ｊ−ｍ）を出力する。
【０１０７】
第１シーケンス検出部１１ｅは、符号値ａ（ｊ），ａ（ｊ−ｍ）を受けて、符号値ａ（ｊ）とａ（ｊ−ｍ）との差分に基づく以下の条件式が成立するか否かを評価する。
ａ（ｊ）−Ｈ（ｍ）・ａ（ｊ−ｍ）＝ＣＲＣ（Ｓａ）            （２）
式（２）の条件式は、カウント値がｊ−ｍ＋１から、ｊまでのシーケンスが、シーケンスＳａに一致するとき、カウント値が０からのシーケンスＸが未知であっても成立する。
【０１０８】
第１シーケンス検出部１１ｅは、上記のようなＣＲＣ差分（ＣＲＣで符号化された符号値の変化分）に基づく式（２）が成立するか否かを判定することで、シーケンスＳａを検出したか否かを判定する（ステップＳ２５）。
【０１０９】
式（２）が成立するとき、図１２に示すように、符号値ａ（ｊ−ｍ）は、ａ（ｊ−ｍ）＝ＣＲＣ（Ｘ）となり、符号値ａ（ｊ）は、ａ（ｊ）＝ＣＲＣ（Ｘ＆Ｓａ）となり、カウント値がｊのとき、シーケンスＳａの最後の信号が検出されたことになる。したがって、上記式（２）が成立するとき、第１シーケンス検出部１１ｅは、シーケンスＳａが検出されたと判定し、符号値ａ（ｊ）を期待値算出部１１ｆに送る。
【０１１０】
シーケンスＳａが検出されないとき、すなわち、式（２）が成立しないときは、ステップＳ２３からの処理が繰り返される。
期待値算出部１１ｆは符号値ａ（ｊ）を受けると、期待値の算出を行う（ステップＳ２６）。
【０１１１】
図１３は、期待値の算出例を示す図である。
上記のように、シーケンスＳａ検出時の符号値は、ａ（ｊ）＝ＣＲＣ（Ｘ＆Ｓａ）となっている。シーケンスＳａに引き続いてシーケンスＳｂ１が発生するとき、カウント値がｊ＋Ｌｅｎ（Ｓｂａ１）のとき、符号値の期待値ｂ（ｊ＋Ｌｅｎ（Ｓｂａ１））であるＣＲＣ（Ｘ＆Ｓａ＆Ｓｂａ１）は、以下の式で与えられる。
【０１１２】
ＣＲＣ（Ｘ＆Ｓａ＆Ｓｂａ１）＝ＣＲＣ（Ｘ＆Ｓａ＆０Len(Sba1)）＋ＣＲＣ（Ｓｂａ１）＝Ｈ（Ｌｅｎ（Ｓｂａ１））・ＣＲＣ（Ｘ＆Ｓａ）＋ＣＲＣ（Ｓｂａ１）    （３）
ここで、ＣＲＣ（Ｓｂａ１）は、シーケンスＳｂａ１の符号値であり、レジスタ１１ｂ１〜１１ｂｐの何れかに記憶されているものである。
【０１１３】
したがって、期待値算出部１１ｆは、シーケンスＳａと同じ識別情報ＢＰｉｄをもつシーケンスＳｂａ１の符号値をレジスタ１１ｂ１〜１１ｂｐの何れかから読み出して、上記の式（３）により期待値を算出する。
【０１１４】
その後、符号値算出部１１ｃによる符号値の更新が行われ（ステップＳ２７）、一致判定部１１ｈ１は、符号値算出部２ｂから出力される符号値と、期待値とが一致するか否かを判定する（ステップＳ２８）。一致判定部１１ｈ１が、符号値算出部２ｂから出力される符号値と、期待値とが一致しないと判定したとき、ステップＳ２３からの処理が繰り返される。一致判定部１１ｈ１は、符号値と期待値とが一致したと判定したとき、一致した旨を示す信号を出力する。
【０１１５】
部分シーケンス終了判定部１１ｈ２は、その信号を受けると、レジスタ１１ｂ１〜１１ｂｐから、ドントケア値によるシーケンスの長さを取得する。そして、部分シーケンス終了判定部１１ｈ２は、その長さに基づき、シーケンスＳｂ１〜Ｓｂｎ−１（部分シーケンス）のいずれかが終了したか否かを判定する（ステップＳ２９）。シーケンスＳｂ１〜Ｓｂｎ−１のいずれかが終了するまで、ステップＳ２９の処理が繰り返される。
【０１１６】
図１４は、シーケンスの終了判定処理を説明する図である。
部分シーケンス終了判定部１１ｈ２は、カウント値が、ｊ＋Ｌｅｎ（Ｓｂａ１）のときに、符号値と期待値とが一致した旨の信号を受けたとする。このとき、部分シーケンス終了判定部１１ｈ２は、シーケンスＳｂａ１と同じ識別情報ＢＰｉｄをもつ、ドントケア値によるシーケンスＸ１の長さＬｅｎ（Ｘ１）を、レジスタ１１ｂ１〜１１ｂｐの何れかから読み出す。なお、Ｌｅｎ（Ｘ１）はカウント数（またはバイト数）で表されているものとする。そして、部分シーケンス終了判定部１１ｈ２は、ｊ＋Ｌｅｎ（Ｓｂａ１）にＬｅｎ（Ｘ１）を加算した値を保持しておく。
【０１１７】
カウント値が更新され、ｊ＋Ｌｅｎ（Ｓｂａ１）＋Ｌｅｎ（Ｘ１）となると、部分シーケンス終了判定部１１ｈ２は、シーケンスＳｂａが終了した旨を示す信号を出力する。
部分シーケンス終了判定部１１ｈ２から、シーケンスＳｂ１〜Ｓｂｎ−１のいずれかが終了した旨を示す信号が出力されると、最終シーケンス判定部１１ｈ３は、最終シーケンス（シーケンスＳｂｎ−１）が終了したのか否かを判定する（ステップＳ３０）。
【０１１８】
最終シーケンス判定部１１ｈ３が、最終シーケンスが終了していないと判定したとき、ステップＳ２６からの処理が繰り返される。
たとえば、図１４に示したように、カウント値がｊ＋Ｌｅｎ（Ｓｂａ１）＋Ｌｅｎ（Ｘ１）のときは、シーケンスＳｂ１までしか終了していないため、再び、ステップＳ２６の期待値を算出する処理が行われる。その際、期待値算出部１１ｆは、図４に示したようなポインタＮｅｘｔの値を参照して、次のシーケンスＳｂ２の情報を取得する。シーケンスＳｂ２に含まれる指定値によるシーケンスＳｂａ２の終了時の期待値は、符号値ａ（ｊ＋Ｌｅｎ（Ｓｂａ１）＋Ｌｅｎ（Ｘ１））と、シーケンスＳｂａ２の符号値ＣＲＣ（Ｓｂａ２）に基づき算出される。符号値ａ（ｊ＋Ｌｅｎ（Ｓｂａ１）＋Ｌｅｎ（Ｘ１））は、ＣＲＣ（Ｘ＆Ｓａ＆Ｓｂ１）に相当する。
【０１１９】
最終シーケンス判定部１１ｈ３は、最終シーケンスが終了したと判定したとき、検出対象シーケンスＳを検出した旨の信号を出力し、たとえば、その信号を用いて、デバッグ対象であるユーザ回路１２の動作を停止させる（ステップＳ３１）。以上で、ある検出対象シーケンスの検出時のユーザ回路１２の停止処理が終わる。
【０１２０】
最終シーケンス判定部１１ｈ３は、たとえば、“１”を出力してユーザ回路１２へクロック信号の供給を停止することで、ユーザ回路１２の動作を停止する。また、最終シーケンス判定部１１ｈ３は、ユーザ回路１２へのデータの入力またはユーザ回路１２からのデータの出力を遮断して、ユーザ回路１２が停止しているように扱うようにしてもよい。
【０１２１】
その後は、たとえば、デバッガ装置２０により、ユーザ回路１２の各部の信号の様子を調査するなどのデバッグ作業が行われる。
以下、上記のような、デバッグ方法を用いて、たとえば、“ＡＢ？？Ｃ”という５バイトの検出対象シーケンスを検出する例を説明する。“？”はドントケア値を示し、その他の“Ａ”，“Ｂ”，“Ｃ”は指定値を示している。このような検出対象シーケンスが、“Ａ”、“Ｂ？？”，“Ｃ”という３つのシーケンスＳａ，Ｓｂ１，Ｓｂ２に分割されているとする。そして、ユーザ回路１２の入力データｘが以下のように遷移したとする。
【０１２２】
図１５は、入力データの遷移の一例を示す図である。
図１５の例では、入力データｘは、“ＹＡＢＡＢＤＣＣ”というシーケンスで遷移している。ｔ１〜ｔ８は、カウント値（時刻に相当する）を示している。
【０１２３】
このような入力データｘのシーケンスから、上記のような検出対象シーケンスを検出する際、分割した各シーケンスＳａ，Ｓｂａ１（シーケンスＳｂ１の指定値によるシーケンス、つまり“Ｂ”），Ｓｂ２の検出結果は、たとえば、以下のようになる。
【０１２４】
図１６は、検出対象シーケンスの検出処理時の各シーケンスの検出及び終了判定結果の一例を示す図である。
図１６には、各時刻でのシーケンスＳａ，Ｓｂａ１，Ｓｂ２の検出結果、シーケンスＳｂ１，Ｓｂ２の終了判定結果が示されている。なお“１”はシーケンスＳａ，Ｓｂａ１，Ｓｂ２が検出された、またはシーケンスＳｂ１が終了したと判定されたことを示す。シーケンスＳｂ２については、ドントケア値を含まないため、検出結果と終了判定結果は同じ値となる。
【０１２５】
時刻ｔ１では、入力データｘは“Ｙ”であるため、シーケンスＳａは検出されず、シーケンスＳａ，Ｓｂａ１，Ｓｂ２の検出結果及び、シーケンスＳｂ１の終了判定結果は、いずれも“０”となる。
【０１２６】
時刻ｔ２では、入力データｘが“Ａ”であるため、第１シーケンス検出部１１ｅでシーケンスＳａが検出され、検出結果は“１”となる。
時刻ｔ３では、入力データｘが“Ｂ”であるため、シーケンスＳａの検出結果が“０”となるが、シーケンスＳｂａ１の検出結果が“１”となる。一致判定部１１ｈ１で、シーケンスＳｂａ１の終了時の期待値と、符号値算出部１１ｃから出力される符号値とが一致するためである。
【０１２７】
時刻ｔ４では、入力データｘが再び“Ａ”であるため、シーケンスＳａの検出結果が“１”となる。シーケンスＳｂａ１の検出結果は“０”に戻る。
シーケンスＳｂａ１の検出時から、２カウント分進んだ時刻ｔ５では、シーケンスＳｂ１の終了判定結果が“１”となる。部分シーケンス終了判定部１１ｈ２で、ドントケア値“？？”によるシーケンスＸ１の長さに相当する２カウント分の経過が検出されたためである。なお、時刻ｔ５では、入力データｘが“Ｂ”であるため、シーケンスＳｂａ１の検出結果は“１”となっている。
【０１２８】
時刻ｔ６では、入力データｘが“Ｄ”となっており、シーケンスＳａ，Ｓｂａの検出結果とも“０”になる。また、シーケンスＳｂ１の終了判定結果についても“０”となる。
時刻ｔ５におけるシーケンスＳｂａ１の検出時から、２カウント分進んだ時刻ｔ７では、再びシーケンスＳｂ１の終了判定結果が“１”となる。
【０１２９】
そして、時刻ｔ８では、入力データｘが“Ｃ”となり、シーケンスＳｂ２の検出結果及び終了判定結果が“１”となる。
つまり、上記の例では、時刻ｔ８において、検出対象シーケンスが検出されたことになる。
【０１３０】
以上のような半導体装置１０、デバッグ回路１１及びデバッガ装置２０によれば、第１の実施の形態の半導体装置１、デバッグ回路２及びデバッガ装置４と同様の効果が得られる。また、複数の検出対象シーケンスのそれぞれのシーケンスＳａとシーケンスＳｂａ１〜Ｓｂａｎ−１の符号値と、シーケンスＸ１〜Ｘｎ−１の長さに基づきユーザ回路１２の停止処理を行うことが可能であり、複数の停止条件でユーザ回路１２を停止できる。
【０１３１】
以上、実施の形態に基づき、本発明のデバッグ回路、半導体装置及びデバッグ方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【０１３２】
１  半導体装置
２  デバッグ回路
２ａ  記憶部
２ｂ  符号値算出部
２ｃ  遅延部
２ｄ  第１シーケンス検出部
２ｅ  期待値算出部
２ｆ  判定部
２ｆ１  一致判定部
２ｆ２  部分シーケンス終了判定部
２ｆ３  最終シーケンス判定部
２ｇ  カウンタ
３  デバッグ対象回路
４  デバッガ装置
Ｓ  検出対象シーケンス
Ｓａ，Ｓｂ１，Ｓｂ２，Ｘ  シーケンス
【図１】
0006458626.tif 000002
【図２】
0006458626.tif 000003
【図３】
0006458626.tif 000004
【図４】
0006458626.tif 000005
【図５】
0006458626.tif 000006
【図６】
0006458626.tif 000007
【図７】
0006458626.tif 000008
【図８】
0006458626.tif 000009
【図９】
0006458626.tif 000010
【図１０】
0006458626.tif 000011
【図１１】
0006458626.tif 000012
【図１２】
0006458626.tif 000013
【図１３】
0006458626.tif 000014
【図１４】
0006458626.tif 000015
【図１５】
0006458626.tif 000016
【図１６】
0006458626.tif 000017