DDR3 SDRAMにおけるコマンドとオペレーションでは、DDR3 SDRAMの内部レジスタ及びコマンドに対するオペレーションについて記述する。
コマンドとオペレーション ここではデバイスの制御方法とコマンドについて解説する。 まずコマンドの一覧を示す。コマンドは全てCKの上がりエッジとCK#の下がりエッジの交点を基準としたタイミングで与えられるハイ (H) またはロー (L) を意味する。ただしRESET#以外のピンのハイまたはローはVrefCAを基準とする。
+ コマンド一覧表 機能 略称 CKE CS# RAS# CAS# WE# BA2-BA0 A15-A13 A12/BC# A10/AP A11A9-A0 前サイクル現サイクル モードレジスタセット(Mode Register Set) MRS H H L L L L 0 MR0コード 1 MR1コード 2 MR2コード 3 MR3コード リフレッシュ(Refresh) REF H H L L L H V V V V V セルフリフレッシュエントリ(Self Refresh Entry) SRE H L L L L H V V V V V セルフリフレッシュイグジット(Self Refresh Exit) SRX L H H V V V V V V V V L H H H プリチャージ(Precharge) PRE H H L L H L BA V V L V 全バンクプリチャージ(Precharge All bank) PREA H H L L H L V V V H V バンクアクティブ(Bank Activate) ACT H H L L H H BA RA ライト (BL8/BL4:固定) WR H H L H L L BA RFU V L CA ライト (BL4:動的に指定) WRS4 H H L H L L BA RFU L L CA ライト (BL8:動的に指定) WRS8 H H L H L L BA RFU H L CA ライトオートプリチャージ(Write Auto Precharge)(BL8/BL4:固定) WRA H H L H L L BA RFU V H CA ライトオートプリチャージ(BL4:動的に指定) WRAS4 H H L H L L BA RFU L H CA ライトオートプリチャージ(BL8:動的に指定) WRAS8 H H L H L L BA RFU H H CA リード (BL8/BL4:固定) RD H H L H L H BA RFU V L CA リード (BL4:動的に指定) RDS4 H H L H L H BA RFU L L CA リード (BL8:動的に指定) RDS8 H H L H L H BA RFU H L CA リードオートプリチャージ(Read Auto Precharge)(BL8/BL4:固定) RDA H H L H L H BA RFU V H CA リードオートプリチャージ(BL4:動的に指定) RDAS4 H H L H L H BA RFU L H CA リードオートプリチャージ(BL8:動的に指定) RDAS8 H H L H L H BA RFU H H CA ノーオペレーション(No Operation) NOP H H L H H H V V V V V デバイスディセレクト(Device Deselect) DES H H H X X X X X X X X ZQキャリブレーションロング(ZQ calibration Long) ZQCL H H L H H L V V V H V ZQキャリブレーションショート(ZQ calibration Short) ZQCS H H L H H L V V V L V パワーダウンエントリ(Power Down Entry) PDE H L L H H H V V V V V H V V V パワーダウンイグジット(Power Down Exit) PDX L H L H H H V V V V V H V V V
表中のVまたはXはハイまたはローを意味する。Xはフローティングでもかまわない。BAはバンクアドレス (Bank Address)、RAはロウアドレス (Row Address)、CAはカラムアドレス (Column Address)、RFUは予備 (Reserve for Future Use)。
状態遷移図 以下にDDR3 SDRAMの状態遷移図を示す。
thumb|none|800px|状態遷移図
リセットと初期化 ここではリセットピンとデバイスの電源投入時の初期化手順を説明する。
リセットピンについて リセットピンは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サイクル。
thumb|none|800px|リセットと初期化シーケンス
モードレジスタセット (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は以下のフォーマットで設定する。
+ モードレジスタ (MR0) BA2 BA1 BA0 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 0 0 0 0 PPD WR DLL TM CL BT CL BL
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) + バースト長 (Burst Length:BL) A1A0BL 0 0 8 (固定) 0 1 4 or 8 (動的に指定) 1 0 4 (固定) 1 1 Reserved
+ バーストタイプ (Burst Type:BT) A3バーストタイプ 0 4ビットシーケンシャル (Nibble Sequential) 1 インタリーブ (Interleave)
バースト長、開始アドレス、およびバーストタイプでバースト中にアクセスするアドレス順は下表の通り。MR0:A1=0 A0=1時リード/ライトコマンド入力時のA12/BC#でBL8またはBC4 (バーストチョップ:Burst Chop) を選択できる。
+ バーストタイプとバースト動作中にアクセスするアドレス バースト長 リードライト 開始アドレス バーストタイプ シーケンシャルインタリーブ 4バーストチョップ リード 0 0,1,2,3,T,T,T,T 0,1,2,3,T,T,T,T 1 1,2,3,0,T,T,T,T 1,0,3,2,T,T,T,T 2 2,3,0,1,T,T,T,T 2,3,0,1,T,T,T,T 3 3,0,1,2,T,T,T,T 3,2,1,0,T,T,T,T 4 4,5,6,7,T,T,T,T 4,5,6,7,T,T,T,T 5 5,6,7,4,T,T,T,T 5,4,7,6,T,T,T,T 6 6,7,4,5,T,T,T,T 6,7,4,5,T,T,T,T 7 7,4,5,6,T,T,T,T 7,6,5,4,T,T,T,T ライト 0~3 0,1,2,3,X,X,X,X 0,1,2,3,X,X,X,X 4~7 4,5,6,7,X,X,X,X 4,5,6,7,X,X,X,X 8 リード 0 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 1 1,2,3,0,5,6,7,4 1,0,3,2,5,4,7,6 2 2,3,0,1,6,7,4,5 2,3,0,1,6,7,4,5 3 3,0,1,2,7,4,5,6 3,2,1,0,7,6,5,4 4 4,5,6,7,0,1,2,3 4,5,6,7,0,1,2,3 5 5,6,7,4,1,2,3,0 5,4,7,6,1,0,3,2 6 6,7,4,5,2,3,0,1 6,7,4,5,2,3,0,1 7 7,4,5,6,3,0,1,2 7,6,5,4,3,2,1,0 ライト 0~7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7
バースト長に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レイテンシ A6A5A4A2CAS レイテンシ 0 0 0 0 Reserved 0 0 1 0 5 0 1 0 0 6 0 1 1 0 7 1 0 0 0 8 1 0 1 0 9 1 1 0 0 10 1 1 1 0 11 (Reserve)
CASレイテンシはリードコマンドが有効になってから実際にデータが出力されるまでの遅延サイクル数を指す。リードコマンドを入力してからデータが出てくるまでの遅延サイクルであるリードレイテンシ (Read Latency:RL) はアディティブレイテンシ (Additive Latency:AL) とCLの和になる。CASレイテンシはデバイススペックや実動作速度で設定できる値が異なる。詳しくは各デバイスのスペックシートを参照すること。
テストモード (Test Mode:TM) + テストモード A7テストモード 0 通常動作 1 テストモード使用 テストモードはデバイス生産時にのみ使用されるテスト用のモードである。通常は使用してはならない。テストモードでデバイスがどのように動作するかは未定義。おそらくデバイスメーカによってテストモードの動作は異なる。
DLLリセット (DLL Reset) + DLLリセット A8 DLLリセット 0 DLLをリセットしない 1 DLLをリセットする
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) + ライトリカバリ A11 A10 A9 ライトリカバリサイクル数(WR) 0 0 0 Reserved 0 0 1 5 0 1 0 6 0 1 1 7 1 0 0 8 1 0 1 10 1 1 0 12 1 1 1 Reserved
ライトリカバリサイクル数 (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コントロール A12 DLLコントロールモード 0 スローイグジット (DLLオフ) 1 ファストイグジット (DLLオン)
プリチャージパワーダウン時のDLLコントロール (DLL Control for Precharge Power Down) はプリチャージパワーダウン時にDLLを保持するかどうかを指定する。スローイグジットを選択した場合、DLLはプリチャージパワーダウン突入後に電流消費量を抑えるためにDLLを解除する。そのためパワーダウンを解除してからDLLの再ロックが必要となりデバイスに対してコマンド入力が有効になるまでにtXPDLLを要する。ファストイグジットを選択した場合、DLLはプリチャージパワーダウン突入後にも維持される。そのためパワーダウンを解除してからDLLの再ロックは不要であるためtXP後にデバイスに対してコマンド入力が有効になる。
モードレジスタ (Mode Register) MR1と設定できる機能 以下ではモードレジスタMR1で設定できるモードとその説明を行う。MR1は以下のフォーマットで設定する。
+ モードレジスタ (MR1) BA2 BA1 BA0 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 1 0 0 0 Qoff TDQS 0 RTT_Nom 0 Level RTT_Nom DIC AL RTT_Nom DIC DLL
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イネーブル A0 DLLイネーブル 0 DLLを有効にする (Enable) 1 DLLを無効にする (Disable)
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) + 出力インピーダンスコントロール A5A1 出力インピーダンス値 0 0 Reserved for RZQ/6 0 1 RZQ/7 1 0 RZQ/TBD 1 1 RZQ/TBD
出力ドライバインピーダンスを指定する。RZQ=240Ω。データピンの出力ドライバは240Ωの抵抗をプルアップ・プルダウン用に7個ずつ持っている。この抵抗の一部あるいは全部を有効・無効にすることで出力インピーダンスを調整する。この出力抵抗回路はRTT_Nom/RTT_WRで指定する終端抵抗と共有している。
通常時の終端抵抗指定値 (RTT_Nom) + オンダイターミネーションの抵抗値 A9A6A2RTT_Nom 0 0 0 ODT disabled 0 0 1 RZQ/4 0 1 0 RZQ/2 0 1 1 RZQ/6 1 0 0 RZQ/12 1 0 1 RZQ/8 1 1 0 Reserved 1 1 1 Reserved
RTT_NomとRTT_WRを個別に制御できる。MR1でRTT_Nomを指定する。RZQ=240Ω。
アディティブレイテンシ (Additive Latency:AL) + アディティブレイテンシ A4A3アディティブレイテンシ 0 0 0 (AL disabled) 0 1 CL-1 1 0 CL-2 1 1 Reserved
アディティブレイテンシを利用することでデータバスを効率的に活用できるようになる。アクティブコマンドからリード/ライトコマンドの入力が可能になるまでに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が選択可能である。
thumb|none|800px|アディティブレイテンシとポステッドCASが有効になる場合の例
ライトレベリング (Write Leveling) + ライトレベリング A7ライトレベリングイネーブル 0 ライトレベリングを使用しない (Disable) 1 ライトレベリングを使用する (Enabled)
ライトレベリングを設定するとデバイスはライトレベリングモードに突入する。ライトレベリングモード時、デバイスはDQSの上がりエッジでサンプリングしたクロックの値をDQピンから出力する。
DDR3のメモリモジュールでは波形品質の向上のために、コマンドやアドレス、クロックを各デバイスを各ピン一つのラインで数珠繋ぎ(デイジーチェイン)でつなぐフライバイ構造 (Fly-by) を用いる。従来のメモリモジュールはクロックをトーナメント方式で分岐して各デバイスに同一タイミングで入力するように調整していた。このためメモリデバイス・コントローラはクロックとコマンド・アドレス・データのタイミングがずれることを考慮する必要がなかった反面、データ転送が高速化するにつれて等長配線への要求が厳しくなるとともに等長配線のための引き回しが配線長を伸張し波形品質の劣化を招いた。そこでデバイスを最短距離で数珠繋ぎに接続するフライバイ構造の提案がなされた。
thumb|none|800px|メモリモジュールにおける分岐構造 (Forked) とフライバイ構造の違い
フライバイ構造によって波形品質の向上とDIMM内の配線の短縮が可能になるが、反面クロックがDIMM内の各DRAMに伝播する時間に差が生じ、クロックとDQSの位相差が発生する。そこでメモリコントローラはDQS入力タイミングをクロックの伝播遅延にあわせて遅らせるという処理が必要になる。ライトレベリングはこの遅延量の決定のために必要となる機能である。
ライトレベリングとはDDR3 SDRAMからの簡易なフィードバックによってメモリコントローラがクロックとDQSの位相補正を行う機能のことを言う。 DDR3 SDRAMはDQSの上がりエッジでクロックをサンプルした結果をDQピンからメモリコントローラに返す。このフィードバックは非同期で行われる。 メモリコントローラはDQSのタイミングを変更しながら、この値が0から1に変化するタイミングを検出する。この位相差はDQピンにも同時にフィードバックしなければならない。DQS,DQS#,DQピンは全てコントローラで終端する。x16デバイスでは上位8ビットと下位8ビットは独立しておりそれぞれ別々に制御する。
thumb|none|800px|ライトレベリングを行いデータ到達タイミングを補正する
出力禁止 (Output Buffer Disable:Qoff) + 出力禁止 A12Qoff 0 出力を禁止しない 1 出力を禁止する
出力禁止(Qoff)を設定するとデバイスの出力ピン (DQ, DQS DQS#) は何も接続しない状態(Hi-Z)になる。
ターミネーションDQSイネーブル (Termination DQS Enable:TDQS) + TDQSイネーブル A11 TDQS DM/TDQSピン NU/TDQS#ピン 0 TDQSを使用しない(Disable) データマスク (DM) として動作 Hi-Z状態 1 TDQSを使用する(Enable) TDQSとして動作 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は終端抵抗だけを提供する。