オンチップ・エミュレータ

オンチップ・エミュレータ（）は、基板上にマイクロプロセッサを実装した状態 (on-chip) でプログラムのデバッグを行うことのできる装置の総称で、主に組み込みシステムでのプログラム開発に使用する。ターゲットとなる基板とエミュレータ・ユニットをデバッグ用のインタフェースで接続し、さらにそのユニットとホストとなるパソコンをUSBやイーサネットなどで接続する形態が一般的である。

オンチップ・エミュレータの特徴 
従来のインサーキット・エミュレータ(オンチップ・エミュレータに対して、フルICEとも呼ばれる)と比べると機能は大幅に劣るが、低コストであること、プロセッサとの接続が簡単であることなどの利点がある。ただし装置の性質上、プロセッサが電気的に正しく動作する状態でなければ使用できないため、そこに至るまでの開発過程には不向きである。また直接CPUバスに接続されないため、リアルタイムなバス動作の履歴をサンプルするバストレースが不可能になる。

ただし最大の利点としては、基板上のマイクロプロセッサをプローブに差し替えるフルICEに対し、オンチップ・エミュレータはマイクロプロセッサを基板上に実装したままデバッグが行えるため、製品と同等の電気的特性を維持したままプログラムの評価が可能になる。このためバスクロックが高速化し、フルICEでは対応できなかったマイクロプロセッサでもデバッグが可能となり、パッケージにも左右されないため、2000年以降はインサーキット・エミュレータの主流になっている。

リアルタイムトレースに関しても、バストレースは不可能であるが、CPU内蔵のデバッグ機能 (On-Chip debug)を用いてプログラムやデータのトレース実現している。

主なオンチップ・エミュレータ 
オンチップ・エミュレータでは、ホストパソコンの操作に応じてプロセッサとエミュレータ・ユニットが通信を行い、内部のレジスタや、バス接続されたROMやRAMなどのデバイスの情報を取得、変更することで、エミュレートを実現している。その一例を以下に示す。

 JTAGエミュレータ
 プロセッサに内蔵されたJTAGポートによってエミュレータ・ユニットと通信を行う方式。バスの操作も自由に行えるので、周辺装置のデバッグなど応用範囲も広い。比較的規模の大きいプロセッサで採用されている。プロセッサにバス接続されたフラッシュメモリへの書き込み機能を併せ持つことが多い。
 専用エミュレータ
 プロセッサに内蔵されたデバッグ専用インタフェースによってエミュレータ・ユニットと通信を行う方式。外部バスを持たない小規模なプロセッサで採用されることが多い。ルネサス エレクトロニクスのMINICUBEやE8、モトローラ（フリースケール）のなどの例がある。
 リモートモニタデバッガ
 ROMの一部にプロセッサの情報を収集するためのモニタプログラムを書き込んでおき、UARTやUSBなどを介してこのプログラムとホストパソコンが直接通信を行う方式。この方式は、エミュレータ・ユニットを必要としない。GDBを使った遠隔デバッグもこの一種である。通信速度が直ちにボトルネックになるなど制約が大きい方式ではあるが、最も低コストで実現できるため、電子工作などのホビー用途では多く使われている。
 ROMエミュレータ
 主にDIP型のROMソケットに専用プローブを挿入し、プロセッサに直接任意の機械語を送り込むことで、情報を収集する方式。比較的古くから使われている方式だが、ROMのパッケージングが制約されたり、高速なプロセッサへの対応が難しいなどの理由で、近年は使われることが少なくなっている。

脚注

組み込みシステム
デジタル回路
ソフトウェア開発ツール