2 組み込みシステム開発環境の遷移

2.1 半導体技術

 半導体技術の革新的な進歩を抜きにして,組み込みシステム開発環境の遷移は語ることができません.1947年にトランジスタが,1957年にICが発明されて以来,一貫して微細化,高速化を成し遂げています.半導体の集積度はほぼ1年半で2倍といわれており,今日では,10億個以上のトランジスタの集積を可能にしています.

 こういった革新的な進歩のもと,ここ数年,登場した考え方がSoC(System on Chip)です.SoCは従来のようなプリント基板の上にCPU,ROM,RAM,ASSP(Application Specific Standard Product)といった半導体を並べてシステムを構成するのではなく,一つの半導体チップ上にシステムにとって必要な機能をすべて実現させるものです(図5).このSoCが脚光を浴びるようになってきた背景の一因として,携帯電話などの高性能なモバイル機器が急速に伸びていることがあげられるでしょう.

〔図5〕SoC

 マイクロプロセッサ,チップセット,ビデオチップ,メモリなどの機能が1チップに集積されることにより,実装に必要な面積が劇的に縮小し,同等の機能をもつ複数チップによるシステムと比べて消費電力も格段に抑えることが可能になります.小型化し,省電力が求められるモバイル機器にはうってつけの技術といえます.では,このような半導体技術の進歩にともない,組み込みシステムを構成する主要な要素である,「ソフトウェア」の開発手法はどのように遷移したのでしょう.

2.2 組み込みソフトウェア

 組み込みシステムで使用されるソフトウェアを組み込みソフトウェアと呼びます.一般的に,組み込みソフトウェアの開発はWindowsアプリケーションのようなPC上のソフトウェア開発とは異なり,クロス開発環境で行われます.クロス開発環境とは,ホストマシン(プログラムのコンパイルやリンクを行うマシン)とターゲットマシン(コンパイルされたプログラムを実行するマシン)が異なる開発環境のことを指します(図6).

〔図6〕クロス開発環境

2.3 SoC出現前の組み込みソフトウェア開発手法

 SoCのような高集積,高速化された半導体チップが出現する以前,開発環境として重宝され続けてきた環境が,ICEを使用した開発です(図7).ICEとはターゲット上のCPUの実装される場所にプローブ(CPUが内蔵されたもの)を当て,CPUの代わりに動作をエミュレーションしてくれるのと同時に,デバッガと連動して組み込みソフトウェアの動作検証が可能な装置のことです.

〔図7〕ICEを使用した開発環境

 ICEには外部メモリ(ROM/RAMなど)を代替するエミュレーションメモリ機能があり,プログラムのダウンロードや変更などが容易です.とくに,外部バス情報をリアルタイムに検証するリアルタイムトレース機能はプログラムのデバッグには欠かせないものであり,探すのが困難なバグを瞬時に発見することも可能です.開発初期段階の周辺デバイスとのインターフェースの整合性の調査,デバイスドライバ作成時の不具合発見などには有効です.

 しかし,周辺回路やIPなどがユーザーでカスタマイズされたSoCではCPUのコントロール信号が内部に集約されてしまうため,SoCの外部ピンをプロービングしてもCPUのエミュレーションはできません.こうした周辺回路の統合,またはCPU動作周波数の高速化などにより,SoCをICEでデバッグするためには,ICEを意識してチップを開発する必要があるうえに,ICEはすべて特注品となり,製品のTime-To-Marketの実現,開発費の削減が必須となってきた今日では,ある意味限界に達した感がある開発環境といえるでしょう.

2.4 SoC出現後の組み込みソフトウェア開発手法

 CPUのコントロール信号が外部に出ないSoCや,高集積化されたがゆえに,配置されるピン間が非常に狭くなり物理的にプローブを接続するのが困難になってきた半導体チップ上のソフトウェアの開発手法として注目されてきたのが,OCD(On Chip Debug)です.OCDとは,CPUにデバッグ機能を埋め込む手法です.OCDはBDM(Background Debug Monitor)やUDI(User Debug Interface),JTAG(Joint Test Action Group)など,半導体チップを供給するメーカーにより方式が異なります.

 その中でも主流は,JTAGを利用する方法です.元来,JTAGはIEEE 1149.1という規格を推進したグループの名称ですが,今では規格名よりグループ名で広く普及しています.この規格では,バウンダリスキャン・アーキテクチャとこの機能に外部からアクセスするためのシリアルポートの仕様を規定しています.

 バウンダリスキャン・アーキテクチャとは,ターゲットとなるICとデータのやりとりをするためのアーキテクチャです.IC内部のコアロジックと各ピンの間に,テストプローブと等価な働きをする「セル」と呼ばれるレジスタを配置し,これを結合してシフトレジスタを構成,このシフトレジスタを制御することにより,テストコードの入力とこれに対する応答によりテストを実行していきます.このように,デバイスの内部と外部の境界をスキャニングすることから,バウンダリスキャン・アーキテクチャと呼ばれます.

 JTAGエミュレータはバウンダリスキャンを用いて,CPU内にあるデバッグ機能にアクセスします(図8).従来のICEとは異なり,実際のCPUを使用するため,プローブを着けたときに信号タイミングがずれることや,消費電力が変わるなどということがありません.また,プローブをつける必要がないため,取り扱いが楽になります.

〔図8〕JTAGエミュレータ

 しかしながら,JTAGエミュレータは従来のICEに近い機能は提供できますが,エミュレーションメモリが存在しないため,ターゲットの実メモリ上にプログラムをダウンロードする必要があります.また,リアルタイムトレース用のメモリも存在しないため,リアルタイムトレースができないなどの制限もあります.

2.5 その他の組み込みソフトウェア開発手法

 ICEやJTAGエミュレータが出現する前から現在に至るまで,長年,組み込みソフトウェア開発において,使用され続けている開発手法を二つ紹介します.一つは,ROMモニタを利用した手法です.ICE用のICソケットやJTAGエミュレータといったデバッグを行うためのハードウェア的なしかけがないターゲットCPU上でもソフトウェアの動作検証を可能にするために,ターゲットボードに実装されているROMにデバッグモニタと呼ばれるプログラムを書き込んでおき,そのプログラムが開発ホストとシリアルやパラレル経由で通信してコマンドを受け取り,プログラムの実行を制御することができます.

 ROMモニタは,ICEやJTAGエミュレータのようにハードウェア的なデバッグのしくみを提供するのではなく,プログラム,すなわち,ソフトウェア的なデバッグのしくみを提供します(図9).そのため,ハードウェアブレークや外部バス情報を取得するリアルタイムトレースなど,ハードウェア的な機能の実現が困難な場合がありますが,ICEやJTAGエミュレータで使用する専用のボックスが不要であり,製品化後の保守デバッグが容易になるなど,さまざまな応用的な機能を比較的簡単に実装できます.しかしROMモニタは,メモリが内蔵されたチップでは物理的に無力になってしまい,使用できなくなります.

〔図9〕ROMモニタを使用した開発環境

 二つ目がISS(Instruction Set Simulator)です.ISSは,ターゲットマシンがなくても,ホストマシン上で,ターゲットCPUがもつ命令セットを疑似的に実行できるソフトウェアです(図10).

〔図10〕ISSを使用した開発環境

 ISSは,CPUがもつパイプライン処理を正確に行うものから,クロックの精度が実システムのプラスマイナス数〜数十%程度の誤差で済むようなものまであります.当然,ISSはソフトウェアで実現するので,実CPUと同等の精度に近づければ近づけるほど,処理速度は落ちます.精度と速度はトレードオフの関係になります.また,命令セットを疑似的に動作させるだけではなく,周辺デバイス(タイマ,割り込み)のシミュレーションを行うような高機能なISSもあります.

 ISSを採用するメリットとしては,ターゲットマシンがなくてもソフトウェアの開発を行えることでしょう.とくに組み込みシステムの世界では,コスト要求が非常に厳しいため,試作機の作成は必要最小限に抑えなければならず,またハードウェアの不具合・リリースの遅れにより,ソフトウェア開発が遅れてしまうことは多々あります.それらを解消するためには,ISSを使用した先行開発手法は有用でしょう.

 しかし,しょせん「ソフトウェアエミュレーション」なので,実ターゲットとまったく同等の動作を期待することはできません.使い方しだいです.

 ここまで組み込み開発環境の遷移について,開発手法にスポットを当てて述べてきましたが,どの手法にも一長一短があります.ただ,半導体技術の革新的な進歩に,今日までの組み込みソフトウェアの開発手法が追いついていないように思えます.そのせいか,新しい開発手法を望んでいる声を開発現場からよく耳にします.

以降の内容は本誌を参照ください

インデックス
1 組み込みシステム
◆2 組み込みシステム開発環境の遷移

今月号特集トップページへ戻る


Copyright 2003 宮原淳一