(57)【要約】  本発明はプログラマブルユニットをエミュレートするための方法および装置に関する。本方法は、ターゲットプログラマブルユニットの本来のＣＰＵクロック信号から導出される信号と、加えて、ＣＰＵクロック信号（８）と所定の関係を保ちながら、ターゲットプログラマブルユニットの所与のモデルとプログラムコードとに基づいては計算することのできないデータから成るエミュレーションデータを、通信リンクを介してエミュレーションデバイスに転送するステップを有している。ターゲットプログラマブルユニットは転送されたエミュレーションデータを用いて外部エミュレーションデバイス（１）によりエミュレートされ、エミュレーションから各トレースデータが確認される。本発明はさらに、少なくとも１つのＣＰＵを有するターゲットプログラマブルユニットと、通信リンクとしてのエミュレーションポートを介して外部ユニット（１４）としてターゲットプログラマブルユニットに接続されたエミュレーションデバイスとを含んだエミュレーションのための装置にも関する。最後に、本発明はプログラマブルユニットにも関する。
2008544340.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットプログラマブルユニット（１）を外部エミュレーションデバイス（４）によりエミュレートする方法において、ターゲットプログラマブルユニットは少なくとも１つのＣＰＵ（２）を有しており、外部エミュレーションデバイスは通信リンク（５）によりターゲットプログラマブルユニットに接続されており、該エミュレーション方法は以下の諸ステップ、すなわち、エミュレーションを初期化するために、予め決められた初期化データを通信リンク（５）を介してエミュレーションデバイス（４）に転送するステップ、なお、ターゲットプログラマブルユニット（１）は前記初期化データによりすでに自ら初期化しているまたは初期化されており、通信リンクを介してエミュレーションデバイスにターゲットプログラマブルユニット（１）のＣＰＵクロック信号を転送し、また、該ＣＰＵクロック信号（８）と所定の関係を保ちながら、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントと、オプションとして、ＣＰＵを迂回するデータ転送をトリガするイベントと、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーと、オプションとして、１つまたは複数のデータタイプ信号を転送するステップ、外部エミュレーションデバイスにおいて、転送されたエミュレーションデータを用いてターゲットプログラマブルユニット（１）をエミュレートするステップ、外部エミュレーションデバイスにおいてエミュレーションから各トレースデータを確認するステップ、および、トレースデータを格納および／または出力するステップを有することを特徴とする、ターゲットプログラマブルユニット（１）を外部エミュレーションデバイス（４）によりエミュレートする方法。
【請求項２】
前記ＣＰＵクロック信号（８）または本来のＣＰＵクロック信号から導出される信号のいずれかをターゲットプログラマブルユニット（１）からエミュレーションポート（１５）を介してエミュレーションデバイス（４）に転送する、請求項１記載の方法。
【請求項３】
エミュレーションデータを転送するステップが専ら、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号のみを転送することから成る、請求項１記載の方法。
【請求項４】
エミュレーションはターゲットプログラマブルユニットから一定量のデータを受け取った時点から実行される、請求項１から３のいずれか１項記載の方法。
【請求項５】
ＣＰＵクロック信号（８）をプログラマブルユニットのエミュレーションコントローラ（１８）および／またはターゲットプログラマブルユニット（１）のバッファメモリ（５１）に転送する、請求項１から４のいずれか１項記載の方法。
【請求項６】
エミュレーションデータをＣＰＵクロック信号（８）の立下りエッジもしくは立上りエッジとともに転送するか、または、ＣＰＵクロック信号（８）の立下りエッジと立上りエッジの両方とともに転送する、請求項１から５のいずれか１項記載の方法。
【請求項７】
エミュレーションデータの転送を駆動するクロック周波数をエミュレーションデータの転送中にＣＰＵクロック周波数を超えて上昇させる、請求項１から６のいずれか１項記載の方法。
【請求項８】
転送すべきエミュレーションデータをターゲットＣＰＵ（２）の数サイクルにわたって分散させる、請求項１から７のいずれか１項記載の方法。
【請求項９】
エミュレーションデータの転送中に、ターゲットプログラマブルユニットまたはエミュレーションデバイスにより、ＣＰＵウェイトサイクルの挿入を制御する、請求項１から８のいずれか１項記載の方法。
【請求項１０】
ターゲットプログラマブルユニット（１）を、ターゲットプログラマブルユニットの通信リンク（５）の一部として構成されたエミュレーションポート（１５）を標準出力ポートとして使用するための動作モードに切り換える、ただし、切り換えはエミュレーションポートの全体またはエミュレーションポートのピンのサブセットに対して適用される、請求項１から９のいずれか１項記載の方法。
【請求項１１】
ＪＴＡＧインタフェースと共同でエミュレーションポートのコンタクトピンを使用する、請求項１０記載の方法。
【請求項１２】
ＲＡＭが初めに完全に初期化されていなければ、プログラムメモリの部分的なまたは完全なコピーおよび／またはターゲットプログラマブルユニット（１）のＲＡＭの部分的なまたは完全なコピーをエミュレーションデバイス（４）に転送する、請求項１から１１のいずれか１項記載の方法。
【請求項１３】
受け取ったエミュレーションデータをエミュレーションデバイス（４）の記憶デバイス（６）に格納する、請求項１から１２のいずれか１項記載の方法。
【請求項１４】
求めたトレースデータをエミュレーションデバイス（４）による出力および／または保存の前にフィルタリングするステップを含む、請求項１から１３のいずれか１項記載の方法。
【請求項１５】
ターゲットプログラマブルユニット（１）のエミュレーションを以前に取得し格納したエミュレーションデータを用いてエミュレーションデバイスによりオフラインで行う、請求項１から１４のいずれか１項記載の方法。
【請求項１６】
転送されたエミュレーションデータにある特定の時点を割り当てるために、エミュレーションデバイス（４）において、カウンタデバイス（２０）を用いてＣＰＵクロック信号（８）をカウントする、請求項１から１５のいずれか１項記載の方法。
【請求項１７】
ターゲットプログラマブルユニットのランダムアクセスメモリをエミュレートせずに、ターゲットプログラマブルユニットのエミュレーションを行う、請求項１５または１６記載の方法。
【請求項１８】
ターゲットプログラマブルユニット（１）のプログラム実行は、同じコンテキストのレジスタバンク（３）の完全なコピーが最後に検出された時点に始まる各コンテキストレベルについて、エミュレーションデバイス（４）によりシミュレートされる、請求項１から１７のいずれか１項記載の方法。
【請求項１９】
ターゲットプログラマブルユニットのＣＰＵをコンピュータ上で実行されるコンピュータプログラムによりエミュレートする、請求項１４から１８のいずれか１項記載の方法。
【請求項２０】
ターゲットプログラマブルユニットのエミュレーションは、ターゲットプログラマブルユニットのＲＡＭの一部またはターゲットプログラマブルユニットのＲＡＭ全体をエミュレートすることを含む、請求項１５記載の方法。
【請求項２１】
ターゲットプログラマブルユニットにおいて、ＣＰＵにより現在読み込まれているデータまたはＤＭＡ動作中のデータが、ターゲットプログラマブルユニット（１）のＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのアドレスレンジから来ているものであるか否かを判定するステップと、続いて、ＣＰＵにより読み込まれたデータまたはＤＭＡ動作中のデータのうち、ターゲットプログラマブルユニット（１）のＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのアドレスレンジから来ているもののみをエミュレーションデバイス（４）に転送するステップを含む、請求項１から２０のいずれか１項記載の方法。
【請求項２２】
ターゲットプログラマブルユニットのＣＰＵ以外の機能単位により書込み可能なアドレスレンジは固定して永続的にプリプログラムされているか、または、自由にコンフィギュアされるか、もしくは、部分的に永続的にプログラムされ、部分的に自由にコンフィギュアされる、請求項２１記載の方法。
【請求項２３】
エミュレーションデバイス（４）においてリアルタイムでエミュレーションを行う、請求項１から１４のいずれか１項記載の方法。
【請求項２４】
リアルタイムエミュレーションを実行するために、ターゲットプログラマブルユニット（１）のＣＰＵ（２）の相応のインプリメンテーションをエミュレーションデバイス（４）のプログラマブルロジックモジュールにロードする、請求項２３記載の方法。
【請求項２５】
有効なブレークポイントが検出されたら、ターゲットプログラマブルユニット（１）またはターゲットプログラマブルユニットのＣＰＵ（２）をエミュレーションデバイス（４）またはターゲットプログラマブルユニット（１）により停止する、請求項１から２４のいずれか１項記載の方法。
【請求項２６】
１つまたは複数のブレークポイントを立て、エミュレーションデバイス（４）により管理する、請求項１から２５のいずれか１項記載の方法。
【請求項２７】
ブレークポイント信号（３９，５２）を、ターゲットプログラマブルユニットのエミュレーションコントローラ（１８）から、またはエミュレーションデバイス（１６）のエミュレーションコントローラから、ターゲットプログラマブルユニット（１）のＣＰＵ（２）に転送する、請求項１から２６のいずれか１項記載の方法。
【請求項２８】
エミュレーションデバイス（４）はターゲットプログラマブルユニットを停止した後にターゲットプログラマブルユニット（１）のアドレスバスとデータバス（１０，７）にアクセスする、請求項２３から２７のいずれか１項記載の方法。
【請求項２９】
リアルタイムエミュレーションにおいて、エミュレーションデバイスは自らのメモリに対して読み書きアクセスを有しており、読出しアクセスの場合には、ターゲットプログラマブルユニット（１）から転送されたデータを受け取る、請求項２３から２８のいずれか１項記載の方法。
【請求項３０】
ターゲットプログラマブルユニット（１）においてイベントが発生すると、同じイベントがエミュレーションデバイスにおいて同時にまたはオフセットを伴ってトリガされる、請求項２３から２９のいずれか１項記載の方法。
【請求項３１】
エミュレーションデバイス（４）のデータセレクタ（５０）は、エミュレーションデバイス（４）のメモリデバイスからのデータの読出しに、またはターゲットプログラマブルユニット（１）のデータ（４９）の読出しに切り換えられる、請求項１から３０のいずれか１項記載の方法。
【請求項３２】
ターゲットプログラマブルユニットのＲＡＭをエミュレートせずにターゲットプログラマブルユニットのリアルタイムエミュレーションを行う、請求項２３から３１のいずれか１項記載の方法。
【請求項３３】
専ら以下のエミュレーションデータのみが転送される、すなわち、プログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントのみが転送される、請求項３２記載の方法。
【請求項３４】
ターゲットプログラマブルユニットのリアルタイムエミュレーションが、ターゲットプログラマブルユニットのＲＡＭの一部または全体をリアルタイムでエミュレートすることを含む、請求項２３から３２のいずれか１項記載の方法。
【請求項３５】
リアルタイムエミュレーションの際に、ターゲットプログラマブルユニット（１）の少なくとも１つのＲＡＭの完全なまたは部分的なコピーもエミュレーションデバイス（４）において実行する、請求項２３から３４のいずれか１項記載の方法。
【請求項３６】
ターゲットプログラマブルユニットの機能単位のうち、ターゲットプログラマブルユニット（１）のＲＡＭに書込みを行う機能単位をエミュレートする、請求項３５記載の方法。
【請求項３７】
エミュレーションデータをターゲットプログラマブルユニットのエミュレーションコントローラのＦＩＦＯメモリに一時的に格納し、エミュレーションデバイスにおいてブレークポイントがオフセットをもってトリガされた場合には、エミュレーションデバイスは、ターゲットプログラマブルユニットのＣＰＵがエミュレーションデバイスによって停止された時点までにＦＩＦＯメモリに格納されたエミュレーションデータを用いて、ブレークポイント後もエミュレーションを続行する、請求項１から３６のいずれか１項記載の方法。
【請求項３８】
プログラマブルユニットをエミュレートするための装置において、該装置は、少なくとも１つのＣＰＵ（２）を有するターゲットプログラマブルユニット（１）と、エミュレーションデータの転送のために通信リンク（５）としてのエミュレーションポート（１５）を介してターゲットプログラマブルユニット（１）に外部ユニット（１４）として接続されたエミュレーションデバイス（４）とを有しており、また、ターゲットプログラマブルユニットのエミュレーションから各トレースデータを確認するように構成されており、エミュレーションデバイス（４）は少なくとも１つのエミュレーションコントローラ（１６）と、トレースデータの記憶デバイスおよび／または外部の処理・表示デバイスに接続された出力デバイスとを有しており、ターゲットプログラマブルユニットは、ターゲットプログラマブルユニットのＣＰＵクロック信号（８）と所定の関係を保ちながら、以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントと、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーと、オプションとして、１つまたは複数のデータタイプ信号を、通信リンク（５）を介してエミュレーションデバイス（４）に転送するように、また、ターゲットプログラマブルユニットからのＣＰＵ信号をエミュレーションデバイス（４）に転送するように構成されている、ことを特徴とするプログラマブルユニットをエミュレートするための装置。
【請求項３９】
ターゲットプログラマブルユニットは専ら以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号のみを、エミュレーションデバイスに転送するように構成されている、請求項３８記載の装置。
【請求項４０】
ターゲットプログラマブルユニットのエミュレーションコントローラ（１８）は、エミュレーションデータの一部としてデータタイプ信号（４２）をエミュレーションポート（１５）と、存在するならば、ターゲットプログラマブルユニット（１）のバッファメモリ（５１）とにも転送するように構成されている、請求項３８または３９記載の装置。
【請求項４１】
ターゲットプログラマブルユニット（１）とエミュレーションデバイス（４）との間に双方向通信を提供するように構成されている、請求項３８から４０のいずれか１項記載の装置。
【請求項４２】
エミュレーションデバイス（４）がデバッギングインタフェース（２５）を有している、請求項３８から４１のいずれか１項記載の装置。
【請求項４３】
エミュレーションデバイス（４）はターゲットプログラマブルユニット（１）のプログラムメモリと一致するプログラムメモリ（３３）を有している、請求項３８から４２のいずれか１項記載の装置。
【請求項４４】
デバッギングまたはエミュレーションのために、エミュレーションポート無しのターゲットプログラマブルユニット（１）の代わりに、エミュレーションポート（１５）付きのターゲットプログラマブルユニット（１）をターゲットシステムに挿入することができる、請求項３８から４３のいずれか１項記載の装置。
【請求項４５】
エミュレーションデバイス（４）は切換可能データセレクタ（５０）を有しており、該切換可能データセレクタは、エミュレーションデバイス（４）のＲＡＭ（４４）からデータを読み出すため、または、ターゲットプログラマブルユニット（１）から受け取ったデータを読み込むために接続することができる、請求項３８から４４のいずれか１項記載の装置。
【請求項４６】
ターゲットプログラマブルユニット（１）は自らのＣＰＵクロック信号（８）をエミュレーションポート（１５）を介してエミュレーションデバイス（４）に転送するように構成されている、請求項３８から４５のいずれか１項記載の装置。
【請求項４７】
エミュレーションデバイス（４）は、リアルタイムエミュレーションユニット（４１）として、ボンドアウトチップまたはプログラマブルロジックモジュール（２３）の形態のロジックモジュールを有している、請求項３８から４６のいずれか１項記載の装置。
【請求項４８】
エミュレーションデバイスは、リアルタイムエミュレーションユニット（４１）として、アドレスバス（３１）および／またはプログラムメモリ（３３）および／またはプログラムデータバス（３２）に接続されている、請求項３８から４４のいずれか１項記載の装置。
【請求項４９】
エミュレーションデバイス（４）はデマルチプレクサデバイス（４０）を有している、請求項３８から４８のいずれか１項記載の装置。
【請求項５０】
エミュレーションデバイス（４）の１つまたは複数のデジタル出力側（５５）および／またはターゲットプログラマブルユニット（１）からコピーされたエミュレーションデバイス（４）内の周辺ユニットを制御する制御レジスタ（５４）がエミュレーションデバイス（４）に実装されている、請求項３８から４８のいずれか１項記載の装置。
【請求項５１】
エミュレーションデバイス（４）のデジタル出力側（５５）は出力側として切換可能であり、デジタル出力側（５５）の信号は相応のコネクションを介してターゲットプログラマブルユニット（１）にフィードバックすることができる、請求項３８から５０のいずれか１項記載の装置。
【請求項５２】
ターゲットプログラマブルユニット（１）内のアドレスバスライン（２０）はアドレスコンパレータ（２２）を介してターゲットプログラマブルユニットのエミュレーションコントローラ（１８）に接続されている、請求項３８から５１のいずれか１項記載の装置。
【請求項５３】
エミュレーションデバイスは、リアルタイムエミュレーションユニット（４１）として、データバスを介してＲＡＭ（４４）に接続されている、請求項３８から５２のいずれか１項記載の装置。
【請求項５４】
ターゲットプログラマブルユニットのエミュレーションポートは出力側にＦＩＦＯメモリを有しており、エミュレーションコントローラ（１８）はＦＩＦＯメモリに格納されているエミュレーションデータをエミュレーションデバイスに転送するように構成されている、請求項３８から５３のいずれか１項記載の装置。
【請求項５５】
エミュレーションデバイスは、ターゲットプログラマブルユニットのエミュレーションコントローラとエミュレーションデバイスのランダムアクセスメモリとに接続された入力側と、エミュレーションデバイスのＣＰＵに接続された出力側を有するタイムマルチプレクサを有しており、該タイムマルチプレクサは、入力側で受信した信号を時間多重された出力信号の形態で供給するように構成されている、請求項３８から５４のいずれか１項記載の装置。
【請求項５６】
ターゲットプログラマブルユニット側とエミュレーションデバイス側とにそれぞれＪＴＡＧインタフェースを有する、請求項３８から５５のいずれか１項記載の装置。
【請求項５７】
少なくとも１つのＣＰＵ（２）と、エミュレーションデータを外部エミュレーションデバイス（１）に転送するための通信リンク（５）としてのエミュレーションポート（１５）を有するターゲットプログラマブルユニット（１）において、該ターゲットプログラマブルユニットは、ターゲットプログラマブルユニット（１）のＣＰＵクロック信号（８）と所定の関係を保ちながら、通信リンク（５）を介してエミュレーションデバイス（４）に出力される以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントと、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーと、オプションとして、１つまたは複数のデータタイプ信号をエミュレーションポートにおいて供給するように、また、エミュレーションデバイス（４）に転送される出力としてターゲットプログラマブルユニットからのＣＰＵクロック信号を供給するように構成されている、ことを特徴とするターゲットプログラマブルユニット（１）。
【請求項５８】
専ら以下のエミュレーションデータのみを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号のみを、エミュレーションデバイス（４）に転送するように構成されている、請求項５７記載のターゲットプログラマブルユニット。
【請求項５９】
エミュレーションデータをＣＰＵクロック信号（８）の立下りエッジもしくは立上りエッジとともに転送するか、または、ＣＰＵクロック信号（８）の立下りエッジと立上りエッジの両方とともに転送するように構成されている、請求項５７または５８記載のターゲットプログラマブルユニット（１）。
【請求項６０】
エミュレーションデータの転送を駆動するためにＣＰＵクロック周波数を超えて引き上げられた周波数でクロック信号を発生させるように構成されている、請求項５７から５９のいずれか１項記載のターゲットプログラマブルユニット（１）。
【請求項６１】
エミュレーションデータをターゲットＣＰＵ（２）の数サイクルにわたって転送されるように分散させるように構成されている、請求項５７から６０のいずれか１項記載のターゲットプログラマブルユニット（１）。
【請求項６２】
エミュレーションポート（１５）を標準Ｉ／Ｏポートとして使用するための動作モードに切り替わるように構成されている、請求項５７から６１のいずれか１項記載のターゲットプログラマブルユニット（１）。
【請求項６３】
デバッギングまたはエミュレーションのために、エミュレーションポート無しのターゲットプログラマブルユニット（１）の代わりに、エミュレーションポート（１５）付きでターゲットシステムに挿入することができる、請求項５７から６２のいずれか１項記載のターゲットプログラマブルユニット（１）。
【請求項６４】
ＲＡＭが初めに完全に初期化されていない場合には、プログラムメモリの部分的なまたは完全なコピーおよび／またはターゲットプログラマブルユニット（１）のＲＡＭの部分的なまたは完全なコピーをエミュレーションデバイス（４）に転送するように構成されている、請求項５７から６３のいずれか１項記載のターゲットプログラマブルユニット（１）。
【請求項６５】
現在読み込まれているデータが、ターゲットプログラマブルユニット（１）のＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのＲＡＭのアドレスレンジから来ているものであるか否かを判定し、ターゲットプログラマブルユニット（１）のＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのアドレスレンジから来ているエミュレーションデータのみをエミュレーションデバイス（４）に転送するように構成されている、請求項５７から６４のいずれか１項記載のターゲットプログラマブルユニット（１）。
【請求項６６】
エミュレーションポートを通るエミュレーションデータの流れを制御するように構成されたエミュレーションコントローラ（１８）を有している、請求項５７から６５のいずれか１項記載のターゲットプログラマブルユニット（１）。
【請求項６７】
エミュレーションコントローラ（１８）は、データタイプ信号（４２）をエミュレーションポート（１５）と、存在するならば、ターゲットプログラマブルユニット（１）のバッファメモリ（５１）とにも転送するように構成されている、請求項５７から６６のいずれか１項記載のターゲットプログラマブルユニット（１）。
【請求項６８】
ターゲットプログラマブルユニット（１）とエミュレーションデバイス（４）との間に双方向通信を提供するように構成されている、請求項５７から６７のいずれか１項記載のターゲットプログラマブルユニット。
【請求項６９】
自らのＣＰＵクロック信号（８）をエミュレーションポート（１５）を介してエミュレーションデバイス（４）に送信するように構成されている、請求項５７から６８のいずれか１項記載のターゲットプログラマブルユニット。
【請求項７０】
ターゲットプログラマブルユニット（１）内のアドレスバスライン（２０）はアドレスコンパレータ（２２）を介してエミュレーションコントローラ（１８）に接続されている、請求項５７から６９のいずれか１項記載のターゲットプログラマブルユニット。
【請求項７１】
エミュレーションコントローラは出力側にＦＩＦＯメモリを有しており、ブレークポイントの発生後、ＦＩＦＯメモリが空になるまで、ＦＩＦＯメモリに格納されているエミュレーションデータをエミュレーションデバイスに転送し続けるように構成されている、請求項５７から７０のいずれか１項記載のターゲットプログラマブルユニット。
【請求項７２】
エミュレーションコントローラに接続されたＪＴＡＧインタフェースを有しており、該ＪＴＡＧインタフェースは、エミュレーションコントローラからイネーブル信号を受信すると、ＪＴＡＧ標準に従ってＪＴＡＧ出力データを供給するように構成されている、請求項５７から７１のいずれか１項記載のターゲットプログラマブルユニット。
【請求項７３】
エミュレーションデータを受け取るために外部ターゲットプログラマブルユニット（１）と通信するエミュレーションポート（１５）、外部ターゲットプログラマブルユニットに格納されているプログラムコードと機能的に同一のプログラムコードを格納するためのプログラムメモリ、トレースデータの記憶デバイス（１１）、および／または外部の処理・表示デバイス（２８）に接続された出力デバイスを有するエミュレーションデバイスにおいて、エミュレーションポートは、ターゲットプログラマブルユニットからのＣＰＵクロック信号を受信し、また、ターゲットプログラマブルユニットのＣＰＵクロック信号と所定の関係を保ちながら、以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスから外部ターゲットプログラマブルユニットのＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号を受信するように構成されており、エミュレーションデバイスはさらに、転送されてきたエミュレーションデータとプログラムメモリに格納されているプログラムコードとを用いて外部ターゲットプログラマブルユニット（１）をエミュレートし、受信したエミュレーションデータに基づいてエミュレーションから各トレースデータを確認し、トレースデータを格納および／または出力するように構成されていることを特徴とする、エミュレーションデバイス。
【請求項７４】
専ら受信した以下のエミュレーションデータのみに基づいて、すなわち、ターゲットプログラマブルユニットのデータバスから外部ターゲットプログラマブルユニットのＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号のみに基づいて、エミュレーションからトレースデータを確認するように構成されている、請求項７３記載のエミュレーションデバイス。
【請求項７５】
デバッギングインタフェースを有する、請求項７３または７４記載のエミュレーションデバイス。
【請求項７６】
エミュレーションデバイス（４）は、エミュレーションデバイス（４）のＲＡＭ（４４）からデータを読み出すため、または、ターゲットプログラマブルユニット（１）から受け取ったデータを読み込むために接続することのできる切換可能データセレクタ（５０）を有している、請求項７３から７５のいずれか１項記載のエミュレーションデバイス。
【請求項７７】
エミュレーションデバイス（４）が、リアルタイムエミュレーションユニット（４１）として、ボンドアウトチップまたはプログラマブルロジックモジュール（２３）の形態のロジックモジュールを有している、請求項７３から７６のいずれか１項記載のエミュレーションデバイス。
【請求項７８】
エミュレーションデバイスが、リアルタイムエミュレーションユニット（４１）として、アドレスバス（３１）および／またはプログラムメモリ（３３）および／またはプログラムデータバス（３２）に接続されている、請求項７３から７７のいずれか１項記載のエミュレーションデバイス。
【請求項７９】
デマルチプレクサデバイス（４０）を有する、請求項７３から７８のいずれか１項記載のエミュレーションデバイス。
【請求項８０】
エミュレーションデバイス（４）の１つまたは複数のデジタル出力側（５５）および／または外部ターゲットプログラマブルユニット（１）からコピーされたエミュレーションデバイス（４）内の周辺ユニットを制御する制御レジスタ（５４）がエミュレーションデバイス（４）に実装されている、請求項７３から７９のいずれか１項記載のエミュレーションデバイス。
【請求項８１】
エミュレーションデバイス（４）のデジタル出力側（５５）は出力側として切換可能であり、デジタル出力側（５５）の信号は相応のコネクションを介してターゲットプログラマブルユニット（１）にフィードバックすることができる、請求項７３か８０のいずれか１項記載のエミュレーションデバイス。
【請求項８２】
リアルタイムエミュレーションユニット（４１）として、データバスを介してＲＡＭ（４４）に接続されている、請求項７３から８１のいずれか１項記載のエミュレーションデバイス。
【請求項８３】
ターゲットプログラマブルユニットのエミュレーションコントローラとエミュレーションデバイスのランダムアクセスメモリとに接続された入力側と、エミュレーションデバイスのＣＰＵに接続された出力側を有するタイムマルチプレクサを有しており、該タイムマルチプレクサは入力側で受信した信号を時間多重された出力信号の形態で供給するように構成されている、請求項７３から８２のいずれか１項記載のエミュレーションデバイス。
【請求項８４】
エミュレーションポートと共用されるＪＴＡＧインタフェースを有する、請求項７３から８３のいずれか１項記載のエミュレーションデバイス。
【請求項８５】
ターゲットプログラマブルユニット（１）を外部エミュレーションデバイス（４）によりエミュレートする方法において、ターゲットプログラマブルユニットは少なくとも１つのＣＰＵ（２）を有しており、外部エミュレーションデバイスは通信リンク（５）によりターゲットプログラマブルユニットに接続されており、該エミュレーション方法は以下の諸ステップ、すなわち、エミュレーションを初期化するために、予め決められた初期化データを通信リンクを介してエミュレーションデバイスに転送するステップと、なお、ターゲットプログラマブルユニットは初期化データによりすでに自ら初期化しているまたは初期化されており、ターゲットプログラマブルユニットの本来のＣＰＵクロック信号から導出される信号と、加えて、ＣＰＵクロック信号（８）と所定の関係を保ちながら、ターゲットプログラマブルユニットの所与のモデルとプログラムコードとに基づいては計算することのできないデータから成るエミュレーションデータを、通信リンクを介してエミュレーションデバイスに転送するステップと、転送されたエミュレーションデータを用いてターゲットプログラマブルユニットをエミュレートするステップと、エミュレーションから各トレースデータを確認するステップと、トレースデータを格納および／または出力するステップを有していることを特徴とする、ターゲットプログラマブルユニット（１）を外部エミュレーションデバイス（４）によりエミュレートする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラマブルユニットをエミュレートするための方法およびデバイスに関する。本発明はさらに、少なくとも１つのＣＰＵを有するターゲットプログラマブルユニットと、通信リンクとしてのエミュレーションポートを介して外部ユニットとしてターゲットプログラマブルユニットに接続されたエミュレーションデバイスとを含んだエミュレーションのための装置にも関する。さらに、本発明はプログラマブルユニットにも関する。
【０００２】
以下では、プログラマブルユニットを"ＰＵ"、"ターゲットプログラマブルユニット"、または"ターゲットＰＵ"とも呼ぶ。プログラマブルユニットはプロセッサ、マイクロコントローラ、信号プロセッサ、または他の類似のデバイスであってよい。プログラマブルユニットは少なくとも１つの中央処理ユニットを内蔵している。この中央処理ユニットは、命令デコーダ、命令フェッチ、レジスタメモリ、算術論理ユニット（ＡＬＵ）および／またはパイプラインを含むことができ、以下では"ＣＰＵ"または"ターゲットＣＰＵ"と呼ばれる。
【０００３】
通常、プログラマブルユニットＰＵはＣＰＵに直接割り当てられたレジスタメモリと呼ばれるメモリを含むことができる。このレジスタメモリは以下で"レジスタバンク"と呼ばれる複数のブロックに分割することができる。それゆえ、メインプログラム、サブプログラム、またはルーチンのような様々なプログラムパーツをそれぞれレジスタバンクに排他的に割り当てることができる。レジスタバンクに排他的に割り当てられたプログラムのすべてのパーツを以下では"コンテキスト"と呼ぶ。
【０００４】
レジスタメモリの部分的または完全なコピーを以下では"レジスタメモリコピー"と呼ぶ。
【０００５】
プログラマブルユニットは通常、データライン、アドレスラインまたは制御ラインのような様々なラインを有しており、これらのラインは通常はバス、転送アドレス、データ、制御信号、およびプログラマブルユニット内の他の関連するアイテムとして、また必要ならばインタフェースデバイスとしても実施される。
【０００６】
１つまたは複数のＣＰＵの他に、ＰＵは例えばＤＭＡコントローラ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）のようなメモリへの書込みアクセスを有する１つまたは複数のユニットを含むことができる。これらのユニットは以下では"ＤＭＡユニット"と呼ばれる。
【０００７】
１つまたは複数のＣＰＵの他に、ＰＵは例えばＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）のようなメモリ管理を制御する１つまたは複数のユニットも有することができる。これらのユニットは以下では"ＭＭＵユニット"と呼ばれる。
【０００８】
プログラマブルユニットはまた、タイマー、アナログ／デジタル変換器、およびＵＡＲＴ（Ｕｎｉｖｅｒｓａｌ  Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｒｅｃｅｉｖｅｒ  Ｔｒａｎｓｍｉｔｔｅｒ）のような１つまたは複数の周辺ユニットも含むことができる。これらの周辺ユニットは以下では"オンチップ周辺装置"と呼ばれる。
【０００９】
このプログラマブルユニットでは、データを処理するために、または命令を外部デバイスに転送するために、プログラムが実行される。プログラマブルユニットの通常動作時の内部状態とプロセスを観察するため、また必要ならば、変更するために、エミュレータが開発されている。
【００１０】
このようなプログラムをリアルタイム条件下で使用したときのランタイム動作に関する相応する情報は、品質保証とエラー解析の非常に重要な部分である。プログラマブルユニット内で処理または使用されるアドレス、データ、制御信号、状態、イベント、および同様のアイテムは、以下では"トレースデータ"と呼ばれる。
【００１１】
プログラマブルユニットにより実行されるプロセッサ命令のすべて、また、部分的には読み書き動作も、このようなトレースデータセットにキャプチャされ、必要ならば、時刻識別マーク、いわゆるタイムスタンプでラベル付けされる。トレースデータはコードカバレッジと関数およびプロシージャのタイムビヘイビアを解析する（性能解析）。
【００１２】
それぞれのトレースデータを取得するには、いわゆるエミュレータまたはエミュレータデバイスが使用される。
【００１３】
後でプログラマブルユニットの動作解析を可能にために、通常は、以下の情報が必要とされる。
読み込まれたデータ（ロード）
書き込まれたデータ（ストア）
実行された分岐（分岐）
割り込みに基づいたコンテキストの変化
このようなトレースデータを得るために、慣用技術から主に２つの方法が周知である。
【００１４】
１つの方法はボンドアウトチップを用いたいわゆるインサーキットエミュレータと呼ばれるものである。いわゆるボンドアウトチップはこのＩＣＥの中に組み込まれており、ボンドアウトチップは基本的にプログラマブルユニットとして動作するが、内部バスと幾つかの付加的なレジスタへの付加的なアクセスを提供する。ＩＣＥは要求されたトレースデータをこれらの内部バスから受け取る。
【００１５】
例えばＵＳ  ５，５１５，５３０では、２つの動作モードを有する集積回路の一部としてインサーキットエミュレータが提示されている。第１モードはリアルタイムイベント評価に使用されるものであり、第２モードは外部エミュレーションデバイスに通信すべきレジスタデータを取得するためのものである。
【００１６】
最終的にプログラマブルユニットが動作することになるターゲットシステムにおいては、通常、このターゲットＰＵはその支持固定具と、直接またはリボンケーブルを介して接続される相応のエミュレーションデバイスとから取り外されている。エミュレーションデバイスは通常はターゲットＣＰＵと同じタイプのプロセッサを具えた回路基板であり、その上、バッファメモリとインタフェースロジックはエミュレータ側にある。ただし、ターゲットＣＰＵは通常はボンドアウトバージョンのものである。
【００１７】
この方法を使用すれば、プロセッサのすべてのビヘイビアをリアルタイムで記録することができる。
【００１８】
しかしならが、必要とされるスペース要件が比較的高く、また、比較的高い周波数では、対応するエミュレーションデバイスを実行することができない、あるいは少なくとも大きなコストなしには実行することができない。また、ケーブリングも比較的複雑であるため、高い総コストを負わなければならない。実際のプログラマブルユニットはエミュレーションデバイスで置き換えられるので、ターゲットシステムで使用することはできないが、後で再び相応するプログラマブルユニットで置き換えられなければならない。
【００１９】
もう１つの手法は"オンチップトレースポート"と呼ばれるものであり、これはトレースデータを取得するもう１つの方法である。この方法はプログラマブルユニット上で直接トレースデータを取得するための最小限の機能の実現しか必要としない。この最小限の機能は、リアルタイムで内部バス信号の記録を可能にするメモリやその他のコンポーネント、例えばロジックユニットやそれに類したアイテムなど、によって拡張される。
【００２０】
このようにして得られたデータは、例えば、ＪＴＡＧインタフェース（ＪＴＡＧ  ＝  Ｊｏｉｎｔ  Ｔｅｓｔ  Ａｃｃｅｓｓ  Ｇｒｏｕｐ）またはＯＣＤＳモジュール（オンチップデバッグサポートモジュール）と専用トレースポートを使用することにより利用可能となる。
【００２１】
トレースポートはプログラマブルユニットに実装され、内部的にデータバスと制御バスとに接続される。トレースポートはボンドアウトチップに比べて遥かに少ないピンしか必要としない。しかし、実際には、リアルタイムトレース能力はトレースポートの帯域幅により制限されるので、プログラマブルユニットのすべてのビヘイビアを完全に記録することは非常に高いコストをかげずには不可能である。したがって、通常は限られたトレースデータしか利用できない。
【００２２】
ＥＰ  １  １３９  ２２０  Ａ２には、集積回路と外部エミュレーションコントローラが記載されている。ターゲットＣＰＵの内部クロックサイクルを表すデジタルビットは、内部クロックのクロックレートとは異なる出力クロックレートでエミュレーションコントローラに転送される。オンチップデバッグ環境が提供されている。このシステムの欠点は集積回路と外部エミュレーションコントローラとの間で必要とされる伝送帯域幅が大きいことである。
【００２３】
したがって、本発明の課題は、公知のトレース方法のそれぞれの利点を維持しつつ、プログラマブルユニットとエミュレーションデバイスとの間の伝送帯域幅を縮小し、低コストでトレースデータの取得が可能となるように、プログラマブルユニットのエミュレーションのための方法およびデバイスを改善することである。
【００２４】
本発明の第１の側面によれば、少なくとも１つのＣＰＵを有するターゲットプログラマブルユニットを、通信リンクを介してターゲットプログラマブルユニットに接続された外部エミュレーションデバイスを用いてエミュレートする方法が提供される。この方法は以下のステップを有している：
予め決められた初期化データを通信リンクを介してエミュレーションデバイスに転送するステップ。エミュレーションを初期化するため、ターゲットプログラマブルユニットはこの初期化データにより自ら初期化する、および／または初期化される；
通信リンクを介してエミュレーションデバイスにターゲットプログラマブルユニット（１）のＣＰＵクロック信号を転送し、また、このＣＰＵクロック信号と所定の関係を保ちながら、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントと、オプションとして、ＣＰＵを迂回するデータ転送をトリガするイベントと、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーと、オプションとして、１つまたは複数のデータタイプ信号を転送するステップ；
外部エミュレーションデバイスにおいて、転送されたエミュレーションデータを用いてターゲットプログラマブルユニットをエミュレートするステップ；
外部エミュレーションデバイスにおいて、エミュレーションから各トレースデータを確認するステップ；
トレースデータを格納および／または出力するステップ。
【００２５】
本発明の第１の側面による方法の背後にある基本的な考え方は、所望のトレースデータを直接ターゲットＣＰＵから取るのではなく、別個の外部エミュレーションデバイス（ＥＤ）によってこのターゲットＣＰＵを複製することにより求め、利用可能にするというものである。ターゲットプログラマブルユニットの大量生産されたチップが本発明の方法に従って外部エミュレータと同期する能力を具えていれば、本発明の方法はアプリケーションをデバッグする際に特別な利点を顕わにする。
【００２６】
本発明の方法によって得られる重要な効果は、エミュレーション中にエミュレーションデータをエミュレーションデバイスに転送するための帯域幅が、ＣＰＵから完全なトレースデータセットを出力するために要求される帯域幅よりも狭いということである。このことはまたターゲットプログラマブルユニットからのデータ出力を実現するための労力を大幅に減少させ、コストの低減をもたらす。
【００２７】
本発明によれば、少量のデータのみをターゲットＣＰＵからエミュレータに通信するだけでよい、つまり、すべての内部データとプログラムフローを再構成するのに必要なデータのみを通信するだけでよい。他のすべてのシステム応答はプログラムコードによって定められる。従来の方法はすべての読込みデータと書込みデータおよびすべてのジャンプをエミュレータに転送する。それとは対照的に、本発明は限られたデータの転送しか必要としない、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、割り込みの発生またはＣＰＵを停止させるイベントのようなプログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号の転送しか必要としない。
【００２８】
さらに、ＣＰＵクロック信号も、実際のＣＰＵクロック信号の形態で、またはより一般的に、ターゲットプログラマブルユニットの本来のＣＰＵクロック信号から導出された信号の形態で、エミュレーションデバイスに転送される。
【００２９】
要するに、ターゲットプログラマブルユニットの所与のモデルとプログラムコードとに基づいて計算することのできないデータだけが転送される。１つの実施形態では、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだすべてのデータと割り込みを転送するだけで十分である。というのも、予測不能にプログラムフローを変えることができるのはこのデータ／これらのイベントしかないからである。別の実施形態では、例えばＤＭＡ転送をトリガするイベントなどの付加的なイベントがターゲットプログラマブルユニットからエミュレーションデバイスに転送される。
このプログラムのターゲットＣＰＵでの実行は、プログラム開始時点におけるプログラムコードのような既知のデータにより、また、さらにはプログラム実行中に既知となるデータおよびイベントにより決定される。
【００３０】
プログラムカウンタに影響を及ぼすイベント、例えば、割り込みの発生やＣＰＵを停止させるイベント、ＣＰＵを迂回するデータ転送（ＤＭＡ転送）をトリガするイベントのようなイベントも、以下ではイベントデータという用語に包摂される。
【００３１】
特定の実施形態では、オプションとして転送されるデータがオプションと見なされていないデータと併せて転送される。このような実施形態については後で説明する。
【００３２】
本明細書では、本発明による転送データの上記リストで触れられているすべての必須データおよびオプショナルデータもエミュレーションデータという用語で包摂される。
【００３３】
このようにして、エミュレーションはＣＰＵのビヘイビアを複製する。そうするために、エミュレーションは例えばターゲットＣＰＵの既知の状態で初期化される。この状態はリセットであってもよい。このことは、ＥＤがＣＰＵからデータを受け取ることにより、エミュレーションがＣＰＵの状態に完全にまたは部分的に一致する状態に置かれることを意味する。このデータを以下では初期化データと呼ぶ。
【００３４】
初期状態と以前に伝達されたプログラムコードとに基づいて、エミュレーションデータとＣＰＵクロックがプログラムのランタイム中にエミュレーションデバイスに伝送される。それゆえ、外部エミュレーションはＣＰＵのプログラム実行をエミュレートすることができる。このエミュレーションの間、エミュレーションデバイスにより、完全なまたは部分的なトレースデータセットへのアクセスが可能になる。
【００３５】
下の表は、ターゲットＰＵとエミュレーションデバイスとの間で転送されるデータの縮減を、すなわち、従来技術による解決手段に比べて、本発明の方法におけるエミュレーションにはどのデータがあれば十分なのかを視覚化したものである。
【００３６】
【表１】
2008544340.tif 000003
表１：ターゲットＣＰＵからの必須出力の比較
上の表における各命令タイプの頻度に関する情報は、Ｄａｖｉｄ  Ｐａｔｔｅｒｓｏｎ，  Ｊｏｈｎ  Ｈｅｎｎｅｓｓｙによる書籍"Ｃｏｍｐｕｔｅｒ  Ｏｒｇａｎｉｚａｔｉｏｎ  ａｎｄ  Ｄｅｓｉｇｎ"、第３版、Ｅｌｓｅｖｉｅｒ、２００５年により提供される情報に基づいている。
【００３７】
エミュレーションデバイスと通信するためのプログラマブルユニットのインタフェースを以下ではエミュレーションポートと呼ぶ。同じ意味を持つもう１つの用語が"トレースポート"である。
【００３８】
以下では、本発明の方法の有利な実施形態が説明される。明示的に別様に述べられていない限り、実施形態は互いに組み合わせることができる。
【００３９】
１つの有利な実施形態では、ＣＰＵクロック信号はターゲットプログラマブルユニットからエミュレーションポートを通ってエミュレーションデバイスに伝送される。このようにして、エミュレーションデバイスはすべての入来エミュレーションデータに例えばタイムスタンプの形で時間情報を割り当てることができる。ＣＰＵクロック信号をエミュレーションを介して転送することで、クロック発振器において異なるＣＰＵクロック周波数を切換制御する際の変動によってＣＰＵクロックに生じうる変化を見越して、同期のためのデータをクロック同期して転送することが可能になる。
【００４０】
１つの有利な実施形態では、ターゲットプログラマブルユニットと外部エミュレーションデバイスとの間でのデータ転送は最小限に限定される。この場合、エミュレーションデータを転送するステップは専ら、
ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、
オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および
オプションとして、１つまたは複数のデータタイプ信号のみを転送することから成る。
【００４１】
このことは、ある実施形態においては、エミュレーションデータの転送がプログラマブルユニットのデータバスからＣＰＵが読み込んだデータとプログラムカウンタに影響を及ぼす外部イベントに限定されることを意味している。別の実施形態では、それに加えて、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーが転送され、さらに別の実施形態では、１つまたは複数のデータタイプ信号が、レジスタメモリの各コピーにさらに加えて転送されるか、または、単に最初に述べた読込みデータと外部イベントに加えて転送される。このように、オプションと見なされたエミュレーションデータは後で説明される特定の実施形態において転送される。
【００４２】
さらに別の実施形態では、ターゲットプログラマブルユニットから一定量のデータを受け取った時点からエミュレーションが実行される。上記一定量のデータはターゲットＣＰＵの既知の状態でエミュレーションを初期化するのに役立つ。前提条件として、エミュレーションは同一のプログラムコードを、有利にはターゲットプログラマブルユニットから受け取った一定量のデータの一部を成すプログラムコードを使用しなければならない。しかし、このプログラムコードとターゲットＣＰＵの既知の状態を規定する別のデータは異なる時点に提供されるものであってよい。以下のエミュレーションプロシージャにおいて、エミュレーションはエミュレーションデータとＣＰＵクロックを受け取ると、エミュレーションのための入力データがターゲットＣＰＵに対する入力データと同一であるかを確認することができ、エミュレーションの状態は正確にターゲットＣＰＵの状態に一致する。このようにして、エミュレーションは直接ターゲットＣＰＵから記録されるうるものと同一のトレース情報を提供する。
【００４３】
データ転送中に必要となるエミュレーションポートへのコネクション数を少なくするために、上記のすべての信号を時間／空間合成し、場合によっては、さらに他のプロシージャによって圧縮してもよい。この例および以下のより具体的な例もそれぞれエミュレーションデバイスにより開始されるようにしてよい。１つの例では、ＣＰＵクロック信号はプログラマブルユニットのエミュレーションコントローラおよび／またはターゲットプログラマブルユニットのバッファメモリに転送される。これにより、ＣＰＵクロック信号に対して所定の関係を保ちながら、エミュレーションデータをエミュレーションに転送することが可能になる。本明細書では、"エミュレーションコントローラ"という語は"トレースコントローラ"という語と同じ意味で用いられる。
【００４４】
特に、択一的実施形態においては、エミュレーションデータはＣＰＵクロック信号の立下りエッジもしくは立上りエッジとともに転送されるか、または、ＣＰＵクロック信号の立下りエッジと立上りエッジの両方とともに転送される。後者の実施形態では、エミュレーションデータは２倍のデータレートで転送されるため、スピードがさらに増す。別の例では、エミュレーションデータの転送中に、エミュレーションデータの転送を駆動するクロック信号の周波数がＣＰＵクロック周波数を超えて引き上げられる。この実施形態はエミュレーションデータの転送を加速する別の方法を構成している。エミュレーションデータの転送を駆動するクロック信号の周波数はＣＰＵクロック信号周波数の倍数としてよい。有利には、エミュレーションデータの転送はＣＰＵクロック信号と同期して行われる。ＣＰＵクロック信号は別個のデータラインを介して転送することもできる。これについては、後でＬＶＤＳ  Ｓｅｒｄｅｓインタフェースを用いた実施形態に関連して詳細に説明される。
【００４５】
別の実施形態では、転送すべきエミュレーションデータをターゲットＣＰＵの数サイクルにわたって分散させる。
【００４６】
ターゲットプログラマブルユニットは、１つの実施形態では、ターゲットプログラマブルユニットの通信リンクの一部として構成されたエミュレーションポートを標準Ｉ／Ｏポートとして、特に出力ポートとして使用するための動作モードに切り換えられる。この実施形態では、本発明によるエミュレーションデータとＣＰＵクロックの転送には比較的小さな帯域幅しか必要とされないという利点が、ターゲットプログラマブルユニットの標準出力タスクのために残されたエミュレーションポートの転送能力を補助的に使用する際にも利用されている。別のコンテキストにおいてプログラマブルユニットを介してエミュレーションポートを利用することができるようにするために、プログラマブルユニットはエミュレーションポートを汎用出力ポートとしても使用することのできる動作モードに切り替わることができる。これは、専用モードピンをセットしたり、プログラマブルユニット内の制御レジスタにおいてビットをセットすることにより可能である。
【００４７】
有利には、ターゲットＣＰＵのエミュレーションポートとエミュレーションデバイスのエミュレーションポートが双方向動作モードで動作することにより、エミュレーションデータとＣＰＵクロックの転送だけでなく、エミュレーションデバイスによるターゲットＣＰＵの制御も可能になる。この機能は従来技術による幾つかのデバイスにおいてはＪＴＡＧインタフェースにより提供されている。しかし、この実施形態では、エミュレーションポートとＪＴＡＧインタフェースが同じピンを共用することができるため、チップ上の面積消費が低減される。さらに、この実施形態によれば、ターゲットプログラマブルユニットだけでなく、エミュレーションデバイスも、エミュレーションデータとＣＰＵクロックの転送中にＣＰＵウェイトサイクルの挿入を行うことができる。同様に、プログラマブルユニットのチェックはエミュレーションデバイスによっても可能である。この場合、デバッガはエミュレーションデバイスを介してＣＰＵのアドレスエリアにアクセスすることができ、場合によっては読み書き動作を行うことができる。これらの動作には、ＲＡＭおよびＩ／Ｏレンジへの読み書き、ブレークポイントの設定、または他の類似の動作が含まれる。ブレークポイントの設定は、予め決められた条件が満たされると、例えば実行中のプログラムのある部分に達するとすぐに、プログラムを中止させるようにＣＰＵに命令する１つの方法である。
【００４８】
エミュレーションデータとＣＰＵクロックはただ１つの共通信号路を介してエミュレーションデバイスに転送することもできる。プログラマブルユニットとエミュレーションデバイスの間で、例えばシリアライズ／デシリアライズを行う低電圧差動ポイントツーポイント接続（ＬＶＤＳ  Ｓｅｒｄｅｓ）のようなシリアルポイントツーポイント接続を介して、それぞれの通信を行うようにしてもよい。ＬＶＤＳ  Ｓｅｒｄｅｓ接続では、一定のクロック周波数がインタフェースに供給されることが必要であることに注意されたい。前に述べたＣＰＵクロックの突然の変化の可能性を考慮して、本発明の１つの実施形態では、ＣＰＵクロック周波数よりも高い周波数の外部クロック信号がＬＶＤＳ  Ｓｅｒｄｅｓインタフェースに供給される。有利には、この実施形態では、ＣＰＵクロックは通常のデータラインを介して転送され、受信端で使用される。
【００４９】
別の実施形態では、本願発明の方法は求めたトレースデータをエミュレーションデバイスによる出力および／または保存の前にフィルタリングするステップを含む。フィルタリングは個々のエミュレーションプロセスの必要に応じて予め決められた基準に従って行われるようにしてよい。
【００５０】
以下では、実施形態の４つの主要グループが示される。第１の主要グループはターゲットプログラマブルユニットのＲＡＭをエミュレートしないオフラインエミュレーションに関している。第２の主要グループはターゲットプログラマブルユニットのＲＡＭのエミュレーションを含んだオフラインエミュレーションに関している。第３の主要グループはターゲットプログラマブルユニットのＲＡＭをエミュレートしないリアルタイムエミュレーションに関している。そして最後に、第４の主要グループはターゲットプログラマブルユニットのＲＡＭのエミュレーションを含んだリアルタイムエミュレーションに関している。
【００５１】
実施形態の第１の主要グループでは、ターゲットプログラマブルユニットのエミュレーションは以前に取得し格納しておいたエミュレーションデータを用いてエミュレーションデバイスによりオフラインで行われる。この実施形態では、有利には、ターゲットプログラマブルユニットから受信したＣＰＵクロック信号は、エミュレーションデバイスにおいて、転送されたエミュレーションデータにある特定の時点（タイムスタンプ）を割り当てるカウンタデバイスを用いてカウントされる。この実施形態では、レジスタメモリのコピー（"スナップショット"）がエミュレーションデータの一部として転送され、上で述べた他のエミュレーションデータとＣＰＵクロックとともに、エミュレーションデバイスにおいてターゲットＣＰＵの命令の完全な模倣を可能にする。
【００５２】
ターゲットプログラマブルユニットのオフラインエミュレーションは、ターゲットプログラマブルユニットのランダムアクセスメモリ（ＲＡＭ）のエミュレーション有りでも、または無しでも行うことができる。
【００５３】
ターゲットプログラマブルユニットのＲＡＭをエミュレートせずにオフラインエミュレーションを行う場合には、ターゲットプログラマブルユニットのプログラム実行は、有利には、同じコンテキストのレジスタバンクの完全なコピーが最後に検出された時点に始まるコンテキストレベルの各々に関して、エミュレーションデバイスによりシミュレートされる。したがって、エミュレーションデバイスがターゲットＣＰＵの完全なプログラムフローを検出することができなくてもよい。各コンテキストレベルについて、異なる複数のコンテキストレベルを実行してもよい。こうして、エミュレーションはレジスタメモリコピーで初期化され、レジスタメモリコピーが存在するコンテキストに関して、レジスタメモリコピーが作成された時点から開始することができる。
【００５４】
プログラムの開始よりも後の時点にエミュレーションを始めるためには、プログラマブルユニットはこのような後の時点におけるＣＰＵのステータスをエミュレーションデバイスに知らせなければならない。この目的で、レジスタメモリの、または個々のレジスタバンクの、現在の内容をプログラマブルユニットに格納してもよい。以下では、このレジスタメモリまたは個々のレジスタバンクの現在の内容をレジスタメモリコピーと呼ぶ。その後、このレジスタメモリコピーをエミュレーションデータの一部としてエミュレーションデバイスに転送してもよい。レジスタメモリコピーが完全に出力されると、レジスタメモリの、または個々のレジスタバンクの、有利には現在のレジスタバンクの、新しいコピーが読み込まれ、再び出力される、以下同様。
【００５５】
本発明に従ってプログラム開始後にキャプチャされたレジスタメモリコピーを用いれば、ＣＰＵプログラム実行の部分部分をスキップするシミュレーションが可能となり、それにより、各コンテキストレベルについて、関連するコンテキストに割り当てられたレジスタバンクの完全なコピーが最後にキャプチャされた時点にシミュレーションを開始させることが可能になる。
【００５６】
オフラインエミュレーションに対してはタイミング要件は緩いので、ターゲットプログラマブルユニットのＣＰＵは、１つの実施形態では、コンピュータ上で実行されるコンピュータプログラムによってエミュレートされる。このことがハードウェア要件を緩和し、エミュレーションのコストを低減する。
【００５７】
実施形態の第２の主要グループは、ターゲットプログラマブルユニットのオフラインエミュレーション中にターゲットプログラマブルユニットのＲＡＭの一部をエミュレートすることを含んでいる。
【００５８】
この実施形態の利点は、エミュレーションデータの転送がさらに減少し、今や、ターゲットＣＰＵにより非排他的に使用されるメモリエリアから読み込まれたデータに限定されることである。このようなメモリエリアの例として、Ｉ／ＯエリアまたはデュアルポートＲＡＭがある。
【００５９】
この実施形態は有利には下記のステップから成る。
ターゲットプログラマブルユニットにおいて、ＣＰＵにより現在読み込まれているデータまたはＤＭＡ動作中のデータが、ターゲットプログラマブルユニットのＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのアドレスから来ているものであるか否かを判定するステップ、次に、
ＣＰＵにより読み込まれたデータまたはＤＭＡ動作中のデータのうち、ターゲットプログラマブルユニットのＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのアドレスレンジから来ているもののみをエミュレーションデバイスに転送するステップ。
【００６０】
この実施形態の代替的な実施形態では、ターゲットプログラマブルユニットのＣＰＵ以外の機能単位により書込み可能なアドレスレンジは固定して永続的にプリプログラムされているか、または、自由にコンフィギュアされるか、もしくは、部分的に永続的にプログラムされ、部分的に自由にコンフィギュアされる。第１のケースはＩ／Ｏエリアにとって有効であり、第２のケースは外部デュアルポートＲＡＭに適している。
【００６１】
ＲＡＭエミュレーションを含めるためには、ＲＡＭへの書込みアクセスを有するすべての機能単位をＣＰＵエミュレーションに含める必要がある。特に、ＣＰＵとＤＭＡコントローラがＲＡＭへの書込みアクセスを有する。
【００６２】
以下では、実施形態の第３および第４の主要グループに共通する実施形態について説明する。
【００６３】
ターゲットプログラマブルユニットのリアルタイムエミュレーションをエミュレーションデバイスで行う際、エミュレーションは有利にはエミュレーションデバイスのプログラマブルロジックモジュールにおいて、例えばフィールドプログラマブルゲートアレイにおいて、またはボンドアウトチップを用いて実施される。両方ともターゲットＣＰＵの機能をエミュレートし、トレースデータを出力側に供給するように構成することができる。
【００６４】
リアルタイムエミュレーションの特別の利点は、エミュレーションデバイスが通常ならばボンドアウトチップ上に実装されるオンチップ周辺装置をまったく含んでいなくてもよいことである。現在では、プログラマブルユニットの所与のＣＰＵコアに関して、様々なオンチップ周辺装置をエミュレートおよびデバッグするために多数のボンドアウトチップが必要とされる。現在のマイクロプロセッサシリーズはおよそ２０もの異なるボンドアウトチップを必要とする。
【００６５】
今の実施形態で使用するには、ボンドアウトチップはすべてのマイクロコントローラファミリーに対してそれぞれ異なる周辺装置を有するように製造されなくてもよいので、各マイクロコントローラファミリーのすべてのメンバをサポートするプログラマブルロジックモジュールにおけるインプリメンテーションごとにそれぞれ１つのボンドアウトチップを有するだけで十分である。このように、ログラマブルユニットのリアルタイムエミュレーションのインプリメンテーションをプログラマブルロジックモジュールにロードすることにより、単一のエミュレーションデバイスを用いてターゲットプログラマブルユニットの異なる複数のインプリメンテーションをエミュレートすることができる。
【００６６】
リアルタイムエミュレーションを実行するために、ターゲットＣＰＵはエミュレーションデータとＣＰＵクロックをエミュレーションデバイスに送る。エミュレーションデバイスはトレースデータを確認する。その後、このトレースデータは上で述べたように格納される、または、格納する前にフィルタリングするようにしてもよい。
【００６７】
１つの実施形態では、ターゲットプログラマブルユニットまたはターゲットプログラマブルユニットのＣＰＵは、有効なブレークポイントを検出すると、エミュレーションデバイスまたはターゲットプログラマブルユニットにより停止される。これにより、複雑なブレークポイントをサポートする機構をエミュレーションデバイス内に実現することが可能になる。エミュレーションデバイスでは関連情報の利用が可能となり、プログラマブルユニットを停止させ、またプログラマブルユニットのアドレスおよびデータバスにアクセスする付加的な能力も得られる。
【００６８】
有利には、１つまたは複数のブレークポイントが立てられ、エミュレーションデバイスにより管理される。  １つの実施形態では、すべてのブレークポイントが立てられ、エミュレーションデバイスにより管理される。有効なブレークポイントがエミュレーションデバイスにより検出されると、ターゲットＣＰＵは停止される。プログラマブルユニットのアドレスおよびデータバスへのアクセスは適切なインタフェースを通して、例えばエミュレーションポートを用いて行うことができる。ＣＰＵ周波数が非常に高い場合には、付加的な措置が必要になることもある。これについては後で論じる。
【００６９】
有利には、ブレークポイント信号は、ターゲットプログラマブルユニットのエミュレーションコントローラ（トレースコントローラ）から、またはエミュレーションデバイスのエミュレーションコントローラから、ターゲットプログラマブルユニットのＣＰＵに転送される。
【００７０】
リアルタイムエミュレーションを提供する別の実施形態では、エミュレーションデバイスは自らのメモリに対して読み書きアクセスを有しており、読出しアクセスの場合には、ターゲットプログラマブルユニットからデータ転送を受け取る。
【００７１】
ターゲットプログラマブルユニットで割り込みが発生した場合、エミュレーションデバイスでは同じ割り込みが同時にまたはＣＰＵクロックオフセットを伴ってトリガされる。
【００７２】
別の実施形態によれば、エミュレーションデバイスのデータセレクタは、エミュレーションデバイスのメモリデバイスからのデータの読出しに、またはターゲットプログラマブルユニットから受け取ったデータの読出しに切り換えられる。
ターゲットプログラマブルユニットのリアルタイムエミュレーションがターゲットプログラマブルユニットのＲＡＭをエミュレートせずに実行される場合（実施形態の第３の主要グループ）には、以下のエミュレーションデータが転送される。
すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントが転送される。
【００７３】
ＲＡＭをエミュレートしないオフラインエミュレーション（実施形態の第１の主要グループ）の場合とは対照的に、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーを転送する必要はない。
【００７４】
ターゲットプログラマブルユニットのリアルタイムエミュレーションがターゲットプログラマブルユニットのＲＡＭの一部分または全体をリアルタイムでエミュレートすることを含んでいる場合（実施形態の第４の主要グループ）には、ターゲットプログラマブルユニットの少なくとも１つのＲＡＭの完全なまたは部分的なコピーもまたエミュレーションデバイスで実行される。この実施形態は、有利には、ターゲットプログラマブルユニットの機能単位のうち、ターゲットプログラマブルユニットのＲＡＭに書込みを行う機能単位をエミュレートすることを含む。
【００７５】
プログラマブルユニットが非常に高いＣＰＵクロック周波数でまたは広いＣＰＵ読出し帯域幅で動作する場合には、エミュレーションデータを一時的にＦＩＦＯメモリに格納すると有利である。
【００７６】
エミュレーションデバイスにおいてターゲットプログラマブルユニットのＣＰＵに対してオフセットをもってブレークポイントがトリガされた場合、エミュレーションデバイスは、ターゲットプログラマブルユニットのＣＰＵがエミュレーションデバイスによって停止された時点までにＦＩＦＯメモリに格納されたエミュレーションデータを用いて、ブレークポイント後もエミュレーションを続行する。この実施形態によれば、エミュレーションデバイスは、ブレークポイントの場合でさえ、非常に高いＣＰＵクロック周波数（およそ５００ＭＨｚおよびそれ以上の周波数範囲）で動作するターゲットプログラマブルユニットと同期を保つ。
【００７７】
本発明の第２の側面によれば、プログラマブルユニットのエミュレーションのための装置が提供される。この装置は少なくとも１つのＣＰＵを有するターゲットプログラマブルユニットとエミュレーションデバイスとを含んでおり、このエミュレーションデバイスは、エミュレーションデータの転送のために、外部ユニットとして、通信リンクとしてのエミュレーションポートを介してターゲットプログラマブルユニットに接続されており、ターゲットプログラマブルユニットのエミュレーションから各トレースデータを確認するように構成されている。エミュレーションデバイスは、少なくとも１つのエミュレーションコントローラと、トレースデータの記憶デバイスおよび／または外部の処理・表示デバイスに接続された出力デバイスを有している。ターゲットプログラマブルユニットは、ターゲットプログラマブルユニットのＣＰＵクロック信号と所定の関係を保ちながら、以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントと、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーと、オプションとして、１つまたは複数のデータタイプ信号を通信リンクを介してエミュレーションデバイス（４）に転送するように、また、ターゲットプログラマブルユニットからのＣＰＵクロック信号をエミュレーションデバイスに転送するように構成されている。
【００７８】
本発明の第２の側面によるこの装置の利点は、本発明の第１の側面による方法に関して既に説明した利点と一致する。説明と利点については、本発明の方法の文脈において既にほとんど論じられているので、以下の記述は短く止め、種々の実施形態の特徴に焦点を当てる。前と同じように、明示的に別様に述べられていない限り、実施形態の組合せは可能である。
【００７９】
１つの実施形態では、ターゲットプログラマブルユニットは専ら以下のエミュレーションデータのみを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号のみをエミュレーションデバイスに転送するように構成されている。
【００８０】
１つの実施形態では、ターゲットプログラマブルユニットのエミュレーションコントローラは、エミュレーションデータの一部としてデータタイプ信号をエミュレーションポートと、存在するならば、ターゲットプログラマブルユニットの一時記憶用のバッファメモリとにも転送するように構成されている。
【００８１】
別の実施形態では、ターゲットプログラマブルユニットとエミュレーションデバイスは、ターゲットプログラマブルユニットとエミュレーションデバイスとの間に双方向通信を提供するように構成されている。有利には、エミュレーションデバイスはＪＴＡＧインタフェースのようなデバッギングインタフェースを有する。このデバッギングインタフェースはＪＴＡＧインタフェースとしてよく、有利な実施形態においては、ＪＴＡＧインタフェースとエミュレーションポートが同じコンタクトピンを共用するように、エミュレーションポートに組み込まれる。
【００８２】
装置は、有利には、選択スイッチによってエミュレーションポート上でのエミュレーションデータの転送を提供する。ここで、選択スイッチは例えばマルチプレクサとして実施することができる。さらに、この選択スイッチ回路に、例えばＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）メモリとして実現することのできるバッファメモリを接続してもよい。また、エミュレーションデータを少なくとも部分的に直接エミュレーションデバイスに転送することも可能である。
【００８３】
選択スイッチ回路の制御、少なくともＣＰＵクロック信号および／またはデータバスから読み込んだデータの前処理、割り込みの発生のようなプログラムカウンタに影響を及ぼすイベントおよび／またはＣＰＵを停止させるイベントおよび／またはＣＰＵを迂回するデータ転送（ＤＭＡ転送）をトリガするイベント、および／またはレジスタバンクコピー、および／またはデータタイプの指標は、ターゲットプログラマブルユニット側でエミュレーションコントローラによって処理される。
【００８４】
別の実施形態では、エミュレーションデバイスはターゲットプログラマブルユニットのプログラムメモリと一致するプログラムメモリを有している。このことは、エミュレーションデバイスのプログラムメモリはターゲットプログラマブルユニットのプログラムメモリと機能的に同等であることを意味している。１つの実施形態では、エミュレーションデバイスのプログラムメモリはターゲットプログラマブルユニットのプログラムメモリとまったく等しい複製である。
【００８５】
別の実施形態では、ターゲットプログラマブルユニットは自らのＣＰＵクロック信号をエミュレーションポートを介してエミュレーションデバイス（４）に送信するように構成されている。
【００８６】
エミュレーションデバイスは、リアルタイムエミュレーションユニットとして、有利には、ボンドアウトチップまたはプログラマブルロジックモジュールの形態のロジックモジュールを有する。相応するエミュレーションデバイスは、通信リンクとしてのエミュレーションポートを介してプログラマブルユニットに接続された外部ユニットとして実施される。エミュレーションデバイスは独自のエミュレーションコントローラを少なくとも１つ有している。
【００８７】
第１の実施例は、以前にプログラマブルユニットから取得して格納しておいたエミュレーションデータを用いて、ＣＰＵのエミュレーションをオフラインで行う能力を示したものである。この場合、ＣＰＵビヘイビアのシミュレーションは、有利には、例えば、エミュレーションデバイスの一部として、パーソナルコンピュータのような処理・表示デバイス上で実行されるソフトウェアプログラムを用いて行うことができる。相応するトレースデータはこのエミュレーションによって確認され、例えば、外部ユニットへ格納および／または出力される。エミュレーションポートを介してエミュレーションデバイスに転送されるエミュレーションデータに対してある特定の時間割当てを決めるために、ＥＤにおいて適切なカウンタデバイスでＣＰＵクロック信号をカウントしてもよい。この種の時点の割当てはタイムスタンプと呼ばれる。
【００８８】
プログラマブルユニットから送られてきたエミュレーションデータをエミュレーションデバイス内のメモリに、例えばＲＡＭ、ハードディスク、または同様の装置に格納することも可能である。このデータはタイムスタンプ付きでもタイムスタンプなしでもよい。
【００８９】
別の実施形態では、エミュレーションデバイスのデジタル出力側が切換え可能な出力側である。デジタル出力側の信号は相応の接続を介してターゲットプログラマブルユニットにフィードバックされる。具体的には、関連する制御レジスタをエミュレーションを介して制御し、エミュレーションデバイスに出力ピンへのアクセスを与えることによって、エミュレーションポートの１つまたは複数のピンを出力ピンとして使用することができる。必要ならば、これらのピンの出力信号をリボンケーブル等を介して近くのプログラマブルユニット転送し返ししてもよい。エミュレーションがアクティブでない場合には、エミュレーションポートをジャンパや同様の装置によって出力信号の回路網に直接接続してもよい。
【００９０】
本発明の別の実施例では、リアルタイムＣＰＵエミュレーションを実行するだけでなく、特にプログラマブルユニットの内部および外部の読み書きメモリ（ここではＲＡＭとも呼ばれる）に関してリアルタイムエミュレーションを実行することも可能である。ターゲットプログラマブルユニット内のアドレスバスラインは、有利には、アドレスコンパレータを介してターゲットプログラマブルユニットのエミュレーションコントローラに接続されている。このアドレスコンパレータは、読み込んだデータがリアルタイムエミュレーションに含まれている機能単位以外の機能単位による書込みモードにおいてもアクセスされるアドレスエリアから来たものであるか否かを、ＰＵエミュレーションコントローラに知らせる。この場合、アドレスコンパレータにおいて評価されるアドレスレンジは、例えばＰＵ内に固定配線された、または自由にコンフィギュア可能なＩ／Ｏレンジ、例えばデュアルポートＲＡＭのような外部メモリに対して、永続的にプログラミングされていてもよい。さらに、エミュレーションデータは、Ｉ／Ｏエリア、デュアルポートＲＡＭなどのような、ＣＰＵによって（したがってまた恐らくは他のエンティティによっても）非排他的に変更されるストレージエリアから読み込んだデータのみを含んでいる。さらには、このコンテキストでは、それぞれのエミュレーションデバイスがＣＰＵの他にプログラマブルユニットの別の機能単位を、すなわち、各メモリに書込みモードでアクセスすることのできる機能単位を含んでいると有利である。これらの機能単位は、他のＣＰＵ、および／または、１つもしくは複数のＤＭＡユニット、および／または、１つもしくは複数のメモリ管理ユニット（ＭＭＵ）、または類似の装置である。
【００９１】
特にリアルタイムエミュレーションにとっては、デバッグインタフェースを有するエミュレーションデバイスも有利である。
【００９２】
さらに、プログラマブルユニットで実行されるアプリケーションプログラムがエミュレーションポートにより占有されたピンを使用するようにする可能性も残っている。エミュレーションデバイスにおいて、デバッギングプロセス中にエミュレーションポートにより占有される１つまたは複数のピンを制御する制御レジスタのアドレスに、エミュレーションデバイスの１つまたは複数のデジタル出力側を制御する適切な制御レジスタを実現してもよい。リアルタイムエミュレーションがこの制御レジスタに書込みモードでアクセスした場合、これらのピンのビヘイビアはプログラマブルユニットにおける相応するピンと同じである。これらのピンは、エミュレーションデバイスにおいてコピーされた周辺ユニット（パルス幅変調器、ディスプレイドライバなどような）によって、入力側および出力側として動作させることができる。これらの周辺ユニットは制御レジスタにより制御される。
【００９３】
本発明の第３の側面によれば、少なくとも１つのＣＰＵと、エミュレーションデータを外部エミュレーションデバイスに転送するための通信リンクとしてのエミュレーションポートとを持ったターゲットプログラマブルユニットが提供される。ターゲットプログラマブルユニットは、エミュレーションポートにおいて、ターゲットプログラマブルユニット（１）のＣＰＵクロック信号（８）と所定の関係を保ちながら、通信リンクを介してエミュレーションデバイス（４）に転送する以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントと、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーと、オプションとして、１つまたは複数のデータタイプ信号をエミュレーションポートにおいて供給し、エミュレーションデバイス（４）へ転送する出力としてターゲットプログラマブルユニットからのＣＰＵクロック信号を供給するように構成されている。
【００９４】
以上、ターゲットプログラマブルユニットの実施形態を本発明の第２の側面である装置の実施形態のコンテキストにおいて説明したが、これは本発明の第１の側面である方法の実施形態にも即応する。さらに、有利な実施形態は添付した特許請求の範囲において従属請求項５６−６９として列挙されている。
【００９５】
本発明の第４の側面によれば、エミュレーションデータを受け取るために外部ターゲットプログラマブルユニット（１）と通信するエミュレーションポート（１５）、外部ターゲットプログラマブルユニットに格納されているプログラムコードと機能的に同一のプログラムコードを格納するためのプログラムメモリ、トレースデータの記憶デバイス（１１）、および／または外部の処理・表示デバイス（２８）に接続された出力デバイスを有するエミュレーションデバイスが提供される。ただし、エミュレーションポートは、ターゲットプログラマブルユニットからのＣＰＵクロック信号を受信し、また、ターゲットプログラマブルユニットのＣＰＵクロック信号と所定の関係を保ちながら、以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号を受信するように構成されており、エミュレーションデバイスはさらに、転送されてきたエミュレーションデータとプログラムメモリに格納されているプログラムコードとを用いて外部ターゲットプログラマブルユニットをエミュレートすることにより、エミュレーションから各トレースデータを確認し、トレースデータを格納および／または出力するように構成されている。
【００９６】
以上、本発明に第４の側面であるエミュレーションデバイスの実施形態を本発明の第２の側面である装置のコンテキストにおいて説明したが、これは本発明の第１の側面である方法の実施形態にも即応する。さらに、有利な実施形態は添付した特許請求の範囲において従属請求項７１−８０として列挙されている。
【００９７】
本発明の第５の側面は、少なくとも１つのＣＰＵを有するターゲットプログラマブルユニットを、このターゲットプログラマブルユニットに通信リンクを介して接続された外部エミュレーションデバイスによってエミュレートする方法により形成される。この方法は、エミュレーションを初期化するために、予め決められた初期化データを通信リンクを介してエミュレーションデバイスに転送するステップと、なお、ターゲットプログラマブルユニットは初期化データによりすでに自ら初期化しているまたは初期化されており、ターゲットプログラマブルユニットの本来のＣＰＵクロック信号から導出される信号と、加えて、ＣＰＵクロック信号と所定の関係を保ちながら、ターゲットプログラマブルユニットの所与のモデルとプログラムコードとに基づいては計算することのできないデータから成るエミュレーションデータを、通信リンクを介してエミュレーションデバイスに転送するステップと、外部エミュレーションデバイスにおいて、転送されたエミュレーションデータを用いてターゲットプログラマブルユニットをエミュレートするステップと、エミュレーションから各トレースデータを確認するステップと、トレースデータを格納および／または出力するステップを有している。
【００９８】
以下のセクションでは、図を用いて本発明の有利な実施例をより詳細に説明する。
図１は、本発明によるオフラインエミュレーションのためにプログラマブルユニットをエミュレートする方法および装置のブロック図である。
図２は、ＲＡＭエミュレーションを行わないオフラインエミュレーションの１実施形態のブロック図である。
図３は、図２に類似した、ＲＡＭエミュレーションなしのアルタイムエミュレーションのブロック図である。
図４は、図３に類似した、ＲＡＭエミュレーション付きのリアルタイムエミュレーションのブロック図である。
図５は、図４に類似した、ＲＡＭエミュレーションとデバッギングサポート付きのリアルタイムエミュレーションのブロック図である。
図６は、図５に類似した、エミュレーションポートによって使用されるＩ／Ｏピンをアプリケーションプログラムが使用できるようにする能力を持ったリアルタイムエミュレーションのブロック図である。
【００９９】
図１は、本発明によるデバイス１２のブロック図であり、特に、本発明に従って、データ２９がＰＵ１とエミュレーションデバイスＥＤ４との間でどのように交換されるか、また、データ３０がＥＤ４と評価ソフトウェアプログラム１３との間でどのように転送されるかを示している。
【０１００】
ＰＵ１とＥＤ４との間で転送されるデータ２９は、ＣＰＵから読み出されたデータ、イベントの発生、レジスタメモリまたは個々のレジスタバンクの内容のコピー、現在転送されているデータのタイプ、イベント、状態および類似のアイテムに関する情報の、完全なまたは限定されたセットを含んでいる。さらに、ＣＰＵクロック信号も転送される。
【０１０１】
データ２９の転送はＣＰＵ２またはＰＵ１が実行中でもサスペンド中でも行うことができる。
【０１０２】
転送されたエミュレーションデータはＥＤ４におけるエミュレーションの入力データとして使用され、ＥＤ４は部分的なまたは完全なトレースデータセットを作成する。このトレースデータは通信路３０を介して評価ソフトウェアプログラム１３または同様のプログラムに利用可能となる。
【０１０３】
評価ソフトウェアプログラム１３はトレースデータを視覚化し、例えばモニタ１４に表示することができる。
【０１０４】
特に、デバッガソフトウェアプログラムはＥＤを制御することができるため、通信路３０は双方向に確立されうる。
【０１０５】
また、ＥＤは特にＰＵを制御することができるため、通信路２９もまた双方向に確立されうる。
【０１０６】
図２には、プログラマブルユニット１をエミュレートするための本発明によるデバイス１２の第１の実施例が示されている。エミュレーションはこのデバイス１２によってＲＡＭエミュレーションなしにオフラインで実行される。エミュレーションはＰＵ１のＣＰＵ２でのプログラム実行と同時には実行されず、処理・表示デバイス２８内で遅延される。
【０１０７】
本発明によれば、ＰＵ１は拡張として、ＰＵエミュレーションコントローラ１８、レジスタメモリコピー１９、特にバッファメモリ５１が接続された選択スイッチ回路１７、およびエミュレーションポート１５を有している。
【０１０８】
図２に示されているように、プログラマブルユニット１はＣＰＵ２の一部としてレジスタメモリ３を有している。レジスタメモリコピー１９はこのレジスタメモリ３の完全なまたは部分的なコピーである。この複製を行うために、ストローブ情報３４がＰＵエミュレーションコントローラ１８から出力される。レジスタメモリの内容をレジスタメモリコピーにコピーする時点は、例えばデータタイプ信号４２のある種の符号化によって、ＥＤに知らされなければならない。
割り込みの発生および／またはデータアクセスのような種々の情報４３がＣＰＵ２からＰＵエミュレーションコントローラ１８に転送される。その一方で、これはブレークポイント信号３９によってＣＰＵに接続される。ＣＰＵ２はなおアドレスバス１０に接続されている。
選択スイッチ回路１７は、データバス７または同様のアイテムとともに、レジスタメモリコピー１９を転送するためのラインまたはバス４６と、割り込み３８の回数および／またはレベルを転送するための他のバスとに接続されている。選択スイッチ回路１７はＰＵエミュレーションコントローラ１８によってデータ選択ラインを用いて制御される。その際、データ選択ライン４８はデータソースとデータソースのバス帯域幅を選択スイッチ回路１７に通知する。
【０１０９】
有利には、ＰＵエミュレーションコントローラ１８は、データバスによってＣＰＵ２から読み込まれたデータよりも高い優先度を有する割り込み３８が転送されるように、選択スイッチ回路１７を制御する。割り込み３８および／または読込みデータの転送準備ができていなければ、レジスタメモリコピー１９を最も低い優先度で転送してもよい。
【０１１０】
以下の各ラインまたは信号路の同定または区別は通常はデータの転送により処理されるため、データバス７の代わりにデータ７にのみ言及していることに注意されたい。
【０１１１】
選択スイッチ回路１７はデータライン４７を介してエミュレーションポート１５に接続されている。バッファメモリ５１は、例えばＦＩＦＯとして構成されており、選択スイッチ回路１７とエミュレーションポート１５との間で切り換えられる。
【０１１２】
ＣＰＵクロック信号８はＣＰＵからＰＵエミュレーションコントローラ１８、バッファメモリ５１へ、そしてエミュレーションポート１５を介してＥＤ４へ伝送される。このＣＰＵクロック信号と所定の関係を保ちながら、ＰＵは選択スイッチ回路１７またはバッファメモリ５１の出力側のデータをエミュレーションポート１５と通信コネクション５を介してエミュレーションデバイス４に転送することができる。ここで、ＥＤ４は少なくとも１つの相応するエミュレーション入力側２７を有している。
【０１１３】
さらに、データタイプ信号４２もＰＵエミュレーションコントローラ１８からエミュレーションポート１５に出力される。このデータタイプ信号４２もバッファメモリ５１によって一時的に記憶されることが可能である。
【０１１４】
また、例えば専用モードピンをセットすること、またはＣＰＵの制御レジスタのビットをセットすることにより、エミュレーションポート１５がＥＤ４へのコネクションを持たない通常のＩ／Ｏポートとして動作するように、エミュレーションポート１５を切り換えることも可能である。
【０１１５】
各データは、少なくとも、エミュレーションポート１５を通り、シリアライズ／デシリアライズを行う低電圧差動ポイントツーポイント接続２１（ＬＶＤＳ  Ｓｅｒｄｅｓ）のような通信コネクション５を介してエミュレーション入力側２７に転送される。
オフラインエミュレーションの場合、ＥＤ４はデータ入力ユニット４Ａとエミュレーションユニット４Ｂの２つのユニットに分割される。なお、エミュレーションユニット４Ｂは外部処理・表示デバイス２８としてＰＣ内に実現される。
【０１１６】
特にＣＰＵクロック信号８やデータタイプ信号４２のような、エミュレーション入力側２７によってキャプチャされた信号は、例えばＥＤエミュレーションコントローラ１６に供給してよい。ＥＤ４はＣＰＵクロック信号８をカウントするカウンタ２０を有しているので、エミュレーション入力側２７を介して読み込まれたすべてのデータに時間割当てを、すなわち、いわゆるタイムスタンプ３５を使用することができる。
【０１１７】
エミュレーション入力側２７を介して読み込まれた相応するデータには必要ならばタイムスタンプが与えられ、例えばＲＡＭ、ハードディスク等として実現されたメモリ６に格納される。
【０１１８】
データタイプ３６と書込み情報３７はＥＤエミュレーションコントローラ１６からメモリ６に転送される。対応するタイムスタンプ３５はカウンタ２０からメモリ６に転送される。
【０１１９】
メモリ６に入力されたデータはエミュレーションユニット４Ｂに転送され、エミュレーションユニット４ＢがＰＵのＣＰＵのビヘイビアを複製し、完全なまたは部分的なトレースデータセットを作成する。これをするために、メモリ６内のデータは、ＰＣ２８内のソフトウェアとして実現されたオフラインエミュレーションユニット９に転送される。オフラインエミュレーションユニット９により収集されたトレースデータは例えばトレースデータメモリ１１に格納されるが、コネクション３０を介して評価ソフトウェアプログラム１３に転送してもよい。なお、トレースデータメモリ１１は、本明細書では、エミュレーションデバイスの記憶デバイスとしても言及されている。この評価ソフトウェアプログラム１３は、例えば、デバッギングプロセスの結果をモニタ１４上に視覚化することができる。
【０１２０】
本発明によるデバイス１２の第２の実施例は図３に示されている。この実施例では、リアルタイムエミュレーションが行われる。同時に、レジスタメモリコピー１９（図２参照）はもはや不要であるので、ＰＵの構造をより単純かつ低コストなものにすることができる。
【０１２１】
この実施例では、特にＣＰＵ２は、ＰＵエミュレーションコントローラ１８により生成および出力されるブレークポイント信号３９および／またはＥＤエミュレーションコントローラ１６により生成および出力されるブレークポイント信号５２により停止させることができる。
【０１２２】
レジスタメモリコピー１９が不要であることに加えて、ＰＵエミュレーションコントローラ１８からストローブ情報３４を出力すること、ならびに、レジスタメモリコピー１９（図２参照）を転送するためのラインまたはバス４６を実現することももはや必要ない。
【０１２３】
ＥＤ４において、ＰＵ１のＣＰＵ２のビヘイビアが、例えばプログラマブルロジックモジュール２３またはボンドアウトチップ２４などのリアルタイムエミュレーションユニット４１によって複製される。これをするために、リアルタイムエミュレーションユニット４１はアドレスバス３１とプログラムデータバス３２とともにプログラムメモリ３３に接続されている。プログラムメモリ３３内には、ＣＰＵ２のプログラムメモリ内にあるのと同じプログラムコードが、特に部分的にまたは完全に存在している。
【０１２４】
ＣＰＵクロック信号８はＣＰＵ２によってエミュレーション入力側２７とそれぞれの通信コネクション５を介してＥＤ４に転送され、ＥＤ４のリアルタイムエミュレーションユニット４１に供給される。
ＥＤエミュレーションコントローラ１６は受信したデータタイプ信号４２および／またはＣＰＵクロック信号８をデマルチプレクサ４０の制御に使用する。なお、デマルチプレクサ４０は、特に、ＣＰＵ２の読込みデータ４９またはＣＰＵ２において発生した割り込み回数３８のいずれかをリアルタイムエミュレーションユニット４１の利用に供するものである。
【０１２５】
リアルタイムエミュレーションユニット４１のデータバスはＲＡＭ４４への書込みアクセス（コネクション２６参照）を有している。この実施例ではＲＡＭ４４は読み出されないので、ＲＡＭ４４を実施する必要はない。完全なトレースデータセットを生成するには、ＲＡＭ４４への書込みデータアクセス２６しか必要ない。
【０１２６】
データバスへの読込みアクセス２５により、デマルチプレクサ４０から読み出される４９べきデータの受信が可能になる。
【０１２７】
ＣＰＵ２の機能はリアルタイムエミュレーションユニット４１において複製され、相応するトレースデータが完全にまたは所定の基準に従ってフィルタリングされ、トレースデータメモリ１１に格納される、または、評価ソフトウェアプログラム１３に直接出力される。この評価ソフトウェアプログラム１３は、有利には、処理・表示ユニット２８において実行され、デバッギングプロセスの結果をモニタ１４上に視覚化する。なお、処理・表示ユニットは例えばＰＣであってよい。
【０１２８】
ＥＤ４において、ＰＵのオンチップ周辺装置の複製は部分的に不要とすることができる。例えばプログラマブルロジックモジュールを使用することによって、単一のＥＤを用いて少なくとも１つのマイクロコントローラファミリーの所望の数の様々なターゲットＣＰＵをエミュレートすることが可能になる。リアルタイムＣＰＵエミュレーションの関連するインプリメンテーションをプログラマブルロジックモジュールにロードしてもよい。
【０１２９】
本発明によるデバイス１２の第３の実施例は図４に示されている。この実施例は、図３に示されている実施例をＰＵ１のＲＡＭをエミュレートする能力で、したがってまた、ＰＵ１とＥＤ４との間で転送されるエミュレーションに必要なデータの量を低減する能力で、拡張したものである。
【０１３０】
関連するＥＤ４は、メモリへの書込みアクセス、特に、１つもしくは複数のＣＰＵおよび／または１つもしくは複数のＤＭＡユニットおよび／または１つもしくは複数のＭＭＵユニットへの書込みアクセスを有することのできる、相応するリアルタイムエミュレーションのためのすべての機能単位を含むものとなろう。
【０１３１】
ＲＡＭエミュレーション有りのリアルタイムエミュレーションの場合、ＰＵ１のＲＡＭの内容が信頼できる明示的な初期化またはそれに類したものによって予めはっきりと決められていなければ、初期的にＲＡＭの表現も静的情報としてＥＤ４に転送される。ＥＤ４のＲＡＭ４４はこの表現で初期化される。
【０１３２】
ＲＡＭエミュレーション有りのオンラインエミュレーションの場合、アドレスバス１０とＰＵエミュレーションコントローラ１８との間に付加的なアドレスコンパレータ２２が接続されていることの結果として、本発明によるデバイス１２のＰＵの関連する構造は図３に示されている構造とは異なっている。アドレスコンパレータ２２は、データバス７で現在読み込まれているデータが、ＥＤのリアルタイムエミュレーションユニット４１内に含まれている機能単位がどれも書込みアクセスを有していないようなアドレスレンジからのものであるか否かを示す。
【０１３３】
リアルタイムエミュレーションユニット４１内に含まれている機能単位のみが書込みアクセスを有するアドレスレンジから読み出されたデータは、この実施例では、もはやＥＤ４に転送しなくてよい。関連するアドレスレンジは永続的にプログラムされたもの、および／または自由にコンフィギュア可能なものであってもよい。
【０１３４】
さらに、プログラマブルユニット１の構造も図３に関連して説明されたデバイス１２と一致している。
【０１３５】
この実施例では、ＥＤ４はさらに、リアルタイムエミュレーションユニット４１から読み出されるデータ２５のソースを決定するデータセレクタ５０を有している。リアルタイムエミュレーションユニット４１内に含まれている機能単位のみが書込みアクセスを有するアドレスレンジに置かれたデータへの読込みアクセスを、データタイプ信号４２がＥＤエミュレーションコントローラ１６に示す、または、エミュレーションが自動的に検出すると、ＥＤエミュレーションコントローラ１６は、リアルタイムエミュレーションユニット４１がＥＤのＲＡＭ４４からデータを読み出すように、データセレクタ５０を切り換える。
【０１３６】
リアルタイムエミュレーションユニット４１内に含まれている機能単位以外の機能単位が書込みアクセスを有するアドレスレンジに置かれたデータへの読込みアクセスを、データタイプ信号４２がＥＤエミュレーションコントローラ１６に示す、または、エミュレーションが自動的に検出すると、ＥＤエミュレーションコントローラ１６は、リアルタイムエミュレーションユニット４１がＰＵによって受信されたデータを読み出すように、データセレクタ５０を切り換える。
【０１３７】
本発明によるデバイス１２の第４の実施例は図５に示されている。この実施例は図３または図４に示されている実施例を複雑なブレークポイントをセットする能力で拡張したものである。
【０１３８】
本発明に従えば、例えばプログラム実行のブレークポイントにおいていくつかの値をチェックするために、プログラム実行に割り込むいくつかのブレークポイントをサポートすることが可能である。これらのブレークポイントをサポートするためにターゲットＣＰＵ上で実施されるかも知れないメカニズムに加えて、特に複雑なブレークポイントをサポートするために、エミュレーションデバイス４によって別のメカニズムを形成してもよい。エミュレーションデバイスはＣＰＵを停止し、ＣＰＵ２のアドレスバスおよびデータバス１０，７にアクセスすることができる。
【０１３９】
エミュレーションデバイス４はデバッギングインタフェース４５を有している。このデバッギングインタフェース４５はブレークポイントを検出するために使用されるものであり、評価ソフトウェアプログラムによって制御される。有効なブレークポイントが検出されると、ＰＵのＣＰＵとエミュレートされたＣＰＵ２３，２４はブレークポイント信号５２によって停止される。
【０１４０】
本発明によるデバイス１２の第５の実施例は図６に示されている。この実施例では、エミュレーションポート１５により占有されたＰＵ１のピンをＰＵ１において実行されるアプリケーションプログラムで使用するというオプションにより、図３、図４、または図５に示されている実施例が拡張されている。
【０１４１】
ＥＤ４内では、デバッギングプロセス中にエミュレーションポート１５によって占有される１つまたは複数のピンを制御する制御レジスタのアドレスに、ＥＤ４の１つまたは複数のデジタル出力側５５を制御する適切な制御レジスタ５４が実現されている。リアルタイムエミュレーションユニット４１がこの制御レジスタ５４への書込みアクセスを有しているならば、ＥＤピン５５のビヘイビアは対応するＰＵピンと同じである。
【０１４２】
ピン５５は入力側または複合入出力側としても動作することができ、この場合には、ピン５５の入力信号を転送するためのデータ伝送はＣＰＵ２上で実現されなければならない。簡単のために、このデータ転送は図６には図示されていない。
ピン５５は、ＥＤにおいてコピーされる周辺ユニット（パルス幅変調器、ディスプレイドライバなどような）によって、入力側および出力側として動作させることもできる。これらの周辺ユニットは制御レジスタ５４により制御される。
【０１４３】
ＰＵのピン５５の信号を例えばリボンケーブルを介して送り返し、これらの信号をＰＵの近傍でＰＵを支持する回路基板に供給することも可能である。ジャンパまたは同様のものを使用して、エミュレーションポート１５とピン５５を切り換えてもよい。
【０１４４】
エミュレーションポート１５がＥＤとの通信に使用される場合には、接続されたネットワークは出力側５５を通して制御される。接続されたネットワークをエミュレーションポート１５の関連するピンから切り離すために、ジャンパまたは同様のものを使用してもよい。デバッギングプロセスが完了し、エミュレーションポート１５がＰＵに対して使用可能になっていれば、接続されたネットワークはエミュレーションポート１５の該当するピンに直接接続することができる。これをするために、例えばＣＰＵの制御レジスタの専用モードピンまたはビットをセットすることによって、エミュレーションポート１５を通常のＩ／Ｏポートとして構成してもよい。
【０１４５】
簡単のためにＰＵ１の他のすべてのオンチップ周辺装置は図２−６に図示されていることに注意されたい。
【０１４６】
ＰＵ１とＥＤ４からのデータ転送時間により時間遅延と相応のＣＰＵクロックオフセットが生じうるが、このことはエミュレーションと入手したトレースデータの評価の際に考慮されなければならない。特に、実施例（図５参照）で説明されているように複雑なブレークポイントが設定されている場合には、生じうる時間オフセットを相応に考慮しなければならない。
【０１４７】
本発明のすべての実施例において、例えば、ＣＰＵクロック信号の立上りエッジまたは立下りエッジのときに該当するデータの転送を行うならば、あるいは、クロック周波数を上げる、または、転送すべきデータを複数のＣＰＵサイクルにわたって分散し、データ量が大きくなり過ぎたら、相応するＣＰＵウェイトサイクルを挿入するようにすれば、エミュレーションポートへのコネクション数を減らすことが可能である。
【０１４８】
以下では、エミュレーションポートのデザインに関して、特定の例を挙げて説明する。以下に示す式はすべての設計タスクに対して一般的に適用されるものではなく、示された例に限定されるものであることに注意されたい。
【０１４９】
実際のマイクロコントローラのほとんどは、Ｉ／Ｏコンポーネントへの著しく低速のインタフェースとともに、高速ＣＰＵと高速メモリインタフェースを提供する。エミュレーションポートがＣＰＵクロックに基づいて２倍のデータレートで動作するならば、同期データを出力するのに必要なピンの量は次のように推定することができる。
【０１５０】
【数１】
2008544340.tif 000004
ここで、ｎは必要とされるピンの数であり、ｓはステータスビット（ターゲットに固有の、割り込み状態、バスウェイトフラグ、ＤＭＡ状態、ＤＭＡチャネル数）の数であり、ｗはＩ／Ｏアクセスのバス帯域幅であり、ｃはＣＰＵ読出し命令１つ当たりのクロックサイクルとＤＭＡ読出し動作１つ当たりのクロックサイクルとの最小値である。
【０１５１】
この式を説明するために、３つの典型的な例を以下に示す。第１の例は８ビットマイクロコントローラであり、これについて、エミュレーションインタフェースを実現するのに必要な付加的なハードウェアの量も示す。
【０１５２】
【数２】
2008544340.tif 000005
第２の例はＤＳＰ機能が付加された１６ビットマイクロコントローラである。
【０１５３】
【数３】
2008544340.tif 000006
最後に、周辺アクセスには１６ビットしか使用しない３２ビットマイクロコントローラの例を示す。
【０１５４】
【数４】
2008544340.tif 000007
【０１５５】
ＣＰＵのＩ／Ｏ読出し帯域幅が比較的大きい場合には、エミュレーションインタフェースによって転送されるべきデータストリームをＦＩＦＯでバッファしてよい。この場合、Ｉ／Ｏロード動作の統計的頻度が実際に必要とされる帯域幅を決定する。この統計的効果をより明瞭にするには、命令タイプの統計的分布を示した表１を参照されたい。
【０１５６】
所要帯域幅は（他のそれほど支配的でないファクタの中から）命令セットとＦＥＰＯのサイズとに依存しており、以下の式により推定することができる。
【０１５７】
【数５】
2008544340.tif 000008
ここで、ｄｒはプログラマブルユニットからエミュレータへのデータ転送レートであり、ｆはＣＰＵ周波数であり、ｌｉｏはＩ／Ｏロード命令のパーセンテージであり、ｃはロード命令１つ当たりの必要最小サイクルである。
【０１５８】
次の２つの計算は所要帯域幅の基準フレームとして与えられているだけである。第１の式は６０ＭＨｚでの１６ビットマイクロコントローラを特徴付けるものである。
【０１５９】
【数６】
2008544340.tif 000009
第２の例は２００ＭＨｚでの３２ビットマイクロコントローラを特徴付けるものである。
【０１６０】
【数７】
2008544340.tif 000010
これらの帯域幅は、組込トレースモジュールでトレースデータを連続的に抽出するために必須のデータ転送レートをはるかに下回っている。
【０１６１】
もちろん、実際のインプリメンテーションでは、どのようなＦＩＦＯオーバーフローも以下の方法により防止されなければならない。
Ｉ／Ｏ読出しアクセスが頻繁な場合に、コンパイラによりＮＯＰを自動挿入する。
ＦＩＦＯオーバーフローが差し迫ったら、ＣＰＵを休止させる。
【０１６２】
本出願の優先権主張の基礎となる出願ＥＰ  ０５  ００９  ６２１は参照により全体として本出願に取り込まれている。
【０１６３】
本出願中の用語を解釈する際、以下の用語は、本出願の優先権主張の基礎となる本出願人による出願ＥＰ  ０５  ００９  ６２１における対応する用語と同じ意味を有するものとして解釈されなければならない。
【０１６４】
【表２】
2008544340.tif 000011
【図面の簡単な説明】
【０１６５】
【図１】本発明によるオフラインエミュレーションのためにプログラマブルユニットをエミュレートする方法および装置のブロック図である。
【図２】ＲＡＭエミュレーションを行わないオフラインエミュレーションの１実施形態のブロック図である。
【図３】図２に類似した、ＲＡＭエミュレーションなしのアルタイムエミュレーションのブロック図である。
【図４】図３に類似した、ＲＡＭエミュレーション付きのリアルタイムエミュレーションのブロック図である。
【図５】図４に類似した、ＲＡＭエミュレーションとデバッギングサポート付きのリアルタイムエミュレーションのブロック図である。
【図６】図５に類似した、エミュレーションポートによって使用されるＩ／Ｏピンをアプリケーションプログラムが使用できるようにする能力を持ったリアルタイムエミュレーションのブロック図である。
【図１】
2008544340.tif 000012
【図２】
2008544340.tif 000013
【図３】
2008544340.tif 000014
【図４】
2008544340.tif 000015
【図５】
2008544340.tif 000016
【図６】
2008544340.tif 000017
【手続補正書】
【提出日】平成20年1月4日(2008.1.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ターゲットプログラマブルユニット（１）を外部エミュレーションデバイス（４）によりエミュレートする方法において、ターゲットプログラマブルユニットは少なくとも１つのＣＰＵ（２）を有しており、外部エミュレーションデバイスは通信リンク（５）によりターゲットプログラマブルユニットに接続されており、該エミュレーション方法は以下の諸ステップ、すなわち、エミュレーションを初期化するために、予め決められた初期化データを通信リンク（５）を介してエミュレーションデバイス（４）に転送するステップ、なお、ターゲットプログラマブルユニット（１）は前記初期化データによりすでに自ら初期化しているまたは初期化されており、通信リンクを介してエミュレーションデバイスにターゲットプログラマブルユニット（１）のＣＰＵクロック信号を転送し、また、該ＣＰＵクロック信号（８）と所定の関係を保ちながら、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントと、オプションとして、ＣＰＵを迂回するデータ転送をトリガするイベントと、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーと、オプションとして、１つまたは複数のデータタイプ信号を転送するステップ、外部エミュレーションデバイスにおいて、転送されたエミュレーションデータを用いてターゲットプログラマブルユニット（１）をエミュレートするステップ、外部エミュレーションデバイスにおいてエミュレーションから各トレースデータを確認するステップ、および、トレースデータを格納および／または出力するステップを有することを特徴とする、ターゲットプログラマブルユニット（１）を外部エミュレーションデバイス（４）によりエミュレートする方法。
【請求項２】
前記ＣＰＵクロック信号（８）または本来のＣＰＵクロック信号から導出される信号のいずれかをターゲットプログラマブルユニット（１）からエミュレーションポート（１５）を介してエミュレーションデバイス（４）に転送する、請求項１記載の方法。
【請求項３】
エミュレーションデータを転送するステップが専ら、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号のみを転送することから成る、請求項１記載の方法。
【請求項４】
エミュレーションはターゲットプログラマブルユニットから一定量のデータを受け取った時点から実行される、請求項１記載の方法。
【請求項５】
ＣＰＵクロック信号（８）をプログラマブルユニットのエミュレーションコントローラ（１８）および／またはターゲットプログラマブルユニット（１）のバッファメモリ（５１）に転送する、請求項２記載の方法。
【請求項６】
エミュレーションデータをＣＰＵクロック信号（８）の立下りエッジもしくは立上りエッジとともに転送するか、または、ＣＰＵクロック信号（８）の立下りエッジと立上りエッジの両方とともに転送する、請求項２記載の方法。
【請求項７】
エミュレーションデータの転送を駆動するクロック周波数をエミュレーションデータの転送中にＣＰＵクロック周波数を超えて上昇させる、請求項１記載の方法。
【請求項８】
転送すべきエミュレーションデータをターゲットＣＰＵ（２）の数サイクルにわたって分散させる、請求項１記載の方法。
【請求項９】
エミュレーションデータの転送中に、ターゲットプログラマブルユニットまたはエミュレーションデバイスにより、ＣＰＵウェイトサイクルの挿入を制御する、請求項１記載の方法。
【請求項１０】
ターゲットプログラマブルユニット（１）を、ターゲットプログラマブルユニットの通信リンク（５）の一部として構成されたエミュレーションポート（１５）を標準出力ポートとして使用するための動作モードに切り換える、ただし、切り換えはエミュレーションポートの全体またはエミュレーションポートのピンのサブセットに対して適用される、請求項１記載の方法。
【請求項１１】
ＪＴＡＧインタフェースと共同でエミュレーションポートのコンタクトピンを使用する、請求項１０記載の方法。
【請求項１２】
ＲＡＭが初めに完全に初期化されていなければ、プログラムメモリの部分的なまたは完全なコピーおよび／またはターゲットプログラマブルユニット（１）のＲＡＭの部分的なまたは完全なコピーをエミュレーションデバイス（４）に転送する、請求項１記載の方法。
【請求項１３】
受け取ったエミュレーションデータをエミュレーションデバイス（４）の記憶デバイス（６）に格納する、請求項１記載の方法。
【請求項１４】
求めたトレースデータをエミュレーションデバイス（４）による出力および／または保存の前にフィルタリングするステップを含む、請求項１記載の方法。
【請求項１５】
ターゲットプログラマブルユニット（１）のエミュレーションを以前に取得し格納したエミュレーションデータを用いてエミュレーションデバイスによりオフラインで行う、請求項１記載の方法。
【請求項１６】
転送されたエミュレーションデータにある特定の時点を割り当てるために、エミュレーションデバイス（４）において、カウンタデバイス（２０）を用いてＣＰＵクロック信号（８）をカウントする、請求項２記載の方法。
【請求項１７】
ターゲットプログラマブルユニットのランダムアクセスメモリをエミュレートせずに、ターゲットプログラマブルユニットのエミュレーションを行う、請求項１５または１６記載の方法。
【請求項１８】
ターゲットプログラマブルユニット（１）のプログラム実行は、同じコンテキストのレジスタバンク（３）の完全なコピーが最後に検出された時点に始まる各コンテキストレベルについて、エミュレーションデバイス（４）によりシミュレートされる、請求項１記載の方法。
【請求項１９】
ターゲットプログラマブルユニットのＣＰＵをコンピュータ上で実行されるコンピュータプログラムによりエミュレートする、請求項１５記載の方法。
【請求項２０】
ターゲットプログラマブルユニットのエミュレーションは、ターゲットプログラマブルユニットのＲＡＭの一部またはターゲットプログラマブルユニットのＲＡＭ全体をエミュレートすることを含む、請求項１５記載の方法。
【請求項２１】
ターゲットプログラマブルユニットにおいて、ＣＰＵにより現在読み込まれているデータまたはＤＭＡ動作中のデータが、ターゲットプログラマブルユニット（１）のＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのアドレスレンジから来ているものであるか否かを判定するステップと、続いて、ＣＰＵにより読み込まれたデータまたはＤＭＡ動作中のデータのうち、ターゲットプログラマブルユニット（１）のＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのアドレスレンジから来ているもののみをエミュレーションデバイス（４）に転送するステップを含む、請求項１記載の方法。
【請求項２２】
ターゲットプログラマブルユニットのＣＰＵ以外の機能単位により書込み可能なアドレスレンジは固定して永続的にプリプログラムされているか、または、自由にコンフィギュアされるか、もしくは、部分的に永続的にプログラムされ、部分的に自由にコンフィギュアされる、請求項２１記載の方法。
【請求項２３】
エミュレーションデバイス（４）においてリアルタイムでエミュレーションを行う、請求項１記載の方法。
【請求項２４】
リアルタイムエミュレーションを実行するために、ターゲットプログラマブルユニット（１）のＣＰＵ（２）の相応のインプリメンテーションをエミュレーションデバイス（４）のプログラマブルロジックモジュールにロードする、請求項２３記載の方法。
【請求項２５】
有効なブレークポイントが検出されたら、ターゲットプログラマブルユニット（１）またはターゲットプログラマブルユニットのＣＰＵ（２）をエミュレーションデバイス（４）またはターゲットプログラマブルユニット（１）により停止する、請求項１記載の方法。
【請求項２６】
１つまたは複数のブレークポイントを立て、エミュレーションデバイス（４）により管理する、請求項１記載の方法。
【請求項２７】
ブレークポイント信号（３９，５２）を、ターゲットプログラマブルユニットのエミュレーションコントローラ（１８）から、またはエミュレーションデバイス（１６）のエミュレーションコントローラから、ターゲットプログラマブルユニット（１）のＣＰＵ（２）に転送する、請求項２６記載の方法。
【請求項２８】
エミュレーションデバイス（４）はターゲットプログラマブルユニットを停止した後にターゲットプログラマブルユニット（１）のアドレスバスとデータバス（１０，７）にアクセスする、請求項２３記載の方法。
【請求項２９】
リアルタイムエミュレーションにおいて、エミュレーションデバイスは自らのメモリに対して読み書きアクセスを有しており、読出しアクセスの場合には、ターゲットプログラマブルユニット（１）から転送されたデータを受け取る、請求項２３記載の方法。
【請求項３０】
ターゲットプログラマブルユニット（１）においてイベントが発生すると、同じイベントがエミュレーションデバイスにおいて同時にまたはオフセットを伴ってトリガされる、請求項２３記載の方法。
【請求項３１】
エミュレーションデバイス（４）のデータセレクタ（５０）は、エミュレーションデバイス（４）のメモリデバイスからのデータの読出しに、またはターゲットプログラマブルユニット（１）のデータ（４９）の読出しに切り換えられる、請求項１記載の方法。
【請求項３２】
ターゲットプログラマブルユニットのＲＡＭをエミュレートせずにターゲットプログラマブルユニットのリアルタイムエミュレーションを行う、請求項２３記載の方法。
【請求項３３】
専ら以下のエミュレーションデータのみが転送される、すなわち、プログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントのみが転送される、請求項３２記載の方法。
【請求項３４】
ターゲットプログラマブルユニットのリアルタイムエミュレーションが、ターゲットプログラマブルユニットのＲＡＭの一部または全体をリアルタイムでエミュレートすることを含む、請求項２３記載の方法。
【請求項３５】
リアルタイムエミュレーションの際に、ターゲットプログラマブルユニット（１）の少なくとも１つのＲＡＭの完全なまたは部分的なコピーもエミュレーションデバイス（４）において実行する、請求項２３記載の方法。
【請求項３６】
ターゲットプログラマブルユニットの機能単位のうち、ターゲットプログラマブルユニット（１）のＲＡＭに書込みを行う機能単位をエミュレートする、請求項３５記載の方法。
【請求項３７】
エミュレーションデータをターゲットプログラマブルユニットのエミュレーションコントローラのＦＩＦＯメモリに一時的に格納し、エミュレーションデバイスにおいてブレークポイントがオフセットをもってトリガされた場合には、エミュレーションデバイスは、ターゲットプログラマブルユニットのＣＰＵがエミュレーションデバイスによって停止された時点までにＦＩＦＯメモリに格納されたエミュレーションデータを用いて、ブレークポイント後もエミュレーションを続行する、請求項１記載の方法。
【請求項３８】
プログラマブルユニットをエミュレートするための装置において、該装置は、少なくとも１つのＣＰＵ（２）を有するターゲットプログラマブルユニット（１）と、エミュレーションデータの転送のために通信リンク（５）としてのエミュレーションポート（１５）を介してターゲットプログラマブルユニット（１）に外部ユニット（１４）として接続されたエミュレーションデバイス（４）とを有しており、また、ターゲットプログラマブルユニットのエミュレーションから各トレースデータを確認するように構成されており、エミュレーションデバイス（４）は少なくとも１つのエミュレーションコントローラ（１６）と、トレースデータの記憶デバイスおよび／または外部の処理・表示デバイスに接続された出力デバイスとを有しており、ターゲットプログラマブルユニットは、ターゲットプログラマブルユニットのＣＰＵクロック信号（８）と所定の関係を保ちながら、以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントと、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーと、オプションとして、１つまたは複数のデータタイプ信号を、通信リンク（５）を介してエミュレーションデバイス（４）に転送するように、また、ターゲットプログラマブルユニットからのＣＰＵ信号をエミュレーションデバイス（４）に転送するように構成されている、ことを特徴とするプログラマブルユニットをエミュレートするための装置。
【請求項３９】
ターゲットプログラマブルユニットは専ら以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号のみを、エミュレーションデバイスに転送するように構成されている、請求項３８記載の装置。
【請求項４０】
ターゲットプログラマブルユニットのエミュレーションコントローラ（１８）は、エミュレーションデータの一部としてデータタイプ信号（４２）をエミュレーションポート（１５）と、存在するならば、ターゲットプログラマブルユニット（１）のバッファメモリ（５１）とにも転送するように構成されている、請求項３８記載の装置。
【請求項４１】
ターゲットプログラマブルユニット（１）とエミュレーションデバイス（４）との間に双方向通信を提供するように構成されている、請求項３８記載の装置。
【請求項４２】
エミュレーションデバイス（４）がデバッギングインタフェース（２５）を有している、請求項３８記載の装置。
【請求項４３】
エミュレーションデバイス（４）はターゲットプログラマブルユニット（１）のプログラムメモリと一致するプログラムメモリ（３３）を有している、請求項３８記載の装置。
【請求項４４】
デバッギングまたはエミュレーションのために、エミュレーションポート無しのターゲットプログラマブルユニット（１）の代わりに、エミュレーションポート（１５）付きのターゲットプログラマブルユニット（１）をターゲットシステムに挿入することができる、請求項３８記載の装置。
【請求項４５】
エミュレーションデバイス（４）は切換可能データセレクタ（５０）を有しており、該切換可能データセレクタは、エミュレーションデバイス（４）のＲＡＭ（４４）からデータを読み出すため、または、ターゲットプログラマブルユニット（１）から受け取ったデータを読み込むために接続することができる、請求項３８記載の装置。
【請求項４６】
ターゲットプログラマブルユニット（１）は自らのＣＰＵクロック信号（８）をエミュレーションポート（１５）を介してエミュレーションデバイス（４）に転送するように構成されている、請求項３８記載の装置。
【請求項４７】
エミュレーションデバイス（４）は、リアルタイムエミュレーションユニット（４１）として、ボンドアウトチップまたはプログラマブルロジックモジュール（２３）の形態のロジックモジュールを有している、請求項３８記載の装置。
【請求項４８】
エミュレーションデバイスは、リアルタイムエミュレーションユニット（４１）として、アドレスバス（３１）および／またはプログラムメモリ（３３）および／またはプログラムデータバス（３２）に接続されている、請求項４７記載の装置。
【請求項４９】
エミュレーションデバイス（４）はデマルチプレクサデバイス（４０）を有している、請求項３８記載の装置。
【請求項５０】
エミュレーションデバイス（４）の１つまたは複数のデジタル出力側（５５）および／またはターゲットプログラマブルユニット（１）からコピーされたエミュレーションデバイス（４）内の周辺ユニットを制御する制御レジスタ（５４）がエミュレーションデバイス（４）に実装されている、請求項３８記載の装置。
【請求項５１】
エミュレーションデバイス（４）のデジタル出力側（５５）は出力側として切換可能であり、デジタル出力側（５５）の信号は相応のコネクションを介してターゲットプログラマブルユニット（１）にフィードバックすることができる、請求項３８記載の装置。
【請求項５２】
ターゲットプログラマブルユニット（１）内のアドレスバスライン（２０）はアドレスコンパレータ（２２）を介してターゲットプログラマブルユニットのエミュレーションコントローラ（１８）に接続されている、請求項３８記載の装置。
【請求項５３】
エミュレーションデバイスは、リアルタイムエミュレーションユニット（４１）として、データバスを介してＲＡＭ（４４）に接続されている、請求項４７記載の装置。
【請求項５４】
ターゲットプログラマブルユニットのエミュレーションポートは出力側にＦＩＦＯメモリを有しており、エミュレーションコントローラ（１８）はＦＩＦＯメモリに格納されているエミュレーションデータをエミュレーションデバイスに転送するように構成されている、請求項３８記載の装置。
【請求項５５】
エミュレーションデバイスは、ターゲットプログラマブルユニットのエミュレーションコントローラとエミュレーションデバイスのランダムアクセスメモリとに接続された入力側と、エミュレーションデバイスのＣＰＵに接続された出力側を有するタイムマルチプレクサを有しており、該タイムマルチプレクサは、入力側で受信した信号を時間多重された出力信号の形態で供給するように構成されている、請求項３８記載の装置。
【請求項５６】
ターゲットプログラマブルユニット側とエミュレーションデバイス側とにそれぞれＪＴＡＧインタフェースを有する、請求項３８記載の装置。
【請求項５７】
少なくとも１つのＣＰＵ（２）と、エミュレーションデータを外部エミュレーションデバイス（１）に転送するための通信リンク（５）としてのエミュレーションポート（１５）を有するターゲットプログラマブルユニット（１）において、該ターゲットプログラマブルユニットは、ターゲットプログラマブルユニット（１）のＣＰＵクロック信号（８）と所定の関係を保ちながら、通信リンク（５）を介してエミュレーションデバイス（４）に出力される以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータと、プログラムカウンタに影響を及ぼす外部イベントと、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピーと、オプションとして、１つまたは複数のデータタイプ信号をエミュレーションポートにおいて供給するように、また、エミュレーションデバイス（４）に転送される出力としてターゲットプログラマブルユニットからのＣＰＵクロック信号を供給するように構成されている、ことを特徴とするターゲットプログラマブルユニット（１）。
【請求項５８】
専ら以下のエミュレーションデータのみを、すなわち、ターゲットプログラマブルユニットのデータバスからＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号のみを、エミュレーションデバイス（４）に転送するように構成されている、請求項５７記載のターゲットプログラマブルユニット。
【請求項５９】
エミュレーションデータをＣＰＵクロック信号（８）の立下りエッジもしくは立上りエッジとともに転送するか、または、ＣＰＵクロック信号（８）の立下りエッジと立上りエッジの両方とともに転送するように構成されている、請求項５７記載のターゲットプログラマブルユニット（１）。
【請求項６０】
エミュレーションデータの転送を駆動するためにＣＰＵクロック周波数を超えて引き上げられた周波数でクロック信号を発生させるように構成されている、請求項５７記載のターゲットプログラマブルユニット（１）。
【請求項６１】
エミュレーションデータをターゲットＣＰＵ（２）の数サイクルにわたって転送されるように分散させるように構成されている、請求項５７記載のターゲットプログラマブルユニット（１）。
【請求項６２】
エミュレーションポート（１５）を標準Ｉ／Ｏポートとして使用するための動作モードに切り替わるように構成されている、請求項５７記載のターゲットプログラマブルユニット（１）。
【請求項６３】
デバッギングまたはエミュレーションのために、エミュレーションポート無しのターゲットプログラマブルユニット（１）の代わりに、エミュレーションポート（１５）付きでターゲットシステムに挿入することができる、請求項５７記載のターゲットプログラマブルユニット（１）。
【請求項６４】
ＲＡＭが初めに完全に初期化されていない場合には、プログラムメモリの部分的なまたは完全なコピーおよび／またはターゲットプログラマブルユニット（１）のＲＡＭの部分的なまたは完全なコピーをエミュレーションデバイス（４）に転送するように構成されている、請求項５７記載のターゲットプログラマブルユニット（１）。
【請求項６５】
現在読み込まれているデータが、ターゲットプログラマブルユニット（１）のＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのＲＡＭのアドレスレンジから来ているものであるか否かを判定し、ターゲットプログラマブルユニット（１）のＣＰＵ以外の機能単位により書込み可能なターゲットプログラマブルユニットのアドレスレンジから来ているエミュレーションデータのみをエミュレーションデバイス（４）に転送するように構成されている、請求項５７記載のターゲットプログラマブルユニット（１）。
【請求項６６】
エミュレーションポートを通るエミュレーションデータの流れを制御するように構成されたエミュレーションコントローラ（１８）を有している、請求項５７記載のターゲットプログラマブルユニット（１）。
【請求項６７】
エミュレーションコントローラ（１８）は、データタイプ信号（４２）をエミュレーションポート（１５）と、存在するならば、ターゲットプログラマブルユニット（１）のバッファメモリ（５１）とにも転送するように構成されている、請求項６６記載のターゲットプログラマブルユニット（１）。
【請求項６８】
ターゲットプログラマブルユニット（１）とエミュレーションデバイス（４）との間に双方向通信を提供するように構成されている、請求項５７記載のターゲットプログラマブルユニット。
【請求項６９】
自らのＣＰＵクロック信号（８）をエミュレーションポート（１５）を介してエミュレーションデバイス（４）に送信するように構成されている、請求項５７記載のターゲットプログラマブルユニット。
【請求項７０】
ターゲットプログラマブルユニット（１）内のアドレスバスライン（２０）はアドレスコンパレータ（２２）を介してエミュレーションコントローラ（１８）に接続されている、請求項６６記載のターゲットプログラマブルユニット。
【請求項７１】
エミュレーションコントローラ（１８）は出力側にＦＩＦＯメモリを有しており、ブレークポイントの発生後、ＦＩＦＯメモリが空になるまで、ＦＩＦＯメモリに格納されているエミュレーションデータをエミュレーションデバイスに転送し続けるように構成されている、請求項６６記載のターゲットプログラマブルユニット。
【請求項７２】
エミュレーションコントローラ（１８）に接続されたＪＴＡＧインタフェースを有しており、該ＪＴＡＧインタフェースは、エミュレーションコントローラからイネーブル信号を受信すると、ＪＴＡＧ標準に従ってＪＴＡＧ出力データを供給するように構成されている、請求項６６記載のターゲットプログラマブルユニット。
【請求項７３】
エミュレーションデータを受け取るために外部ターゲットプログラマブルユニット（１）と通信するエミュレーションポート（１５）、外部ターゲットプログラマブルユニットに格納されているプログラムコードと機能的に同一のプログラムコードを格納するためのプログラムメモリ、トレースデータの記憶デバイス（１１）、および／または外部の処理・表示デバイス（２８）に接続された出力デバイスを有するエミュレーションデバイスにおいて、エミュレーションポートは、ターゲットプログラマブルユニットからのＣＰＵクロック信号を受信し、また、ターゲットプログラマブルユニットのＣＰＵクロック信号と所定の関係を保ちながら、以下のエミュレーションデータを、すなわち、ターゲットプログラマブルユニットのデータバスから外部ターゲットプログラマブルユニットのＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号を受信するように構成されており、エミュレーションデバイスはさらに、転送されてきたエミュレーションデータとプログラムメモリに格納されているプログラムコードとを用いて外部ターゲットプログラマブルユニット（１）をエミュレートし、受信したエミュレーションデータに基づいてエミュレーションから各トレースデータを確認し、トレースデータを格納および／または出力するように構成されていることを特徴とする、エミュレーションデバイス。
【請求項７４】
専ら受信した以下のエミュレーションデータのみに基づいて、すなわち、ターゲットプログラマブルユニットのデータバスから外部ターゲットプログラマブルユニットのＣＰＵが読み込んだデータ、プログラムカウンタに影響を及ぼす外部イベント、オプションとして、周期的に作成されるレジスタメモリの完全なまたは部分的なコピー、および、オプションとして、１つまたは複数のデータタイプ信号のみに基づいて、エミュレーションからトレースデータを確認するように構成されている、請求項７３記載のエミュレーションデバイス。
【請求項７５】
デバッギングインタフェースを有する、請求項７３記載のエミュレーションデバイス。
【請求項７６】
エミュレーションデバイス（４）は、エミュレーションデバイス（４）のＲＡＭ（４４）からデータを読み出すため、または、ターゲットプログラマブルユニット（１）から受け取ったデータを読み込むために接続することのできる切換可能データセレクタ（５０）を有している、請求項７３記載のエミュレーションデバイス。
【請求項７７】
エミュレーションデバイス（４）が、リアルタイムエミュレーションユニット（４１）として、ボンドアウトチップまたはプログラマブルロジックモジュール（２３）の形態のロジックモジュールを有している、請求項７３記載のエミュレーションデバイス。
【請求項７８】
エミュレーションデバイスが、リアルタイムエミュレーションユニット（４１）として、アドレスバス（３１）および／またはプログラムメモリ（３３）および／またはプログラムデータバス（３２）に接続されている、請求項７７記載のエミュレーションデバイス。
【請求項７９】
デマルチプレクサデバイス（４０）を有する、請求項７３記載のエミュレーションデバイス。
【請求項８０】
エミュレーションデバイス（４）の１つまたは複数のデジタル出力側（５５）および／または外部ターゲットプログラマブルユニット（１）からコピーされたエミュレーションデバイス（４）内の周辺ユニットを制御する制御レジスタ（５４）がエミュレーションデバイス（４）に実装されている、請求項７３記載のエミュレーションデバイス。
【請求項８１】
エミュレーションデバイス（４）のデジタル出力側（５５）は出力側として切換可能であり、デジタル出力側（５５）の信号は相応のコネクションを介してターゲットプログラマブルユニット（１）にフィードバックすることができる、請求項７３記載のエミュレーションデバイス。
【請求項８２】
リアルタイムエミュレーションユニット（４１）として、データバスを介してＲＡＭ（４４）に接続されている、請求項７３記載のエミュレーションデバイス。
【請求項８３】
ターゲットプログラマブルユニットのエミュレーションコントローラとエミュレーションデバイスのランダムアクセスメモリとに接続された入力側と、エミュレーションデバイスのＣＰＵに接続された出力側を有するタイムマルチプレクサを有しており、該タイムマルチプレクサは入力側で受信した信号を時間多重された出力信号の形態で供給するように構成されている、請求項７３記載のエミュレーションデバイス。
【請求項８４】
エミュレーションポートと共用されるＪＴＡＧインタフェースを有する、請求項７３記載のエミュレーションデバイス。
【請求項８５】
ターゲットプログラマブルユニット（１）を外部エミュレーションデバイス（４）によりエミュレートする方法において、ターゲットプログラマブルユニットは少なくとも１つのＣＰＵ（２）を有しており、外部エミュレーションデバイスは通信リンク（５）によりターゲットプログラマブルユニットに接続されており、該エミュレーション方法は以下の諸ステップ、すなわち、エミュレーションを初期化するために、予め決められた初期化データを通信リンクを介してエミュレーションデバイスに転送するステップと、なお、ターゲットプログラマブルユニットは初期化データによりすでに自ら初期化しているまたは初期化されており、ターゲットプログラマブルユニットの本来のＣＰＵクロック信号から導出される信号と、加えて、ＣＰＵクロック信号（８）と所定の関係を保ちながら、ターゲットプログラマブルユニットの所与のモデルとプログラムコードとに基づいては計算することのできないデータから成るエミュレーションデータを、通信リンクを介してエミュレーションデバイスに転送するステップと、転送されたエミュレーションデータを用いてターゲットプログラマブルユニットをエミュレートするステップと、エミュレーションから各トレースデータを確認するステップと、トレースデータを格納および／または出力するステップを有していることを特徴とする、ターゲットプログラマブルユニット（１）を外部エミュレーションデバイス（４）によりエミュレートする方法。
【国際調査報告】
2008544340.tif 000018
2008544340.tif 000019
2008544340.tif 000020