JTAGエミュレータとは
JTAGエミュレータはCPUのソフトウェア開発時に、そのデバッグを行うために使用されるものでオンチップエミュレータの1種です。
基板上のCPUをプローブに差し替えることにより、CPUの動作をそのままエミュレートするインサーキットエミュレータ(ICE)に対し、JTAGエミュレータはCPUを基板から取り外すことなく実装した状態で、そのままデバッグすることができます。
このため、製品基板と同等の電気的特性環境下での評価が可能となるため、早期製品化に貢献できるという利点があります。
JTAGエミュレータの使用用途
JTAGは、LSIや基板の検査を行うための業界標準規格であり、この技術規格に基づき各CPUメーカーはテストアクセスポート(TAP)を設計し、バウンダリスキャンテスト(Boundary Scan Test)を行っています。
その結果、JTAGエミュレータは、CPUメーカーによってその仕様が夫々異なっています。メーカー毎に異なる仕様のものをJTAGとは呼べないことから、JTAG準拠として独自の仕様によりインターフェース規格を策定し、これによりJTAGエミュレータが作られています。
JTAGエミュレータの原理
JTAGの規格は1990年にIEEE 1149.1として標準化されています。
その背景には、CPUやLSIの高性能化や高機能化に伴いピン間ピッチがどんどん狭くなった結果、CPUやLSIのピンに直接テストプローブを当ててデバッグやテストを行う事が困難になったという理由があります。
これを解決するため、チップ内部の回路を従属的につなぎ、その回路の状態を順次読み出すことにより内部回路の状態を解析する方法がバウンダリスキャンとして考案されました。
この方法であれば、いちいち、CPUやLSIのピンにテストプローブを立てることなく内部の状態を確認することができるからです。
元来、CPUやLSIのテスト方法として考案されたJTAGの規格を利用して、その後、CPUのソフト開発におけるデバッグの方法として利用されるようになりました。
JTAGにはTCK(クロック)、TDI(データ入力)、TDO(データ出力)、TMS(状態制御)、TRSTの5本の信号端子がありますが、技術規格では、これらの信号の電気的特性は定められていません。メーカーが個々に規定しています。
このようなJTAGにて実現可能なことは、CPUのデバッグ、基板検査、ICの内部回路とホストPC間通信に加えFPGAへのデータ書き込みなどです。
JTAGエミュレータによるデバック方法
設計したプログラミングの動作確認や不具合の特定、性能改善を行う時に用いられる方法を紹介します。
ステップ実行
デバックの基本で、最もよく使われる方法です。ステップ実行を行うには、実行中のグログラムを一度停止させる必要があります。停止させる方法として、ブレークポイントと呼ばれる条件設定や強制ブレーク機能があります。プログラムが停止すると、ソースコードを1行ずつ、または関数やメソッド単位ごとに実行させながらメモリやレジスタの状態、変数の内容を確認することが出来ます。
リアルタイムトレース
予想外の条件が発生した場合のデバックに使われる方法です。プログラム設計時に分岐条件の検討を十分行っても、ハードウェアと組み合わせたり、他のシステムと連動させると想定外の不具合が多々発生します。ステップ実行では、未知な条件による不具合を解析できません。そこでプログラムの実行履歴や、データアクセスのアドレスやタイプ(リード/ライト)、割り込み発生状況などをトレースメモリに記憶させ、不具合の解析を行います。
時間計測
指定された関数単位のモジュールの実行時間(開始から終了までの二点間)の最大・最小・平均値が測定できます。また、呼び出した関数(子関数)や呼び出し元の関数(親関数)との関係や、呼び出し頻度の測定が可能です。実行時間のばらつき改善や関数の構造を見直すことで、システムの性能向上に繋げます。
JTAGエミュレータによるプログラミング
FPGAへデータを書き込むには、FPGAに直接書き込む方法と、FPGAを経由してコンフィギュレーションメモリに書き込む方法があります。FPGAに直接書き込む場合には揮発性メモリ(RAM)に書き込まれるので、電源をOFF/ONする度にプログラムを書き込む必要があります。一方コンフィギュレーションメモリは不揮発メモリ(ROM)なので、一度書き込まれればプログラムが失われることはありません。
コネクタ数の削減や、製品開発のステージ(設計中、量産)に合わせて書き込み方法を選択しましょう。
参考文献
http://www.tokudenkairo.co.jp/jtag/whatisjtag.html
https://www.bitran.co.jp/ice/jtag.html
https://www.cqpub.co.jp/dwm/Contents/0027/dwm002700380.pdf
https://www.renesas.com/jp/ja/document/tnf/featured-tool-improved-debugging-efficiency-rx-and-rl78-families-introducing-external-trigger-io?language=ja
https://www.macnica.co.jp/business/semiconductor/articles/intel/122065/