Comments
Description
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 日