組み込みソフト開発におけるJTAG/ICEの役割とは?動作中CPUを止めて解析するデバッグ技術の仕組み

ソフトウェア開発には、デバッグ作業が欠かせません。組み込みソフトにおいても、システムの信頼性を高めるには適切なデバッグ方法を選択することが重要です。

組み込みソフトのデバッグでは、「JTAG」や「ICE」がよく用いられます。また、CPUを一時停止しながらソフトウェアの動作を解析する場面が多いですが、その際の停止方法も2種類あります。

本記事では、デバッグにおけるJTAGとICEの役割について解説するほか、CPUの動作を止める2つの手法についても説明します。

JTAG/ICEとは

デバッグは、プログラムの潜在的な問題や、プログラム実行時に生じる想定外のエラーの原因を特定して修正する作業です。

組み込みシステムでは、デバッグの際にICEやJTAGが用いられます。それぞれ解説します。

ICEとは

ICE(In-Circuit Emulator)は、CPUのエミュレーターを搭載したデバッグ用ハードウェアです。開発対象の基板に接続することで、その動作をエミュレート(擬似的に実行)します。これにより、プログラムの実行状況やCPU内部の状態などを、システムの外部から確認することが可能となります。

ただし、近年では「JTAGデバッガ」または「JTAGエミュレーター」などと呼ばれるICEが主流です。これらは専用のハードウェアを接続する代わりに、開発対象のCPUが備えているデバッグ機能を使用します。CPUの内部のレジスタの値や、メモリを見ること、また、コードがどのような順序で動いているか、といったことを見ることができます。

JTAGとは

JTAG(Joint Test Action Group)は、ICやLSIの内部回路を外部からテスト・制御するための標準インターフェースを策定した団体です。その標準インターフェースには、正しくは「IEEE 1149.1」という規格名がありますが、広く団体名で「JTAG」と呼ばれています。

JTAGは、元々は基板上のICの接続状態を検査するために開発された規格です。シリアル通信を用いて、IC内部の回路と通信することが可能です。この仕組みを拡張して、CPUの内部まで確認できるデバッグ用インターフェースとしても使用されています。

組み込みソフトのデバッグにおける役割

組み込みシステムには、モニターなどの外部出力が存在するとは限りません。デバッグのためには、CPU内部の状態を直接確認する仕組みが必要です。そこで、組み込みシステムの外部からCPUを制御・確認できるJTAGやICEが用いられます。

JTAGやICEでは、デバッガを用いてレジスタの値やメモリへのアクセスといったCPUの状態を確認可能です。これにより、プログラムの詳細な実行状態を把握して、バグの原因を特定していきます。

JTAGのインターフェース

JTAGでは、標準規格(IEEE 1149.1)により基本的な通信手順や信号構成が統一されています。そのため汎用性が高く、ベンダーによらず共通のデバッガを利用したデバッグやテストが可能です。

JTAGのインターフェースは、「TAP(Test Access Port)」と呼ばれる4本の信号線を用いたシリアル通信プロトコルです。外部のデバッガは「TCK(クロック)」「TMS(状態制御)」「TDI(データ入力)」「TDO(データ出力)」の4種類の信号を用いて、IC内部へ命令やデータを送り込んだり、結果を読み出したりできます。

これらの動作は、「TAPコントローラ」により制御されます。TAPコントローラはIC内部のテスト回路の状態を適切に管理し、外部からのデータをレジスタ操作に変換することでデバッグやテストを実現します。

ICEの変遷と現代の役割

初期のICEは、開発対象の基板からCPUを取り外して接続していました。CPUの全ての機能をエミュレートした上でデバッグ機能も提供する必要があるため、比較的高価なハードウェアを使用します。これは、いわゆる「フルICE」と呼ばれる方式です。

現在では、CPUの高速化や集積度の向上により、CPUの内部信号を外部へ引き出すのが難しくなりました。そのため、「ICE」と言えば、多くの場合はJTAGデバッガを指します。これらは「オンチップデバッグ方式」であり、実際のCPUに内蔵されたデバッグ機能をそのまま使用します。JTAGのインターフェースを介してPCと接続することで、比較的安価に利用できる点が特徴です。

CPUを停止させ解析する2つの手法

CPUの動作を一時停止させるデバッグ手法では、ブレークポイント(breakpoint)と呼ばれる機能を使用します。組み込みソフト開発で使うブレークポイントには2つの種類があるので、それぞれ説明します。

ハードウェアブレークポイントによる停止

ハードウェアブレークポイントは、CPUの内部に組み込まれた専用レジスタによるデバッグ機能です。特定アドレスへのアクセスなどを条件に、CPUを停止させることが可能です。PCからコマンドを送ることで、CPUの実行や停止を制御します。

プログラムを書き換える必要がないため、頻繁に書き換えるのが現実的ではないフラッシュROMなどでも利用しやすい点がハードウェアブレークポイントの特徴です。ただし、CPU側の制限により、設定可能なブレークポイントの数には上限があります。

ソフトウェアブレークポイントによる停止

ソフトウェアブレークポイントによるCPUの停止は、対象プログラムの命令を書き換えることにより行います。

具体的には、停止させたい箇所に特殊な命令を挿入します。プログラムを実行して該当箇所に到達すると、CPUは割り込みを発生させて処理を停止するという仕組みです。

設定できる数に実質的な制限がないことは、ソフトウェアブレークポイントの利点です。ただし、プログラムを書き換えるため、タイミングがシビアなバグは再現しなくなる場合があります。

システム信頼性の向上には適切なデバッグ手法の選択が重要

組み込みシステムの信頼性を向上させるには、CPU内部の状態を直接確認しながらデバッグできる方法が必要です。そのため、JTAGやICEが広く用いられています。

また、CPUの動作を止めて解析する際には、ハードウェアブレークポイントとソフトウェアブレークポイントを利用できます。それぞれ仕組みが異なるので、不具合の性質やシステムの環境に応じて適切な手法を選択しましょう。

組み込みソフトの世界 トップへ戻る