FC2カウンター FPGAの部屋 DQSをクロックとしてDQのリードデータを受けるDDR2 SDRAMコントローラの構想2
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

DQSをクロックとしてDQのリードデータを受けるDDR2 SDRAMコントローラの構想2

だいぶ間が空いてしまったがDDR2 SDRAMの話題。

”DQSをクロックとしてDQのリードデータを受けるDDR2 SDRAMコントローラの構想”でDQSをクロックとしてDQをサンプルする方法について述べたが、シミュレーション波形で、いったいどんなことを想定しているのかを詳しく説明しようと思う。
まずは、DDR2 SDRAMのクロックがFPGAから出力されるのに、どのくらい時間がかかるかだが、いままでのDDR2 SDRAMコントローラをインプリメントしてTiming Analyzerで見てみると。。。
DDR2_SDRAM_dqs_3_080617.png

クロックの内部遅延を入れないと2.917ns かかっている。
次に、DQ15 の入力遅延を見てみると、下のようになっている。
DDR2_SDRAM_dqs_4_080617.png

入力の遅延は2.734ns だ。ちなみにIDELAYは入っているが遅延値は0ns になっているはず。
今回のDDR2 SDRAMコントローラは内部クロックでDQをサンプルしているので、クロックはDCMからきているのだが、これを今回のBUFIOからクロックをもらったとすると、以前のスピードグレードとパッケージが違うVirtex4だが、下の図のようになる。(これは”Virtex4のリージョナルバッファ(BUFIO、BUFR)”のデータを使用している)
BUFIO_BUFR_1_060622.png

ここでbufio までの遅延値が必要なので、0.833ns + 0.296ns + 0.107ns = 1.236 ns 。概算なのでスピードグレード-11 と -10の差を考慮して1.3ns 程度としておく。
ここで、プリント基板の配線遅延を考えないDDR2 SDRAMからのリードデータをFPGAが受ける時に遅延は、下のようになると思う。
FPGA内部クロックに対するFPGAからDDR2 SDRAMクロックの出力遅延(DDR2 SDRAMはDLLでこのクロックにロックしているものとする)2.917ns + FPGAの入力端子からIOBの入力データサンプル用FFまでの遅延 2.734ns - FPGAのリージョナルクロック入力から入力したクロックのIOBの入力データサンプル用FFまでの遅延 1.3ns = 4.351ns。これに、プリント基板の配線を伝搬する遅延をFPGAからDDR2 SDRAMまでの配線を行き帰りで10cmとすると、約0.7ns 配線遅延が加わるはずなので、合計約5ns FPGAの内部クロックからDDR2 SDRAMのリード・データを受けるまでに遅延することになるはずだ。もちろん、先ほどの4.351ns はワースト・ケースで実力値はもう少ないだろうと思う。実力値を8割とすると3.481ns とする。これに配線遅延を含めると4.18ns。
どちらにしても、クロック周波数を200MHz とすると、ほとんど1周期遅れていることになる。
以上の結果を踏まえてIOBのDDR FFのイネーブル・タイミングを考察してみようと思う。
シミュレーション波形を見てほしい。
DDR2_SDRAM_dqs_1_080617.png

黄色で囲まれたclk がFPGAの200MHz内部クロックだ。青の資格で囲まれたsdram_clk はFPGAのクロック出力から出たクロックがDDR2 SDRAMで受けられる時の位相のクロックだ。(ただし、遅延値は上の計算値を反映してはいない。遅延量は少ない)
sdram_clk を元にDDR2 SDRAMがリード・データを出力しているのが、赤の四角(囲うところを間違えてしまったが)ddr2_dq_sdram で、そのクロックがddr2_dqs_sdramだ。それらが、伝搬してFPGAの入力バッファの遅延値をあらかじめ加えたものが(ただし、遅延値は上の計算値を反映してはいない)ddr2_dq_fpga、そのクロックがddr2_dqs_fpga(緑色の四角)だ。
上のFPGAの遅延量の考察から、CASレイテンシ3クロックより、1クロック遅れの位置で3クロック分の長さのイネーブルをIOBのDDRレジスタのイネーブルとして入れれば、ddr2_dqs_fpga が1クロック分0にドライブされる位置でイネーブルされるはず。
考えている回路のブロック図はこんな感じ。今まで考察してきたのはCEにどんな信号をいれるかだ。
DDR2_SDRAM_dqs_5_080619.png

ここでふと考えてみたら、シミュレーション結果からもわかるが、データが終了するところでクロックも終わってしまう。ということはIOBのDDRレジスタに最後のデータが残ってしまう可能性もあるということか???ということは、ダメだな。。。最後のクロックだけIOBのDDRレジスタからデータを取ればいいかもしれないが、それでは、CEがアクティブになっている時間にDQSがハイインピーダンスになっていないことを保証する必要があるし。。。

考えてみたが、少し考え方を変えて、下のようにブロック図を変更する。
DDR2_SDRAM_dqs_6_080619.png

これで分散RAM FIFOはフリーランの内部クロックで動作するので、全部のデータがとれるはず。ただし、これでうまくいくためには、DQとDQSをうまいこと内部クロックでとれるところまで遅延する必要がある。その検討のためにも、実際に使うデバイスでBUFIOとBUFRの遅延値を確認する必要がありそうだ。

さらに、これまででは、IOBのFFは単一クロックで動作するものとして、内部クロックで受けるところは内部のSLICEを使用していた。Virtex4ではISERDESとOSERDESがあって、ISERDESではIOB内で別のクロックで受けられるようだ。それならばISERDESを使った方が確実といえる。
ISERDES、OSERDESを使ったDDR2 SDRAMコントローラについては、Xilinx社のアプリケーションノート、XAPP721 ISERDES と OSERDES を使用した高性能DDR2 SDRAM インターフェイスのデータキャプチャに載っている。
ISERDES、OSERDESについてはVirtex4 FPGAユーザーズガイド(日本語版)にも載っているが、ISERDESの詳しいことは載っていなくてなぞだった。しかし、最新英語版をたまたま見てみたら、良く書いてあるようだ。
また日本語版ではなく、英語版を見ろという教訓ができてしまった。
  1. 2008年06月19日 12:41 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/816-3f84aca1
この記事にトラックバックする(FC2ブログユーザー)