...

合成可能 1.6GB/s DDR SDRAM コントローラ

by user

on
Category: Documents
10

views

Report

Comments

Transcript

合成可能 1.6GB/s DDR SDRAM コントローラ
アプリケーション ノート : Virtex シリーズおよび Spartan-II ファミリ
R
合成可能 1.6GB/s DDR SDRAM コントローラ
著者 : Jennifer Tran
XAPP200(v2.3)2000 年 3 月 21 日
概要
Virtex™ アーキテクチャと Spartan™-II ファミリの DLL および SelectI/O™ 機能は、ダブル
データ レート(DDR)SDRAM のコントローラをインプリメントするのに最適です。このア
プリケーション ノートでは、64 ビット DDR SDRAM のコントローラの参考デザインについ
て説明します。100MHz のクロック レートで両方のクロック エッジにおいて 64 ビットのデー
タを変更すると、1.6GB/s というピーク バンド幅が得られます。参考デザインは合成可能で、
自動配置配線ツールを使用して 100MHz というパフォーマンスを実現します。
はじめに
マイクロプロセッサが年々高速になるにつれて、メモリ アーキテクチャもシステム全体のパ
フォーマンスが向上できるように進歩する必要があります。DDR SDRAM と RDRAM(Direct
RAMBUS DRAM)は、このような次世代 SDRAM の有力な候補です。
DDR SDRAM のピーク バンド幅は、64 ビットのデータ ラインと 100MHz のクロック周波数
で 1.6GB/s です。RDRAM も 1.6GB/s のピーク バンド幅を実現できますが、16 ビット ライ
ンと 400MHz のクロック周波数という大幅な変更が必要です。これに対して、DDR SDRAM
は、既存の SDRAM アーキテクチャを自然に発展させたものとなっています。
RDRAM に対する DDR SDRAM の主な利点は、PC-100 用に開発された基本的なシステム基
盤を使用していることです。このため、異なるパケット プロトコルが原因で必要となる多数
のデザイン変更を行う必要がありません。DDR SDRAM は、1998 年 2 月に JEDEC(Joint
Electron Device Engineering Council)規格として認可され、現在はほとんどの主要な SDRAM
ベンダーがサポートしています。
このアプリケーション ノートでは、Virtex シリーズのデバイスでインプリメントした DDR
SDRAM コントローラのデザインについて説明します。まず DDR SDRAM の基礎を簡単に説
明した後、SDRAM コントローラについて詳しく説明し、最後に全体をまとめます。
DDR SDRAM の
概要
DDR SDRAM は、従来の同期 DRAM を発展させたものです。各クロック サイクルの両エッ
ジでデータ転送をサポートするので、メモリ デバイスのデータ スループットが事実上 2 倍に
なります。
DDR SDRAM は、CLK および CLK という差動クロックによって動作します(CLK が High、
CLK が Low になる瞬間を CLK のポジティブ エッジと考えます)。コマンド(アドレスおよ
び制御信号)は、CLK のポジティブ エッジで記憶されます。入力データは DQS(データ ス
トローブ)の両エッジで記憶され、出力データは CLK の両エッジと DQS の両エッジで参照
されます。
双方向データ ストローブは、読み込み時は DDR SDRAM、書き込み時はメモリ コントロー
ラによって伝送されます。DQS は、データの読み込み時はエッジ、書き込み時は中央を基準
に合わせられます。
DDR SDRAM に対する読み込みおよび書き込みアクセスは、バースト指向です。つまり、ア
クセスは選択したロケーションで始まり、プログラムしたロケーションに対してプログラム
した順番で行われます。アクセスが始まるときは ACTIVE コマンドが記憶され、その後に
READ または WRITE コマンドが続きます。ACTIVE コマンドの実行時に記憶されるアドレス
ビットは、アクセスするバンクおよび行の選択に使用されます。READ または WRITE コマン
ドの実行時に記憶されるアドレス ビットは、バースト アクセスを開始する列のロケーション
とバンクの選択に使用されます。
© 2000 Xilinx, Inc. All rights reserved. Xilinx のすべての商標、登録商標、特許、免責事項は、http://support.xilinx.co.jp/legal.htm に記載されています。
他のすべての商標および登録商標は、それぞれの所有者に属します。
XAPP200(v2.3)2000 年 3 月 21 日
www.xilinx.co.jp
1
合成可能 1.6GB/s DDR SDRAM コントローラ
R
DDR SDRAM は、バースト レングスが 2、4、8 の各ロケーションでのプログラム可能な読み
込みと書き込みをサポートします。AUTO PRECHARGE ファンクションを有効にすると、
バースト アクセスが終わった後でセルフ タイミングの行プレチャージが行われます。
標準的な SDRAM と同じように、DDR SDRAM ではパイプライン化されたマルチバンク アー
キテクチャによってコンカレント動作が可能なので、行プレチャージとアクティブ化時間を
並行処理することによって、高いバンド幅を効果的に提供できます。
クロック信号を含むすべての入力は SSTL_2 です。出力もすべて、SSTL_2、Class II です。
バースト読み込み動作
DDR SDRAM のバースト読み込み動作は、現在の SDRAM と同じ方法で行われます。バース
ト読み込みコマンドを実行するには、バンクをアクティブにしてから TRCD 後にクロック
(CLK)の立ち上がりエッジで RAS と WE が High の状態で CS と CAS を Low にアサートし
ます。バーストの開始アドレスは、アドレス入力によって決定されます。バーストのタイプ
(シーケンシャルまたはインターリーブ)とバースト レングス(2、4、8)は、モード レジス
タで設定します。最初の出力データは読み込みコマンドから CAS のレィテンシの後に使用で
きるようになり、以後のデータはバースト レングスに達するまで DQS の立ち下がりエッジと
立ち上がりエッジで与えられます。
0
1
2
3
4
5
6
7
8
CLK
CLK
コマンド
CAS
レィテンシ 2
NOP
READA
NOP
TRPRE
DQS
NOP
NOP
NOP
NOP
TRPST
DOUT
0
DQ 's
CAS
レィテンシ 2.5
NOP
NOP
DOUT
1
DOUT
2
DOUT
3
DOUT
0
DOUT
1
DOUT
2
DQS
DQ 's
DOUT
3
X200_01_091599
図 1: バースト読み込み動作のタイミング
バースト書き込み動作
バースト書き込みコマンドを実行するには、クロック(CLK)の立ち上がりエッジで RAS が
High の状態で CS、CAS、WE を Low にします。開始列アドレスは、アドレス入力によって
決定されます。バースト書き込みサイクルで必要な DQS に関しては、書き込みのレィテンシ
はありません。バースト書き込みサイクルの初めのデータは、データ ストローブ エッジの
TDS(データイン セットアップ タイム)前に DQ ピンに与える必要があります。データ スト
ローブ信号は、WRITE コマンドによる CLK の立ち上がりエッジから TDQSS 後にイネーブル
になります。残りのデータ入力は、バースト レングスに達するまでデータ ストローブの立ち
下がりエッジと立ち上がりエッジで与える必要があります。バーストが終了すると、DQ ピン
にデータを与えても無視されます。
0
1
2
3
4
5
6
7
8
CLK
CLK
コマンド
DQS
DQ 's
NOP
WRITE
NOP
NOP
NOP
NOP
NOP
NOP
NOP
TWPRES
TDQSS
DIN 0
DIN 1
DIN 2
DIN 3
X200_02_011000
図 2: バースト書き込み動作のタイミング
2
www.xilinx.co.jp
XAPP200(v2.3)2000 年 3 月 21 日
合成可能 1.6GB/s DDR SDRAM コントローラ
DDR SDRAM
コントローラ
R
DDR SDRAM コントローラのデザインには、次のような特徴があります。
•
•
•
•
プログラム可能なバースト レングスは 2、4、8
プログラム可能な CAS レィテンシは 1.5、2、2.5、3
バースト レングスは読み込みと書き込みの両方に適用される
LOAD_MR、AUTO_REFRESH、PRECHARGE、ACT ROW、READA、WRITEA、
BURST_STOP、NOP の各 DDR SDRAM コマンドをサポート
•
ダブル データ レート(ピンあたり 200M ビット/s)で 100MHz の DDR SDRAM とのイ
ンターフェイス
•
•
DDR からのデータ読み込みには DQS ではなく CLK を使用
•
ユーザー、FPGA、DDR SDRAM の各クロックの間でゼロ クロック スキューを提供する
ためにクロック DLL を使用
DDR SDRAM とのインターフェイスには SSTL2 I/O を使用
図 3 に、参考デザインの最上位レベルにおける各ブロックを示します。user_int モジュールに
は、FPGA に入ってくるシステム信号を保持する I/O レジスタのみが含まれています。
ddr_ctrl モジュールには、DDR SDRAM とインターフェイスを取る I/O などの DDR SDRAM
コントローラが含まれています。
Sys_addr
u_addr
ddr_ad
Sys_data_i
u_data_i
ddr_ba
Sys_cmd
u_cmd
ddr_dq
Sys_reset_n
u_reset_n
ddr_dqs
Sys_clk
u_clk
Sys_clk_fb
user_int
ddr_ctrl
u_clk_fb
ddr_dm
DDR SDRAM
ddr_rasb
fpga_clk
ddr_casb
Sys_data_out
u_data_o
Sys_data_valid
u_data_valid
ddr_clk
Sys_ref_ack
u_ref_ack
ddr_clkb
ddr_web
FPGA
x200_03_010600
図 3: 最上位レベルのブロック ダイアグラム
XAPP200(v2.3)2000 年 3 月 21 日
www.xilinx.co.jp
3
合成可能 1.6GB/s DDR SDRAM コントローラ
R
ddr_clk
ddr_clkb
u_clk
Clk_dlls
fpga_clk
Brst_cntr
u_clk_fb
fpga_clk2x
コントローラ
Cslt_cntr
Rcd_cntr
u_cmd
ddr_ad
u_addr
Addr_latch
ddr_ba
u_data_i
u_data_o
u_data_valid
ddr_dq
Data_path
ddr_dqs
図 4: ddr_ctrl のブロック ダイアグラム
x200_04_092199
表 1: ddr_ctrl のピンの説明
ピン名
4
幅
説明
In
128
書き込みデータ
u_addr
In
22
アドレス
u_cmd
In
7
コントローラのコマンド
u_reset_n
In
1
リセット、アクティブ Low
In
1
入力クロック
In
1
フィードバック クロック、
ddr_clk への接続が必要
u_data_o
Out
128
u_data_valid
Out
1
u_data_o のデータが有効な
場合は u_data_valid = 1
u_ref_ack
Out
1
肯定応答をリフレッシュ
ddr_ad
Out
12
アドレス
ddr_dq
In/Out
64
データ
ddr_dqs
In/Out
2
データ ストローブ
ddr_rasb
Out
1
コマンド
ddr_casb
Out
1
コマンド
ddr_web
Out
1
コマンド
ddr_ba
Out
2
バンク アドレス
ddr_clk
Out
1
クロック
ddr_clkb
Out
1
反転されたクロック
ddr_csb
Out
1
チップ セレクト
ddr_cke
Out
1
クロック イネーブル
ddr_dm
Out
2
データ マスク
u_clk
ユーザー ロジックへの
u_clk_fb
インターフェイス
DDR SDRAM へのイ
ンターフェイス
ピン方向
u_data_i
www.xilinx.co.jp
読み込みデータ
XAPP200(v2.3)2000 年 3 月 21 日
合成可能 1.6GB/s DDR SDRAM コントローラ
コントローラの
動作
R
この項では、コントローラを通して各種の DDR SDRAM コマンドを実行する方法について
説明します。
NOP
"u_cmd = 0000001" に設定
拡張モード レジスタ セット(EMRS)
"u_cmd = 0000010" に設定
"u_addr[20] = 1" に設定(BA0 = 1)
モード レジスタ セット(MRS)
"u_cmd = 0000010" に設定
"u_addr[2:0] = バースト レングス " に設定
"u_addr[3] = バースト タイプ " に設定
"u_addr[6:4] = CAS レィテンシ " に設定
"u_addr[7] = TM" に設定(TM が 0 の場合はノーマル モード、1 の場合はテスト モード)
"u_addr[8] = DLL" に設定
(DLL が 0 の場合は DLL リセットなし、
1 の場合は DLL リセットあり)
"u_addr[20] = 0" に設定(BA0 = 0)
自動リフレッシュ
"u_cmd = 01000000" に設定
リフレッシュ カウンタは、参考デザインに含まれていません。リフレッシュ カウンタを使用
する場合は、DDR SDRAM に対して定期的にリフレッシュ コマンドを実行するようにしま
す。リフレッシュの間隔は、TREF/(TCLK ×行の数)にします。
全バンクのプレチャージ
"u_cmd = 0010000" に設定
ddr_cntrl が自動的に A10 を 1 に設定
バースト停止
"u_cmd = 1000000" に設定
自動プレチャージで書き込み
"u_cmd = 0001000" に設定
"u_addr = {ba, row_addr, col_addr}" に設定
データの先頭 128 ビットを u_data_i に書き込む
以後のデータはバースト終了までクロック サイクルごとに u_data_i に書き込む
自動プレチャージで読み込む
"u_cmd = 0000100" に設定
"u_addr = {ba, row_addr, col_addr}" に設定
u_data_o は(TRCD + CAS レィテンシ + 6)クロック サイクル後に使用できるようになる
u_data_o に有効な読み込みデータが含まれている場合 u_data_valid が High になる
クロック DLL
図 5 の上部には、FPGA と DDR SDRAM のクロックのスキューを短縮するために使用する 2
つの DLL があります。
1 番目の DLL(DLL_EXT)は、ddr_clk および ddr_clkb の各信号を DDR SDRAM に提供し、
ddr_clk からのクロック フィードバックを読み込みます。
XAPP200(v2.3)2000 年 3 月 21 日
www.xilinx.co.jp
5
合成可能 1.6GB/s DDR SDRAM コントローラ
R
DDR SDRAM は、差動クロック(CLK と CLKB)で動作します。FPGA 内部とボード上の両
方で ddr_clk と ddr_clkb の遅延を一致させることが重要です。参考デザインでは、ddr_clk と
ddr_clkb は V300BG432 の C30 および E28 ピンに割り当てられており、DLL からこの 2 つの
ピンへの配線は同じになっています。
2 番目の DLL(DLL_INT)は、FPGA 内部に fpga_clk と fpga_clk2x を提供します。フィード
バックは、fpga_clk によって与えられます。fpga_clk と fpga_clk2x は、どちらも BUFG に
よって示されるグローバル クロック ネットワークを使用して FPGA 全体にスキューの少な
いクロックを提供します。
DDR SDRAM のクロックは OBUF を通るので、1 つの DLL では FPGA と DDR SDRAM の両
方にクロックを提供できません。
クロック入力が同じでフィードバック信号が異なる 2 つの DLL を使用すると、
入力クロック、
FPGA のクロック、DDR SDRAM のクロックの間でゼロ遅延を実現できます。
CLK_DLL
sys_clk
sys_clk_fb
IPAD
IPAD
IBUFG_SSTL2
IBUFG_SSTL2
CLKIN
CLK0
CLKFB
CLK90
OPAD
ddr_clk
OBUF_SSTL2_I
CLK180
CLK270
OPAD
CLK2X
CLKDV
reset_in
RST
ddr_clkb
OBUF_SSTL2_I
LOCKED
DLL_EXT
CLK_DLL
CLKIN
CLK0
CLKFB
CLK90
fpga_clk
BUFG
CLK180
CLK270
fpga_clk2x
CLK2X
CLKDV
RST
BUFG
LOCKED
DLL_INT
FD
D
Q
lac_clk
Q
lac_clk90
FD
D
CLK_DLLS
x200_05_122999
図 5: 参考デザインの DLL
図 5 に示す CLK_DLL の下部では、論理アクセス可能なクロックが生成されます。Virtex お
よび Spartan-II デバイスでは、大きなファンアウトとスキューの少ないクロック信号にクロッ
ク ネットワークが使用されます。このため、BUFG の出力はクロック入力のみを駆動します。
このデザインでは、データ バスの上位ビットと下位ビットを選択するためにクロック信号を
使用しています。この信号は、CLB の非クロック入力に接続する必要があります。論理アク
セス可能なクロック(LAC)は、入力クロック信号を反転して clk2x でクロックを与えるこ
とによって生成できます。LAC を複製するには、反転した LAC を読み込むフリップフロッ
プを追加します。LAC はグローバル クロック ツリーを使用しないので、負荷が多い場合は
6
www.xilinx.co.jp
XAPP200(v2.3)2000 年 3 月 21 日
合成可能 1.6GB/s DDR SDRAM コントローラ
R
ネット遅延が大きくなる可能性があります。論理アクセス可能なクロックの負荷を最小にす
るには、図 6 に示すように、各負荷に対して LAC を複製します。
lac_clk1
lac_clk2
FD
lac_clk
D
FD
Q
D
Q
D
Q
lac_clk3
clk2x
x200_06_011000
図 6: 論理アクセス可能なクロック(LAC)の複製
アドレス Mux
addr_latch モジュールは、制御信号をコントローラから受け取って、DDR SDRAM の行、列、
バンクのアドレスを生成します。また、バースト カウンタ(brst_cntr)と CAS レィテンシ カ
ウンタ(cslt_cntr)について burst_max と cas_lat_max の値も生成します。コントローラは、
DDR SDRAM のホールド タイムを保証するため、クロックのネガティブ エッジでアドレス
とコントロールのラインを生成します。I/O タイミングの詳細については、13 ページの「ボー
ド レイアウトの解析」を参照してください。
データ パス
図 7 に、読み込みと書き込みの基本的なデータ フローを示します。
書き込みサイクルの場合、128 ビットの u_data_i は clk2x で 64 ビットのデータ バスに多重化
されます。このとき、上位ビットと下位ビットは lac_clk(論理アクセス可能なクロック)で
選択します。I/O 遅延を最小にするため、データは SSTL2 IO バッファを通してチップ外に出
る前に IOB でもう一度記憶されます。
ddr_dq のトライステート化された信号は ddr_write_en
から生成され、IOB にマップされます。
ddr_dqs 信号は、clk2x のネガティブ エッジでクロックが供給されるトグル フリップフロッ
プによって生成されます。これによって、ddr_dqs のエッジが ddr_dq の中央になることが保
証されます。ddr_dqs のトライステート化された信号は、clk2x のネガティブ エッジからも生
成されます。
読み込みサイクルの場合、
64 ビットの ddr_dq は IOB の入力フリップフロップで clk2x によっ
てクロックが供給されます。そして、クロックの ポジティブ エッジで記憶される上位ビット
とクロックのネガティブ エッジで記憶される下位ビットを組み合わせて 128 ビットのデータ
になります。
DDR SDRAM に対するすべての入出力は、IOB に記憶されます。これによって、clock-to-out
遅延が最小になります。
XAPP200(v2.3)2000 年 3 月 21 日
www.xilinx.co.jp
7
合成可能 1.6GB/s DDR SDRAM コントローラ
R
FD_1
ddr_dqs_t
FD_1 ddr_dqs_t_reg
FD_1_1
ddr_dqs_toggle
FD_1
ddr_dqs
fpga_clk2x
FD_1
FD
FD64
ddr_dq_t_wire
ddr_write_en
M2_1
write_data[127:64]
ddr_dq_o_tmp
FD 128
FD64
ddr_dq
[63:0]
FD64
u_data_i[127:0]
fpga_clk
write_data[63:0]
DDR SDRAM
lac_clk
fpga_clk2x
FD64
u_data_o_temp[127:64]
FD 128_1
read_data[63:0]
FD 128
FD64E
u_data_o[127:0]
u_data_o_temp[63:0]
fpga_clk
FD64_1
ddr_read_en
FPGA
DATA_PATH
x200_07_010600
図 7: データ パス
8
www.xilinx.co.jp
XAPP200(v2.3)2000 年 3 月 21 日
合成可能 1.6GB/s DDR SDRAM コントローラ
ステート マシンの概要を、図 8 に示します。点線は、自動シーケンスを示します。コント
ローラの初期ステートは、IDLE です。次に、要求されたコマンドに応じて、ステートが
PRECHARGE、LOAD_MR、REFRESH、ACT のいずれかになります。ステート マシン ダ
イアグラムの点線は、自動シーケンスを示しています。読み込みと書き込みの場合、コント
ローラはまず ACT ステートになります(行をアクティブにします)。
IDLE
arge
prech
PRECHARGE
lo
ad
_m
h
es
r
fr
re
read_or_write
LOAD_MR
REFRESH
rcd_end
burst_end || burst_stop
ACT
rcd_end
& read
rcd_end
& read
READ
cas_lat_end
rcd_end
& write
rcd_end
& write
WRITE
cas_lat_end
READ_WAIT
READ_DATA
rcd_end
ACT_WAIT
burst_end || burst_stop
コントローラの
ステート マシン
R
cas_lat_end
WRITE_DATA
cas_lat_end
burst_end
burst_end
x200_08_092199
図 8: ステート マシン ダイアグラム
書き込みの場合、コントローラは ACT から WRITE になり、その後 WRITE_DATA ステート
になります。その後、BURST_STOP コマンドを実行するか、バーストで指定された数のデー
タを書き込むまで、コントローラは WRITE_DATA のままの状態になります。このデザイン
では、ras-to-cas 遅延は 3 クロック サイクルです。ras-to-cas 遅延として異なる値が必要な場
合は、ステート マシンを変更する必要があります。また、data_path モジュールのパイプラ
イン レジスタも、それに従って調整する必要があります。
読み込みの場合、コントローラはまず READ ステートになり、DDR SDRAM に対して READ
コマンドを実行します。その後、READ_WAIT になり、CAS レィテンシだけ待ちます。CAS
レィテンシをプログラムするには、LOAD_MR コマンドを実行します。CAS レィテンシが終
了すると、コントローラは READ_DATA ステートになり、data_path モジュールがデータを
受け付けるための制御信号を生成します。バーストが終了するか BURST STOP を実行すると、
コントローラは IDLE ステートに戻ります。
コントローラは、DDR SDRAM の rasb、casb、web を生成します。また、デザイン内にある
各種カウンタ、data_path、addr_latch に対してすべての制御信号も生成します。
ddr_dqs_toggle と ddr_dqs_t 以外のすべての制御信号は、クロックのポジティブ エッジで生
成されます。ddr_dqs_toggle と ddr_dqs_t は、DDR SDRAM の DQS を生成する制御信号で
す。データ ストローブは clk2x のネガティブ エッジでクロックを供給されるので、これらは
clk2x のネガティブ エッジで生成されます。
XAPP200(v2.3)2000 年 3 月 21 日
www.xilinx.co.jp
9
合成可能 1.6GB/s DDR SDRAM コントローラ
タイミング
ダイアグラム
R
書き込みサイクル
図 9 に、8 データ ワードのバーストを DDR SDRAM に書き込む場合のタイミング ダイアグ
ラムを示します。
最初の 4 つの信号は、DDR コントローラへの入力です。T1 において、WRITE コマンド、DDR
SDRAM のアドレス、データの先頭 128 ビットがそれぞれ u_cmd、u_addr、u_data_i に入力
されます。
5 番目の波形は、コントローラのステートを示します。コントローラは、T2 において IDLE か
ら ACT になります。
最後の 4 つの波形は、DDR SDRAM に対する信号のインターフェイスを示します。T3 におい
て、コントローラは ACT コマンドと行アドレスを DDR SDRAM に発行します。TRCD の遅延
(3 クロック サイクル)の後で、コントローラは WRITEA コマンドと列アドレスを発行しま
す。これにより、ddr_dq および ddr_dqs という信号がダブル データ レートで出力されます。
T1
T2
T3
T4
T5
T6
T7
T8
T9
T10
u_clk
u_cmd NOP
WRITE
u_addr
ADDR
u_data_i
controller_state
ddr_cmd
D1
WRITE
D2
D3
IDLE
ACT
D4
D5
D6
D7
ACT
ddr_ad
NOP
D8
ACT
NOP
NOP
WRITE
NOP
WRITE_DATA
WRITEA
NOP
行アドレス
ddr_dq
IDLE
列アドレス
D1
D2
D3
D4
D5
D6
D7
D8
ddr_dqs
T
RCD
X200_09_011000
図 9: 書き込みサイクルのタイミング ダイアグラム
読み込みサイクル
図 10 に、8 データ ワードのバーストを DDR SDRAM から読み込む場合のタイミング ダイア
グラムを示します。
T1 において、READ コマンド と SDRAM のアドレスが u_cmd と u_addr に入力されます。
コントローラは、T2 において IDLE から ACT になります。
T3 において、コントローラは ACT コマンドと行アドレスを DDR SDRAM に発行します。
TRCD の遅延(3 クロック サイクル)の後で、コントローラは READA コマンドと列アドレス
を発行します。
そして、CAS レィテンシ(2 クロック サイクル)が過ぎると、DDR SDRAM はバーストが終
了するまでクロック エッジごとにデータとデータ ストローブを与えます。
コントローラは、受け取ったデータを組み合わせて 128 ビット ワードに戻します。u_data_o
の読み込みデータが有効な場合、u_data_valid 信号がアサートされます。
10
www.xilinx.co.jp
XAPP200(v2.3)2000 年 3 月 21 日
合成可能 1.6GB/s DDR SDRAM コントローラ
T1
T2
T3
T4
R
T5
T6
T7
T8
T9
T10
T11
T12
T13
T14
T15
u_clk
u_cmd
READ
u_addr
ADDR
controller_state
IDLE
ddr_cmd
READ
ACT
ACT
NOP
READ
ACT
ACT
行アドレス
ddr_ad
READ_WAIT
READA
NOP
READ_DATA
IDLE
NOP
列アドレス
ddr_dq
D1
D2
D3
D4
D5
D6 D7
D8
ddr_dqs
u_data_o
D1 D2
D3 D4
D5 D6
D7 D8
u_data_valid
TRCD
CAS LATENCY
X200_10_012400
図 10: 読み込みサイクルのタイミング ダイアグラム
デザインの
インプリメンテー
ション
データ パスを 200MHz で動作させることが、デザイン上の課題となります。必要な速度で動
作させるため、コントローラについて次のようなデザイン手法を使用します。
•
•
•
CLKDLL を使用して、FPGA と DDR SDRAM の間のクロック スキューを取り除きます。
BUFG(グローバル クロック バッファ)を使用して、FPGA のクロック ネットを駆動します。
デフォルトの DELAY バッファよりも約 500ps 速いので、Non-DELAY 入力バッファを使
用します。
•
DDR SDRAM とインターフェイスを取るすべての信号は、IOB に記憶されます。DDR
SDRAM のデータについてトライステート化された信号も、IOB に記憶されます。
•
配線遅延を最小にするため、ファンアウトが 4 以下になるようにすべてのクリティカルな
信号を複製します。
•
パフォーマンスを高速にするため、一部のカウンタ(brst_cntr)のインプリメントに SRL16
を使用します。
•
非クロック CLB ピンへの配線に " 論理アクセス可能なクロック " を使用します。
配置配線
デザインのインプリメントとビットストリームの生成を行う方法を示すため、参考デザイン
には run_par スクリプトが含まれています。run_par は、配線後シミュレーションのための
バックアノテートされたネットリストも生成します。制約ファイル(top.ucf)も参考デザイ
ンに含まれています。この制約ファイルには、次のものが含まれています。
•
•
•
クロック周期
•
セットアップ タイムを最小にするため、FPGA に対するすべての入力について NODELAY
属性を設定します。
•
FPGA 内部での配線スキューをゼロにするため、ddr_clk と ddr_clkb は同じタイル内の隣
初めの lac_clk パス
DDR SDRAM とインターフェイスを取るすべての信号を I/O で記憶する必要がありま
す。これを実行するには、制約ファイルで IOB=TRUE 属性を使用します(またはマップ
を実行するときに −pr b オプションを使用します)。
XAPP200(v2.3)2000 年 3 月 21 日
www.xilinx.co.jp
11
合成可能 1.6GB/s DDR SDRAM コントローラ
R
接する IOB になるように制約する必要があります。
•
ソフトウェアのバージョンによっては、すべての SSTL2 I/O を手作業で配置する必要が
あります。
配置配線を実行したら、タイミング違反がないかトレース レポート(top_par.twr)をチェッ
クします。
BitGen
CLKIN が LVTTL の場合、DLL はデフォルトで CLKIN 信号と CLKFB 信号の間にあるすべて
のスキューを削除します。DLL_INT の CLKIN は SSTL2 なので、fpga_clk は ddr_clk より約
600ps 遅くなります。
ddr_clk
fpga_clk
CLKIN
IBUFG_SSTL2
CLKFB
BUFG
DLL_INT
5 ns
ddr_clk
fpga_clk
600 ps
x200_11_011000
図 11: dll_int の波形
このスキューを削除するには、次の BitGen オプションを使用して、DLL_INT のフィードバッ
ク パスに遅延を追加します。bitgen -g Ilvl1_mux_20:0 -g Ilvl1_mux_22:1
遅延
ddr_clk
fpga_clk
CLKIN
IBUFG_SSTL2
CLKFB
BUFG
DLL_INT
ddr_clk
fpga_clk
x200_12_011000
図 12: BitGen のオプションで調整した dll_int の波形
12
www.xilinx.co.jp
XAPP200(v2.3)2000 年 3 月 21 日
合成可能 1.6GB/s DDR SDRAM コントローラ
R
結果
DDR SDRAM コントローラのデザインでは、335 個の CLB スライス(XCV300 の 11%)、2 つ
の DLL、2 つの BUFG、89 個の IOB を使用します。このデザインは、100MHz のバックアノ
テートされたシミュレーションで検証されています。
ボード レイアウ
トの解析
ボード レイアウトを計画する前にすべてのセットアップ タイムとホールド タイムの条件を
確実に満たすには、FPGA と DDR SDRAM の間の I/O タイミングを計算する必要がありま
す。さらに、DDR 信号はすべて SSTL2 なので、信号の統合性を保証するために終端を適切
に設定する必要があります。ボード デザイン ツールを使用して信号をシミュレーションして
ください。Xilinx では、すべての Virtex シリーズおよび Spartan-II の I/O について IBIS モデ
ルを提供しています。SDRAM の IBIS モデルも、メモリ ベンダーから入手できます。
次の図は、スピード グレードが -6 の Virtex デバイスと -8 の SDRAM を使用して 100MHz 動
作を実現した I/O 解析のサンプルです。
読み込み動作
ddr_clk
DQ(最小)
TAC(最小)
DQ(最大)
TAC(最大)
データが
FPGA に到着
TDV
TSKEW
TSKEW
FPGA_clk2x
TPHDLL
DQ(最小)
DQ(最大)
TDQ(最小)
TDQ(最大)
X200_13_012400
TPSDLL
図 13: 読み込みのタイミング ダイアグラム
FPGA では、READ サイクルのデータを読み込むためにクロックを使用します。TDQ(DQ の
PC ボード遅延)を計算するには、TAC(最小と最大)+ TDQ が FPGA のセットアップ タイ
ムとホールド タイムの条件を両方とも満たしている必要があります。ddr_clk と fpga_clk の
間のクロック スキュー(TSKEW)を加えると、次の式が得られます。
TSKEW + TPHDLL − TAC(最小)< TDQ <(1/2 × TCK)− TSKEW − TPHDLL − TAC(最大)
(1)
例:
スピード グレードが -6 の Virtex デバイスと -8 の Micron 社デバイスでデザインする場合のパ
ラメータの概略を、表 2 と表 3 に示します。
表 2: スピード グレードが -8 の Micron 社デバイスのパラメータ
シンボル
パラメータ
最小
最大
単位
− 0.8
0.8
ns
TAC
CLK からのデータ アクセス時間
TDV
有効な出力データ
3.5
ns
TCK
クロック サイクル時間
10
ns
XAPP200(v2.3)2000 年 3 月 21 日
www.xilinx.co.jp
13
合成可能 1.6GB/s DDR SDRAM コントローラ
R
表 3: スピード グレードが -6 の Virtex デバイスのパラメータ
シンボル
パラメータ
最小
最大
単位
TPSDLL
DLL による入力セットアップ(SSTL2)
1.7
ns
TPHDLL
DLL による入力ホールド(SSTL2)
− 0.4
ns
TSKEW は、ddr_clk と fpga_clk の間のクロック スキューです。FPGA の DLL_INT は、フィー
ドバック ピンの ddr_clk と内部の fpga_clk の間にあるすべてのクロック遅延を取り除きま
す。DLL の出力ジッタおよびクロック スキューは、すでに FPGA の入力セットアップ タイ
ムおよびホールドタイムに含まれています。ボード上の DDR クロック ジッタとスキューは、
最大で 200ps と仮定します。式 1 で計算すると、次のようになります。
TSKEW + TPHDLL − TAC(最小)< TDQ <(1/2 × TCK)− TSKEW − TPHDLL − TAC(最大)
0.2 − 0.4 + 0.8 < TDQ < 1/2 ×(10)− 0.2 − 1.7 − 0.8
0.6 ns < TDQ < 2.3 ns
この結果、TDQ は 0.6 ∼ 2.3ns の間にする必要があることになります。ボード上で ddr_clk を
500ps 遅延させると、TDQ を 0.1 ∼ 1.8ns の範囲にできます。
書き込み動作
FPGA_clk
Addr
TIOCKP (Virtex clk-to-pad)
アドレスが DDR に到着
DDR_clk
Addr
TADDR(最大)
TIS (DDR set-up)
X200_14_011000
図 14: 書き込み動作のタイミング ダイアグラム
データのセットアップ タイムとホールド タイム
データのセットアップ タイムとホールド タイムは、クロックではなく DQS に関するもので
す。FPGA において、DQS 信号は clk2x のネガティブ エッジで、DQ 信号 は clk2x のポジティ
ブ エッジで生成されます。DQS のエッジにおける DQ のセットアップ タイムとホールド タ
イムは、当然 1/4 × TCK になります。TDS と TDH は、通常 0.075 × TCK です。セットアップ
とホールドのマージンを最大にするには、DQS のトレース ラインを DQ のトレース ラインと
同じにします。
アドレスと制御のセットアップ タイムおよびホールド タイム
参考デザインでは、DDR のホールド タイムを保証するため、アドレス信号と制御信号は
fpga_clk のネガティブ エッジで生成されます。セットアップ タイムについては、FPGA の
clock-to-pad(最小)とアドレス / 制御のセットアップ タイムは TCK 未満にする必要がありま
す。クロック スキューを加えると、次の式が得られます。
TADDR(最大) < 1/2 x TCK − TIOCKP(最大) − TIS − TSKEW
14
www.xilinx.co.jp
(2)
XAPP200(v2.3)2000 年 3 月 21 日
合成可能 1.6GB/s DDR SDRAM コントローラ
R
例:
表 4: スピード グレードが -8 の Micron 社デバイス(200MHz)のパラメータ
シンボル
パラメータ
TCK
クロック サイクル時間
TDS
最小
最大
単位
10
ns
DQ から DQS のセットアップ
0.075 × TCK = 0.75
ns
TDH
DQ から DQS のホールド
0.075 × TCK = 0.75
ns
TIS
アドレスと制御のセットアップ
0.15 × TCK = 1.5
ns
TIH
アドレスと制御のホールド
0.15 × TCK = 1.5
ns
表 5: スピード グレードが -6 の Virtex デバイスのパラメータ
シンボル
TIOCKP
TOJITCC
パラメータ
クロックからパッド
(SSTL2_I)
最小
最大
単位
0.9
2.4
ns
± 0.06
ns
DLL 出力ジッタ
TADDR(最大) < 1/2 × TCK − TIOCKP(最大) − TIS − TSKEW
TADDR(最大) < 5 − 2.4 − 1.5 − 0.2
TADDR(最大) < 0.9 ns
DDR クロックを 500ps 遅延させると、TADDR(最大) を最大 1.4ns にできます。
ボード レイアウトのまとめ
• 読み込みサイクルで適切なタイミングを保証するには、次の式で DQ トレース ラインを計
算します。
TSKEW + TPHDLL − TAC(最小)< TDQ <(1/2 × TCK)− TSKEW − TPHDLL − TAC(最大)
(1)
おわりに
•
書き込み動作中、DQS は DQ の中央になります。DDR SDRAM のセットアップ タイムと
ホールド タイムのマージンを最大にするには、DQS と DQ のトレース ラインを同じ長さ
にする必要があります。
•
DDR のホールド タイムを保証するため、アドレスと制御のラインは fpga_clk のネガティ
ブ エッジで生成されます。
•
アドレスおよび制御のラインの最大トレース レングスは、次の式から計算できます。
(2)
TADDR(最大) < 1/2 × TCK − TIOCKP(最大) − TIS − TSKEW
•
TDQ の最小遅延を小さくし、TADDR の最大遅延を大きくするには、ddr_clk を遅延させます。
•
遅延を同じにするため、ddr_clk と ddr_clkb のトレース ラインは一致させる必要があり
ます。ddr_clk のフィードバック負荷を一致させるには、ddr_clkb を隣接する未使用の
IOB に接続します。
•
DDR SDRAM に対するすべての信号は、SSTL2 です。終端手法と同時スイッチングのガ
イドラインについては、Xilinx アプリケーション ノート XAPP133『Virtex SelectI/O の使
い方』、XAPP179『Using SelectI/O Interfaces in Spartan-II FPGAs』、および DDR SDRAM
のデータシートを参照してください。
•
トレースの解析と信号の完全性のチェックには、ボード デザイン ツールを使用してくだ
さい。
この参考デザインでは、Virtex シリーズまたは Spartan-II ファミリの FPGA と DDR SDRAM
の間でのインターフェイスの取り方を示しています。Xilinx の DLL と柔軟な SelectI/O 機能
によって、特別なクロック ジェネレータと I/O ドライバをボード上に追加する必要がなくな
XAPP200(v2.3)2000 年 3 月 21 日
www.xilinx.co.jp
15
合成可能 1.6GB/s DDR SDRAM コントローラ
R
ります。Xilinx デバイスでは、BitGen オプションを使用して DDR と FPGA のクロックの間
のスキューを調整できるので、ボードを組み立てた後でも柔軟にインターフェイスを調整で
きます。
参考デザインは Verilog と VHDL の両方について開発されており、他のシステムデザイン条
件用にも簡単に修正できます。参考デザインは、ftp://ftp.xilinx.com/pub/applications/xapp/ にある
Xilinx の Web サイトからダウンロードできます。
64 ビット バージョン : xapp200.zip または xapp200.tar.gz
16 ビット バージョン : xapp200_16.zip または xapp200_16.tar.gz
参考文献
改訂履歴
16
1.
Xilinx データシート『Virtex 2.5V Field Programmable Gate Arrays』
(2000 年)
2.
Xilinx データシート『Virtex 2.5V フィールド プログラマブル ゲートアレイ』
(1999 年)
3.
Xilinx アプリケーション ノート XAPP133『Virtex SelectI/O の使い方』
(1999 年)
4.
Micron Technology 社 データシート『Double Data Rate(DDR)SDRAM』(1999 年)
5.
Xilinx データシート『Spartan-II 2.5V Field Programmable Gate Arrays』
(2000 年)
6.
Xilinx アプリケーション ノート XAPP179『Using SelectI/O Interfaces in Spartan-II
FPGAs』(2000 年)
次の表に、この文書の改訂履歴を示します。
日付
バージョン番号
改訂内容
1999 年 9 月 28 日
1.0
初期リリース
1999 年 10 月 1 日
1.1
表 1 の u_data_o を修正
1999 年 10 月 12 日
1.2
図 5 を修正
2000 年 1 月 10 日
2.0
参考デザインの FPGA インプリメンテーションの再
構成と多数の変更。Spartan-II ファミリのサポート
を追加
2000 年 1 月 24 日
2.1
図 10、13 の更新、9 ページの最後の文の誤りの訂
正、参考デザインのロケーションの更新
2000 年 2 月 18 日
2.2
図 3、5、7 の変更、文書全般の編集
2000 年 3 月 21 日
2.3
Virtex-E 拡張メモリ デバイスを含むように更新
www.xilinx.co.jp
XAPP200(v2.3)2000 年 3 月 21 日
Fly UP