SDRAM

SDRAM (Synchronous Dynamic Random Access Memory) は、システムバスに同期して動作するDRAM (Dynamic Random Access Memory)。シンクロナスDRAMとも。初期のDRAMのインタフェースは非同期式であり、制御入力の変化に反応して可能な限り素早く応答するようになっていた。SDRAMのインタフェースは同期式であり、制御入力に応答する前にクロック信号を待つため、コンピュータのシステムバスに同期して動作する。クロックは入ってくる命令をパイプライン化する内部の有限状態機械を駆動するのに使われる。そのためSDRAMのチップは非同期DRAMよりも複雑な操作パターンを持つことができ、より高速に動作できる。

パイプライン化とはこの場合、SDRAMのチップが前の命令の処理を完了する前に新たな命令を受け付けられることを意味する。パイプライン化された書き込みでは、書き込み命令のすぐ後に書き込むべきデータがメモリアレイに到着する前でも次の命令を受け付けられる。パイプライン化された読み出しでは、要求したデータは読み出し命令からある固定数のクロックパルスが経過した後に出力され、その間のサイクルの間に別の命令を送ることができる。読み出し命令からデータが出力されるまでの遅延を「レイテンシ」と呼び、SDRAMを選択する際の重要な観点となっている。

SDRAMはコンピュータで広く使われている。元々のSDRAMだけでなく、そこから発展した世代であるDDR (DDR1)、DDR2、DDR3、DDR4、DDR5が量産されている。

 歴史 
SDRAMのコンセプトは1970年代には既に知られており、インテルの初期のプロセッサでも使われていたが、広く使われるようになったのは1993年以降のことである。1993年、サムスン電子がSDRAMチップ KM48SL2000 を導入。性能がよいため、コンピュータの主記憶として使われるDRAMは2000年までにほぼ全てがSDRAMとなった。

SDRAMのレイテンシは元々非同期型のDRAMに比べて無視できるものではなかった。実際初期のSDRAMは内部ロジックが複雑だったため、同時期の burst EDO RAM に比べて性能が低かった。SDRAM内部でのバッファリングはメモリの複数バンクへの操作をインターリーブできることに由来し、それによって実質的な帯域幅を向上させている。

今では事実上全てのSDRAMが、電子部品の相互運用を促進するためにオープン標準の採用を進める電子業界団体JEDECの規格に準拠して生産されている。JEDECは1993年に最初のSDRAMの規格を定め、その後も DDR、DDR2、DDR3 SDRAM といったSDRAMの規格を定めてきた。

SDRAMにはレジスタ付きの派生品もあり、サーバやワークステーションなどよりよいスケーラビリティを要求するシステムで使われる。

2017年現在、パーソナルコンピュータの主記憶に単なるSDRAMが使われることはなく、DDR3 SDRAM や DDR4 SDRAM が主流である。

SDRAMの主なメーカーとしては、サムスン電子、ハイニックス半導体、エルピーダメモリ、マイクロンテクノロジーなどがある。

 タイミング 
DRAMの性能を制限する要因はいくつかある。中でも重視されるのがリードサイクル時間で、オープン状態（SDRAMの行データをセンスアンプの配列に格納した状態）のロウ（行）への連続な読み出し操作の間の時間である。100MHzのSDRAMでは10nsだったその時間が、DDR-400では5nsに短縮されたものの、DDR2-800 と DDR3-1600 の世代では相対的にほとんど短縮されていない。しかし、インタフェース回路を基本リードレートよりも何倍もの速さで操作することにより、帯域幅は急激に増大した。

もう1つの制限要因はCASレイテンシで、カラムアドレスを供給してから対応するデータが得られるまでの時間である。これも最近の DDR SDRAM の数世代を通して 10-15ns と相対的に一定となっている。

実装においてはCASレイテンシは、SDRAMのモードレジスタを通してクロックサイクル数の形でプログラム可能であり、DRAMコントローラが期待する値を設定する。任意の値をプログラム可能だが、あまりに小さい値を設定するとSDRAMは正しく動作できない。クロックレートが高いと、実用可能なCASレイテンシのクロックサイクル数は増大する。10-15ns という時間は、200MHzの DDR-400 SDRAM では 2-3サイクル (CL2-3)、DDR2-800 では CL4-6、DDR3-1600 では CL8-12 となる。クロックサイクルが遅ければ、当然ながらCASレイテンシのサイクル数も小さくなる。

SDRAMモジュールにはそれぞれのタイミング仕様があり、そのモジュールで使っているチップ自体のそれよりも遅いことがある。100MHz SDRAMチップが登場したころ、100MHz対応と称したモジュールはそのクロックレートでは確実に動作できないことがあった。そのためインテルは PC100 規格を策定し、100MHzで安定動作できるメモリモジュールを生産するためのガイドラインと要求仕様を定めた。この規格は広く影響を及ぼし、PC100 は100MHzのSDRAMモジュールを指す用語となり、"PC" の後に数字をつけた名称が広く使われるようになった（その後、数字の意味は変化している）。

 SDR SDRAM 

元々は単にSDRAMと呼ばれていた SDR（シングルデータレート）SDRAMは、クロックサイクル当たり1つのコマンドを受けつけるか、1ワードのデータを転送できる。典型的なクロック周波数は100MHzと133MHzである。様々なデータバス幅のチップがあるが（4ビット、8ビット、16ビットなど）、一般に168ピンのDIMMの形でモジュール化され、64ビット（ECCなし）または72ビット（ECC）を一度に読み書きできる。

データバスの使い方は複雑で、そのため複雑なDRAM制御回路を必要とする。例えば、書き込みの際にはライトコマンドと同じサイクルで書き込むべきデータを提示しなければならないが、読み出し操作ではリードコマンドの2または3サイクル後にデータが出力される。そのため、DRAMコントローラはリードとライトが同時にデータバスを必要としないように調整しなければならない。

典型的な SDR SDRAM のクロックレートは 66MHz、100MHz、133MHz である（それぞれ、15ns、10ns、7.5ns）。

 制御信号 
すべてのコマンドはクロック信号の立ち上がりのタイミングでとられる。クロックに加えて6つの制御信号があり、たいていは負論理で、クロックの立ち上がりのタイミングでサンプリングされる。

 CKE (Clock Enable)
 この信号がローレベルのとき、チップはクロックが停止しているかのように動作する。コマンドは全く解釈されず、コマンドレイテンシ時間は経過しない。他の制御線の状態は考慮されない。この信号の効力は実際には1クロックサイクルだけ遅延される。すなわち現在のクロックサイクルは通常通り進行するが、次のクロックサイクルは無視され、CKE入力のチェックだけが行われる。CKEがハイレベルとなったクロックサイクル後の立ち上がりの時点から通常の処理が続行される。言い換えれば、全ての処理はマスクされたクロックの立ち上がりに対応して進行する。マスクされたクロックとは、クロック入力と直前のクロック入力立ち上がり時のCKE信号の状態の論理積である。
 /CS (Chip Select)
 この信号がハイのとき、チップは全ての入力（CKE以外）を無視し、NOPコマンドを受け取ったかのように動作する。
 DQM (Data Mask)
 略号に"Q"という文字があるのは、データ線を"DQ"線と呼ぶことがあるためである。この信号がハイのとき、それらの信号はデータI/Oを抑制する。書き込みデータを伴う場合、そのデータは実際にはDRAMに書き込まれない。リードサイクルの前に2サイクルの間ハイにした場合、リードデータはチップから出力されない。DQM線は x16のメモリチップまたはDIMMの8ビットごとに1つある。
 /RAS (Row Address Strobe)
 名前に「ストローブ」とあるが、単なるコマンドビットとして機能する。/CAS および /WE と組み合わせて8種類のコマンドを指定する。
 /CAS (Column Address Strobe)
 名前に「ストローブ」とあるが、単なるコマンドビットとして機能する。/RAS および /WE と組み合わせて8種類のコマンドを指定する。
 /WE (Write enable)
 /RAS および /CAS と組み合わせて、8種類のコマンドを指定する。一般に読み出し系コマンドと書き込み系コマンドを区別する信号である。

SDRAMデバイスは内部が2または4個の独立したバンクに分けられている。バンクアドレス入力が1つ以上あり（BA0、BA1）、コマンドがどのバンクに対するものかを選択するようになっている。

コマンドの多くはアドレス入力ピンで示されるアドレスを使う。アドレスを使わない一部のコマンドやカラムアドレスを示さない一部のコマンドでもA10を使ってコマンドの種別を示す。

コマンドを次の表に示す。

 /CS  /RAS  /CAS  /WE  BAn  A10  An  コマンド H  x  x  x  x  x  x  コマンド抑制（何もしない） L  H  H  H  x  x  x  何もしない（NOP） L  H  H  L  x  x  x  バースト終了: 実行中のバーストリードまたはバーストライトを停止 L  H  L  H  バンク  L  カラム  リード: 現在アクティブなロウからデータをバーストで読み出す。 L  H  L  H  バンク  H  カラム  自動プリチャージ付きリード: リードと同じことを行い、完了時にプリチャージする（ロウを閉じる）。 L  H  L  L  バンク  L  カラム  ライト: 現在アクティブなロウにデータをバーストで書き込む。 L  H  L  L  バンク  H  カラム  自動プリチャージ付きライト: ライトと同じことを行い、完了時にプリチャージする（ロウを閉じる）。 L  L  H  H  バンク  ロウ  アクティブ（活性化）: リードまたはライトコマンドのためにロウを開く。 L  L  H  L  バンク  L  x  プリチャージ: 選択したバンクの現在のロウを非活性化する。 L  L  H  L  x  H  x  全プリチャージ: 全バンクの現在のロウを非活性化する。 L  L  L  H  x  x  x  オートリフレッシュ: 内部カウンタを使い、各バンクの1つのロウをリフレッシュする。全バンクをプリチャージしなければならない。 L  L  L  L  0 0  モード  モードレジスタのロード: DRAMチップを設定するため、A0からA9までをロードする。最も重要な設定はCASレイテンシ（2または3サイクル）とバースト長（1/2/4/8サイクル）である。
DDRx SDRAM でも基本的なコマンドは同じであり、若干追加がある。追加のモードレジスタは、バンクアドレスビットを使って識別され、3番目のバンクアドレスビットが追加されている。

 操作 
512MB SDRAM DIMM（正確には 512MiB =  = 536,870,912 bytes）は8個か9個のSDRAMチップで構成され、それぞれのチップが512Mbitを格納し、DIMMの64ビットまたは72ビットのワード幅のうちの8ビットを各チップが分担している。典型的な512Mbit SDRAMチップの内部には4つの独立した16MBメモリバンクがある。それぞれのバンクは、16,384ビットのロウ（行）が8,192個並んだアレイになっている。バンクはアイドル状態、アクティブ状態、またはそれらの間で遷移中の状態のいずれかである。

アクティブ・コマンドはアイドル状態のバンクを活性化する。2ビットのバンクアドレス (BA0–BA1) でバンクを示し、13ビットのロウアドレス (A0–A12) でロウを示し、バンクの持つ16,384個のカラム（列）のセンスアンプにそのロウの内容を送り込む。この操作を「ロウを開く」と呼ぶ。この操作の副作用として、そのロウ内のメモリセルのリフレッシュが行われる。

ロウが活性化され開かれる（オープン状態になる）と、リード・コマンドとライト・コマンドをそのロウに対して実行可能となる。活性化に必要な時間は数クロックであり、それを「row-to-column 遅延」または tRCD と呼び、アクティブ・コマンド発行後にリードまたはライトを発行可能となるまでの時間を指し、通常クロックサイクル数で丸めた形で示す。それぞれのバンクは完全に独立しているため、このウェイトサイクルの間でも他のバンクに対してコマンドを発行できる。

リード・コマンドとライト・コマンドはカラムアドレスを必要とする。ひとつのチップは一度に8ビットのデータにアクセスするので、カラムアドレスは2048種類あり（16384÷8=2048）、アドレス線は11本だけ必要となる（A0-A9、A11）。

リード・コマンドを発行すると、SDRAMは2または3クロックサイクル後（CASレイテンシの設定による）のクロック立ち上がりの時点でDQ線に対応する出力データを出力する。それに続くワードのバーストが引き続きクロック信号の立ち上がりにあわせて出力される。

ライト・コマンドは書き込むべきデータを伴い、クロック信号の立ち上がりの時点でDQ線をそのデータで駆動する。ライト・コマンドでDQ線にデータを伝送する際にSDRAMがリード・コマンドのデータを同時に出力しないようにしなければならない。これはメモリコントローラの役目である。これは通常リード・バーストの完了を待ち合わせるか、リード・バーストを停止するか、DQM制御線を使うことでなされる。

メモリコントローラが別のロウにアクセスする必要が生じると、まずそのロウの所属するバンクのセンスアンプをアイドル状態に戻す必要があり、その後に次のロウにアクセスする準備をする。これを「プリチャージ」と称し、「ロウを閉じる」と呼ぶ。プリチャージは独立したコマンドとして実行することもあるし、リードまたはライトの際に自動的に行うこともある。プリチャージにも時間がかかり、ロウ・プリチャージ遅延または tRP と呼ぶ。指定したバンクが完全にアイドル状態となるまでにかかる時間であり、その後に次のアクティブ・コマンドを受け付けられるようになる。

ロウを活性化すると副作用としてリフレッシュが行われるが、それにも時間がかかる。これを最小ロウアクセス時間 tRAS と呼び、あるロウをアクティブ・コマンドで開いた後からプリチャージ・コマンドで閉じることができるようになるまでの間に生じる遅延時間として現れる（言い換えると、アクティブ・コマンドとプリチャージ・コマンドの間でカラムアドレスを出すこと以外は何もしなくても遅延時間が発生する）。しかし、通常アクティブ・コマンドの後にはリードまたはライトを行うので、性能にはほとんど影響を及ぼさない。リード・ライトの動作の方が tRAS よりも長いからである。

 コマンドによる対話 
どのような状態でもNOPコマンドは常に受け付けられる。

全バンクがアイドル状態のとき、以下のコマンドが発行できる。
モードレジスタのロード・コマンド：モードレジスタの変更が効力を持つまである遅延時間がかかる。
オートリフレッシュ・コマンド：チップがアイドル状態に戻るまでにリフレッシュサイクル時間 tRFC がかかる。この時間は一般に tRCD+tRP と同じである。

全バンクではなく、対話したい特定のバンクがアイドル状態のときに発行できるコマンド
アクティブ・コマンド：上述の通り、アクティブ・コマンドはロウが完全に開いてリードまたはライト・コマンドを受けつけ可能になるまで tRCD という時間を要する。

バンクが開いているとき（オープン状態のとき）、4つのコマンドを受け付けられる。
リード・コマンド
ライト・コマンド
バースト終了コマンド
プリチャージ・コマンド
リード・コマンドはリードバースト（連続読出）を開始する。一方、ライト・コマンドはライトバースト（連続書込）を開始する。そして、続くコマンドによってバーストを中断できる。

 リードバースト割り込み 
「リード・コマンド」「バースト終了コマンド」「プリチャージ・コマンド」は、リードバースト開始後、任意の時点で発行でき、設定されたCASレイテンシ後にリードバーストに割り込むことができる。

リード・コマンドをサイクル0で発行し、別のリード・コマンドをサイクル2で発行したとする。CASレイテンシが3の場合、最初のリード・コマンドはデータのバースト出力をサイクル3および4で開始し、2つ目のリード・コマンドの処理はサイクル5から開始される。

以上をまとめると以下のようになる。
サイクル0 : リード・コマンド（1つ目）
サイクル1 : 
サイクル2 : リード・コマンド（2つ目）
サイクル3 : リードバースト開始
サイクル4 : （ここでリードバースト開始になることもある）
サイクル5 : 2つ目のリード・コマンドの処理開始

サイクル2で発行したコマンドがバースト終了またはアクティブなバンクのプリチャージだった場合、サイクル5までの間に出力は生成されない。

リードバースト割り込みは任意のアクティブなバンクで起きうるが、プリチャージ・コマンドがリードバーストに割り込むのは、それが同じバンクに対するものか全バンクに対するものだった場合だけである。異なるバンクへのプリチャージ・コマンドはリードバーストに割り込まない。

ライト・コマンドでリードバーストに割り込むことも可能だが、やや難しい。ライトの際にはDQ線でSDRAMに書き込むデータを示す必要があるため、メモリコントローラはDQM信号を使ってSDRAMの出力を抑制する必要がある。DQMによるリードデータ抑制の効果は2サイクル遅延するが、ライトデータへの効果は即座に現れる。したがってライト・コマンドの少なくとも2サイクル前にDQMをアサートしてリードデータをマスクする必要があるが、ライト・コマンドを発行する時点にはDQMを下げておく必要がある。その間はわずか2サイクルであり、微妙なタイミング調整を必要とする。クロック周波数が高い場合は3サイクルを必要とすることもある。

自動プリチャージ付きのリード・コマンドの場合、プリチャージはコマンドに割り込むのと同じサイクルで開始される。

 バースト要求 
最近のキャッシュを持つマイクロプロセッサは、一般にキャッシュライン単位でメモリにアクセスする。キャッシュラインが64バイト（512bit）の場合、64ビットのDIMMに8回連続アクセスする必要がある。64ビットのDIMMが8つのSDRAMチップで構成されている場合、1つのSDRAMチップは8bit単位で8回連続アクセスされることになる。それを1回のリードまたはライト・コマンドで開始するよう設定できる。すなわち、モードレジスタで8ワードのバースト転送を設定すればよい（BL=8、BLとは「バースト長」）。

キャッシュラインのフェッチは一般に特定アドレスからのリードで開始され、SDRAMは「クリティカルワード」（キャッシュラインの先頭に位置しないワード）を最初に転送することを可能としている。ここでいう「ワード」の長さは、SDRAMチップまたはDIMMのデータ出力幅であり、典型的なDIMMでは64ビットである。SDRAMチップは、キャッシュライン内の残りのワードの転送順序を2種類サポートする。

バーストは常にバースト長 (BL) でアライン（整列）されたブロック（キャッシュラインに対応）にアクセスし、ブロックの開始アドレスはBLの整数倍の位置となる。例えば4ワード・バーストでカラムアドレス4から7のいずれかにアクセスしようとすると、4-7の4ワードがバースト転送される。ブロックの先頭から転送を要求した場合、順番に転送されるだけである。しかし、ブロックの途中のアドレスから転送を要求すると、その転送順序は要求したアドレスに依存し、「シーケンシャル」または「インターリーブ」という2つのバースト種別のオプションで設定される。一般にメモリコントローラはどちらか一方をサポートしている。

バースト長が1または2の場合、バースト種別は問題とはならない。バースト長が1なら、要求されたワードにアクセスするだけである。バースト長が2なら、まず要求されたアドレスのワードにアクセスし、次にブロックを構成するもう1つのワードにアクセスする。指定したアドレスが偶数なら2番目にアクセスするのはその次のワードであり、奇数なら1つ前のワードということになる。

シーケンシャル型のバーストモードでは、指定されたアドレスを起点としてアドレスが大きくなる順にアクセスしていき、ブロック境界まで来るとブロック先頭に戻って順にアクセスしていく。例えばバースト長が4の場合、要求したカラムアドレスが5だとすると、アクセスするワードの順序は 5-6-7-4 となる。バースト長が8の場合、アクセス順序は 5-6-7-0-1-2-3-4 となる。これはカラムアドレスにカウンタの値を加算することでなされ、バースト長を超えたときにキャリーを無視することでこのような順序となる。

インターリーブ型のバーストモードでは、カウンタと指定されたアドレスの間で排他的論理和操作をおこなってアドレスを計算する。バースト長が4ワードの場合、同じようにアドレス5で開始すると、アクセス順序は 5-4-7-6 となる。同様に8ワードバーストなら 5-4-7-6-1-0-3-2 となる。人間にはこのような順序は判りにくいが、ハードウェアでの実装は容易であり、インテル製マイクロプロセッサがこの方式をよく採用している（どのような順番でもブロック内が全て転送されればよい）。

要求されたカラムアドレスがブロック（キャッシュラインに対応）の先頭だった場合、どちらのモードであっても同じ 0-1-2-3-4-5-6-7 という整列した順序でデータを返す。2つのモードの違いが問題となるのは、クリティカルワードを最初としてキャッシュラインをフェッチする場合である。

 モードレジスタ 
シングルデータレートのSDRAMには、10ビットのプログラム可能なモードレジスタがある。DDR SDRAM の規格ではモードレジスタがさらに追加されており、バンクアドレスピンを使って指定できる。SDR SDRAM の場合、バンクアドレスピンや A10 以上のアドレス線は無視されるが、モードレジスタに書き込む際はそれらを0にしておくべきである。

モードレジスタのロードを行うサイクルでは、アドレス線 A0 から A9 でモードレジスタの内容を指定し、それぞれ M0 から M9 のビットに対応している。
 M9: ライトバーストモード。0の場合、ライト・コマンドでもリードバーストの長さとモードでバースト転送する。1の場合、全てのライトはバースト転送しない（1ワードのみの書き込みとなる）。
 M8, M7: 予約されている。常に 00 とする。
 M6, M5, M4: CASレイテンシ。一般に 010 (CL2) と 011 (CL3) のみが妥当である。リード・コマンドからデータ出力までのサイクル数を指定する。チップにはナノ秒単位の基本的な限界が存在する。初期化の際にメモリコントローラがその限界を考慮して適切なサイクル数に変換して設定しなければならない。
 M3: バースト種別。0の場合はシーケンシャル型のバースト順序、1の場合はインターリーブ型のバースト順序となる。
 M2, M1, M0: バースト長。000、001、010、011 がそれぞれ1ワード、2ワード、4ワード、8ワードに対応する。リード・コマンド（M9が0ならライトも）は、指定された長さでアクセスするが、バースト終了または他のコマンドで割り込むこともできる。111と設定した場合、ロウ全体のバースト転送となる。バーストは割り込むまで続く。ロウ全体のバーストはシーケンシャルモードのときのみ可能である。

 オートリフレッシュ 
それぞれのバンクのそれぞれのロウを開いて閉じる（アクティブとプリチャージ）ことで、メモリセルをリフレッシュできる。しかし、メモリコントローラを単純化するため、SDRAMチップには「オートリフレッシュ」コマンドがあり、それぞれのバンクの1つのロウに対して同時にリフレッシュを行うことができる。SDRAMは内部にカウンタを持っていて、バンク内のロウを順番にオートリフレッシュすることができる。メモリコントローラはリフレッシュインターバル（一般に tREF = 64 ms）ごとにロウの数（これまで説明してきた例では4096）をカバーするのに十分なだけのオートリフレッシュ・コマンドを発行すればよい（この例だと、64ms内に4096回発行するということ）。このコマンドを発行する際には全バンクがアイドル状態でなければならない。

 省電力モード 
CKE (clock enable) 信号を使うと、SDRAMのクロックを事実上停止することができる。CKE信号はクロック波形の立ち上がりごとにサンプリングされ、ローレベルであれば次のクロックの立ち上がりが無視され、CKE信号のチェック以外の処理が行われなくなる。CKEをローレベルにしている間はクロック周波数を変更したり、クロックを完全に止めたりすることも可能である。

CKEがローレベルになるとSDRAMは処理をフリーズさせ、CKEがハイレベルになるまでその状態を保つ。

CKEがローレベルとなってSDRAMがアイドル状態なら（全バンクがプリチャージされ、コマンドを処理中でない場合）、SDRAMは自動的に省電力モードとなり、CKEがハイレベルになるまで最小限の電力しか消費しない状態となる。ただし、リフレッシュインターバル tREF 以上にこのモードを続けることはできない（メモリの内容が失われてしまうため）。この状態でクロックを完全に止めれば、さらに電力消費を抑えることができる。

また、CKEをローレベルにしたときにオートリフレッシュ・コマンドをSDRAMに送れば、SDRAMはセルフリフレッシュ・モードとなる。この場合も省電力状態となるが、SDRAMは内部のタイマを使って必要なリフレッシュサイクルを生成する。この場合もクロック供給を止めることができる。上述の省電力モードよりも電力消費は若干多いが、メモリコントローラを完全に停止させることができ、システム全体としてはこちらの方が省電力となる。

バッテリ駆動の機器向けにさらなる省電力オプションが用意されている。
 温度対応型リフレッシュ : チップ上の温度センサが温度を測定し、低温になるほどセルフリフレッシュでのリフレッシュレートを低減させる。
 選択的リフレッシュ : DRAMアレイの一部だけでセルフリフレッシュを行う。どの部分をリフレッシュするかは追加のモードレジスタで設定する。
 DPD (deep power down) モード : モバイルDDR (LPDDR) やLPDDR2が実装している。メモリ内容を無効化して、通常状態に復帰するときに再設定を必要とする。CKEをローレベルにする際にバースト終了コマンドを発行することでDPDモードとなる。

 世代 
 SDRAM 
SDR SDRAM（詳細は前述）は、1クロックサイクルの片エッジでの転送である（シングルデータレート（SDR））。

 その他の提案 
SDR SDRAMの後継としてDDR SDRAMが普及するまでの間に、多少の技術的・政治的混沌があった。#成功しなかった後継テクノロジーの節を参照。

 DDR SDRAM 

DRAMのアクセスレイテンシはDRAMアレイによって基本的に制限されているが、内部では数千ビットのロウを一度に読み出すので、帯域幅はさらに高められる可能性を持っている。ユーザーに対してさらなる帯域幅を提供するため、ダブルデータレートというインタフェースが開発された。コマンドを1サイクルに1つ受け付けるのは従来と同じだが、リードとライトは1クロックサイクルに2ワードのデータを扱う。またSDRインタフェースでのタイミングにいくつかマイナーな変更を加え、電源電圧を3.3Vから2.5Vに下げた。結果として DDR SDRAM は SDR SDRAM との互換性を保っていない。

DDR SDRAM（その後の製品と区別するため "DDR1" とされることもある）は最小の読み書き単位を倍にし、1回のアクセスで少なくとも2ワードを参照するようになった。

DDR SDRAM の典型的なクロック周波数は 133MHz、166MHz、200MHz（それぞれサイクル時間は 7.5ns、6ns、5ns）で、それぞれ DDR-266、DDR-333、DDR-400 と呼ばれる。対応する184ピンのDIMMはそれぞれ PC-2100、PC-2700、PC-3200 と呼ばれる。さらに高性能な DDR-550 (PC-4400) までそれなりの価格で入手可能である。

 DDR2 SDRAM 

DDR2 SDRAM は DDR SDRAM とよく似ているが、最小読み書き単位をさらに倍にし、4ワード単位としている。また、高速操作を実現するためにバスプロトコルを単純化している。特にバースト終了コマンドを削除した。それによって内部のRAM操作のクロック周波数を上げずにSDRAMのバスレートを倍にしている。その代わり、内部の操作はもともとのSDRAMの4倍の単位で行っている。またチップのメモリ容量増大に対応するため、バンク数を8にできるよう新たなバンクアドレスピン (BA2) を追加している。

DDR2 SDRAM の典型的なクロック周波数は 200MHz、266MHz、333MHz、400MHz（それぞれ 5ns、3.75ns、3ns、2.5ns）で、それぞれ DDR2-400、DDR2-533、DDR2-667、DDR2-800 と呼ばれる。対応する240ピンのDIMMは、PC2-3200からPC2-6400までの名称である。最近では533MHzのものもあり DDR2-1066 と呼ばれ、対応するDIMMは PC2-8500（メーカーによっては PC2-8600 とも）と呼ばれている。さらに高性能な DDR2-1250 (PC2-10000) までそれなりの価格で入手可能である。

内部操作は2分の1のクロックレートで行われるため、DDR2-400（内部クロック周波数は100MHz）はDDR-400（内部クロック周波数は200MHz）よりも各種レイテンシが大きい。

 DDR3 SDRAM 

DDR3でも同様の進化の傾向が継続され、読み書きの最小単位は連続する8ワードと倍になった。これによって内部クロックレートを変更せずに外部バスの周波数と帯域幅を倍増させることが可能になった。毎秒800Mから1600M回の転送を実現するため（400-800MHzのクロックの両方のエッジで転送）、内部のメモリアレイでは毎秒100Mから200M回のフェッチを実行する。

この場合も問題はレイテンシの相対的な増大である。DDR SDRAM 全般に言えることだが、コマンドは依然としてクロックサイクルの立ち上がりに1回だけ発行できるだけで、通常言われる転送速度の半分の速度である。同じ100MHzでメモリセルが動いている、DDR3-800のCASレイテンシは 8/(400MHz) = 20ns であり、PC100の SDR SDRAM の CAS2 のレイテンシと全く同一である。メモリセルのクロック周波数はDDR以降、133MHz〜266MHzが商品の中心であり、クロック周波数は伸びていなく、1クロックで取得できるビット数が2倍ずつ増えているだけである。この傾向はDDR4でも続く予定。

DDR3メモリチップは2007年後半に出荷が開始され、2008年以降徐々に生産量が伸びている。当初のクロック周波数は400MHzと533MHzで、それぞれ DDR3-800 と DDR3-1066（DIMMモジュールは PC3-6400 と PC3-8500）と呼ばれていたが、今では DDR3-1333 と DDR3-1600（DIMMモジュールは PC3-10600 と PC3-12800）が一般的となっている。さらに高性能な DDR3-2200 までそれなりの価格で入手可能である。

 DDR4 SDRAM 

DDR3 SDRAM の後継とされているのが DDR4 SDRAM である。2008年、サンフランシスコで開催されたインテル・デベロッパー・フォーラムで明らかにされ、当初2012年までのリリースが期待されていたDDR4 PDF page 23。今は、サーバー向けが2013年、PC向けが2015年のリリースが期待されている【後藤弘茂のWeekly海外ニュース】 JEDECが「DDR4」とTSVを使う「3DS」メモリ技術の概要を明らかに DDR4 not expected until 2015 - SemiAccurate。DDR以降、3〜5年で2倍の高速化をしていたメモリの転送速度の伸びが鈍化する形となる。

転送能力は2.133GT/s(DDR4-2133, 133MHz, 17.066GB/s)のものが最初に登場し、最終的に4.266GT/s(DDR4-4266, 266MHz, 34.133GB/s) まで向上すると予測されていて、DDR3の2倍となる。メモリクロックはDDR〜DDR3同様、133MHz〜266MHzあたりが中心となる。また、電源電圧はDDR3の1.5Vに対して1.2V以下が予定されておりLooking forward to DDR4DDR3 successor、1.0Vまで下げられると予測されている English translation。

2009年2月、サムスン電子はDDR4開発の重要なステップとして 40nmルールのDRAMチップの試作検証を行った。2009年時点で一般に製造されているDRAMチップは50nmルールに移行しつつある状態だった。

2011年2月、サムスン電子は2GBの DDR4 SDRAM モジュールの開発を発表した。電源電圧 1.2V での最大帯域幅は 2.133Gbps で、30nmプロセス技術で「擬似オープンドレイン」テクノロジーを採用。同等のDDR3モジュールと比較すると消費電力を40%抑えているSamsung develops DDR4 memory, up to 40% more efficient Samsung develops DDR4 memory with up to 40 percent better energy efficiency than DDR3。

2014年6月下旬、販売開始Intelの「Haswell-E」およびX99チップセットが対応する

2015年9月 Intelが第6世代Coreプロセッサを発表。今までハイエンドモデルでのみ対応していたDDR4がメインスリーム向けCPUで対応した。

 DDR5 SDRAM 

DDR4 SDRAMと比較して、DDR5は消費電力を削減しつつ帯域幅が2倍になる。2020年7月14日に標準規格が発表された。

 仕様比較 
 種類  仕様 SDRAM                信号: LVTTL DDR1   アクセスは2ワード単位以上 ダブルデータレート 1サイクル当たり  信号: SSTL_2 (2.5V) edadesignline.com DDR2  アクセスは4ワード単位以上 "Burst terminate" を削除 4ユニットを並列接続して使用 1サイクル当たり  内部操作は1/2のクロックレートで行われる。 信号: SSTL_18 (1.8V) DDR3  アクセスは8ワード単位以上 信号: SSTL_15 (1.5V) CASレイテンシが長い。 DDR4   DDR5  

 成功しなかった後継テクノロジー 
SDR SDRAM の後継として、DDR以外にも次のようなメモリテクノロジーが提案されてきた。

 Rambus DRAM (RDRAM) 
RDRAMはDDRと競合した独自テクノロジーだった。比較的高価で性能も期待されたほどではなく（レイテンシが大きく、データ転送幅もSDRAMの64ビットに比べて小さい）、SDRAMとの競争に敗退した。

 Synchronous-Link DRAM (SLDRAM) 
SLDRAMもRDRAMと競合した。1990年代後半にSLDRAMコンソーシアムが開発したもので、同コンソーシアムは約20社の主要メーカーが結成したものである。オープン標準であり、ライセンス料を徴収しない規格だった。64ビット200MHzのバスに接続する。同じ線上で全ての信号を転送し、複数の線の同期問題を解消している。DDR SDRAM と同様、SLDRAMもクロックの立ち上がりと立ち下がりでデータを転送するため、毎秒400M回のデータ転送を行う仕様だった。

 Virtual Channel Memory (VCM) SDRAM 
VCMはNECが独自開発したSDRAMの一種だが、オープン標準としてリリースされ、ライセンス料を徴収しなかった。VCMでは各種システムプロセスにそれぞれ仮想チャネルを割り当てられるため、プロセス群がバッファ空間を共有する必要性を避け、システム全体の効率を向上させる方式だった。具体的にはメモリを独立したブロック群で構成し、ブロック毎にメモリコントローラとのインタフェースとバッファ空間を設けていた。SDRAMに比べてレイテンシが格段に小さく、高性能だった。RDRAMに比べると安価で、そのモジュールは通常のSDRAMと互換性があったが、メモリコントローラはVCMであることを認識して対応する必要があった。VCMをサポートしたマザーボードは数少ない。

 セキュリティ 
一般には揮発性メモリの内容は電源が切れた途端消えてしまうものと考えるが、実はSDRAMの記憶した内容はすぐには消えない。完全に消えるまでには常温では数秒かかり、より低温ではそれを数分まで延ばすことができる。これを利用して直前まで動作していたメモリ上のデータを復元して盗むという手法が考えられるCold Boot Attacks on Encryption Keys Princeton University。これを「コールド・ブート攻撃」あるいは「アイスマン攻撃」などと呼ぶこともある。

 脚注・出典 

 関連項目 
 デバイス帯域幅の一覧

*

fi:DRAM#SDRAM