DDR4 と LPDDR4 の書き込み・読み出し:アドレス、CS、DQS の役割と 2 ランク構成

メモリへの読み書きは「番地を指定してデータを置く/受け取る」だけですが、DDR4 や LPDDR4 の内部では、その番地がロウとカラムの2段に分かれ、複数のデバイスが CS で選び分けられ、データは DQS という「一緒に配られる基準信号」に合わせて取り込まれています。基板の等長配線がどこに効くのかも、この仕組みを追うと見えてきます。

最終更新: 2026-09-23 DDR4LPDDR4メモリチップセレクト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 の中でどう読み書きするか」に絞ります。

メモリは番地とデータのセットコントローラがアドレスバスで番地を、データバスでデータを送る。書き込みではデータがコントローラから配列へ、読み出しでは配列からコントローラへ流れる。 ① 書き込み:番地6にデータを置く アドレスとデータを両方送る ② 読み出し:番地6のデータを受け取る アドレスだけを送り、データを受け取る コントローラ アドレス データ 0 1 2 3 4 5 6 6 7 8 9 10 11 12 13 14 15 メモリ配列 アドレスバス 番地 6 データ →(書き込み) ← データ(読み出し) 書き込み:アドレスとデータを両方送り、指定した番地にデータを置く。 読み出し:アドレスだけを送り、その番地にあるデータを受け取る。
図1:メモリは番地とデータのセット。書き込みはコントローラからアドレスとデータを送り、読み出しはアドレスだけを送ってデータを受け取る。番地6の箱に注目したアニメーション。

バンク・ロウ・カラム・センスアンプ:アドレスが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 のときはカラムアドレスとして同じピンを使い回します。

バンク・ロウ・カラム・センスアンプ:ACT → RD/WR → PREDRAM の配列にロウとカラムがあり、ACT で選んだロウをセンスアンプに読み出し、RD/WRでカラムを選んでDQへ、PREでロウを閉じる。 ① ACT:ロウを開いてセンスアンプへ ロウデコーダが1本のロウを選び、電荷をセンスアンプで増幅・ラッチする ② RD/WR:カラムを選んで DQ へ センスアンプにラッチされたデータから、カラムアドレスで1列を選ぶ ③ PRE:ロウを閉じる 次のロウを開けられる状態に戻す メモリアレイ 開いたロウ ロウ デコーダ センスアンプが増幅・ラッチ ラッチしたまま保持 カラム選択 DQ へ ロウを閉じ、電荷を再充電 x8構成: 4バンクグループ×4バンク=16バンク/x16構成: 2バンクグループ×4バンク=8バンク。 アドレスをロウとカラムの2回に分けて送るのは、ピン数を節約するため。
図2:ACT でロウを開いてセンスアンプに読み出し、RD/WR でカラムを選んで DQ へ、PRE でロウを閉じる。3つのフェーズを順に表示するアニメーション。

コマンドとタイミング: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つの山がこれです。

DDR4-3200・CL22 の代表的なタイミング(クロック周期 0.625ns。速度ビンや品種で変わるので目安)
パラメータ意味サイクル数の目安時間の目安
tRCDACT からカラムアクセス可能まで2213.75ns
CLRD からデータ出力まで2213.75ns
CWLWR から DQS/DQ 出力までCL よりやや小さい値(規格で規定)—
tRPPRE からロウが閉じるまで2213.75ns
BL8 転送データ8ビットの転送時間4(DDR で両エッジ使用)2.5ns
コマンドとタイミング:CK・CS_n・CMD・ADDR・DQS・DQACTでロウアドレスを送り、tRCD後にRDでカラムアドレスを送る。そこからCL後にDQSのプリアンブルとBL8のデータが出てくる時間軸。 ACT → RD の時間軸(DDR4-3200・CL22 の例) 左から右へ時間が進む。CS_n が L のサイクルだけコマンドが有効 CK CS_n CMD ADDR DQS DQ ACT RD ロウ カラム tRCD ≒ 13.75ns プリアンブル BL8:4クロックで8ビット転送 CL ≒ 13.75ns CS_n が L のサイクルだけ、ACT_n/RAS_n/CAS_n/WE_n の組み合わせがコマンドとして解釈される。 DQS は送り手(この場合DRAM)が出す基準信号で、プリアンブルの後にデータと一緒にトグルする。
図3:CK・CS_n・CMD・ADDR・DQS・DQ の時間軸。ACT でロウアドレスを送ってから tRCD 後に RD でカラムアドレスを送り、そこから CL 後に DQS のプリアンブルと BL8 のデータが出てくる。左から右へ描かれていくアニメーション。

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 の長さ差は、この位相合わせの精度に直結します。

書き込みと読み出しでDQSとDQの位相関係が逆になる書き込みはコントローラがDQSをDQの中央に合わせて出し、読み出しはDRAMがDQSをDQのエッジに合わせて出す。DQSは矩形波(差動)、DQはデータアイ(D0〜D3)で表す。読み出し側はコントローラで遅延させて中央を取る。 書き込みと読み出しでDQSの位相が違う 書き込み コントローラがDQSをDQの中央(90°ずらして)出す D0 D1 D2 D3 DQ DQS 送り手:コントローラ(あらかじめ90°ずらす) 読み出し DRAMはDQSをDQのエッジに合わせて出す D0 D1 D2 D3 DQ DQS 送り手:DRAM(エッジアラインで出す) コントローラ側で90°遅延 書き込み:DQSのエッジがDQの中央に来るので、受け手(DRAM)はそのまま取り込める。 読み出し:DQSのエッジがDQのエッジに来るので、受け手(コントローラ)は自分でDQSを遅延させてから使う。 DQSはバイトレーン(DQ8本)ごとに1組。DM/DBIも同じバイトレーンの中で扱う。 DQS は差動(DQS_t / DQS_c)。立ち上がり・立ち下がり両方のエッジでDQを取り込む(DDR)。
図4:書き込みではコントローラが DQS を DQ の中央(90°ずらして)出し、読み出しでは DRAM が DQS を DQ のエッジに合わせて出す。読み出し側はコントローラが受け取ってから遅延させて中央を取る。中央のサンプリング点が点滅するアニメーション。

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 が浮いている(プルアップ/プルダウンされていない)と、意図しないタイミングでコマンドを受け取ってしまい、リフレッシュが飛ぶ、データが化ける、といった症状になります。

CSはバスを共有し、選ばれたデバイスだけが答えるコマンド・アドレスバスは幹線から両方のデバイスへ分岐して共有される。CS はデバイスごとに別配線(CS0_n/CS1_n)で、CS_n が L のデバイスだけがコマンドを受け取る。 ① デバイス0が選ばれている(CS0 = L) デバイス0だけがコマンドを受け取り、デバイス1は無視する ② デバイス1が選ばれている(CS1 = L) デバイス1だけがコマンドを受け取り、デバイス0は無視する コントローラ コマンド・アドレスバス(共有) CS0_n(デバイス0) CS1_n(デバイス1) デバイス0 CS = L:受信 デバイス1 CS = H 無視(DESELECT) デバイス0 CS = H 無視(DESELECT) デバイス1 CS = L:受信 バス上には常に何かしらのコマンドが流れているが、受け取るかどうかはCS_nだけで決まる。 CS_nがHのデバイスは、そのサイクルのコマンドが存在しないのと同じ(DESELECT)。 CS_nが浮いている・誤配線だと、意図しないコマンドを受け取ってしまう。
図5:コマンド・アドレスのバスは共有。CS_n が L のデバイスだけがコマンドを受け取り、H のデバイスは無視する(DESELECT)。CS の割り当てが入れ替わるアニメーション。

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 終端」の節で扱っています。

2ランク構成:CS0/CS1でDQバスの出し手が入れ替わるDQ/DQS/アドレスは共有し、CS・CKE・ODTはランクごとに別配線。CS0/CS1が交互に選ばれ、非選択側はODTで終端する。 ① ランク0が選ばれている ランク0がDQを駆動。ランク1はアイドルでODT終端 ② ランク1が選ばれている ランク1がDQを駆動。ランク0はアイドルでODT終端 コントローラ DQ/DQS/ADDR/CKを共有 DQ/DQSバス(共有) ランク0 駆動中 CS = L:受信 アイドル ODT終端 ランク1 駆動中 CS = L:受信 アイドル ODT終端 CS0/CS1・CKE・ODTはランクごとに別配線 ランクを切り替える瞬間はターンアラウンドのギャップを確保し、DQ・DQSの出し手が衝突しないようにする。 ODT(RTT_NOM/RTT_WR/RTT_PARK)で非選択ランクのバスを終端し、反射を抑える。 ランク数が増えるとバス負荷が増え、許容できる最高速度は下がる傾向がある。
図6:CS0/CS1 が交互に選ばれ、DQ バスの出し手がランク0とランク1で入れ替わる。非選択側は ODT でバスを終端する。2つのフェーズを順に表示するアニメーション。

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 の主な違い(JEDEC JESD79-4/JESD209-4 に基づく代表的な値。品種・速度ビンで変わる)
項目DDR4LPDDR4
チャネル構成単一の×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 選択可の品種あり)
VDDQ1.2V1.1V
信号方式SSTLLVSTL(振幅・終端ともにさらに低め)
終端ODT(DQ とCA/ADDR で共通の考え方)DQ ODT と CA ODT を別に規定
チップセレクトランクごとに CS_nチャネルごと・ランクごとに CS
LPDDR4:1ダイに独立2チャネル、CAバスはSDRでCSはアクティブHighLPDDR4の1ダイにはチャネルAとチャネルBが独立して入っており、コマンド・アドレスはCA[5:0]の6本をSDR(CKの立ち上がりエッジのみ)でサンプルする。CSはアクティブHighでコマンドの1サイクル目だけHにする。ACTはACT-1・ACT-2、RD/WRはRD-1・CAS-2の2クロックずつ、あわせて4クロックでロウ/カラムのアドレスを送る。 LPDDR4の構成 1ダイに独立した2チャネル。コマンド・アドレスはCA[5:0]の6本のみ 1ダイ チャネルA CA[5:0]・CS・CK DQ[15:0] DQS チャネルB CA[5:0]・CS・CK DQ[15:0] DQS CAバス:SDR、CS はアクティブHigh CK CS CA[5:0] ACT-1 BA・ロウ上位 ACT-2 ロウ下位 RD-1/WR-1 BA・カラム・種別 CAS-2 カラム残り CS=H:コマンドの1サイクル目/CS=L:2サイクル目 CA[5:0] は CK の立ち上がりエッジだけでサンプル(SDR)。CS はコマンドの1サイクル目だけ H。 ACT(2クロック)+RD(2クロック)=合計4クロックでロウ/カラムのアドレスを送る。 ピン数が少ない代わりに、1コマンドの転送に複数サイクルかかる。 DDR4のロウ/カラム2段アドレスと同じ発想を、コマンド全体にまで広げている。
図7:LPDDR4 の CA バス。CS はアクティブHigh でコマンドの1サイクル目だけHにする。ACT は ACT-1・ACT-2 の2クロックでロウアドレスを、RD/WR は RD-1・CAS-2 の2クロックでカラムアドレスを送る(CA[5:0] は SDR、CK の立ち上がりエッジだけでサンプル)。

トレーニング:フライバイ配線とライトレベリング

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 トレーニングに相当する初期化手順は規定されており、「配線が短いから調整が要らない」わけではありません。

フライバイ配線とライトレベリングCKはフライバイ配線で各チップに順に届き、下流のチップほど遅れる。ライトレベリングではその遅れに合わせてDQSの出すタイミングをチップごとにずらす。 CKはフライバイでチップ1→2→3→4の順に届く 下流のチップほど到達が遅れる コントローラ チップ1 到達1 チップ2 到達2 チップ3 到達3 チップ4 到達4 ライトレベリング:チップごとにDQSの出す時刻をずらす DRAM は DQS の立ち上がりで、自分に届いている CK のレベルをサンプルする その結果を DQ で返し、コントローラは応答が切り替わる遅延を見てDQSのタイミングを確定する チップ1 → DQ で応答 チップ2 チップ3 チップ4 DQS(このチップのCKに合わせた位置) コントローラはDQSをトグルしながら各チップに応答させ、そのチップのCK到達に合わせてDQSの出すタイミングを調整する。 LPDDR4は配線が短く点対点に近いため、フライバイによる大きなスキューは生じにくい。
図8:CK はフライバイ配線で各チップに順に届き、下流のチップほど遅れる。ライトレベリングでは、DRAM が DQS の立ち上がりで自分に届いた CK をサンプルして DQ で返し、コントローラはその応答を見ながらチップごとに DQS を出すタイミングを確定する。CK の到達が波として伝わっていくアニメーション。

リフレッシュ:見えないところで走る 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バッファの駆動能力 の計算機で当たりをつけられます。

基板設計への示唆:何を等長にそろえるかバイトレーン内のDQとDQS、CKとコマンド・アドレスは、それぞれ別のグループとして等長にそろえる。 等長にそろえる対象 グループごとに基準が違うので、別々にそろえる バイトレーン:DQ0-7 + DQS DQ0-7 DQS DQとDQSを等長に(書き込み・読み出しの位相合わせに直結) CKとコマンド・アドレス CMD/ADDR CK CKとCMD/ADDRを等長に(CKエッジでのセットアップ/ホールドに直結) ランク数とトポロジ 1ランク:負荷が軽く配線もシンプル 2ランク:容量は増えるがバス負荷が増加 フライバイのスキューはライトレベリングで 補正されるが、マージンには効く DQ/DQSのグループとCK/CMD/ADDRのグループは基準が異なるので、それぞれのグループ内で等長にそろえる。
図9:等長にそろえる対象。バイトレーン内の DQ とDQS(左上)、CK とコマンド・アドレス(左下)はそれぞれ別のグループとしてそろえる。ランク数とトポロジがマージンに与える影響(右)。

よくある質問

CK ではなく DQS でデータを取り込むのはなぜですか。
CK は一方向にしか配られず、DRAM までの往復の配線遅延・内部遅延を含めると1周期に対して無視できない量になり、しかも配線長や温度で変動します。DQS はデータと同じ経路・同じタイミングで一緒に飛んでくる(ソースシンクロナス)ので、途中の遅延がどれだけ変動してもデータとの相対関係はほぼ保たれます。
2ランクのモジュールを使うと、なぜ動作速度が下がることがあるのですか。
DQ・DQS・コマンド/アドレスのバスがランク間で共有されるため、ランクを重ねるほどバス上の負荷(チップの入力容量、配線の分岐点)が増えます。負荷が増えると反射やクロストークのマージンが厳しくなり、同じ配線長でも許容できる最高速度は下がる傾向があります。実際にどこまで下がるかは基板・部品構成に依存します。
CS_n の配線を間違えたり、浮かせたりするとどうなりますか。
CS_n はコマンドを受け取るかどうかを決める信号なので、意図しないタイミングで L になれば、そのデバイスは自分宛てでないコマンドまで受け取ってしまいます。リフレッシュが実行されない、書き込みが化ける、といった症状になります。未使用の CS はプルアップして確実に非選択(H)にしておきます。
LPDDR4 にもライトレベリングは必要ですか。
LPDDR4 は配線が短く、DDR4 のようなフライバイの数珠つなぎ配線ではなく点対点に近いトポロジで配線されることが多いため、CK のスキューは DDR4 ほど大きくなりません。ただし、リードトレーニングや Vref トレーニングに相当する初期化手順は規定されており、配線が短いからといって調整が不要になるわけではありません。
ODT の RTT_NOM と RTT_WR、RTT_PARK は何が違いますか。
いずれも DDR4 の On-Die Termination の設定値で、RTT_NOM は通常時にそのランクへかける終端、RTT_WR は書き込み時に(自分自身または他ランクに)かける終端、RTT_PARK はコマンドを受けていないアイドル時にかけておく終端です。モードレジスタで別々に設定でき、書き込み中に非選択ランクの ODT を有効にするのはこの 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系メモリの信号方式・終端の考え方の基礎
  • 各メモリベンダの互換性資料・スピードビン表 — ランク数・実装構成ごとの動作周波数上限の目安

← コラム一覧へ