Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
概要 このアプリケーション ノートでは、Virtex-II デバイスを使用してダブル データ レート (<strong>DDR</strong>)<br />
<strong>SDRAM</strong> デバイスとインターフェイスをとる方法について説明します。リファレンス デザインは、<br />
200Mhz のクロック レートを使用して <strong>400Mb</strong>/s でデータを転送する <strong>DDR</strong> <strong>SDRAM</strong> デバイスをター<br />
ゲットにしています。<br />
はじめに このアプリケーション ノートでは、Virtex-II デバイスでインプリメントする <strong>DDR</strong> <strong>SDRAM</strong> コントロー<br />
ラのデザインについて説明します。初めのセクションでは <strong>DDR</strong> <strong>SDRAM</strong> の機能を簡単に説明し、残り<br />
のセクションではインプリメンテーションとタイミング解析の詳細について説明します。<br />
<strong>DDR</strong> <strong>SDRAM</strong> の<br />
概要<br />
R<br />
XAPP253 (v2.0) 2002 年 7 月 16 日<br />
<strong>DDR</strong> <strong>SDRAM</strong> は、高速な CMOS のダイナミック ランダム アクセス メモリ (DRAM) から構成されて<br />
います。内部的には、クワッド バンクの DRAM として構成されています。すべての入力は JEDEC<br />
SSTL_2 規格と、すべての出力は SSTL_II Class II 規格と互換性があります。<br />
<strong>DDR</strong> <strong>SDRAM</strong> では、ダブル データ レート アーキテクチャを使用して高速な動作を実現しています。各<br />
クロック サイクルの両方のエッジでデータを転送するので、メモリ デバイスのデータ スループットが<br />
実質的に 2 倍になります。<strong>DDR</strong> <strong>SDRAM</strong> は、CLK および CLK という差動クロックを使用して動作し<br />
ます。コマンド (アドレスおよび制御信号) は CLK のポジティブ エッジで登録されます。<br />
双方向データ ストローブ (DQS) は、データ キャプチャで使用するため、データと共に転送されます。<br />
書き込みサイクル中は<strong>コントローラ</strong>が、読み込みサイクル中はメモリが DQS を転送します。DQS と<br />
データのタイミングは、読み込みサイクル中はクロックのエッジ、書き込みサイクル中は中央で合わせ<br />
られます。<br />
<strong>DDR</strong> <strong>SDRAM</strong> に対する読み込みと書き込みのアクセスは、バースト指向です。つまり、アクセスは、選<br />
択したロケーションから始まり、プログラムされた順序でプログラムされた数のロケーションについて<br />
続けられます。アクセスは Active コマンドを登録することによって開始され、その後 Read または Write<br />
コマンドが続きます。アドレス ビットは、Read または Write コマンドと同時に登録され、バースト ア<br />
クセスを開始する列のロケーションとバンクを選択するために使用されます。<br />
<strong>DDR</strong> <strong>SDRAM</strong> では、プログラム可能な読み込みまたは書き込みのバースト長として 2、4、8、または<br />
フルページのロケーションを指定できます。自動プリチャージ機能を有効にすると、バースト アクセス<br />
終了後にプリチャージが自動的に始まります。標準的な SDR <strong>SDRAM</strong> と同じように、<strong>DDR</strong> <strong>SDRAM</strong> は<br />
パイプライン化されたマルチバンク アーキテクチャによって並列動作が可能なので、行のプリチャージ<br />
とアクティブ化に時間がかからないように見え、実質的に帯域が高くなります。<br />
モード レジスタ<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong><br />
<strong>コントローラ</strong><br />
著者 : Lakshmi Gopalakrishnan<br />
アプリケーション ノート: Virtex-II シリーズ<br />
モード レジスタは、<strong>DDR</strong> <strong>SDRAM</strong> の動作モードを定義するために使用されます。この定義では、バー<br />
スト長、バースト タイプ、CAS レイテンシ、動作モードを選択します。モード レジスタは、MODE<br />
REGISTER SET コマンドによってプログラムされます。格納された情報は、再びプログラムされるかデ<br />
バイスの電源が切れるまで保持されます。モード レジスタは、すべてのバンクがアイドル状態で、バー<br />
スト処理を行っていないときにロードする必要があります。<br />
© 2002 <strong>Xilinx</strong>, Inc. All rights reserved. すべての <strong>Xilinx</strong> の商標、登録商標、特許、免責条項は、http://www.xilinx.co.jp/legal.htm にリストされています。他のすべての商標および登<br />
録商標は、それぞれの所有者が所有しています。すべての仕様は通知なしに変更される可能性があります。<br />
保証否認の通知 : <strong>Xilinx</strong> ではデザイン、コード、その他の情報を「現状有姿の状態」で提供しています。この特徴、アプリケーションまたは規格の一実施例としてデザイン、コード、そ<br />
の他の情報を提供しておりますが、<strong>Xilinx</strong> はこの実施例が権利侵害のクレームを全く受けないということを表明するものではありません。お客様がご自分で実装される場合には、必要な<br />
権利の許諾を受ける責任があります。<strong>Xilinx</strong> は、実装の妥当性に関するいかなる保証を行なうものではありません。この保証否認の対象となる保証には、権利侵害のクレームを受けない<br />
ことの保証または表明、および市場性や特定の目的に対する適合性についての黙示的な保証も含まれます。<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 1
R<br />
バースト長<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
モード レジスタのビット A0 ~ A2 では、バースト長を指定します。バースト長は、特定の Read また<br />
は Write コマンドでアクセスする列ロケーションの最大数を定義します。ロケーション数が 2、4、8 の<br />
バースト長は、シーケンシャルとインターリーブの両方のバースト タイプで指定できます。フルページ<br />
のバーストは、シーケンシャル モードでのみサポートされます。<br />
バースト タイプ<br />
特定のバーストにおけるアクセスは、シーケンシャルまたはインターリーブで行うようにプログラムで<br />
きます。これをバースト タイプと呼び、ビット M3 で選択します。<br />
読み込みレイテンシ<br />
読み込みレイテンシとは、Read コマンドが登録されてから出力データの先頭ビットを使用できるよう<br />
になるまでの遅延をクロック サイクルで表したものです。レイテンシは、2、3、または 4 クロックに設<br />
定できます。このリファレンス デザインでは、200MHz のメモリ デバイスで必要となる 3 クロックの<br />
読み込みレイテンシを使用します。<br />
動作モード<br />
通常の動作モードを選択するには、A7 ~ A11 を 0、A0 ~ A6 を目的の値に設定して、MODE REGISTER<br />
SET コマンドを実行します。DLL リセットを開始するには、A7 と A9 ~ A11 を 0、A8 を 1、A0 ~ A6<br />
を目的の値に設定して、MODE REGISTER SET コマンドを実行します。<br />
拡張モード レジスタ<br />
拡張モード レジスタは、モード レジスタでは制御できない機能、つまり、DLL の有効化と無効化を制<br />
御します。通常の動作では、DLL を有効にする必要があります。DLL は、デバッグまたは評価のため<br />
に DLL を無効にした後で通常の動作に戻る場合と、パワーアップ時の初期化で有効にする必要があり<br />
ます。拡張モード レジスタをプログラムするには、BA0 = 1、BA1 = 0 にしてモード レジスタに対して<br />
LOAD MODE REGISTER コマンドを実行します。拡張モード レジスタは、すべてのバンクがアイドル<br />
状態で、バースト処理を行っていないときにロードする必要があります。拡張モード レジスタの構成に<br />
ついては、<strong>DDR</strong> <strong>SDRAM</strong> のデータシートを参照してください。<br />
コマンド<br />
このセクションでは、<strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>で使用するコマンドについて説明します。<br />
DESELECT<br />
DESELECT コマンドは、<strong>DDR</strong> <strong>SDRAM</strong> が新しいコマンドを実行しないようにします。<strong>DDR</strong> <strong>SDRAM</strong><br />
は、実質的に選択が解除された状態になります。既に実行中の動作は影響を受けません。<br />
NO OPERATION (NOP)<br />
NO OPERATION (NOP) コマンドは、選択した <strong>DDR</strong> <strong>SDRAM</strong> に NOP を実行するよう指示するため<br />
に使用されます。これによって、アイドル状態または待機状態のときに不要なコマンドが登録されなく<br />
なります。既に実行中の動作は影響を受けません。<br />
LOAD MODE REGISTER<br />
モード レジスタは、入力 A0 ~ A11 によってロードされます。LOAD MODE REGISTER コマンドを<br />
実行できるのは、すべてのバンクがアイドル状態になっているときだけです。以後の実行可能コマンド<br />
は、t MRD が経過するまで実行できません。<br />
Active コマンド<br />
Active コマンドは、特定のバンクの行をアクティブにしてアクセスできるようにするために使用されま<br />
す。入力 BA0 および BA1 の値でバンクを、入力 A0 ~ A7 で指定するアドレスで開始列ロケーション<br />
を選択します。入力 A8 の値は、自動プリチャージを使用するかどうか決定します。自動プリチャージ<br />
2 www.xilinx.co.jp XAPP253 (v2.0) 2002 年 7 月 16 日
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
<strong>DDR</strong> <strong>SDRAM</strong><br />
<strong>コントローラ</strong>の<br />
インプリメンテー<br />
ションの詳細<br />
を選択すると、アクセスしている行が読み込みバースト後にプリチャージされます。自動プリチャージ<br />
を選択しないと、以後もアクセスできるように行がアクティブなままになります。Active コマンドに続<br />
いて、Read または Write コマンドを実行します。<br />
Read コマンドは、アクティブな行に対してバースト読み込みアクセスを開始するために使用されます。<br />
Write コマンドは、アクティブな行に対してバースト書き込みアクセスを開始するために使用されます。<br />
入力 BA0 および BA1 の値でバンクを、入力 A0 ~ A7 で指定するアドレスで開始列ロケーションを選<br />
択します。<br />
PRECHARGE<br />
PRECHARGE コマンドは、特定のバンクまたはすべてのバンクのアクティブな行をアクティブでない<br />
状態にするために使用されます。バンクは、PRECHARGE コマンドを実行した後で指定時間 (t RP) が経<br />
過するとアクセスできるようになります。すべてのバンクをプリチャージするかどうかは、入力 A8 で<br />
指定します。単一のバンクをプリチャージする場合は、入力 BA0 と BA1 でバンクを選択します。<br />
BURST TERMINATE<br />
BURST TERMINATE コマンドは、読み込みバーストを中断するために使用されます。BURST<br />
TERMINATE コマンドを実行すると、それ以前の最後に登録された Read コマンドが中断されます。コ<br />
ントローラで ddr_rasb、ddr_casb、ddr_web 信号を使用してこれらのコマンドを生成する方法につい<br />
ては、<strong>DDR</strong> <strong>SDRAM</strong> のデータシートを参照してください。<br />
デザイン機能<br />
<strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>のデザイン機能には、次のようなものがあります。<br />
• バースト長として 2、4、8、フルページをプログラム可能 (フルページは一部の DRAM でのみ可能)<br />
CAS レイテンシとして 3 をプログラム可能<br />
読み込みサイクルと書き込みサイクルの両方にバースト長を適用<br />
200MHz、<strong>400Mb</strong>/s の <strong>DDR</strong> <strong>SDRAM</strong> とのインターフェイス<br />
メモリからのデータ読み込みに DQS を使用<br />
図 1 に、<strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>の最上位ブロック図を示します。<br />
図 2 に、<strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>の詳細なブロック図を示します。<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 3<br />
R
R<br />
表 1 に、<strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>のピンの説明を示します。<br />
user_input_clk<br />
user_input_data (63:0)<br />
user_output_data (63:0)<br />
User<br />
Interface user_data_valid<br />
bank_address (1:0)<br />
user_input_address (19:0)<br />
config_register (9:0)<br />
command_register (2:0)<br />
rst<br />
<strong>DDR</strong><br />
<strong>SDRAM</strong><br />
Controller<br />
図 1: <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>の最上位ブロック図<br />
user_clk<br />
user_data<br />
clk_dcm<br />
user_command_register<br />
user_config_register<br />
user_address<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
ddr_clk<br />
ddr_clkb<br />
ddr_dqs (3:0)<br />
ddr_dq (31:0)<br />
ddr_csb<br />
ddr_cke<br />
ddr_rasb<br />
ddr_casb<br />
ddr_web<br />
ddr_dm (3:0)<br />
ddr_BA (1:0)<br />
ddr_address (11:0)<br />
図 2: <strong>コントローラ</strong>のブロック図<br />
<strong>DDR</strong><br />
<strong>SDRAM</strong><br />
MT46V4M32<br />
x253_01_050302<br />
4 www.xilinx.co.jp XAPP253 (v2.0) 2002 年 7 月 16 日<br />
clk<br />
wclk<br />
rclk<br />
Auto<br />
Refresh<br />
Counter<br />
<strong>DDR</strong><br />
<strong>SDRAM</strong><br />
Controller<br />
clkdv_16<br />
Data Path<br />
Data Strobe<br />
ddr_BA<br />
ddr_address<br />
ddr_rasb<br />
ddr_casb<br />
ddr_web<br />
ddr_clk<br />
ddr_clkb<br />
ddr_dqs<br />
ddr_dq<br />
x253_03_050802
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
表 1: <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>のピンの説明<br />
ユーザー<br />
ロジックへの<br />
インター<br />
フェイス<br />
<strong>DDR</strong><br />
<strong>SDRAM</strong> への<br />
インター<br />
フェイス<br />
ピン名 ピンの方向 幅 説明<br />
user_input_data In 64 書き込みデータ<br />
user_input_address In 20 アドレス、2 バンク アドレスで user_bank_address<br />
user_command_register In 3 <strong>コントローラ</strong>のコマンド<br />
user_config_register In 10 <strong>コントローラ</strong>のコンフィギュレーション コマンド<br />
user_rst In 1 リセット<br />
user_input_clk In 1 入力クロック<br />
user_output_data Out 64 読み込みデータ<br />
user_data_valid Out 1 High の場合にデータが有効<br />
ddr_ad Out 12 アドレス<br />
ddr_dq In/Out 32 データ<br />
ddr_dqs In/Out 4 データ ストローブ<br />
ddr_rasb Out 1 コマンド<br />
ddr_casb Out 1 コマンド<br />
ddr_web Out 1 コマンド<br />
ddr_ba Out 2 バンク アドレス<br />
ddr_clk Out 1 クロック<br />
ddr_clkb Out 1 クロック (反転)<br />
ddr_csb Out 1 チップ セレクト<br />
ddr_cke Out 1 クロック イネーブル<br />
ddr_dm Out 4 データ マスク<br />
表 2 に、EMR、BMR の動作、BMR/EMR、CAS レイテンシ、バースト タイプ、バースト長の順で 10<br />
ビットのユーザー コンフィギュレーション レジスタの内容を示します。<br />
表 2: ユーザー コンフィギュレーション レジスタの定義<br />
パラメータ名 幅 説明<br />
EMR 1 拡張モード レジスタ<br />
0 - DLL が有効<br />
1 - DLL が無効<br />
BMR の動作 1 基本モード レジスタ<br />
0 - 通常の BMR の動作<br />
1 - 通常動作/DLL のリセット<br />
BMR/EMR 1 0 - MR<br />
1 - EMR<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 5<br />
R
R<br />
表 2: ユーザー コンフィギュレーション レジスタの定義(続き)<br />
パラメータ名 幅 説明<br />
CAS レイテンシ 3 010 - 2<br />
011 - 3<br />
100 - 4<br />
その他 - 予約済み<br />
バースト タイプ 1 0 - シーケンシャル<br />
1 - インターリーブ<br />
バースト長 3 001 - 2<br />
010 - 4<br />
011 - 8<br />
111 - フルページ<br />
その他 - 予約済み<br />
表 3 に、ユーザー コマンド レジスタの定義を示します。<br />
表 3: ユーザー コマンド レジスタの定義<br />
コマンド 説明<br />
000 NOP<br />
001 プリチャージ<br />
010 自動リフレッシュ<br />
011 未使用<br />
100 書き込み要求<br />
110 読み込み要求<br />
111 バースト中断<br />
メモリの初期化<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
メモリは、あらかじめ定められている方法でパワーアップおよび初期化する必要があります。コントロー<br />
ラは、初期化シーケンスを次のように処理します。<br />
1. すべての電源、基準電圧、クロックが安定した後で、<strong>DDR</strong> <strong>SDRAM</strong> はコマンドを実行できるよう<br />
になるまで 200μs の遅延を必要とします。<br />
2. 200μs が経過すると、初期化シーケンスが始まります。<br />
a. DESELECT または NOP コマンドが実行され、CKE が High に設定されます。<br />
b. PRECHARGE ALL コマンドが実行されます。<br />
c. LOAD MODE REGISTER コマンドが実行され、拡張モード レジスタが DLL を有効にできる<br />
ようになります (BA1 = 0 および BA0 = 1)。<br />
d. さらに LOAD MODE REGISTER コマンドがモード レジスタに対して実行され (BA0 と BA1<br />
はどちらも 0)、DLL がリセットされ、動作パラメータがプログラムされます。<br />
e. PRECHARGE ALL コマンドが実行され、デバイスは all-banks-idle 状態になります。<br />
f. IDLE 状態になると、AUTO REFRESH が 2 サイクル実行されます。<br />
さらに、DLL リセット ビットを解除してモード レジスタに対して LOAD MODE REGISTER コマンド<br />
を実行するとよいでしょう。このコマンドは、LOAD MODE REGISTER コマンドを実行して DLL を<br />
リセットした後であれば、いつでも実行できます。<br />
DLL をリセットしてから Read コマンドを実行するまでに、200 クロック サイクル待機する必要があり<br />
ます。これは、Read コマンドを<strong>コントローラ</strong>に送信する前にユーザー インターフェイスで処理する必<br />
要があります。200 クロック サイクルが経過すると、<strong>DDR</strong> <strong>SDRAM</strong> は通常動作が可能になります。<br />
6 www.xilinx.co.jp XAPP253 (v2.0) 2002 年 7 月 16 日
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
図 3 に、<strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>のステート マシンを示します。<br />
Precharge<br />
メモリ アクセス<br />
Read または Write コマンドをメモリに対して実行できるようにするには、LOAD MODE REGISTER<br />
コマンドを実行する必要があります。特定のバンクで行をアクティブにするには、LOAD MODE<br />
REGISTER コマンドの後で ACTIVE コマンドを実行する必要があります。ACTIVE コマンドを実行す<br />
ると、アクティブにするバンクと行の両方が選択されます。ACTIVE コマンドで行をアクティブにして<br />
から t RCD が経過すると、その行に対して Read または Write コマンドを実行できます。以後、同じバ<br />
ンク内の異なる行に対して ACTIVE コマンドを実行するには、アクティブになっている行をプリチャー<br />
ジする必要があります。<br />
メモリへの書き込み<br />
Write and<br />
RCDW_end<br />
Reset<br />
Write<br />
Write<br />
Wait<br />
図 3: <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>のステート マシン<br />
x253_01_050802<br />
書き込みバーストを開始するには、Write コマンドを実行します。列とバンクの開始アドレスは、Write<br />
コマンドで指定します。書き込みバースト アクセスでは、自動プリチャージを有効または無効にできま<br />
す。書き込みバーストでは、初めの有効なデータイン要素が DQS の初めの立ち上がりエッジで登録さ<br />
れ、Write コマンドに続いて以後のデータ要素が DQS の各エッジで登録されます。Write コマンドを実<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 7<br />
Idle<br />
Initialization<br />
Read/<br />
Write<br />
Idle<br />
Active<br />
Read/WR<br />
Precharge<br />
All<br />
Read<br />
Auto<br />
Refresh<br />
Read and<br />
RCDR_end<br />
Read<br />
Wait<br />
Load<br />
Mode Register<br />
Burst<br />
Stop<br />
Burst<br />
Terminate<br />
R
デジタル クロック<br />
マネージャ<br />
(DCM) のインプ<br />
リメンテーション<br />
の詳細<br />
R<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
行してから立ち上がりエッジが現れるまでの間に DQS が Low になっている状態を、書き込みプリアン<br />
ブルと呼びます。最後のデータイン要素を書き込んだ後で DQS が Low になっている状態を、書き込み<br />
ポストアンブルと呼びます。書き込みプリアンブルは、比較的広い範囲 (1 クロック サイクルの 75 ~<br />
125%) で指定されます。<br />
メモリからの読み込み<br />
読み込みバーストを開始するには、Read コマンドを実行します。列とバンクの開始アドレスは、Read<br />
コマンドで指定します。読み込みバースト アクセスでは、自動プリチャージを有効または無効にできま<br />
す。読み込みバーストでは、Read コマンドを実行してから CAS レイテンシの時間が経過した後で、開<br />
始列アドレスから有効なデータアウト要素を読み込むことができるようになります。DQS は、<strong>DDR</strong><br />
<strong>SDRAM</strong> が出力データと共に駆動します。DQS が初めに Low になっている状態を、読み込みプリアン<br />
ブルと呼びます。最後にデータアウト要素を読み込むときに DQS が Low になっている状態を、読み込<br />
みポストアンブルと呼びます。<br />
AUTO REFRESH カウンタ<br />
メモリは、15.6μs の平均間隔で AUTO REFRESH サイクルを必要とします。200MHz のシステム ク<br />
ロックを分周したクロックが、AUTO REFRESH サイクルを生成するためのカウンタで使用されます。<br />
AUTO REFRESH コマンドは、<strong>コントローラ</strong>のステート マシンが IDLE 状態にあるときに生成されます。<br />
クロック供給方法<br />
このセクションでは、このデザインでインプリメントするクロック供給方法について説明します。1 番<br />
目の DCM は、CLK0 と CLK90 を生成します。CLK0 は、ユーザーが供給する入力クロックと同じタ<br />
イミングになります。この DCM は、CLKDV 出力も供給します。この出力は、入力クロックを 16 分<br />
周したクロックで、AUTO REFRESH カウンタで使用します。図 4 に、DCM のインプリメンテーショ<br />
ンを示します。<br />
<strong>コントローラ</strong> ブロックにある 2 番目の DCM (DCM2_RECAPTURE) は、ユーザーが入力したクロック<br />
の位相をシフトさせたクロックを生成します。このクロックは、メモリからの読み込みのときに DQS<br />
クロック ドメインからデータを再キャプチャするために使用されます。rclk ドメインで再キャプチャさ<br />
れたデータは、システム クロック ドメインに移行します。位相をシフトさせる値はシステムごとに異<br />
なり、それぞれに応じてプログラムする必要があります。<br />
DCM 用にさらにリソースを使用できる場合は、3 番目の DCM を使用するとタイミングに余裕が生じ<br />
ます。3 番目の DCM (オプション) の詳細については、「I/O のタイミング解析」を参照してください。<br />
この DCM は、システム クロックの位相をシフトした WCLK を生成するために使用されます。WCLK<br />
は、書き込み時に <strong>DDR</strong> IOB レジスタにあるデータにクロックを供給するために使用されます。<br />
8 www.xilinx.co.jp XAPP253 (v2.0) 2002 年 7 月 16 日
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
user_clk<br />
user_rst<br />
IPAD<br />
IBUFG_SSTL2_I<br />
CLKIN<br />
CLKFB<br />
RST<br />
データ パス<br />
DCM1<br />
CLK0<br />
CLK90<br />
CLK180<br />
CLK270<br />
CLKDV<br />
CLK2X<br />
LOCKED<br />
DCM_CLK<br />
DCM2_RECAPTURE<br />
CLKIN<br />
CLKFB<br />
RST<br />
CLK0<br />
CLK90<br />
CLK180<br />
CLK270<br />
CLKDV<br />
CLK2X<br />
LOCKED<br />
DCM_RCLK<br />
(PHASE_SHIFT)<br />
DCM3 (optional)<br />
CLKIN<br />
CLKFB<br />
RST<br />
CLK0<br />
CLK90<br />
CLK180<br />
CLK270<br />
CLKDV<br />
CLK2X<br />
LOCKED<br />
DCM_WCLK<br />
(PHASE_SHIFT)<br />
BUFG<br />
BUFG<br />
BUFG<br />
BUFG<br />
BUFG<br />
図 4: DCM のインプリメンテーション<br />
Virtex-II デバイスには、<strong>DDR</strong> 機能に使用できる I/O ブロック (IOB) があります。clock-to-out 遅延を<br />
最小にするため、リファレンス デザインでは、<strong>DDR</strong> <strong>SDRAM</strong> インターフェイスに対する入力と出力の<br />
両方を IOB に記憶できます。<br />
図 5 に、Virtex-II デバイスで使用できる IOB と、双方向データ (DQ) 信号の場合の IOB の使用法を示<br />
します。双方向データの場合、<strong>DDR</strong> IOB は入力信号と出力信号の両方を処理する必要があります。<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 9<br />
1<br />
0<br />
0<br />
1<br />
D0<br />
D1<br />
C0<br />
C1<br />
F<strong>DDR</strong><br />
D0<br />
D1<br />
Q<br />
C0<br />
C1<br />
F<strong>DDR</strong><br />
Q<br />
clk<br />
clk90<br />
OPAD ddr_clk<br />
OBUF_SSTL2_I<br />
OPAD ddr_clkb<br />
OBUF_SSTL2_I<br />
clkdv_16<br />
rclk<br />
locked<br />
wclk<br />
x253_04_070502<br />
R
R<br />
en<br />
tx_clk<br />
tx[0]<br />
tx[1]<br />
rx_clk<br />
D Q<br />
D0<br />
D1<br />
C0<br />
C1<br />
図 5: <strong>DDR</strong> IOB のインプリメンテーション例<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
図 6 に、<strong>コントローラ</strong>のデータ パスを示します。すべての入力信号について、複数のパイプライン ス<br />
テージを示すために SRL ラベルを使用しています。これらのパイプライン ステージは、データおよび<br />
DQS 信号と <strong>DDR</strong> <strong>SDRAM</strong> の制御信号のタイミングを合わせるために使用されます。図 6 には、IOB で<br />
インプリメントしたデータ パスの一部も明確に示されています。<br />
dqs_enable<br />
clk<br />
dqs_reset<br />
write_en<br />
user_input_data<br />
wclk<br />
user_output_data<br />
user_data_valid<br />
2n<br />
SRL<br />
SRL<br />
SRL<br />
SRL<br />
図 6: <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong>のデータ パス<br />
10 www.xilinx.co.jp XAPP253 (v2.0) 2002 年 7 月 16 日<br />
Q<br />
F<strong>DDR</strong><br />
2n<br />
D Q<br />
D Q<br />
sync_dqs2clk<br />
read_en<br />
D Q<br />
D Q<br />
n<br />
n<br />
rclk<br />
1<br />
0<br />
PAD<br />
FD<br />
D Q<br />
F<strong>DDR</strong><br />
D0 Q<br />
D1<br />
C0<br />
C1<br />
D Q<br />
clk<br />
F<strong>DDR</strong><br />
D0 Q<br />
D1<br />
C0<br />
C1<br />
FDRE<br />
Q<br />
D<br />
CE<br />
FDRE<br />
Q<br />
D<br />
CE<br />
D Q<br />
D Q<br />
rx[0]<br />
rx[1]<br />
x253_05new_050802<br />
ddr_dqs<br />
n/8<br />
ddr_dq<br />
n<br />
<strong>DDR</strong> <strong>SDRAM</strong><br />
x253_06_070302
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
データ書き込みパス<br />
メモリに書き込む場合、<strong>コントローラ</strong>はデータ ストローブ (DQS) が <strong>DDR</strong> <strong>SDRAM</strong> デバイスのピンに<br />
あるデータとクロックの中央でタイミングを合わせることを保証する必要があります。メモリ デバイス<br />
では DQS と CLK の位相がほぼ合っていることが必要ですが、仕様ではスキューも許されています。こ<br />
のスキューを最小にするため、CLK と DQS は <strong>DDR</strong> IOB のフリップフロップを通して転送されます。<br />
<strong>コントローラ</strong> ブロックは、書き込みサイクル時に DQS 信号を生成するために IOB フリップフロップで<br />
必要となる dqs_enable および dqs_reset 信号を生成します。dqs_enable 信号はトライステート出力を<br />
制御し、dqs_reset は DQS フリップフロップをリセット状態に保ちます。dqs_reset は、メモリが必要<br />
とする書き込みプリアンブルのタイミングを満たすために役立ちます。dqs_reset は 1 クロック サイク<br />
ル後に解放され、CLK がクロックを供給する <strong>DDR</strong> フリップフロップがメモリに対して DQS を生成し<br />
ます。<br />
<strong>コントローラ</strong> ブロックが生成する write_en 信号は、データ パスのトライステート出力を制御します。<br />
書き込みのタイミング解析では、(DQS と同じように) <strong>DDR</strong> IOB レジスタで CLK によってデータを生<br />
成する場合と、タイミングに余裕を与えるため WCLK を使用してデータを生成する場合の両方につい<br />
て検討します。WCLK は、CLK の位相をシフトさせたクロックです。CLK でデータを生成する場合<br />
は、メモリにおけるデータ ウィンドウ内に DQS を配置するために DQS 信号と DQ 信号の間で必要と<br />
なるトレースの差に左右されます。タイミングに余裕を持たせるには、WCLK を生成する DCM を追<br />
加します。WCLK は、メモリにおけるデータ ウィンドウの中央に DQS を配置するために使用されます。<br />
データ読み込みパス<br />
読み込みサイクルでは、メモリはクロックのエッジでデータとタイミングを合わせた DQS をコント<br />
ローラに提供します。このデザインでは、DQS を使用して、メモリが提供するデータをキャプチャしま<br />
す。DQS は、<strong>DDR</strong> IOB のデータにクロックを供給するローカルな専用クロック リソースに分配されま<br />
す。DQS はストローブ信号なので、DQS ドメインでキャプチャしたデータは再キャプチャする必要が<br />
あります。<br />
データの再キャプチャ<br />
データを再キャプチャするには、DQS ドメインとシステム クロック ドメインの関係を認識する必要が<br />
あります。リファレンス デザインでは、システム クロックの位相をシフトさせたクロック (rclk) を使用<br />
して DQS ドメインからデータを再キャプチャしています。これについては、「読み込み再キャプチャの<br />
タイミング解析」で説明します。<br />
DQS ドメインにあるデータは、LUT RAM で作成した非同期 FIFO に書き込まれます。位相をシフトさ<br />
せたクロック rclk は、データを FIFO に書き込むために使用されます。そして、システム クロック ド<br />
メインに変換するため、データがシステム クロック (CLK) を使用して読み込まれます。再キャプチャ<br />
クロックは内部的なシステム クロックと同期していないので、セットアップ、ホールド、メタステーブ<br />
ル状態の問題をなくすため、クロック ドメイン間で行われるすべての移行は二重に記憶されます。<br />
ローカルなクロック分散を使用するためのピン配置の詳細<br />
Virtex-II デバイスには、左右のエッジに沿ってローカルなクロック分散ネットワークが含まれていま<br />
す。これらのネットワークによって、信号は IOB に入り、固定数の IOB に直接接続されているロー ス<br />
キューの配線リソースに接続されます。<br />
Virtex-II のデータシートに記載されているように、各 I/O タイルにはスイッチ マトリックスを共有す<br />
る 4 つの IOB が含まれています。IOB PAD4 は、I/O タイル内で一番上にある IOB です。DQS がロー<br />
カルなロー スキュー クロック ラインにアクセスできるようにするには、I/O タイルの一番上の IOB で<br />
ある PAD4 に DQS を配置する必要があります。IOB PAD4 を使用できない場合またはボンディングさ<br />
れていない場合は、DQS 信号を配置するためには使用できません。<br />
DQS 信号を PAD4 に配置すると、選択した I/O タイルの上に 5 行、下に 6 行にわたって広がる HEX<br />
ラインであるローカルなクロック ラインにアクセスできるようになります。データ (DQ) パッドは、こ<br />
れらの行で使用できるボンディングされた IOB に配置する必要があります。<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 11<br />
R
I/O のタイミング<br />
解析<br />
R<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
図 7 に、FPGA Editor によるサンプル イメージを示します。これは、5 行上と 6 行下に配置された DQ<br />
パッドを駆動する DQS パッドを示しています。<br />
図 7: 読み込みの再キャプチャ<br />
このセクションでは、リファレンス デザインのタイミング解析について詳しく説明します。解析では、<br />
XC2V3000-5 デバイスとスピード グレードが -5 の Micron <strong>DDR</strong> <strong>SDRAM</strong> デバイスを使用しています。<br />
解析に使用したパラメータを、表 4 と表 5 に示します。Virtex-II の値は、Virtex-II データシートのソー<br />
ス同期に関するセクションに記載されているものを使用しています。<br />
表 4: XC2V3000-5 FF1152 のタイミング パラメータ<br />
x253_07_050902<br />
説明 記号 最小 最大 単位<br />
入力セットアップ タイム、遅延<br />
なし (SSTL2)<br />
入力ホールド タイム、遅延なし<br />
(SSTL2)<br />
グローバル クロックと DCM によ<br />
るオフ<br />
T IOPICK 1.38 ns<br />
T IOICKP –0.81 ns<br />
T ICKOFDCM 2.50 ns<br />
出力スイッチング調整 (SSTL2-I) T OSSTL2_1 0.22 ns<br />
出力スイッチング調整 (SSTL2-II) T OSSTL2_II –0.39 ns<br />
パッケージ スキュー T PKGSKEW 115 ps<br />
クロック ツリー スキュー T CLKSKEW 80 ps<br />
12 www.xilinx.co.jp XAPP253 (v2.0) 2002 年 7 月 16 日
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
表 4: XC2V3000-5 FF1152 のタイミング パラメータ(続き)<br />
デューティ サイクルの精度<br />
(DLL の出力)<br />
説明 記号 最小 最大 単位<br />
読み込みのタイミング解析<br />
CLKOUT_DUTY_CYCLE_DLL ± 150 ps<br />
クロック合成期間のジッター CLKOUT_PER_JITT_0 ± 100 ps<br />
CLKOUT_PER_JITT_90 ± 150 ps<br />
表 5: <strong>DDR</strong> <strong>SDRAM</strong> デバイス (Micron MT46V4M32-5) のタイミング パラメータ<br />
説明 記号 最小 最大 単位<br />
クロック サイクルの時間 tCK 5 10 ns<br />
CK が High になる期間 tCH 0.45 0.55 tCK CK が Low になる期間 t CL 0.45 0.55 t CK<br />
DQS からのデータ入力セットアップ タイム tDS 0.5 ns<br />
DQS からのデータ入力ホールド タイム tDH 0.5 ns<br />
DQS からのデータ出力スキュー tDQSQ 0.5 ns<br />
CK/CK からの DQS のアクセス ウィンドウ tDQSCK –0.75 +0.75<br />
ハーフ クロックの周期 tHP tCH 、tCL ns<br />
DQ-DQS のホールド tQH tHP – 0.45ns ns<br />
データ有効ウィンドウ t QH – t DQSQ ns<br />
読み込みサイクルでは DQS と DQ がクロックのエッジでタイミングを合わせるので、DQS に遅延を追<br />
加して IOB におけるセットアップおよびホールド タイムの必要条件を満たす必要があります。この遅<br />
延は、HEX ラインを通る DQS のトレース遅延と配線遅延の両方を使用して実現します。読み込みのタ<br />
イミング解析では、DQS と DQ におけるトレース遅延の差を調べます。<br />
図 8 に、<strong>DDR</strong> <strong>SDRAM</strong> デバイスのピン、FPGA のピン、IOB フリップフロップにおける DQ と DQS<br />
のタイミングの関係を示します。DQ ラインのトレース遅延を tDQ 、DQS ラインのトレース遅延を tDQS と呼んでいます。<br />
DQS は、FPGA のピンに到着すると、IOB に入り、8 つのデータ (DQ) IOB に送られます。したがっ<br />
て、FPGA 内部での DQS の遅延は、SSTL2 パッドを通る遅延と DQ 負荷への配線遅延から構成されま<br />
す。これを、図 8 では t DQS_INT_DELAY で表しています。<br />
DQS IOB から一番近い DQ IOB までの内部遅延は、tDQS_INT_DELAY (MIN) です。一番遠い DQ IOB ま<br />
での遅延は、tDQS_INT_DELAY (MAX) です。表 6 に、内部配線における DQS の遅延の例を示します。最<br />
小と最大の DQS の配線遅延の差を、tDQS_INT_SKEW と呼びます。データ (DQ) 信号は IOB でラッチさ<br />
れるので、配線遅延はありません。<br />
ワースト ケースのセットアップは、最大のデータ (DQ) 遅延と最小のクロック (DQS) 遅延で発生しま<br />
す。同様に、ワースト ケースのホールドは、最大のクロック (DQS) 遅延と最小のデータ (DQ) 遅延で<br />
発生します。図 8 に示すように、セットアップでは tSU と TIOPICK の差に余裕があります。<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 13<br />
R
At Memory<br />
At pins<br />
of FPGA<br />
At IOB<br />
flip-flop<br />
of FPGA<br />
R<br />
DQS<br />
DQ<br />
DQS<br />
DQ<br />
DQS<br />
DQ<br />
t DQSQ<br />
t DQ<br />
t DQ_INT_DELAY<br />
DQ0<br />
tDATA_VALID tQH t DQS<br />
表 6: DQ と DQS の内部配線遅延<br />
t DQS_INT_DELAY<br />
T IOPICK<br />
図 8: DQS 信号と DQ 信号<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
同様に、ホールドでは tHO と TIOICKP の差に余裕があります。<br />
tSU = ( tDQS + tDQSINTDELAYMIN) – ( tDQSQ + t<br />
DQ<br />
+ t<br />
DQINTDELAY<br />
) > T<br />
IOPICK<br />
x253_08_070302<br />
tHO = tDATAVALID – ( tDQS – tDQSQ – tDQ) + tDQINTDELAY – tDQSINTDELAYMAX > TIOICKP ただし<br />
DQS と DQ のトレースの間で必要となる遅延の量は、t DQS - t DQ についての 2 つの式を解くことによっ<br />
て得られます。ただし、t DQS は DQS のトレース遅延、t DQ は DQ のトレース遅延です。<br />
14 www.xilinx.co.jp XAPP253 (v2.0) 2002 年 7 月 16 日<br />
t SU<br />
DQ0<br />
t DQS_INT_SKEW<br />
DQ0<br />
T IOICKP<br />
t HO<br />
t DQ_INT_DELAY<br />
説明 記号 最小 最大 単位<br />
入力パッケージ遅延 tDQ_INT_DELAY 0.00 0.00 ns<br />
入力クロック遅延 tIOPI_SSTL2 1.18 ns<br />
DQS の内部配線遅延 t [1]<br />
DQS_ROUTE_DELAY 363 376 ps<br />
tIOPI_SSTL2 + tDQS_ROUTE_DELAY t [1]<br />
DQS_INT_DELAY 1.543 1.556 ns<br />
メモ :<br />
1. これらの値はインプリメンテーション結果に基づくので、実際のトレース値に置き換える必要があ<br />
ります。<br />
tDATAVALID= tQH – tDQSQ
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
TIOPICK - tDQS_INT_DELAYMIN + (tDQSQ + tDQINTDELAY) < tDQS - tDQ < - TIOICKP + tQH + tDQINTDELAY - tDQSINTDELAYMAX Virtex-II データシートのタイミング値を使用すると、次のようになります。<br />
1.38 - (1.543) + (0.5 + 0.0) < t DQS - t DQ<br />
< -(-0.81) + (0.45 X 5 - 0.5) + 0.0 - 1.556<br />
0.337 < tDQS - tDQ < 1.004ns → 式 1<br />
最小のタイミングはまだわからないので、この解析では 0.25 という値を仮定します。式 2<br />
(TIOPICK X PF) - (tDQSINTDELAYMIN X PF) + tDQSQ + (tDQINTDELAY X PF)<br />
< tDQS - tDQ < (-TIOICKP X PF) + tQH + (tDQINTDELAY X PF) - (tDQSINTDELAYMAX X PF)<br />
1.38 X 0.25 - (1.543 X 0.25) + (0.5 + (0.00 X 0.25)) < t DQS - t DQ<br />
< -(-0.81) X 0.25 + ((0.45 X 5) - 0.5) + ((0.0 X 0.25) - (0.25 X 1.556))<br />
0.45925 < tDQS - tDQ < 1.5635 → 式 2<br />
式 1 と 2 を組み合わせると、tDQS - tDQ の範囲は次のようになります。<br />
0.45925 < tDQS - tDQ < 1.004<br />
tDQS - tDQ の間のトレース遅延の差を代表する値として、中央の 0.75ns を選択します。<br />
FPGA でセットアップおよびホールドの必要条件を満たし、FPGA 内部のパッケージ スキューに対処す<br />
るには、十分なデータ ウィンドウが必要です。<br />
<strong>DDR</strong> レジスタ、パッケージ スキュー、DQS の内部スキュー (DQS_INT_SKEW) におけるセットアッ<br />
プとホールドの必要条件は、FPGA 内部のデータ マージンに影響を与えます。したがって、FPGA で可<br />
能なマージン = メモリにおけるデータ有効ウィンドウ - ((FPGA におけるセットアップ + ホールド) +<br />
ワースト ケースのパッケージ スキュー + DQS_INT_SKEW) となります。<br />
メモリを指定してからのメモリにおけるデータ有効ウィンドウは、(tQH - tDQSQ) に等しくなります。<br />
tQH = min (CH,CL) - 0.5ns<br />
tQH = (0.45 X 5) - 0.5 = 2.25 - 0.5ns = 1.75ns<br />
メモリにおけるデータ有効ウィンドウ = 1.75ns - 0.5ns = 1.25ns<br />
内部 DQS スキューは最大 100ps とします。<br />
FPGA で可能なマージン = 1.25 - (1.38 - 0.81 + 0.115 + 0.100) = 0.465ns<br />
書き込みのタイミング解析<br />
DQS 信号のトレース遅延には 0.75ns 程度のスキューがあるので、<strong>コントローラ</strong>は書き込みサイクルで<br />
メモリにおけるセットアップとホールドの必要条件 (図 9 参照) が満たされることを保証する必要があ<br />
ります。さらに、書き込み動作で許されるデータ マージンを計算する必要もあります。<br />
スピード グレードが -5 の XC2V3000 FF1152 の場合、1 データ期間 (tCK / 2) において FPGA のピンで<br />
有効なデータ ウィンドウは次のように計算されます。<br />
DataValidWindow =<br />
tCK --------- – ( T<br />
2 PKGSKEW + TCLKTREESKEW + TDUTYCYCLEDISTORTION + TJITTER) =<br />
2.5 – ( 0.115 + 0.1 + 0.14 + 0.200)<br />
= 1.945ns<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 15<br />
R
R<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
図 9 に示すように、t DQS_SKEW は、データ有効ウィンドウの中央とデータ ストローブ (DQS) で追加さ<br />
れるトレース遅延の間のスキューです。データ有効ウィンドウの中央は、クロック周期の 1/4 です。読<br />
み込みのタイミングから、t DQS と t DQ の間のトレース差として 0.75ns を選択します。<br />
t DQSSKEW<br />
=<br />
tCK -------- – ( t DQS – tDQ) = ( 1.25 – 0.75)ns=<br />
0.5ns<br />
4<br />
メモリにおけるデータ有効ウィンドウ = 1.845 - tDQS_skew = 1.945 - 0.5 = 1.445ns<br />
つまり、メモリにおけるセットアップとホールドの必要条件を満たすには 1ns が必要となります。した<br />
がって、次のようになります。<br />
メモリで可能なマージン = 1.445 - 1.00 = 0.445ns.<br />
Output from<br />
FPGA<br />
At Memory<br />
CLK<br />
CMD<br />
DQS<br />
DQ<br />
CLK<br />
DQS<br />
DQ<br />
WRITE<br />
t CLK<br />
図 9: メモリのセットアップとホールドの必要条件を表すタイミング図<br />
データ書き込みマージンの改善<br />
x253_03_040802<br />
書き込みサイクルでデータについて位相のシフトを固定したクロックを使用すると、データ マージンの<br />
改善に役立ちます。DQS スキューを小さくすると、DQS のタイミングがデータ ウィンドウの中央に対<br />
して合わせられるので、マージンが大きくなります。必要な位相シフトは、DQS スキューを補正するよ<br />
うに計算します。<br />
書き込みサイクルで十分なマージンを得るには、データについて負の方向に位相シフトしたクロックを<br />
使用して、データと DQS のタイミングを合わせます。<br />
このような場合について、可能なデータ マージンを計算します。位相シフトによって TDQS_SKEW を補<br />
正するので、メモリにおけるデータ有効ウィンドウは次のように計算されます。<br />
メモリにおけるデータ有効ウィンドウ= 1.945ns - (tDQS_SKEW + CLKIN_CLKFB_PHASE)<br />
= 1.945ns - (0ns + 0.100ns)<br />
= 1.845ns<br />
この値から、メモリにおけるセットアップとホールドの必要条件である 1ns を引きます。<br />
メモリで可能なマージン = 1.845ns - 1.00ns = 0.845ns<br />
書き込みサイクルで満たさなければならないタイミングの必要条件には、CLK と DQS の関係に関する<br />
ものもあります。この必要条件は、DQS が Low から High になるセットアップ タイム (tDQSS) です。<br />
これは、CLK の立ち上がりエッジから DQS の立ち上がりエッジまでの時間です。<strong>DDR</strong> <strong>SDRAM</strong> のパ<br />
ラメータは、表 5 に示されています。DQS と CLK はどちらも同じクロックを使用して <strong>DDR</strong> フリップ<br />
16 www.xilinx.co.jp XAPP253 (v2.0) 2002 年 7 月 16 日<br />
T 1<br />
IDLE<br />
T 2<br />
DQ0 DQ1<br />
t DQS<br />
t DQS_SKEW<br />
t DQ<br />
DQ0<br />
TCK<br />
4<br />
TCK<br />
4<br />
DQ1
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
フロップから生成されるので、本来のセットアップ タイムは 1 クロック サイクル (tCK) です。しかし、<br />
CLK と DQS のトレース長や出力規格による調整によって、この値が変化します。<br />
この関係は、次の式のようになります。<br />
t DQSS(min) < t CK + t DQS + T OSSTL2(II) - t CLK - T OSSTL2(1) < t DQSS (MAX)<br />
表 4 と表 5 の値を使用して式を解くと、DQS と CLK の間で許容されるトレース差は次のようになりま<br />
す。<br />
-0.64ns < tDQS - tCLK < 1.86ns<br />
読み込み再キャプチャのタイミング解析<br />
メモリから読み込むときは、DQS 信号を使用して IOB フリップフロップがデータをキャプチャします。<br />
DQS は自走式のクロックではなくストローブ信号なので、連続するクロック エッジによって IOB から<br />
2 ステージ目のデータ パスにデータが移動するという保証はありません。このため、DQS から別のク<br />
ロック ドメインにデータを再キャプチャする必要があります。<br />
このリファレンス デザインでは、ユーザー クロックの位相をシフトさせたクロックを使用してデータ<br />
の再キャプチャを行います。これを使用するには、必要な位相シフトを計算する必要があります。この<br />
概要を図 10 に示します。<strong>DDR</strong> <strong>SDRAM</strong> のクロックは、内部のユーザー クロックを IOB <strong>DDR</strong> フリップ<br />
フロップを通して転送することによって生成されます。このクロックは、FPGA から <strong>DDR</strong> <strong>SDRAM</strong> に<br />
送られます (tCLK )。<br />
<strong>DDR</strong> <strong>SDRAM</strong> の仕様によると、メモリはクロックを受信してから±tDQSCK 以内に DQS 信号を出力し<br />
ます。DQS 信号は、<strong>DDR</strong> <strong>SDRAM</strong> から FPGA に送られ (tDQS )、IOB フリップフロップに転送されま<br />
す (tDQS_INT_DELAY)。 DCM の位相シフト機能を使用して、FPGA 内で再キャプチャ クロックと DQS 信号のタイミングを合<br />
わせます。DQS ドメインから再キャプチャ クロック ドメインにデータを移行するので、DQS が到着し<br />
てから可能な限り早く再キャプチャ クロックを配置します。このようにすると、クロック ドメインの<br />
移行に使用できる時間が最大になります。次の式は、再キャプチャ クロックの位相シフトに関するもの<br />
です。<br />
目的の位相シフト = (T ICKOFDCM X PF) + tΧΛΚ(ΜΙΝ) + t DQS(MIN) + t DQSINTDELAY(MIN)<br />
再キャプチャ クロックと DQS のタイミングの関係を制約する必要があります。ベスト ケースの状態で<br />
は、DQS ドメインから再キャプチャ クロック ドメインへの移行が 1 クロック周期で行われます。ワー<br />
スト ケースの状態では、DQS ドメインから再キャプチャ クロック ドメインへの移行にかかる時間が、<br />
1 クロック周期から最大と最小のパス タイミングの差を引いた値になります。0.25 というファクタを設<br />
定すると、次の式が得られます。<br />
DQS から RCLK = t CK - Phase_shift (MAX) - Phase_shift (MIN) 、ただし<br />
Phase Shift (MAX) = T ICKOFDCM + t CLK(MAX) + t DQSCK(MAX) + t DQS(MAX) + t DQSINTDELAY(MAX)<br />
および Phase Shift (MIN) = 目的の位相シフト<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 17<br />
R
At FPGA<br />
<strong>DDR</strong><strong>SDRAM</strong><br />
At FPGA<br />
ボードに関する<br />
考慮事項<br />
R<br />
user_clk<br />
ddr_clk<br />
ddr_clk<br />
DQS<br />
DQS<br />
DQS at IOB<br />
flip-flop<br />
T1<br />
図 10: クロックから DQS 出力までの遅延時間<br />
制御信号のタイミング解析<br />
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
すべてのアドレス信号と制御信号は、CLK の立ち下がりエッジで<strong>コントローラ</strong>が生成します。このた<br />
め、メモリではセットアップとホールドのサイクルが半分になります。しかし、これらの値は、コマン<br />
ドおよびアドレス信号とクロックのトレース遅延 (t CMD ) によって相殺されます。コマンドとアドレス<br />
のセットアップおよびホールド タイムは、表に記載されています。<br />
t SU = t CK / 2 + t CLK = t CMD > t IS<br />
t HO = t CK / 2 + t CMD - t CLK > t IH<br />
TICKOFDCM<br />
tCLK<br />
tDQSCK<br />
これらの式を (t CLK - t CMD) について解くと、次の式が得られます。<br />
t IS - t CK / 2 < t CLK - t CMD < t CK / 2 - t IH - 1.5ns < t CLK - t CMD < 1.5 ns<br />
ボードのレイアウトを完成させる前に、次のようなシステム デザイン解析を行う必要があります。<br />
1. IBIS シミュレーションまたは H-SPICE シミュレーションを行って、FPGA とメモリ デバイスの両<br />
方で信号の完全性とスイッチング特性を評価します。<br />
2. シミュレーションから得られたデューティ サイクルを使用して入念にタイミング解析を行います。<br />
3. DQS と DQ の間で必要となるトレース差を入念に解析します。<br />
4. 「ローカルなクロック分散を使用するためのピン配置の詳細」で説明した規則に従って、FPGA で<br />
DQS ピンと DQ ピンを配置します。<br />
5. ピンを配置するときは、SSO のガイドラインに従います。<br />
x266_10_051002<br />
6. メモリ ベンダーが指定するパワーアップ シーケンスに従います。リファレンス デザインのター<br />
ゲットとなるメモリ デバイスでは、V DD と V DDQ に同時に電力を与えてから V REF に電力を与え<br />
る必要があります。<br />
7. パワーアップ時とコンフィギュレーション時は、<strong>DDR</strong>_CKE を LVCMOS の Low レベルに保ち<br />
ます。<br />
18 www.xilinx.co.jp XAPP253 (v2.0) 2002 年 7 月 16 日<br />
tDQS<br />
T2<br />
tDQSCK<br />
tDQS_INT_DELAY
<strong>合成可能</strong> <strong>400Mb</strong>/s <strong>DDR</strong> <strong>SDRAM</strong> <strong>コントローラ</strong><br />
おわりに このリファレンス デザインは、Virtex-II シリーズの FPGA と <strong>DDR</strong> <strong>SDRAM</strong> のインターフェイスをと<br />
る方法を示しています。ザイリンクス社の FPGA には DCM と柔軟な SelectI/O 機能があるので、特別<br />
なクロック ジェネレータ、I/O ドライバ、外部終端処理をボードに追加する必要がありません。<br />
Virtex-II の <strong>DDR</strong> レジスタは、<strong>DDR</strong> <strong>SDRAM</strong> とのインターフェイスに最適です。VHDL によるリファ<br />
レンス デザインは、32 ビット バージョンの<strong>コントローラ</strong>です。リファレンス デザインは、<br />
ftp://ftp.xilinx.com/pub/applications/xapp/xapp253.zip にあるザイリンクス社の FTP サイトからダウン<br />
ロードできます。<br />
改訂履歴 次の表に、このドキュメントの改訂履歴を示します。<br />
日付 バージョン 改訂内容<br />
01/12/01 1.0 Jennifer Tran および Ratima Kataria による初期リリース<br />
07/16/02 2.0 <strong>400Mb</strong>/s のデータ転送を実現するようにアプリケーション ノートとリ<br />
ファレンス デザインをアップデート<br />
XAPP253 (v2.0) 2002 年 7 月 16 日 www.xilinx.co.jp 19<br />
R