AVRマイクロコントローラーのアーキテクチャは、1996年にAtmelが開発しました。ハーバード・マイクロコントローラ・アーキテクチャをベースにしており、当初から命令とデータのバスを分離して高速化を図っています。AVRは、当時広く使われていたワンタイムプログラマブルROMやEPROM、EEPROMではなく、プログラムの保存にオンチップフラッシュメモリを使用した最初期のマイクロコントローラーファミリーの一つであり、これにより開発時の書き換えやフィールドアップデートが容易になりました。
歴史と名称
AVRという名称は、開発者であるAlf-Egil BogenとVegard Wollanの頭文字に由来するとされ、一般には Alf and Vegard's RISC を略したものだと言われています。Atmel(後にMicrochipにより買収)が1990年代中頃に発売して以降、組み込み用途やホビイスト向けに広く普及しました。代表的な製品としては、ATmegaシリーズ(例:ATmega328P)があり、Arduinoプラットフォームで広く使われています。
アーキテクチャの特徴
- ハーバードアーキテクチャ:命令メモリ(Flash)とデータメモリ(SRAM/EEPROM)を独立して持ち、並列アクセスで効率を高めます。
- RISC系命令セット:命令の多くが単純で実行時間が短く、設計が効率的です。命令語長は主に16ビットで、一部32ビット命令も存在します。
- オンチップフラッシュ:プログラム領域として内蔵フラッシュを採用。ISP(In-System Programming)やボートローダで書き換え可能です。
- 1クロックでの多くの命令実行:ほとんどの命令が1クロックサイクルで完了するため、クロック周波数に比例した高い実効性能(おおむね1 MIPS/MHz)を実現します。
メモリとレジスタ構成
AVRコアは32本の汎用8ビットレジスタ(R0〜R31)を持ち、ALUに直結されています。これにより2つのレジスタに対する演算命令を1サイクルで行えるため、高速です。レジスタは一部を組み合わせて16ビットレジスタペアとして使用できます(例:R25:R24 が一般的なワーキングレジスタ対)。
メモリは通常、次の3領域に分かれます:
- Flash(プログラムメモリ)— 不揮発、書き換え可能
- SRAM(データメモリ)— 実行時のスタックや変数用
- EEPROM(オプション)— 長期保存用データ
スタックはSRAM上に置かれ、割り込みや関数呼び出しで使用されます。プログラムカウンタ(PC)はFlashのアドレス幅に合わせて幅が決まります(デバイスにより異なる)。
代表的な周辺機能(ペリフェラル)
AVRはコアだけでなく、多彩な周辺回路を内蔵している点が魅力です。代表的な機能:
- タイマー/カウンター(PWM 出力含む)
- ADC(アナログ–デジタルコンバータ)
- USART/UART、SPI、I2C(TWI)などのシリアル通信
- ウォッチドッグタイマー(WDT)
- アナログコンパレータ
- ブラウンアウト検出(BOD)や各種電源管理、スリープモード
- 一部デバイスはJTAGやPDI/UPDIなどのデバッグ/プログラミングインターフェースをサポート
性能と他アーキテクチャとの比較
従来のMCS-51(8051)アーキテクチャでは、1マシンサイクルが12クロックサイクルに相当し、命令実行に多くのクロックを要する設計のものが多くありました。これに対してAVRは多くの命令を1クロックで実行できるため、クロック周波数あたりの実効性能が高く、理論上は同じクロックで8051系の約12倍に達する場面もあります。実運用では命令の種類や周辺機能の待ち時間などの影響を受けますが、AVRは小規模な組込み用途で高効率を発揮します。
ただし、AVRは基本的に8ビットコアであるため、32ビットARMコアなどに比べると整数演算の幅や大きなメモリ空間、浮動小数点処理で劣る点があります。用途に応じて選択が必要です。
開発環境とプログラミング
AVRはホビーから商用まで幅広く使われているため、ツールチェインも豊富です。代表的なもの:
- コンパイラ/ツール:avr-gcc(GNU)、Atmel/Microchip Studio
- 書き込みツール:avrdude や専用ISPライタ(USBasp、AVRISPなど)
- デバッグ:一部デバイスはオンチップデバッグ(JTAG、PDI、UPDI)対応
- ボード:Arduinoプラットフォーム(ATmega系)で入門が容易
プログラミング方式はISP(SPI経由)、JTAG、UPDI/PDI、ハイボルテージプログラミングなどがあり、デバイスや世代によって対応が異なります。デバイス固有の「フューズビット」や「ロックビット」によってクロック源やブートローダの有効化、メモリ保護が設定できます。
用途・利点・制約
- 用途:家電制御、モータ制御、センサ読み取り、産業機器、教育用途、DIY/プロトタイピングなど
- 利点:高いコストパフォーマンス、豊富な周辺回路とパッケージ、成熟した開発環境、低消費電力設計が可能
- 制約:SRAMやFlash容量が小さい機種が多く、大規模なデータ処理や複雑なOSには向かない。8ビット幅ゆえに大きな数値演算では効率が落ちる
総じて、AVRは学習コストが低く、組み込み入門や小〜中規模の組み込みシステムに最適な選択肢です。最新世代では消費電力や機能も改善されており、現在でも幅広い用途で活用されています。

