Chapter 13
メモリ IC の中身
この章がなぜ必要なのか——メモリの「性格」は、セル構造から決まっているから.
- 「なぜ SRAM は速いのに容量が小さいのか」
- 「なぜ DRAM はリフレッシュが要るのか」
- 「なぜ NAND フラッシュは書き換え回数に制限があるのか」
- 「なぜ Flash の消去単位は大きいのか」
- 「なぜ EEPROM は 1 バイト書けるのに Flash はできないのか」
これらは全部、1 ビットを蓄える回路の構造から出てくる。 逆に言えば、セルの絵を 1 枚覚えれば、 データシートの制約はほぼ全部説明できる。
この章で使う既出の用語(定義は各リンク先). 逆方向(04 章 1 節)、メモリセル(05 章)、増幅(05 章 2 節)、MOSFET(06 章 6 節)、不可(06 章 6 節)、CMOS(07 章 2 節)、反転(08 章 2 節)、インバータ(09 章 2 節)、NAND(11 章 2 節)、NOR(11 章 2 節)、温度(11 章 3 節)、直列(11 章 2 節)
1. メモリの分類——何で覚えているか
「メモリの種類」は無数にあるように見えるが、1 ビットを何で保持しているかで きれいに分かれる。
| 保持の方法 | 種類 | 電源を切ると |
|---|---|---|
| 回路の状態(正帰還ループ) | SRAM、レジスタ、フリップフロップ | 消える |
| キャパシタの電荷 | DRAM | 消える(しかも数十 ms で自然に消える) |
| 絶縁膜の中に閉じ込めた電荷 | Flash、EEPROM | 残る(10 年オーダ) |
| 配線の有無(物理的な結線) | Mask ROM、ヒューズ ROM/OTP | 残る(永久) |
| 物質の状態(結晶/非晶質、磁化、抵抗) | PCM、MRAM、ReRAM | 残る |
この分け方から、性質はほぼ自動的に決まる。
| 保持方法 | 速さ | 密度 | 書き換え耐性 | 待機電力 |
|---|---|---|---|---|
| 回路の状態 | 最速 | 最低 | 無限 | リーク電流のみ |
| キャパシタ | 速い | 高い | 無限 | リフレッシュが要る |
| 絶縁膜の電荷 | 書きが遅い | 最高 | 有限(10³〜10⁵ 回) | ゼロ |
| 物理結線 | 速い | 高い | ゼロ(or 1 回) | ゼロ |
「速い・大きい・消えない」は 3 つ同時に成立しない.
- 回路で覚える → 速いが 1 ビットに 6 個のトランジスタが要る(大きい)
- 電荷で覚える → 小さいが、電荷は漏れる(消える or リフレッシュ)
- 絶縁膜に閉じ込める → 消えないが、閉じ込めるのに高い電圧と時間が要る(遅い)
メモリ階層(レジスタ → キャッシュ → RAM → Flash)が存在するのは、 この 3 すくみが物理的に解けないからである。
メモリセルの構造を比べる
各方式のセル構造と、そこから出てくる性質を並べて見る。 セル面積・速度・耐性のトレードオフが、構造から直接来ていることを確認する。
2. SRAM——回路の状態で覚える
6T セル
SRAM の 1 ビットは、インバータ 2 個を向かい合わせにしたものである。
インバータ A の出力がインバータ B の入力、 インバータ B の出力がインバータ A の入力になっている。
これは 正帰還ループである。
- Q = H なら、QB = L になり、その QB が Q を H に保つ
- Q = L なら、QB = H になり、その QB が Q を L に保つ
つまり どちらの状態も自己保持する。これがメモリになる。
なぜ「たすき掛け」で覚えられるのか.
山の頂上にボールを置くと、どちらかに転がり落ちて止まる。 谷は 2 つ(Q=H と Q=L)あり、どちらに落ちてもそこに留まる。
12 章のメタステーブルは、 このボールが頂上で止まってしまった状態である。 SRAM セルもフリップフロップも同じ回路なので、同じ現象が起きる。
読み出し
- BL と BLB を両方 VDD にプリチャージする
- WL(ワード線)を H にする → M5・M6 が導通
- Q = L 側のビット線が、M1 を通じてゆっくり放電される
- BL と BLB に 数十 mV の差が出たところで、センスアンプが増幅して 0/1 を判定
ポイント: 差が数十 mV になった時点で判定する。 フルスイング(0 V まで放電)を待たない。だから速い。
読み出しでデータが壊れかける.
WL を開けた瞬間、VDD にプリチャージされた BL が、 Q = L のノードを引き上げようとする。 これが強すぎるとセルが反転してしまう(リードディスターブ)。
防ぐには、M1(プルダウン NMOS)を M5(アクセス)より強くする。 この強さの比を βレシオ(通常 1.2〜2)と呼ぶ。 SRAM セルのトランジスタサイズが全部違うのは、この調整のためである。
書き込み
- BL を書きたい値、BLB をその反転にドライブする
- WL を H にする
- ビット線ドライバがセルのインバータより強いので、セルが力ずくで反転する
書き込みでは「アクセストランジスタがセルの PMOS に勝つ」必要がある。 読み出しでは「セルの NMOS がアクセストランジスタに勝つ」必要がある。
この 2 つは相反する要求である。 SRAM の設計が難しいのはここで、 電圧を下げるほど両立が難しくなる(低電圧化の壁)。
SRAM の性質——構造から出てくること
| 性質 | 理由 |
|---|---|
| 速い(サイクル 1〜10 ns) | 差動読み出し + センスアンプ。充放電を待たない |
| 面積が大きい | 1 ビットに 6 トランジスタ。DRAM の 6〜10 倍 |
| リフレッシュ不要 | 電源が繋がっている限り正帰還が保持する |
| 待機電流がある | リーク電流。微細プロセスほど無視できない |
| 書き換え無限 | ただの回路の状態。物理的な劣化がない |
| 論理プロセスで作れる | 特殊な工程が不要 → MCU に内蔵できる |
MCU の RAM が SRAM なのは、最後の行が理由である。 DRAM や Flash は特殊な製造工程が要るが、SRAM は普通の CMOS で作れる。
ソフトの人が知っておくと得すること.
- SRAM は電源が入っていれば内容が残る。 リセットしても消えない。 → ウォッチドッグリセット後にログを引き継ぐ、といった技が使える (ただし「リセット時にクリアする」スタートアップコードが動くと消える)
- 未初期化の SRAM の値はランダムだが、個体ごとに偏りがある。 これを利用したのが SRAM PUF(IoT セキュリティ編 04 章)
- 消費電力はアクセス頻度でほぼ決まらない。 容量に比例したリークが常に流れる
3. DRAM——キャパシタの電荷で覚える
1T1C セル
トランジスタ 1 個とキャパシタ 1 個だけ。 これが DRAM が高密度な理由である。
セル面積は理論限界に近く、6F²(F = 最小加工寸法)程度。 SRAM の 6T セルは 120〜150F² なので、20 倍以上の差がある。
読み出し——破壊読み出し
- BL を VDD/2 にプリチャージする
- WL を H にして、セルのキャパシタを BL に繋ぐ
- 電荷が分配される
セル容量 \(C_s \approx 25\) fF に対し、 ビット線容量 \(C_{BL} \approx 250\) fF(数百セルがぶら下がっている)。
\(V_{DD} = 1.2\) V、セルが H(1.2 V)なら:
わずか 55 mV。 これをセンスアンプで増幅して判定する。
ここで 2 つの重大な帰結が出る.
(1) 読むと壊れる。 電荷を BL に分けてしまったので、セルの電荷はもう元の値ではない。 だから DRAM は 読み出した直後に必ず書き戻す(センスアンプが増幅した フル電圧をセルに戻す)。これを リストアと呼ぶ。
(2) ビット線を長くできない。 \(C_{BL}\) が増えると \(\Delta V\) が減る。 だから 1 本のビット線にぶら下げられるセル数には上限がある(256〜1024 程度)。 DRAM の内部が細かくバンク分割されているのはこのためである。
リフレッシュ
キャパシタの電荷は、アクセストランジスタのオフリーク・接合リークで漏れる。
保持時間は室温で 64 ms 程度(規格上の保証値)。 だから 64 ms 以内に全行を読んで書き戻す必要がある。これがリフレッシュ。
| 項目 | 値の目安 |
|---|---|
| リフレッシュ周期 | 64 ms(85 ℃ 超では 32 ms) |
| 行数 | 8192 行(DDR3/4 の一般的な値) |
| リフレッシュ間隔 tREFI | 64 ms / 8192 = 7.8 µs |
| 1 回の所要時間 tRFC | 数百 ns |
| 帯域の損失 | 数 % |
温度でリフレッシュ周期が変わる.
リーク電流は温度で指数関数的に増える(10 ℃ で約 2 倍)。 だから 85 ℃ を超えると周期を半分(32 ms)にする。 DDR3 以降には温度センサが内蔵されていて、 温度に応じてリフレッシュ頻度を自動で変えるモードがある。
逆に、冷やすと保持時間が劇的に伸びる。 これがコールドブート攻撃(メモリを冷却して電源断後も内容を読む)の原理である。
DRAM の性質
| 性質 | 理由 |
|---|---|
| 高密度・安価 | 1T1C。面積が SRAM の 1/20 |
| リフレッシュが必要 | 電荷が漏れる |
| 読み出しが破壊的 | 電荷分配で読むため。必ず書き戻す |
| レイテンシが大きい | プリチャージ → 行活性化 → センス → 読み出し、と段階が多い |
| 専用プロセスが要る | 深い溝や積層のキャパシタを作る特殊工程 → MCU に内蔵しにくい |
| バーストは速い | 一度行を開けば、その行の中は連続で高速に読める |
「ランダムアクセスは遅いが、連続アクセスは速い」 という DRAM の性格は、 行を開ける(活性化する)のが高コストという構造から来ている。
ソフトの人が知っておくと得すること.
配列を行方向に走査するのと列方向に走査するので速度が何倍も違うのは、 キャッシュラインの話であると同時に、DRAM の「開いた行」の話でもある。 同じ行の中を連続で読めば、行の開け閉めが起きない。
Row Hammer——構造由来の脆弱性.
同じ行を極めて高頻度でアクセスすると、 隣接する行のセルの電荷が抜けてビットが反転する。 微細化でセル間の距離が縮まったために顕在化した。
これは「ソフトのバグ」ではなく 物理現象なので、 ソフト側での完全な防御は難しい。 対策は主にハード側(TRR、ECC、リフレッシュ頻度増加)。
4. 不揮発メモリ——絶縁膜に電荷を閉じ込める
フローティングゲート
MOSFET のゲートの下に、どこにも繋がっていない導体(フローティングゲート) を埋め込む。
フローティングゲートは絶縁膜で完全に囲まれている。 一度電子を入れると、逃げ道がない。
電子が入っている → 閾値電圧 \(V_{th}\) が上がる → 読み出し電圧では ON しない → "0" 電子が入っていない → \(V_{th}\) が低い → 読み出し電圧で ON する → "1"
つまり 1 ビットの情報を「そのトランジスタの閾値電圧」として保存している。
なぜ 10 年保持できるのか.
絶縁膜(SiO₂)のバリアは約 3.2 eV。 室温の熱エネルギー(0.026 eV)では、 電子がこれを越える確率は天文学的に小さい。
ただし 完全にゼロではない。だから保持期間は「10 年」と有限に書かれる。 しかも高温では急速に悪化する(データ保持は温度で加速される)。 車載品が高温での保持を厳しく規定するのはこのため。
書き込みと消去——高電圧が要る
| 動作 | 方法 | 必要な電圧 |
|---|---|---|
| 書き込み(電子を入れる) | FN トンネリング or ホットエレクトロン注入 | 15〜20 V |
| 消去(電子を抜く) | FN トンネリング(逆方向) | 15〜20 V |
| 読み出し | 普通に \(V_{th}\) を見るだけ | 電源電圧 |
3.3 V の MCU の中で、なぜ 18 V が作れるのか。 → チャージポンプ(内蔵の昇圧回路)で作っている。
これが Flash の制約のほぼ全部を説明する.
制約 理由 書き込みが遅い(µs〜ms) トンネル電流はごく小さい。時間をかけて電荷を運ぶ 消去がもっと遅い(ms〜s) 同上 + 大きなブロックを一度に処理 書き込み中は読めない(RWW 制約) チャージポンプが動いていて内部が高電圧 消費電流が跳ねる チャージポンプの動作電流。書き込み中は数 mA〜数十 mA 書き換え回数に限りがある 高電圧で絶縁膜が少しずつ壊れる 電圧が足りないと書けない チャージポンプが規定電圧を作れない
なぜ書き換え回数に制限があるのか
トンネル酸化膜を電子が通過するたびに、膜に欠陥(トラップ)が少しずつ増える。
- トラップに電子が捕まる → \(V_{th}\) がずれる → 0/1 の判定余裕が減る
- トラップが繋がる → リーク経路ができる → 電荷が抜ける → データが消える
| 種類 | 書き換え耐性 |
|---|---|
| NOR Flash(MCU 内蔵コード領域) | 10⁴〜10⁵ 回 |
| EEPROM | 10⁵〜10⁶ 回 |
| SLC NAND | 10⁴〜10⁵ 回 |
| MLC NAND(2 bit/cell) | 3×10³ 回 |
| TLC NAND(3 bit/cell) | 10³ 回 |
| QLC NAND(4 bit/cell) | 数百回 |
多値化すると耐性が落ちるのはなぜか.
1 セルに 3 ビット(TLC)入れるということは、 閾値電圧を 8 段階に区別するということである。
多値化するほど 1 段あたりの余裕が減る。だから TLC・QLC は書き換え耐性が桁で落ちる 同じ \(V_{th}\) のずれでも、TLC ではすぐ隣の状態と重なってしまう。 だから「劣化した」と判定される回数が早く来る。
同じ物理セルでも、SLC モードで使えば耐性は 100 倍になる。 産業用 SSD が「pSLC モード」を持つのはこのため。
NOR と NAND——並べ方の違いが全部を決める
| NOR Flash | NAND Flash | |
|---|---|---|
| セル面積 | 大きい(各セルにコンタクトが要る) | 小さい(直列なのでコンタクトが少ない) |
| ランダム読み出し | 可能・高速(数十 ns) | 不可(ページ単位で読む、数十 µs) |
| XIP(直接実行) | 可能 | 不可(RAM にコピーが必要) |
| 読み出し単位 | バイト/ワード | ページ(2〜16 KB) |
| 書き込み単位 | ワード〜ページ | ページ |
| 消去単位 | セクタ(4〜64 KB) | ブロック(数百 KB〜数 MB) |
| ビットエラー | ほぼ出ない | 出る前提(ECC 必須) |
| 用途 | MCU の内蔵コード領域、ブートフラッシュ | SSD、eMMC、SD カード |
MCU の内蔵 Flash が NOR なのは、XIP(そこから直接命令をフェッチする) できる必要があるからである。
NAND は「エラーが出る前提」で設計されている.
NAND は出荷時点で不良ブロックが存在する(Bad Block Table が 工場で書き込まれている)。使用中にも増える。 ビットエラーも日常的に発生する。
だから NAND を使うシステムには必ず:
- ECC(BCH や LDPC。TLC では 1 KB あたり数十ビット訂正)
- ウェアレベリング(書き込みを分散させる)
- 不良ブロック管理
が必要になる。SSD や eMMC はこれらを内蔵コントローラでやってくれる (だから「生の NAND」より高い)。
→ 誤り訂正の詳細は姉妹シリーズ「符号と暗号」を参照。
なぜ「消去してからでないと書けない」のか
Flash の書き込みは 1 → 0 の方向しかできない(電子を注入する方向)。 0 → 1 に戻すには消去が必要で、消去はブロック単位でしかできない。
なぜブロック単位かというと、 消去は基板側から一括で高電圧をかけるからである。 セルごとに基板を分離することはできない。
これがファイルシステムの設計を支配する.
- 上書きができない → 新しい場所に書いて、古い場所を無効にする(ログ構造)
- 無効な領域が溜まる → まとめて回収する(ガベージコレクション)
- 有効データを退避してからブロック消去 → 書いた量より多く書く (Write Amplification)
- 同じブロックばかり消すと死ぬ → ウェアレベリング
LittleFS、SPIFFS、YAFFS、F2FS といったフラッシュ向けファイルシステムが 普通の FAT と違う構造をしているのは、全部このためである。
Flash の書き換えと摩耗を見る
書き込み単位・消去単位・ウェアレベリングの有無を変えて、 Write Amplification と寿命がどう変わるかを見る。
5. EEPROM——なぜ 1 バイト書けるのか
EEPROM も原理は Flash と同じフローティングゲートである。違いは構成。
| Flash | EEPROM | |
|---|---|---|
| セル構成 | 1 トランジスタ | 2 トランジスタ(選択 Tr + セル Tr) |
| 消去単位 | ブロック(KB 単位) | バイト |
| 密度 | 高い | 低い(Flash の 1/2〜1/3) |
| 単価 | 安い | 高い |
| 耐性 | 10⁴〜10⁵ | 10⁵〜10⁶ |
バイトごとに選択トランジスタを付けたので、バイト単位で消去できる。 その代わり面積が倍になる。
「EEPROM がない MCU」で設定値を保存するには.
最近の MCU は EEPROM を積まず、Flash だけのものが多い。 その場合は次のどれかになる。
方法 内容 EEPROM エミュレーション Flash の 2 セクタを交互に使い、追記でログ的に書く。ベンダがライブラリを提供している 外付け EEPROM I2C/SPI の 24Cxx / 25Cxx シリーズ。数十円 FRAM 後述。書き換え無限・高速 RTC のバックアップレジスタ 数十バイト。電池が要る 注意: EEPROM エミュレーションは「書き込み中に電源が切れる」ケースを 必ず検証すること。 ここは事故が多い。
6. 新しい不揮発メモリ
| 種類 | 原理 | 特徴 | 現状 |
|---|---|---|---|
| FRAM/FeRAM | 強誘電体の分極方向 | 書き換え 10¹²〜10¹⁴ 回・書き込みが RAM 並に速い・低消費 | TI MSP430FR 系などで実用。容量は小さい(〜数百 KB) |
| MRAM/STT-MRAM | 磁気トンネル接合の磁化方向 | 高速・高耐性。組み込み Flash の置き換え候補 | 22 nm 以降のプロセスで eFlash の代替として採用が進む |
| PCM/PRAM | カルコゲナイドの結晶/非晶質 | Flash より速く、DRAM より安い | 3D XPoint として製品化されたが事業終息 |
| ReRAM | 金属酸化物の中のフィラメント形成 | 単純な構造・積層可能 | 一部で製品化 |
FRAM は組み込みで実際に効く.
- ログを取り続ける用途で Flash の寿命を気にしなくてよい
- 書き込みに時間がかからないので、電源断でデータが中途半端にならない
- 消費エネルギーが小さいので、エナジーハーベスティング機器に向く
弱点は容量と単価、そして読み出しが破壊的(DRAM 同様、書き戻す)。
7. 実務——MCU のメモリマップと使い分け
典型的な MCU の中身:
| 領域 | 実体 | サイズの目安 | 特徴 |
|---|---|---|---|
| コード領域 | 内蔵 NOR Flash | 32 KB〜2 MB | XIP。書き換えは 10⁴ 回程度 |
| RAM | SRAM | 4 KB〜1 MB | 高速。電源断で消える |
| バックアップ RAM | SRAM(別電源) | 数十バイト〜数 KB | VBAT で保持 |
| EEPROM(あれば) | EEPROM | 数百 B〜数 KB | バイト書き換え |
| OTP / eFuse | 一度きり | 数十〜数百バイト | 鍵・シリアル番号 |
| 外付け | QSPI NOR / eMMC | MB〜GB | XIP 可(QSPI + キャッシュ) |
気をつけること
| 落とし穴 | 内容 |
|---|---|
| Flash からの実行は遅い | 高クロックでは待ちが入る。フラッシュアクセラレータ/プリフェッチの設定を確認。時間クリティカルな関数は RAM に置く |
| Flash 書き込み中は実行が止まる | 同じバンクを読めない。割り込みハンドラが Flash にあるとハングする。RAM に置くか割り込み禁止に |
| 書き込み中の電源断 | ブロックが中途半端になる。二重化 + チェックサムが基本 |
| 温度と書き換え回数の関係 | 高温での書き換えは寿命を縮める。保持期間も縮む |
| SRAM は初期化されない | 起動時の値は不定。.bss のクリアはスタートアップコードの仕事 |
| スタックとヒープの衝突 | SRAM 上で向かい合って伸びる。リンカスクリプトの上限確認 |
| ECC 付き SRAM の副作用 | 一部の MCU では未初期化 SRAM を読むと ECC エラーで例外が出る |
「Flash の寿命」を実感する計算.
1 分に 1 回、設定値を Flash セクタに書き換えるプログラムがあるとする。 耐性 10⁴ 回とすると:
\[ \frac{10^4\ \text{回}}{60\ \text{回/時}} = 167\ \text{時間} \approx 7\ \text{日} \]1 週間で壊れる。
対策は、(1) 書き込み頻度を落とす、(2) 追記型にして摩耗を分散する、 (3) FRAM か外付け EEPROM を使う、(4) RAM にためて電源断検出時に書く。
メモリ階層のアクセス時間を比べる
レジスタから外部 Flash まで、アクセス時間を対数スケールで並べる。 「なぜ階層が要るのか」が桁の差として見える。
まとめ
| ポイント | 内容 |
|---|---|
| 分類の軸 | 何で 1 ビットを覚えているか。ここから全性質が出る |
| 3 すくみ | 速い・大きい・消えない は同時に成立しない。だから階層ができる |
| SRAM | 6T の正帰還ループ。速い・大きい・リーク電流。論理プロセスで作れる |
| SRAM の設計 | 読み(壊さない)と書き(反転させる)が相反する要求 |
| DRAM | 1T1C。面積は SRAM の 1/20。読み出しは 55 mV 程度の差を検出 |
| DRAM の宿命 | 破壊読み出し → リストア、電荷が漏れる → リフレッシュ(64 ms) |
| Flash | フローティングゲートに電荷を閉じ込め、\(V_{th}\) として記憶 |
| Flash の遅さ | 書き込み・消去に 15〜20 V が要る(内蔵チャージポンプ) |
| 書き換え制限 | 高電圧でトンネル酸化膜に欠陥が溜まる。多値化するほど早く効く |
| NOR vs NAND | NOR = ランダム読み出し・XIP 可、NAND = 高密度・ページ単位・ECC 必須 |
| 上書き不可 | 1→0 しか書けず、0→1 はブロック消去のみ → ログ構造 FS・GC・WA |
| EEPROM | 2T セルでバイト単位消去。密度と引き換え |
| FRAM | 書き換え 10¹² 回・RAM 並の速度。ログ用途で効く |
| 実務の事故 | Flash 書き込み中の割り込みハンドラ、書き込み中の電源断、書きすぎによる摩耗 |
次章からは第 V 部——電源 IC に入る。 まずは最も基本的な、LDO の中身から。