(57)【要約】【課題】大規模かつ複雑な構成を有していても、シミュレーションにおいて実機の集積回路と同じ動作状態を容易に生成することができる集積回路を提供する。【解決手段】集積回路２００は、入力端子２０１〜２０３及び出力端子２１５を有し、組み合わせ回路２０９及び２１４、Ｄフリップフロップ２０６〜２０８及び２１０〜２１２、及びＲＡＭ２１３を内部に備える。集積回路２００は、デバッグＲＡＭ３１２及び制御回路３０１を含むデバッグ回路２１６をさらに備える。制御回路３０１は、Ｄフリップフロップ２０６〜２０８、２１０〜２１２、及びＲＡＭ２１３内のデータの少なくとも一部をデバッグＲＡＭ３１２に格納し、デバッグＲＡＭ３１２内のデータを集積回路２００の外部に出力する。【選択図】図１
2016075493.tif 000002
【特許請求の範囲】
【請求項１】
入力端子及び出力端子を有し、少なくとも１つの信号処理回路及び少なくとも１つの第１の記憶手段を内部に備えた集積回路において、
上記集積回路は、第２の記憶手段及びデバッグ手段をさらに備え、
上記デバッグ手段は、上記第１の記憶手段内のデータの少なくとも一部を上記第２の記憶手段に格納し、上記第２の記憶手段内のデータを上記集積回路の外部に出力することを特徴とする集積回路。
【請求項２】
上記少なくとも１つの第１の記憶手段は、上記入力端子を介して上記集積回路に入力されたデータを格納する少なくとも１つの第１のレジスタを含むことを特徴とする請求項１記載の集積回路。
【請求項３】
上記少なくとも１つの第１の記憶手段は、上記少なくとも１つの信号処理回路のうちの少なくとも１つから出力されたデータを格納する少なくとも１つの第２のレジスタを含むことを特徴とする請求項１又は２記載の集積回路。
【請求項４】
上記少なくとも１つの第１の記憶手段は、上記少なくとも１つの信号処理回路のうちの少なくとも１つから出力されたデータを格納する少なくとも１つのＲＡＭを含み、
上記デバッグ手段は、上記少なくとも１つのＲＡＭから出力されたデータを上記第２の記憶手段に格納することを特徴とする請求項１〜３のうちの１つに記載の集積回路。
【請求項５】
上記第２の記憶手段は複数の領域を有するリングバッファであり、
上記デバッグ手段は、所定の時間期間にわたって、上記第１の記憶手段内のデータの少なくとも一部を上記第２の記憶手段に周期的に格納することを特徴とする請求項１〜４のうちの１つに記載の集積回路。
【請求項６】
上記集積回路は、第１のモード及び第２のモードを有し、
上記デバッグ手段は、
上記第１のモードにおいて、上記少なくとも１つの信号処理回路のうちの１つから出力されたデータを上記出力端子から上記集積回路の外部に出力させ、
上記第２のモードにおいて、上記第２の記憶手段内のデータを上記出力端子から上記集積回路の外部に出力させることを特徴とする請求項１〜５のうちの１つに記載の集積回路。
【請求項７】
上記デバッグ手段は、上記集積回路の内部の少なくとも１つの信号の論理状態が予め決められた条件を満たすとき、上記第１の記憶手段内のデータの少なくとも一部を上記第２の記憶手段に格納することを開始又は終了することを特徴とする請求項１〜６のうちの１つに記載の集積回路。
【請求項８】
請求項１〜６のうちの１つに記載の集積回路のテスト装置であって、上記テスト装置は、
上記集積回路から上記第２の記憶手段内のデータを取得するインターフェース装置と、
上記第２の記憶手段内のデータに基づいて上記集積回路の動作のシミュレーションを行うコンピュータとを備え、
上記コンピュータは、
上記集積回路に等価な仮想的モデルを生成し、
上記インターフェース装置から取得された上記第２の記憶手段内のデータを、上記仮想的モデルに含まれる第１の記憶手段に書き込み、
上記仮想的モデルの論理状態の変化を所定時間にわたって追跡することを特徴とするテスト装置。
【請求項９】
請求項１〜６のうちの１つに記載の集積回路のテスト方法であって、上記テスト方法は、
インターフェース装置を用いて、上記集積回路から上記第２の記憶手段内のデータを取得するステップと、
コンピュータ上で、上記集積回路に等価な仮想的モデルを生成するステップと、
上記コンピュータ上で、上記インターフェース装置から取得された上記第２の記憶手段内のデータを、上記仮想的モデルに含まれる第１の記憶手段に書き込むステップと、
上記コンピュータ上で、上記仮想的モデルの論理状態の変化を所定時間にわたって追跡するステップとを含むことを特徴とするテスト方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば半導体集積回路などの集積回路、集積回路のテスト装置及びテスト方法に関する。
【背景技術】
【０００２】
近年の電子機器の制御回路は、複数の機能ブロックが集約された少数の集積回路（ＬＳＩ及びＡＳＩＣなど）にて構成されていることが多い。電子機器が意図通りに動作しない場合、機能ブロックの論理状態を調べて、その情報を手がかりにして動作の不具合の原因を究明（デバッグ）する。このため、例えば、電子機器を起動してから動作の不具合が発生するまでにわたって、機能ブロックの論理状態の変化の過程を追跡する。
【０００３】
機能ブロックが集積回路の内部に構成されている場合、その部分に直接にコンタクトして、ロジックアナライザ等の計測器で観測することができない。従って、動作中の集積回路から得られる断片的情報、例えば、集積回路の内部のステータスレジスタの値、ソフトウェアのロギング情報、予め集積回路に設けた不正入力値の検出回路からの情報などに基づき、集積回路の動作を解析する方法が既に知られている。また、論理シミュレータにおいて実機の集積回路と同じ動作状態を生成し、シミュレーションで得られた集積回路の動作を解析する方法が既に知られている。
【０００４】
集積回路のテストに関して、例えば、特許文献１〜３の発明が知られている。
【０００５】
特許文献１は、外部端子からは内蔵マイクロプロセッサのプログラム実行中の動きが直接監視できないシステムＬＳＩに対しても、ＩＣＥ（In-Circuit Emulator）と同等の機能をもったデバッグシステムを開示している。特許文献１は、また、ＬＳＩの限られた個数のモニタ出力端子から断片的な情報しか得られなくても、ＬＳＩ内部のプログラムカウンタの遷移やメモリバスの遷移などの詳細な情報を得ることができるデバッグシステムを開示している。詳しくは、特許文献１は、大規模なハードウェアの中にマイクロプロセッサや命令メモリ、キャッシュメモリなどが組み込まれたシステムＬＳＩのデバッグや不具合解析に用いられるデバッグシステムを開示している。このデバッグシステムは、ＬＳＩへの入力信号を取り込んで入力信号情報として蓄積する信号蓄積手段と、入力信号情報を再生、又は該信号の再生を一時停止する信号再生手段と、内部動作状態の読み込みや書き換えを行う内部状態操作手段とを備える。このデバッグシステムは、信号再生手段により再生された信号をＬＳＩに加えて動作させ、かつ、信号再生手段により信号の再生を一時停止している時に、内部状態操作手段によりＬＳＩ内部の状態の読み込みや書き換え操作を行う。
【０００６】
特許文献２は、スキャンテストなどのテストを効率良くなし得るとともに、実駆動周波数でのテストを可能とする半導体集積回路を開示している。この半導体集積回路は、スキャンフリップフロップ及び組み合わせ回路を有するスキャン対象ブロックと、スキャンフリップフロップからシリアル出力されるスキャン出力データをパラレル出力に変換するシリアル・パラレル変換回路とを備える。この半導体集積回路は、シリアル・パラレル変換回路からパラレル出力されるスキャン出力データを記憶し、記憶したデータを外部に出力するスキャン出力格納メモリをさらに備える。
【０００７】
特許文献３は、ＲＴＬの段階でロジックＢＩＳＴの擬似乱数によるテストをシミュレーションで再現し、テスト時の消費電力見積もりを実施可能とする消費電力見積もりを行う設計支援システムを開示している。この設計支援システムは、入力手段、レジスタ変数認識手段、乱数発生手段、シミュレータ、及びパワー解析手段を備える。入力手段は、レジスタ転送レベル（ＲＴＬ）のハードウェア記述言語（ＨＤＬ）による機能記述データを入力する。レジスタ変数認識手段は、当該機能記述データ中の記憶素子が推量されうるレジスタ変数を認識する。乱数発生手段は、レジスタ変数認識手段により認識されたレジスタ変数へ乱数を印加する。シミュレータは、乱数の印加により引き起こされるイベントをシミュレーションする。パワー解析手段は、当該シミュレータによるシミュレーション状況から消費電力見積もりを行う。
【０００８】
例えば特許文献１のデバッグシステムによれば、蓄積された入力信号情報を再生して実機のＬＳＩに入力信号として供給し、この実機のＬＳＩで再現した動作時の内部動作状態を観測することを特徴としている。このため、ＬＳＩ内部の任意の箇所を観測できるわけではなく、ＬＳＩの内部回路として予め設けられた内部状態操作手段によりアクセス可能な範囲内でのみ、ＬＳＩの内部動作状態を観測することができる。ＬＳＩ内部のすべてを観測するように内部状態操作手段を構成することは、回路規模が極端に増大してしまうので困難である。従って、観測が必要になりそうな箇所を予測し、その箇所にアクセスできるように内部状態操作手段をＬＳＩ内部に予め設けておく。
【０００９】
デバッグの性質上、ＬＳＩの開発時点で観測が必要になりそうな箇所として予測していた箇所と、実際のデバッグで観測が必要となる箇所とは、しばしば異なる。従って、実際のデバッグにおいて真に観測したい箇所を観測できないという問題がある。
【００１０】
一方、論理シミュレータにおいて実機の集積回路と同じ動作状態を生成し、シミュレーションで得られた集積回路の論理状態を解析する場合には、集積回路の内部の任意の箇所を観測することができる。論理シミュレータにおいて集積回路を起動してから動作の不具合が発生するまでにわたって集積回路の論理状態の変化の過程を追跡することは、電子機器が意図通りに動作しない場合に集積回路の動作を解析するための極めて有効な手段である。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
年々、集積回路の内部に構成する論理回路の機能が高度化及び複雑化し、その規模が増大していることに伴い、論理状態を決定するパラメータの個数が増大し、パラメータの内容が複雑化している。従って、シミュレーションで実機の集積回路と同じ動作状態を生成することが極めて難しくなってきている。このため、実機の集積回路と同じ不具合をシミュレーションで発生させること、及び、シミュレーションで集積回路を起動してから動作の不具合が発生するまでにわたって集積回路の論理状態の変化の過程を追跡することも、極めて難しくなってきている。
【００１２】
本発明の目的は、大規模かつ複雑な構成を有していても、シミュレーションにおいて実機の集積回路と同じ動作状態を容易に生成することができる集積回路を提供することにある。
【課題を解決するための手段】
【００１３】
本発明の態様に係る集積回路は、
入力端子及び出力端子を有し、少なくとも１つの信号処理回路及び少なくとも１つの第１の記憶手段を内部に備えた集積回路において、
上記集積回路は、第２の記憶手段及びデバッグ手段をさらに備え、
上記デバッグ手段は、上記第１の記憶手段内のデータの少なくとも一部を上記第２の記憶手段に格納し、上記第２の記憶手段内のデータを上記集積回路の外部に出力することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、大規模かつ複雑な構成を有していても、シミュレーションにおいて実機の集積回路と同じ動作状態を容易に生成することができる集積回路を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態に係る集積回路２００の構成を示すブロック図である。
【図２】図１のデバッグ回路２１６の構成を示すブロック図である。
【図３】図２のデバッグＲＡＭ３１２にデータを格納するレイアウトを示す図である。
【図４】図２のデバッグＲＡＭ３１２にデータを格納するときのデバッグ回路２１６内の各信号を示すタイミングチャートである。
【図５】図２のデバッグＲＡＭ３１２から集積回路２００の外部にデータを出力するときのデバッグ回路２１６内の各信号を示すタイミングチャートである。
【図６】集積回路２００の外部に出力されたデータから元データを復元する方法を説明するためのタイミングチャートである。
【図７】図１の集積回路２００のテスト装置の構成を示すブロック図である。
【図８】本発明の第２の実施形態に係る集積回路５０１の構成を示すブロック図である。
【図９】図８の集積回路５０１内の各信号を示すタイミングチャートである。
【図１０】第１の比較例に係る集積回路１００の構成を示すブロック図である。
【図１１】第２の比較例に係る集積回路１２０の構成を示すブロック図である。
【図１２】図１１の集積回路１２０の動作のシミュレーションであって、時間Ｔ２０から時間Ｔ２１までの各信号の変化が既知であるときのシミュレーションを示すタイミングチャートである。
【図１３】図１１の集積回路１２０の動作のシミュレーションであって、時間Ｔ２１より前の各信号の変化が不明であるときのシミュレーションを示すタイミングチャートである。
【図１４】図１１の集積回路１２０の動作のシミュレーションであって、時間Ｔ２１におけるＤフリップフロップ１２１の出力信号Ｑ１及び集積回路１２０の出力データ信号Ｄｏｕｔの論理状態が既知であるときのシミュレーションを示すタイミングチャートである。
【発明を実施するための形態】
【００１６】
まず、従来の集積回路をデバッグするためのシミュレーションの課題について、さらに詳細に検討する。
【００１７】
図１０は、第１の比較例に係る集積回路１００の構成を示すブロック図である。図１０は、典型的な集積回路の内部構成を示す。集積回路１００は、入力端子１０１〜１０５、出力端子１１５、遅延フリップフロップ（以下、Ｄフリップフロップという）１０６〜１０８及び１１０〜１１２、組み合わせ回路１０９及び１１４、及びＲＡＭ１１３を備える。
【００１８】
組み合わせ回路１０９及び１１４は、ある時点の入力信号の状態のみによって決まる出力信号を発生する信号処理回路である。Ｄフリップフロップ１０６〜１０８及び１１０〜１１２、及びＲＡＭ１１３は、データ信号を格納する少なくとも１つの記憶手段である。Ｄフリップフロップ１０６〜１０８は、入力端子１０１〜１０３を介して集積回路１００に入力されたデータ信号を格納する少なくとも１つの第１のレジスタである。Ｄフリップフロップ１１０〜１１２は、少なくとも１つの信号処理回路のうちの少なくとも１つ（組み合わせ回路１０９）から出力されたデータ信号を格納する少なくとも１つの第２のレジスタである。ＲＡＭ１１３は、少なくとも１つの信号処理回路のうちの少なくとも１つ（組み合わせ回路１１４）から出力されたデータ信号を格納する。
【００１９】
入力端子１０１〜１０３には、３ビット幅の入力データ信号ＤＡＴＩ［２：０］の各ビットＤＡＴＩ［０］〜ＤＡＴＩ［２］がそれぞれ入力される。入力端子１０４にはクロック信号ＣＬＫが入力される。入力端子１０５にはリセット信号ＲＥＳＥＴ＿Ｎが入力される。
【００２０】
リセット信号ＲＥＳＥＴ＿Ｎは、Ｄフリップフロップ１０６〜１０８及び１１０〜１１２のリセット端子Ｒに入力される。リセット信号ＲＥＳＥＴ＿Ｎがローレベルであるとき、各Ｄフリップフロップはリセットされ、ハイレベルであるとき、各Ｄフリップフロップはリセット解除される。
【００２１】
Ｄフリップフロップ１０６〜１０８は、入力データ信号ＤＡＴＩ［２：０］の各ビットＤＡＴＩ［０］〜ＤＡＴＩ［２］を、クロック信号ＣＬＫの立ち上がりエッジでそれぞれサンプリングしていったん格納し、次いで組み合わせ回路１０９に送る。各Ｄフリップフロップ１０６〜１０８から出力されるビットをＩｎ＿ｆｆ［０］〜Ｉｎ＿ｆｆ［２］と表し、これらをまとめてデータ信号Ｉｎ＿ｆｆ［２：０］と表す。
【００２２】
組み合わせ回路１０９は、内部で処理した信号を、Ｄフリップフロップ１１０〜１１２及びＲＡＭ１１３に送る。Ｄフリップフロップ１１０〜１１２は、組み合わせ回路１０９から送られた信号をいったん格納し、次いで組み合わせ回路１１４に送る。各Ｄフリップフロップ１１０〜１１２から出力されるビットをＩ＿ｆｆ［０］〜Ｉ＿ｆｆ［２］と表し、これらをまとめてデータ信号Ｉ＿ｆｆ［２：０］と表す。組み合わせ回路１０９からＲＡＭ１１３には、２０ビット幅のアドレス信号ＲＡ［１９：０］、８ビット幅のデータ信号ＲＤＩ［７：０］、制御信号ＲＣＳ＿Ｎ、ＲＷＥ＿Ｎ、及びＲＯＥ＿Ｎが入力される。ＲＡＭ１１３は、データ信号ＲＤＩ［７：０］のデータを格納し、また、格納されたデータを読み出して８ビット幅のデータ信号ＲＤＯ［７：０］として組み合わせ回路１１４に出力する。
【００２３】
制御信号ＲＣＳ＿Ｎがハイレベルであるとき、ＲＡＭ１１３へのデータの読み書きが禁止され、ローレベルであるとき、ＲＡＭ１１３へのデータの読み書きが有効にされる（すなわち、ＲＡＭ１１３がセレクトされる）（ＲＣＳ：RAM Chip Select）。制御信号ＲＷＥ＿Ｎがハイレベルであるとき、ＲＡＭ１１３へのデータの格納が禁止され、ローレベルであるとき、ＲＡＭ１１３にデータが格納される。制御信号ＲＯＥ＿Ｎがハイレベルであるとき、ＲＡＭ１１３からのデータの読み出しが禁止され、ローレベルであるとき、ＲＡＭ１１３からデータが読み出される。
【００２４】
組み合わせ回路１１４は、内部で処理した信号を、２２ビット幅のデータ信号ＮＲＭＬ＿ＯＵＴ［２１：０］として出力する。データ信号ＮＲＭＬ＿ＯＵＴ［２１：０］は、出力端子１１５を介して、出力データ信号ＤＡＴＯ［２１：０］として集積回路１００の外部に出力される。
【００２５】
集積回路１００は、Ｄフリップフロップ１１０〜１１２及びＲＡＭ１１３を備えたことにより、順序回路として動作する。
【００２６】
集積回路を備えた電子機器について、電子機器の電源投入後（又は集積回路のリセット解除後）における集積回路への入力信号値のすべての論理状態が既知であれば、その情報に基づいて、論理シミュレータ上で、実機の集積回路と同じ動作を再現できる。このため、例えば、集積回路は、入力信号値を内部のデバッグ用メモリに格納し、格納された入力信号値を集積回路の外部に出力し、出力された入力信号値は論理シミュレータに送られる。しかしながら、電子機器の電源をいったん投入すると、その後の数日間にわたって電源が投入されたままになる場合もあり、この場合、対象の集積回路はリセットされることなく動作し続ける可能性がある。このような集積回路では、電源投入後（又はリセット解除後）から不具合の発生までにわたる集積回路への入力信号値のすべての論理状態を記憶しておくことができない可能性がある。
【００２７】
一般に、集積回路は、その内部に、フリップフロップ及びＳＲＡＭなどの記憶手段を含む順序回路として構成されている。このような集積回路では、任意時点における実機の集積回路への入力信号値を論理シミュレータに与えても、論理シミュレータ上の集積回路に含まれる記憶手段内のデータ（又はその出力信号値）を実機のものと一致させることができない。この問題が発生するのは、集積回路の論理状態を決定する要素のうち、記憶手段内のデータが欠落しているからである。従って、論理シミュレータ上の集積回路の動作は、実機の集積回路の動作とは異なってしまう。
【００２８】
図１０の集積回路１００は順序回路として動作するので、内部の論理状態は過去の動作シーケンスに依存して決まる。このため、実機の集積回路と同じ動作を論理シミュレータ上で再現しようとしても、リセット解除後に集積回路１００へ入力されるすべての信号を取得できなければ、実機の集積回路１００と同じ動作を論理シミュレータ上で再現できない。
【００２９】
図１１は、第２の比較例に係る集積回路１２０の構成を示すブロック図である。集積回路１２０は、例示的な順序回路である。集積回路１２０は、Ｄフリップフロップ１２１及び１２２、及び論理和回路１２３を備える。集積回路１２０には、入力データ信号Ｄｉｎ、クロック信号ＣＬＫ、及びリセット信号ＲＥＳＥＴ＿Ｎが入力される。集積回路１２０は、出力データ信号Ｄｏｕｔを出力する。
【００３０】
図１２は、図１１の集積回路１２０の動作のシミュレーションであって、時間Ｔ２０から時間Ｔ２１までの各信号の変化が既知であるときのシミュレーションを示すタイミングチャートである。図１２の例では、リセット解除後（時間Ｔ２０より後）の各信号の変化、すなわち、入力データ信号Ｄｉｎ、Ｄフリップフロップ１２１の出力信号Ｑ１、及び出力データ信号Ｄｏｕｔの論理値がわかっている。この場合、時間Ｔ２０における入力データ信号Ｄｉｎの値を初期値として時間Ｔ２０からシミュレーションを開始できる。
【００３１】
図１３は、図１１の集積回路１２０の動作のシミュレーションであって、時間Ｔ２１より前の各信号の変化が不明であるときのシミュレーションを示すタイミングチャートである。時間Ｔ２１におけるＤフリップフロップ１２１の出力信号Ｑ１及び集積回路１２０の出力データ信号Ｄｏｕｔの論理状態が不明であるので、出力データ信号Ｄｏｕｔの論理状態を確定できず、時間Ｔ２１からシミュレーションを開始できない。
【００３２】
図１４は、図１１の集積回路１２０の動作のシミュレーションであって、時間Ｔ２１におけるＤフリップフロップ１２１の出力信号Ｑ１及び集積回路１２０の出力データ信号Ｄｏｕｔの論理状態が既知であるときのシミュレーションを示すタイミングチャートである。時間Ｔ２１における出力信号Ｑ１及び出力データ信号Ｄｏｕｔの論理状態が既知であれば、その値を論理シミュレータに設定することで出力データ信号Ｄｏｕｔの値を確定でき、時間Ｔ２１からシミュレーションを開始できる。
【００３３】
本発明の実施形態では、図１４の原理に基づいて、大規模かつ複雑な構成を有していても、シミュレーションにおいて実機の集積回路と同じ動作状態を容易に生成することができる集積回路を提供する。
【００３４】
以下、図面を参照して、本発明の実施形態に係る集積回路について詳細に説明する。
【００３５】
第１の実施形態．
図１は、本発明の第１の実施形態に係る集積回路２００の構成を示すブロック図である。集積回路２００は、入力端子２０１〜２０５及び２１７〜２１８、出力端子２１５、Ｄフリップフロップ２０６〜２０８及び２１０〜２１２、組み合わせ回路２０９及び２１４、ＲＡＭ２１３、デバッグ回路２１６、及びセレクタ２１９を備える。図１の構成要素２０１〜２１５は、それぞれ、図１０の構成要素１０１〜１１５と同様に構成される（前者は「後者の符号＋１００」の符号を有する）。従って、図１の集積回路２００は、図１０の集積回路１００の構成に加えて、入力端子２１７〜２１８、デバッグ回路２１６、及びセレクタ２１９を備える。
【００３６】
デバッグ回路２１６には、クロック信号ＣＬＫ、リセット信号ＲＥＳＥＴ＿Ｎ、データ信号Ｉｎ＿ｆｆ［２：０］、Ｉ＿ｆｆ［２：０］、及びＲＤＯ［７：０］が入力される。デバッグ回路２１６には、さらに、入力端子２１７及び２１８を介して制御信号ＭＯＮ＿ＩＮ１及びＭＯＮ＿ＩＮ０がそれぞれ入力される。デバッグ回路２１６は、データ信号Ｉｎ＿ｆｆ［２：０］、Ｉ＿ｆｆ［２：０］、及びＲＤＯ［７：０］を内部に格納し、内部に格納したデータを、２２ビット幅のデータ信号ＤＢ＿ＯＵＴ［２１：０］としてセレクタ２１９に送る。デバッグ回路２１６は、さらに、制御信号ＤＡＴＯ＿ＳＥＬ＿Ａをセレクタ２１９に送る。
【００３７】
セレクタ２１９は、２２ビット幅のＡ入力端子、２２ビット幅のＢ入力端子、及び入力端子ＳＥＬを有する。Ａ入力端子には、組み合わせ回路２１４からのデータ信号ＮＲＭＬ＿ＯＵＴ［２１：０］が入力され、Ｂ入力端子には、デバッグ回路２１６からのデータ信号ＤＢ＿ＯＵＴ［２１：０］が入力される。入力端子ＳＥＬには、デバッグ回路２１６からの制御信号ＤＡＴＯ＿ＳＥＬ＿Ａが入力される。制御信号ＤＡＴＯ＿ＳＥＬ＿Ａがハイレベルであるとき、セレクタ２１９はデータ信号ＮＲＭＬ＿ＯＵＴ［２１：０］を出力し（Ａ入力端子側）、ローレベルであるとき、セレクタ２１９はデータ信号ＤＢ＿ＯＵＴ［２１：０］を出力する（Ｂ入力端子側）。セレクタ２１９の出力信号は、出力端子２１５を介して、集積回路２００の出力データ信号ＤＡＴＯ［２１：０］として集積回路２００の外部に出力される。
【００３８】
制御信号ＭＯＮ＿ＩＮ１がハイレベルであるとき、デバッグ回路２１６はイネーブルにされ、ローレベルであるとき、デバッグ回路２１６はディセーブルにされる。制御信号ＭＯＮ＿ＩＮ１がハイレベルであり、かつ、制御信号ＭＯＮ＿ＩＮ０がハイレベルであるとき、デバッグ回路２１６は、データ信号Ｉｎ＿ｆｆ［２：０］、Ｉ＿ｆｆ［２：０］、及びＲＤＯ［７：０］を内部に格納する。制御信号ＭＯＮ＿ＩＮ１がハイレベルであり、かつ、制御信号ＭＯＮ＿ＩＮ０がローレベルであるとき、デバッグ回路２１６は、内部に格納したデータを、セレクタ２１９及び出力端子２１５を介して集積回路２００の外部に出力する。
【００３９】
制御信号ＭＯＮ＿ＩＮ１がハイレベルであり、かつ、制御信号ＭＯＮ＿ＩＮ０がローレベルであるとき以外は、データ信号ＮＲＭＬ＿ＯＵＴ［２１：０］が、集積回路２００の出力データ信号ＤＡＴＯ［２１：０］として出力される。
【００４０】
集積回路２００は、Ｄフリップフロップ２０６〜２０８、２１０〜２１２、及びＲＡＭ２１３を、データ信号を格納する少なくとも１つの第１の記憶手段として備える。
【００４１】
デバッグ回路２１６の内部に格納したデータが集積回路２００の外部に出力されたとき、論理シミュレータ（図７を参照して後述）は、このデータに基づいて、集積回路２００の動作のシミュレーションを行う。
【００４２】
図１の集積回路２００では、Ｄフリップフロップ２０６〜２０８にいったん格納されて出力されたデータ信号を、集積回路２００への入力データ信号を表すデータとして、デバッグ回路２１６の内部に格納する。高速Ｉ／Ｆ信号ではタイミングマージンが小さいので、同一の信号を異なるフリップフロップでサンプリングした場合、サンプリング時間のわずかな差異に応じて異なる結果が取得される可能性があるという問題がある。一方、図１の集積回路２００によれば、集積回路２００の内部のＤフリップフロップ２０６〜２０８で取得した結果を使用することで、この問題を回避できる。
【００４３】
図１の集積回路２００では、ＲＡＭ２１３から出力されるデータ信号ＲＤＯ＿Ｄ［７：０［７：０］をデバッグ回路２１６の内部に格納する。集積回路の内部にＲＡＭを備える場合、ＲＡＭから出力されるデータ信号に応じて集積回路の動作が決まるので、実機の集積回路の動作をシミュレーションで再現することが困難であった。すなわち、従来は、リセット解除後のすべての入力データ信号を取得し、この入力データ信号をシミュレーションの集積回路に入力することで、集積回路の動作を再現しなければならなかった。このため、リセット解除後、長時間動作している実機の集積回路の論理状態をシミュレーションで再現することは現実的ではなかった。図１の集積回路２００では、デバッグ回路２１６の内部に格納されたデータ信号ＲＤＯ＿Ｄ［７：０［７：０］をシミュレーションにおいて使用することで、この問題を回避できる。
【００４４】
図２は、図１のデバッグ回路２１６の構成を示すブロック図である。デバッグ回路２１６は、制御回路３０１、カウンタ３０２、セレクタ３０３及び３０５、Ｄフリップフロップ３０４及び３０６〜３１０、セレクタ３１１、及びデバッグＲＡＭ３１２を備える。
【００４５】
デバッグ回路２１６は、デバッグＲＡＭ３１２を集積回路２００の第２の記憶手段として備え、制御回路３０１及びその他の構成要素３０２〜３１１をデバッグ手段として備える。制御回路３０１は、構成要素３０２〜３１１を用いて、第１の記憶手段内のデータの少なくとも一部をデバッグＲＡＭ３１２に格納し、デバッグＲＡＭ３１２内のデータを集積回路２００の外部に出力する。
【００４６】
制御回路３０１は、デバッグ回路２１６の全体を制御する。制御回路３０１には、リセット信号ＲＥＳＥＴ＿Ｎ、クロック信号ＣＬＫ、制御信号ＭＯＮ＿ＩＮ１及びＭＯＮ＿ＩＮ０が入力される。制御回路３０１は、制御信号ＤＢ＿ＳＥＬ＿Ａ＿０、ＤＢ＿ＲＷＥ＿Ｎ、ＤＢ＿ＲＯＥ＿Ｎ、ＤＢ＿ＳＥＬ＿Ａ＿１、ＤＡＴＯ＿ＳＥＬ＿Ａ、及び３ビット幅のアドレス信号ＤＢ＿ＲＡ［２：０］を出力する。制御信号ＤＡＴＯ＿ＳＥＬ＿Ａは、図１のセレクタ２１９に送られる。
【００４７】
カウンタ３０２には、リセット信号ＲＥＳＥＴ＿Ｎ及びクロック信号ＣＬＫが入力され、カウンタ３０２は、１９ビット幅のカウント値Ｃｏｕｎｔ［１８：０］を発生する。カウンタ３０２は、リセット信号ＲＥＳＥＴ＿Ｎがローレベルからハイレベルになったとき、１に初期化され、イネーブルＥＮがアサートされている間、クロック毎に＋１ずつカウントアップする。カウント値Ｃｏｕｎｔ［１８：０］は、セレクタ３０３に送られる。
【００４８】
セレクタ３０３は、１９ビット幅のＡ入力端子、１９ビット幅のＢ入力端子、及び入力端子ＳＥＬを有する。Ａ入力端子には、カウント値Ｃｏｕｎｔ［１８：０］が入力され、Ｂ入力端子には、後段のＤフリップフロップ３０４から出力される遅延したカウント値Ｃｏｕｎｔ＿ｈ［１８：０］が入力される。入力端子ＳＥＬには、制御回路３０１からの制御信号ＤＢ＿ＳＥＬ＿Ａ＿０が入力される。制御信号ＤＢ＿ＳＥＬ＿Ａ＿０がハイレベルであるとき、セレクタ３０３はカウント値Ｃｏｕｎｔ［１８：０］を出力し（Ａ入力端子側）、ローレベルであるとき、セレクタ３０３は遅延したカウント値Ｃｏｕｎｔ＿ｈ［１８：０］を出力する（Ｂ入力端子側）。構成要素３０２〜３０４がこのように構成されたことにより、制御信号ＤＢ＿ＳＥＬ＿Ａ＿０がハイレベルになったとき、クロック信号ＣＬＫの立ち上がりエッジにおいて、カウント値Ｃｏｕｎｔ［１８：０］がＤフリップフロップ３０４に取り込まれる。Ｄフリップフロップ３０４から出力される遅延したカウント値Ｃｏｕｎｔ＿ｈ［１８：０］は、セレクタ３０３及び３１１に送られる。
【００４９】
セレクタ３０５は、３ビット幅のＡ入力端子、３ビット幅のＢ入力端子、及び入力端子ＳＥＬを有する。Ａ入力端子には、図１のＤフリップフロップ２１０〜２１２から出力されるデータ信号Ｉ＿ｆｆ［２：０］が入力され、Ｂ入力端子には、後段のＤフリップフロップ３０６から出力される遅延したデータ信号Ｉ＿ｈ［２：０］が入力される。入力端子ＳＥＬには、制御回路３０１からの制御信号ＤＢ＿ＳＥＬ＿Ａ＿０が入力される。制御信号ＤＢ＿ＳＥＬ＿Ａ＿０がハイレベルであるとき、セレクタ３０５はデータ信号Ｉ＿ｆｆ［２：０］を出力し（Ａ入力端子側）、ローレベルであるとき、セレクタ３０５は遅延したデータ信号Ｉ＿ｈ［２：０］を出力する（Ｂ入力端子側）。構成要素３０５及び３０６がこのように構成されたことにより、制御信号ＤＢ＿ＳＥＬ＿Ａ＿０がハイレベルになったとき、クロック信号ＣＬＫの立ち上がりエッジにおいて、データ信号Ｉ＿ｆｆ［２：０］がＤフリップフロップ３０６に取り込まれる。Ｄフリップフロップ３０６から出力される遅延したデータ信号Ｉ＿ｈ［２：０］は、セレクタ３０５及び３１１に送られる。
【００５０】
Ｄフリップフロップ３０７は、図１のＤフリップフロップ２０６〜２０８から出力されるデータ信号Ｉｎ＿ｆｆ［２：０］をいったん格納し、１クロックにわたって遅延したデータ信号Ｉｎ＿ｈ［２：０］として出力する。遅延したデータ信号Ｉｎ＿ｈ［２：０］は、後段のＤフリップフロップ３０８及びセレクタ３１１に送られる。Ｄフリップフロップ３０８は、遅延したデータ信号Ｉｎ＿ｈ［２：０］をいったん格納し、１クロックにわたってさらに遅延したデータ信号Ｉｎ＿ｈｄ［２：０］として出力する。さらに遅延したデータ信号Ｉｎ＿ｈｄ［２：０］は、後段のセレクタ３１１に送られる。
【００５１】
Ｄフリップフロップ３０９は、図１のＲＡＭ２１３から出力されるデータ信号ＲＤＯ［７：０］をいったん格納し、１クロックにわたって遅延したデータ信号ＲＤＯ＿Ｄ［７：０］として出力する。遅延したデータ信号ＲＤＯ＿Ｄ［７：０］は、後段のＤフリップフロップ３１０及びセレクタ３１１に送られる。Ｄフリップフロップ３１０は、遅延したデータ信号ＲＤＯ＿Ｄ［７：０］をいったん格納し、１クロックにわたってさらに遅延したデータ信号ＲＤＯ＿ＤＤ［７：０］として出力する。さらに遅延したデータ信号ＲＤＯ＿ＤＤ［７：０］は、後段のセレクタ３１１に送られる。
【００５２】
セレクタ３１１は、２２ビット幅のＡ入力端子、２２ビット幅のＢ入力端子、及び入力端子ＳＥＬを有する。Ａ入力端子の上位１９ビットＡ［２１：３］には、遅延したカウント値Ｃｏｕｎｔ＿ｈ［１８：０］が入力され、下位３ビットＡ［２：０］には、遅延したデータ信号Ｉ＿ｈ「２：０」が入力される。Ｂ入力端子の上位３ビットＢ［２１：１９］には、遅延したデータ信号Ｉ＿ｈ［２：０］が入力され、次の３ビットＢ［１８：１６］には、さらに遅延したデータ信号Ｉ＿ｈｄ［２：０］が入力される。Ｂ入力端子のさらに次の８ビットＢ［１５：８］には、遅延したデータ信号ＲＤＯ＿Ｄ［７：０］が入力され、下位８ビットＢ［７：０］には、さらに遅延したデータ信号ＲＤＯ＿ＤＤ［７：０］が入力される。言い換えると、Ａ入力端子には、カウント値と、集積回路２００の内部レジスタ値とが入力され、Ｂ入力端子には、２クロック分の集積回路２００の入力データ信号値と、２クロック分のＲＡＭ２１３からのデータ信号値とが入力される。入力端子ＳＥＬには、制御回路３０１からの制御信号ＤＢ＿ＳＥＬ＿Ａ＿１が入力される。制御信号ＤＢ＿ＳＥＬ＿Ａ＿１がハイレベルであるとき、セレクタ３１１はＡ入力端子側に入力された信号を出力し、ローレベルであるとき、セレクタ３１１はＢ入力端子側に入力された信号を出力する。セレクタ３１１から出力される信号は、データ信号ＤＢ＿ＲＤＩ［２１：０］としてデバッグＲＡＭ３１２に送られる。
【００５３】
デバッグＲＡＭ３１２には、制御信号ＤＢ＿ＲＷＥ＿Ｎ、ＤＢ＿ＲＯＥ＿Ｎ、アドレス信号ＤＢ＿ＲＡ［２：０］、及びデータ信号ＤＢ＿ＲＤＩ［２１：０］が入力される。デバッグＲＡＭ３１２の端子ＲＣＳ＿Ｎは、抵抗Ｒ１を介して接地され、これにより、デバッグＲＡＭ３１２へのデータの読み書きが有効にされている。デバッグＲＡＭ３１２は、データ信号ＤＢ＿ＲＤＩ［２１：０］のデータを格納し、また、格納されたデータを読み出して２２ビット幅のデータ信号ＤＢ＿ＯＵＴ［２１：０］として図１のセレクタ２１９に送る。
【００５４】
クロック信号ＣＬＫの立ち上がりエッジにおいて、制御信号ＤＢ＿ＲＷＥ＿Ｎがハイレベルであるとき、デバッグＲＡＭ３１２へのデータの格納が禁止され、ローレベルであるとき、デバッグＲＡＭ３１２にデータが格納される。制御信号ＤＢ＿ＲＯＥ＿Ｎがハイレベルであるとき、デバッグＲＡＭ３１２からのデータの読み出しが禁止され、ローレベルであるとき、デバッグＲＡＭ３１２からデータが読み出される。
【００５５】
集積回路２００は、制御信号ＭＯＮ＿ＩＮ１及びＭＯＮ＿ＩＮ０に応じて、第１のモード及び第２のモードを有する。制御回路３０１は、第１のモードにおいて、組み合わせ回路２１４から出力されたデータを出力端子２１５から集積回路２００の外部に出力させ、第２のモードにおいて、デバッグＲＡＭ３１２内のデータを出力端子２１５から集積回路２００の外部に出力させる。このため、制御回路３０１は、アドレス信号ＤＢ＿ＲＡ［２：０］、制御信号ＤＢ＿ＲＷＥ＿Ｎ、及びＤＢ＿ＲＯＥ＿ＮによりデバッグＲＡＭ３１２へのデータの入出力を制御し、制御信号ＤＢ＿ＳＥＬ＿Ａによりセレクタ３１９を制御する。
【００５６】
図３は、図２のデバッグＲＡＭ３１２にデータを格納するレイアウトを示す図である。図３を参照して、デバッグＲＡＭ３１２の使い方及び記憶フォーマットを説明する。図３に示すように、デバッグＲＡＭ３１２は、アドレス信号ＤＢ＿ＲＡによって指定されるアドレス０〜５をそれぞれ有する６個の記憶単位を有する。各記憶単位は２２ビット幅の大きさを有する（すなわち、ビットＤ［０］〜ビットＤ［２１］を含む）。デバッグＲＡＭ３１２は複数の領域に分割される。図３では、デバッグＲＡＭ３１２は２つの領域１及び２に分割され、領域１はアドレス０〜２の記憶単位を含み、領域２はアドレス３〜５の記憶単位を含む。領域１及び２は、互いに同じ記憶フォーマットを有する。各記憶単位には、セレクタ３１１のＡ入力端子側又はＢ入力端子側に入力された信号が格納される。領域１のアドレス０の記憶単位に、カウント値（Ｃｏｕｎｔ＿ｈ）と、集積回路２００の内部レジスタ値（Ｉ＿ｈ）とが格納される。領域１のアドレス１〜２の各記憶単位に、２クロック分の集積回路２００の入力データ信号値（Ｉｎ＿ｈ、Ｉｎ＿ｈｄ）と、２クロック分のＲＡＭ２１３からのデータ信号値（ＲＤＯ＿Ｄ、ＲＤＯ＿ＤＤ）とが格納される。領域２にも、領域１と同様にデータが格納される。領域１及び２のそれぞれに格納されるデータは、ある時点における集積回路２００の内部の論理状態を表す。
【００５７】
デバッグＲＡＭ３１２は、複数の領域を有するリングバッファとして使用される。制御回路３０１は、所定の時間期間にわたって、Ｄフリップフロップ２０６〜２０８、２１０〜２１２、及びＲＡＭ２１３内のデータの少なくとも一部をデバッグＲＡＭ３１２に周期的に格納する。このとき、制御回路３０１は、デバッグＲＡＭ３１２の各領域に順番に書き込みを行う。各領域に対する書き込みが一巡しても、書き込み動作を継続する場合には、最初に書き込みを行った領域から順番に上書きを行う。
【００５８】
デバッグのために集積回路の内部のデータを集積回路の内部のメモリに格納する場合、任意長さの時間区間にわたるデータのすべての論理状態を記憶しておくことができるとは限らない。書き込みによりメモリが一杯になってしまった場合、最も古いデータを破棄してメモリの空き領域を作成し、新しいデータの書き込みを継続することになる。図１の集積回路２００の動作のシミュレーションを行う場合、シミュレーションの開始時点に対応する集積回路２００の動作中の時点における、集積回路２００の内部の記憶手段内のデータが必要になる。従って、当該データをデバッグＲＡＭ３１２に格納し、格納されたデータを読み出して論理シミュレータに入力する必要がある。図３のレイアウトを有するデバッグＲＡＭ３１２によれば、古いデータを格納した領域を上書きしても、少なくとも「領域の個数−１」個の、集積回路２００の内部の論理状態が保持されていることになる。従って、デバッグＲＡＭ３１２の領域の個数に応じて、長い時間区間にわたるシミュレーションを行うこともできる。
【００５９】
次に、図４及び図５を参照して、図１の集積回路２００の動作について説明する。
【００６０】
図４は、図２のデバッグＲＡＭ３１２にデータを格納するときのデバッグ回路２１６内の各信号を示すタイミングチャートである。デバッグＲＡＭ３１２は図３のレイアウトを有する。図４において、信号ＣＬＫ、信号ＲＥＳＥＴ＿Ｎ、ＤＡＴＩ、Ｉｎ＿ｆｆ、Ｉ＿ｆｆ、ＤＡＴＯ、ＲＤＯ、ＭＯＮ＿ＩＮ１、ＭＯＮ＿ＩＮ０は、図１の同名の信号の状態を示す。また、図４において、信号Ｃｏｕｎｔ、ＤＢ＿ＳＥＬ＿Ａ＿０、Ｃｏｕｎｔ＿ｈ、Ｉ＿ｈ、Ｉｎ＿ｈ、Ｉｎ＿ｈｄ、ＲＤＯ＿Ｄ、ＲＤＯ＿ＤＤ、ＤＢ＿ＲＡ、ＤＢ＿ＳＥＬ＿Ａ＿１、ＤＢ＿ＲＷＥ＿Ｎは、図２の同名の信号の状態を示す。
【００６１】
図４の時間Ｔ１において、カウント値（Ｃｏｕｎｔ＿ｈ）と、集積回路２００の内部レジスタ値（Ｉ＿ｈ）とが、デバッグＲＡＭ３１２のアドレス０に格納される。時間Ｔ２において、２クロック分の集積回路２００の入力データ信号値（Ｉｎ＿ｈ、Ｉｎ＿ｈｄ）と、２クロック分のＲＡＭ２１３からのデータ信号値（ＲＤＯ＿Ｄ、ＲＤＯ＿ＤＤ）とが、デバッグＲＡＭ３１２のアドレス１に格納される。同様に、時間Ｔ３において、アドレス１に格納されたデータに後続するデータ（Ｉｎ＿ｈ、Ｉｎ＿ｈｄ、ＲＤＯ＿Ｄ、ＲＤＯ＿ＤＤ）が、デバッグＲＡＭ３１２のアドレス２に格納される。
【００６２】
デバッグ回路２１６は、セレクタ３０５を備えたことにより、集積回路２００の内部レジスタ値（Ｉ＿ｆｆ）を間欠的に取得する。集積回路２００の動作中にわたるすべての内部レジスタ値を格納しようとすると、必要なデバッグＲＡＭ３１２の容量が過度に増大してしまうことがある。従って、デバッグ回路２１６は、集積回路２００の内部レジスタ値（Ｉ＿ｆｆ）を間欠的に取得してデバッグＲＡＭ３１２に格納する。シミュレーションを行う際には、内部レジスタ値（Ｉ＿ｆｆ）を取得した時点からシミュレーションを開始し、その後の（取得されなかった）内部レジスタ値をシミュレーションにより生成する。図２の構成によれば、シミュレーションを開始可能な時点が集積回路２００の内部レジスタ値（Ｉ＿ｆｆ）を取得した時点に限定されるが、必要なデバッグＲＡＭ３１２の容量を削減することができる。
【００６３】
また、デバッグ回路２１６は、集積回路２００の入力データ信号値（Ｉｎ＿ｆ）及びＲＡＭ２１３からのデータ信号値（ＲＤＯ）を欠落なく連続的に取得する。デバッグ回路２１６は、２段のＤフリップフロップ３０７及び３０８を備えたことにより、２クロック分の集積回路２００の入力データ信号値（Ｉｎ＿ｈ、Ｉｎ＿ｈｄ）を並列化してセレクタ３１１に送っている。同様に、デバッグ回路２１６は、２段のＤフリップフロップ３０９及び３１０を備えたことにより、２クロック分のＲＡＭ２１３からのデータ信号値（ＲＤＯ＿Ｄ、ＲＤＯ＿ＤＤ）を並列化してセレクタ３１１に送っている。従って、デバッグ回路２１６は、セレクタ３１１を備えていても、集積回路２００の入力データ信号値（Ｉｎ＿ｆ）及びＲＡＭ２１３からのデータ信号値（ＲＤＯ）を欠落なく連続的に取得してデバッグＲＡＭ３１２に格納する。
【００６４】
集積回路２００は、Ｄフリップフロップ２１０〜２１２及びＲＡＭ２１３を備えたことにより、順序回路として動作する。内部レジスタ値（Ｉ＿ｆｆ）は、シミュレーションを開始するための初期値として取得される。シミュレーション対象期間のある時点における内部レジスタ値（Ｉ＿ｆｆ）が決まれば、その後の集積回路２００の振る舞いは、集積回路２００の入力データ信号値（Ｉｎ＿ｆ）により一意に決まる。内部レジスタ値（Ｉ＿ｆｆ）を間欠的に取得すること、すなわち、内部レジスタ値（Ｉ＿ｆｆ）を取得しない期間が存在することによる影響は、シミュレーションを開始可能な時点に制約が発生することのみである。
【００６５】
また、本実施形態に係る集積回路２００は、論理シミュレータ上の集積回路の動作を、実機の集積回路２００の動作と一致させることを前提としている。このため、入力データ信号値（Ｉｎ＿ｆｆ）を取得しないと、テスト環境での集積回路への入出力値を決定できず、論理シミュレータ上の集積回路の動作を、実機の集積回路の動作と一致させることができない。しかしながら、入力データ信号値（Ｉｎ＿ｆｆ）及びＲＡＭ２１３からのデータ信号値（ＲＤＯ）を欠落なく連続的に取得しているので、これらの情報の欠落により、集積回路２００の内部の振る舞いを決定できずにシミュレーションを継続できなくなることはない。
【００６６】
上述したように、Ｄフリップフロップ３０７〜３１０により、２クロック分の集積回路２００の入力データ信号値を並列化し、２クロック分のＲＡＭ２１３からのデータ信号値を並列化している。従って、並列化されたデータ信号値の重複を生じさせないために、データをアドレス１に格納した後（時間Ｔ２）、アドレス信号ＤＢ＿ＲＡは２クロックにわたってアドレス２を指定する。時間Ｔ２の１クロック後におけるクロック信号ＣＬＫの立ち上がりエッジでは、制御信号ＤＢ＿ＲＷＥ＿Ｎがハイレベルであり、デバッグＲＡＭ３１２に新たなデータは格納されない。従って、時間Ｔ３におけるクロック信号ＣＬＫの立ち上がりエッジでは、デバッグＲＡＭ３１２のアドレス（アドレス信号ＤＢ＿ＲＡによって指定されるアドレス）は更新されない。デバッグＲＡＭ３１２への書き込みがないときにデバッグＲＡＭ３１２のアドレスを更新すると、デバッグＲＡＭ３１２の容量が無駄になり、また、デバッグＲＡＭ３１２から読み出したデータをシミュレーションで使用するときの処理が複雑になってしまう。図４に示すようにアドレス指定することにより、デバッグＲＡＭ３１２の容量を無駄なく使用することができ、デバッグＲＡＭ３１２から読み出したデータをシミュレーションで使用するときの処理を簡単化することができる。
【００６７】
次いで、図４の時間Ｔ４において、カウント値（Ｃｏｕｎｔ＿ｈ）と、集積回路２００の内部レジスタ値（Ｉ＿ｈ）とが、デバッグＲＡＭ３１２のアドレス３に格納される。時間Ｔ５において、２クロック分の集積回路２００の入力データ信号値（Ｉｎ＿ｈ、Ｉｎ＿ｈｄ）と、２クロック分のＲＡＭ２１３からのデータ信号値（ＲＤＯ＿Ｄ、ＲＤＯ＿ＤＤ）とが、デバッグＲＡＭ３１２のアドレス４に格納される。同様に、時間Ｔ６において、アドレス４に格納されたデータに後続するデータ（Ｉｎ＿ｈ、Ｉｎ＿ｈｄ、ＲＤＯ＿Ｄ、ＲＤＯ＿ＤＤ）が、デバッグＲＡＭ３１２のアドレス５に格納される。
【００６８】
図４の時間Ｔ７〜Ｔ９では、時間Ｔ１〜Ｔ３においてデータを書き込んだデバッグＲＡＭ３１２のアドレス０〜２に、新たなデータを上書きする。時間Ｔ７において、カウント値（Ｃｏｕｎｔ＿ｈ）と、集積回路２００の内部レジスタ値（Ｉ＿ｈ）とが、デバッグＲＡＭ３１２のアドレス０に格納される。時間Ｔ８において、２クロック分の集積回路２００の入力データ信号値（Ｉｎ＿ｈ、Ｉｎ＿ｈｄ）と、２クロック分のＲＡＭ２１３からのデータ信号値（ＲＤＯ＿Ｄ、ＲＤＯ＿ＤＤ）とが、デバッグＲＡＭ３１２のアドレス１に格納される。同様に、時間Ｔ９において、アドレス１に格納されたデータに後続するデータ（Ｉｎ＿ｈ、Ｉｎ＿ｈｄ、ＲＤＯ＿Ｄ、ＲＤＯ＿ＤＤ）が、デバッグＲＡＭ３１２のアドレス２に格納される。
【００６９】
図４のタイミングチャートに従って動作する結果、図３に示すフォーマットで、デバッグＲＡＭ３１２にデータが格納される。
【００７０】
デバッグＲＡＭ３１２では、時間Ｔ１〜Ｔ３に取得したデータは上書きされて残っていないが、時間Ｔ４〜Ｔ９に取得したデータが格納されている。時間Ｔ４〜Ｔ６で取得したデータは、集積回路２００の内部レジスタ値（Ｉ＿ｈ）及びＲＡＭ２１３からのデータ信号値（ＲＤＯ）を含んでいる。従って、デバッグＲＡＭ３１２に格納されたデータを集積回路２００の外部に出力し、このデータに基づいて、データを取得した時点からシミュレーションを開始することができる。
【００７１】
図５は、図２のデバッグＲＡＭ３１２から集積回路２００の外部にデータを出力するときのデバッグ回路２１６内の各信号を示すタイミングチャートである。制御信号ＭＯＮ＿ＩＮ１がハイレベルであり、かつ、制御信号ＭＯＮ＿ＩＮ０がローレベルであるとき、デバッグ回路２１６は、デバッグＲＡＭ３１２に格納したデータを、セレクタ２１９及び出力端子２１５を介して集積回路２００の外部に出力する。デバッグＲＡＭ３１２から先入れ先出し（ＦＩＦＯ）でデータを読み出すために、デバッグＲＡＭ３１２に最後にデータが書き込まれたアドレス（例えばアドレス２）の次のアドレス（例えばアドレス３）から順番にデータを読み出す。制御信号ＤＡＴＯ＿ＳＥＬ＿Ａがローレベルであるとき、セレクタ２１９はデータ信号ＤＢ＿ＯＵＴを出力し、これが、集積回路２００の出力データ信号ＤＡＴＯとして集積回路２００の外部に出力される。
【００７２】
以上説明したように、デバッグ回路２１６は、その内部の論理状態を示すデータをデバッグＲＡＭ３１２に格納し、このデータをシミュレーションのために集積回路２００の外部に出力する。
【００７３】
図６は、集積回路２００の外部に出力されたデータから元データを復元する方法を説明するためのタイミングチャートである。デバッグＲＡＭ３１２から読み出されたデータ信号ＤＢ＿ＯＵＴ（すなわち、制御信号ＤＡＴＯ＿ＳＥＬ＿Ａがローレベルであるときの出力データ信号ＤＡＴＯ）は、図３の記憶フォーマットと同じフォーマットを有する。従って、出力データ信号ＤＡＴＯから、最初のクロックにおいてカウント値Ｃｏｕｎｔ＿ｈ及びデータ信号Ｉ＿ｈを取り出し、その後の２クロックにおいてデータ信号Ｉｎ＿ｈ、Ｉｎ＿ｈｄ、ＲＤＯ＿Ｄ、及びＲＤＯ＿ＤＤを取り出す。図６では、タイミング調整のために、出力データ信号ＤＡＴＯに１クロック分の待機時間を挿入している。集積回路２００の内部の論理状態は、出力データ信号ＤＡＴＯから取り出されたデータ信号Ｉ＿ｈ、Ｉｎ＿ｈ、Ｉｎ＿ｈｄ、ＲＤＯ＿Ｄ、及びＲＤＯ＿ＤＤを、タイミング調整のために予め決められた時間だけ遅延させることによって復元される。データ信号Ｉ＿ｆｆは、データ信号Ｉ＿ｈを２クロック分だけ遅延させることによって復元される。データ信号Ｉｎ＿ｆｆは、データ信号Ｉｎ＿ｈｄを１クロック分だけ遅延させたものと、データ信号Ｉｎ＿ｈを２クロック分だけ遅延させたものとを交互に取り込むことによって復元される。データ信号ＲＤＯは、データ信号ＲＤＯ＿ＤＤの１クロック分だけ遅延させたものと、データ信号ＲＤＯ＿Ｄを２クロック分だけ遅延させたものとを交互に取り込むことによって復元される。入力データ信号ＤＡＴＩは、データ信号Ｉｎ＿ｈｄと、データ信号Ｉｎ＿ｈを１クロック遅延させたものとを交互に取り込むことによって復元される。
【００７４】
図６に従って復元されたデータに基づいて、集積回路２００の動作のシミュレーションが行われる。
【００７５】
図７は、図１の集積回路２００のテスト装置の構成を示すブロック図である。図７のテスト装置は、テスト対象である図１の集積回路２００、コンピュータ４０１、インターフェース装置４０２、ユーザ入力装置４０３、及び表示装置４０４を備える。コンピュータ４０１は、論理シミュレータであり、例えば、論理シミュレータのソフトウェアを実行するパーソナルコンピュータである。論理シミュレータは、例えばＶｅｒｉｌｏｇシミュレータであるが、それに限定されるものではない。インターフェース装置４０２は、図１の入力端子２０１〜２０５、２１７〜２１８、及び出力端子２１５に接続される。インターフェース装置４０２は、コンピュータ４０１の制御下で、集積回路２００に入力データ信号ＤＡＴＩを供給し、集積回路２００から出力データ信号ＤＡＴＯを取得してコンピュータ４０１に送る。特に、インターフェース装置４０２は、集積回路２００からデバッグＲＡＭ３１２内のデータを取得してコンピュータ４０１に送る。コンピュータ４０１は、インターフェース装置４０２から取得されたデバッグＲＡＭ３１２内のデータに基づいて集積回路２００の動作のシミュレーションを行う。
【００７６】
コンピュータ４０１は、集積回路２００に等価な仮想的モデル２００Ａを生成する。次いで、コンピュータ４０１は、インターフェース装置４０２から取得されたデバッグＲＡＭ３１２内のデータを、仮想的モデル２００Ａに含まれるＤフリップフロップ２０６〜２０８、２１０〜２１２、及びＲＡＭ２１３に書き込む。次いで、コンピュータ４０１は、仮想的モデル２００Ａの論理状態の変化を所定時間にわたって追跡する。
【００７７】
図７のテスト装置では、従来の集積回路の開発に用いる論理シミュレータ同様、コンピュータ４０１上で、テスト対象である実機の集積回路２００と等価な仮想的モデル２００Ａを生成する。従来の集積回路の開発では、テスト対象の集積回路に対し、専ら、入力端子から入力データ信号を供給することでシミュレーションを行った。一方、図７のテスト装置では、仮想的モデル２００Ａの内部の記憶手段に直接に値を設定することで、リセット解除の直後に限らず任意の時点から、実機の集積回路と同じ動作をシミュレーションにより再現することができる。
【００７８】
図１の集積回路２００によれば、大規模かつ複雑な構成を有していても、シミュレーションにおいて実機の集積回路２００と同じ動作状態を容易に生成することができる。
【００７９】
以上説明したように、図１の集積回路２００によれば、デバッグ回路２１６は、集積回路２００の入力データ信号値、集積回路２００の内部レジスタ値、及びＲＡＭ２１３からのデータ信号値をデバッグＲＡＭ３１２に格納する。さらに、デバッグ回路２１６は、デバッグＲＡＭ３１２に格納されたデータを集積回路２００の外部に出力する。図７のテスト装置は、集積回路２００の外部に出力されたデータに基づいてシミュレーションを行うことで、集積回路２００の動作をシミュレーションにより再現することができる。
【００８０】
図１の集積回路２００によれば、デバッグ回路２１６は、集積回路２００の内部レジスタ値及びＲＡＭ２１３からのデータ信号値を間欠的（周期的）に取得する。従って、図７のテスト装置は、リセット解除の直後だけでなく、周期的な、これらのデータを取得した時点から、シミュレーションを開始することができる。
【００８１】
第２の実施形態．
第２の実施形態では、集積回路の内部の少なくとも１つの信号の論理状態が予め決められた条件を満たすとき、集積回路の内部の論理状態を集積回路の内部の記憶手段に格納することを開始及び／又は終了する場合について説明する。これにより、データの格納の開始及び／又は終了をプログラマブルに制御可能になる。デバッグのために集積回路の内部の論理状態を集積回路の内部の記憶手段に格納する場合、データの格納の開始条件及び終了条件を適切に選択することが極めて重要である。
【００８２】
図８は、本発明の第２の実施形態に係る集積回路５０１の構成を示すブロック図である。集積回路５０１には、他の集積回路５０２から入力データ信号ＤＡＴＩ［３：０］が供給される。集積回路５０１及び５０２には、外部からクロック信号ＣＬＫが供給され、リセット回路５０３からリセット信号ＲＥＳＥＴ＿Ｎが供給され、電源回路５０４から電源電圧ＰＷＲが供給される。
【００８３】
集積回路５０１は、回路モジュール５１１、インバータ５１２、判定回路５１３、及びデバッグ回路５１４を備える。デバッグ回路５１４は、図１のデバッグ回路２１６に対応し、回路モジュール５１１は、図１の集積回路２００におけるデバッグ回路２１６以外の構成要素に対応する構成要素を含む。判定回路５１３は、Ｄフリップフロップ５２１〜５２４及び論理演算回路５２５を備える。
【００８４】
回路モジュール５１１は、信号Ｍ＿ＥＮ及びＥＲＲ＿ＤＥＴを論理演算回路５２５に送る。信号Ｍ＿ＥＮがハイレベルであるとき、回路モジュール５１１が起動していることを示し、ローレベルであるとき、回路モジュール５１１が停止していることを示す。信号ＥＲＲ＿ＤＥＴがハイレベルであるとき、回路モジュール５１１の内部でエラーが発生したことを示し、ローレベルであるとき、回路モジュール５１１の内部でエラーが発生していないことを示す。
【００８５】
デバッグ回路５１４は、集積回路５０１の内部の少なくとも１信号の論理状態が予め決められた条件を満たすとき、回路モジュール５１１の内部の記憶手段内のデータの少なくとも一部を、デバッグ回路５１４の内部の記憶手段に格納することを開始又は終了する。回路モジュール５１１の内部の記憶手段を「第１の記憶手段」とし、デバッグ回路５１４の内部の記憶手段を「第２の記憶手段」とする。データの格納の開始及び終了を制御するために、デバッグ回路５１４には、図１の制御信号ＭＯＮ＿ＩＮ１に代えて、判定回路５１３からの制御信号ＳＴＡＲＴ及びＳＴＯＰが入力される。制御信号ＳＴＡＲＴがローレベルからハイレベルになったとき、デバッグ回路５１４はデータの格納を開始し、制御信号ＳＴＯＰがローレベルからハイレベルになったとき、デバッグ回路５１４はデータの格納を終了する。
【００８６】
データの格納の開始条件及び／又は終了条件を設定するために、入力データ信号ＤＡＴＩ［３：０］の各ビットＤＡＴＩ［０］〜ＤＡＴＩ［３］の信号線に抵抗Ｒ１０〜Ｒ１３が接続される。図８の例では、抵抗Ｒ１０及びＲ１３がプルダウン抵抗であり、抵抗Ｒ１１及びＲ１２がプルアップ抵抗である。プルアップ抵抗又はプルダウン抵抗を接続したことにより、リセット解除時における入力データ信号ＤＡＴＩ［３：０］の各ビットＤＡＴＩ［０］〜ＤＡＴＩ［３］の論理状態が決まる。
【００８７】
判定回路５１３は、リセット解除時における入力データ信号ＤＡＴＩ［３：０］の各ビットＤＡＴＩ［０］〜ＤＡＴＩ［３］の論理状態を取得して、Ｄフリップフロップ５２１〜５２４にいったん格納する。次いで、判定回路５１３は、Ｄフリップフロップ５２１〜５２４内のデータを信号Ｑ［０］〜Ｑ［３］として論理演算回路５２５に送る。論理演算回路５２５は、信号Ｑ［０］〜Ｑ［３］及び信号Ｍ＿ＥＮ及びＥＲＲ＿ＤＥＴに基づいて、制御信号ＳＴＡＲＴ及びＳＴＯＰを生成する。論理演算回路５２５は、信号Ｑ［２］及びＱ［３］の論理状態に応じて、データの格納の開始条件を設定し、信号Ｑ［０］及びＱ［１］の論理状態に応じて、データの格納の終了条件を設定する。信号Ｑ［３］がハイレベルである場合、信号ＥＲＲ＿ＤＥＴがハイレベルであることを、データの格納の開始条件とする。信号Ｑ［２］がハイレベルである場合、信号Ｍ＿ＥＮがハイレベルであることを、データの格納の開始条件とする。信号Ｑ［１］がハイレベルである場合、信号ＥＲＲ＿ＤＥＴがハイレベルであることを、データの格納の終了条件とする。信号Ｑ［０］がハイレベルである場合、信号Ｍ＿ＥＮがハイレベルであることを、データの格納の終了条件とする。各信号Ｑ［０］〜Ｑ［３］がローレベルである場合は、条件は設定されない。
【００８８】
図９は、図８の集積回路５０１内の各信号を示すタイミングチャートである。図９の時間Ｔ１１において、電源回路５０４がオンされて電源電圧ＰＷＲがハイレベルになり、また、リセット信号ＲＥＳＥＴ＿Ｎがローレベルになる。これに伴い、時間Ｔ１１からＴ１２までの期間、入力データ信号ＤＡＴＩ［３：０］の各ビットＤＡＴＩ［０］〜ＤＡＴＩ［３］の論理状態は、抵抗Ｒ１０〜Ｒ１３に応じてハイレベル又はローレベルになる。これらの論理状態はＤフリップフロップ５２１〜５２４にいったん格納され、信号Ｑ［０］〜Ｑ［３］として論理演算回路５２５に送られる。図９の例では、信号Ｑ［３］はローレベルであり、信号Ｑ［２］はハイレベルであり、信号Ｑ［１］はハイレベルであり、信号Ｑ［０］はローレベルである。従って、論理演算回路５２５は、信号Ｍ＿ＥＮがハイレベルであることを、データの格納の開始条件とし、信号ＥＲＲ＿ＤＥＴがハイレベルであることを、データの格納の終了条件とする。時間Ｔ１２以後は、集積回路５０２から集積回路５０１に任意のデータを伝送中である。時間Ｔ１３において、論理演算回路５２５は、信号Ｍ＿ＥＮがハイレベルになったことを検知し、信号ＳＴＡＲＴをローレベルからハイレベルにする。時間Ｔ１４において、論理演算回路５２５は、信号ＥＲＲ＿ＤＥＴがハイレベルになったことを検知し、信号ＳＴＯＰをローレベルからハイレベルにする。
【００８９】
以上説明したように、集積回路５０１の内部における複数の信号の論理状態の組み合わせが予め決められた条件を満たすとき、回路モジュール５１１の内部の論理状態をデバッグ回路５１４の内部の記憶手段に格納することを開始及び／又は終了する。従って、設定に応じて、例えばエラーの発生を検出したときなど、任意の条件でデータの格納を開始及び／又は終了することができる。
【００９０】
変形例．
本発明の実施形態に係る集積回路は、図１に示したものに限定されず、少なくとも１つの信号処理回路（組み合わせ回路）及び少なくとも１つの第１の記憶手段（Ｄフリップフロップ、ＲＡＭなど）を内部に備えた集積回路であってもよい。
【００９１】
少なくとも１つの組み合わせ回路により論理演算を行った後でＤフリップフロップに格納されて出力されたデータ信号を、集積回路の内部への入力データ信号を表すデータ信号としてデバッグ回路の内部に格納してもよい。
【００９２】
デバッグ回路は、２段のＤフリップフロップ３０７〜３１０に代えて、１段又は３段以上のＤフリップフロップを備えてもよい。１段ではなく２段のＤフリップフロップを用いた場合には、１クロック内で処理すべきデータ量を削減することができる。
【００９３】
図２のデバッグＲＡＭ３１２は、デバッグ回路２１６の内部にあってもよく、外部にあってもよい。また、デバッグＲＡＭ３１２は、図１のＲＡＭ２１３の一部であってもよい。
【００９４】
本発明の実施形態は、以下のように構成されたことを特徴とする。
【００９５】
本発明の第１の態様に係る集積回路は、
入力端子及び出力端子を有し、少なくとも１つの信号処理回路及び少なくとも１つの第１の記憶手段を内部に備えた集積回路において、
上記集積回路は、第２の記憶手段及びデバッグ手段をさらに備え、
上記デバッグ手段は、上記第１の記憶手段内のデータの少なくとも一部を上記第２の記憶手段に格納し、上記第２の記憶手段内のデータを上記集積回路の外部に出力することを特徴とする。
【００９６】
本発明の第２の態様に係る集積回路は、第１の態様に係る集積回路において、
上記少なくとも１つの第１の記憶手段は、上記入力端子を介して上記集積回路に入力されたデータを格納する少なくとも１つの第１のレジスタを含むことを特徴とする。
【００９７】
本発明の第３の態様に係る集積回路は、第１又は第２の態様に係る集積回路において、
上記少なくとも１つの第１の記憶手段は、上記少なくとも１つの信号処理回路のうちの少なくとも１つから出力されたデータを格納する少なくとも１つの第２のレジスタを含むことを特徴とする。
【００９８】
本発明の第４の態様に係る集積回路は、第１〜第３のうちの１つの態様に係る集積回路において、
上記少なくとも１つの第１の記憶手段は、上記少なくとも１つの信号処理回路のうちの少なくとも１つから出力されたデータを格納する少なくとも１つのＲＡＭを含み、
上記デバッグ手段は、上記少なくとも１つのＲＡＭから出力されたデータを上記第２の記憶手段に格納することを特徴とする。
【００９９】
本発明の第５の態様に係る集積回路は、第１〜第４のうちの１つの態様に係る集積回路において、
上記第２の記憶手段は複数の領域を有するリングバッファであり、
上記デバッグ手段は、所定の時間期間にわたって、上記第１の記憶手段内のデータの少なくとも一部を上記第２の記憶手段に周期的に格納することを特徴とする。
【０１００】
本発明の第６の態様に係る集積回路は、第１〜第５のうちの１つの態様に係る集積回路において、
上記集積回路は、第１のモード及び第２のモードを有し、
上記デバッグ手段は、
上記第１のモードにおいて、上記少なくとも１つの信号処理回路のうちの１つから出力されたデータを上記出力端子から上記集積回路の外部に出力させ、
上記第２のモードにおいて、上記第２の記憶手段内のデータを上記出力端子から上記集積回路の外部に出力させることを特徴とする。
【０１０１】
本発明の第７の態様に係る集積回路は、第１〜第６のうちの１つの態様に係る集積回路において、
上記デバッグ手段は、上記集積回路の内部の少なくとも１つの信号の論理状態が予め決められた条件を満たすとき、上記第１の記憶手段内のデータの少なくとも一部を上記第２の記憶手段に格納することを開始又は終了することを特徴とする。
【０１０２】
本発明の第８の態様に係る集積回路のテスト装置は、第１〜第６のうちの１つの態様に係る集積回路のテスト装置であって、上記テスト装置は、
上記集積回路から上記第２の記憶手段内のデータを取得するインターフェース装置と、
上記第２の記憶手段内のデータに基づいて上記集積回路の動作のシミュレーションを行うコンピュータとを備え、
上記コンピュータは、
上記集積回路に等価な仮想的モデルを生成し、
上記インターフェース装置から取得された上記第２の記憶手段内のデータを、上記仮想的モデルに含まれる第１の記憶手段に書き込み、
上記仮想的モデルの論理状態の変化を所定時間にわたって追跡することを特徴とする。
【０１０３】
本発明の第９の態様に係る集積回路のテスト方法は、第１〜第６のうちの１つの態様に係る集積回路のテスト方法であって、上記テスト方法は、
インターフェース装置を用いて、上記集積回路から上記第２の記憶手段内のデータを取得するステップと、
コンピュータ上で、上記集積回路に等価な仮想的モデルを生成するステップと、
上記コンピュータ上で、上記インターフェース装置から取得された上記第２の記憶手段内のデータを、上記仮想的モデルに含まれる第１の記憶手段に書き込むステップと、
上記コンピュータ上で、上記仮想的モデルの論理状態の変化を所定時間にわたって追跡するステップとを含むことを特徴とする。
【符号の説明】
【０１０４】
２００…集積回路、
２０１〜２０５、２１７、２１８…入力端子、
２１５…出力端子、
２０６〜２０８、２１０〜２１２…Ｄフリップフロップ、
２０９、２１４…組み合わせ回路、
２１３…ＲＡＭ、
２１９…セレクタ、
２１６…デバッグ回路、
３０１…制御回路、
３０２…カウンタ、
３０３、３０５、３１１…セレクタ、
３０４、３０６〜３１０…Ｄフリップフロップ、
３１２…デバッグＲＡＭ、
４０１…コンピュータ、
４０２…インターフェース装置、
４０３…入力装置、
４０４…表示装置、
５０１、５０２…集積回路、
５０３…リセット回路、
５０４…電源回路、
５１１…回路モジュール、
５１２…インバータ、
５１３…判定回路、
５１４…デバッグ回路、
５２１〜５２４…Ｄフリップフロップ、
５２５…論理演算回路、
Ｒ１、Ｒ１０〜Ｒ１３…抵抗。
【先行技術文献】
【特許文献】
【０１０５】
【特許文献１】特開２００２−１３２５３６号公報
【特許文献２】特開２００４−２１９２４６号公報
【特許文献３】特開２００５−３４６２２７号公報
【図１】
2016075493.tif 000003
【図２】
2016075493.tif 000004
【図３】
2016075493.tif 000005
【図４】
2016075493.tif 000006
【図５】
2016075493.tif 000007
【図６】
2016075493.tif 000008
【図７】
2016075493.tif 000009
【図８】
2016075493.tif 000010
【図９】
2016075493.tif 000011
【図１０】
2016075493.tif 000012
【図１１】
2016075493.tif 000013
【図１２】
2016075493.tif 000014
【図１３】
2016075493.tif 000015
【図１４】
2016075493.tif 000016