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 が量産されている。
歴史
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）。
操作
512MB SDRAM DIMM（正確には 512MiB = 512 × 1024² bytes = 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 よりも長いからである。
バースト要求
最近のキャッシュを持つマイクロプロセッサは、一般にキャッシュライン単位でメモリにアクセスする。キャッシュラインが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チップには「オートリフレッシュ」コマンドがあり、それぞれのバンクの1つのロウに対して同時にリフレッシュを行うことができる。SDRAMは内部にカウンタを持っていて、バンク内のロウを順番にオートリフレッシュすることができる。メモリコントローラはリフレッシュインターバル（一般に tREF = 64 ms）ごとにロウの数（これまで説明してきた例では4096）をカバーするのに十分なだけのオートリフレッシュ・コマンドを発行すればよい（この例だと、64ms内に4096回発行するということ）。このコマンドを発行する際には全バンクがアイドル状態でなければならない。
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年までのリリースが期待されていた。今は、サーバー向けが2013年、PC向けが2015年のリリースが期待されている。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以下が予定されており、1.0Vまで下げられると予測されている。
2009年2月、サムスン電子はDDR4開発の重要なステップとして 40nmルールのDRAMチップの試作検証を行った。2009年時点で一般に製造されているDRAMチップは50nmルールに移行しつつある状態だった。
2011年2月、サムスン電子は2GBの DDR4 SDRAM モジュールの開発を発表した。電源電圧 1.2V での最大帯域幅は 2.133Gbps で、30nmプロセス技術で「擬似オープンドレイン」テクノロジーを採用。同等のDDR3モジュールと比較すると消費電力を40%抑えている 。
2014年6月下旬、販売開始Intelの「Haswell-E」およびX99チップセットが対応する
2015年9月 Intelが第6世代Coreプロセッサを発表。今までハイエンドモデルでのみ対応していたDDR4がメインスリーム向けCPUで対応した。
DDR5 SDRAM
2011年現在、DDR4 の後継は2021年頃に商品化されるのではないかと予想されている。
成功しなかった後継テクノロジー
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の記憶した内容は電源を切ってもすぐには消えず、完全に消えるまでには時間がかかる。それでも常温では数秒で消えてしまうが、より低温では数分にまで消えるのを延ばすことができる。そこで、この事実を利用して直前まで動作していたメモリ上のデータを復元して盗むという手法が考えられる。これを「コールド・ブート攻撃」あるいは「アイスマン攻撃」などと呼ぶこともある。