低電力で使いやすい8ビットマイクロコントローラは今でも優れた選択肢である
私がマイクロコントローラの黄金時代と呼んでいる1990年代当時はCコンパイラが一般に使われるようになった頃で、組み込みプログラミングの仕事をしたければ、アセンブリでのプログラミングはまだ必須でした。フィールドアプリケーションエンジニア(FAE)であれば誰でも同じだと思うのですが、私もお客様を訪問し、私が買ってきたドーナツをほおばりながら注目している大勢のエンジニアの前で、自社のマイクロコントローラ製品を情熱的に絶賛してみせたものでした。
その当時、半導体の企業は、現在とは違い、毎日のように新しいマイクロコントローラを開発しているわけではありませんでした。普通は四半期に1つか2つ新製品を発表していたのです。しかし、当時も今もまったく変わらないこともあります。私がPowerPointを巧みに操りプレゼンテーションをしていた対象は、車載用制御装置を製造しているグループに所属している数十人近くのエンジニアたちでした。車載用制御装置はシンプルな小さいボックスで、goesinta(入力)/goesouta(出力)の原理で稼働します。スイッチ信号がそのボックスに「goesinta(入力)」されると、ボックスからアクチュエータ信号が「goesouta(出力)」されるのです。これは、多数のGPIOがある8ビットマイクロコントローラ用のシンプルなものです。
私はごくありきたりのプレゼンテーションを進めていたのですが、それも束の間で、部屋の後方にいる人が手を挙げて、
きっぱりとした声で「経営陣は、車体制御装置には32ビットマイクロコントローラを使い始めるべきだと決めています」と発言したのです。部屋にいた人たちのざわめきの内容から、どうやら経営陣はそのようなことを決めているわけではなく、その人物にはたとえば懇意にしている仕入れ先など(悲しいかな私の会社ではなかったのですが)、何らかの思惑があるのだと推測しました。
「御社には32ビットマイクロコントローラは不要ですし、そんなことが決まっているとは思えませんが」と、頭の中で言いました。実際には、今後のキャリアも考慮して「御社の次世代コントローラには、32ビットアーキテクチャのどのような特長が必要なのか教えていただけますか?」と無難な質問をしました。
少し間があり、その人物はどこか挑戦的な調子で「とにかく、32ビットが必要なんです」と答えました。その声からは、ためらいが感じられました。その人物の自信のなさを感じ取った他のエンジニアたちは、私の答えを聞こうとして、いそいそとこちらを向きました。
私は注意深く、8ビットアーキテクチャに対する32ビットアーキテクチャの優位性を説明しました。その企業では、より高速なクロック速度が必要なのでしょうか?その次世代製品はより複雑な数学的処理を実行するのでしょうか?ファームウェアはマルチスレッド型になり、リアルタイムオペレーティングシステム(RTOS)が必要なのでしょうか?そのファームウェアのサイズは、メモリアドレス指定を増やさなければならないほど大きくなるのでしょうか?こうした条件は、8ビットから32ビットコアへの引き上げを行う妥当な理由でしたし、これは現在でも同じです(16ビットという、中間のほどよい選択肢もありますが、それは置いておくとして)。
そして、その後8ビットと32ビットのアーキテクチャの違いに関する楽しいディスカッションが、ドーナツを食べながら行われました。8ビットのマイクロコントローラアーキテクチャは、よりシンプルで、理解しやすいプログラミングモデルです。このアーキテクチャで通常必要なのは、単一電源のみです。マーケティングでは異なる主張がされていますが、現在の8ビットアーキテクチャは、内部でのバス信号のトグルが少ないため、32ビットに比べて電力が低いのです。
実際の8ビットの例
Microchip Technologyは、長年にわたり、誇りを持って8ビットコントローラ製品を提供してきました。広く普及しているMicrochip megaAVR 8ビットコア(別名ATMega)では、従来型のHarvardアーキテクチャが利用されており、最大256キロバイト(Kbyte)のプログラムメモリに対応することができます。この製品では、シンプルなレジスタベースのアーキテクチャが使用されています。これは32の8ビット汎用(GP)レジスタを使用しており、非常にCとの相性が良いアーキテクチャです(図1)。
図1:R0~R31が指定された32の8ビットレジスタを基盤としたmegaAVRマイクロコントローラ。このレジスタは16の16ビットレジスタの形で、レジスタのペアとしてアドレス指定することもできます。(画像提供:Microchip Technology)
GPレジスタはレジスタのペアにして、16の16ビットレジスタの形式にすることができます。最後の3つのレジスタのペアは、オプションで間接アドレッシング用の16ビットアドレスレジスタX、Y、Zとして使用できます。
これらのGPレジスタの他に、megaAVRには16ビットのスタックレジスタおよび8ビットのステータスレジスタも備えています。それだけです。非常にシンプルなので、アセンブリ内でプログラミングすることができます(よく言われるように、「本物のプログラマはアセンブリでプログラミングをする」のです)。
とは言っても、megaAVRのプログラムカウンタにはアクセスできません。それはそのままにしておきましょう。
megaAVRファミリの典型的な例は20メガヘルツ(MHz)のATMEGA1609です。これは、16Kバイトのフラッシュ、2KバイトのRAM、そして256バイトのEEPROMを備えた使いやすいマイクロコントローラです。命令のほとんどは単一サイクルです。
図2:Microchip Technology ATMEGA1609は、シンプルで、柔軟、かつ低電力の8ビットマイクロコントローラであり、さまざまな環境で稼働することができます。(画像提供:Microchip technology)
また、10ビットのA/Dコンバータ(ADC)、5つの16ビットタイマ、リアルタイムクロック(RTC)、複数の低電力オプション、および2サイクルの符号付き/符号なしハードウェア乗算器を備えています。
megaAVRでは、単一サイクルのビットセットおよびビットクリア命令に加えて、1~3サイクルを必要とするビットテスト命令も使用できます。
ビット命令の重要性は、C言語に惚れ込んでいる開発者が見落としがちな点です。実際には、ネイティブのビット命令(「非アトミック命令は必要ありません」)は、性能を大幅に向上させ、コードサイズを縮小し、コードの読みやすさを改善し、複雑さを解消します。
ATMEGA1609に必要な電源は、1.8~5.5ボルトと柔軟性があり、-40°C~+125°Cで稼働することができます。電源と稼働温度が広範なのは、たまたまではありません。8ビットマイクロコントローラは、さまざまな設計環境に適合し、使用できるように設計されているのです。ここでも、切り札は「使いやすさ」です。
開発者は、時にはシンプルなプロジェクトをとにかく素早く完了しなければならない場合があります。そのような場合でも、8ビットの製品は使用しやすく、柔軟で、非常に堅牢です。これらは見逃すことができない、優れた特性です。
Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum