(57)【要約】  【課題】  ＬＳＳＤスキャンテストによりＳｏＣ内部の任意のレジスタの内容を読み取り、あるいは書き換えて、デバッグを実現する。  【解決手段】  ＳｏＣに、複数のラッチ回路がチェーン状に接続されたスキャンテストを実行するためのスキャンチェーンと、このスキャンチェーンに対するスキャンテストを実行しながらスキャンチェーンを構成する特定のラッチ回路を指定してデータを読み取るデバッグ回路１００とを備える。このスキャンチェーンは、出力を先頭のラッチ回路の入力に戻してフィードバックループを構成する。また、スキャンチェーンは複数存在し、それぞれ同数のラッチ回路にて構成され、スキャンテストを行うためのラッチ回路と、スキャンチェーンを構成するラッチ回路の数を揃えるためのダミーのラッチ回路とを備える。  【選択図】  図１
2005190112.tif 000002
【特許請求の範囲】
【請求項１】
複数のラッチ回路がチェーン状に接続された、スキャンテストを実行するためのスキャンチェーンと、
前記スキャンチェーンに対するスキャンテストを実行しながら当該スキャンチェーンを構成する特定のラッチ回路を指定して当該ラッチ回路のデータを読み取るデバッグ回路と
を備えることを特徴とするマイクロコンピュータ。
【請求項２】
前記デバッグ回路は、前記スキャンチェーンを構成する特定のラッチ回路を指定して当該ラッチ回路にデータを書き込むことを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項３】
前記スキャンチェーンは、当該スキャンチェーンの出力を、当該スキャンチェーンを構成する先頭のラッチ回路の入力に戻してフィードバックループを構成することを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項４】
前記スキャンチェーンは複数存在し、各スキャンチェーンは同数のラッチ回路にて構成されることを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項５】
前記スキャンチェーンは、スキャンテストを行うためのラッチ回路と、スキャンチェーンを構成するラッチ回路の数を揃えるためのダミーのラッチ回路とを備えることを特徴とする請求項４に記載のマイクロコンピュータ。
【請求項６】
前記デバッグ回路は、
前記スキャンチェーンにおける前記特定のラッチ回路をスキャンテストで用いられるクロックの数で指定したデータを保持する第１のレジスタと、
前記第１のレジスタに保持されたデータにて指定される前記特定のラッチ回路から読み取ったデータを保持する第２のレジスタと、
前記スキャンテストで用いられるクロックのカウント値と前記第１のレジスタに保持されたデータとから得られるタイミングで前記第２のレジスタにデータを出力するための制御信号を前記スキャンチェーンに送信する制御回路と
を備えることを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項７】
前記第１のレジスタに保持されたデータにて指定される前記特定のラッチ回路に書き込むデータを保持する第３のレジスタをさらに備え、
前記制御回路は、前記スキャンテストで用いられるクロックのカウント値と前記第１のレジスタに保持されたデータとから得られるタイミングで前記第３のレジスタに保持されたデータを前記スキャンチェーンに送信することを特徴とする請求項６に記載のマイクロコンピュータ。
【請求項８】
前記スキャンチェーン及び前記デバッグ回路は、スキャンテストの対象である回路と共に単一の集積回路上に実装されたことを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項９】
複数のラッチ回路がチェーン状に接続された、スキャンテストを実行するためのスキャンチェーンと、
前記スキャンチェーンを構成するラッチ回路のデータを当該スキャンチェーンに沿って順次シフトさせるためのクロックを生成して前記スキャンチェーンに供給するクロック供給手段と、
前記クロックのカウント値に基づいて得られるタイミングで前記スキャンチェーンから前記ラッチ回路のデータの読み取りを行うデータ読み取り手段と
を備えることを特徴とするマイクロコンピュータ。
【請求項１０】
前記クロックのカウント値に基づいて得られるタイミングで前記スキャンチェーンに対して前記ラッチ回路に書き込むデータを送信するデータ書き込み手段をさらに備えることを特徴とする請求項９に記載のマイクロコンピュータ。
【請求項１１】
前記スキャンチェーンは、当該スキャンチェーンの出力を、当該スキャンチェーンを構成する先頭のラッチ回路の入力に戻してフィードバックループを構成し、
前記クロック供給手段は、前記ラッチ回路のデータが前記フィードバックループに沿って一周するだけの前記クロックを生成し前記スキャンチェーンに供給することを特徴とする請求項９に記載のマイクロコンピュータ。
【請求項１２】
前記データ読み取り手段にて読み取られた前記ラッチ回路のデータを評価する評価手段をさらに備え、
前記スキャンチェーンと、前記クロック供給手段と、前記データ読み取り手段と、前記評価手段とが単一の集積回路上に実装されたことを特徴とする請求項９に記載のマイクロコンピュータ。
【請求項１３】
複数のラッチ回路がチェーン状に接続された、スキャンテストを行うためのスキャンチェーンを内蔵した電子回路に対してデバッグを行うデバッグ方法であって、
前記スキャンチェーンを構成するラッチ回路のデータを所定のクロックに従って順次シフトさせるステップと、
前記クロックのカウント値にて特定される前記ラッチ回路からデータを読み出し、当該ラッチ回路から読み取られたデータをデータ読み取り用のレジスタに保持するステップと、
前記データ読み取り用のレジスタに保持されたデータをコンピュータが読み込むステップと
を含むことを特徴とするデバッグ方法。
【請求項１４】
前記クロックのカウント値にて特定される前記ラッチ回路のデータを予めデータ書き込み用のレジスタに保持されたデータに置き換えるステップをさらに含むことを特徴とする請求項１３に記載のデバッグ方法。
【請求項１５】
前記ラッチ回路のデータをシフトさせるステップは、
システムクロックを停止するステップと、
データのシフトに用いられる前記所定のクロックを生成するステップとを含み、
前記データをコンピュータが読み込むステップは、
データのシフトに用いられる前記所定のクロックを停止するステップと、
前記システムクロックを再開するステップとを含むことを特徴とする請求項１３に記載のデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳｏＣ（System on Chip）の論理設計をテストするデバッグの方法およびデバッグを行うための機構に関する。
【背景技術】
【０００２】
今日、半導体集積技術の進歩に基づく集積度の向上により、チップ上に搭載できるゲート数が飛躍的に増加している。これにより、特定の用途のために設計・製造されるＡＳＩＣ（Application Specific Integrated Circuit）においても、１チップにプロセッサ、メモリ、周辺装置などのコンピュータの主要機能を集積したＳｏＣ（System on Chip）によるものが増加しつつある。ＡＳＩＣをＳｏＣとすることにより、実装に必要な面積を大幅に縮小し、消費電力も同等の機能を持つ複数チップによるシステムと比べて格段に抑えることができる。
【０００３】
一方、ＳｏＣは、各種のデバイスが１チップ上に集積されているため、プリント基板上に作成された回路とは異なり、直接その状態を調べることができない。例えば、プリント基板上の回路では、ロジックアナライザやオシロスコープを使い、データ・バスの値を直接読み込むことや、特定の信号の状態を調べることが容易であるが、ＳｏＣ化されたＡＳＩＣ（以下、単にＡＳＩＣと記す）では、端子にプローブを当てるこの種の検査を行うことができない。
【０００４】
ところで、ＡＳＩＣの製造時に、チップの良品・不良品を判別する手法として、ＬＳＳＤラッチ（フリップフロップ）を使用するＬＳＳＤスキャンテスト（LSSD Scan test）が広く行われている（例えば、特許文献１参照）。
図８は、ＬＳＳＤラッチの構成を示す図、図９は、ＬＳＳＤスキャンテストを実行するためのスキャンチェーンを説明する図である。
図８に示すように、ＬＳＳＤラッチ２００は、マスタラッチ２０１とスレイブラッチ２０２という２つのＤラッチを組み合わせて構成される。マスタラッチ２０１には、Ａクロックの入力及びこのＡクロックにより制御されるスキャンイン（Scan input）とＣクロックの入力及びこのＣクロックにより制御されるデータイン（Data input）がある。スレイブラッチ２０２には、Ｂクロックが接続され、このＢクロックがハイレベルのとき、マスタラッチ２０１のデータがスレイブラッチ２０２に入力される。
【０００５】
通常の動作では、Ａクロックはローレベルに固定されており、Ｂクロック及びＣクロックを使ってデータの保持を行う。一方、ＬＳＳＤスキャンテストの実行時は、テストデータの入力及びテスト結果の出力にＡクロック、Ｂクロックが使われる。
図９に示すように、このＬＳＳＤスキャンテストでは、チップ内の全てのＬＳＳＤラッチ（図ではＦＦと表記）を複数のスキャンチェーン（Scan Chain）で接続し、このＬＳＳＤラッチを介してテストパターンを入力する（Scan in）。そして、その結果を、ＬＳＳＤラッチに取り込むと共にスキャンチェーンを介してチップ外部に取り出し（Scan out）、取り出された結果と予め求めた期待値とを比較することで、チップの良品・不良品を判別することができる。
【０００６】
【特許文献１】特開平１０−１２３２２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上述したように、ＳｏＣであるＡＳＩＣに対しては、データ・バスにプローブを接続しデータを電気的に読み込むことができない。そのため、開発されたＡＳＩＣにバグが存在した場合、その原因追求が非常に困難であった。
【０００８】
また、ＬＳＳＤラッチ（フリップフロップ）を使ったスキャンテストは、チップが正しく製造されたかどうかを判別するものであり、ＡＳＩＣ自体の論理設計が正しいか否かを判別するものではない。したがって、ＡＳＩＣにバグが存在する場合の原因の探索には適さない。
さらに、このスキャンテストは、テストの実行によって全てのＬＳＳＤラッチの内容が変更されてしまう。そのため、同じ状態で再度テストを実行することができないという問題もある。
【０００９】
そこで本発明は、上記の課題を解決し、ＬＳＳＤスキャンテストによるＳｏＣのデバッグを実現することを目的とする。
また本発明は、ＳｏＣによるプログラムの実行を任意の時点で中断し、ＳｏＣ内部の任意のレジスタの内容を読み取り、あるいは書き換える手段を提供することを他の目的とする。
また本発明は、上記のレジスタの内容の読み取り、書き換えをレジスタの内容を破壊することなく行うことをさらに他の目的とする。
【課題を解決するための手段】
【００１０】
上記の目的を達成する本発明は、複数のラッチ回路がチェーン状に接続された、スキャンテストを実行するためのスキャンチェーンと、このスキャンチェーンに対するスキャンテストを実行しながらスキャンチェーンを構成する特定のラッチ回路を指定してデータを読み取るデバッグ回路とを備えるＳｏＣとして実現される。
さらに詳細には、このスキャンチェーンは、出力を先頭のラッチ回路の入力に戻してフィードバックループを構成する。また、スキャンチェーンは複数存在し、それぞれ同数のラッチ回路にて構成され、スキャンテストを行うためのラッチ回路と、スキャンチェーンを構成するラッチ回路の数を揃えるためのダミーのラッチ回路とを備える。
【００１１】
またデバッグ回路は、より詳細には、スキャンチェーンにおける特定のラッチ回路をスキャンテストで用いられるクロックの数で指定したデータを保持する第１のレジスタと、第１のレジスタに保持されたデータにて指定される特定のラッチ回路から読み取ったデータを保持する第２のレジスタと、スキャンテストで用いられるクロックのカウント値と第１のレジスタに保持されたデータとから得られるタイミングで第２のレジスタにデータを出力するための制御信号をスキャンチェーンに送信する制御回路とを備える。
さらにこのデバッグ回路に、第１のレジスタに保持されたデータにて指定される特定のラッチ回路に書き込むデータを保持する第３のレジスタを備えることができる。この場合、制御回路は、スキャンテストで用いられるクロックのカウント値と第１のレジスタに保持されたデータとから得られるタイミングで第３のレジスタに保持されたデータをスキャンチェーンに送信する。
【００１２】
また本発明による他のＳｏＣは、複数のラッチ回路がチェーン状に接続された、スキャンテストを実行するためのスキャンチェーンと、このスキャンチェーンを構成するラッチ回路のデータをスキャンチェーンに沿って順次シフトさせるためのクロックを生成してスキャンチェーンに供給するクロック供給手段と、このクロックのカウント値に基づいて得られるタイミングでスキャンチェーンからラッチ回路のデータの読み取りを行うデータ読み取り手段とを備えることを特徴とする。
さらにこのＳｏＣに、クロックのカウント値に基づいて得られるタイミングでスキャンチェーンに対してラッチ回路に書き込むデータを送信するデータ書き込み手段、データ読み取り手段にて読み取られたラッチ回路のデータを評価する評価手段といった構成要素を備えることができる。
そして、より好ましくは、スキャンチェーンは、出力であるスキャンアウトを、スキャンチェーンを構成する先頭のラッチ回路の入力であるスキャンインに戻してフィードバックループを構成し、クロック供給手段は、ラッチ回路のデータがフィードバックループに沿って一周するだけ、すなわちスキャンチェーンを構成するラッチ回路の数（スキャンチェーンの長さ）分のクロックを生成しスキャンチェーンに供給する。
【００１３】
さらにまた、上記の目的を達成する本発明は、複数のラッチ回路がチェーン状に接続された、スキャンテストを行うためのスキャンチェーンを内蔵した電子回路に対してデバッグを行う、次のようなデバッグ方法として実現される。このデバッグ方法は、スキャンチェーンを構成するラッチ回路のデータを所定のクロックに従って順次シフトさせるステップと、クロックのカウント値にて特定されるラッチ回路からデータを読み出し、このラッチ回路から読み取られたデータをデータ読み取り用のレジスタに保持するステップと、データ読み取り用のレジスタに保持されたデータをコンピュータが読み込むステップとを含むことを特徴とする。
ここで、このデバッグ方法には、クロックのカウント値にて特定されるラッチ回路のデータを予めデータ書き込み用のレジスタに保持されたデータに置き換えるステップをさらに含むことができる。
【００１４】
さらに詳細には、ラッチ回路のデータをシフトさせるために、まずシステムクロックを停止させて、データのシフトに用いられる所定のクロックを生成し、データをコンピュータが読み込むために、データのシフトに用いられる所定のクロックを停止し、システムクロックを再開する。
【発明の効果】
【００１５】
以上のように構成された本発明によれば、所定のクロックを用いてスキャンチェーンのラッチ回路のデータをシフトし、特定のタイミングでラッチ回路のデータを読み出し、あるいは書き換えることができ、これにより、ＳｏＣ内部における特定の回路の状態を調べてデバッグを行うことができる。
また本発明によれば、スキャンテストの終了後にスキャンチェーンの各ラッチ回路のデータが元に戻るようにすることができ、上述したラッチ回路の内容の読み取り、書き換えをラッチ回路の内容を破壊することなく行うことができる。
【発明を実施するための最良の形態】
【００１６】
以下、添付図面を参照して、本発明を実施するための最良の形態（以下、実施形態）について詳細に説明する。
本実施形態のスキャンテストでは、ＳｏＣにおける論理設計の正しさを判断し、デバッグを行うために、次の事項が実現されなければならない。
・スキャンチェーンを構成する任意のＬＳＳＤラッチ（フリップフロップ）の内容を読み取ることができる。
・スキャンチェーンを構成する任意のＬＳＳＤラッチの内容を書き換えることができる。
・所望のＬＳＳＤラッチの内容を読み書きする際に、他のＬＳＳＤラッチの内容を変更してはならない。
・テストを行ってＬＳＳＤラッチの内容を読み出した後、テストのために中断したプログラムを続行できる。
【００１７】
以上の事項を実現するため、本実施形態の構成は、次の４つの条件を満足することが必要である。
１．全てのスキャンチェーンは、スキャンアウト（Scan out）データをスキャンイン（Scan in）に戻すフィードバックループ（Feed back loop）を持つ。
これにより、スキャンテストにおいてスキャンチェーンを構成するＬＳＳＤラッチの値を順にシフトしていき、フィードバックループを一周すれば、各ＬＳＳＤラッチの値は元に戻り、破壊されないこととなる。
【００１８】
２．全てのスキャンチェーンの長さ（ＬＳＳＤラッチの数）を揃える。
これにより、全てのスキャンチェーンに対してＬＳＳＤラッチの値を元に戻すのに要する時間、すなわちスキャンテストに要するクロック数を同じにすることができ、１の条件と合わせて、スキャンテストにおいてＬＳＳＤラッチの値がスキャンチェーンのフィードバックループを一周することで、全てのスキャンチェーンにおける全てのＬＳＳＤラッチの値を同時に元に戻すことができる。
【００１９】
３．スキャンチェーンのＬＳＳＤラッチの内容（スキャンチェーンデータ）に対する読み出し用・書き込み用のレジスタを持ち、スキャンテスト中の所定のタイミングでスキャンチェーンデータの保持、あるいはデータの書き換えを可能とする。
【００２０】
４．一回のスキャンテストで、スキャンチェーンを構成するＬＳＳＤラッチと同じ数のスキャンテスト用のＡクロック及びＢクロック（ＬＳＳＤラッチの値をスキャンチェーンに沿ってシフトしていくために用いられるクロック）を生成する。
これにより、１、２の条件と合わせれば、スキャンテスト終了時点で、各スキャンチェーンのＬＳＳＤラッチの値がスキャンチェーンのフィードバックループを一周し、全てのスキャンチェーンにおける全てのＬＳＳＤラッチの値が同時に元に戻る。したがって、テスト終了後に、テストのために中断したプログラムを続行できることとなる。
【００２１】
図１は、本実施形態によるスキャンチェーンを用いたデバッグを実現するＳｏＣ（System on Chip）の構成を示す図である。
図１に示すように、本実施形態のＳｏＣには、デバッグ回路１００が設けられている。このデバッグ回路１００は、ＣＰＵローカル・バス１１０を介してＣＰＵ１２０に接続されており、スキャンチェーン（図示せず）を制御して、ＳｏＣのチップ上に集積されたデバイス（図示せず）に対するデバッグを行う。
【００２２】
また図１を参照すると、本実施形態のデバッグ回路１００は、スキャンテストにおいてＬＳＳＤラッチへの読み書きを行うためのリードデータ（Read_Data）レジスタ１１、ライトデータ（Write_Data）レジスタ１２及びスキャンナンバー（Scan_Number）レジスタ１３と、スキャンテストを含むデバッグ回路１００の状態遷移を管理するステートマシン２０と、スキャンテストを実行する制御回路３０とを備える。
【００２３】
さらに図１において、デバッグ回路１００は、基本クロックを入力し、これに基づくシステムクロックを送出している。ここで、基本クロックとはＰＬＬ回路を用いて生成される通常のシステムクロックに相当する。しかしながら、本実施形態では後述するように、デバッグ回路１００の制御によりスキャンテストを行う際にシステムクロックを停止させるので、このテスト時に停止するシステムクロックと区別するために、デバッグ回路１００に入力される前の段階を基本クロックと呼ぶ。
【００２４】
上記の構成において、リードデータレジスタ１１は、スキャンチェーン中の特定のＬＳＳＤラッチからデータを読み取るためのレジスタであり、後述する制御回路３０のカウンタ３１の値とスキャンナンバーレジスタ１３の値とが一致したときに、スキャンチェーンデータを取り込む。また、リードデータレジスタ１１は、ＣＰＵローカル・バス１１０に接続されており、リードデータレジスタ１１の内容（取り込んだ値）をＣＰＵ１２０が読み込むことができる。
【００２５】
ライトデータレジスタ１２は、スキャンチェーン中の特定のＬＳＳＤラッチにデータを書き込むためのレジスタであり、後述する制御回路３０のカウンタ３１の値とスキャンナンバーレジスタ１３の値とが一致したときに、ライトデータレジスタ１２の値がスキャンチェーンのＬＳＳＤラッチに取り込まれる。また、ライトデータレジスタ１２は、ＣＰＵローカル・バス１１０に接続されており、ＣＰＵ１２０によりデータ（スキャンチェーンのＬＳＳＤラッチに書き込む値）を書き込むことができる。
【００２６】
スキャンナンバーレジスタ１３には、データの読み書きの対象（ターゲット）となる特定のＬＳＳＤラッチがスキャンチェーンの何番目のＬＳＳＤラッチであるかを示すデータ（スキャンナンバー）が書き込まれる。また、スキャンナンバーレジスタ１３は、ＣＰＵローカル・バス１１０に接続されており、ＣＰＵ１２０によりデータ（スキャンナンバー）を書き込むことができる。
【００２７】
ステートマシン２０は、「アイドル」、「停止」、「テスト」、「再開」の４つのステージ（状態）を持ち、デバッグ回路１００の状態遷移を管理している。状態遷移の詳細については後述する。
制御回路３０は、ステートマシン２０がテストステージである場合に、スキャンテストに用いるための、Ａクロック、Ｂクロック、Ｃクロック及びライトクロック（Write_Clk）を生成して出力する。また、スキャンテストにおけるターゲットのＬＳＳＤラッチの位置およびテストの終了タイミングを管理する。制御回路の構成および機能の詳細については後述する。
【００２８】
ここで、本実施形態によるスキャンテストに用いられるスキャンチェーンについて説明する。
図２は、本実施形態のスキャンテストのために用いられるスキャンチェーンの構成を示す図である。通常、ＡＳＩＣでは、テスト時間を短縮するため、１６本以上のスキャンチェーンを持つが、各スキャンチェーンでは同じ構成なので、ここでは１本のスキャンチェーンの構成を示す。
図２を参照すると、本実施形態によるスキャンチェーンは、テスト対象であるＬＳＳＤラッチのチェーン２１０と、テスト対象ではないダミーＬＳＳＤラッチ２２０と、マルチプレクサ２３０とを備えて構成される。
【００２９】
図２に示すように、スキャンアウトはチェーン２１０を構成する先頭のＬＳＳＤラッチのスキャンインに戻され、ＬＳＳＤラッチから読み出したデータを再度ＬＳＳＤラッチに書き込むことができるようになっている。これにより、上述した「スキャンアウトデータをスキャンインに戻すフィードバックループを持つ。」という条件を満足する。スキャンチェーンがフィードバックループを構成することにより、外部からスキャンインにてテストパターンを入力するのではなく、各ＬＳＳＤラッチの値をスキャンチェーンのフィードバックループに沿ってシフトし、周回させることができ、テストを非破壊で行うことが可能となる。
【００３０】
ダミーＬＳＳＤラッチ２２０は、ＳｏＣ中の各スキャンチェーンの長さ（チェーン２１０を構成するＬＳＳＤラッチの数）を揃えるために設けられるＬＳＳＤラッチである。本来、チップの良品・不良品を判断する従来のスキャンテストにおいても、スキャンチェーンの長さがまちまちであると、長いスキャンチェーンに対応してテストに要する時間が長くなってしまうため、各スキャンチェーンの長さはほぼ同じとなっている。しかしながら、１、２ビット程度の誤差は存在するため、各スキャンチェーンの長さを完全に一致させるために、必要に応じてダミーＬＳＳＤラッチ２２０が設けられる。図２の例では２個のダミーＬＳＳＤラッチ２２０が設けられている。
これは、本実施形態のテストが終了した時点で、全てスキャンチェーンにおけるＬＳＳＤラッチのデータが、同時に元のＬＳＳＤラッチに戻ることを保証するためである。各スキャンチェーンの長さが異なると、スキャンテストの終了後にデータを元のＬＳＳＤラッチに戻すために必要なクロック数が異なることとなるため、全てのスキャンチェーンデータを同時に復元できない。そこで、ダミーＬＳＳＤラッチ２２０を適宜組み入れて、各スキャンチェーンの長さを一致させる。これにより、上述した「全てのスキャンチェーンの長さを揃える。」という条件を満足する。
【００３１】
マルチプレクサ２３０は、チェーン２１０中の特定のＬＳＳＤラッチにデータを書き込むためのマルチプレクサである。このマルチプレクサ２３０にはスキャンチェーン（図ではスキャンアウトの位置）のＬＳＳＤラッチのデータとライトデータレジスタ１２のデータとが入力される。そして、スキャンチェーンのフィードバックループに沿って各ＬＳＳＤラッチの値がシフトされ、ターゲットのＬＳＳＤラッチの値がマルチプレクサ２３０に入力された際に、デバッグ回路１００の制御回路３０の制御によりマルチプレクサ２３０の出力が切り替わり、ＬＳＳＤラッチの値の代わりにライトデータレジスタ１２の値が選択される。これにより、各ＬＳＳＤラッチの値がスキャンチェーンのフィードバックループを一周すると、ターゲットのＬＳＳＤラッチにライトデータレジスタ１２の値が書き込まれることとなる。また、マルチプレクサ２３０の出力は、デバッグ回路１００の制御回路３０の制御（ＯＲ回路２４０を介して入力されるライトクロックおよびスキャン長身号（詳細は後述））により、リードデータレジスタ１１に取り込まれる。これにより、上述した「スキャンチェーンデータの保持、あるいはデータの書き換えを可能とする。」という条件を満足する。
【００３２】
なお、図２には、さらにマルチプレクサ２５０が記載されているが、これはチップの良品・不良品を判断する従来のスキャンテストを行う際に、外部ピンからテストパターンをスキャンチェーンに入力するためのものであり、本実施形態のテストでは機能しない。
【００３３】
図３は、図１に示した制御回路３０の構成を示す図である。
図３を参照すると、制御回路３０は、カウンタ３１と、スキャンチェーンの長さ（Scan_Length）を保持したレジスタ３２と、カウンタ３１の値とレジスタ３２の値とを比較する比較回路３３と、カウンタ３１の値と図１のスキャンナンバーレジスタ１３に保持されたスキャンナンバー（Scan_Number）とを比較する比較回路３４とを備える。
また図３に示すように、制御回路３０は、基本クロックに基づいて、スキャンチェーンデータをフィードバックループに沿ってシフトするのに使用されるＡクロック、Ｂクロック及びＣクロックと、リードデータレジスタ１１へのスキャンチェーンデータの取り込みに用いられるライトクロック（Write_Clk）とを生成し、送出する。このうち、ライトクロックは基本クロックを２分の１分周して送出する。
【００３４】
カウンタ３１は、デバッグ回路１００がステートマシン２０にて管理されるテストステージにある間、基本クロックをカウントアップし、それ以外のステージではリセットされている。
比較回路３３は、カウンタ３１のカウント値とレジスタ３２に保持されている値とを比較し、カウント値がスキャンチェーンの長さと等しくなったならば、そのタイミングを通知するスキャン長信号（Counter==Scan_Length）をハイレベルとする。このスキャン長信号は、ステートマシン２０に入力され、これを条件として、デバッグ回路１００におけるテストステージが終了することとなる。なお、レジスタ３２に保持されるスキャンチェーンの長さは固定値なので、レジスタではなくＲＯＭ（Read Only Memory）等の不揮発性のメモリに記録しておいても良い。
比較回路３４は、カウンタ３１のカウント値とスキャンナンバーレジスタ１３に保持されたスキャンナンバーとを比較し、カウント値がスキャンナンバーと等しくなったならば、そのタイミングを通知するターゲット信号（Counter==Scan_Number）をハイレベルとする。このターゲット信号は、図２に示したように、リードデータレジスタ１１に入力されて、スキャンチェーンデータの取り込みタイミングを特定する。また、スキャンチェーンのマルチプレクサ２３０の切り替え信号として入力され、ライトデータレジスタ１２に保持されている値の書き込みタイミングを特定する。
【００３５】
上述したＡクロック、Ｂクロック、Ｃクロックのうち、Ａクロック及びＢクロックは、デバッグ回路１００の状態がテストステージであって、カウンタ３１が動作している間、基本クロックに基づいて出力される。したがって、Ａクロック及びＢクロックのクロック数はスキャンチェーンの長さと等しい。一方、Ｃクロックは、デバッグ回路１００の状態がテストステージにある間は、強制的にローレベルとされる。これらのクロック信号は、チップの良品・不良品を判断するのに行われる従来のスキャンテストで外部から入力されるクロック信号（図３におけるＬＳＳＤ  ＡＣＬＫ、ＬＳＳＤ  ＢＣＬＫ、ＬＳＳＤ  ＣＣＬＫ）と同種の信号であるが、本実施形態によるデバッグのためのスキャンテスト実行時には、これら外部からのクロック信号を使用できず、各値が固定値となっているため、デバッグ回路１００にて生成することとしている。
【００３６】
図４は、Ａクロック、Ｂクロック及びＣクロックのタイミングチャートである。
図４を参照すると、デバッグ回路１００の状態がテストステージにない場合（ＳｏＣが通常の動作中など）は、Ａクロック＝０、Ｂクロック＝１、Ｃクロック＝１、スキャンゲート（Scan gate）＝０の固定値である。一方、テストステージにある場合（スキャンテスト実行時）は、Ａクロック及びＢクロックが互いに重複しないパルス信号（Non-overlap pulse）となる。これらのクロック数は、上述したようにスキャンチェーンの長さと等しい。したがって、このＡクロック及びＢクロックにしたがって、各ＬＳＳＤラッチの値がフィードバックループを構成するスキャンチェーンをシフトしていけば、テストステージが終了してＡクロック及びＢクロックの出力が止まった時点で、スキャンチェーンを構成する全てのＬＳＳＤラッチの値がフィードバックループを一周して元のＬＳＳＤラッチに戻ることとなる。
【００３７】
また、デバッグ回路１００の状態がテストステージにある間、Ｃクロックは上述したようにローレベル＝０（Inactive）に固定され、スキャンゲートの値は１に固定される。ファンクションクロック（Function clock）であるＣクロックが０に固定されることにより、外部からスキャンチェーンにデータが流れ込み、ＬＳＳＤラッチのデータがスキャンテスト中に破壊されてしまうことを防止する。
【００３８】
図５は、ライトクロックのタイミングチャートである。
上述したように、ライトクロックは、デバッグ回路１００の状態がテストステージにある間、基本クロックの２分の１の周波数を持つパルス信号として出力される。そして、クロック数がスキャンナンバーと等しくなったとき、比較回路３４からターゲット信号が出力され、図２に示したようにリードデータレジスタ１１に接続されたＯＲ回路２４０の出力をローレベル＝０とする。これにより、このタイミングでマルチプレクサ２３０から出力されているデータ、すなわちターゲットのＬＳＳＤラッチの値がリードデータレジスタ１１に取り込まれる。
【００３９】
図６は、ステートマシン２０が管理するデバッグ回路１００の状態遷移を説明する図である。
図６に示すように、ステートマシン２０は、「アイドル」、「停止」、「テスト」、「再開」の４つのステージ（状態）を持つ。ＳｏＣがリセットされた後は、アイドルステージとなる。スキャンチェーンのＬＳＳＤレジスタの値を読み出す読み出し命令がＣＰＵ１２０から発行されると、ステートマシン２０は、アイドルステージから停止ステージに移行する。このステージでは、図１に示したデバッグ回路１００から出力されるシステムクロックが停止される。これにより、デバッグ回路１００およびこれに制御されるスキャンチェーン以外の回路が動作を停止する。
次に、テストステージに移行すると、制御回路３０により上述したようにクロック制御が行われ、スキャンチェーンを構成する所望のＬＳＳＤラッチに対してデータの読み書きが行われる。このテストステージでは、生成されるクロックにしたがってスキャンチェーンを構成する各ＬＳＳＤラッチの値が順次シフトされ、スキャンチェーン中のＬＳＳＤラッチの数（スキャンチェーンの長さ）分だけシフトが行われると、スキャンチェーンのフィードバックループに沿って各ＬＳＳＤラッチのデータが一周し元の値に戻る。そして、この時点でテストステージが終了する。すなわち、スキャンチェーンのＬＳＳＤラッチの数が３０００個であれば、３０００回スキャンシフト（Scan shift）を行った時点で終了する。
テストステージが終了すると、再開ステージに移行する。この再開ステージでは、停止されていたシステムクロックを再び動作させ、ＳｏＣの通常動作が可能な状態となる。この後は、アイドルステージに戻り、一連の作業が終了する。
【００４０】
以上の状態遷移において、停止ステージからテストステージの終了までシステムクロックを停止して、デバッグ回路１００およびこれに制御されるスキャンチェーン以外の回路の動作を停止させるのは、スキャンテスト中にシステムが誤動作してスキャンチェーン内のデータを破壊してしまうのを防ぐためである。もともとスキャンテスト中は、ＬＳＳＤラッチのＣクロックがInactive状態になるため、ＳｏＣの通常動作で機能する回路部分においてデータが失われることはない。しかし、スキャンテスト中にＣＰＵ１２０等が動作していると、スキャンテストの動作の影響で、割り込み処理（Interrupt）等の入力信号が変化しＣＰＵ１２０が誤動作する可能性が考えられる。そこで、システムクロックを停止することによって、このような事態を回避している。
【００４１】
次に、以上のように構成された本実施形態によるデバッグの手順について説明する。
図７は、本実施形態によるデバッグにおいて、スキャンチェーンを構成する所望のＬＳＳＤラッチの値を読み出す動作の全体的な流れを説明するフローチャートである。
図７を参照すると、まず、準備段階の動作として、ＣＰＵ１２０がターゲット（データの読み出し対象）のＬＳＳＤラッチを決め、そのスキャンチェーン上の位置（先頭から何番目か）を調べる（ステップ７０１）。これは、スキャンアウトからスキャンチェーンをバックトレース（Back trace）することにより得ることができる。
【００４２】
ターゲットのＬＳＳＤラッチの位置が得られたら、ＣＰＵ１２０は、その位置を示すスキャンナンバー（スキャンチェーンの先頭から数えた数）をスキャンナンバーレジスタ１３に書き込む（ステップ７０２）。そして、リードデータレジスタ１１の内容を読み込む命令を実行する（ステップ７０３）。この命令が実行されると、デバッグ回路１００のステートマシン２０が動作を開始し、デバッグ回路１００がアイドルステージから停止ステージに移行してシステムクロックを停止させる（ステップ７０４）。
【００４３】
次に、ステートマシン２０の制御によりデバッグ回路１００が停止ステージからテストステージへ移行し、ＳｏＣ中の全てのスキャンチェーンに対するスキャンが実行される（ステップ７０５）。そして、制御回路３０から出力されるＡクロック及びＢクロックによってスキャンチェーンのＬＳＳＤラッチの値が順次シフトしていき、カウンタ３１による基本クロックのカウント値がステップ７０２でスキャンナンバーレジスタ１３に書き込まれたスキャンナンバーと等しくなったときに、その時点でスキャンアウトとして取り出されるデータ（すなわちターゲットのＬＳＳＤラッチの値）がリードデータレジスタ１１に読み込まれる（ステップ７０６）。
この後、Ａクロック及びＢクロックによるＬＳＳＤラッチの値のシフトと、カウンタ３１による基本クロックのカウントが続行され、カウンタ３１のカウント値がスキャンの長さと等しくなったならば、ステートマシン２０の制御によりスキャンテストが終了する（ステップ７０７）。
【００４４】
スキャンテストが終了したならば、ステートマシン２０の制御によりデバッグ回路１００がテストステージから開始ステージへ移行し、システムクロックを再開させる（ステップ７０８）。そして、ＣＰＵ１２０が動作を再開し、上記の各ステップでリードデータレジスタ１１に取り込まれたデータがＣＰＵ１２０に返送されて、ステップ７０３でＣＰＵ１２０が実行した命令が終了する（ステップ７０９）。なお、デバッグ回路１００は、開始ステージへ移行した後、さらにステートマシン２０の制御によりアイドルステージへ移行し、次のスキャンテストのための命令が実行されるまで、その状態が保持される。
【００４５】
図７に示した動作では、スキャンチェーン中のターゲットのＬＳＳＤラッチからデータを読み出す場合について説明したが、このターゲットのＬＳＳＤラッチに対してデータの書き込みを行う場合には、まず準備段階として、ＣＰＵ１２０がターゲットのＬＳＳＤレジスタに書き込むべきデータをライトデータレジスタ１２に書き込んでおく。そして、ライトデータレジスタ１２の内容を書き込む命令を実行する。
デバッグ回路１００は、上記のステップ７０４〜ステップ７０６までの動作と同様にして、ターゲットのＬＳＳＤレジスタのデータをリードデータレジスタ１１に読み込む。このとき、読み込みと同じタイミングでスキャンチェーンから読み出されたデータがライトデータレジスタ１２のデータに切り替えられて、スキャンチェーンに戻される。したがって、スキャンチェーンの各ＬＳＳＤラッチの値がシフトしていき、フィードバックループを一周してスキャンテストが終了したときには、ターゲットのＬＳＳＤラッチのデータのみがライトデータレジスタ１２に書かれていたデータに変更されることとなる。
【００４６】
以上説明したように、本実施形態の機構およびそのデバッグ方法を用いることにより、ＳｏＣ内部の全てのレジスタの値をＣＰＵ１２０のリード・コマンドを使って読み取ることができる。これにより、例えばプログラム制御による所定の処理を実行したときにシステムが期待と異なる動作をした場合を考えると、ＣＰＵ１２０のデバッガを使用してプログラムの任意のところで停止させ、対象となる回路の状態を調べることが可能となる。
また、問題となるレジスタの値を読み取るだけでなく、これを正しい値に書き換え、プログラムを再スタートさせることができる。この機能により、バグの修正が正しいかどうかを確認することも可能となる。
さらに、この任意のレジスタの内容をプログラム制御にて修正できることから、ＳｏＣにて構成されたＡＳＩＣがバグのため誤動作する場合でも、そのバグの内容によってはパッチを当ててソフトウェア的に修正できる可能性がある。ＡＳＩＣの開発コストを考えると、チップを再設計せずにバグが除去できるとすれば、そのメリットは計り知れない。
【図面の簡単な説明】
【００４７】
【図１】本実施形態によるスキャンチェーンを用いたデバッグを実現するＳｏＣ（System on Chip）の構成を示す図である。
【図２】本実施形態のスキャンテストのために用いられるスキャンチェーンの構成を示す図である。
【図３】本実施形態におけるデバッグ回路の制御回路の構成を示す図である。
【図４】本実施形態の制御回路が出力するＡクロック、Ｂクロック及びＣクロックのタイミングチャートである。
【図５】本実施形態の制御回路が出力するライトクロックのタイミングチャートである。
【図６】本実施形態のステートマシンが管理するデバッグ回路の状態遷移を説明する図である。
【図７】本実施形態によるデバッグにおいて、スキャンチェーンを構成する所望のＬＳＳＤラッチの値を読み出す動作の全体的な流れを説明するフローチャートである。
【図８】ＬＳＳＤラッチの構成を示す図である。
【図９】従来のＬＳＳＤスキャンテストを実行するためのスキャンチェーンを説明する図である。
【符号の説明】
【００４８】
１１…リードデータレジスタ、１２…ライトデータレジスタ、１３…スキャンナンバーレジスタ、２０…ステートマシン、３０…制御回路、３１…カウンタ、３２…レジスタ、３３、３４…比較回路、１００…デバッグ回路、１１０…ＣＰＵローカル・バス、１２０…ＣＰＵ、２１０…チェーン、２２０…ダミーＬＳＳＤラッチ、２３０…マルチプレクサ
【図１】
2005190112.tif 000003
【図２】
2005190112.tif 000004
【図３】
2005190112.tif 000005
【図４】
2005190112.tif 000006
【図５】
2005190112.tif 000007
【図６】
2005190112.tif 000008
【図７】
2005190112.tif 000009
【図８】
2005190112.tif 000010
【図９】
2005190112.tif 000011