Core Contents

デバッガを支援するエミュレータとは?

デジタル機器やソフトウェアの開発において、しばしば活躍してくれるエミュレータ。
とりわけ試作段階でのバグ・欠陥の修正のための、「デバッガ支援」という役割は、開発では非常に重要です。
エミュレータを深く理解し適切に使用することは、高度な電子工作の実現に繋がります。
とは言えエミュレータはどのような役割を果たしているのか、そもそもデバッガとはどういったものなのか、よくわからない方もいらっしゃるでしょう。

この記事では、エミュレータの役割やエミュレータが支援するデバッガの重要性、実際に使用することの多いエミュレータをご紹介いたします。

エミュレーターのイメージ画像

エミュレータとは?

emulate「模倣する」という英語を語源としたエミュレータは、機械装置の動作・機能を模倣するための装置のことです。
実行させたいコンピュータや機械装置の機能をエミュレーションすることができるシステムですが、「そのコンピュータや機械装置を実際に使えばいいじゃない」そんな風に思うかもしれません。

しかしながらデジタル機器やソフトウェアの開発段階において、実機を伴うことはほとんどありません。パソコンなどの汎用ハードウェアで実行できる類のものではないためです。
また「マイコン」の状態で、動作・機能を実行させることが必要です。

マイコンとはマイクロコンピュータの略で、コンピュータ機能を一つのシリコンチップ上に集約した極小マイクロプロセッサです。
極小とはいえCPUコア(チップの心臓部)、プログラムやデータを格納するROM/RAM、インターフェースなど、コンピュータに必要なあらゆる機能が内蔵されています。
家電、車、パソコン、携帯電話など、私たちの身の回りの工業製品はマイコンで制御されています。言ってみれば、人間の頭脳にあたる部分ですね。
製品開発には頭脳であるマイコンが先に作られ、身体に搭載する前にプログラムした内容を実行してみて、不具合がないか確認し、もしあるならば修正しなくてはなりません。

そこで、エミュレータの出番です。
エミュレータはマイコンを搭載する身体の機能を全てエミュレーションしてくれるので、実機がなくてもプログラムの実行環境を確認することができるのです。
もちろんあくまで「模倣」。実際の利用環境には制約があったり、本来の性能より劣化したりするケースもあります。

しかしながら、まだ現時点では製造されていない開発中のハードウェアはもちろん、既に廃版になった機器や、クロス開発という、携帯電話や家電などの組み込みシステム(ある機能のために、家電や機器に組み込むコンピュータシステムのこと。試作段階で実機を使用することはほとんどない)、ソフトウェアの実行環境などにおいては、なくてはならない装置と言えます。

実際の使用方法を説明いたします。
まず、エミュレータの種類にもよりますが、マイコンのプログラム設計を行ったホストPCに接続します。
現在はUSB接続が主流となります。
マイコン自体もそれだけでは動かないために、電力供給回路や他の機器・端子と接続するための入出力回路が必要となります。
しかしながら前述のように、開発段階ではまだ試作であるため、実機で使われる回路は存在しない、もしくは使われません。
そこで、マイコンを動作させるのに必要な部品を実装させたマイコンボードをマイコンに取り付けます。
マイコンを搭載したボードとエミュレータ、そしてホストPCを接続して動作させますが、マイコンの動作を調べることがターゲットであるため、エミュレータに対してマイコン搭載ボードを「ターゲットボード」「ターゲット回路」などと呼ぶことがあります。

このように、エミュレーションは実際の機器がなくても、どのように動作するか確認できる機能を持っており、冒頭でも述べたように製品開発分野において必要不可欠です。
しかしながら、ただ「確認する」だけではエミュレータを適切に使用しているとは言えません。
実行してみた時、何の問題もなく、設計時に思い描いたような動作をする・理想の出力結果を出す、などといったマイコンはほとんどないでしょう。

そこで、バグや欠陥を確認し、逐一修正する必要があります。
その作業に欠かせないのがデバッガであり、エミュレータはこのデバッガと一緒に使用されてこそ真価を発揮します。

次項でデバッガを解説します。

エミュレータとセットで使われるデバッガとは?

デバッガとは、デバッグ作業を行うプログラムです。デバッグツールといった呼び方もあります。
デバッグ作業とは、コンピュータプログラムや電子制御されている機器におけるバグ・欠陥を発見することを目的とした作業です。

ただエミュレータで対象マイコンを実行させても、一気に動作してしまい、どこにバグがあったかを正確に把握することは難しいでしょう。
プログラム中のソースコードの流れや変数の中身、及びプログラムの分岐条件などを確認しながら、問題点を探ることによって適切な修正が可能となります。

そのため、デバッガには以下の機能が備わります。

  • ブレークポイントの設定
  • ソースコードの中に置くことによって、実行の流れを一時停止できる機能です。
    任意の位置での実行状況を調べることが可能となります。

  • ステップ実行
  • 処理を停止した時、ワンステップずつソースコードを確認しながら実行していく機能です。
    問題の原因を探ることが可能となります。

  • ウォッチ機能
  • ブレークポイントにおいて、メモリやレジスタの状態(ROM/RAM)を調べることのできる機能です。

  • ステップアウト機能
  • ステップ実行の手法の一つで、関数またはメソッドをひとつ飛ばして実行できる機能です。
    ワンステップずつ進むステップ実行よりも、簡略に動作確認を行えます。

  • 変数確認
  • 任意で指定した変数の中身を出力し、確認できる機能です。
    プログラムの変数は開けてみなくては何が入っているかわかりません。正誤の確認に使われます。

    以上がデバッガの代表的な機能です。
    デバッガとエミュレータがセットで使用されることによって、不具合を確認・修正する。そしてこの作業を繰り返し行う。これによって問題を解決し、正常な動作であると判断されたマイコンが実用に向けて実機に搭載されていくこととなります。
    ちなみにこういった環境が無かった時代、デバッグ作業の大変さというのは計り知れないものがありました。

    なお、よくエミュレータと混同されるシミュレータもデバッガとセットで利用されることがあります。
    ただしシミュレータはターゲットボードを始めとするハードウェア環境を必要としません。
    そのため簡易的な模擬に留まり、マイコンが内蔵するCPU機能および周辺機能の動作のシミュレーションがメインとなります。
    シミュレータのみでデバッグ作業を行うことはないでしょう。

    最近ではフラッシュメモリ(RAM/ROM双方の特長を併せ持ったメモリのこと。携帯電話を始めデジタル情報家電機器には欠かせない)を内蔵したマイコンでは、既にデバッガ自体が組み込まれているものが広く普及しています。
    また、エミュレータ自体がデバッガ機能を備えたもの。さらに、開発に必要なソフトウェア・ツールを一本化した統合開発環境(IDE:Integrated Development Environment)に組み込まれたものなどが使用されています。

実際に使われるエミュレータの種類

デバッガが組み込まれたマイコンがある、というお話をしましたが、さらにターゲットボードやエミュレータを内蔵したマイコンもラインナップされています。
しかしながら、それ以外のマイコンに対しては、別にエミュレータを用意しなくてはなりません。

実際の開発や試作段階において使用されるエミュレータはいくつかあります。
価格や機能、また、ホストPCのCPUに対応しているかどうかなどを確認しながら選択します。

代表的なエミュレータを二つご紹介いたします。

インサーキット・エミュレータ

通称ICE(アイス。In-Circuit Emulator)とも呼ばれるエミュレータです。

「エミュレータとは?」の解説の中で、マイコンを搭載したターゲットボードとエミュレータを接続する、と述べましたが、インサーキット・エミュレータではマイコンを実装しません。
なぜなら、インサーキット・エミュレータ自体がハードウェアだけでなく、マイコンと同等の機能をエミュレートし、かつデバッガも搭載しているためです。つまり、インサーキット・エミュレーターで開発中製品の脳と身体を担ってくれる、ということです(ただし全部とは限りません)。

マイコンを外したソケット(接続口)にICEを接続することで、ターゲットボードの信号を受けるという、最終製品の動作環境下において、動作確認を行うことができます。
しかも、デバッガとして基本的な機能はもちろんのこと、トレース(プログラムの実行経路の表示機能のこと。リアルタイムで表示できるので、どの命令がどの動作かを分析できる)などICEならではの機能を有しているため、非常に高精度なデバッグ作業を実現します。
さらに、高い機能を持っていることで確実に問題特定および修正ができることで、デバッグ作業の時間短縮に大きく貢献します。

とは言え高精度ゆえに比較的高額といった問題もあります。
また、ソケットを搭載したターゲットボードが必要なことに加えて、エミュレートしたいマイコンが変われば都度ICEも新調しなくてはならない、などというコストも存在します。
そのため後述するオンチップ・エミュレータをメインに使用し、細かな問題特定・解析が必要な時だけインサーキット・エミュレータを使う開発方法も採用されています。

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

デバッガ機能が既に搭載されたマイコンのエミュレーションによく使われるエミュレータです。
インサーキット・エミュレーターと比較すると精度や機能の面では低くなりますが、リーズナブルで、マイコン搭載ボードとの接続が容易であることから現在広く普及しているエミュレータの種類となります。

マイコンを搭載したターゲットボードとホストPCにUSBなどで接続したうえで動作確認を行いますが、実際にマイコンを使うため最終製品とより近い電気特性や動作環境下でのテストが可能となります。
また、あらゆるターゲットボードに対応できるのも嬉しいところ。

オンチップ・エミュレータにはいくつかの方式があります。
最近になってよく用いられるようになったのはJTAGエミュレータでしょう。
JTAG(Joint Test Action Group)という業界団体の規格のポートを利用したエミュレータとなります。
JTAGポートを使ってエミュレータと接続しますが、この手法の大きなメリットはバスの操作が自由に行えることです。加えて、ターゲットボード側にケーブルを必要としないため、環境整備のコストが抑えられるうえに周辺装置のデバッグ作業に使えるなど、汎用性が高くなります(一部CPU除く)。
JTAGに対応したマイコンは現在様々な企業がラインナップしているため、ICEと異なり別々のマイコンを同時に使用したい場合にも一つのエミュレーターで対応できるとあって、その応用範囲はますます広がっています。

一方、専用エミュレータという、マイコン販売元の、独自のCPUコア搭載マイコンにのみ対応できるエミュレータも使われます。
独自コアを搭載していると、そのマイコンの販売元以外のベンダーや販売店がラインナップしているエミュレータに対応できないというデメリットはあります。しかしながら、その販売元の製品に特化した設計・つくりを実現していることをも意味し、マイコンにとって最適な環境下での動作確認ができるということから、JTAG同様に普及しています。

▶エミュレータの購入はこちらから