DDR3 SDRAMにおけるコマンドとオペレーション
バーストチョップしたリードコマンドからライトコマンドまでの期間はライトコマンドがバーストチョップかどうかに関係なく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はライト動作時にのみ有効でリード動作を含むほかの動作時にはどんな値も無効な入力になる。
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) を待たなければならない。
セルフリフレッシュと同様、デバイスのデータを保持するためにオートリフレッシュモードが用意されている。デバイスはリフレッシュ (REF) コマンドを指定するとデバイスはRefreshモードに入る。REFコマンドはアイドル状態でなければ受け付けない。REFコマンド前にバンクプリチャージを行い、かつtRPが経過していなければならない。リフレッシュ期間中、デバイス内部にあるアドレスカウンタがバンクアドレスを供給する。オートリフレッシュ中、外部からアドレスを供給する必要はない。
オートリフレッシュサイクルが終了したら全てのバンクはプリチャージが完了しアイドル状態に復帰する。REFコマンド入力から次のアクティブコマンドまたはオートリフレッシュコマンド入力までtRFCの間隔をあけなければならない。
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リセットを行わなければならない。
一般に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とは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ピンの入力がローになるまでの間を指す。
DDR3 SDRAMは終端と出力を同時に行えない。リード時のプリアンブル (Preamble) より半サイクル以上前にODTピンの入力をローにしてRTTをオフにしていなければならない。またPostamble出力から1サイクル程度RTTは有効にならないだろう。
通常動作時とデータ書き込み時で異なる終端抵抗を設定することで、波形品質が向上する場合がある。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に接続する。
メモリデバイスが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タイミングパラメタは以下のように規定されている。
プリチャージパワーダウン (Precharge Power Down) のスローイグジットモード (Slow Exit Mode) を開始するとODTのモードが同期ODTモードから非同期ODTモードへ移行する。
プリチャージパワーダウンのスローイグジットモードを終了するとODTのモードが非同期ODTモードから同期ODTモードへ移行する。
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}