(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）などの符号化方式で、デバッガ装置４にて算出される。
符号値算出部２ｂは、デバッグ対象回路３に関する信号のシーケンスに基づき、デバッガ装置４が符号値Ａ１，Ａ２を算出する際の符号化方式と同じ符号化方式で、符号値を算出する。符号値算出部２ｂは、符号値を常時計算する。例えば、符号値算出部２ｂは、図示しないクロックを受け、そのクロックの各タイミング（立ち上がりタイミングまたは立ち下がりタイミング）で、そのときのデバッグ対象回路３の信号に基づき符号値を更新する。なお、この場合、停止シーケンスも、クロックの各タイミングでの信号のシーケンスとなる。
【００１７】
図１では、デバッグ対象回路３の信号である入力データｘと出力データｙが、（ｘi，ｙi）の状態から（ｘi，ｙi）→…→（ｘj，ｙj）→…→（ｘj+n-m，ｙj+n-m）と遷移したときに算出される符号値の例が示されている。（ｘi，ｙi）の状態は、初期状態でなくてもよく、あるシーケンスの途中の状態であってもよい。ｉ，ｊ，ｊ＋ｎ−ｍは、ある時刻（クロックタイミング）を示している。入力データｘと出力データｙがこのような変化をしたとき、図１の例では、符号値は、ａ（ｉ）→…→ａ（ｊ）→…→ａ（ｊ＋ｎ−ｍ）のように更新される。
【００１８】
遅延部２ｃは、停止シーケンスの固定長部のシーケンスの長さ分前の、符号値算出部２ｂで算出される符号値を出力する。例えば、遅延部２ｃは、シフトレジスタであり、符号値算出部２ｂで算出される符号値を、固定長分保持したのち、最初に入力された符号値から順次出力する。すなわち、遅延部２ｃは、入力される符号値の出力を遅らせる機能を有する。
【００１９】
以下では、停止シーケンスを、各時刻（クロックタイミング）でのデバッグ対象回路３の信号のシーケンスとして、固定長部のシーケンスの長さを、ｍ時刻分の信号のシーケンスの長さとする。また、停止シーケンスの長さを、ｎ時刻分の信号のシーケンスの長さとする。
【００２０】
図１では、遅延部２ｃから符号値ａ（ｊ−ｍ）が出力されている例が示されている。符号値ａ（ｊ−ｍ）は、符号値ａ（ｊ）に対して、ｍ時刻分前の符号値である。
部分シーケンス検出部２ｄは、符号値算出部２ｂから出力される符号値と、遅延部２ｃから出力される符号値との差分と、符号値Ａ１との比較結果に基づき、停止シーケンスの固定長部のシーケンスを検出する。すなわち、部分シーケンス検出部２ｄは、ｍ時刻分の符号値の変化分と、符号値Ａ１との比較結果に基づき固定長部のシーケンスを検出する。
【００２１】
例えば、部分シーケンス検出部２ｄは、符号値算出部２ｂから出力される符号値と、遅延部２ｃから出力される符号値との差分が、符号値Ａ１に相当するときに、停止シーケンスの固定長部のシーケンスで、デバッグ対象回路３の信号が遷移したことを検出する。
【００２２】
例えば、符号値算出部２ｂから符号値ａ（ｊ）が出力され、遅延部２ｃから符号値ａ（ｊ−ｍ）が出力されている場合、符号値ａ（ｊ）と符号値ａ（ｊ−ｍ）の差分が、符号値Ａ１に相当するとき、停止シーケンスの固定長部のシーケンスが検出される。
【００２３】
部分シーケンス検出部２ｄは、停止シーケンスの固定長部のシーケンスを検出すると、検出したときの符号値を期待値算出部２ｅに供給する。図１の例では、符号値ａ（ｊ）が期待値算出部２ｅに供給されている。
【００２４】
期待値算出部２ｅは、固定長部のシーケンスが検出されたときの符号値と、符号値Ａ２とに基づき、停止シーケンスの終了時における、符号値算出部２ｂで算出される符号値の期待値を算出する。
【００２５】
例えば、期待値算出部２ｅは、固定長部のシーケンスが検出されたときの符号値が符号値ａ（ｊ）のとき、符号値ａ（ｊ）と符号値Ａ２のＸＯＲ演算から期待値ｂ（ｊ＋ｎ−ｍ）を算出する（後述の式（３）参照）。
【００２６】
動作停止部２ｆは、符号値算出部２ｂから出力される符号値と、期待値とが一致したときに、デバッグ対象回路３を停止する。図１には、符号値算出部２ｂから出力される符号値ａ（ｊ＋ｎ−ｍ）が期待値ｂ（ｊ＋ｎ−ｍ）に一致した例が示されている。このとき、動作停止部２ｆは、デバッグ対象回路３の動作を停止する旨を指示する回路停止信号を出力する。
【００２７】
動作停止部２ｆは、例えば、回路停止信号により、デバッグ対象回路３へクロック信号の供給を停止することで、デバッグ対象回路３の動作を停止する。また、動作停止部２ｆは、デバッグ対象回路３へのデータの入力またはデバッグ対象回路３からのデータの出力を遮断して、デバッグ対象回路３が停止しているように扱うようにしてもよい。
【００２８】
デバッガ装置４は、半導体装置１と通信してデバッグを行う装置である。デバッガ装置４は、例えば、コンピュータでありソフトウェアで以下の処理を行う。デバッガ装置４は、まず、ユーザ（デバッグ作業者）から停止シーケンスを取得する（ステップＳ１）。次にデバッガ装置４は、停止シーケンスを固定長の前半部分のシーケンスと後半部分のシーケンスに分割し（ステップＳ２）、固定長部のシーケンスと後続部のシーケンスをそれぞれ符号化した符号値Ａ１，Ａ２を算出する（ステップＳ３）。そして、デバッガ装置４は、算出した符号値Ａ１，Ａ２を半導体装置１に出力（送信）する（ステップＳ４）。
【００２９】
以下、半導体装置１とデバッガ装置４を含むデバッグシステムによるデバッグ方法の一例を説明する。
デバッガ装置４による上記のステップＳ１〜Ｓ４の処理で算出され、送信された符号値Ａ１，Ａ２は、半導体装置１のデバッグ回路２の記憶部２ａに記憶される。
【００３０】
デバッグ回路２は、デバッグ対象回路３の信号の遷移を検出しており、符号値算出部２ｂは、図１の例では、入力データｘまたは出力データｙのシーケンスに基づき、符号値を更新する。
【００３１】
例えば、図１のように、デバッグ対象回路３の入力データｘと出力データｙが、（ｘi，ｙi）→…→（ｘj，ｙj）と遷移したとき、符号値は、ａ（ｉ）→…→ａ（ｊ）のように更新される。
【００３２】
符号値ａ（ｊ）が符号値算出部２ｂから出力されたとき、遅延部２ｃから出力される符号値ａ（ｊ−ｍ）との差分が、符号値Ａ１に相当する場合、部分シーケンス検出部２ｄは、符号値ａ（ｊ）を期待値算出部２ｅに供給する。期待値算出部２ｅは、符号値ａ（ｊ＋ｎ−ｍ）と符号値Ａ２とに基づき期待値ｂ（ｊ＋ｎ−ｍ）を算出する。
【００３３】
入力データｘと出力データｙが（ｘj，ｙj）の状態からさらに遷移して、（ｘj+n-m，ｙj+n-m）となったとする。このとき、符号値算出部２ｂから出力される符号値ａ（ｊ＋ｎ−ｍ）が、期待値ｂ（ｊ＋ｎ−ｍ）に一致した場合、動作停止部２ｆは、デバッグ対象回路３の信号のシーケンスが、停止条件に相当すると判定し、デバッグ対象回路３の動作を停止する。
【００３４】
その後は、例えば、デバッガ装置４により、デバッグ対象回路３の各部の信号の様子を調査するなどのデバッグ作業が行われる。
このように、本実施の形態のデバッグ回路２は、デバッグ対象回路３の信号のシーケンスから、停止シーケンスの固定長部を、符号値算出部２ｂから出力される符号値の変化分（前述の差分）に基づき特定する。また、デバッグ回路２は停止シーケンスの後続部を、符号値そのもの（符号値の絶対値）から特定する。これによって、初期状態が不明なシーケンスからでも停止条件を特定できるようになるため作業効率が上がる。例えば、入力データｘと出力データｙが（ｘi，ｙj）の状態が初期状態でなく、シーケンスの途中の状態であっても上記のように、停止条件を特定できるためである。つまり、任意のシーケンスから、停止条件を検出できるようになる。そのため、デバッグ対象回路３の初期状態が不明な場合にも、停止条件を検出して回路動作を停止させることができるようになる。
【００３５】
また、上記のような符号値を用いることで、ハードウェア上の制約があっても、様々な条件でデバッグ対象回路３を停止することが容易になり、デバッグの作業効率が上がる。
また、デバッグ回路２は、入力データｘや出力データｙを直接扱うのではなく、データ量の小さい符号値を用いて処理を行うため、処理を小規模な回路で行えるとともに高速動作が可能となる。
【００３６】
さらに、複雑なシーケンスを停止条件とした場合でも、停止条件は符号値として表現できるので、記憶部２ａの容量は小さくてすみ、デバッグ回路２及び半導体装置１の回路面積を小さくできる。
【００３７】
また、停止条件を変更するとき、記憶部２ａはその停止条件を示すシーケンスを符号化した符号値を記憶すればよいため、特に回路の再実装などを行わなくてすみ、デバッグの作業効率が上がる。
【００３８】
（第２の実施の形態）
図２は、第２の実施の形態の半導体装置及びデバッガ装置を含むデバッグシステムの例を示す図である。
【００３９】
デバッグシステムは、半導体装置１０とデバッガ装置２０を含み、それらは通信ケーブル２０ｂにより接続されている。なお、半導体装置１０とデバッガ装置２０は無線で通信を行ってもよい。
【００４０】
半導体装置１０は、例えば、ＳｏＣ（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）などがある。
【００６０】
機器接続インタフェース２７は、デバッガ装置２０に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース２７には、メモリ装置２７ａやメモリリーダライタ２７ｂを接続することができる。メモリ装置２７ａは、機器接続インタフェース２７との通信機能を搭載した記録媒体である。メモリリーダライタ２７ｂは、メモリカード２７ｃへのデータの書き込み、またはメモリカード２７ｃからのデータの読み出しを行う装置である。メモリカード２７ｃは、カード型の記録媒体である。
【００６１】
また、機器接続インタフェース２７は、通信ケーブル２０ｂを介して半導体装置１０に接続されている。
ネットワークインタフェース２８は、ネットワーク２８ａに接続されている。ネットワークインタフェース２８は、ネットワーク２８ａを介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００６２】
以上のようなハードウェア構成によって、第２の実施の形態のデバッガ装置２０の処理機能を実現することができる。なお、第１の実施の形態のデバッガ装置４も、図３に示したデバッガ装置２０と同様のハードウェアにより実現することができる。
【００６３】
デバッガ装置２０は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。デバッガ装置２０に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、デバッガ装置２０に実行させるプログラムをＨＤＤ２３に格納しておくことができる。プロセッサ２１は、ＨＤＤ２３内のプログラムの少なくとも一部をＲＡＭ２２にロードし、プログラムを実行する。またデバッガ装置２０に実行させるプログラムを、光ディスク２６ａ、メモリ装置２７ａ、メモリカード２７ｃなどの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ２１からの制御により、ＨＤＤ２３にインストールされた後、実行可能となる。またプロセッサ２１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００６４】
（デバッグ方法）
以下、上記の半導体装置１０及びデバッガ装置２０を用いたデバッグ方法を説明する。
図５は、デバッガ装置による停止条件の設定処理の一例の流れを示すフローチャートである。
【００６５】
デバッガ装置２０は、例えば、作業者２０ａによるキーボード２５ａやマウス２５ｂの操作などによって入力される複数の停止シーケンスを取得する（ステップＳ１０）。そして、デバッガ装置２０は、停止シーケンスを固定長部のシーケンスと後続部のシーケンスに分割する（ステップＳ１１）。さらに、デバッガ装置２０は、固定長部のシーケンスと後続部のシーケンスをそれぞれＣＲＣで符号化した符号値を算出する（ステップＳ１２）。ステップＳ１２の処理では、デバッガ装置２０は、固定長部のシーケンスの始めの信号（入力データと出力データ）から、符号値を算出し、後続の信号によって符号値を更新していく。固定長部のシーケンスの最後の信号による符号値の更新が終わると、そのときの符号値が固定長部のシーケンスによる符号値となる。後続部のシーケンスについても同様に処理されて、符号値が算出される。
【００６６】
デバッガ装置２０は、ステップＳ１２の処理で算出した符号値を、半導体装置１０に送信する（ステップＳ１３）。これによりデバッガ装置２０の停止条件の設定処理が終了する。
【００６７】
図６は、半導体装置による処理の一例の流れを示すフローチャートである。
半導体装置１０は、デバッガ装置２０から送信された符号値を受信部１３で受信する（ステップＳ２０）。そして、半導体装置１０の図示しない制御部は、複数の停止シーケンスの固定長部のシーケンスの符号値をレジスタ１１ａ１〜１１ａｐに記憶し、後続部のシーケンスの符号値をレジスタ１１ｂ１〜１１ｂｐに設定（記憶）する（ステップＳ２１）。
【００６８】
その後、デバッグ回路１１の動作停止部１１ｈは、デバッグ対象のユーザ回路１２に動作を開始させる（ステップＳ２２）。例えば、動作停止部１１ｈは、ユーザ回路１２へのクロック信号の供給をオンすることで、ユーザ回路１２は動作を開始する。
【００６９】
ユーザ回路１２の動作開始後、デバッグ回路１１の符号値算出部１１ｃは、図示しないクロックの各タイミングで、ユーザ回路１２の入力データｘまたは出力データｙに基づき、ＣＲＣで符号値を算出する（ステップＳ２３）。
【００７０】
その後、部分シーケンス検出部１１ｅは、レジスタ１１ａ１〜１１ａｐに記憶された停止シーケンスの固定長部のシーケンスの符号値を読み出し、以下のように、停止シーケンスの固定長部のシーケンスの検出を行う（ステップＳ２４）。
【００７１】
図７は、ユーザ回路の信号が、停止シーケンスを含むシーケンスで遷移する例を示す図である。
図７では、時刻０から開始されたシーケンスの一例が示されている。あるシーケンスＸの後に停止シーケンスＳが続き、再びあるシーケンスＹが続いている。また、図７では、符号値算出部１１ｃで算出される符号値の例が示されている。シーケンスＸの最後で算出される符号値はＣＲＣ（Ｘ）、停止シーケンスＳの固定長部のシーケンスＳａの最後で算出される符号値はＣＲＣ（Ｘ＆Ｓ１）、後続部のシーケンスＳｂ（任意長）の最後で算出される符号値はＣＲＣ（Ｘ＆Ｓ）である。なお、“＆”はシーケンスの連接を表す。
【００７２】
ＣＲＣの線形性から、以下の式が成り立つ。
ＣＲＣ（Ｘ＆Ｓ）＝ＣＲＣ（（Ｘ＆０m）＋（０k＆Ｓａ））＝ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（０k＆Ｓａ）＝ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（Ｓａ）＝Ｈ（ｍ）・ＣＲＣ（Ｘ）＋ＣＲＣ（Ｓａ）                                          （１）
式（１）において、“＋”はＸＯＲ演算を表している（以降の式でも同じである）。また、“０m”は、ｍ時刻分、連続してユーザ回路１２の信号（入力データｘ，出力データｙ）が０であるシーケンスを示している。また、シーケンスＸの長さを、ｋ時刻分のユーザ回路１２の信号のシーケンスの長さとすると、“０k”は、ｋ時刻分、連続してユーザ回路１２の信号が０であるシーケンスを示している。
【００７３】
また、式（１）において、ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（０k＆Ｓａ）＝ＣＲＣ（Ｘ＆０m）＋ＣＲＣ（Ｓａ）であるのは、ＣＲＣの性質から、初期状態から連続する０は、その個数によらず、ＣＲＣの値に影響しないためである。
【００７４】
また、式（１）においてＨ（ｍ）は、＆０mと同じ効果をもたらすように、ＣＲＣの値を変換する正方行列である。正方行列Ｈを用いたＣＲＣの演算の例は、例えば、非特許文献１に記載されている。
【００７５】
図８は、シーケンスＳａの検出例を示す図である。
時刻ｊで、符号値算出部１１ｃが算出する符号値をａ（ｊ）とする。時刻ｊでは、シフトレジスタ１１ｄは、時刻ｊに対してｍ時刻分前（ｍクロックタイミング前）の時刻ｊ−ｍの符号値ａ（ｊ−ｍ）を出力する。
【００７６】
部分シーケンス検出部１１ｅは、符号値ａ（ｊ），ａ（ｊ−ｍ）を受けて、符号値ａ（ｊ）とａ（ｊ−ｍ）との差分に基づく以下の条件式が成立するか否かを評価する。
ａ（ｊ）−Ｈ（ｍ）・ａ（ｊ−ｍ）＝ＣＲＣ（Ｓ１）            （２）
式（２）の条件式は、時刻（ｊ−ｍ＋１）から、時刻ｊまでのシーケンスが、シーケンスＳａに一致するとき、時刻０からのシーケンスＸが未知であっても成立する。
【００７７】
部分シーケンス検出部１１ｅは、上記のようなＣＲＣ差分（ＣＲＣで符号化された符号値の変化分）に基づく式（２）が成立するか否かを判定することで、固定長部のシーケンスを検出したか否かを判定する（ステップＳ２５）。
【００７８】
式（２）が成立するとき、図８に示すように、符号値ａ（ｊ−ｍ）は、ａ（ｊ−ｍ）＝ＣＲＣ（Ｘ）となり、符号値ａ（ｊ）は、ａ（ｊ）＝ＣＲＣ（Ｘ＆Ｓａ）となり、時刻ｊでは、符号値ａ（ｊ），ａ（ｊ−ｍ）のシーケンスＳａの最後の信号が検出されたことになる。したがって、上記式（２）が成立するとき、部分シーケンス検出部１１ｅは、シーケンスＳａが検出されたと判定し、時刻ｊの符号値ａ（ｊ）を期待値算出部１１ｆに送る。
【００７９】
固定長のシーケンスが検出されないとき、すなわち、式（２）が成立しないときは、ステップＳ２３からの処理が繰り返される。
期待値算出部１１ｆは符号値ａ（ｊ）を受けると、期待値の算出を行う（ステップＳ２６）。
【００８０】
図９は、停止シーケンスＳの検出用の期待値の算出例を示す図である。
上記のように、時刻ｊでは、ａ（ｊ）＝ＣＲＣ（Ｘ＆Ｓａ）となっている。停止シーケンスＳの長さを、ｎ時刻分の信号のシーケンスの長さとすると、シーケンスＳａに引き続いてシーケンスＳｂが発生するとき、時刻ｊ＋ｎ−ｍでの、符号値の期待値ＣＲＣ（Ｘ＆Ｓ）は、以下の式で与えられる。
【００８１】
ＣＲＣ（Ｘ＆Ｓ）＝ＣＲＣ（Ｘ＆Ｓａ＆Ｓｂ）＝ＣＲＣ（Ｘ＆Ｓａ＆０n-m）＋ＣＲＣ（Ｓｂ）＝Ｈ（ｎ−ｍ）・ＣＲＣ（Ｘ＆Ｓａ）＋ＣＲＣ（Ｓｂ）            （３）
ここで、ＣＲＣ（Ｓｂ）は、停止シーケンスＳの後続部のシーケンスＳｂの符号値であり、レジスタ１１ｂ１〜１１ｂｐの何れかに記憶されているものである。
【００８２】
したがって、期待値算出部１１ｆは、検出された固定長部のシーケンスＳａに対応するシーケンスＳｂの符号値をレジスタ１１ｂ１〜１１ｂｐの何れかから読み出して、上記の式（３）により期待値を算出する。
【００８３】
その後、符号値算出部１１ｃによる符号値の更新が行われ（ステップＳ２７）、動作停止部１１ｈは、時刻ｊ＋ｎ−ｍにおいて、符号値（ＣＲＣ絶対値）が期待値と一致するか否か判定する（ステップＳ２８）。時刻ｊ＋ｎ−ｍにおいて、符号値が期待値と一致するときには、図９に示したように、停止シーケンスＳが検出されたと判定できるので、動作停止部１１ｈは、デバッグ対象であるユーザ回路１２の動作を停止させ（ステップＳ２９）、ある停止シーケンス検出時のユーザ回路１２の停止処理を終える。
【００８４】
動作停止部１１ｈは、例えば、回路停止信号により、ユーザ回路１２へクロック信号の供給を停止することで、ユーザ回路１２の動作を停止する。また、動作停止部１１ｈは、ユーザ回路１２へのデータの入力またはユーザ回路１２からのデータの出力を遮断して、ユーザ回路１２が停止しているように扱うようにしてもよい。
【００８５】
時刻ｊ＋ｎ−ｍにおいて、符号値が期待値と一致しないときには、動作停止部１１ｈは、停止シーケンスＳが検出されなかったと判定し、再度ステップＳ２３からの処理を繰り返す。
【００８６】
その後は、例えば、デバッガ装置２０により、ユーザ回路１２の各部の信号の様子を調査するなどのデバッグ作業が行われる。
以上のような半導体装置１０、デバッグ回路１１及びデバッガ装置２０によれば、第１の実施の形態の半導体装置１、デバッグ回路２及びデバッガ装置４と同様の効果が得られる。また、複数の停止シーケンスのそれぞれの固定長部のシーケンスと後続部のシーケンスの符号値に基づきユーザ回路１２の停止処理を行うので、複数の停止条件でユーザ回路１２を停止できる。
【００８７】
なお、上記の期待値算出部１１ｆの処理は、デバッガ装置２０のソフトウェアで実現されるようにして、デバッグ回路１１及び半導体装置１０の回路面積を小さくすることもできる。その場合、デバッグ回路１１による固定長部のシーケンス検出後、デバッガ装置２０は、動作停止部１１ｈにユーザ回路１２を停止させる。そして、デバッガ装置２０は、ユーザ回路１２の停止タイミングで、符号値算出部１１ｃが算出した符号値を取得し、その符号値と、後続部のシーケンスの符号値とから期待値を算出する。そして、デバッガ装置２０は、算出した期待値を、半導体装置１０に送信し、半導体装置１０に、その期待値をデバッグ回路１１のレジスタ１１ｇ１〜１１ｇｐに設定させる。
【００８８】
（第３の実施の形態）
上記では、停止シーケンスは固定長部と後続部の２つのシーケンスに分割され、それぞれのシーケンスの符号値に基づき、停止シーケンスが検出される例を説明したが、これに限定されない。停止シーケンスは３つ以上のシーケンスに分割され、それぞれのシーケンスの符号値に基づき、停止シーケンスが検出されるようにしてもよい。以下、３つに分割された停止シーケンスに含まれる３つのシーケンスの符号値に基づき停止シーケンスを検出する半導体装置の一例を説明する。
【００８９】
図１０は、第３の実施の形態の半導体装置の一例を示す図である。
図１０において、図３に示した半導体装置１０と同様の要素については同一符号を付しており、説明を省略する。なお、以下では説明を簡略化するため、半導体装置１０ａのデバッグ回路３０は、１つの停止シーケンスを検出するが、複数の停止シーケンスを検出するようにしてもよい。
【００９０】
半導体装置１０ａは、レジスタ１１ａ，１１ｂ，１１ｉを有している。レジスタ１１ａは、停止シーケンスを３分割した３つのシーケンスのうち、最初のシーケンスの符号値を記憶する。レジスタ１１ｂは、停止シーケンスを３分割した３つのシーケンスのうち、２番目のシーケンスの符号値を記憶する。レジスタ１１ｉは、停止シーケンスを３分割した３つのシーケンスのうち、最後のシーケンスの符号値を記憶する。以下分割した停止シーケンスの最初のシーケンスをシーケンスＳ1、２番目のシーケンスをシーケンスＳ2、３番目のシーケンスをシーケンスＳ3という。
【００９１】
なお、シーケンスＳ1の長さは、シフトレジスタ１１ｄが保持できるデータ容量に基づく固定長であり、以下では、ｍ１時刻分（クロックタイミングｍ１個分）の信号のシーケンスの長さとする。
【００９２】
また、シーケンスＳ2，Ｓ3は任意長であるが、その長さに関する情報は、例えば、レジスタ１１ｂ，１１ｉに記憶される。以下では、シーケンスＳ2の長さをｍ２時刻分（クロックタイミングｍ２個分）、シーケンスＳ3の長さをｍ３時刻分（クロックタイミングｍ３個分）の長さとする。
【００９３】
シフトレジスタ１１ｄａは、符号値算出部１１ｃで算出される符号値を、シーケンスＳ1の長さ分（ｍ１時刻分）保持したのち、最初に入力された符号値から順次出力する。
部分シーケンス検出部１１ｅａは、符号値算出部１１ｃから出力される符号値と、シフトレジスタ１１ｄａから出力される符号値との差分と、レジスタ１１ａに記憶されている符号値との比較結果に基づき、シーケンスＳ1を検出する。
【００９４】
期待値算出部１１ｆａは、シーケンスＳ1の検出時の符号値と、レジスタ１１ｂに記憶されているシーケンスＳ2の符号値とに基づき、シーケンスＳ2の終了時における、符号値算出部１１ｃで算出される符号値の期待値を算出する。また、期待値算出部１１ｆａは、シーケンスＳ2の検出時の符号値と、レジスタ１１ｉに記憶されているシーケンスＳ3の符号値とに基づき、停止シーケンスの終了時における、符号値算出部１１ｃで算出される符号値の期待値を算出する。期待値の算出は、式（３）に示したようなＣＲＣの線形性を利用して算出できる。
【００９５】
レジスタ１１ｊ１，１１ｊ２は、期待値算出部１１ｆで算出された、各期待値を記憶する。レジスタ１１ｊ１には、シーケンスＳ2の終了時における、符号値算出部１１ｃで算出される符号値の期待値が記憶され、レジスタ１１ｊ２には、停止シーケンスの終了時における、符号値算出部１１ｃで算出される符号値の期待値が記憶される。
【００９６】
動作停止部１１ｈａは、符号値算出部２ｂから出力される符号値と、レジスタ１１ｊ１に記憶されている期待値とが一致したときに、シーケンスＳ2が検出されたと判定する。そして、動作停止部１１ｈａは、期待値算出部１１ｆａに、次のシーケンスＳ3の終了時（本実施の形態では停止シーケンスの終了時）における符号値算出部１１ｃで算出される符号値の期待値を算出させる。さらに、動作停止部１１ｈａは、符号値算出部２ｂから出力される符号値と、レジスタ１１ｊ２に記憶されている期待値とが一致したときに、シーケンスＳ3が検出されたと判定し、ユーザ回路１２を停止させる。
【００９７】
図１１は、３分割した停止シーケンス検出処理の一例を示す図である。
図１１では、部分シーケンス検出部１１ｅａが、時刻ｊにおいて、レジスタ１１ａに記憶されている符号値と、時刻ｊの符号値ａ（ｊ）と、時刻ｊ−ｍ１の符号値ａ（ｊ−ｍ１）からシーケンスＳ1を検出した例が示されている。このとき、符号値ａ（ｊ−ｍ１）＝ＣＲＣ（Ｘ）、符号値ａ（ｊ）＝ＣＲＣ（Ｘ＆Ｓ1）となっている。
【００９８】
時刻ｊで、シーケンスＳ1が検出されると、期待値算出部１１ｆａは、シーケンスＳ2の終了時における、符号値算出部１１ｃで算出される符号値の期待値を算出する。シーケンスＳ2の長さは、前述したように、ｍ２時刻分の長さであるため、時刻ｊ＋ｍ２での符号値ａ（ｊ＋ｍ２）の期待値が算出される。この期待値は、ＣＲＣ（Ｘ＆Ｓ1＆Ｓ2）で表され、時刻ｊの符号値ａ（ｊ）と、レジスタ１１ｂに記憶されているシーケンスＳ2の符号値（ＣＲＣ（Ｓ2））に基づき算出される。算出された期待値はレジスタ１１ｊ１に記憶される。
【００９９】
時刻ｊ＋ｍ２において、動作停止部１１ｈａは、符号値算出部２ｂから出力される符号値ａ（ｊ＋ｍ２）と、レジスタ１１ｊ１に記憶されている期待値とが一致したときに、シーケンスＳ2が検出されたと判定する。一致しないときには、動作停止部１１ｈａは、入力データｘと出力データｙによるシーケンスは停止シーケンスＳと異なると判定し、期待値算出部１１ｆａに、次のシーケンスＳ3終了時の期待値を算出させない。
【０１００】
シーケンスＳ2が検出されたとき、期待値算出部１１ｆａは、次のシーケンスＳ3の終了時における、符号値算出部１１ｃで算出される符号値の期待値を算出する。シーケンスＳ3の長さは、前述したように、ｍ３時刻分の長さであるため、時刻ｊ＋ｍ２＋ｍ３での符号値ａ（ｊ＋ｍ２＋ｍ３）の期待値が算出される。この期待値は、ＣＲＣ（Ｘ＆Ｓ）（＝ＣＲＣ（Ｘ＆Ｓ1＆Ｓ2＆Ｓ3））で表され、時刻ｊの符号値ａ（ｊ＋ｍ２）と、レジスタ１１ｉに記憶されているシーケンスＳ3の符号値（ＣＲＣ（Ｓ3））に基づき算出される。算出された期待値はレジスタ１１ｊ２に記憶される。
【０１０１】
時刻ｊ＋ｍ２＋ｍ３において、動作停止部１１ｈａは、符号値算出部２ｂから出力される符号値ａ（ｊ＋ｍ２＋ｍ３）と、レジスタ１１ｊ２に記憶されている期待値とが一致したときに、停止シーケンスＳが検出されたと判定する。そして、動作停止部１１ｈａは、ユーザ回路１２の動作を停止させる。一致しないときには、動作停止部１１ｈａは、停止シーケンスＳが検出されなかったと判定し、ユーザ回路１２の動作を停止させない。
【０１０２】
以上のような半導体装置１０ａによる効果として、例えば、以下の点があげられる。
ＣＲＣはビット数が決まっているため、複数のシーケンスで同じＣＲＣの値が算出される可能性がある。そのため、例えば、図９に示した時刻ｊ＋ｎ−ｍにおいて、実際は停止シーケンスではないにもかかわらず、符号値が停止シーケンスＳの終了時の期待値と一致してしまう可能性がある。
【０１０３】
本実施の形態の半導体装置１０ａは、３つに分割された停止シーケンスの途中における符号値の期待値と、符号値算出部１１ｃで算出される符号値との比較判定を行うことで、現在のシーケンスが停止シーケンスであるか否かを検出する回数を増やせる。これにより、誤って回路を停止させてしまうことを抑制できる。分割数が増えるほどこの効果は高まる。
【０１０４】
（第４の実施の形態）
図１２は、第４の実施の形態の半導体装置の一例を示す図である。
図１２において、図３に示した半導体装置１０と同様の要素については同一符号を付しており、説明を省略する。
【０１０５】
第４の実施の形態の半導体装置１０ｂのデバッグ回路４０では、複数（ｐ個）の停止条件を示す停止シーケンスに対応して、ｐ個の部分シーケンス検出部１１ｅ１〜１１ｅｐ、動作停止部１１ｈ１〜１１ｈｐが設けられている。
【０１０６】
部分シーケンス検出部１１ｅ１〜１１ｅｐのそれぞれは、レジスタ１１ａ１〜１１ａｐに記憶されている複数の停止シーケンスの固定長部のシーケンスの符号値の何れか１つを受ける。例えば、部分シーケンス検出部１１ｅ１は、レジスタ１１ａ１に記憶されている符号値を受け、部分シーケンス検出部１１ｅｐは、レジスタ１１ａｐに記憶されている符号値を受ける。さらに、部分シーケンス検出部１１ｅ１〜１１ｅｐは、符号値算出部１１ｃから出力される現在の符号値とシフトレジスタ１１ｄから出力される符号値を受ける。部分シーケンス検出部１１ｅ１〜１１ｅｐは、これらの符号値に基づき、複数の停止シーケンスの固定長部のシーケンスを同時に検出する。
【０１０７】
また、動作停止部１１ｈ１〜１１ｈｐのそれぞれは、レジスタ１１ｇ１〜１１ｇｐに記憶されている複数の停止シーケンスに対応した複数の期待値の何れか１つを受ける。例えば、動作停止部１１ｈ１は、レジスタ１１ｇ１に記憶されている期待値を受け、動作停止部１１ｈｐは、レジスタ１１ｇｐに記憶されている期待値を受ける。さらに、動作停止部１１ｈｐは、符号値算出部１１ｃから出力される現在の符号値を受ける。動作停止部１１ｈ１〜１１ｈｐは、これらの符号値に基づき、複数の停止シーケンスを同時に検出する。
【０１０８】
このような半導体装置１０ｂによれば、第２の実施の形態の半導体装置１０と同様の効果が得られるとともに、複数の停止シーケンスを並列に同時に検出でき、デバッグの作業効率を上げられる。
【０１０９】
（第５の実施の形態）
図１３は、第５の実施の形態の半導体装置の一例を示す図である。
図１３において、図３に示した半導体装置１０と同様の要素については同一符号を付しており、説明を省略する。
【０１１０】
第５の実施の形態の半導体装置１０ｃのデバッグ回路５０では、シフトレジスタ１１ｄｂに含まれる直列に接続されたフリップフロップｆｆ１，ｆｆ２，…，ｆｆｍの各出力端子が、部分シーケンス検出部１１ｅｂに接続されている。なお、図１３では、各フリップフロップｆｆ１〜ｆｆｍに入力されるクロック信号については図示が省略されている。
【０１１１】
つまり、シフトレジスタ１１ｄｂは、入力された符号値の出力を複数段階で遅延する。
これにより、部分シーケンス検出部１１ｅｂには、シフトレジスタ１１ｄｂから、符号値算出部１１ｃで算出された現在の符号値に対して、１時刻分前〜ｍ時刻分前（１クロックタイミング前からｍクロックタイミング前）までの符号値が供給される。
【０１１２】
部分シーケンス検出部１１ｅｂは、符号値算出部１１ｃから出力される符号値と、各フリップフロップｆｆ１〜ｆｆｍの何れかから出力される符号値との差分と、レジスタ１１ａ１〜１１ａｐに記憶された符号値との比較結果に基づき固定長部のシーケンスを検出する。
【０１１３】
第２の実施の形態の半導体装置１０では、シフトレジスタ１１ｄは、符号値算出部１１ｃで算出された現在の符号値に対して、ｍ時刻分前の符号値を出力するものであり、停止シーケンスの固定長部のシーケンスの長さもｍ時刻分としていた。これに対し、第５の実施の形態の半導体装置１０ｃは、上記のようなシフトレジスタ１１ｄｂと部分シーケンス検出部１１ｅｂを有することで、停止シーケンスの固定長部のシーケンスの長さがｍ時刻分よりも短くても、そのシーケンスを検出できる。そのため、停止シーケンス自体が、ｍ時刻分の長さよりも短くても、その停止シーケンスを検出できる。これにより、扱える停止シーケンスが増え、様々な停止条件に対応できるようになり、デバッグの作業効率を上げられる。
【０１１４】
（第６の実施の形態）
図１４は、第６の実施の形態の半導体装置の一例を示す図である。
図１４において、図３に示した半導体装置１０と同様の要素については同一符号を付しており、説明を省略する。
【０１１５】
第６の実施の形態の半導体装置１０ｄは、トレースバッファ６０を有している。トレースバッファ６０は、デバッグ対象のユーザ回路１２の信号（入力データｘ、出力データｙ）のシーケンスを保持する。
【０１１６】
トレースバッファ６０が、ユーザ回路１２の信号のシーケンスをどの程度保持するかは、回路面積の増加分などを考慮して適宜決められるが、停止シーケンスの長さ分保持できるようにすることが望ましい。この場合、保持しているシーケンスが停止シーケンスと完全に一致しているか判定できるためである。
【０１１７】
図１５は、トレースバッファを用いたデバッグ方法の一例を示すフローチャートである。
ステップＳ２９までの処理は、図６に示した処理内容と同じである。デバッグ対象であるユーザ回路１２の動作が動作停止部１１ｈによって停止されたとき、デバッガ装置２０は、トレースバッファ６０からユーザ回路１２の状態（信号のシーケンス）を読み出す（ステップＳ３０）。そして、デバッガ装置２０は、停止条件が成立しているか否かを、停止シーケンスと読み出した信号のシーケンスの一部またはすべて一致するか否かを判定する（ステップＳ３１）。例えば、トレースバッファ６０に、ｎ時刻分の停止シーケンスの長さ以上の信号のシーケンスが保持されている場合、最新のｎ時刻分の信号のシーケンスと、停止シーケンスが一致しているときには、停止条件が成立していると判定される。
【０１１８】
例えば、トレースバッファ６０に、ｎ時刻分の停止シーケンスの長さより短い信号のシーケンスが保持されている場合、保持されているすべての信号のシーケンスと、停止シーケンスの一部が一致しているときには、停止条件が成立していると判定される。
【０１１９】
停止条件が成立したと判定されたとき、ある停止シーケンス検出時のユーザ回路１２の停止処理が終わる。デバッガ装置２０は、停止条件が成立していないと判定したとき、半導体装置１０ｄのデバッグ回路１１の動作停止部ｈに、ユーザ回路１２の動作を再開させる。
【０１２０】
前述のようにＣＲＣはビット数が決まっているため、複数のシーケンスで同じＣＲＣの値が算出される可能性がある。そのため、例えば、図９に示した時刻ｊ＋ｎ−ｍにおいて、実際は停止シーケンスではないにもかかわらず、符号値が停止シーケンスＳの終了時の期待値と一致してしまう可能性がある。
【０１２１】
図１５に示したようなデバッグ方法によれば、デバッガ装置２０が、半導体装置１０ｄのトレースバッファ６０に保持されている信号のシーケンスから、本当に停止条件が成立しているのか検証することができる。そのため、誤ってユーザ回路１２を停止させてしまうことを抑制できる。
【０１２２】
なお、上記の各実施の形態は、互いに組み合わせることができる。
以上、実施の形態に基づき、本発明のデバッグ回路、半導体装置及びデバッグ方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【０１２３】
１  半導体装置
２  デバッグ回路
２ａ  記憶部
２ｂ  符号値算出部
２ｃ  遅延部
２ｄ  部分シーケンス検出部
２ｅ  期待値算出部
２ｆ  動作停止部
３  デバッグ対象回路
４  デバッガ装置
【図１】
0006354489.tif 000002
【図２】
0006354489.tif 000003
【図３】
0006354489.tif 000004
【図４】
0006354489.tif 000005
【図５】
0006354489.tif 000006
【図６】
0006354489.tif 000007
【図７】
0006354489.tif 000008
【図８】
0006354489.tif 000009
【図９】
0006354489.tif 000010
【図１０】
0006354489.tif 000011
【図１１】
0006354489.tif 000012
【図１２】
0006354489.tif 000013
【図１３】
0006354489.tif 000014
【図１４】
0006354489.tif 000015
【図１５】
0006354489.tif 000016