FC2カウンター FPGAの部屋 2006年01月28日
FC2ブログ

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

FPGAの部屋

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

V2, V2proでのDDR SDRAMコントローラ1

今度作る基板にはDDR SDRAMが搭載されなくなってしまったが、V2, V2proでのDDR SDRAMコントローラの方式について書こうと思う。
DDR SDRAMの使い方はエルピーダのマニュアルが詳しい。ここにある。
DDR SDRAMはDLLを持っていて供給されたクロックにロックする。よってtDQSCK(DQのクロックからのスキュー時間)はエルピーダのDDR333メモリだと-0.6nsから0.6nsだ。つまりデータの出力時間は入力クロックにほぼ同期している。
データの書き込みの時はDDR SDRAMはFPGAから出したデータ(DQ)をDQSでサンプルしセンスアンプに書き込む。書き込み時にはクロックとデータ(DQ)やDQM、DQSの配線長が一緒だとすると配線での遅延だけ遅れて受け取る。DQやDQMに対してDQSは位相が90度ずれていて、DQやDQMの真ん中でサンプルできるようになっている。DDR SDRAMのセットアップ時間、ホールド時間のマージンやクロックとDQ,DQMの出力時間の誤差、配線遅延の誤差を考慮しなければならない。だがそれらの誤差を押さえ込めれば、133MHzの場合は一様にクロック、データが遅れるので書き込みの時には問題は少ない。当然動作周波数が高くなるとマージンが少なくなって厳しくなってくると思うが。基板屋さんにはマージンを含めて配線遅延について要求をだすだろう。
基板での配線遅延は良くわからないが、例えば1ns配線で遅延するとしよう。DDR SDRAMコントローラから出たクロックは配線で遅延してDDR SDRAMに届くのでDDR SDRAMの動作はFPGA(DDR SDRAMコントローラ)から見ると1ns遅れていることになる。
次にデータ読み出しの場合だが、DDR SDRAMの動作はFPGAから見ると1ns遅れているので、クロックに同期してDDR SDRAMがデータを出力すると、DDR SDRAMコントローラから見ると2ns受け取るデータが遅れていることになる。
133MHz動作とすると周期は7.5ns、DDRなので1データは半分の3.75ns、これでデータの遷移時間を前後0.5nsずつとすると1nsなくなるので2.75nsになる。このデータが2ns遅れているとなると残りは0.75ns。
データ書き込み時のクロックとコマンドやデータの位相を合わせるためにクロックをIOBのDDRレジスタから生成するとさらに基準クロックから5ns程度遅れてしまう。さらにIOBのセットアップ時間も加算される。
これではもうSDR SDRAMのように同じクロックでサンプルすることは無理である。
DDR SDRAMコントローラがデータをリードする場合はDQSがリードクロックとして使用できるが、データと位相が同じである。
以上のことを踏まえると、Xilinxのアプリケーションノートによると以下のリード方法がある。
1.100MHz以下の周波数ではDCMの位相シフトを利用したり、配線による遅延を利用したりして受信クロックをデータがサンプル出来る位置に持ってくる。
2.100~200MHzではDQSをクロックとして使う。DQSはいつもクロックが出ているわけではなく使いづらいし、データと位相が同じなので配線遅延かFPGA内部遅延を使って位相を90度遅らせなければならない。
3.200MHz以上ではV4,S3EのようにIOBの専用遅延回路でデータを遅延させる。

1.では最初100MHz間でしかだめというのを知らなかったので、私はこの方法を取った。私が取った方法はDCMの動的位相シフトを利用して、最初にDDR SDRAMにリードコマンドを連続して送ってDQSを発生させ、だんだんに受信クロックを位相シフトしていってうまく受かる位相シフト量を見つける方法だった。確かに83MHzでの動作は完璧だが、133MHzでは今の所リードできない。やはりDCMのジッタなどで100MHzが限界なのか?
その他、配線を使用してDDR SDRAMへ行く配線の遅延をキャンセルする方法もあるようだ。これはML310というXilinxのV2pro基板のマニュアルに詳しい。ここを見てほしい。
ML310では片道分の配線遅延とIOBのDDRレジスタのクロックからの出力時間をDCMのフィードバックでキャンセルしている。それから配線遅延やIOBのセットアップ時間、Tacを計算して受信クロックのシフト量を計算している。つまり配線遅延もパラメータの内に入っていてここが狂うとデータ読み出せなくなる。

-------------------------------------------
この辺で疲れたので、また続きは次回に。
  1. 2006年01月28日 19:59 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:11

PACEの使い方2

PACEの使い方の続き。
現在WebpackISE8.1i、SP1だが、PACEが少しおかしい。カラーツールバーのアイコンが表示されないようだ。下図で赤で囲んだ所に四角の色のついたアイコンがあるはず。四角の色のついたアイコンは無くともその辺をクリックすれば色が付くようなので、これでやってみる。
信号のグループごとに色をつけてみる。色を付けるグループをDesign Object List - I/O Pinsウインドウから選択する。そうして、下図で赤で囲んだ所を適当にクリックすると色が付く。
pace_9_060128.png

これで信号をピンに配置してみよう。現在はArchitecture ViewだがPackage Viewで行っても良い。しかし、Architecture Viewの方がFPGAチップの形状が見えるので私は良いと思う。関連する信号はなるべく集めておいたほうが良いと思うし、データパスはなるべくチップの左右に配置したい。Architecture Viewで信号を割り当てPackage Viewで確認というのが私の好きなスタイルだ。
Design Object List - I/O PinsウインドウからA_nをArchitecture ViewのDevice Architecture for xc3s200-4-ft256ウインドウのB1にドラックアンドドロップする。
pace_10_060128.png

今度はブロックでドラックアンドドロップしてみよう。
Design Object List - I/O PinsウインドウからAN_n<0>からAN_n<3>までを選択してArchitecture ViewのDevice Architecture for xc3s200-4-ft256ウインドウのC1からのピンにドラックアンドドロップする。ドラックアンドドロップの途中では白抜き三角が下向きに4つ縦に並んでいると思うが一番下の白抜き三角をC1にあわせると下向きに信号がピンに配置される。
これはメニューIOBsのDistribute ActionがDistribute Downになっているからだが上向きに配置する場合にはDistribute Upにすれば逆向きになる。
pace_11_060128.png

信号をピンに配置するとDesign Object List - I/O Pinsウインドウの左端の箱が無くなる。全て配置して、今度はI/O Std.を設定しよう。ISE6.3ではDesign Object List - I/O Pinsウインドウは2分割されて下にGroupを表示するペインが出ていたのだが、今使っているISE8.1ではディフォルトで出ていないみたい。何か設定があるのだろうがわからない。手動でグループ化してみよう。グループにする信号をまとめて選択して右クリックでメニューを出す。Groupがあるので選択。(下図)
pace_12_060128.png

そうするとDesign Object List - I/O Pinsウインドウが1本ずつ表示するペイン(上)とグループを表示するペイン(下)に分かれる。グループの信号にI/O Std.を一括して設定するにはグループペインから行うのが便利だ。I/O Std.からSSTL2_IIを選んでみた。上のペインを見るとグループのすべての信号に同じI/O Std.が設定されているが見える。
pace_13_060128.png


PACEも結構便利だった。現在PACEでピンを割り振っている。しかし、SSTL2はVREF必要なので、結構ピンを使ってしまう。ピンが足りなくなったのでDDR SDRAMは止めてSDRAMでいくことになりそうだ。DDR SDRAMのモジュールが出来ているので残念だが、DCMの位相シフト方式では100MHz以下対応とXilinxのアプリノートに書いてある。実際83MHzでは動いても133MHzでは動かなかった。133MHzで動くためにはDQSをクロックとして使うかDDR SDRAMに行く配線の行き返りの長さの配線にクロックを通して遅延を付加したクロックでデータを受信しなければいけないようだ。
スパルタン3Eスタータキットが発売されたらDDR SDRAMコントローラを作ってみたい。スパルタン3EはIOBに調整できるディレイが入っているのでより簡単に組めると思う。
  1. 2006年01月28日 07:40 |
  2. PACEの使い方
  3. | トラックバック:0
  4. | コメント:0