FPGAの部屋FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。SDRAMコントローラのタイミング図を示す。このタイミングチャートはアクティベートコマンドでROWアドレスとバンクを指定してアクティベートした後のリード、ライトコマンドの動作の様子だ。LATENCY=2、バースト長=2、動作周波数133MHzの予定だ。2.のDQSを使う方法だ。リードの時にはDQと同位相で出てくる。よってDQSを何らかの方法で遅延させてDQをサンプルしなければいけない。これには2つ方法があるようだ。1つはDQSを配線遅延でDQがサンプルできるまで遅延させる方法、もう1つはDQSをLUTなどを使って内部で遅延させる方法だ。配線遅延でDQSを遅延させる方法では動作周波数によって配線遅延の長さが異なる。一度決めた周波数を動かせないということだ。うちとしては基板を何度も作るわけには行かないのでこの方法は取れない。設計動作周波数で動かなかったら基板を作り直さなければいけない。1つの内部遅延ではLUTなどを使うようだ。実際の受信回路はj_xapp802.pdfの4ページの図4に書いてある。遅延回路はj_xapp688.pdfの6ページの図8に載っている。実際に私もmfreemanさんの回路をもとに実験してみた。>>>保証なし)LUTプリミティブを使用して可変ディレイを作ることが出来るだろう。今回の基板のFPGAのピンアサインもDDR使う方向でやっている時点では8つのDQに対して1つのDQSをグルーピングしてピンに割り当てて、DQSを配置固定したLUTで遅延しSRL16でDQをサンプルという予定でいた。ここで注意しなければいけないのはDQSの遅延量はDQのデータウインドウの真ん中ではないかもしれない。大体同じなのでこれは考慮しないくても良いようだ。LUTで真ん中まで遅延するとすると1LUT遅延はTilo=0.32ns、仮に配線遅延を0.3nsとすると、7.5nsの半分3.75nsの半分で1.875nsとすると3個遅延素子を入れればよいことになる。ちなみにDCMの位相シフトを利用したクロックを使用したIOBのセットアップ/ホールド時間はどうかというとj_xapp259.pdfの6ページからにあるようにTpsdcm/TphdcmはXC2VP30では1.81/-0.74と記載されている。データの変化点からクロックエッジまでの遅延を計算すると、クロックの変化点からTac=500ps必要だ。次にDCMのジッタ100ps、そしてセットアップ時間1.81nsを足すと、合計2.41ns。真ん中から0.535nsずれたところにクロックエッジを設定することになる。SDRAMがドライブして、それ以外の時にはフローティングしている。リード時のみクロックが出て来てそのほかはクロックが入ってこなければいいのだが、どうやらチップスコープでDQSを見ているとフローティングの時にはちらちら波形が出ているようだ。なるとDQの受けをSRL16などのシフトレジスタを使ったFIFOで構成した時にどこがデータかを判定しなければならない。CL=2ならばコマンドを送った2クロック後にデータがSDRAMから来るはずであるが、データ受信FIFOにコントローラからイネーブルを与えるのが難しいと思う。SDRAM間での行き帰り配線長を通して、イネーブル信号入力に加えてイネーブルする方法か。配線長が決まっていれば、その分を計算して、LUT遅延で作り出してイネーブルを遅延させるか。こちらのほうは正確な配線遅延の計算が必要なはずである。配線遅延で回路も変わってくるはずだ。結局、異なるクロック間のデータの受け渡しが面倒くさいし、タイミングもずれる可能性がある。DQSのクロックがマスタクロックに近く、今のクロックでデータを取れるかどうかという状況だとするとどうだろう。間に1つマスタクロックの反転クロックでデータを取って、マスタクロックに受け渡さないといけないかもしれない。(イネーブル信号などを受け渡す場合)という訳で配線遅延に影響されないように回路を作ろうとするとかなり難しいことになると思っている。これが3.のIOBの可変遅延回路でデータを遅らせるとどうなるだろう。データが遅れるのでマスタクロックでサンプルできる。いうことはリード時にコントローラからのリードデータイネーブルがそのまま使用できるということだ。SDRAMコントローラを作るのが楽になる。ここでも遅延をサーチしてちゃんと受かる遅延を見つける回路をつけなければ。配線遅延からうまく受かる遅延を決定するのが重要になると思う。スパルタン3Eのデータシートを見ると4nsの遅延が入っているということである。これじゃちょっと少ないが配線遅延で調節すればよいだろう。何か取りとめがなく、まとまっていないで申し訳ない。このようなことを考えている。SDRAMコントローラはこの辺のことはどうしているかというと、DQSもDQと一緒にサンプルして特徴的なパターンを抽出している。DQSとDQを一緒にFIFOに入れてDQSのパターンを確認して、同時に入ってるDQをデータと認識している。一応これで83MHzだったらちゃんと受けられるようだ。データシートを見て遅延を調整しても最大値しかわからないので、遅延の実力値は未知数だ。実際は微調整が必要だろう。ロットごとに遅延値が変わって回路を変更しなければならなくなったとしてもおかしくない。SDRAMコントローラは配線遅延に影響されない回路構成を目指している。SDRAMコントローラ使わなくなったので、ちょっともったいない。スパルタン3Eスタータキットで確かめてみよう。SDRAMコントローラのデータを受けられないならば、Xilinxに頑張ってもらってジッタの少ないDCMを何とか作ってもらえないものか。»コメントリードイネーブルの受け渡しは僕もいろいろ考えたんですが、任意の遅延に対して万能に受け渡す事はやっぱり無理そうですね。フローティング時のDQSは僕も4倍クロックのChipScopeで確認しましたが、僕の基板ではHighになっていてコマンド発行時にたまにLowに落ちてました。XilinxのEDKについてくるDDRコントローラのドキュメントには「DQ,DQSに外部プルダウンがあるのが望ましい」とあります。]JEDECの規格ではリファレンス電源1.25Vに50Ωプルアップですね。リファレンス電源真ん中だから始末が悪いです。凄い大きいヒステリシス持っているのかなと期待していたんですが、そうではないようでした。プルダウンしているのは見たこと無いですが、プルダウンできれば楽になります。]回路図と見ていると50ΩでVTTに上につながっているのでプルアップといってしまいます。結局プルアップも等価回路ではVCCもGNDも同じなので終端抵抗ですね。おかしい所があればどんどんご指摘ください。URLhttps://marsee101.blog.fc2.com/tb.php/139-b554bfd5この記事にトラックバックする(FC2ブログユーザー)プロフィールAuthor:marseeFPGAの部屋へようこそ!FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。WEBブログデザイナ。