DDR3 SDRAMにおけるコマンドとオペレーション

**DDR3 SDRAMにおけるコマンドとオペレーション**では、DDR3 SDRAMの内部レジスタ及びコマンドに対するオペレーションについて記述する。

## コマンドとオペレーション
ここではデバイスの制御方法とコマンドについて解説する。
まずコマンドの一覧を示す。コマンドは全てCKの上がりエッジとCK#の下がりエッジの交点を基準としたタイミングで与えられるハイ (H) またはロー (L) を意味する。ただしRESET#以外のピンのハイまたはローはVrefCAを基準とする。

表中のVまたはXはハイまたはローを意味する。Xはフローティングでもかまわない。BAはバンクアドレス (Bank Address)、RAはロウアドレス (Row Address)、CAはカラムアドレス (Column Address)、RFUは予備 (Reserve for Future Use)。

### 状態遷移図
以下にDDR3 SDRAMの状態遷移図を示す。

### リセットと初期化
ここではリセットピンとデバイスの電源投入時の初期化手順を説明する。

#### リセットピンについて
リセットピンはDDR3 SDRAMで採用されたリセット用の信号入力ピンである。他の信号はVref（参照電圧）と比較してハイ/ローを決定するため振幅が小さくてもデバイスは信号として受け取るのに対してリセットピンはCMOSレールトゥレール (Rail to Rail) で動作する。レールトゥレールとはハイ/ローの電圧幅いっぱいに振る信号を意味する。DDR3 SDRAMのリセットピンは電源電圧VDDとグランド電圧VSSに対して80%でハイ、20%でローとなる。例えばVDDが1.5Vの場合は1.2Vでハイ、0.3Vでローとなる。これはリセットピンが微小な変化に対して敏感である必要はなく、むしろノイズなどの小さな電圧変化に伴う誤動作を避ける目的がある。

またリセットピンは誤動作を避けるためにローパスフィルタ（電圧変動の高周波成分を除去する装置）の内蔵が推奨されている。リセットはメモリセルアレイの内容を破壊するかもしれない。

#### 電源投入と初期化手順
* 電源投入後、リセットを投入（リセットピンの電圧を0.2×VDD以下にし最低200us以上維持）する。次にCKEをローに落とし、最低10ns以上経過後リセットを解除（RESET#電圧を0.8×VDD以上に復帰）する。
* リセットを解除してから500us以上、CKEをローに保たなければならない。
* CKEをハイにする10nsまたは5サイクル以上前にクロックをスタートさせる必要がある。この間 コマンドはノーオペレーション (No Operation:NOP) またはデバイスディセレクト (Device Deselect:DES) でなければならない。CKEをハイにしてから初期化が完了するまでの間、CKEはハイを保持しなければならない。
* CKEをハイにしてからtXPR (Reset CKE Exit Time) 経過後にMRSコマンドを投入する。
* MRSコマンドはMR2, MR3, MR1, MR0の順で投入する。MRSコマンドとMRSコマンドの間はtMRD以上の間隔を開けなければならない。MR1でDLLを有効にしMR0でDLLリセットを行う。
* ZQキャリブレーションロング (ZQ Calibration Long:ZQCL) コマンドでZQ補正を開始する。DLLリセット中でもZQキャリブレーションは可能なので、ZQCL投入はMR1コマンド入力後tDLLKを待つ必要はないがtMODを待つ必要がある。
* DLLリセット/ZQキャリブレーションの完了のためtDLLK/tZQin待って初期化は終了する。tDLLK/tZQinはそれぞれ512サイクル。

### モードレジスタセット (Mode Register Set:MRS) の書き込み手順
DDR3 SDRAMでは各種modeやパラメタ設定のため4つのモードレジスタセットを用意している。各MRSにはデフォルトを設定していないので電源投入直後や、リセット・初期化時は、全てのMRSを設定しなければならない。MRSコマンドやDLLリセットはメモリセルアレイに格納されているデータへ何も影響しない。

MRSコマンドの書き込みにはtMRDサイクルを必要とするため、次のMRSコマンド入力は最低tMRD空けて実行しなければならない。またDLLリセット以外のMRSコマンドは完了までにtMODサイクルを必要とするため、MRSとノーオペレーション (No Operation:NOP) やデバイスディセレクト (Device Deselect:DES) を除くコマンドの入力は最低tMODサイクル待たなければならない。DRAMがアイドル状態のときはいつでもMRSの内容を書き換えることができる。

### モードレジスタ (Mode Register) MR0と設定できる機能
以下ではモードレジスタMR0で設定できるモードとその説明を行う。MR0は以下のフォーマットで設定する。

; BL
: バースト長 (Burst Length:BL)
; CL
: CASレイテンシ (CAS Latency:CL)
; BT
: バーストタイプ (Burst Type:BT)
; TM
: テストモード (Test Mode:TM)
; DLL
: DLLリセット (DLL Reset)
; WR
: ライトリカバリ (Write Recovery for Auto Precharge:WR)
; PPD
: プリチャージパワーダウン時のDLLコントロール (DLL control for Precharge Power Down:PPD)

#### バースト長 (Burst Length:BL)・バーストタイプ (Burst Type:BT)

バースト長、開始アドレス、およびバーストタイプでバースト中にアクセスするアドレス順は下表の通り。MR0:A1=0 A0=1時リード/ライトコマンド入力時のA12/BC#でBL8またはBC4 (バーストチョップ:Burst Chop) を選択できる。

バースト長にBL4固定を指定した場合、メモリデバイス内部では入出力バッファからメモリセルアレイに対する書き込み動作をBL8を指定した場合よりも2サイクル早く開始する。これはtWRとtWTRの開始位置が2サイクル短くなることを意味している。ただしBL8/BC4を動的に決定するモードを選択した場合、常にBL8と同じサイクルでライト動作を開始しなければならない。T: DQおよびDQSの出力ドライバはHi-Z。X: Don't care。

リード動作やライト動作を繰り返して行う場合、CASを再びローに落とせる様になるまでのサイクル数の下限であるtCCDが4であるため、BC4であっても続くリード/ライトコマンドの入力はBL8と同じサイクル数後になる。つまりBC4を選択しても空いたサイクルに別のデータを詰めてリード/ライト動作を継続できるわけではない。このためリード/ライト動作を継続する場合はバーストチョップを使用するメリットはない。しかしリード→ライト時や、ライト→リード時、ライト→プリチャージ (Precharge) 時にバーストチョップを行うことでBL8を利用する場合に比べてサイクル数を減らせる場合がある。詳細は後述のタイミングチャートを参照。

#### CASレイテンシ (CAS Latency:CL)

CASレイテンシはリードコマンドが有効になってから実際にデータが出力されるまでの遅延サイクル数を指す。リードコマンドを入力してからデータが出てくるまでの遅延サイクルであるリードレイテンシ (Read Latency:RL) はアディティブレイテンシ (Additive Latency:AL) とCLの和になる。CASレイテンシはデバイススペックや実動作速度で設定できる値が異なる。詳しくは各デバイスのスペックシートを参照すること。

#### テストモード (Test Mode:TM)

テストモードはデバイス生産時にのみ使用されるテスト用のモードである。通常は使用してはならない。テストモードでデバイスがどのように動作するかは未定義。おそらくデバイスメーカによってテストモードの動作は異なる。

#### DLLリセット (DLL Reset)

DLLリセットはデバイス内部のDLL (Delay Locked Loop) 回路のリセットを指定する。DLL回路とは時間の経過と共に環境の変化（電源電圧や温度など）や内的原因（メモリデバイス内で行う処理や内部クロック自身の持つ誤差）に起因して外部クロックと内部クロックの間に発生する誤差を補正しタイミングを一定に保つための回路。外部クロックと内部クロックの信号を継続的に比較する位相検出器で構成されている。信号間に位相差を検出した場合、調整回路(遅延回路)に制御情報をフィードバックする。DLLをリセットすることでDLL回路は外部クロックをロックすることができる。DLLリセットは外部クロックと内部クロックの同期のためにtDLLKサイクルを必要とする。tDLLKの区間、CKEはハイでなければならない。DLLを使用する場合、DLLを有効にしてからDLLをリセットする必要がある。DLLをリセットしてからtDLLK後にDLLが使用可能になる。DLLリセットはDLL回路のリセット完了後自動的に通常状態に戻るのでDLLリセット完了後に明示的にMR0:A8=0を再設定する必要はない。

#### ライトリカバリ (Write Recovery for Auto Precharge)

ライトリカバリサイクル数 (WR) はリカバリオートプリチャージ (Recovery Auto Precharge) 時間の計算式 (tDAL=WR+tRP/tCK) に用いられるサイクル数。tRPはプリチャージコマンドサイクル数。最小ライトリカバリサイクル数 (WRmin) はtWR/tCKで求める（小数点以下は切り上げ）。tWRはスペックシートに規定されているライトリカバリタイム、tCKは1サイクルタイム。設定するWRはWRmin以上の値を設定する。

#### プリチャージパワーダウン時のDLLコントロール (DLL Control for Precharge Power Down)

プリチャージパワーダウン時のDLLコントロール (DLL Control for Precharge Power Down) はプリチャージパワーダウン時にDLLを保持するかどうかを指定する。スローイグジットを選択した場合、DLLはプリチャージパワーダウン突入後に電流消費量を抑えるためにDLLを解除する。そのためパワーダウンを解除してからDLLの再ロックが必要となりデバイスに対してコマンド入力が有効になるまでにtXPDLLを要する。ファストイグジットを選択した場合、DLLはプリチャージパワーダウン突入後にも維持される。そのためパワーダウンを解除してからDLLの再ロックは不要であるためtXP後にデバイスに対してコマンド入力が有効になる。

### モードレジスタ (Mode Register) MR1と設定できる機能
以下ではモードレジスタMR1で設定できるモードとその説明を行う。MR1は以下のフォーマットで設定する。

; DLL
: DLLイネーブル (DLL enable)
; DIC
: 出力ドライバインピーダンスコントロール (Output Driver Impedance Control)
; RTT_Nom
: 通常時の終端抵抗 (RTT Nominal)
; AL
: アディティブレイテンシ (Additive Latency)
; Level
: ライトレベリングイネーブル (Write Leveling enable)
; TDQS
: ターミネーションDQSイネーブル (Termination DQS Enable:TDQS)
; Qoff
: 出力禁止

#### DLLイネーブル (DLL Enable)

DLLを有効にするか (Enable) 無効にするか (Disable) を指定する。DLLとはDelay Locked Loopの略で外部クロックと内部クロックのタイミング補正に使用される回路である。通常、動作時は常にDLLは有効にしておかなければならない。電源投入後の初期化時や、DLL無効後に通常動作に復帰するときにDLLイネーブルを設定する必要がある。DLLはセルフリフレッシュ開始時に自動的に無効となりセルフリフレッシュ終了時に自動的に有効になる。MR1でDLLを有効にした場合は、続いてMR0でDLLのリセットを行わなければならない。

DLLを無効にした場合、ダイナミックODTは使用できない。DLLが無効の間はODTの入力をローにするか、またはMR1:A9,A6,A2 (RTT_Nom) を0にしなければならない。またMR2:A10,A9 (RTT_WR) =0にしてダイナミックODTも無効にしておかなければならない。

#### 出力ドライバインピーダンスコントロール (Output Driver Impedance Control:DIC)

出力ドライバインピーダンスを指定する。RZQ=240Ω。データピンの出力ドライバは240Ωの抵抗をプルアップ・プルダウン用に7個ずつ持っている。この抵抗の一部あるいは全部を有効・無効にすることで出力インピーダンスを調整する。この出力抵抗回路はRTT_Nom/RTT_WRで指定する終端抵抗と共有している。

#### 通常時の終端抵抗指定値 (RTT_Nom)

RTT_NomとRTT_WRを個別に制御できる。MR1でRTT_Nomを指定する。RZQ=240Ω。

#### アディティブレイテンシ (Additive Latency:AL)

アディティブレイテンシを利用することでデータバスを効率的に活用できるようになる。アクティブコマンドからリード/ライトコマンドの入力が可能になるまでにtRCD時間が必要である。このtRCDのためにリード/ライトコマンドと別のバンクに対するアクティブコマンドの競合が発生することがある。この競合を避けるために別のバンクに対するアクティブコマンドの入力が1サイクル遅らせると、データを連続的にリード/ライトできないサイクルが発生する。このようなサイクルをバブル (bubble) と言う。バブルが発生するとデータバスに無駄な空きが生じ、データ転送効率が低下する。そこでDDR2 SDRAMからポステッドCAS (Posted CAS) が採用された。ポステッドCASとはtRCD期間中の任意のタイミングに次のリード/ライトコマンドを入力できるようにする機能である。入力したリード/ライトコマンドはデバイス内部で保持され一定期間後に有効となる。この一定期間をアディティブレイテンシと言う。ポステッドCASを活用することで効率的なコマンド入力が可能になりデータ転送効率が向上する。

ライトコマンドから実際にデータの書き込まれるまでのサイクル数＝ライトレイテンシ(Write Latency:WL)はアディティブレイテンシ (AL) とCASライトレイテンシ (CAS Write Latency:CWL) の和 (WL=CWL+AL)、リードコマンドから実際にデータが読み出されるまでのサイクル数＝リードレイテンシ (Read Latency:RL) はアディティブレイテンシ (AL) とCASレイテンシ (CAS Latency:CL) の和にな る(RL=CL+AL)。

DDR2 SDRAMではAL=0～4が選択可能であったが、DDR3 SDRAMではAL=0,CL-1,CL-2が選択可能である。

#### ライトレベリング (Write Leveling)

ライトレベリングを設定するとデバイスはライトレベリングモードに突入する。ライトレベリングモード時、デバイスはDQSの上がりエッジでサンプリングしたクロックの値をDQピンから出力する。

DDR3のメモリモジュールでは波形品質の向上のために、コマンドやアドレス、クロックを各デバイスを各ピン一つのラインで数珠繋ぎ（デイジーチェイン）でつなぐフライバイ構造 (Fly-by) を用いる。従来のメモリモジュールはクロックをトーナメント方式で分岐して各デバイスに同一タイミングで入力するように調整していた。このためメモリデバイス・コントローラはクロックとコマンド・アドレス・データのタイミングがずれることを考慮する必要がなかった反面、データ転送が高速化するにつれて等長配線への要求が厳しくなるとともに等長配線のための引き回しが配線長を伸張し波形品質の劣化を招いた。そこでデバイスを最短距離で数珠繋ぎに接続するフライバイ構造の提案がなされた。

フライバイ構造によって波形品質の向上とDIMM内の配線の短縮が可能になるが、反面クロックがDIMM内の各DRAMに伝播する時間に差が生じ、クロックとDQSの位相差が発生する。そこでメモリコントローラはDQS入力タイミングをクロックの伝播遅延にあわせて遅らせるという処理が必要になる。ライトレベリングはこの遅延量の決定のために必要となる機能である。

ライトレベリングとはDDR3 SDRAMからの簡易なフィードバックによってメモリコントローラがクロックとDQSの位相補正を行う機能のことを言う。
DDR3 SDRAMはDQSの上がりエッジでクロックをサンプルした結果をDQピンからメモリコントローラに返す。このフィードバックは非同期で行われる。
メモリコントローラはDQSのタイミングを変更しながら、この値が0から1に変化するタイミングを検出する。この位相差はDQピンにも同時にフィードバックしなければならない。DQS,DQS#,DQピンは全てコントローラで終端する。x16デバイスでは上位8ビットと下位8ビットは独立しておりそれぞれ別々に制御する。

#### 出力禁止 (Output Buffer Disable:Qoff)

出力禁止(Qoff)を設定するとデバイスの出力ピン (DQ, DQS DQS#) は何も接続しない状態(Hi-Z)になる。

#### ターミネーションDQSイネーブル (Termination DQS Enable:TDQS)

TDQS, TDQS#ピンはx8デバイスで構成されているDIMMモジュールとx4デバイスで構成されているDIMMモジュールが混在するようなシステムでx4デバイスのDQS,DQS#をx8デバイスのTDQS/TDQS#で終端し反射を抑制することで波形品質を維持するために付けられたピンである。大規模なシステムで複数の種類のモジュールの混在を許容することでシステムの柔軟性を高めるのに役立つ。

TDQSはx8デバイスのみ有効にすることが可能で、x4/x16デバイスでは有効にすることができない。TDQS/TDQS#の終端抵抗値はDQS/DQS#と等しい。DDR2 SDRAMにおけるRDQSと近い機能でRDQSはデータ出力時にデータストローブ信号を出力するのに対して、TDQSは終端抵抗だけを提供する。

TDQSとデータマスク (Data Mask:DM) は同じピンを使うため、TDQSを使用する場合はDMは使用できない。TDQSを使用しない場合のみはDMを使用可能となる。TDQSを使用しない場合、TDQS#ピンは使われない。

### モードレジスタ (Mode Register)MR2と設定できる機能

; PASR
: パーシャルアレイセルフリフレッシュ (Partial Array Self Refresh:PASR) - オプション機能
; CWL
: CASライトレイテンシ (CAS Write Latency:CWL)
; ASR
: オートセルフリフレッシュ (Auto Self Refresh:ASR)
; SRF
: セルフリフレッシュテンプラチャ (Self-refresh temperature range:SRT)
; RTT_WR
: ライト時の終端抵抗 (RTT Write)

#### パーシャルアレイセルフリフレッシュ (Partial Array Self Refresh:PASR) - オプション機能

オプション機能なのでデータシートを確認すること。PASRはデバイスの一部のバンクだけをセルフリフレッシュの対象にする機能。必要なバンクだけリフレッシュするため全体をリフレッシュする場合よりも消費電力を抑えられる。PASRが有効の場合、指定された領域のメモリがセルフリフレッシュの対象となる(対象外の領域のデータは失われる場合がある)

#### CASライトレイテンシ (CAS Write Latency:CWL)

CASライトレイテンシ (CAS write latency:CWL) は内部ライトコマンドから実際にデータの書き込み準備が完了し最初のデータ書き込みが始まるまでの遅延サイクル数を表す。

DDR2 SDRAMでライトレイテンシ (Write Latency:WL) はリードレイテンシ (Read Latency:RL) で与えられる計算式WL=RL-1で自動的に決定する。ただしリードレイテンシはCASレイテンシ (CAS Latency:CL) とアディティブレイテンシ (Additive Latency:AL) の和 (RL=CL+AL)。DDR3 SDRAMではDDR2 SDRAMと異なりWLは新たに定義されたCASライトレイテンシ (CAS Write Latency:CWL) とALで与えられる計算式WL=AL+CWLで決定する。CWLはモードレジスタMR2で5～8の値を指定する。

#### オートセルフリフレッシュ (Auto Self Refresh Method:ASR) とセルフリフレッシュテンプラチャ (Self-Refresh Temperature Range:SRT)

オプション機能なのでデータシートを確認すること。DDR3 SDRAMは動作保証温度範囲内 (TOPER:0～95℃) においてセルフリフレッシュの動作を保証しているが、より広範な温度帯域でセルフリフレッシュ動作を期待する場合がある。そのような場合、ASR機能かSRTを使用しなければならない。

動作保証温度範囲ではオートセルフリフレッシュかオートセルフのいずれかを有効にしなければならない。動作保証温度範囲を超える場合、セルフリフレッシュテンプラチャを有効にする。

#### ライト時の終端抵抗 (RTT_WR)

RTT_WRに0以外を設定することでダイナミックODTが有効になる。データバスの波形品質を向上させるためにDDR3 SDRAMにライト時の終端抵抗値を動的に変更する機能ダイナミックODTが加えられた。ただしライトレベリング (Write Leveling) 時はRTT_Nomだけが有効。RZQ=240Ω。

### モードレジスタ (Mode Register) MR3と設定できる機能

; ODTS
: オンダイサーマルセンサ (On Die Thermal Sensor:ODTS) - オプション機能
; MPR
: マルチパーパスレジスタ (Multi-Purpose Register:MPR)
; MPR Loc
: マルチパーパスレジスタロケーション (Multi-Purpose Register location:MPR Loc)

#### マルチパーパスレジスタ (Multi-Purpose Register:MPR) - リードレベリング (Read Leveling)

MPRはデータ読み出し時のタイミング補正のために用いられる。DDR3のメモリモジュールでは波形品質の向上のために、コマンドやアドレス、クロックを各デバイスを各ピン一つのラインで数珠繋ぎ（デイジーチェイン）でつなぐフライバイ (Fly-by) 構造を用いる。フライバイ構造によって波形品質の向上とDIMM内の配線の短縮が可能になるが、反面クロックがDIMM内の各DRAMに伝播する時間に差が生じ、データ出力タイミングが各デバイスごとに異なる。そこでメモリコントローラ内にデータを受け取るタイミング差を修正する遅延回路を設けて対応する。このとき各デバイスの遅延時間を見積もる操作をリードレベリング (Read Leveling) と呼ぶ。

MPRを有効にした後、リードコマンド (RDまたはRDA) を入力するとリードコマンドはメモリセルアレイではなくMPRに入力される。メモリセルアレイのデータの読み出しはMPRを無効にするまでできない。またMPRが有効であるとき、MRSコマンド、リードコマンド、リセット入力以外は無効である。

MPR読み出し動作中は1ビットの論理インタフェイスとなる。つまりDQ0 (DQU0/DQL0) はMPRからのデータを出力し、DQ0以外のピンはDQ0と同一データかもしくは0を出力する。DQS, DQS#からは通常のリードコマンド入力時と同様データストローブ信号を出力する。読み出し動作時のバースト長、バーストタイプ、リードレイテンシ(Read Latency)はMRSの設定に従い、バーストチョップ(Burst Chop:BC)はリードコマンド入力時のA12/BCに従う。リードコマンド入力時、A0～A1は0でなければならない。A12はバーストチョップの判断に用いられる。その他のアドレス入力は無視する。MR3:A1=0, A0=0のとき、MPRから常に0,1,0,1というデータが読み出される。

### アクティブコマンド (Active:ACT)
アクティブコマンドはこれからアクセスするバンクアドレスをBA0-BA2、ロウアドレスをA0-A15で指定し開く（有効にする）。このロウアドレスはプリチャージコマンド (precharge) の入力でそのバンクがアイドルになるまで有効となる。他のロウアドレスを指定する場合、プリチャージコマンドを入力する必要がある。

### プリチャージコマンド (Precharge:PRE,PREA)
プリチャージコマンドはアクティブコマンドで開いたバンク/ローアドレスを閉じる（ロウアドレスを無効にして保存する）。オートプリチャージを使っている場合を除き、プリチャージコマンドからtRP時間経過しなければ同一バンクをActiveすることができない。プリチャージコマンドを入力すると当該バンクはアイドル状態に復帰する。プリチャージコマンドはアクティブしていないバンクに対しても有効。

プリチャージコマンドは単一バンクを対象とするプリチャージコマンド (PRE) と全バンクを対象とするプリチャージオールコマンド (PREA) がある。プリチャージコマンドはA10をローにし、BA0-BA2で対象バンクを指定する。プリチャージオールコマンドはA10をハイにし、BA0-BA2は0にしておく。

### リードコマンド
リードコマンドはデータを読み出すコマンド。メモリデバイスはアクティブコマンドで指定したバンクおよびロウアドレス、リードコマンドで指定したカラムアドレスからバースト長分だけデータを連続で出力する。データはリードコマンドからアディティブレーテンシ (AL) とCASレーテンシ (CL) の和 (AL+CL) のサイクル数分送れて出力される。データと同期してデータストローブ信号 (DQS) も出力する。DQSはデータの出始め前にtRPRE期間プリアンブル (Preamble)、データ終了時にtRPST期間のポストアンブル (Postamble) を出力する。

リード/ライトコマンドの入力時にA12/BC#で動的にバーストチョップ (Burst Chop:BC) の有無 (BC4/BL8) を切り替えることができる。リード作時のタイミングパラメタを以下に示す。

* tDQSCKmax/tDQSCKminはCK/CK#の交点に対するDQS/DQS#の交点の許容される振れ幅に対する規定値
* tDQSCKはCK/CK#の交点に対するDQS/DQS#の交点のタイミング
* tQSHはDQSのハイ区間、tQSLはDQSのロー区間。
* tLZ/tHZはCK/CK#の交点からDQS/DQが信号を出力を開始するまでの時間、およびHi-Zになるまでの時間
* tDQSQはDQS/DQS#の交点から最も出力タイミングが遅いDQピンからデータが出始めるまでの時間
* tQHははDQS/DQS#の交点から最も出力タイミングの早いDQピンからデータが出終わるまでの時間
* 有効データ区間はtQH-tDQSQと等しい。

ただしtLZ/tHZおよびtRPREの起点/TRPSTの終点はは下図で示すように計算する。

以下にリードコマンドと他のコマンドを組合せたときのタイミングチャートを示す。

ただしBL=8、AL=0、CL=5、Dout nはCol nに対応して読み出されたデータである。

DDR3 SDRAMではCAS#から次のCAS#までのタイミング制限tCCDは4サイクルである。そのためリードコマンドは4サイクルごとにしか入力できない。データの読み出しが連続する場合、1つ目のリードコマンドに対するポストアンブル (Postamble)、2つ目のリードコマンドに対するプリアンブル (Preamble) は消失し連続した読み出しの先頭にプリアンブル、最後にポストアンブルが現われる。

ただしBC4、CL=5、AL=5、Dout nはCol nに対応して読み出されたデータである。
バーストチョップ (Burst Chop:BC4) を用いてリードデータを途中で停止しても続くリードコマンドをtCCDより短いタイミングで入力することはできない。そのため2つ目のリードコマンドに対応する読み出しは1つ目のリードコマンドがバーストチョップでなかった場合と等しい。

ただしBL8、CL=5、CL=0、CWL=5、Dout nはCol nに対応して読み出されたデータ、Din bはCol bに対応して書き込まれるデータである。
バーストチョップしないリードコマンドからライトコマンドにはRL+tCCD+2 \times tCK-WL期間が必要になる。ただしRLはリードレイテンシ (Read Latency)、WLはライトレイテンシ (Write Latency)、tCCDはCAS#から次のCAS#までのタイミング制限、tCKは1サイクルの時間。図の例ではリードからライトの切り替わりに2サイクル (2 \times tCK) の空き時間が発生する。

ただしBC4、CL=5、AL=0、CWL=5、Dout nはCol nに対応して読み出されたデータ、Din bはCol bに対応して書き込まれるデータである。
バーストチョップしたリードコマンドからライトコマンドまでの期間はRL+tCCD/2+2 \times tCK-WLに短縮される。このためtCCD/2サイクル早くライトコマンドを入力できる。

ただしCL=5、AL=0、Dout nはCol nに対応して読み出されたデータである。

ただしCL=5、AL=0、Dout nはCol nに対応して読み出されたデータである。
先に読み出すデータに対してバーストチョップを行ってもtCCDは変わらない。そのため1つ目のリードコマンドに対応するデータの読み出しと2つ目のリードコマンドに対応するデータの読み出しの間に2サイクルデータの出力されない区間が発生する。このような場合、それぞれのデータの読み出し始めと終わりにプリアンブル・ポストアンブルが挿入される。

ただしCL=5、AL=0、CWL=5、Dout nはCol nに対応して読み出されたデータ、Din bはCol bに対応して書き込まれるデータである。
バーストチョップしたリードコマンドからライトコマンドまでの期間はライトコマンドがバーストチョップかどうかに関係なくRL+tCCD/2+2 \times tCK-WLに短縮される。このためtCCD/2サイクル早くライトコマンドを入力できる。

ただしCL=5、AL=0、CWL=5、Dout nはCol nに対応して読み出されたデータ、Din bはCol bに対応して書き込まれるデータである。
リードコマンドからライトコマンドまでの期間はRL+tCCD+2 \times tCK-WLである。これはライトコマンドがバーストチョップしていてもリードコマンドがバーストチョップされていなければ短縮されない。

### ライトコマンド
ライトコマンドはデータを書き込むコマンド。メモリデバイスはアクティブコマンドで指定したバンクおよびロウアドレス、ライトコマンドで指定したカラムアドレスに対してバースト長分だけデータを連続で書き込む。データはライトコマンドからアディティブレーテンシ (AL) とCASライトレーテンシ (CWL) の和 (AL+CWL) のサイクル数分送れて書き込み可能になる。データの中央を打ち抜くタイミングでデータストローブ信号 (DQS) も入力しなければならない。DQSはデータの出始め前にtWPRE期間プリアンブル (Preamble)、データ終了時にtWPST期間のポストアンブル (Postamble) を入力しなければならない。
リード/ライトコマンドの入力時にA12/BC#で動的にバーストチョップ (Burst Chop:BC) の有無 (BC4/BL8) を切り替えることができる。リード作時のタイミングパラメタを以下に示す。
ライト動作時のタイミングパラメタを以下に示す。

以下にライトコマンドと他のコマンドを組合せたときのタイミングチャートを示す。

ただしCWL=5、AL=0、Din nはCol nに対応して書き込まれるデータである。
ライトからプリチャージコマンド入力可能になるまでのライトリカバリタイム (tWR) は書き込み終了を起点とするためバーストチョップ使用時はプリチャージコマンドを2サイクル早く入力することができる。

ただしBL8、CWL=5、AL=0、Din nはCol nに対応して書き込まれるデータである。
リードコマンド同様ライトコマンドも4サイクルごとにしか入力できない。データの書き込みが連続する場合、1つ目のライトコマンドに対するポストアンブル (Postamble)、2つ目のライトコマンドに対するプリアンブル (Preamble) は不要で連続した読み出しの先頭にプリアンブル、最後にポストアンブルを入力する。

ただしBC4、CWL=5、AL=0、Din nはCol nに対応して書き込まれるデータである。
リードコマンド同様ライトコマンドもバーストチョップを入れても二つのコマンドの間隔を縮めることは出来ない。データが連続しない場合、一つ目のデータと二つ目のデータのそれぞれの先頭にプリアンブル、末尾にポストアンブルを入れなければならない。

ただしCWL=5、AL=0、Din nはCol nに対応して書き込まれるデータ、Dout bはCol bに対応して読み出されるデータである。
ライトコマンドに対応するデータ入力の終了からtWR後にリードコマンドを入力することができる。

ただしCWL=5、AL=0、Din nはCol nに対応して書き込まれるデータ、Dout bはCol bに対応して読み出されるデータである。
tWRの起点はバーストチョップしてもバーストチョップしなかったときと同一である。そのためライト動作でバーストチョップしてもリードサイクルは早まらない。

ただしCWL=5、AL=0、Din nはCol nに対応して書き込まれるデータである。

ただしCWL=5、AL=0、Din nはCol nに対応して書き込まれるデータである。
先に書き込まれるデータに対してバーストチョップを行ってもtCCDは変わらない。そのため1つ目のライトコマンドに対応するデータの書き込みと2つ目のライトコマンドに対応するデータの書き込みの間に2サイクルデータの書き込めない区間が発生する。このような場合、それぞれのデータの書き込み始めと終わりにプリアンブル・ポストアンブルを挿入しなければならない。

次にライトコマンドとデータマスク (Data Mask:DM) との関係を示す。

DMはライト動作時にデータを書き込むか否かを示すマスクとして利用する。DMがローのときのデータのみデバイスに書き込まれ、ハイのときのデータはデバイスに書き込まれない。DMは書き込みデータとタイミングを同期させて入力する。DMはライト動作時にのみ有効でリード動作を含むほかの動作時にはどんな値も無効な入力になる。

### セルフリフレッシュエントリ (Self Refresh Entry:SRE) コマンドとセルフリフレッシュイグジット (Self Refresh Exit:SRX) コマンド
DDR3 SDRAMでは省電力モード時などでもデバイスのデータの内容を保持するためにセルフリフレッシュモードを使える。セルフリフレッシュモードに入った場合、デバイスは外部クロックの入力無しでメモリデータの保持動作を行える。SREコマンドの入力でデバイスはセルフリフレッシュモードに入る。

SREコマンドはアイドル状態でなければ受け付けない。SREコマンド前にバンクプリチャージを行い、かつtRPが経過していなければならない。またODTをオフにしておかなければならない。ODTをオフにするはODTピンをローにするかMR1でODT無効にする。セルフリフレッシュ中はCKEはローに保たなければならない。セルフリフレッシュ開始時にDLLは一旦オフにされ、セルフリフレッシュ終了時にDLLは再度有効になる。

セルフリフレッシュモード中はCKEとRESET#を除く全てのピンからの入力は無効となる。当然、電源やVref（参照電圧）ピンは適正な電圧を維持しなければならない。セルフリフレッシュモード中は内部クロックは電力消費を抑えるために停止している。そのためセルフリフレッシュモードに入ってからtCKSRE経過後外部クロックの周波数を落としたり停止してもかまわない。ただしセルフリフレッシュモードから抜けるtCKSRX前までには外部クロックは再起動し安定させていなければならない。セルフリフレッシュモードは最低tCKE時間保持しなければならない。

SRXコマンドを入力すればセルフリフレッシュモードを終了する。SRXコマンド入力前に外部クロックを安定させていなければならない。通常のコマンド入力はSRXコマンド入力後に内部のリフレッシュ動作が終了する時間 (tXS) を待たなければならない。またDLLロックを前提としたコマンドの入力はDLL再ロック/ZQキャリブレーション (ZQ calibration:ZQCL) が終了する時間 (tXSDLL) を待たなければならない。

### リフレッシュ (Auto Refresh:REF) コマンド
セルフリフレッシュと同様、デバイスのデータを保持するためにオートリフレッシュモードが用意されている。デバイスはリフレッシュ (REF) コマンドを指定するとデバイスはRefreshモードに入る。REFコマンドはアイドル状態でなければ受け付けない。REFコマンド前にバンクプリチャージを行い、かつtRPが経過していなければならない。リフレッシュ期間中、デバイス内部にあるアドレスカウンタがバンクアドレスを供給する。オートリフレッシュ中、外部からアドレスを供給する必要はない。
オートリフレッシュサイクルが終了したら全てのバンクはプリチャージが完了しアイドル状態に復帰する。REFコマンド入力から次のアクティブコマンドまたはオートリフレッシュコマンド入力までtRFCの間隔をあけなければならない。

### パワーダウン (Power Down)
DDR3 SDRAMはCKEをローに落とすことでパワーダウン（省電力モード）に入る。ただしMRSコマンド入力中、MPR動作中、ZQCAL実行中、DLLロック中、リード/ライト動作中、CKEをローに落としてはならない。ローアドレスをアクティブ (Active) にしている最中、プリチャージ (precharge) やオートプリチャージ (auto precharge) 中、リフレッシュ (refresh) 中はCKEをローに落としてもかまわない。ただしパワーダウンの電流スペックはこれらの操作が終わっていることを前提にしているので、電流スペックを満たさないかもしれない。

パワーダウン時にDLLを解除してしまうスローイグジットモード (Slow Exit Mode) を使用するとパワーダウンから抜けたときにリードやODTの同期のために再度DLLをリセットしなければならないのでパワーダウンから抜けたときに素早く復帰するにはDLLはロックしたままのファストイグジットモード (Fast Exit Mode) を使用すべきである。

実行中のコマンドが全て完了した段階で全てのバンクがプリチャージされてからパワーダウンに入ることをプリチャージパワーダウン (precharge power Down) といい、いずれかのバンクがアクティブのままパワーダウンに入ることをアクティブパワーダウン (active power down) という。

パワーダウンに入るとCK, CK#, ODT, CKE, RESET#を除く全ての入力・出力が不活性になる。パワーダウンに入ってからtCPDED期間はNOPかDESLコマンドしか入力してはならない。tCPDED経過後、コマンドやアドレスは不活性になる。

プリチャージパワーダウンのスローイグジットモードはDLLを解除するが、プリチャージパワーダウンのファストイグジットモードを利用するか、アクティブパワーダウンを利用する場合、DLLを解除しないのでパワーダウンからの復帰は早い。パワーダウン中はCKE ロー、RESET ハイ、安定したクロック入力、有効な状態のODTを維持しなければならない。その他の入力ピンは無効である。RESET#がローになった場合、パワーダウンは解除され、デバイスはリセットされる。

パワーダウンはCKE ハイに同期して終了する。CKE ハイはtCKE期間維持されなければならない。CKEがハイになってからtXPまたはtXPDLL経過後にコマンド入力が可能になる。

ただしCL=5、AL=0、Dout nはCol nに対応して読み出されたデータである。
バーストチョップを使用してもリードコマンドからパワーダウンエントリを入力できるようになるまでの時間:tRPDENは変わらない。

ただしCWL=5、AL=0、Din nはCol nに対応して書き込まれるデータである。
オートプリチャージ付ライトコマンドの入力時にはデータの書き込み完了からWRサイクル間はパワーダウンすることはできない。バーストチョップを使用してもWRの起点となるサイクルは変わらない。

ただしCWL=5、AL=0、Din nはCol nに対応して書き込まれるデータである。
ライトコマンドの入力時にはデータの書き込み完了からtWR期間経過後からパワーダウンできる。バーストチョップを使用してもtWRの起点となるサイクルは変わらない。

アクティブパワーダウンまたはファストイグジットモードでパワーダウンしている場合はパワーダウンイグジットからtXP経過後にコマンド入力が可能になる。スローイグジットモードでパワーダウンしている場合はDLLの再ロックのためにtXPDLL経過後にコマンド入力が可能になる。ただしこの場合でもDLLリセットコマンドの入力は不要である。

オートリフレッシュコマンドからtREFPDEN経過後、パワーダウンできる。

アクティブコマンドからtACTPDEN経過後、パワーダウンできる。

プリチャージコマンドからtPRPDEN経過後、パワーダウンできる。

MRSコマンドからtMRSPDEN経過後、パワーダウンできる。

パワーダウン終了からtCKE経過後、再度パワーダウンできる。

パワーダウン終了後、オートリフレッシュコマンドを入力して再度パワーダウンするとき、パワーダウン終了からtXPDLL経過後、再度パワーダウンできる。

オートリフレッシュコマンド入力後パワーダウンしたとき、リフレッシュコマンドからtRFC経過後かつパワーダウン終了からtCKE経過後、コマンド入力が有効になる。

パワーダウン中にクロック周波数(おそらく位相変化を含む)を変更した場合、パワーダウン終了からtXP経過後にDLLリセットを行わなければならない。

### ダイナミックオンダイターミネーション (Dynamic On Die Termination:Dynamic ODT)
#### 信号の反射について
一般にPCで使われているスタブバス (Stub BUS) はCPU/メモリコントローラとメモリモジュールをつなぐデータラインを複数のメモリモジュールで共有する。各データラインは、メインのデータラインからメモリモジュールのコネクタで分岐する。デバイスの接合部でインピーダンスが大きく異なるためにデバイス端に達した信号はスタブバスはシステムやモジュール,デバイスの設計を簡素化できる反面、デバイス端で発生した反射波が分岐を通してメインの伝送線路に達するために伝送線路上の波形品質が悪化するために高速なデータ転送には不向きとされている。

このような場合に高速なデータ転送に必要な波形品質を確保するために、以下のような対策が考えられる。
* 全てのデバイスを1対1で接続する (Point to Point接続)
* 終端抵抗をデバイスの直近に設けデバイス端での反射を抑制する。
* スタブの距離を短くする。

ODTはデバイス内部に終端抵抗を設けることで、部品点数を増やしコストを増大させることなくデバイス端での反射波を抑制し高速なデータ転送に必要な波形品質を確保している。ODTはDDR2 SDRAMから導入されている。

DDR3 SDRAMではDQ, DQS, DQS#, DM, TDQS, TDQS#（x8デバイスでTDQSを利用する場合のみ）の終端抵抗のオン/オフのコントロールをODTピンの入力で行うことができる。ODTピンからの入力がハイのときODTはオンに、ローのときODTはオフになる。ただしMR1:A2,A6,A9でODT無効を選択した場合はODTピンの入力によらずODTは常にオフとなる。ODT オフ時セルフリフレッシュの動作は保証されない。ODT オン時の抵抗値 (RTT) はMR1:A2,A6,A9で指定した値となる。

#### 同期ODT (Synchronous ODT)
同期ODTとはODTピンの入力からアディティブレイテンシ (Additive Latency) 分遅延してDQピンなどの終端抵抗 (RTT) の値のオン/オフが同期する機能を指す。同期ODTモードを使用する場合はDLLがロックされていなければならない。DLL オフでODTの動作は保証されない。そのためDLL オフの場合、ODTピンの入力をローにするか、MR1:A2,A6,A9でODT無効を選択しODTを継続してオフにしていなければならない。

同期ODTモード時、ODTピンの入力がハイになってからODT オンレイテンシ (ODTLon) 後にRTTはオンになる。同様にODTピンの入力がローになってからODT オフレイテンシ (ODTLoff) 後にRTTはオフになる。ODTLon, ODTLoffはそれぞれODTLon=WL-2=AL+CWL-2, ODTLoff=WL-2=AL+CWL-2で計算する。

同期ODTモード時、以下のタイミングパラメタが適用される。
最小RTTオン時間 (tAONmin) はODTLonからメモリデバイスがHi-Z状態からODT抵抗をオンに切り替え始めるタイミング、最大RTTオン時間 (tAONmax) はODTLonからメモリデバイスがODT抵抗を完全にオンにしたタイミングである。逆に最小RTT オフ時間 (tAOFmin) はODTLoffからメモリデバイスがODT抵抗をオフに切り替え始めたタイミング、最大RTT オフ時間 (tAOFmax) はODTLoffからメモリデバイスが完全にHi-Z状態になったタイミングである。

ただし、Hi-Z⇔RTTの切り替わりのタイミングを得るのは非常に難しいため簡易的にDQなどの出力が変化する上がり/下がりエッジの任意の2点を結ぶ直線とVSSQ/VRTTとの交点をスペックとして用いる。

ODTH4を満たす時間ODTの入力はハイを保たなければODTオンとなったとは見なされない。ODT ハイでライトコマンドが入力された場合、ライトコマンドからBL4のときはODTH4の間、BL8のときはODTH8の間、ODTの入力はハイを保たなければならない。

ODTH4/ODTH8はODTピンの入力がハイになってからODTピンの入力がローになるまで、またはライトコマンドの入力からODTピンの入力がローになるまでの間を指す。

#### リード動作中のODT
DDR3 SDRAMは終端と出力を同時に行えない。リード時のプリアンブル (Preamble) より半サイクル以上前にODTピンの入力をローにしてRTTをオフにしていなければならない。またPostamble出力から1サイクル程度RTTは有効にならないだろう。

#### ダイナミックODT (Dynamic ODT) の導入
通常動作時とデータ書き込み時で異なる終端抵抗を設定することで、波形品質が向上する場合がある。DDR2 SDRAMではODTの抵抗値を変更するためにはMRSの再設定しなければならなかったが、DDR3 SDRAMでは動的に終端抵抗を変更できる機能ダイナミックODTを導入した。ダイナミックODTはMR2:A9,A10を設定することで有効になる。ダイナミックODTの仕様は以下の通り。

* 2つのRTT値 (RTT_Nom/RTT_WR) を利用できる。
* RTT_NomはMR1:A2,A6,A9で設定する
* RTT_WRはMR2:A9,A10で設定する。
* 終端のオン/オフはODTピンのハイ/ローで指定し、レイテンシはODTLon/ODTLoffである。
* ライトコマンド入力からODTLcnw (ODT RTT_Nom⇒RTT_WT レイテンシ)サイクル後にRTT_WRが有効になる。
* BL8時、ライトコマンド入力からODTLcwn8 (ODT RTT_WR⇒RTT_Nom レイテンシ) サイクル後にRTT_Nomに戻る。
* BC4時、ライトコマンド入力からODTLcwn8 (ODT RTT_WR⇒RTT_Nom レイテンシ) サイクル後にRTT_Nomに戻る。

DLLオフ時、ダイナミックODTの動作は保証されない。DLL オフ時は必ずダイナミックODTをMRSコマンドで無効にしておかなければならない。

RZQはZQピンにつながる外部抵抗の抵抗値 (240Ω±1%)。ZQピンは外部抵抗RZQを介してGNDに接続する。

#### 非同期ODTモード
メモリデバイスがDLL オンモードで動作中にプリチャージパワーダウン (Precharge Power Down) で一時的にDLLをオフにしたときに非同期ODTモードが選択される。非同期ODTモード中、ODTピンからのコントロールはアディティブレイテンシ (Additive Latency:AL) 時間の遅延は発生しない。
最小RTT オン時間 (tAONPDmin) はODT ハイからメモリデバイスがHi-Z状態からODT抵抗をオンに切り替え始めるタイミング、最大RTT オン時間 (tAONPDmax) はODT ハイからメモリデバイスがODT抵抗を完全にオンにしたタイミングである。逆に最小RTT オフ時間 (tAOFPDmin) はODT ハイからメモリデバイスがODT抵抗をオフに切り替え始めたタイミング、最大RTT オフ時間 (tAOFPDmax) はODT ハイからメモリデバイスが完全にHi-Z状態になったタイミングである。

非同期ODTタイミングパラメタは以下のように規定されている。

#### 同期ODTモード ⇔ 非同期ODTモードの移行
プリチャージパワーダウン (Precharge Power Down) のスローイグジットモード (Slow Exit Mode) を開始するとODTのモードが同期ODTモードから非同期ODTモードへ移行する。

プリチャージパワーダウンのスローイグジットモードを終了するとODTのモードが非同期ODTモードから同期ODTモードへ移行する。

### ZQキャリブレーション (ZQ Calibration:ZQCAL) コマンド
ZQキャリブレーションは出力抵抗RonおよびODTを補正するために用いられる。DDR3 SDRAMは初期化時のRONとODTの補正により長い時間を要する。また定期的にRON/ODTの補正が必要になる。この補正は初期化時よりも短い時間で完了する。

ZQキャリブレーションロング (ZQ Calibration Long:ZQCL) コマンドは電源投入後の初期化シーケンス内で行われる初期補正で使用される（もちろん、このコマンドは電源投入時だけではなくシステム環境に応じてコントローラはいつでも入力できる）。ZQCLコマンドはメモリデバイス内部の補正回路を起動する。補正完了と共に補正値は補正回路から入出力部へ送られ、RON/ODTを更新・反映される。
リセット後の最初のZQCLコマンドは完全な補正と全ての値の更新のためにtZQinit (512サイクル) の期間を必要とする。それ以外のときはZQCLはtZQoper (256サイクル) で完了する。
ZQキャリブレーションショート (ZQ Calibration Short:ZQCS) コマンドは定期的な補正で使用される。ZQCSコマンドはZQCLコマンドに比べて短い時間:tZQCS(64サイクル)で補正を完了する。
tZQinit/tZQopen/tZQCSの間は抵抗値の補正精度を高めるためにメモリデバイスの入出力チャンネルを静止状態に保たなければならない。DLL ロックと同時にZQキャリブレーションを行うことは可能である。

ZQCSは下式で示される間隔以下で実行することが推奨されている。


\Delta ZQCS = \frac{ 0.5^{[\%]} }{ (T_{sens} \times T_{driftrate}) + (V_{sens} \times V_{driftrate})}


ただし、式中の\Delta ZQCSはZQCSコマンド間隔の推奨値、T_{sens}は最大温度感度(抵抗値がどれくらい温度の変化に敏感かを示す値)、T_{driftrate}はシステムの温度変化の周期、V_{sens}は最大電圧感度(抵抗値がどれくらい電源電圧の変化に敏感かを示す値)、V_{driftrate}は電圧変化の周期を表す。

ここで、対象デバイスのT_{sens}およびV_{sens}のスペックが
T_{sens}=2.0^{[\%/^\circ C]}
T_{driftrate}=0.20^{[\%/mV]} \, 
であり、システム環境が
V_{sens}=1.0^{[^\circ C/s]}
V_{driftrate}=5^{[mV/s]} \, 
で、あたえられるときZQCSコマンド間隔の推奨値\Delta ZQCSは以下のように求めることができる。


\begin{align}
\Delta ZQCS
&= \frac{ 0.5^{[\%]} }{ (T_{sens} \times T_{driftrate}) + (V_{sens} \times V_{driftrate})} \\
&= \frac{ 0.5^{[\%]} }{ (2.0^{[\%/^\circ C]} \times 1.0^{[^\circ C/s]}) + ( 0.20^{[\%/mV]} \times 5^{[mV/s]}) } \\
&= \frac{0.5^{[\%]}}{2.0^{[\%/s]} + 1.0^{[\%/s]}} \\
&= 167^{[ms]} \\
\end{align}


## 関係記事
* DDR3 SDRAM
* DDR3 SDRAMにおける電流スペックと測定条件