DDR4 と LPDDR4 の書き込み・読み出し:アドレス、CS、DQS の役割と 2 ランク構成
メモリへの読み書きは「番地を指定してデータを置く/受け取る」だけですが、DDR4 や LPDDR4 の内部では、その番地がロウとカラムの2段に分かれ、複数のデバイスが CS で選び分けられ、データは DQS という「一緒に配られる基準信号」に合わせて取り込まれています。基板の等長配線がどこに効くのかも、この仕組みを追うと見えてきます。
メモリは「番地とデータのセット」
メモリチップがしていることは、突き詰めれば1つだけです。番地(アドレス)を指定して、そこにあるデータを読み書きする。書き込みは「この番地にこの値を置いてください」、読み出しは「この番地の値をください」という往復で、DDR4 や LPDDR4 のような高速な DRAM も、この基本は変わりません。
違うのは、番地とデータをどうやってチップの外とやり取りするかです。ピン数を節約するために番地は2回に分けて送られ、複数のチップを1本のバスにぶら下げるために「今のコマンドは誰宛てか」を決める信号(CS)が要り、データを取りこぼさずに受け取るために専用の基準信号(DQS)が一緒に配られます。この記事では、この3つ——2段アドレス、CS、DQS——を軸に、DDR4 の内部動作から2ランク構成、LPDDR4 との違いまで順番に見ていきます。
メモリの種類そのもの(SRAM・DRAM・NAND などの使い分け)は SRAM・DRAM・NOR・NAND・EEPROM・FRAM・MRAM・eMMC:メモリの違いと使い分け で扱っているので、ここでは DDR4/LPDDR4 という「DRAM の中でどう読み書きするか」に絞ります。
バンク・ロウ・カラム・センスアンプ:アドレスが2回に分かれる理由
DRAM のチップの中には、コンデンサ1個とトランジスタ1個(1T1C)でできたセルが、縦横の格子(アレイ)に並んでいます。1つのアレイを丸ごと同時に相手にするのは無理があるので、DDR4 はアレイをバンクグループとバンクに分けます。x8 構成では 4 バンクグループ × 4 バンク = 16 バンク、x16 構成では 2 バンクグループ × 4 バンク = 8 バンクです。バンクグループを分けたのは DDR4 からで、同じバンクグループ内で連続アクセスするより、別のバンクグループを交互に使うほうが短い間隔で次のコマンドを出せます(tCCD_S と tCCD_L の違い)。
セルはコンデンサ1個ぶんの電荷しか持たないので、読み出す前にセンスアンプで増幅してからでないと扱えません。そこで DRAM へのアクセスは3段階に分かれます。① ACT(アクティベート)でロウ(行)を1本選び、そのロウ全体のセルの電荷をビット線に出してセンスアンプで増幅・ラッチする。② RD/WRでカラム(列)を選び、ラッチされているデータの中から必要な列だけを DQ に出す、または DQ から書き込む。③ PRE(プリチャージ)でロウを閉じ、次のロウを開けられる状態に戻す。
アドレスがロウとカラムの2回に分けて送られるのは、この3段階のアクセスと対応しているのと、ピン数を節約するためです。ロウアドレスとカラムアドレスを同じピンで時分割すれば、全ビットを一度に送るより配線本数を半分程度に減らせます。DDR4 のアドレスピンは A[13:0] を中心に、密度によってはさらに上位ビット(A16/A17 相当)を使い、ACT のときはロウアドレス、RD/WR のときはカラムアドレスとして同じピンを使い回します。
コマンドとタイミング:CS_n・BG・BA・A で決まる ACT / RD / WR / PRE
DDR4 のコマンドは、CS_n(チップセレクト)、ACT_n、RAS_n/A16、CAS_n/A15、WE_n/A14 という信号の組み合わせで表されます。ACT_n が L なら ACT コマンドとして A16 相当のピンがロウアドレスの一部になり、ACT_n が H なら RAS_n/CAS_n/WE_n の3本の組み合わせで RD・WR・PRE などが決まります。BG[1:0] と BA[1:0] でバンクグループとバンクを選び、A[13:0] がロウまたはカラムのアドレスです。ピンの名前に2つの意味が同居しているのは、まさに同じ配線をコマンドとアドレスで使い回しているからです。
このコマンドの並びを時間軸で見たものが図3です。ACT でロウを開いてから、実際に読み書きできるまでの時間が tRCD(RAS to CAS Delay)、RD コマンドから最初のデータが出てくるまでが CL(CAS Latency)です。DDR4-3200・CL22 の品種なら、クロック周期は 1 ÷ 1600MHz ≒ 0.625ns(DDR4 は 1600MHz のクロックの両エッジでデータを転送するので実効 3200 MT/s)、CL 22 サイクル ≒ 13.75ns。多くの速度ビンで tRCD と tRP(PRE からロウが完全に閉じるまで)もほぼ同じ値になります。書き込み側は CWL(CAS Write Latency)で、CL よりわずかに短い値が速度ビンごとに規格で決まっています。
データは BL8(バーストレングス8)が基本で、1回の RD/WR コマンドに対して8ビットのデータが、DDR の両エッジを使って4クロックサイクルで転送されます。図の DQ にある4つの山がこれです。
| パラメータ | 意味 | サイクル数の目安 | 時間の目安 |
|---|---|---|---|
| tRCD | ACT からカラムアクセス可能まで | 22 | 13.75ns |
| CL | RD からデータ出力まで | 22 | 13.75ns |
| CWL | WR から DQS/DQ 出力まで | CL よりやや小さい値(規格で規定) | — |
| tRP | PRE からロウが閉じるまで | 22 | 13.75ns |
| BL8 転送 | データ8ビットの転送時間 | 4(DDR で両エッジ使用) | 2.5ns |
DQS の役割:ソースシンクロナスで、送り手が基準信号も一緒に配る
DDR4 は数百 MHz〜1GHz 超のクロックで動きますが、データを取り込むタイミングの基準に CK(システムクロック)をそのまま使いません。代わりに、データを送る側が DQS(データストローブ)という基準信号をデータと一緒に配ります。これをソースシンクロナス方式と呼びます。DQS はバイトレーン(8bit の DQ ひとまとまり)ごとに1組あり、DM/DBI(マスク/データバス反転)も同じバイトレーンの中で扱われます。
書き込みと読み出しで、DQS と DQ の位相関係が逆になるのがポイントです。書き込みではコントローラが送り手なので、コントローラは DQS のエッジを DQ のデータの中央に来るように、あらかじめ90°(1/4周期)ずらして出します。受け手の DRAM は DQS のエッジでそのまま取り込めば、データの真ん中を捕まえられます。読み出しでは DRAM が送り手になり、DRAM は自分がいちばん作りやすいタイミング——DQS のエッジを DQ のエッジに合わせて(エッジアライン)出します。この場合、受け手のコントローラ側が自分で DQS を90°遅らせてから使わないと、データの切り替わりの瞬間を掴んでしまいます。
なぜ CK を基準にしないのかは、往復の配線遅延と温度・電圧による変動が理由です。CK はコントローラから一方的に配られる信号で、DRAM までの配線遅延、DRAM 内部の遅延、DQ が再びコントローラに戻ってくるまでの配線遅延をすべて合わせると、CK の1周期に対して無視できない量になります。しかも配線長や温度で変動します。DQS はデータと同じ経路・同じタイミングで一緒に飛んでくるので、途中の遅延がどれだけ変動してもデータとの相対関係はほぼ保たれます。DQS の立ち上がり直前には、受け手が「これから来る」と分かるようにプリアンブル(信号が安定してから最初のトグルが始まるまでの区間)が置かれています。
DQS を等長で扱う配線の考え方は 等長配線はどこまで詰めるか の計算方法がそのまま使えます。バイトレーン内の DQ と DQS の長さ差は、この位相合わせの精度に直結します。
CS(チップセレクト)の役割:バスを共有し、選ばれたデバイスだけが答える
コマンド・アドレスのバス(CS_n を除く ACT_n/RAS_n/CAS_n/WE_n/BG/BA/A や CK)は、基板上の複数のメモリチップ・複数のランクで共有されます。1本ずつ専用の配線を引いていたらピン数も配線本数も足りません。その代わり、CS_n(チップセレクト、負論理)という信号がデバイスごとに1本ずつあり、CS_n が L のデバイスだけが、そのタイミングのコマンドを自分宛てとして受け取ります。CS_n が H のデバイスにとって、そのサイクルのコマンド・アドレスは存在しないのと同じで、これを DDR4 の規格ではDESELECTコマンドと呼びます。
つまり、バス上には常に何かしらのコマンドが流れていますが、それを受け取るかどうかは CS_n だけで決まります。複数のチップが同じ配線を見ていても、CS_n が自分用でなければ内部の状態機械はいっさい動きません。誤配線や CS_n が浮いている(プルアップ/プルダウンされていない)と、意図しないタイミングでコマンドを受け取ってしまい、リフレッシュが飛ぶ、データが化ける、といった症状になります。
2 ランク構成:CS0/CS1 は別配線、DQ/DQS とアドレスは共有
1枚の DIMM やモジュールに DRAM チップの集合が2組載っている構成を2ランクと呼びます。DQ、DQS、コマンド・アドレスバス(CK 含む)はランク間で共有され、CS_n、CKE、ODT はランクごとに別の配線(CS0/CS1 など)になります。CS0 を L にすればランク0が、CS1 を L にすればランク1が応答し、コントローラは1本の共有バスを時分割で2組のチップに使い回します。
ランクを切り替えて DQ の出し手が変わるとき、そのままだと問題が起きます。データを出しているチップが変わる瞬間、それまでの送り手(例えばランク0)が DQ を出し終わる前に次の送り手(ランク1)が出し始めると、バス上で信号がぶつかります(バスコンテンション)。逆に間が開きすぎるとスループットが落ちます。DDR4 のコントローラは、ランク間のターンアラウンドに必要なギャップ(読み出し→読み出しの Rank-to-Rank switching に対応する時間)を確保してから次のランクへコマンドを出します。DQS の出し手が入れ替わるのも同じタイミングで、前のランクの DQS が確実に終わってから次のランクの DQS が立ち上がるように制御されます。
ODT(On-Die Termination)も、この共有バスを成立させる仕組みです。書き込み中、選ばれていないランクの DRAM も同じ DQ 配線につながっているので、そのままでは信号が反射して波形が乱れます。DDR4 は非選択のランクの ODT を有効にして、バスを適切なインピーダンスで終端させます。JEDEC の用語では、通常時の終端値を RTT_NOM、書き込み時に自分自身または他ランクにかける終端を RTT_WR、アイドル時にかけておく弱い終端を RTT_PARK と呼び、モードレジスタで細かく設定します。
容量を増やすためにランクを重ねると、信号品質は下がる方向に働きます。バス上の負荷(チップの入力容量、配線の分岐)が増えるほど反射・クロストークが増え、同じ配線長でも許容できる最高速度は下がる傾向があります。メモリベンダの互換性資料でも、1ランク構成のほうが2ランク構成より高い動作周波数まで保証されている場合が多く見られます。どこまで下がるかは基板・部品構成に依存するので、「必ず何 MHz 下がる」と一律には言えませんが、ランク数はスピードとトレードオフになることは設計の前提にしておく必要があります。
DDR4 の DQ は ODT(オンダイ終端)で済ませますが、モジュール上のコマンド・アドレスバスのように、複数デバイスにフライバイで配る一方向の信号は、いまも外付けの終端抵抗を VTT(中間電位)へ引く方式が使われます。VTT の終端回路そのもの——負荷の電流が両方向に振れるときにレギュレータに何が要るか——は LDO は電流を吸い込めない:ソースしかできないレギュレータと、保護ダイオードから流れ込む電流の行き先 の「DDR の VTT 終端」の節で扱っています。
LPDDR4 との違い:1ダイ2チャネル、6本の CA バス、低電圧信号
LPDDR4 は携帯機器向けに、DDR4 とは違う割り切り方をしています。まず、1つのダイの中に独立した16bit幅のチャネルが2つ(チャネルA/チャネルB)入っています。それぞれが自分専用の CK、CA(コマンド・アドレス)、CS、DQ[15:0]、DQS を持ち、完全に別々のメモリとして動きます。DDR4 のような単一の広いバスではなく、2つの狭いバスを束ねる設計です。
コマンド・アドレスの送り方も違います。DDR4 が BG/BA/A などの多数のピンを使うのに対し、LPDDR4 はCA[5:0] という6本だけです。信号はSDRで、CA[5:0] はCK の立ち上がりエッジだけでサンプルされます(DQ のように両エッジは使いません)。CS はアクティブHigh(DDR4 の CS_n とは極性が逆)で、コマンドの1サイクル目だけ H にします。ほとんどのコマンドは2クロックにまたがり、たとえば行を開く ACT はACT-1・ACT-2の2サイクルでバンクアドレスとロウアドレスを送り、読み書きはRD-1/WR-1・CAS-2の2サイクルでカラムアドレスを送ります。ロウを開いてから読み出しを出すまでには、ACT(2クロック)+RD(2クロック)=合計4クロックかかる計算です。DDR4 が「ロウとカラムの2回」でピンを節約したのと同じ発想を、LPDDR4 は「コマンドそのものを2クロックに分ける」ところまで進めています。
バーストレングスは BL16 が基本で、品種によっては BL32 も選べます。信号電圧は VDDQ が 1.1V(DDR4 は 1.2V)で、LVSTL(Low Voltage Swing Terminated Logic)という、DDR4 の SSTL よりさらに振幅を絞った終端付きの信号方式を使います。終端も DDR4 と同じ発想の ODT ですが、データ用の DQ ODT とコマンド・アドレス用の CA ODT が別に規定されている点が異なります。
| 項目 | DDR4 | LPDDR4 |
|---|---|---|
| チャネル構成 | 単一の×4/×8/×16バス | 1ダイに独立2チャネル(×16×2) |
| コマンド/アドレス | BG/BA/A など多数ピン、1エッジで確定 | CA[5:0]の6本、SDR。1コマンド2クロック(ACT-1/2、RD-1・CAS-2など) |
| バンク構成 | x8:4BG×4=16バンク、x16:2BG×4=8バンク | ダイ密度により8〜16バンク相当 |
| バーストレングス | BL8 が基本 | BL16 が基本(BL32 選択可の品種あり) |
| VDDQ | 1.2V | 1.1V |
| 信号方式 | SSTL | LVSTL(振幅・終端ともにさらに低め) |
| 終端 | ODT(DQ とCA/ADDR で共通の考え方) | DQ ODT と CA ODT を別に規定 |
| チップセレクト | ランクごとに CS_n | チャネルごと・ランクごとに CS |
トレーニング:フライバイ配線とライトレベリング
DDR4 の DIMM は、CK とコマンド・アドレスを各チップにフライバイ(数珠つなぎ)で配線します。1本の配線を端から端まで引いて、途中の各チップがそこから分岐して受け取る形です。これは、全チップに対して枝分かれのない綺麗な伝送線路を保つための配線方法ですが、代償としてCK が届く時刻がチップごとにずれます。配線の下流にあるチップほど、CK が遅れて届きます。
このずれを放っておくと、書き込み時にコントローラが送る DQS と、各チップが実際に CK を受け取るタイミングが合わなくなります。そこで DDR4 にはライトレベリングという初期化手順があります。コントローラは各チップに対して DQS の遅延を掃引しながらトグルさせ、DRAM は DQS の立ち上がりでそのチップに届いている CK のレベルをサンプルし、結果を DQ 経由でコントローラへ返します。コントローラはその応答が 0 から 1 に切り替わる遅延を見つけて、そのチップ向けに DQS を出すタイミングとして確定します。フライバイの下流にあるチップほど CK の到着が遅れるので、下流のチップほど DQS も遅らせて出す格好になります。
ライトレベリングのあとには、リードトレーニング(読み出し時に DQS を適切な位置まで遅延させ、DQ のアイの中央で取り込めるように調整する)と、Vref トレーニング(H/L を判定するしきい値電圧を、実際の信号品質に合わせて微調整する)が続きます。これらはすべて、電源投入直後の初期化シーケンスの中でコントローラが自動的に行い、通常は設計者が個別に手を出す部分ではありませんが、基板の配線長や部品配置がこのトレーニングの成否・マージンを左右するという点は変わりません。
LPDDR4 はモバイル機器向けに配線がずっと短く、フライバイではなく点対点(point-to-point)に近いトポロジで配線されることが多いため、DDR4 ほど大きな CK スキューは発生しにくくなります。それでもリードトレーニングや Vref トレーニングに相当する初期化手順は規定されており、「配線が短いから調整が要らない」わけではありません。
リフレッシュ:見えないところで走る ACT/PRE
DRAM のセルはコンデンサなので、放っておくと電荷が抜けてデータが消えます。これを防ぐため、コントローラは定期的にREF(リフレッシュ)コマンドを発行し、DRAM 内部で全ロウを順番に開いて(内部的な ACT/PRE の繰り返し)電荷を再充電します。標準的な間隔(tREFI)は7.8µs(温度85℃以下)で、高温側(85〜95℃)では規格上その半分の頻度が要求される品種があります。
REF が実行されている間(tRFC、密度が大きいほど長くなり、大容量品では数百 ns 単位になります)は、そのバンク(または全バンク、コマンドの種類による)にアクセスできません。ふだん帯域を計算するときはこの分を忘れがちですが、リフレッシュはメモリ帯域を確実に何%か食っていることは覚えておくべきです。LPDDR4 には、温度に応じてリフレッシュ頻度を自動で下げる仕組み(温度補償セルフリフレッシュ、TCSR)もあり、低温時の無駄なリフレッシュ電力を減らしています。
基板設計への示唆:何を等長にそろえるか
ここまでの仕組みを踏まえると、等長配線でそろえるべき対象がはっきりします。①バイトレーン内の DQ と DQS。DQS はデータの中央(書き込み)またはエッジ(読み出し)を基準に位置を決める信号なので、DQ との相対タイミングがそのまま読み書きのマージンになります。②CK と CMD/ADDR。DRAM は CK のエッジで CMD/ADDR をラッチするので、CK と CMD/ADDR 間のスキューは、そのサンプリングのセットアップ・ホールドマージンを直接削ります。DDR4 の DIMM ではこの2つがフライバイ配線で各チップへ一緒に、かつ順番に届くため、途中でCKとCMD/ADDRの相対タイミングが崩れないようにする必要があります。DQ とは違う基準(ソースシンクロナスの DQS ではなく CK 同期)で扱われるグループなので、DQ/DQS のグループとは別にそろえます。
どこまで詰めればよいかの具体的な計算(配線長の差からどれだけの時間ずれになるか、逆にどれだけの時間ずれを許容できるなら何 mm まで差を許すか)は、等長配線はどこまで詰めるか、配線長→遅延時間、遅延時間→配線長の計算機がそのまま使えます。配線の実効誘電率や特性インピーダンスの見積もりには マイクロストリップの特性インピーダンス も合わせて使います。
ランク数とトポロジも設計段階で決まる要素です。1ランクなら負荷が軽く配線もシンプルですが、容量が足りません。2ランクにすれば容量は増えますが、バスの負荷が増えて反射やクロストークのマージンが厳しくなり、フライバイのスキューも配慮が要ります。ドライバの立ち上がり・立ち下がり時間や駆動能力は I/Oバッファの駆動能力 の計算機で当たりをつけられます。
よくある質問
CK ではなく DQS でデータを取り込むのはなぜですか。
2ランクのモジュールを使うと、なぜ動作速度が下がることがあるのですか。
CS_n の配線を間違えたり、浮かせたりするとどうなりますか。
LPDDR4 にもライトレベリングは必要ですか。
ODT の RTT_NOM と RTT_WR、RTT_PARK は何が違いますか。
参考にした規格・資料
- JEDEC JESD79-4, DDR4 SDRAM Standard — コマンド定義(ACT/RD/WR/PRE/REF)、バンクグループ構成、tRCD/CL/CWL/tRP などのタイミングパラメータ、ライトレベリング手順
- JEDEC JESD209-4, LPDDR4 Standard — 2チャネル構成、CA[5:0] バスのコマンド/アドレス符号化、BL16/32、VDDQ・LVSTL 信号方式
- JEDEC JESD8 シリーズ(SSTL / POD 等の I/O 規格) — DDR系メモリの信号方式・終端の考え方の基礎
- 各メモリベンダの互換性資料・スピードビン表 — ランク数・実装構成ごとの動作周波数上限の目安