(57)【特許請求の範囲】
【請求項１】
ワード単位で処理を行う回路における信号のシーケンスに応じて値が変わる符号化方式で算出され、検出対象とする検出対象シーケンスのうち、先頭から最初の第１のワードに収まる第１のシーケンスを符号化した第１の符号値と、残りの第２のシーケンスを符号化した第２の符号値と、前記第１のワードの先頭から、前記検出対象シーケンスの先頭までの第１のバイト数とを記憶する記憶部と、
前記信号のシーケンスに基づき前記符号化方式でバイトごとの第３の符号値を算出する符号値算出部と、
前記第３の符号値のうち、前記信号のシーケンスの前記第１のワード内の最後のバイトでの第４の符号値と、前記第１のバイト数に基づく位置のバイトでの第５の符号値との第１の差分を算出し、前記第１の差分と前記第１の符号値との比較結果に基づき前記第１のシーケンスを検出する第１シーケンス検出部と、
前記第３の符号値のうち、前記第１のシーケンスが検出されたときの第６の符号値と、前記第２の符号値とに基づき、前記検出対象シーケンスの終了時における前記第３の符号値の期待値を算出する期待値算出部と、
前記第３の符号値と、前記期待値とが一致したときに前記検出対象シーケンスを検出した旨を示す信号を出力する判定部と、
を有することを特徴とするデバッグ回路。
【請求項２】
前記符号化方式は、線形性を有する符号値を算出する方式であることを特徴とする請求項１に記載のデバッグ回路。
【請求項３】
前記検出対象シーケンスが、前記第１のワードに収まるとき、前記第１シーケンス検出部は、前記第１のバイト数と前記検出対象シーケンスのバイト数とを加算した第２のバイト数に基づく位置のバイトでの第７の符号値と、前記第５の符号値との第２の差分を算出し、前記第２の差分と前記第１の符号値との比較結果に基づき、前記検出対象シーケンスを検出する、ことを特徴とする請求項１または２に記載のデバッグ回路。
【請求項４】
前記記憶部は、前記第１のシーケンスに含まれる１または複数の第３のシーケンスを前記符号化方式で符号化した第８の符号値を有しており、
前記第１シーケンス検出部は、前記第３のシーケンスを、前記第１のシーケンスに含まれる複数バイトに対応した複数の第９の符号値間の差分と、前記第８の符号値に基づき検出し、全ての前記第３のシーケンスが検出できたときに、前記第１のシーケンスが検出されたと判定する、ことを特徴とする請求項１乃至３の何れか一項に記載のデバッグ回路。
【請求項５】
前記第１のバイト数は、前記第１のワードの長さに応じて、前記記憶部に、複数記憶されており、前記第１の符号値と、前記第２の符号値も、前記第１のバイト数のそれぞれに対応して複数記憶されており、
前記第１シーケンス検出部は、前記第１のバイト数のそれぞれに対応する前記第１のシーケンスを検出する、
ことを特徴とする請求項１乃至４の何れか一項に記載のデバッグ回路。
【請求項６】
前記検出対象シーケンスは複数であり、前記第１シーケンス検出部は、前記検出対象シーケンスのそれぞれに対応した前記第１のシーケンスを、同時に検出することを特徴とする請求項１乃至５の何れか一項に記載のデバッグ回路。
【請求項７】
前記第１シーケンス検出部は、前記符号値算出部で算出される前記第３の符号値に、ハミング行列を乗算するワード長分の乗算器と、前記乗算器のそれぞれの出力間の差分を算出する減算器とを有し、前記減算器の出力と、前記第１の符号値との比較結果に基づき、前記第１のシーケンスを検出する、ことを特徴とする請求項１乃至６の何れか一項に記載のデバッグ回路。
【請求項８】
ワード単位で処理を行う回路と、
前記回路における信号のシーケンスに応じて値が変わる符号化方式で算出され、検出対象とする検出対象シーケンスのうち、先頭から最初の第１のワードに収まる第１のシーケンスを符号化した第１の符号値と、残りの第２のシーケンスを符号化した第２の符号値と、前記第１のワードの先頭から、前記検出対象シーケンスの先頭までの第１のバイト数とを記憶する記憶部と、前記信号のシーケンスに基づき前記符号化方式でバイトごとの第３の符号値を算出する符号値算出部と、前記第３の符号値のうち、前記信号のシーケンスの前記第１のワード内の最後のバイトでの第４の符号値と、前記第１のバイト数に基づく位置のバイトでの第５の符号値との第１の差分を算出し、前記第１の差分と前記第１の符号値との比較結果に基づき前記第１のシーケンスを検出する第１シーケンス検出部と、前記第３の符号値のうち、前記第１のシーケンスが検出されたときの第６の符号値と、前記第２の符号値とに基づき、前記検出対象シーケンスの終了時における前記第３の符号値の期待値を算出する期待値算出部と、前記第３の符号値と、前記期待値とが一致したときに前記検出対象シーケンスを検出した旨を示す信号を出力する判定部と、を備えたデバッグ回路と、
を有することを特徴とする半導体装置。
【請求項９】
デバッガ装置が、
ワード単位で処理を行う回路における信号のシーケンスから検出する検出対象シーケンスを、先頭から最初の第１のワードに収まる第１のシーケンスと、残りの第２のシーケンスとに分割し、
前記信号のシーケンスに応じて値が変わる符号化方式で、前記第１のシーケンスを符号化した第１の符号値と、前記第２のシーケンスを符号化した第２の符号値とを算出し、
前記第１の符号値、前記第２の符号値及び、前記第１のワードの先頭から前記検出対象シーケンスの先頭までの第１のバイト数を送信し、
前記回路を備えた半導体装置が、
前記第１の符号値、前記第２の符号値及び前記第１のバイト数を受信し、
前記信号のシーケンスに基づき前記符号化方式でバイトごとの第３の符号値を算出し、
前記第３の符号値のうち、前記信号のシーケンスの前記第１のワード内の最後のバイトでの第４の符号値と、前記第１のバイト数に基づく位置のバイトでの第５の符号値との第１の差分を算出し、前記第１の差分と前記第１の符号値との比較結果に基づき前記第１のシーケンスを検出し、
前記第３の符号値のうち、前記第１のシーケンスが検出されたときの第６の符号値と、前記第２の符号値とに基づき、前記検出対象シーケンスの終了時における前記第３の符号値の期待値を算出し、
前記第３の符号値と、前記期待値とが一致したときに前記検出対象シーケンスを検出した旨を示す信号を出力する、
ことを特徴とするデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグ回路、半導体装置及びデバッグ方法に関する。
【背景技術】
【０００２】
ハードウェアが正常に動作しているか否かを確認する実機デバッグの手法として、デバッグ対象の回路の実装時に、デバッグ用の回路を挿入してデバッグを行うロジックアナライザ手法がある。
【０００３】
ロジックアナライザ手法において、デバッグ用の回路は、ユーザによって指定されたデバッグ対象の回路の信号の時間変化を監視する。そして、デバッグ用の回路は、信号の値が所定の停止条件と一致したときには、その回路の動作を停止させ、トレースメモリに格納された信号の時間変化を表示装置などに出力する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−４６３９３号公報
【非特許文献】
【０００５】
【非特許文献１】M. Walma, "Pipelined Cyclic Redundancy Check (CRC) Calculation", Proc. of 16th Int'l Conf. on Computer Communications and Networks, pp. 365-370, 2007.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、ソフトウェアのデバッグではブレークポイントを使用して、プログラムを様々な条件で停止させることができる。しかしながら、ハードウェアのデバッグでは、トレースメモリの容量やデバッグに使える信号線の本数などのハードウェア上の制約により、ユーザが意図した条件やタイミングでハードウェアを停止させることが難しく、効率よくデバッグを行うことは難しい。したがって、デバッグの作業効率を向上することが課題である。
【課題を解決するための手段】
【０００７】
発明の一観点によれば、ワード単位で処理を行う回路における信号のシーケンスに応じて値が変わる符号化方式で算出され、検出対象とする検出対象シーケンスのうち、先頭から最初の第１のワードに収まる第１のシーケンスを符号化した第１の符号値と、残りの第２のシーケンスを符号化した第２の符号値と、前記第１のワードの先頭から、前記検出対象シーケンスの先頭までの第１のバイト数とを記憶する記憶部と、前記信号のシーケンスに基づき前記符号化方式でバイトごとの第３の符号値を算出する符号値算出部と、前記第３の符号値のうち、前記信号のシーケンスの第２のワード内の最後のバイトでの第４の符号値と、前記第１のバイト数に基づく位置のバイトでの第５の符号値との差分と、前記第１の符号値との比較結果に基づき前記第１のシーケンスを検出する第１シーケンス検出部と、前記第３の符号値のうち、前記第１のシーケンスが検出されたときの第６の符号値と、前記第２の符号値とに基づき、前記検出対象シーケンスの終了時における前記第３の符号値の期待値を算出する期待値算出部と、前記第３の符号値と、前記期待値とが一致したときに前記検出対象シーケンスを検出した旨を示す信号を出力する判定部と、を有するデバッグ回路が提供される。
【０００８】
また、発明の一観点によれば、ワード単位で処理を行う回路と、前記回路における信号のシーケンスに応じて値が変わる符号化方式で算出され、検出対象とする検出対象シーケンスのうち、先頭から最初の第１のワードに収まる第１のシーケンスを符号化した第１の符号値と、残りの第２のシーケンスを符号化した第２の符号値と、前記第１のワードの先頭から、前記検出対象シーケンスの先頭までの第１のバイト数とを記憶する記憶部と、前記信号のシーケンスに基づき前記符号化方式でバイトごとの第３の符号値を算出する符号値算出部と、前記第３の符号値のうち、前記信号のシーケンスの第２のワード内の最後のバイトでの第４の符号値と、前記第１のバイト数に基づく位置のバイトでの第５の符号値との差分と、前記第１の符号値との比較結果に基づき前記第１のシーケンスを検出する第１シーケンス検出部と、前記第３の符号値のうち、前記第１のシーケンスが検出されたときの第６の符号値と、前記第２の符号値とに基づき、前記検出対象シーケンスの終了時における前記第３の符号値の期待値を算出する期待値算出部と、前記第３の符号値と、前記期待値とが一致したときに前記検出対象シーケンスを検出した旨を示す信号を出力する判定部と、を備えたデバッグ回路と、を有する半導体装置が提供される。
【０００９】
また、発明の一観点によれば、デバッガ装置が、ワード単位で処理を行う回路における信号のシーケンスから検出する検出対象シーケンスを、先頭から最初の第１のワードに収まる第１のシーケンスと、残りの第２のシーケンスとに分割し、前記信号のシーケンスに応じて値が変わる符号化方式で、前記第１のシーケンスを符号化した第１の符号値と、前記第２のシーケンスを符号化した第２の符号値とを算出し、前記第１の符号値、前記第２の符号値及び、前記第１のワードの先頭から前記検出対象シーケンスの先頭までの第１のバイト数を送信し、前記回路を備えた半導体装置が、前記第１の符号値、前記第２の符号値及び前記第１のバイト数を受信し、前記信号のシーケンスに基づき前記符号化方式でバイトごとの第３の符号値を算出し、前記第３の符号値のうち、前記信号のシーケンスの第２のワード内の最後のバイトでの第４の符号値と、前記第１のバイト数に基づく位置のバイトでの第５の符号値との差分と、前記第１の符号値との比較結果に基づき前記第１のシーケンスを検出し、前記第３の符号値のうち、前記第１のシーケンスが検出されたときの第６の符号値と、前記第２の符号値とに基づき、前記検出対象シーケンスの終了時における前記第３の符号値の期待値を算出し、前記第３の符号値と、前記期待値とが一致したときに前記検出対象シーケンスを検出した旨を示す信号を出力する、デバッグ方法が提供される。
【発明の効果】
【００１０】
開示のデバッグ回路、半導体装置及びデバッグ方法によれば、デバッグの作業効率を向上できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態の半導体装置、デバッグ回路及びデバッガ装置の一例を示す図である。
【図２】検出対象シーケンスが１ワードに収まるときの検出処理を説明する図である。
【図３】第２の実施の形態の半導体装置及びデバッガ装置を含むデバッグシステムの例を示す図である。
【図４】半導体装置の一例を示す図である。
【図５】レジスタの格納例を示す図である。
【図６】シフト部の一例を示す図である。
【図７】レジスタへの期待値の格納例を示す図である。
【図８】デバッガ装置のハードウェア例を示す図である。
【図９】デバッガ装置による設定処理の一例の流れを示すフローチャートである。
【図１０】パケットの一例を示す図である。
【図１１】半導体装置による処理の一例の流れを示すフローチャートである。
【図１２】ユーザ回路の信号が、１ワードに収まらない検出対象シーケンスを含むシーケンスで遷移する例を示す図である。
【図１３】シーケンスＳａの検出例を示す図である。
【図１４】ユーザ回路の信号が、１ワードに収まる検出対象シーケンスを含むシーケンスで遷移する例を示す図である。
【図１５】ワードに収まる検出対象シーケンスＳの検出例を示す図である。
【図１６】検出対象シーケンスＳの検出用の期待値の算出例を示す図である。
【図１７】検出対象シーケンスの検出例を示す図である。
【図１８】第１シーケンス検出部の一例を示す図である。
【図１９】シーケンスＳａの検出例を示す図である。
【図２０】４つのシーケンスの例を示す図である。
【図２１】Ｈ（ｋ）を乗じた符号値の例が示されている。
【図２２】第１シーケンス検出部の他の例を示す図である。
【図２３】開始オフセットが未指定のときのレジスタの格納例を示す図である。
【発明を実施するための形態】
【００１２】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
（第１の実施の形態）
図１は、第１の実施の形態の半導体装置、デバッグ回路及びデバッガ装置の一例を示す図である。
【００１３】
半導体装置１は、デバッグ回路２とハードウェアであるデバッグ対象回路３とを有している。
デバッグ回路２は、デバッグ対象回路３における任意の信号のシーケンスから、所定の信号のシーケンス（以下検出対象シーケンスと呼ぶ）を検出し、検出した旨の検出信号を出力する回路である。検出信号は、たとえば、デバッグ対象回路３の動作を停止させるのに用いられる。
【００１４】
なお、デバッグ対象回路３は、複数バイトによるワード単位でデータ処理（パラレルデータ処理）を行う回路である。
また、検出対象シーケンスは、ワードの先頭から始まらないものも含む。たとえば、デバッグ対象回路３が、１ワードが８バイトのＰＣＩ（Peripheral Component Interconnect）ｅｘｐｒｅｓｓのトランザクション層パケットを処理する回路である場合を考える。このパケットは、パケット種別、デバイス番号、書き込みアドレスなどを示す信号シーケンスを含む。これらの信号シーケンスは、ワードの先頭（境界）から始まらないものもある。本実施の形態のデバッグ回路２は、そのような信号のシーケンスも検出対象として設定できるようにしたものである。
【００１５】
図１には、ワードＷａ，Ｗｂに跨る検出対象シーケンスの例が示されている。楕円状の要素は、バイトを表している。８バイトのワードＷａの先頭から検出対象シーケンスの先頭までの間には、バイト数ｓｏｆ（図１の例では２）のオフセットがある。図１では、検出対象シーケンスのうち、先頭から最初のワードＷａの境界までの（ワードＷａに収まる）シーケンスＳａ、残りの部分がシーケンスＳｂと示されている。
【００１６】
デバッグ回路２は、記憶部２ａ、符号値算出部２ｂ、シフト部２ｃ、第１シーケンス検出部２ｄ、期待値算出部２ｅ、判定部２ｆ、ＯＲ回路２ｇを有している。
記憶部２ａは、上記に示したようなシーケンスＳａを符号化した符号値Ａａと、シーケンスＳｂを符号化した符号値Ａｂを記憶する。また、記憶部２ａは、バイト数ｓｏｆ（０〜ｗ−１）（ｗはワード長）を記憶する。記憶部２ａは、さらに、図１に示すように、シーケンスＳａ，Ｓｂの長さｌｅｎａ，ｌｅｎｂと、検出対象シーケンスの識別番号ＩＤを記憶するようにしてもよい。
【００１７】
符号値Ａａ，Ａｂは、デバッグ対象回路３における信号のシーケンスに応じて値が変わる符号化方式で算出される。
符号値Ａａ，Ａｂは、たとえば、線形性を有する符号値（線形符号）であり、ＣＲＣ（Cyclic Redundancy Check）などの符号化方式で、デバッガ装置４にて算出される。
【００１８】
符号値算出部２ｂは、デバッグ対象回路３における信号のシーケンスをワード単位で取得し、信号のシーケンスに基づき、デバッガ装置４が符号値Ａａ，Ａｂを算出する際の符号化方式と同じ符号化方式で、バイトごとの符号値を算出する。
【００１９】
なお、符号値算出部２ｂは、後述する式（１）に基づいて、１ワード分のデータから、１ワード分のバイトごとの符号値を同時に計算可能である。また、符号値算出部２ｂは、たとえば、図示しないカウンタを有しており、取得するデータに含まれるバイト数をカウントする機能も有する。
【００２０】
図１では、符号値算出部２ｂが、デバッグ対象回路３の信号である入力データｘまたは出力データｙの１ワード分のデータＤ（ｊ），…Ｄ（ｊ＋ｗ−１）を取得したときの例が示されている。ｊは、符号値算出部２ｂが取得するバイトのカウント値を示し、Ｄ（ｊ）は、ｊ番目のバイトのデータを示している。また、ｗは、１ワードに含まれるバイト数を示し、ワード長を意味する。
【００２１】
符号値算出部２ｂは、このようなデータＤ（ｊ），…Ｄ（ｊ＋ｗ−１）を取得したとき、符号値ａ（ｊ），…ａ（ｊ＋ｗ−１）を算出する。
シフト部２ｃは、符号値算出部２ｂが処理するワードの１つ前のワードの最後のバイトでの符号値を、ワード分の符号値の前に付加して、第１シーケンス検出部２ｄに供給する。図１には、符号値算出部２ｂが処理するワードの１つ前のワードの最後のバイトでの符号値ａ（ｊ−１）が、ワード分の符号値ａ（ｊ），…ａ（ｊ＋ｗ−１）に付加され、Ａ（ｊ）として第１シーケンス検出部２ｄに供給されている例が示されている。
【００２２】
第１シーケンス検出部２ｄは、検出対象シーケンスのうち、シーケンスＳａを検出する。第１シーケンス検出部２ｄは、符号値算出部２ｂで算出される符号値のうち、ワード内の最後のバイトでの符号値と、前述したバイト数ｓｏｆに基づく位置のバイトでの符号値との差分と、符号値Ａａとの比較結果に基づき検出を行う。
【００２３】
図１には、未知のシーケンスＸの後に、シーケンスＳａ，Ｓｂを含む検出対象シーケンスが続くときのシーケンスＳａの検出例が示されている。シーケンスＳａは、ワードＷ１内に含まれている。シーケンスＳａのワードＷ１内での開始位置は、バイト数ｓｏｆに対応する位置であり、図１の例では、バイトカウント値がｊ＋ｓｏｆの位置となっている。また、ワードＷ１の最後のバイトの位置は、バイトカウント値がｊ＋ｗ−１の位置となっている。
【００２４】
このとき、ワードＷ１の最後のバイトでの符号値ａ（ｊ＋ｗ−１）と、バイトカウント値がｊ＋ｓｏｆの１つ前の位置のバイトでの符号値ａ（ｊ＋ｓｏｆ−１）との差分が、符号値Ａａに相当する。このため、第１シーケンス検出部２ｄは、シーケンスＳａを検出できる。
【００２５】
第１シーケンス検出部２ｄは、シーケンスＳａを検出すると、検出したときの符号値を期待値算出部２ｅに供給する。図１の例では、符号値ａ（ｊ＋ｗ−１）が期待値算出部２ｅに供給されている。
【００２６】
なお、第１シーケンス検出部２ｄは、ワードＷ１に収まる検出対象シーケンスを検出する機能も有する。この処理については後述する。
期待値算出部２ｅは、符号値算出部２ｂで算出される符号値のうち、シーケンスＳａが検出されたときの符号値と、符号値Ａｂとに基づき、検出対象シーケンスの終了時における、符号値算出部２ｂで算出される符号値の期待値を算出する。
【００２７】
たとえば、期待値算出部２ｅは、シーケンスＳａが検出されたときの符号値が符号値ａ（ｊ＋ｗ−１）のとき、符号値ａ（ｊ＋ｗ−１）と符号値ＡｂのＸＯＲ演算から期待値ｂ（ｊ＋ｎ＋ｓｏｆ−１）を算出する（後述の式（５）参照）。なお、ｎは検出対象シーケンスの長さ（バイト数）である。
【００２８】
判定部２ｆは、符号値算出部２ｂから出力される符号値と、期待値とが一致したときに、検出対象シーケンスを検出した旨を示す信号を出力する。図１には、符号値算出部２ｂから出力される符号値ａ（ｊ＋ｎ＋ｓｏｆ−１）が期待値ｂ（ｊ＋ｎ＋ｓｏｆ−１）に一致した例が示されている。このとき、判定部２ｆは、検出対象シーケンスを検出した旨の信号を出力する。この信号は、たとえば、デバッグ対象回路３の動作を停止する旨を指示する回路停止信号となる。
【００２９】
判定部２ｆは、たとえば、回路停止信号により、デバッグ対象回路３へクロック信号の供給を停止することで、デバッグ対象回路３の動作を停止する。また、判定部２ｆは、デバッグ対象回路３へのデータの入力またはデバッグ対象回路３からのデータの出力を遮断して、デバッグ対象回路３が停止しているように扱うようにしてもよい。
【００３０】
デバッガ装置４は、半導体装置１と通信してデバッグを行う装置である。デバッガ装置４は、たとえば、コンピュータでありソフトウェアで以下の処理を行う。デバッガ装置４は、まず、ユーザ（デバッグ作業者）から検出対象シーケンスを取得する（ステップＳ１）。次にデバッガ装置４は、検出対象シーケンスをワードＷａの境界でシーケンスＳａ，Ｓｂの２つに分割し（ステップＳ２）、シーケンスＳａとシーケンスＳｂをそれぞれ符号化した符号値Ａａ，Ａｂを算出する（ステップＳ３）。そして、デバッガ装置４は、算出した符号値Ａａ，Ａａやバイト数ｓｏｆを含むシーケンスＳａ，Ｓｂの情報を半導体装置１に出力（送信）する（ステップＳ４）。なお、検出対象シーケンスがワードＷａに収まるときには、シーケンスＳａが検出対象シーケンスに対応し、シーケンスＳｂはない。
【００３１】
以下、半導体装置１とデバッガ装置４を含むデバッグシステムによるデバッグ方法の一例を説明する。
デバッガ装置４による上記のステップＳ１〜Ｓ４の処理で算出され、送信されたシーケンスＳａ，Ｓｂの情報は、半導体装置１のデバッグ回路２の記憶部２ａに記憶される。
【００３２】
デバッグ回路２は、デバッグ対象回路３の信号の遷移を検出しており、符号値算出部２ｂは、図１の例では、入力データｘまたは出力データｙのシーケンスに基づき、符号値をワード単位で更新する。
【００３３】
たとえば、図１のように、デバッグ回路２が、デバッグ対象回路３から、１ワード分のデータＤ（ｊ），…Ｄ（ｊ＋ｗ−１）を取得したとき、符号値算出部２ｂの出力は、符号値ａ（ｊ），…ａ（ｊ＋ｗ−１）に更新される。
【００３４】
符号値算出部２ｂから出力された符号値ａ（ｊ），…ａ（ｊ＋ｗ−１）は、シフト部２ｃにて、符号値ａ（ｊ−１）が加えられたのち、第１シーケンス検出部２ｄに供給される。
【００３５】
デバッグ回路２が、上記のようなシーケンスＳａ，Ｓｂを含む検出対象シーケンスを検出するとき、第１シーケンス検出部２ｄは、符号値ａ（ｊ−１），ａ（ｊ），…ａ（ｊ＋ｗ−１）と符号値Ａａとを受けて、上記の方法によって、シーケンスＳａを検出する。そして、第１シーケンス検出部２ｄは、シーケンスＳａを検出したときの符号値ａ（ｊ＋ｗ−１）を、期待値算出部２ｅに供給する。期待値算出部２ｅは、符号値ａ（ｊ＋ｗ−１）と符号値Ａｂとに基づき前述した期待値ｂ（ｊ＋ｎ＋ｓｏｆ−１）を算出する。
【００３６】
入力データｘと出力データｙが遷移して、符号値算出部２ｂから出力される符号値ａ（ｊ＋ｎ＋ｓｏｆ−１）が、期待値ｂ（ｊ＋ｎ＋ｓｏｆ−１）に一致したとき、判定部２ｆは、検出対象シーケンスを検出した旨を示す信号を出力する。このとき、判定部２ｆは、たとえば、“１”を出力する。これにより、ＯＲ回路２ｇは、“１”を出力し、たとえば、デバッグ対象回路３の動作を停止する。
【００３７】
その後は、たとえば、デバッガ装置４により、デバッグ対象回路３の各部の信号の様子を調査するなどのデバッグ作業が行われる。
なお、デバッグ回路２は、ワードＷ１に収まる検出対象シーケンスを検出するとき、以下のような処理を行う。
【００３８】
図２は、検出対象シーケンスが１ワードに収まるときの検出処理を説明する図である。
図２に示すように、検出対象シーケンスＳが、ワードＷ１に収まるとき、第１シーケンス検出部２ｄは、前述した符号値ａ（ｊ＋ｓｏｆ−１）と、符号値ａ（ｊ＋ｅｏｆ）との差分と、符号値Ａａとの比較結果に基づき検出を行う。ここで、バイト数ｅｏｆは、検出対象シーケンスのバイト数ｎとバイト数ｓｏｆを加算したバイト数である。
【００３９】
第１シーケンス検出部２ｄは、符号値ａ（ｊ＋ｓｏｆ−１）と、符号値ａ（ｊ＋ｅｏｆ）との差分が、符号値Ａａと一致したときには、検出対象シーケンスＳを検出した旨の信号として、たとえば、“１”を出力する。このときも、ＯＲ回路２ｇは、“１”を出力し、たとえば、デバッグ対象回路３の動作を停止する。
【００４０】
このように、本実施の形態のデバッグ回路２は、ワードの先頭から検出対象シーケンスの先頭までのバイト数を記憶しておき、そのバイト数に基づくバイト位置での符号値を用いて、検出対象シーケンスの検出を行う。これによって、ワード境界に捉われず検出対象シーケンスを設定できる。つまり、ワードの先頭から始まらない信号シーケンスも検出対象シーケンスとして設定できる。たとえば、ワード内に動作環境で変動するような値が指定されるフィールドがあってもそのフィールドを避けて検出対象シーケンスの設定が可能になる。これにより、ユーザが意図した条件やタイミングでハードウェアを停止させることができるようになり、デバッグ時の作業効率が向上する。
【００４１】
また、上記のような符号値を用いることで、ハードウェア上の制約があっても、様々な条件でデバッグ対象回路３を停止することが容易になり、デバッグの作業効率が上がる。
また、デバッグ回路２は、入力データｘや出力データｙを直接扱うのではなく、データ量の小さい符号値を用いて処理を行うため、処理を小規模な回路で行えるとともに高速動作が可能となる。
【００４２】
さらに、複雑なシーケンスを検出対象シーケンスとしたときでも、符号値として表現できるので、記憶部２ａの容量は小さくてすみ、デバッグ回路２及び半導体装置１の回路面積を小さくできる。
【００４３】
また、検出対象シーケンスを変更するとき、記憶部２ａはその検出対象シーケンスを符号化した符号値を記憶すればよいため、特に回路の再実装などを行わなくてすみ、デバッグの作業効率が上がる。
【００４４】
（第２の実施の形態）
図３は、第２の実施の形態の半導体装置及びデバッガ装置を含むデバッグシステムの例を示す図である。
【００４５】
デバッグシステムは、半導体装置１０とデバッガ装置２０を含み、それらは通信ケーブル２０ｂにより接続されている。なお、半導体装置１０とデバッガ装置２０は無線で通信を行ってもよい。
【００４６】
半導体装置１０は、たとえば、ＳｏＣ（System on Chip）であり、デバッグ回路１１とデバッグ対象となるユーザ回路１２を有している。
デバッガ装置２０は、たとえば、コンピュータであり、作業者２０ａにより操作され、通信ケーブル２０ｂを介して半導体装置１０と通信を行い、デバッグ処理を行う。
【００４７】
（半導体装置）
図４は、半導体装置の一例を示す図である。
半導体装置１０は、前述したデバッグ回路１１、ユーザ回路１２の他、デバッガ装置２０から通信ケーブル２０ｂを介して送られてくるデータを受信する受信部１３を有している。
【００４８】
デバッグ回路１１は、レジスタ１１ａ１〜１１ａｐ、レジスタ１１ｂ１〜１１ｂｐ、符号値算出部１１ｃ、シフト部１１ｄ、第１シーケンス検出部１１ｅ、期待値算出部１１ｆ、レジスタ１１ｇ１〜１１ｇｐ、判定部１１ｈ、ＯＲ回路１１ｉを有している。
【００４９】
レジスタ１１ａ１〜１１ａｐとレジスタ１１ｂ１〜１１ｂｐは、第１の実施の形態のデバッグ回路２における記憶部２ａの機能を有している。レジスタ１１ａ１〜１１ａｐとレジスタ１１ｂ１〜１１ｂｐの代わりに、ＲＡＭ（Random Access Memory）を用いてもよい。
【００５０】
レジスタ１１ａ１〜１１ａｐは、複数（ｐ個）の検出対象シーケンスのそれぞれにおいて、先頭から最初の１ワードに収まる分のシーケンスを符号化した符号値と、そのワードの先頭から検出対象シーケンスの先頭までバイト数の情報などを記憶する。以下では、この最初の１ワードに収まる分のシーケンスを第１の実施の形態と同様に、シーケンスＳａと表記する。
【００５１】
レジスタ１１ｂ１〜１１ｂｐは、検出対象シーケンスの残りのシーケンスを符号化した符号値と、そのシーケンスの情報などを記憶する。以下では、このシーケンスを第１の実施の形態と同様に、シーケンスＳｂと表記する。また、以下では、符号値は、ＣＲＣで符号化された符号値とするが、これに限定されるものではなく、たとえば、線形性を有する符号値が適用可能である。
【００５２】
図５は、レジスタの格納例を示す図である。
レジスタ１１ａ１には、検出対象シーケンスの識別情報ｓｅｑＩＤ、ワードの先頭から検出対象シーケンスの先頭までバイト数ｓｏｆ、シーケンスＳａの長さｌｅｎ１、シーケンスＳａの符号値ＣＲＣ（Ｓａ）が記憶されている。
【００５３】
レジスタ１１ｂ１には、検出対象シーケンスの識別情報ｓｅｑＩＤと、シーケンスＳｂの長さｌｅｎ２、シーケンスＳｂの符号値ＣＲＣ（Ｓｂ）が記憶されている。
識別情報ｓｅｑＩＤは、符号値ＣＲＣ（Ｓａ），ＣＲＣ（Ｓｂ）が同じ検出対象シーケンスに含まれるものであることを示すために用いられる。
【００５４】
シーケンスＳａの長さｌｅｎ１はバイト数で表され、ｗ−ｓｏｆか、検出対象シーケンスの長さｎ、の何れかである。なお、ｗは、バイト数で表されるワード長である。
シーケンスＳｂの長さｌｅｎ２は、ｎ−ｗ＋ｓｏｆとなる。
【００５５】
なお、検出対象シーケンスは、たとえば、ユーザ回路１２に関する信号がどのように遷移したら、ユーザ回路１２を停止させるかを指定するものである。ユーザ回路１２に関する信号としては、ユーザ回路１２の入力データ、出力データ、または内部の信号などである。以下では、検出対象シーケンスは、１つの信号（たとえば、入力データまたは出力データ）の遷移として説明するが、複数の信号の遷移であってもよい。また、ユーザ回路１２は、ワード単位でデータ処理を行う回路であるものとする。
【００５６】
符号値算出部１１ｃは、ユーザ回路１２における信号のシーケンスをワード単位で取得し、シーケンスによって値が変わる符号値を、バイトごとに、デバッガ装置２０で符号値を算出する際の符号化方式と同じ符号化方式（すなわちＣＲＣ）で算出する。なお、符号値算出部１１ｃは、図示しないカウンタを有し、取得するデータに含まれるバイトの数をカウントする機能も有する。
【００５７】
たとえば、符号値算出部１１ｃは、以下の式（１）に基づいて、１ワード分のデータから、１ワード分の符号値を同時に計算する。
【００５８】
【数１】
0006477134.tif 000002
【００５９】
式（１）において、ｊはバイトのカウント値を示し、ｗはワード長を示している。また、Ｄ（ｊ）〜Ｄ（ｊ＋ｗ−１）は、符号値算出部１１ｃが取得する１ワード分のデータであり、ａ（ｊ）〜ａ（ｊ＋ｗ−１）は、符号値算出部１１ｃによって算出される１ワード分の符号値を示している。Ｈ（ｋ）（ｋ＝１〜ｗ）は、ハミング行列を示している。Ｈ（ｋ）は、＆０k（＆はシーケンスの連接、０kは、信号シーケンスの値がｋバイト分の０を示す）と同じ効果をもたらすように、ＣＲＣの値を変換する正則行列である。ハミング行列を用いたＣＲＣの演算の例は、たとえば、非特許文献１に記載されている。
【００６０】
シフト部１１ｄは、符号値算出部１１ｃが処理するワードの１つ前のワードの最後のバイトでの符号値を、ワード分の符号値の前に付加して、第１シーケンス検出部１１ｅに供給する。
【００６１】
図６は、シフト部の一例を示す図である。
シフト部１１ｄは、レジスタ１１ｄ１とマージ部１１ｄ２を有している。
レジスタ１１ｄ１は、１ワード分の符号値の最後の符号値を記憶する。
【００６２】
マージ部１１ｄ２は、１ワード分の符号値が入力されたとき、レジスタ１１ｄ１に記憶されている符号値をマージして出力する。図６の例では、マージ部１１ｄ２は、１ワード分の符号値ａ（ｊ）〜ａ（ｊ＋ｗ−１）が入力されたとき、レジスタ１１ｄ１に記憶されている前のワードの最後のバイトでの符号値ａ（ｊ−１）と符号値ａ（ｊ）〜ａ（ｊ＋ｗ−１）とをマージする。つまり、マージ部１１ｄ２は、符号値ａ（ｊ−１），ａ（ｊ）〜ａ（ｊ＋ｗ−１）を出力する。
【００６３】
図４において、第１シーケンス検出部１１ｅは、シーケンスＳａを検出する。第１シーケンス検出部１１ｅは、あるワード内の最後のバイトでの符号値と、バイト数ｓｏｆに基づく位置のバイトでの符号値との差分と、レジスタ１１ａ１〜１１ａｐに記憶されている符号値との比較結果に基づき検出を行う。また、第１シーケンス検出部１１ｅは、シーケンスＳａを検出すると、検出したときの符号値を期待値算出部１１ｆに供給する。
【００６４】
なお、第１シーケンス検出部１１ｅは、１ワードに収まる検出対象シーケンスを検出する機能も有する。
期待値算出部１１ｆは、シーケンスＳａが検出されたときの符号値と、レジスタ１１ｂ１〜１１ｂｐに記憶されている符号値とに基づき、検出対象シーケンスの終了時における、符号値算出部１１ｃで算出される符号値の期待値を算出する。
【００６５】
レジスタ１１ｇ１〜１１ｇｐは、期待値算出部１１ｆで算出された、複数の検出対象シーケンスのそれぞれに対応する期待値を記憶する。
図７は、レジスタへの期待値の格納例を示す図である。
【００６６】
レジスタ１１ｇ１には、検出対象シーケンスＳの識別情報ｓｅｑＩＤ、シーケンスＳｂの長さｌｅｎ２、符号値ＣＲＣ（Ｘ＆Ｓ）が記憶されている。なお、Ｘは未知のシーケンスであり、符号値ＣＲＣ（Ｘ＆Ｓ）は、未知のシーケンスの後に検出対象シーケンスＳが続くときに得られる符号値の期待値を示している。
【００６７】
判定部１１ｈは、シフト部１１ｄから出力される符号値（バイトカウント値が０のバイトから順次更新されている符号値（以下符号値の絶対値と呼ぶ場合もある））と、レジスタ１１ｇ１〜１１ｇｐに記憶されている期待値とを比較する。そして、判定部１１ｈは、符号値の絶対値が、レジスタ１１ｇ１〜１１ｇｐに記憶されている何れかの期待値が一致したときに、検出対象シーケンスを検出した旨の信号を出力し、たとえば、デバッグ対象であるユーザ回路１２の動作を停止させる。
【００６８】
ＯＲ回路１１ｉは、第１シーケンス検出部１１ｅで、ワード長に収まる検出対象シーケンスが検出されたとき、または、判定部１１ｈでワード長を超える検出対象シーケンスが検出されたとき、１を出力する。
【００６９】
第１シーケンス検出部１１ｅ、期待値算出部１１ｆ、判定部１１ｈでの処理例については、後述する。
（デバッガ装置２０）
図８は、デバッガ装置のハードウェア例を示す図である。
【００７０】
デバッガ装置２０は、コンピュータであり、プロセッサ２１によって装置全体が制御されている。プロセッサ２１には、バス２９を介してＲＡＭ２２と複数の周辺機器が接続されている。プロセッサ２１は、マルチプロセッサであってもよい。プロセッサ２１は、たとえばＣＰＵ（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）などがある。
【００７７】
機器接続インタフェース２７は、デバッガ装置２０に周辺機器を接続するための通信インタフェースである。たとえば機器接続インタフェース２７には、メモリ装置２７ａやメモリリーダライタ２７ｂを接続することができる。メモリ装置２７ａは、機器接続インタフェース２７との通信機能を搭載した記録媒体である。メモリリーダライタ２７ｂは、メモリカード２７ｃへのデータの書き込み、またはメモリカード２７ｃからのデータの読み出しを行う装置である。メモリカード２７ｃは、カード型の記録媒体である。
【００７８】
また、機器接続インタフェース２７は、通信ケーブル２０ｂを介して半導体装置１０に接続されている。
ネットワークインタフェース２８は、ネットワーク２８ａに接続されている。ネットワークインタフェース２８は、ネットワーク２８ａを介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００７９】
以上のようなハードウェア構成によって、第２の実施の形態のデバッガ装置２０の処理機能を実現することができる。なお、第１の実施の形態のデバッガ装置４も、図８に示したデバッガ装置２０と同様のハードウェアにより実現することができる。
【００８０】
デバッガ装置２０は、たとえばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。デバッガ装置２０に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。たとえば、デバッガ装置２０に実行させるプログラムをＨＤＤ２３に格納しておくことができる。プロセッサ２１は、ＨＤＤ２３内のプログラムの少なくとも一部をＲＡＭ２２にロードし、プログラムを実行する。またデバッガ装置２０に実行させるプログラムを、光ディスク２６ａ、メモリ装置２７ａ、メモリカード２７ｃなどの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、たとえばプロセッサ２１からの制御により、ＨＤＤ２３にインストールされた後、実行可能となる。またプロセッサ２１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００８１】
（デバッグ方法）
以下、上記の半導体装置１０及びデバッガ装置２０を用いたデバッグ方法の一例を説明する。
【００８２】
図９は、デバッガ装置による設定処理の一例の流れを示すフローチャートである。
デバッガ装置２０は、たとえば、作業者２０ａによるキーボード２５ａやマウス２５ｂの操作などによって入力される１または複数の検出対象シーケンスを取得する（ステップＳ１０）。
【００８３】
検出対象シーケンスは、ワードの先頭から始まらないものも含む。たとえば、ユーザ回路１２が、１ワードが８バイトのＰＣＩｅｘｐｒｅｓｓのトランザクション層パケットを処理する回路である場合を考える。
【００８４】
図１０は、パケットの一例を示す図である。
図１０に示されているワード（Ｗｏｒｄ１，Ｗｏｒｄ２）うち、たとえば、パケット種別（Ｆｍｔ）、デバイス番号（ｄｅｖｉｄ）、書き込みアドレス（Ａｄｄｒ）のフィールドが、検出対象シーケンスとして指定される。属性（ａｔｔｒ）、長さ（ｌｅｎｇｔｈ）、書き込み値（Ｄａｔａ）などは、たとえば、動作環境で変動するため検出対象シーケンスとして指定されない。
【００８５】
たとえば、特定のデバイス番号を検出したいときには、ｄｅｖｉｄは、“Ｂｙｔｅ  ｏｆｆｓｅｔ”が＋４、すなわち、５バイト目から始まるため、検出対象シーケンスは、Ｗｏｒｄ１内の５バイト目から始まる。
【００８６】
検出対象シーケンスの取得後、デバッガ装置２０は、検出対象シーケンスが１ワードに収まらないときには、検出対象シーケンスをシーケンスＳａと残りのシーケンスＳｂに分割する（ステップＳ１１）。
【００８７】
さらに、デバッガ装置２０は、シーケンスＳａとシーケンスＳｂをそれぞれＣＲＣで符号化した符号値を算出する（ステップＳ１２）。ステップＳ１２の処理では、デバッガ装置２０は、シーケンスＳａの始めの信号（入力データまたは出力データ）から、符号値を算出し、後続の信号によって符号値を更新していく。シーケンスＳａの最後の信号による符号値の更新が終わると、そのときの符号値がシーケンスＳａによる符号値となる。後続部のシーケンスＳｂについても同様に処理されて、符号値が算出される。
【００８８】
デバッガ装置２０は、ステップＳ１２の処理で算出した符号値を、検出対象シーケンスの識別番号、ワードの先頭から検出対象シーケンスの先頭までのバイト数ｓｏｆ、シーケンスＳａ，Ｓｂの長さとともに、半導体装置１０に送信する（ステップＳ１３）。これによりデバッガ装置２０による設定処理が終了する。
【００８９】
図１１は、半導体装置による処理の一例の流れを示すフローチャートである。
半導体装置１０は、デバッガ装置２０から送信された符号値などの情報を受信部１３で受信する（ステップＳ２０）。そして、半導体装置１０の図示しない制御部は、受信した情報を、図５に示したように、レジスタ１１ａ１〜１１ａｐ，１１ｂ１〜１１ｂｐに設定（記憶）する（ステップＳ２１）。
【００９０】
その後、半導体装置１０の図示しない制御部は、デバッグ対象のユーザ回路１２に動作を開始させる（ステップＳ２２）。
ユーザ回路１２の動作開始後、デバッグ回路１１の符号値算出部１１ｃは、図示しないクロックの各タイミングで、ユーザ回路１２の入力データｘまたは出力データｙに基づき、ＣＲＣで符号値を算出（更新）する（ステップＳ２３）。このとき、符号値算出部１１ｃは、前述した式（１）にしたがって、ワード単位で符号値を算出する。
【００９１】
その後、第１シーケンス検出部１１ｅは、レジスタ１１ａ１〜１１ａｐに記憶された情報を読み出し、シーケンスＳａの検出を行う（ステップＳ２４）。
第１シーケンス検出部１１ｅは、検出対象シーケンスが１ワードに収まらないとき、すなわち、ｎ＞ｗ−ｓｏｆのとき、以下の処理を行う。
【００９２】
図１２は、ユーザ回路の信号が、１ワードに収まらない検出対象シーケンスを含むシーケンスで遷移する例を示す図である。
図１２では、バイトカウント値０から開始されたシーケンスの一例が示されている。あるシーケンスＸの後に検出対象シーケンスＳが続いている。また、図１２では、符号値算出部１１ｃで算出される符号値の例が示されている。シーケンスＸの最後で算出される符号値はＣＲＣ（Ｘ）、ワードＷ１の途中から始まるシーケンスＳａの最後で算出される符号値はＣＲＣ（Ｘ＆Ｓａ）、シーケンスＳｂ（任意長）の最後で算出される符号値はＣＲＣ（Ｘ＆Ｓ）である。
【００９３】
なお、ＣＲＣの線形性から、以下の式が成り立つ。
ＣＲＣ（Ｘ＆Ｓ）＝ＣＲＣ（（Ｘ＆０m）＋（０k＆Ｓａ））＝ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（０k＆Ｓａ）＝ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（Ｓａ）＝Ｈ（ｍ）・ＣＲＣ（Ｘ）＋ＣＲＣ（Ｓａ）                                          （２）
式（２）において、“＋”はＸＯＲ演算を表している（以降の式でも同じである）。また、“０m”は、ｍバイト分、連続してユーザ回路１２から取得されるデータが０であるシーケンスを示している。また、シーケンスＸの長さをｋバイトとすると、“０k”は、ｋバイト分、連続してユーザ回路１２の信号が０であるシーケンスを示している。
【００９４】
また、式（２）において、ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（０k＆Ｓａ）＝ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（Ｓａ）であるのは、ＣＲＣの性質から、初期状態から連続する０は、その個数によらず、ＣＲＣの値に影響しないためである。
【００９５】
第１シーケンス検出部１１ｅは、シフト部１１ｄから供給される符号値のうち、ワード内の最後のバイトでの符号値と、ワードの先頭バイトからｓｏｆ−１バイト分後ろのバイトでの符号値との差分に基づく以下の条件式が成立するか否かを評価する。
【００９６】
ａ（ｊ＋ｗ−１）−Ｈ（ｗ−ｓｏｆ）・ａ（ｊ＋ｓｏｆ−１）＝ＣＲＣ（Ｓａ）              （３）
ここで、ｊはワードの先頭バイトでのバイト数（バイトカウント値）を示している。
【００９７】
第１シーケンス検出部１１ｅは、上記のようなＣＲＣ差分（ＣＲＣで符号化された符号値の変化分）に基づく式（３）が成立するか否かを判定することで、シーケンスＳａを検出したか否かを判定する（ステップＳ２５）。
【００９８】
図１３は、シーケンスＳａの検出例を示す図である。
図１３の例では、ワードＷ１の先頭のバイトでのバイトカウント値がｊとなっている。
式（３）が成立するとき、図１３に示すように、符号値ａ（ｊ＋ｓｏｆ−１）は、ＣＲＣ（Ｘ）となり、符号値ａ（ｊ＋ｗ−１）は、Ｃ（Ｘ＆Ｓａ）となり、バイトカウント値がｊ＋ｗ−１のときに、シーケンスＳａが検出されたことになる。
【００９９】
したがって、上記式（３）が成立するとき、第１シーケンス検出部１１ｅは、シーケンスＳａが検出されたと判定し、バイトカウント値がｊ＋ｗ−１のときの符号値ａ（ｊ＋ｗ−１）を期待値算出部１１ｆに送る。
【０１００】
一方、ステップＳ２４の処理において、第１シーケンス検出部１１ｅは、検出対象シーケンスが１ワードに収まるとき、すなわち、ｎ≦ｗ−ｓｏｆのとき、以下の処理を行う。
図１４は、ユーザ回路の信号が、１ワードに収まる検出対象シーケンスを含むシーケンスで遷移する例を示す図である。
【０１０１】
図１４では、バイトカウント値０から開始されたシーケンスの一例が示されている。図１２、図１３の場合と異なり、図１４の例では、あるシーケンスＸの後にワードＷ１に収まる検出対象シーケンスＳが続いている。このときシーケンスＳａは検出対象シーケンスＳと等しい。また、図１４でも、符号値算出部１１ｃで算出される符号値の例が示されている。シーケンスＸの最後で算出される符号値はＣＲＣ（Ｘ）、シーケンスＳａ（検出対象シーケンスＳ）の最後で算出される符号値はＣＲＣ（Ｘ＆Ｓａ）である。
【０１０２】
第１シーケンス検出部１１ｅは、ｎ≦ｗ−ｓｏｆのとき、以下の条件式が成立するか否かを評価する。
ａ（ｊ＋ｅｏｆ）−Ｈ（ｅｏｆ−ｓｏｆ＋１）・ａ（ｊ＋ｓｏｆ−１）＝ＣＲＣ（Ｓａ）              （４）
式（４）において、ｅｏｆは、ワードの先頭バイトから検出対象シーケンスＳの最後のバイトまでのバイト数である。ワードの先頭でのバイトカウント値がｊのときは、検出対象シーケンスＳが終了するバイトカウント値は、ｊ＋ｅｏｆで表せる。
【０１０３】
第１シーケンス検出部１１ｅは、上記のようなＣＲＣ差分（ＣＲＣで符号化された符号値の変化分）に基づく式（４）が成立するか否かを判定することで、ワードに収まる検出対象シーケンスＳも検出できる。
【０１０４】
図１５は、ワードに収まる検出対象シーケンスＳの検出例を示す図である。
式（４）が成立するとき、図１５に示すように、符号値ａ（ｊ＋ｓｏｆ−１）は、ＣＲＣ（Ｘ）となり、符号値ａ（ｊ＋ｅｏｆ）は、ＣＲＣ（Ｘ＆Ｓａ）となる。そのため、バイトカウント値がｊ＋ｅｏｆのときに、シーケンスＳａ、すなわちこの場合、検出対象シーケンスＳが検出されたことになる。
【０１０５】
図１１のフローチャートには示されていないが、上記式（４）が成立するとき、第１シーケンス検出部１１ｅは、検出対象シーケンスＳが検出されたと判定し、“１”となる信号をＯＲ回路１１ｉに出力し、後述のステップＳ２９の処理が行われる。
【０１０６】
シーケンスＳａが検出されないとき、すなわち、式（３）または式（４）が成立しないときは、ステップＳ２３からの処理が繰り返される。
期待値算出部１１ｆは、図１３に示したような符号値ａ（ｊ＋ｗ−１）を受けると、期待値の算出を行う（ステップＳ２６）。
【０１０７】
図１６は、検出対象シーケンスＳの検出用の期待値の算出例を示す図である。
上記のように、シーケンスＳａ検出時の符号値は、ａ（ｊ＋ｗ−１）＝ＣＲＣ（Ｘ＆Ｓａ）となっている。シーケンスＳａに引き続いてシーケンスＳｂが発生するとき、バイトカウント値がｊ＋ｎ＋ｓｏｆ−１のとき、符号値の期待値ｂ（ｊ＋ｎ＋ｓｏｆ−１）であるＣＲＣ（Ｘ＆Ｓ）は、以下の式で与えられる。
【０１０８】
ＣＲＣ（Ｘ＆Ｓ）＝ＣＲＣ（Ｘ＆Ｓａ＆Ｓｂ）＝ＣＲＣ（Ｘ＆Ｓａ＆０n-w+sof）＋ＣＲＣ（Ｓｂ）＝Ｈ（ｎ−ｗ＋ｓｏｆ）・ＣＲＣ（Ｘ＆Ｓａ）＋ＣＲＣ（Ｓｂ）            （５）
ここで、ＣＲＣ（Ｓｂ）は、シーケンスＳｂの符号値であり、レジスタ１１ｂ１〜１１ｂｐの何れかに記憶されているものである。
【０１０９】
したがって、期待値算出部１１ｆは、シーケンスＳａと同じ識別情報ｓｅｑＩＤをもつシーケンスＳｂの符号値をレジスタ１１ｂ１〜１１ｂｐの何れかから読み出して、上記の式（５）により期待値を算出する。
【０１１０】
その後、符号値算出部１１ｃによる符号値の更新が行われ（ステップＳ２７）、判定部１１ｈは、符号値算出部２ｂから出力される符号値と、期待値とが一致したときに、検出対象シーケンスを検出した旨を示す信号を出力する。
【０１１１】
図１７は、検出対象シーケンスの検出例を示す図である。
シーケンスＳｂの終わりは、シーケンスＳａを検出してから（ｎ−ｗ＋ｓｏｆ）バイト後である。それは、シーケンスＳａを検出してから、（ｎ−ｗ＋ｓｏｆ）／ｗ（小数点以下は切り上げ）ワード目の先頭からｅｏｆｘバイト目である。ｅｏｆｘは、シーケンスＳｂの長さとワード長との関係から算出できる。図１７に示されている例では、ワードＷｘの先頭バイトのバイトカウント値をｊとしている。
【０１１２】
したがって、判定部１１ｈは、バイトカウント値＝ｊ＋ｅｏｆｘでの符号値ａ（ｊ＋ｅｏｆｘ）が式（５）で求めたＣＲＣ（Ｘ＆Ｓ）と等しいか否かを判定する（ステップＳ２８）。
【０１１３】
バイトカウント値＝ｊ＋ｅｏｆｘでの符号値ａ（ｊ＋ｅｏｆｘ）が、ＣＲＣ（Ｘ＆Ｓ）と一致するときには、判定部１１ｈは、“１”を出力し、デバッグ対象であるユーザ回路１２の動作を停止させる（ステップＳ２９）。以上で、ある検出対象シーケンスの検出時のユーザ回路１２の停止処理が終わる。
【０１１４】
判定部１１ｈは、たとえば、“１”を出力してユーザ回路１２へクロック信号の供給を停止することで、ユーザ回路１２の動作を停止する。また、判定部１１ｈは、ユーザ回路１２へのデータの入力またはユーザ回路１２からのデータの出力を遮断して、ユーザ回路１２が停止しているように扱うようにしてもよい。
【０１１５】
その後は、たとえば、デバッガ装置２０により、ユーザ回路１２の各部の信号の様子を調査するなどのデバッグ作業が行われる。
バイトカウント値＝ｊ＋ｅｏｆｘでの符号値ａ（ｊ＋ｅｏｆｘ）がＣＲＣ（Ｘ＆Ｓ）と一致しないときには、判定部１１ｈは、検出対象シーケンスＳが検出されなかったと判定し、再度ステップＳ２３からの処理を繰り返す。
【０１１６】
以上のような半導体装置１０、デバッグ回路１１及びデバッガ装置２０によれば、第１の実施の形態の半導体装置１、デバッグ回路２及びデバッガ装置４と同様の効果が得られる。また、複数の検出対象シーケンスのそれぞれのシーケンスＳａとシーケンスＳｂの符号値に基づきユーザ回路１２の停止処理を行うことが可能であり、複数の停止条件でユーザ回路１２を停止できる。
【０１１７】
（第１シーケンス検出部１１ｅの回路例）
ところで、図４に示した第１シーケンス検出部１１ｅは、式（３）、式（４）で示したように、ワード内の任意のバイト間でのＣＲＣ差分に基づく判定を行う可能性がある。ワードのバイト数をｗとすると、最大ｗ／２（ｗ＋１）個の判定条件を評価することになる。
【０１１８】
たとえば、第１シーケンス検出部１１ｅは以下のような回路を用いて実現される。
図１８は、第１シーケンス検出部の一例を示す図である。
ＣＲＣ−１〜ＣＲＣ７は、ｗ＝８としたときの、シフト部１１ｄの出力である符号値ａ（ｊ−１）〜ａ（ｊ＋７）を示している。第１シーケンス検出部１１ｅは、複数の乗算器と減算器を有している。
【０１１９】
たとえば、第１シーケンス検出部１１ｅが、符号値ａ（ｊ−１）と符号値ａ（ｊ＋７）の差分に基づきシーケンスＳａを検出するときには（ｓｏｆ＝０のとき）、式（３）に基づき、ａ（ｊ＋７）−Ｈ（８）・ａ（ｊ−１）が計算される。このとき、乗算器３０にて、Ｈ（８）・ａ（ｊ−１）が算出され、減算器３１にて、ａ（ｊ＋７）−Ｈ（８）・ａ（ｊ−１）が算出される。
【０１２０】
ａ（ｊ＋７）−Ｈ（８）・ａ（ｊ−１）は、第１シーケンス検出部１１ｅ内の図示しない比較回路により、たとえば、レジスタ１１ａ１に格納された符号値ＣＲＣ（Ｓａ）と比較される。そして、これらが一致したら、シーケンスＳａが検出されたとみなされ、符号値ａ（ｊ＋７）が期待値算出部１１ｆに供給される。
【０１２１】
また、図１８に示すような第１シーケンス検出部１１ｅによれば、シフト部１１ｄの出力である９バイトの符号値の差分に基づき、バイト数ｓｏｆの異なる複数の検出対象シーケンスに対応したシーケンスＳａを同時に検出できる。たとえば、ｓｏｆ＝１，２の２つの検出対象シーケンスのシーケンスＳａを検出する際には、乗算器３２と減算器３３により、ａ（ｊ＋７）−Ｈ（７）・ａ（ｊ）、乗算器３４、減算器３５によりａ（ｊ＋７）−Ｈ（６）・ａ（ｊ＋１）が同時に算出される。そして、図示しない比較部による、算出された値とレジスタ１１ａ１〜１１ａｐに格納された符号値との比較結果に基づき、２つの検出対象シーケンスのシーケンスＳａが検出される。
【０１２２】
同様に１ワードに収まる複数の検出対象シーケンスについても同時に検出できる。
また、第１シーケンス検出部１１ｅは、シーケンスＳａを検出する際に、図１８に示したような回路を用いて、シーケンスＳａの他、シーケンスＳａに含まれる１または複数のシーケンスの検出ができたときに、シーケンスＳａが検出されたと判定してもよい。
【０１２３】
図１９は、シーケンスＳａの検出例を示す図である。
“Ｂｙｔｅ  ｏｆｆｓｅｔ”は、ワードの先頭バイトの位置を０としたときのバイトの位置を示している。“Ｂｙｔｅ  ｏｆｆｓｅｔ”＝０は、バイトカウント値＝ｊに相当する。各バイト位置（−１〜＋７）のバイトの符号値は、ａ（ｊ−１）〜ａ（ｊ＋７）と示されている。
【０１２４】
第１シーケンス検出部１１ｅは、符号値ａ（ｊ＋２），ａ（ｊ＋７）の差分と、ＣＲＣ（Ｓａ）との比較結果に基づきシーケンスＳａを検出する際、シーケンスＳａの他、シーケンスＳａに含まれる１または複数のシーケンスの検出を行う。
【０１２５】
たとえば、シーケンスＳａ内の各バイト間の符号値の差分が、シーケンスＳａに含まれるシーケンスＳａａ，Ｓａｂ，Ｓａｃ，Ｓａｄの符号値に対応するか否か判定する。なお、シーケンスＳａａ〜Ｓａｄの符号値は、デバッガ装置２０によって算出され、たとえば、予めデバッグ回路１１のレジスタ１１ａ１に記憶されているものとする。
【０１２６】
そして、第１シーケンス検出部１１ｅは、全ての差分が、シーケンスＳａａ〜Ｓａｄの符号値に対応していると判定したときに、シーケンスＳａが検出されたと判定する。
ＣＲＣはビット数が決まっているため、異なる複数のシーケンスで、同じＣＲＣ値が算出される可能性がある。しかし、上記のように、シーケンスＳａの検出時、シーケンスＳａに含まれる１または複数のシーケンスについても検出することで、検出対象シーケンスのシーケンスＳａとは異なるシーケンスを誤って検出する可能性を減らせる。
【０１２７】
なお、１ワードに収まる複数の検出対象シーケンスについても、同様の処理を行うことで、誤って異なるシーケンスを検出する可能性を減らせる。
ところで、図１８に示したような第１シーケンス検出部１１ｅで、ハミング行列を用いた乗算を行う乗算器の面積は比較的大きいため、以下のように乗算の数を減らすことで、小面積化が可能となる。
【０１２８】
たとえば、シーケンスＳａまたはワードに収まる検出対象シーケンスである４つのシーケンスＳＸａ，ＳＸｂ，ＳＸｃ，ＳＸｄを検出する場合を考える。
図２０は、４つのシーケンスの例を示す図である。
【０１２９】
図１９と同様に、図２０でも“Ｂｙｔｅ  ｏｆｆｓｅｔ”に対応した符号値が示されている。
シーケンスＳＸａは、ａ（ｊ＋７）−Ｈ（８）・ａ（ｊ−１）＝ＣＲＣ（ＳＸａ）が成立するときに検出され、シーケンスＳＸｂは、ａ（ｊ＋３）−Ｈ（４）・ａ（ｊ−１）＝ＣＲＣ（ＳＸｂ）が成立するときに検出される。
【０１３０】
また、シーケンスＳＸｃは、ａ（ｊ＋５）−Ｈ（２）・ａ（ｊ＋３）＝ＣＲＣ（ＳＸｃ）が成立するときに検出され、シーケンスＳＸｄは、ａ（ｊ＋７）−Ｈ（４）・ａ（ｊ＋３）＝ＣＲＣ（ＳＸｄ）が成立するときに検出される。
【０１３１】
なお、ＣＲＣ（ＳＸａ）〜ＣＲＣ（ＳＸｄ）は、レジスタ１１ａ１〜１１ａｐの何れか４つに格納されているシーケンスＳＸａ〜ＳＸｄの符号値である。
この例では、ハミング行列Ｈ（８），Ｈ（４），Ｈ（２）の乗算が合計４回行われる。
【０１３２】
乗算回数を減らすために、たとえば、以下のようにシフト部１１ｄから出力される符号値にＨ（ｋ）を乗じた値（ただし、ｋ＝ｗ−（Ｂｙｔｅ  ｏｆｆｓｅｔ＋１））が用いられる。
【０１３３】
図２１は、Ｈ（ｋ）を乗じた符号値の例が示されている。
符号値ａ（ｊ−１）にはＨ（８）、符号値ａ（ｊ）にはＨ（７）、符号値ａ（ｊ＋１）にはＨ（６）、符号値ａ（ｊ＋２）にはＨ（５）、符号値ａ（ｊ＋３）にはＨ（４）、符号値ａ（ｊ＋４）にはＨ（３）が乗じられている。また、符号値ａ（ｊ＋５）にはＨ（２）、符号値ａ（ｊ＋６）にはＨ（１）が乗じられており、符号値ａ（ｊ＋７）はそのままである。
【０１３４】
このような符号値を用いた場合、シーケンスＳＸａは、ａ（ｊ＋７）−｛Ｈ（８）・ａ（ｊ−１）｝＝ＣＲＣ（ＳＸａ）が成立するときに検出される。
シーケンスＳＸｂは、｛Ｈ（４）・ａ（ｊ＋３）｝−｛Ｈ（８）・ａ（ｊ−１）｝＝｛Ｈ（４）・ＣＲＣ（ＳＸｂ）｝が成立するときに検出される。
【０１３５】
シーケンスＳＸｃは、｛Ｈ（２）・ａ（ｊ＋５）｝−｛Ｈ（４）・ａ（ｊ＋３）｝＝｛Ｈ（２）・ＣＲＣ（ＳＸｃ）｝が成立するときに検出される。
シーケンスＳＸｄは、ａ（ｊ＋７）−｛Ｈ（４）・ａ（ｊ＋３）｝＝ＣＲＣ（ＳＸｄ）が成立するときに検出される。
【０１３６】
この場合、シーケンスＳＸａ〜ＳＸｄを検出する際に、｛Ｈ（８）・ａ（ｊ−１）｝、｛Ｈ（４）・ａ（ｊ＋３）｝、｛Ｈ（２）・ａ（ｊ＋５）｝の３つの乗算で済む。上記の式の右辺の｛Ｈ（４）・ＣＲＣ（ＳＸｂ）｝と、｛Ｈ（２）・ＣＲＣ（ＳＸｃ）｝は、予めレジスタ１１ａ１〜１１ａｐに記憶しておけばよいため、乗算器の数は増加しない。
【０１３７】
上記の式を実現する第１シーケンス検出部１１ｅａ（図１８の第１シーケンス検出部１１ｅと区別するために符号を変えている）は、たとえば、以下のような回路となる。
図２２は、第１シーケンス検出部の他の例を示す図である。
【０１３８】
ＣＲＣ−１〜ＣＲＣ７は、ｗ＝８としたときの、シフト部１１ｄの出力である符号値ａ（ｊ−１）〜ａ（ｊ＋７）を示している。第１シーケンス検出部１１ｅａは、図２１に示したように、符号値ａ（ｊ−１）〜ａ（ｊ＋６）にＨ（８）〜Ｈ（１）を乗じる８つの乗算器を有している。
【０１３９】
たとえば、シーケンスＳＸａ〜ＳＸｄを検出する際には、乗算器４０にて｛Ｈ（８）・ａ（ｊ−１）｝、乗算器４１にて｛Ｈ（５）・ａ（ｊ＋２）｝、乗算器４２にて｛Ｈ（４）・ａ（ｊ＋３）｝がそれぞれ算出される。
【０１４０】
図１８に示した第１シーケンス検出部１１ｅでは、乗算器がｗ（ｗ＋１）／２個含まれていたが、図２２に示した第１シーケンス検出部１１ｅａでは、乗算器の数をｗ個（図２２の例ではｗ＝８）に減らすことができ、小面積化できる。
【０１４１】
（符号値算出部１１ｃとシフト部１１ｄの一体化）
図４に示したデバッグ回路１１の符号値算出部１１ｃで算出される１ワード分の符号値ａ（ｊ）〜ａ（ｊ＋ｗ−１）の各値に対応した、シフト部１１ｄの出力の符号値をｃ（ｊ）〜ｃ（ｊ＋ｗ−１）とすると、ｃ（ｊ）〜ｃ（ｊ＋ｗ−１）は以下の式で表現できる。
【０１４２】
【数２】
0006477134.tif 000003
【０１４３】
式（６）において、Ｉは単位行列を表している。
ところで、符号値算出部１１ｃは、前述したように式（１）により、符号値ａ（ｊ）〜ａ（ｊ＋ｗ−１）を算出する。ここで、式（１）と式（６）は以下の式（７）のように簡略化できる。
【０１４４】
【数３】
0006477134.tif 000004
【０１４５】
符号値算出部１１ｃは、このような式（７）を実現する回路とすることで、シフト部１１ｄの機能も実現することができる。また、式（７）の行列は上三角行列であり、非零要素の個数は、式（１）と同等であるため、シフト部１１ｄの機能をもたせたとしても、乗算回路の増加は少ない。
【０１４６】
（バイト数ｓｏｆ設定の変形例）
上記の説明では、ワードの先頭から検出対象シーケンスの先頭までのバイト数ｓｏｆ（開始オフセット）が予め指定されているものとした。しかし、開始オフセットは指定されていなくてもよい。開始オフセットは、ワード長によって取りうる値が決まるので、たとえば、デバッガ装置２０は、ワード長に応じた数の開始オフセットを設定し、各開始オフセットの値に対応した、シーケンスＳａ，Ｓｂの符号値を算出すればよい。これらの値は、デバッグ回路１１のレジスタ１１ａ１〜１１ａｐ，１１ｂ１〜１１ｂｐに設定され、検出対象シーケンスの検出に用いられる。
【０１４７】
図２３は、開始オフセットが未指定のときのレジスタの格納例を示す図である。
レジスタ１１ａ１には、開始オフセットであるｗ個のバイト数ｓｏｆ１〜ｓｏｆｗが記憶されている。バイト数ｓｏｆ１〜ｓｏｆｗは、０（オフセットなし）〜ｗ−１バイトである。さらに、レジスタ１１ａ１には、バイト数ｓｏｆ１〜ｓｏｆｗのそれぞれに対応したシーケンスＳａ１〜Ｓａｗの長さｌｅｎ１１〜ｌｅｎ１ｗとシーケンスＳａ１〜Ｓａｗの符号値ＣＲＣ（Ｓａ１）〜ＣＲＣ（Ｓａｗ）が記憶されている。
【０１４８】
レジスタ１１ｂ１には、バイト数ｓｏｆ１〜ｓｏｆｗのそれぞれに対応した、シーケンスＳｂ１〜Ｓｂｗの長さｌｅｎ２１〜ｌｅｎ２ｗと、シーケンスＳｂ１〜Ｓｂｗの符号値ＣＲＣ（Ｓｂ１）〜ＣＲＣ（Ｓｂｗ）が記憶されている。
【０１４９】
第１シーケンス検出部１１ｅは、ＣＲＣ（Ｓａ１）〜ＣＲＣ（Ｓａｗ）を用いてシーケンスＳａ１〜Ｓａｗを検出する。期待値算出部１１ｆは、検出されたシーケンスＳａ１〜Ｓａｗの何れかに対応したシーケンスＳｂ１〜Ｓｂｗの符号値ＣＲＣ（Ｓｂ１）〜ＣＲＣ（Ｓｂｗ）を用いて、前述した期待値を算出する。
【０１５０】
これによって、開始オフセットが未指定の検出対象シーケンスについても検出が可能となる。
以上、実施の形態に基づき、本発明のデバッグ回路、半導体装置及びデバッグ方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【０１５１】
１  半導体装置
２  デバッグ回路
２ａ  記憶部
２ｂ  符号値算出部
２ｃ  シフト部
２ｄ  第１シーケンス検出部
２ｅ  期待値算出部
２ｆ  判定部
２ｇ  ＯＲ回路
３  デバッグ対象回路
４  デバッガ装置
Ｓａ，Ｓｂ，Ｘ  シーケンス
Ｗａ，Ｗｂ，Ｗ１  ワード
ｓｏｆ  バイト数
【図１】
0006477134.tif 000005
【図２】
0006477134.tif 000006
【図３】
0006477134.tif 000007
【図４】
0006477134.tif 000008
【図５】
0006477134.tif 000009
【図６】
0006477134.tif 000010
【図７】
0006477134.tif 000011
【図８】
0006477134.tif 000012
【図９】
0006477134.tif 000013
【図１０】
0006477134.tif 000014
【図１１】
0006477134.tif 000015
【図１２】
0006477134.tif 000016
【図１３】
0006477134.tif 000017
【図１４】
0006477134.tif 000018
【図１５】
0006477134.tif 000019
【図１６】
0006477134.tif 000020
【図１７】
0006477134.tif 000021
【図１８】
0006477134.tif 000022
【図１９】
0006477134.tif 000023
【図２０】
0006477134.tif 000024
【図２１】
0006477134.tif 000025
【図２２】
0006477134.tif 000026
【図２３】
0006477134.tif 000027