メモリ・ストレージ

DRAM

大容量・安価な揮発メモリ。定期リフレッシュが必要。

概要

DRAM(Dynamic Random Access Memory: ダイナミックRAM)は、1個のトランジスタと1個のキャパシタ(コンデンサ)でデータを記憶する揮発性半導体メモリです。「ダイナミック」の名称は、キャパシタの電荷が時間とともに自然放電するため、定期的にリフレッシュ(再書き込み)する必要があることに由来します。

DRAMはSRAMと比較してセルが単純(1T1C構造)なため、高集積度・大容量・低コストを実現できます。現在のPCやスマートフォン・組み込みLinux機のGBクラス主記憶は、ほぼすべてDRAMで構成されています。

組み込みシステムでは、DRAMはLinuxカーネル・アプリケーション・フレームバッファなど大容量メモリを必要とするシステムで使われます。マイコン(MCU)ベースの小規模システムでは内蔵SRAMで間に合うことが多く、DRAMはMPUSoCベースの組み込みLinux機で主に利用されます。

歴史・背景

DRAMは1966年にIBMのRobert Dennardが発明し、1970年にIntelが「1103」として世界初の商用DRAM(1Kbit)を発売しました。磁気コアメモリを置き換える半導体メモリとして急速に普及し、PCメモリの標準となりました。

1990年代にSDRAM(Synchronous DRAM)が登場し、クロック同期でデータを転送できるようになりました。DDR(Double Data Rate)SDRAMは2000年に登場し、クロックの立ち上がりと立ち下がりの両方でデータを転送することで帯域幅を倍増しました。

その後、DDR2(2003年)・DDR3(2007年)・DDR4(2014年)・DDR5(2020年)と世代を重ね、転送速度と消費電力効率が向上し続けています。

組み込み向けにはLPDDR(Low Power DDR)シリーズが開発されました。LPDDR4では最大4267MT/s、LPDDR5では最大6400MT/sを実現し、スマートフォン・タブレット・組み込みLinux機の主記憶として広く使われています。車載向けにはWide I/O・LPDDR4Xが使われ、自動運転ECUでは高帯域幅が求められることからGDDR6やHBMも採用事例があります。

技術仕様

規格別スペック比較

規格転送レート動作電圧バス幅帯域幅(x64)
DDR3-16001600MT/s1.5V64bit12.8GB/s
DDR4-32003200MT/s1.2V64bit25.6GB/s
DDR5-64006400MT/s1.1V64bit51.2GB/s
LPDDR4-42674267MT/s1.1V32/64bit34.1GB/s
LPDDR5-64006400MT/s1.05V16/32bit51.2GB/s

組み込み向けDRAM規格

規格特徴用途
LPDDR4/4X低電力、〜4267MT/sスマホ・組み込みLinux
LPDDR5さらに低電力・高速最新スマホ・AIエッジ
DDR3L (1.35V)低電圧版DDR3産業用SBC(Raspberry Pi等)
SDRAM (133MHz)旧来、低コストマイコン外付け、レガシー
HyperRAMSPI互換・低ピン数マイコン外付け拡張RAM

リフレッシュ特性

DRAMセルのキャパシタは約64ms以内にリフレッシュが必要です。DRAMコントローラが自動的に行いますが、リフレッシュ中はメモリアクセスが一時停止するため、リアルタイム性に影響します。

  • リフレッシュ周期: 64ms(標準温度)、32ms(高温: 85℃以上)
  • リフレッシュコマンド: tREFIごと(例: DDR4-8GBit = 7.8µs間隔)

動作原理

セル構造(1T1C)

DRAMの最小セルは1個のアクセストランジスタ(T)と1個のストレージキャパシタ(C)で構成されます:

    ワード線(WL)
         |
    ┌───[T]───┐
    |          |
  ビット線  キャパシタ(C)
   (BL)         |
              GND

キャパシタに電荷が蓄積されているかどうかで1ビットを表します。電荷がある→「1」、ない→「0」。ただし自然放電するため、定期的にリフレッシュが必要です。

読み出し・書き込み

読み出し(Destructive Read):

  1. ビット線をVDD/2にプリチャージ
  2. ワード線をHighにしてセルのトランジスタをON
  3. キャパシタの電荷がビット線に流れ込み、電位が微小変化(数十mV)
  4. センスアンプがこの差を増幅して「0」「1」を判定
  5. 読み出し後にセルへ書き戻し(リストア)が必要

書き込み:

  1. ワード線をHighにしてアクセストランジスタをON
  2. ビット線に強制的にVDDまたはGNDをドライブ
  3. キャパシタが充電または放電される

DDRの動作原理

DDR(Double Data Rate)はクロックの立ち上がりと立ち下がりの両方でデータを転送します:

CLK:    ___/‾‾‾\___/‾‾‾\___/‾‾‾\___
DQ :   |D0 |D1 |D2 |D3 |D4 |D5 |
       ↑   ↑   ↑   ↑   ↑   ↑
      立上 立下 立上 立下 立上 立下

DDR5では1クロックで16バイト(128ビット)のバーストが可能です。

リフレッシュ動作

DRAMコントローラはタイマーによって定期的にAuto-Refresh(自動リフレッシュ)コマンドを発行します。リフレッシュ中は全行(Row)を順番にリフレッシュします(Row Hammering対策含む)。リフレッシュ中のメモリアクセスは一時停止(tRFC: 数十〜数百ns)します。

用途・ユースケース

組み込みLinuxの主記憶

Raspberry Pi(LPDDR4/5)・NVIDIA Jetson(LPDDR5)・STM32MP1(DDR3L)など、組み込みLinuxを動かすSBC・SoMはすべてDRAMを搭載しています。Linuxカーネル・デバイスツリー・ルートファイルシステム・アプリケーションを展開するために、最低256MB〜数GBのDRAMが必要です。

# メモリ使用量確認
$ free -h
              total        used        free      shared  buff/cache   available
Mem:            1.8G        512M        800M         20M        512M        1.2G
Swap:             0B          0B          0B

# プロセスごとのメモリ使用量
$ top
PID   USER      RES    SHR  %MEM  COMMAND
1234  root     256M   12M   14%   myapp

フレームバッファ・グラフィックス

ディスプレイを持つ組み込み機器では、フレームバッファ(表示用ピクセルデータ)をDRAMに格納します。FHD(1920×1080)のRGB888フレームバッファは約6MB、4K(3840×2160)では約24MBです。GPUはDRAM(またはGDDR)から高速でデータを読み出してレンダリングします。

DDR外付け(マイコン+外付けDRAM)

STM32F4/H7の一部やAT32等の高性能マイコンはFMC(Flexible Memory Controller)を持ち、外付けSDRAMを接続できます。大きなバッファが必要な動画・グラフィック処理向けです。

// STM32 HALによる外付けSDRAM初期化例
SDRAM_HandleTypeDef hsdram;
FMC_SDRAM_TimingTypeDef SdramTiming;

hsdram.Init.SDBank             = FMC_SDRAM_BANK1;
hsdram.Init.ColumnBitsNumber   = FMC_SDRAM_COLUMN_BITS_NUM_8;
hsdram.Init.RowBitsNumber      = FMC_SDRAM_ROW_BITS_NUM_12;
hsdram.Init.MemoryDataWidth    = FMC_SDRAM_MEM_BUS_WIDTH_16;
hsdram.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
hsdram.Init.CASLatency         = FMC_SDRAM_CAS_LATENCY_3;
hsdram.Init.SDClockPeriod      = FMC_SDRAM_CLOCK_PERIOD_2;
HAL_SDRAM_Init(&hsdram, &SdramTiming);

HyperRAM(組み込みマイコン向け)

HyperBusインターフェース(SPI互換、8本の信号線)で接続するHyperRAM(Winbond・Cypress等)は、ピン数を抑えながら高速(〜333MB/s)にDRAMを拡張できます。ESP32-S3等の高性能マイコンの外部RAM拡張に使われます。

実装・開発のポイント

DDRタイミングパラメータの設定

DRAMを外付けする場合、正確なタイミングパラメータ(tRCD・tRP・tWR・tCL等)をDRAMのデータシートに従って設定する必要があります。誤った設定は動作不安定・データ化けの原因になります。

// タイミングパラメータ例(JEDEC DDR3-1333の場合)
// tCL  (CAS Latency) = 9 クロック
// tRCD (RAS-to-CAS Delay) = 9 クロック
// tRP  (Row Precharge) = 9 クロック
// tRAS (Row Active Time) = 24 クロック

ECC DRAM

サーバー・産業用途では1ビットエラーを訂正できるECC(Error Correcting Code)付きDRAMを使います。通常のDDR4は64bit幅ですが、ECC対応は72bit幅でチェックビットを付加します。組み込みではNVIDIA Jetsonの一部モデルがECC対応LPDDR5を搭載しています。

Rowhammer攻撃への対策

Rowhammerは、特定のDRAMセル行を連続アクセスすることで隣接行のビットを反転させるサイドチャネル攻撃です。重要なシステムではECC DRAMやTarget Row Refresh(TRR)対応製品を採用します。

メモリリークの監視

組み込みLinuxシステムではDRAMのメモリリークが長時間稼働で問題になります。valgrindやmassif(ヒーププロファイラ)、/proc/meminfo・/proc/PID/statusで定期的にモニタリングします。

# メモリリーク確認
watch -n 5 'cat /proc/meminfo | grep -E "MemFree|Cached|Buffers"'

# プロセスのメモリ使用量追跡
cat /proc/$(pgrep myapp)/status | grep VmRSS

他技術との比較

DRAM vs SRAM

項目DRAMSRAM
セル構造1T1C(単純)6T(複雑)
リフレッシュ必要不要
アクセス速度遅い(数十ns)速い(数ns)
ビット単価低い高い
集積度高い(GB級)低い(MB級以下)
用途主記憶キャッシュ・MCU RAM

DRAM vs フラッシュ

項目DRAMフラッシュ
揮発性揮発性不揮発性
読み出し速度高速(GB/s級)低速(100MB/s以下)
書き込み速度高速遅い(ページ消去が必要)
書き換え寿命制限なし(実質無制限)有限(100〜100,000回)
用途実行時メモリ永続ストレージ

組み込みLinuxシステムの基本構成は「フラッシュにOSを格納 → 起動時にDRAMに展開 → DRAM上でOSが動作」という役割分担です。

関連用語

参考リンク