2003年05月02日
ARM9を使った組み込み開発を賢くスタートするには
GAIO CLUB 特集
GAIO CLUB【2003/5月号】
ARM9を使った組み込み開発をかしこくスタートするには
消費電力、実行速度を意識した ARM/Thumbコードの使い分けなどARMチップを活かす組み込みソフト/ハード設計を考える
まずはお勉強から… ARMプロセッサとは
一般的な組み込み用CPUは半導体メーカーが標準品として供給しています。組み込み機器を分解してみると、CPUには「○○プロセッサ」の様な製品名が印字されており、システムのアーキテクチャは、この製品名や型番を見れば想像がつくものがほとんどです。
ところが、ARMプロセッサの場合には、チップに「ARM」と印字されているものはほとんどなく、スペック表などを見て初めて「ARM」が採用されていることを知る場合が少なくありません。
皆様はご存知のことと思いますが、これは、ARMのビジネスモデルに関わることです。半導体の製品化までには、設計、開発、検証、製造と言うステップがありますが、ARM社はこの中の設計の一部であるIPを提供する会社であり、残りの半導体生産の過程は、すべてパートナー企業との提携で行っているからです。
ARM社と言うと大企業を想像してしまいますが、昨年度の資料での従業員者数はなんと、800名足らずとのことです。ARMは低消費電力で低価格なCPUコアをIPで供給し、SoC(システムオンチップ)への実装を得意としており、携帯電話やルーターなど低消費電力で性能も要求される分野では、大きなシェアを占めています。
組み込みに問題となる32ビット固定命令長RISC
ARMは32ビットのRISCプロセッサです。通常用いられる「ARMコード」は32ビット固定長命令であるため、命令セット自体の効率は高いですが、メモリに対するコード効率はCISCや16ビットのプロセッサに対しては劣ります。組み込みシステムでは、メモリ容量やバスの本数に制限がある場合が多く、32ビットの命令長がメモリ容量や命令フェッチ効率に対する問題となることが少なくありません。 この問題に対応して、ARMプロセッサは「Thumb(サム)コード」をサポートしています。ARMは32ビットのプロセッサですが、この中で、16ビット長の命令セットを使うことができる様に、機能拡張が行われています。
16ビット命令長をサポートするThumbコード
Thumbコードは通常のARMコードのサブセットとして実装されています。パイプラインのデコードステージのみを変更することで、16ビット命令長をサポートしています。2つのコードの主な違いは以下の通りです。
・命令を3オペランドから2オペランドに変更
・ 汎用のレジスタを16個から半分の8個に変更
・ 条件実行はサポートしない(常に無条件実行)
・ S修飾による条件フラグの非セットはできない(常にセットされる)
・ シフトと演算は1命令では実行できない(別命令で実行する)
この様に、命令や機能の数はARMコードに比較すれば制限されているのですが、特にバス幅が16ビットである場合では、命令のフェッチがARMコードの2回に対して1回で済むため、逆に実行速度が速くなることがあります。
ARMコードとThumbコードの切り替え
起動時にはARMプロセッサはARMコードでスタートします。Thumbコードへの切替は、「BX(BLX)」命令でThumb命令への分岐実行を行います。復帰も同じくBX命令を発行するだけです。
割り込みなど例外処理については、すべてARMステートで実行されます。Thumbステートの途中で例外が発生した場合は、ARMステートに自動的に切り替わり、例外実行後は、実行ステートを示す「Tビット」も同時に復帰するため、例外実行前のコードで実行が再開されます。そのため、ユーザーは、例外処理によるコードの切り替えを意識する必要は全くありません。
このように、ソフトの内容に応じて、ARMとThumbのコードを使い分ける様なことも容易に行える仕組みとなっています。
消費電力、実行速度を比較してみると…
ARMは32ビットのRISCプロセッサであるため、32ビットのバス幅のメモリへのアクセスが最も効率が良いのは言うまでもありません。しかしながら、組み込み機器では、ハード構成の成約やコストを抑える目的で16ビットバス幅を用いる場合が多くあります。この様な状況では、32ビット固定長命令であるARMコードと、16ビット固定長命令であるThumbコードを使い分けることによって、効率の良いプログラムを作成することが可能です。
実際に、16ビットバスに対してアクセスするプログラムを3つ作成し、ガイオのARM9評価ボード上でベンチマークを行いました。
インクリメントした変数をLEDに反映させる簡単な無限ループのプログラムを作成し、同じ内容のプログラムをARMコード、Thumbコードでそれぞれ作成しました。結果は以下の通りです。
実行速度は、ThumbコードがARMコードの1.6倍の実行速度になることが分かります。これは、32ビット命令長のARMコードでは、1つの命令のフェッチに2回のバスアクセスが必要であるためです。
ここで、このThumbコードのプログラムを、System PLL(クロック)を1/2にした環境で動作させて見ました。ARMコードのプログラムよりも消費電力が落ちているにも関わらず、実行速度はARMコードとほとんど同じにすることができます。バッテリー駆動の機器では、動作時間を延ばせるため、製品の付加価値を高めることにもなります。
このように、Thumbコードをうまく使い分けることが、ARMを使用した組み込み開発の重要な鍵となるのです。
ARM9のデバッグツールガイオ「デザインキット」
「デザインキット」はガイオが供給しているARM9を用いた製品設計のための、低価格オールインワン開発キットです。開発に必要な Cコンパイラなどの言語ツール、シミュレートデバッガ、PCIスロットに装着可能な評価ボード、組み込みロイヤリティフリーのμITRONリアルタイムOSをセットにして、低価格でご提供しております。
評価ボードはPCマザーボードのPCIバスに挿して使用するもので、プログラムダウンロードやデバッガとの通信が非常に高速です。頻繁にコーディング、実行、デバッグを繰り返す局面では、RS-232Cベースのツールにありがちなロード待ち時間がほとんどなく、デバッグ効率が格段に向上します。
また、チップ周辺部の消費電力を測定する専用端子を備えています。ARMの低消費電力性能を活かすための検討に非常に有効です。
ARMをご採用の際には
ARMは、小型化や高性能化を必要とする組み込み製品の開発には非常に有利なスペックを備えていますが、その反面、チップの性能を活かすには、消費電力、バス幅の選択、実行速度の検討など、今までのチップにはなかった検討内容を多く含んでいます。
ARM採用の際には、製品開発に最も有効なバス選択、ARMコード/Thumbコードの使い分けを考えてみてはいかがでしょうか。
ガイオでは、ARMの開発を容易にスタートするための「デザインキット」をはじめ、カスタムボードの受託開発など、ARMを用いた組み込みシステム開発を総合的にサポートしております。お気軽にお問い合わせ下さい。