アドレスはどう形成されるのか。ROM と RAM の違いは。SRAM と DRAM はどう動くのか。 現代のメモリ規格まで、主記憶のすべてを体系的に学ぼう。
CPU がプログラムを実行するための「作業台」
CPU のレジスタは数十個しかない。プログラムのコードもデータもすべては主記憶に格納され、 CPUが必要なものを都度読み書きする。電源を切ると内容は消えるため「一時記憶」とも呼ばれる。
フォン・ノイマン型では命令とデータを同じメモリに共存させる。 OS カーネル・実行中のプログラムコード・スタック・ヒープ・グローバル変数が それぞれのアドレス領域に配置される。
レジスタ(~1ns)→ キャッシュ(~5ns)→ 主記憶(~60–100ns)→ SSD(~100µs)→ HDD(~10ms)の順に遅くなる。 主記憶は容量と速度の現実的なバランス点に位置する。
高アドレス → 低アドレスの順に表示
n ビットのアドレスバスが持つ「場所を指し示す力」
アドレス可能な番地数
2n
n = アドレスバスのビット幅
1アドレスあたりのデータ幅
w ビット
通常は 8 ビット(1バイト)
メモリ総容量
2n × w bit
= 2n バイト(w=8 の場合)
アドレス空間 = 232 = 4,294,967,296 番地
4 GB
← 32ビット CPUの限界(4GB の壁)
アドレスバスの例(32 ビット)
各ビットが 0 or 1 → 組み合わせが「番地」になる
CPU がメモリにアクセスするとき、まず読み書きしたい番地を MAR に格納する。 MAR の内容がアドレスバスに出力され、メモリ側で対象の番地が選択される。
実際に転送されるデータを一時保持するバッファ。 読み出しではメモリからデータが MDR に入り、書き込みでは MDR の内容がメモリに送られる。
CPU → メモリへの一方向。MAR の内容を運ぶ。 ビット幅がアドレス空間の広さを決定する(32bit→4GB、64bit→16EB)。
CPU ↔ メモリの双方向。実際のデータ(命令・値)を転送する。 ビット幅(バス幅)が一度に運べるデータ量を左右する(64bit→8バイト/回)。
読み出し(RD̄)・書き込み(WR̄)・メモリセレクト(CS̄) などの制御信号を運ぶ。 誰がバスを使うかの仲裁(アービトレーション)もここ。
メモリ読み出しトランザクションの手順
「揮発性か否か」×「読み書きできるか否か」で整理する
各ビットをフリップフロップ(6つのトランジスタ)で保持する。電源がある限りデータを保持し続け、リフレッシュ操作が不要なため「Static(静的)」と呼ばれる。
SRAMセル(1ビット)
6T-SRAM
(6トランジスタ)
各ビットをコンデンサ1個+トランジスタ1個で保持する(1T-1C 構造)。 コンデンサは自然に放電するため、定期的なリフレッシュ(再書き込み)が必要。 これが「Dynamic(動的)」の由来。
行列アドレッシング(RAS/CAS)
DRAM はアドレスを行アドレス(RAS)と列アドレス(CAS)に分けて送る。 これにより同じピン数で広いアドレス空間を実現(アドレスピンを多重化)。
DRAMセル(1ビット)
1T-1C DRAM
製造時に配線パターンでデータを焼き付ける。変更不可だが大量生産コストが最安。家庭用ゲームカートリッジなどに使われた。
PROM は一度だけ電気的に書き込み可能。EPROM は紫外線照射でデータを消去して再書き込み可能。窓付きパッケージで有名。
電気的に消去・再書き込み可能。バイト単位で書き換えられる。PC の BIOS/UEFI チップに使われる。フラッシュメモリの前身。
フローティングゲート(または電荷トラップ)にトンネリングで電荷を注入・消去することでビットを表現する。不揮発性で電源を切ってもデータが保持される。
NAND フラッシュ
セルを直列接続。大容量・低コスト。SSD・USB メモリ・SD カードに使用。書き換え単位はページ/ブロック。
NOR フラッシュ
セルを並列接続。ランダムアクセス高速。マイコンのプログラム格納(XIP 実行)に最適。容量は小さい。
セルあたりのビット数(NAND)
ビット数↑ = 容量↑・コスト↓ だが耐久性・速度↓
「Dynamic(動的)」と「Static(静的)」 — 名前の違いが本質を表す
Dynamic Random Access Memory
Dynamic(動的) の意味は「データが動いて(消えて)しまう」。 1ビットをコンデンサ+トランジスタ(1T-1C)で記憶するが、コンデンサの電荷は自然に漏れる。 データを維持するには定期的なリフレッシュ(再書き込み)が必要。
コンデンサのイメージ
充電中 = 1 / 放電中 = 0
放置すると電荷が漏れてしまう → リフレッシュ必要
Static Random Access Memory
Static(静的) の意味は「データが静止したまま(消えない)」。 1ビットを6個のトランジスタ(フリップフロップ回路)で記憶する。 電源が入っている限りデータが安定して保持され、リフレッシュ不要で非常に高速。
フリップフロップのイメージ
2つのインバータが互いを安定保持
電源がある限りデータを維持 → リフレッシュ不要
| 項目 | DRAM | SRAM |
|---|---|---|
| 構造(1ビット) | トランジスタ × 1 + コンデンサ × 1 (1T-1C) |
トランジスタ × 6(フリップフロップ) (6T) |
| リフレッシュ | 必要 (64ms 以内に全行) |
不要 (電源 ON 中は安定保持) |
| アクセス速度 | 遅い 60〜100 ns |
速い 0.5〜5 ns |
| 集積度(密度) | 高い (1T-1C で面積小) |
低い (6T で面積大) |
| 製造コスト | 安い | 高い(約6倍) |
| 大容量化 | 容易 (主記憶に採用) |
困難 (複雑な回路構造) |
| 主な用途 | 主記憶(DIMM) GDDR(GPU VRAM) |
CPU キャッシュ(L1/L2/L3) レジスタファイル |
| 揮発性 | 揮発性(電源 OFF で消える) | 揮発性(電源 OFF で消える) |
※ DRAM・SRAM はともに揮発性。「電源を切っても消えない」のはフラッシュメモリ(ROM 系)。
処理を高速化するバッファとして SRAM(キャッシュ)が CPU と DRAM の橋渡しをする
CPU
演算装置
SRAM
キャッシュ
L1 / L2 / L3
DRAM
主記憶
DIMM
💡 これが「キャッシュ=SRAM、主記憶=DRAM」という使い分けの本質。高速・高価な SRAM を「緩衝役」に使うことで、安価・大容量の DRAM へのアクセス頻度を大幅に下げ、システム全体のスループットを高める。
もっともな疑問です。SRAM はリフレッシュ不要で高速なら、主記憶もすべて SRAM にすれば問題が解決するように思えます。しかし現実はそうなっていません。
SRAM の 1 ビットは DRAM の約 6 倍 のトランジスタを必要とする。同じ予算では DRAM の 1/6 以下の容量しか作れない。現在の PC メモリ(16〜64 GB)を SRAM で代替すると価格が跳ね上がる。
6T 構造は回路が複雑でダイ面積が大きい。DRAM と同じ面積では 1/6〜1/10 程度の容量しか実現できない。大容量 SRAM チップの製造は非常に困難。
大容量 SRAM はスタンバイ時の漏れ電流が多く、スマートフォン・ノート PC などのバッテリー駆動に不向き。モバイル用途では LPDDR が DRAM 系として採用される理由でもある。
✅ 結論:DRAM と SRAM は「適材適所」
安価・大容量の DRAM を主記憶に、高速・小容量の SRAM をキャッシュに — 両者を組み合わせることで性能とコストのバランスを実現する。
なぜアドレスを「行」と「列」に分けて送るのか?
DRAM チップの内部は巨大な行列(アレイ)で構成されている。 例えば 256Mbit のチップなら 16,384 行 × 16,384 列 × 1bit という構成。
アドレスピンを多重化して行アドレスと列アドレスを時分割で送ることで、 ピン数を約半分に削減できる。これが RAS(Row Address Strobe)/ CAS(Column Address Strobe)の仕組み。
DDR タイミングパラメータの意味
例:「DDR5-6000 CL30-38-38-96」= CL=30, tRCD=38, tRP=38, tRAS=96
DRAM セルアレイ(簡易シミュレーション)
▼「アクセス開始」をクリック
DRAM のコンデンサは数ミリ秒で自然放電するため、メモリコントローラが定期的に全セルを読み出して再書き込みする(リフレッシュ)。 規格では 64ms 以内に全行(tREFI:~7.8µs ごとに 1 行)をリフレッシュするよう定められている。 この操作中は通常のアクセスが一瞬妨げられ、リフレッシュオーバーヘッドとなる(全帯域の約 1〜3%)。
速さ・容量・コストのトレードオフを階層で解決する
← 各層をクリック →
← 階層をクリックして詳細を表示
一度アクセスしたデータはすぐまたアクセスされる可能性が高い。ループ変数やカウンタがその典型。キャッシュに残すと高速化できる。
あるアドレスにアクセスしたら、その近傍のアドレスにもアクセスしやすい。配列の逐次アクセスや命令列がその例。キャッシュラインまとめ読みで活かす。
メモリ階層が「実用的に機能する」のはこの局所性のおかげ。現実のプログラムは小さな作業セットを繰り返し使うため、キャッシュのヒット率が非常に高く保たれる。
DDR5 から HBM まで — 何が進化したのか
| 世代 | 最大転送速度 | 動作電圧 | バースト長 | 主な登場時期 |
|---|---|---|---|---|
| DDR1 | 3.2 GB/s | 2.5 V | 2〜8 | 2000年 |
| DDR2 | 8.5 GB/s | 1.8 V | 4〜8 | 2003年 |
| DDR3 | 17 GB/s | 1.5 V | 8 | 2007年 |
| DDR4 | 51 GB/s | 1.2 V | 8 | 2014年 |
| DDR5 | 89+ GB/s | 1.1 V | 16 | 2020年〜現在 |
* 転送速度はデュアルチャネル構成の理論最大値。DDR5 はチャネルを 2 分割してさらに効率化。
DRAM をシリコンインターポーザー上に3次元積層して GPU 近傍に配置。 広いバス幅(1024bit 以上)で超高帯域を実現。 AI・HPC 用 GPU(NVIDIA A100/H100、AMD Instinct)で採用。
モバイル向けに消費電力を最適化した DDR 派生規格。電圧・クロックの動的調整により理想帯域と省電力を両立。 スマートフォン・タブレット・ノート PC(Apple Silicon を含む)に搭載。
GPU のビデオメモリ専用に最適化。レイテンシより広帯域を優先し、ピン当たりの転送速度を高速化。 ゲーミング GPU の VRAM として広く使用。
DIMM(288 ピン)
デスクトップ・サーバー向け。240–288 ピン。DDR4/DDR5用。両面に独立したピン配列。
SO-DIMM(260 ピン)
ノート PC 向けの小型版。幅が約半分。DIMM と電気的仕様は同等。
デュアルチャネル・クアッドチャネル
メモリスロットを 2 枚(4 枚)組で使うことでメモリコントローラとのバス幅を 2 倍(4 倍)にする技術。DDR5-6000 シングルチャネル = 48 GB/s、デュアルチャネル = 96 GB/s と大幅な帯域向上。スロット A1 + B1 など同色スロットに同一仕様の DIMM を挿すのが基本。
サーバー向けの ECC メモリ は 1 ビット誤り訂正・2 ビット誤り検出の機能を持ち、データセンターや金融システムの信頼性に不可欠。
半導体の進化スピードの「非対称性」と、その先にある In-Memory Computing
* CPU 演算性能は約 ×50,000(ムーアの法則 + IPC向上)、DRAM帯域は約 ×500、レイテンシは約 ×10 しか改善していない
FLOPS では
毎年 50〜100% 速くなる
(AI 加速器含む)
レイテンシは
40年で 10倍しか
改善していない
「メモリウォール(Memory Wall)」という言葉は 1994年に Wulf & McKee が論文 "Hitting the memory wall: implications of the obvious" で提唱。 CPU が計算を終えても次のデータが届かかず「待つ」状態(メモリレイテンシストール)が性能の天井を作る。 現代の高性能 CPU では全実行時間の 30〜50% がメモリ待ちに消費されると言われる。 この問題を「演算をデータの近くに持っていく」発想で根本から解決しようとするのがIn-Memory Computing(処理内包メモリ)だ。
ルーフラインモデルは「演算強度(Arithmetic Intensity: AI)」= FLOP ÷ Byte で プログラムのボトルネックがどちらにあるかを可視化する。
典型的な演算強度
行列・ベクトル乗算(BLAS-1): ~0.25 FLOP/B(メモリ律速)
一般的な行列積(GEMM): ~N/2 FLOP/B(サイズが大きくなるほど演算律速)
深層学習(大バッチ推論): 10〜100 FLOP/B(演算律速に近づく)
ルーフラインモデル概略図
「演算をデータの場所に持っていく」発想の転換
DRAM チップの一部に演算ユニットを集積する。Samsung の HBM-PIM・SK Hynix の AiM などが代表例。 メモリ内部バスは外部バスの 100〜1000 倍の帯域があるため、演算コアをメモリ近傍に置けば転送律速を根本から解消できる。
SRAM / RRAM / PCM セルのアレイに重みを格納したまま行列積を実行する。 電圧・電流の重畳でオームの法則を使って多値積和演算を一度に行う(アナログ行列積)。 ニューラルネットワーク推論に特化。MAC 演算のエネルギーを数十分の一に削減できる。
演算コアをメモリパッケージと同一インターポーザー上に近接配置(3D 積層など)。 HBM + Logic Die 構成がその典型。NVIDIA H100 の HBM3 積層や AMD の 3D V-Cache もこの思想に近い。 完全なインメモリ演算ではないが、データ移動コストを大幅に削減する中間アプローチ。
| 方式 | データ移動削減 | 精度 | 主なターゲット用途 | 成熟度 |
|---|---|---|---|---|
| 従来 CPU + DRAM | ✗ 基準 | 64bit 浮動小数点 | 汎用 | 製品 |
| GPU + HBM | △ ×5〜10 | BF16/FP32 | AI 学習・推論・HPC | 製品 |
| Near-Memory (HBM-PIM) | ○ ×20〜50 | FP16/INT16 | AI 推論・DB 解析 | 初期製品 |
| Analog CIM (SRAM) | ◎ ×100〜 | 低精度 INT4/INT8 | エッジ AI・IoT 推論 | 研究〜試作 |