概要
MPU(Microprocessor Unit:マイクロプロセッサユニット)は、演算処理能力を中心に設計された高性能な半導体チップです。マイコン(MCU)が周辺機能をチップ内に取り込んで自己完結した動作を実現するのに対し、MPUはCPUコアを中心に据え、外付けのDRAM・NORフラッシュ・NANDフラッシュ・各種コントローラと組み合わせることで高い処理能力を発揮します。
組み込み分野では「アプリケーションプロセッサ」と呼ばれることも多く、LinuxやAndroidなどのリッチOSを動作させるための基盤として使われます。スマートフォン・タブレット・カーナビ・産業用HMI(Human Machine Interface)・ネットワーク機器など、処理能力とソフトウェア資産が重要な用途で採用されます。
MPUはMMU(Memory Management Unit)を内蔵するものが多く、仮想メモリと保護機構によってOSが複数プロセスを安全に動作させることができます。これがMCUとの最大の違いの一つです。
歴史・背景
マイクロプロセッサの歴史は1971年のIntel 4004から始まります。4ビットの計算機向けでしたが、1972年には8ビットの8008、1974年には8080が登場し汎用コンピュータへの道を開きました。
1978年にはIntel 8086(16ビット)が登場し、IBM PCの採用によって爆発的に普及。1985年にIntel 80386(32ビット、MMU内蔵)が登場し、本格的なマルチタスクOSが実現しました。
組み込み向けMPUとしては、1980年代後半からMotorola 68000シリーズがワークステーション・プリンタ・ゲーム機に採用。1990年代にはMIPS・PowerPCがネットワーク機器・ゲーム機で活躍しました。
2000年代以降はARMアーキテクチャが組み込みMPUの主流となります。ARM Cortex-Aシリーズはスマートフォン・タブレットのアプリケーションプロセッサとして採用され、現在も進化を続けています。Apple A-series・Qualcomm Snapdragon・MediaTek Dimensityなどがその代表です。
産業用途ではNXP i.MXシリーズ・Texas Instruments AM(Sitara)シリーズ・Renesas RZシリーズなどが安定したサプライチェーンと長期サポートで支持されています。
技術仕様
CPUアーキテクチャ
組み込み向けMPUで主流のアーキテクチャ:
| アーキテクチャ | 代表製品 | 動作周波数 | 特徴 |
|---|---|---|---|
| ARM Cortex-A53 | RPi Zero 2W, NXP i.MX8 | 〜1.5GHz | 低消費電力64ビット |
| ARM Cortex-A72 | Raspberry Pi 4 | 〜1.8GHz | 高性能64ビット |
| ARM Cortex-A9 | Xilinx Zynq, NXP i.MX6 | 〜1GHz | 実績豊富な32ビット |
| ARM Cortex-A55 | MediaTek, Renesas RZ/G2L | 〜1.2GHz | 効率コア |
| ARM Cortex-A76 | Raspberry Pi 5 | 〜2.4GHz | 高性能最新世代 |
| MIPS | MT7688, AR9344 | 〜580MHz | ネットワーク機器向け |
| RISC-V | Allwinner D1 | 1GHz | オープンISA |
MMU(Memory Management Unit)
MPUの重要な特徴がMMUの内蔵です。MMUは以下の機能を提供します:
- 仮想アドレス変換: 各プロセスに独立したメモリ空間を提供
- メモリ保護: プロセス間・カーネル・ユーザー空間の分離
- ページング: 物理メモリの断片化管理
- スワップ: ディスクへのページアウト対応
これによりLinux上で複数プロセスが互いに干渉せず動作できます。
メモリインターフェース
MPUが接続する外部メモリの仕様:
LPDDR4: 最大4266MT/s(〜34Gbps)、低消費電力
DDR4: 最大3200MT/s(〜25Gbps)、高帯域
LPDDR5: 最大6400MT/s(〜51Gbps)、最新スマホ向け
DDR3L: 最大1600MT/s(〜12Gbps)、産業向けに実績多数
キャッシュ構成
| レベル | 容量 | アクセス速度 | 備考 |
|---|---|---|---|
| L1 I/D$ | 16〜64KB | 1〜4サイクル | コアごとに独立 |
| L2 | 128KB〜1MB | 10〜20サイクル | コア共有の場合も |
| L3 | 1MB〜8MB | 30〜50サイクル | マルチコア共有 |
動作原理
MPUの動作はMMUとキャッシュを中心に理解できます:
- ブート: ブートROM→ブートローダー(U-Boot等)→カーネルロードの順で起動
- MMU有効化: カーネルがページテーブルを設定してMMUを有効化
- プロセス管理: OSのスケジューラが各プロセスにCPU時間を割り当て
- 仮想メモリ: 各プロセスは独自の仮想アドレス空間でメモリにアクセス
- キャッシュ制御: L1/L2/L3キャッシュがDRAMアクセスを高速化
// Linux上でのMMAPを使ったメモリマップI/O例
#include <sys/mman.h>
#include <fcntl.h>
int fd = open("/dev/mem", O_RDWR | O_SYNC);
volatile uint32_t *gpio = mmap(NULL, 0x1000,
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x3F200000);
gpio[7] = (1 << 4); // GPIO出力をHighに設定
munmap((void*)gpio, 0x1000);
用途・ユースケース
MPUが選ばれる代表的な用途:
- 産業用HMI: タッチパネル付きの機械操作パネル。Qtなどのリッチなグラフィックスを必要とする
- カーナビ・IVI: 地図表示・マルチメディア再生・通信処理をLinux上で実行
- 産業用ゲートウェイ: 複数プロトコル変換・OPC-UA・MQTTなどを同時処理
- 医療機器: 画像診断・患者モニタリングシステム
- ネットワーク機器: ルーター・スイッチ・アクセスポイント
- AIエッジデバイス: NVIDIA JetsonのようなAI推論プラットフォーム
実装・開発のポイント
ボード設計上の注意点
MPUを使った基板設計では以下が重要です:
- DDR配線: 等長配線・インピーダンス整合(50〜60Ω)が必須。ジッターが大きいと起動しない
- 電源設計: コアVDD・IOVDDなど複数電源のシーケンス管理。PMICの活用
- EMC対策: 高速DDRバスからの放射ノイズ対策。ベタGNDと適切なデカップリング
ソフトウェアスタック
[アプリケーション層] Qt / Python / Java / Node.js
[ミドルウェア層] OpenGL ES / GStreamer / D-Bus
[OS層] Linux Kernel / Android
[ブートローダー層] U-Boot / UEFI
[ハードウェア層] MPU + DDR + eMMC + ペリフェラル
Yocto ProjectやBuildrootを使ってカスタムLinuxディストリビューションを構築し、最小限のフットプリントで製品に搭載するのが一般的です。
デバイスツリー
Linuxではデバイスツリー(Device Tree)でハードウェア構成を記述します:
/ {
memory@0 {
device_type = "memory";
reg = <0x0 0x80000000 0x0 0x40000000>; /* 1GB LPDDR4 */
};
uart0: serial@40000000 {
compatible = "vendor,uart";
reg = <0x0 0x40000000 0x0 0x1000>;
clock-frequency = <48000000>;
status = "okay";
};
};
他技術との比較
MPU vs MCU
| 項目 | MPU | MCU |
|---|---|---|
| 処理能力 | 高い(GHz級) | 中〜低(MHz〜数百MHz) |
| 内蔵メモリ | なし〜少量 | あり(フラッシュ・RAM内蔵) |
| 外部DDR | 必須 | 不要(内蔵SRAM使用) |
| OS | Linux / Android | ベアメタル / RTOS |
| 起動時間 | 数秒〜数十秒 | 数ms〜数百ms |
| 消費電力 | 中〜高 | 低い |
| 単価 | 高い(数百円〜数千円) | 安い(数十円〜) |
MPU vs SoC
SoC(System on Chip)はMPUをベースにGPU・DSP・モデム・ISP(画像処理プロセッサ)などをワンチップに統合したものです。スマートフォン向けSoCは最も高機能ですが、産業用途では単機能のMPUが部品の長期調達・コスト・シンプルな設計の面から選ばれることも多くあります。