DDR3 SDRAMにおけるコマンドとオペレーション
DDR3 SDRAMにおけるコマンドとオペレーションでは、DDR3 SDRAMの内部レジスタ及びコマンドに対するオペレーションについて記述する。
ここではデバイスの制御方法とコマンドについて解説する。
まずコマンドの一覧を示す。コマンドは全てCKの上がりエッジとCK#の下がりエッジの交点を基準としたタイミングで与えられるハイ (H) またはロー (L) を意味する。ただしRESET#以外のピンのハイまたはローはVrefCAを基準とする。
表中のVまたはXはハイまたはローを意味する。Xはフローティングでもかまわない。BAはバンクアドレス (Bank Address)、RAはロウアドレス (Row Address)、CAはカラムアドレス (Column Address)、RFUは予備 (Reserve for Future Use)。
以下にDDR3 SDRAMの状態遷移図を示す。
ここではリセットピンとデバイスの電源投入時の初期化手順を説明する。
リセットピンは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サイクル。
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の内容を書き換えることができる。
以下ではモードレジスタMR0で設定できるモードとその説明を行う。MR0は以下のフォーマットで設定する。
バースト長 (Burst Length:BL)
CASレイテンシ (CAS Latency:CL)
バーストタイプ (Burst Type:BT)
テストモード (Test Mode:TM)
DLLリセット (DLL Reset)
ライトリカバリ (Write Recovery for Auto Precharge:WR)
プリチャージパワーダウン時のDLLコントロール (DLL control for Precharge Power Down:PPD)
バースト長、開始アドレス、およびバーストタイプでバースト中にアクセスするアドレス順は下表の通り。MR0:A1=0 A0=1時リード/ライトコマンド入力時のA12/BC#でBL8またはBC4 (バーストチョップ:Burst Chop) を選択できる。
バースト長に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レイテンシはリードコマンドが有効になってから実際にデータが出力されるまでの遅延サイクル数を指す。リードコマンドを入力してからデータが出てくるまでの遅延サイクルであるリードレイテンシ (Read Latency:RL) はアディティブレイテンシ (Additive Latency:AL) とCLの和になる。CASレイテンシはデバイススペックや実動作速度で設定できる値が異なる。詳しくは各デバイスのスペックシートを参照すること。
テストモードはデバイス生産時にのみ使用されるテスト用のモードである。通常は使用してはならない。テストモードでデバイスがどのように動作するかは未定義。おそらくデバイスメーカによってテストモードの動作は異なる。
DLLリセットはデバイス内部のDLL (Delay Locked Loop) 回路のリセットを指定する。DLL回路とは時間の経過と共に環境の変化(電源電圧や温度など)や内的原因(メモリデバイス内で行う処理や内部クロック自身の持つ誤差)に起因して外部クロックと内部クロックの間に発生する誤差を補正しタイミングを一定に保つための回路。外部クロックと内部クロックの信号を継続的に比較する位相検出器で構成されている。信号間に位相差を検出した場合、調整回路(遅延回路)に制御情報をフィードバックする。DLLをリセットすることでDLL回路は外部クロックをロックすることができる。DLLリセットは外部クロックと内部クロックの同期のためにtDLLKサイクルを必要とする。tDLLKの区間、CKEはハイでなければならない。DLLを使用する場合、DLLを有効にしてからDLLをリセットする必要がある。DLLをリセットしてからtDLLK後にDLLが使用可能になる。DLLリセットはDLL回路のリセット完了後自動的に通常状態に戻るのでDLLリセット完了後に明示的にMR0:A8=0を再設定する必要はない。
ライトリカバリサイクル数 (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を保持するかどうかを指定する。スローイグジットを選択した場合、DLLはプリチャージパワーダウン突入後に電流消費量を抑えるためにDLLを解除する。そのためパワーダウンを解除してからDLLの再ロックが必要となりデバイスに対してコマンド入力が有効になるまでにtXPDLLを要する。ファストイグジットを選択した場合、DLLはプリチャージパワーダウン突入後にも維持される。そのためパワーダウンを解除してからDLLの再ロックは不要であるためtXP後にデバイスに対してコマンド入力が有効になる。
以下ではモードレジスタMR1で設定できるモードとその説明を行う。MR1は以下のフォーマットで設定する。
DLLイネーブル (DLL enable)
出力ドライバインピーダンスコントロール (Output Driver Impedance Control)
通常時の終端抵抗 (RTT Nominal)
アディティブレイテンシ (Additive Latency)
ライトレベリングイネーブル (Write Leveling enable)
ターミネーションDQSイネーブル (Termination DQS Enable:TDQS)
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も無効にしておかなければならない。
出力ドライバインピーダンスを指定する。RZQ=240Ω。データピンの出力ドライバは240Ωの抵抗をプルアップ・プルダウン用に7個ずつ持っている。この抵抗の一部あるいは全部を有効・無効にすることで出力インピーダンスを調整する。この出力抵抗回路はRTT_Nom/RTT_WRで指定する終端抵抗と共有している。
RTT_NomとRTT_WRを個別に制御できる。MR1でRTT_Nomを指定する。RZQ=240Ω。
アディティブレイテンシを利用することでデータバスを効率的に活用できるようになる。アクティブコマンドからリード/ライトコマンドの入力が可能になるまでに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が選択可能である。
ライトレベリングを設定するとデバイスはライトレベリングモードに突入する。ライトレベリングモード時、デバイスはDQSの上がりエッジでサンプリングしたクロックの値をDQピンから出力する。
DDR3のメモリモジュールでは波形品質の向上のために、コマンドやアドレス、クロックを各デバイスを各ピン一つのラインで数珠繋ぎ(デイジーチェイン)でつなぐフライバイ構造 (Fly-by) を用いる。従来のメモリモジュールはクロックをトーナメント方式で分岐して各デバイスに同一タイミングで入力するように調整していた。このためメモリデバイス・コントローラはクロックとコマンド・アドレス・データのタイミングがずれることを考慮する必要がなかった反面、データ転送が高速化するにつれて等長配線への要求が厳しくなるとともに等長配線のための引き回しが配線長を伸張し波形品質の劣化を招いた。そこでデバイスを最短距離で数珠繋ぎに接続するフライバイ構造の提案がなされた。
フライバイ構造によって波形品質の向上とDIMM内の配線の短縮が可能になるが、反面クロックがDIMM内の各DRAMに伝播する時間に差が生じ、クロックとDQSの位相差が発生する。そこでメモリコントローラはDQS入力タイミングをクロックの伝播遅延にあわせて遅らせるという処理が必要になる。ライトレベリングはこの遅延量の決定のために必要となる機能である。
ライトレベリングとはDDR3 SDRAMからの簡易なフィードバックによってメモリコントローラがクロックとDQSの位相補正を行う機能のことを言う。
DDR3 SDRAMはDQSの上がりエッジでクロックをサンプルした結果をDQピンからメモリコントローラに返す。このフィードバックは非同期で行われる。
メモリコントローラはDQSのタイミングを変更しながら、この値が0から1に変化するタイミングを検出する。この位相差はDQピンにも同時にフィードバックしなければならない。DQS,DQS#,DQピンは全てコントローラで終端する。x16デバイスでは上位8ビットと下位8ビットは独立しておりそれぞれ別々に制御する。
出力禁止(Qoff)を設定するとデバイスの出力ピン (DQ, DQS DQS#) は何も接続しない状態(Hi-Z)になる。
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は終端抵抗だけを提供する。
TDQSとデータマスク (Data Mask:DM) は同じピンを使うため、TDQSを使用する場合はDMは使用できない。TDQSを使用しない場合のみはDMを使用可能となる。TDQSを使用しない場合、TDQS#ピンは使われない。
パーシャルアレイセルフリフレッシュ (Partial Array Self Refresh:PASR) - オプション機能
CASライトレイテンシ (CAS Write Latency:CWL)
オートセルフリフレッシュ (Auto Self Refresh:ASR)
セルフリフレッシュテンプラチャ (Self-refresh temperature range:SRT)
ライト時の終端抵抗 (RTT Write)
オプション機能なのでデータシートを確認すること。PASRはデバイスの一部のバンクだけをセルフリフレッシュの対象にする機能。必要なバンクだけリフレッシュするため全体をリフレッシュする場合よりも消費電力を抑えられる。PASRが有効の場合、指定された領域のメモリがセルフリフレッシュの対象となる(対象外の領域のデータは失われる場合がある)
CASライトレイテンシ (CAS write latency:CWL) は内部ライトコマンドから実際にデータの書き込み準備が完了し最初のデータ書き込みが始まるまでの遅延サイクル数を表す。
DDR2 SDRAMでライトレイテンシ (Write Latency:WL) はリードレイテンシ (Read Latency:RL) で与えられる計算式WL=RL-1で自動的に決定する。ただしリードレイテンシはCASレイテンシ (CAS Latency:CL) とアディティブレイテンシ (Additive Latency:AL) の和 (RL=CL+AL)。DDR3 SDRAMではDDR2 SDRAMと異なりWLは新たに定義されたCASライトレイテンシ (CAS Write Latency:CWL) とALで与えられる計算式WL=AL+CWLで決定する。CWLはモードレジスタMR2で5~8の値を指定する。
オプション機能なのでデータシートを確認すること。DDR3 SDRAMは動作保証温度範囲内 (TOPER:0~95℃) においてセルフリフレッシュの動作を保証しているが、より広範な温度帯域でセルフリフレッシュ動作を期待する場合がある。そのような場合、ASR機能かSRTを使用しなければならない。
動作保証温度範囲ではオートセルフリフレッシュかオートセルフのいずれかを有効にしなければならない。動作保証温度範囲を超える場合、セルフリフレッシュテンプラチャを有効にする。
RTT_WRに0以外を設定することでダイナミックODTが有効になる。データバスの波形品質を向上させるためにDDR3 SDRAMにライト時の終端抵抗値を動的に変更する機能ダイナミックODTが加えられた。ただしライトレベリング (Write Leveling) 時はRTT_Nomだけが有効。RZQ=240Ω。
オンダイサーマルセンサ (On Die Thermal Sensor:ODTS) - オプション機能
マルチパーパスレジスタ (Multi-Purpose Register:MPR)
MPR Loc
マルチパーパスレジスタロケーション (Multi-Purpose Register location:MPR Loc)
MPRはデータ読み出し時のタイミング補正のために用いられる。DDR3のメモリモジュールでは波形品質の向上のために、コマンドやアドレス、クロックを各デバイスを各ピン一つのラインで数珠繋ぎ(デイジーチェイン)でつなぐフライバイ (Fly-by) 構造を用いる。フライバイ構造によって波形品質の向上とDIMM内の配線の短縮が可能になるが、反面クロックがDIMM内の各DRAMに伝播する時間に差が生じ、データ出力タイミングが各デバイスごとに異なる。そこでメモリコントローラ内にデータを受け取るタイミング差を修正する遅延回路を設けて対応する。このとき各デバイスの遅延時間を見積もる操作をリードレベリング (Read Leveling) と呼ぶ。
MPRを有効にした後、リードコマンド (RDまたはRDA) を入力するとリードコマンドはメモリセルアレイではなくMPRに入力される。メモリセルアレイのデータの読み出しはMPRを無効にするまでできない。またMPRが有効であるとき、MRSコマンド、リードコマンド、リセット入力以外は無効である。
MPR読み出し動作中は1ビットの論理インタフェイスとなる。つまりDQ0 (DQU0/DQL0) はMPRからのデータを出力し、DQ0以外のピンはDQ0と同一データかもしくは0を出力する。DQS, DQS#からは通常のリードコマンド入力時と同様データストローブ信号を出力する。読み出し動作時のバースト長、バーストタイプ、リードレイテンシ(Read Latency)はMRSの設定に従い、バーストチョップ(Burst Chop:BC)はリードコマンド入力時のA12/BCに従う。リードコマンド入力時、A0~A1は0でなければならない。A12はバーストチョップの判断に用いられる。その他のアドレス入力は無視する。MR3:A1=0, A0=0のとき、MPRから常に0,1,0,1というデータが読み出される。
アクティブコマンドはこれからアクセスするバンクアドレスをBA0-BA2、ロウアドレスをA0-A15で指定し開く(有効にする)。このロウアドレスはプリチャージコマンド (precharge) の入力でそのバンクがアイドルになるまで有効となる。他のロウアドレスを指定する場合、プリチャージコマンドを入力する必要がある。
プリチャージコマンドはアクティブコマンドで開いたバンク/ローアドレスを閉じる(ロウアドレスを無効にして保存する)。オートプリチャージを使っている場合を除き、プリチャージコマンドからtRP時間経過しなければ同一バンクをActiveすることができない。プリチャージコマンドを入力すると当該バンクはアイドル状態に復帰する。プリチャージコマンドはアクティブしていないバンクに対しても有効。
プリチャージコマンドは単一バンクを対象とするプリチャージコマンド (PRE) と全バンクを対象とするプリチャージオールコマンド (PREA) がある。プリチャージコマンドはA10をローにし、BA0-BA2で対象バンクを指定する。プリチャージオールコマンドはA10をハイにし、BA0-BA2は0にしておく。
リードコマンドはデータを読み出すコマンド。メモリデバイスはアクティブコマンドで指定したバンクおよびロウアドレス、リードコマンドで指定したカラムアドレスからバースト長分だけデータを連続で出力する。データはリードコマンドからアディティブレーテンシ (AL) とCASレーテンシ (CL) の和 (AL+CL) のサイクル数分送れて出力される。データと同期してデータストローブ信号 (DQS) も出力する。DQSはデータの出始め前にtRPRE期間プリアンブル (Preamble)、データ終了時にtRPST期間のポストアンブル (Postamble) を出力する。
リード/ライトコマンドの入力時にA12/BC#で動的にバーストチョップ (Burst Chop:BC) の有無 (BC4/BL8) を切り替えることができる。リード作時のタイミングパラメタを以下に示す。
tDQSCKmax/tDQSCKminはCK/CK#の交点に対するDQS/DQS#の交点の許容される振れ幅に対する規定値
tDQSCKはCK/CK#の交点に対するDQS/DQS#の交点のタイミング
tQSHはDQSのハイ区間、tQSLはDQSのロー区間。
tLZ/tHZはCK/CK#の交点からDQS/DQが信号を出力を開始するまでの時間、およびHi-Zになるまでの時間
tDQSQはDQS/DQS#の交点から最も出力タイミングが遅いDQピンからデータが出始めるまでの時間
tQHははDQS/DQS#の交点から最も出力タイミングの早いDQピンからデータが出終わるまでの時間
有効データ区間はtQH-tDQSQと等しい。
ただしtLZ/tHZおよびtRPREの起点/TRPSTの終点はは下図で示すように計算する。
以下にリードコマンドと他のコマンドを組合せたときのタイミングチャートを示す。
ただしBL=8、AL=0、CL=5、Dout nはCol nに対応して読み出されたデータである。
DDR3 SDRAMではCAS#から次のCAS#までのタイミング制限tCCDは4サイクルである。そのためリードコマンドは4サイクルごとにしか入力できない。データの読み出しが連続する場合、1つ目のリードコマンドに対するポストアンブル (Postamble)、2つ目のリードコマンドに対するプリアンブル (Preamble) は消失し連続した読み出しの先頭にプリアンブル、最後にポストアンブルが現われる。
ただしBC4、CL=5、AL=5、Dout nはCol nに対応して読み出されたデータである。
バーストチョップ (Burst Chop:BC4) を用いてリードデータを途中で停止しても続くリードコマンドをtCCDより短いタイミングで入力することはできない。そのため2つ目のリードコマンドに対応する読み出しは1つ目のリードコマンドがバーストチョップでなかった場合と等しい。
ただしBL8、CL=5、CL=0、CWL=5、Dout nはCol nに対応して読み出されたデータ、Din bはCol bに対応して書き込まれるデータである。
バーストチョップしないリードコマンドからライトコマンドにはRL+tCCD+2 \times tCK-WL期間が必要になる。ただしRLはリードレイテンシ (Read Latency)、WLはライトレイテンシ (Write Latency)、tCCDはCAS#から次のCAS#までのタイミング制限、tCKは1サイクルの時間。図の例ではリードからライトの切り替わりに2サイクル (2 \times tCK) の空き時間が発生する。
ただしBC4、CL=5、AL=0、CWL=5、Dout nはCol nに対応して読み出されたデータ、Din bはCol bに対応して書き込まれるデータである。
バーストチョップしたリードコマンドからライトコマンドまでの期間はRL+tCCD/2+2 \times tCK-WLに短縮される。このためtCCD/2サイクル早くライトコマンドを入力できる。
ただしCL=5、AL=0、Dout nはCol nに対応して読み出されたデータである。
ただしCL=5、AL=0、Dout nはCol nに対応して読み出されたデータである。
先に読み出すデータに対してバーストチョップを行ってもtCCDは変わらない。そのため1つ目のリードコマンドに対応するデータの読み出しと2つ目のリードコマンドに対応するデータの読み出しの間に2サイクルデータの出力されない区間が発生する。このような場合、それぞれのデータの読み出し始めと終わりにプリアンブル・ポストアンブルが挿入される。
ただしCL=5、AL=0、CWL=5、Dout nはCol nに対応して読み出されたデータ、Din bはCol bに対応して書き込まれるデータである。