DDR3 SDRAMにおけるコマンドとオペレーション
状態遷移図
以下にDDR3 SDRAMの状態遷移図を示す。
リセットと初期化
ここではリセットピンとデバイスの電源投入時の初期化手順を説明する。
リセットピンについて
リセットピンはDDR3 SDRAMで採用されたリセット用の信号入力ピンである。他の信号はVref（参照電圧）と比較してハイ/ローを決定するため振幅が小さくてもデバイスは信号として受け取るのに対してリセットピンはCMOSレールトゥレール (Rail to Rail) で動作する。レールトゥレールとはハイ/ローの電圧幅いっぱいに振る信号を意味する。DDR3 SDRAMのリセットピンは電源電圧VDDとグランド電圧VSSに対して80%でハイ、20%でローとなる。例えばVDDが1.5Vの場合は1.2Vでハイ、0.3Vでローとなる。これはリセットピンが微小な変化に対して敏感である必要はなく、むしろノイズなどの小さな電圧変化に伴う誤動作を避ける目的がある。
またリセットピンは誤動作を避けるためにローパスフィルタ（電圧変動の高周波成分を除去する装置）の内蔵が推奨されている。リセットはメモリセルアレイの内容を破壊するかもしれない。
モードレジスタセット (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の内容を書き換えることができる。
アクティブコマンド (Active:ACT)
アクティブコマンドはこれからアクセスするバンクアドレスをBA0-BA2、ロウアドレスをA0-A15で指定し開く（有効にする）。このロウアドレスはプリチャージコマンド (precharge) の入力でそのバンクがアイドルになるまで有効となる。他のロウアドレスを指定する場合、プリチャージコマンドを入力する必要がある。
プリチャージコマンド (Precharge:PRE,PREA)
プリチャージコマンドはアクティブコマンドで開いたバンク/ローアドレスを閉じる（ロウアドレスを無効にして保存する）。オートプリチャージを使っている場合を除き、プリチャージコマンドからtRP時間経過しなければ同一バンクをActiveすることができない。プリチャージコマンドを入力すると当該バンクはアイドル状態に復帰する。プリチャージコマンドはアクティブしていないバンクに対しても有効。
プリチャージコマンドは単一バンクを対象とするプリチャージコマンド (PRE) と全バンクを対象とするプリチャージオールコマンド (PREA) がある。プリチャージコマンドはA10をローにし、BA0-BA2で対象バンクを指定する。プリチャージオールコマンドはA10をハイにし、BA0-BA2は0にしておく。
ライトコマンド
ライトコマンドはデータを書き込むコマンド。メモリデバイスはアクティブコマンドで指定したバンクおよびロウアドレス、ライトコマンドで指定したカラムアドレスに対してバースト長分だけデータを連続で書き込む。データはライトコマンドからアディティブレーテンシ (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の間隔をあけなければならない。
同期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モード ⇔ 非同期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は下式で示される間隔以下で実行することが推奨されている。
ただし、式中のはZQCSコマンド間隔の推奨値、は最大温度感度(抵抗値がどれくらい温度の変化に敏感かを示す値)、はシステムの温度変化の周期、は最大電圧感度(抵抗値がどれくらい電源電圧の変化に敏感かを示す値)、は電圧変化の周期を表す。
ここで、対象デバイスのおよびのスペックが
であり、システム環境が
で、あたえられるときZQCSコマンド間隔の推奨値は以下のように求めることができる。