インサーキット・エミュレータ
デジタル製品では、開発時や製造した製品の動作確認等のために外部ピンに多数のプローブを接続して信号を得ていたが、高密度実装によってピンの間隔が狭まったりBGAのような端子そのものが隠れてしまうようになった。これに対応して、デジタル回路の内部に、要所要所の信号を外部に読み出せるようにした専用端子が設けられるようになり、その仕組みは1990年に「JTAG」という名前で標準化された。
JTAG端子は内部的には数珠つなぎになっているので読み出しに時間がかかったり、回路ブロックそのものが停止すれば読み出せなくなるなど、ロジックアナライザ用やICE用の信号を得る手段としては万全ではないが、フルICEに比べて簡便なプローブで接続できるため、多くの大規模ロジック回路を持つ半導体製品用の開発装置として利用され、JTAGエミュレータやROMエミュレータなどのオンチップ・エミュレータを使用することが多くなってきている。このような開発装置の中には「ICE」と名乗るものもあり、従来型のフルICEとの違いで多少の混乱がある。
JTAG ICEでは、レジスタ読み書き、メモリ読み書き、ブレークポイント設定、実行、停止、ステップ実行などの機能回路が集積されたJTAG端子付き CPU にて、JTAG端子経由にてオンチップデバッグ機能を提供可能である。
プログラムの実行経路を表示する機能である。基本は実行開始からブレーク発生までに実行した命令を機械語もしくはソースコードにより表示する。表示にはタイムスタンプも付加されるため、命令を実行したタイミングを時間により確認することができる。また、フルICEでは、実際に発生したバスの動きをタイムスタンプと共に表示するとも可能である。 長時間のプログラム実行では全ての動作をトレースすることは不可能なため、キーとなるポイント(トリガポイント)を指定し、そのポイントまで、その前後、またはそれ以降のプログラムトレースを行うように指定することもある。 主に、不正な例外が発生した場合の不正処理の発生源の特定や、リアルタイムにデータのアクセスを確認することに用いられる。
CPUに接続されるメモリの値を表示し、デバッグの状況に応じて任意の値に変更することができる。 MMU(メモリ管理ユニット)実装のCPUでは、プログラムから見た論理アドレスによる操作の他、実際のメモリアドレスとなる物理アドレスでの操作も可能である。物理アドレスによるメモリ操作は、主にペリフェラルレジスタの操作に用いられる。 メインメモリの他にもキャッシュ内の値を操作するような機能を持つICEもある。 メモリ操作はアドレス指定により行うことも可能であるが、実際は変数名などのソースコードに準じた名称で行われる。