FC2カウンター FPGAの部屋 2008年03月19日
FC2ブログ

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

FPGAの部屋

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

DDR, DDR2 SDRAMコントローラの今後の展開について

DDR SDRAMコントローラはたっくさんのおかげで、大体バグが取れたと思う。後はたっくさんのインプリメントで何かバグが出てくるかもしれないが。。。一番気になっているのが、DDR SDRAMコントローラ用のDCMの位置を固定していなかったことだ。それにそのDCMは外部からのフィードバックを受けて位相が変わるので、他のDCMので出力される同じクロックの位相とは異なってしまう。なので、DDR SDRAMコントローラに入力や出力する場合にはフリップフロップを入れたほうが良いと思われる。この位相差は外部配線の影響を受けるので、Timing Analyzerも静的遅延を計算できないはず。。。遅延シミュレーションをする場合にはプリント基板のパターンの遅延を挿入する必要がある。
追加:DDR SDRAMコントローラのclk_out(クロック)で他の回路を動作させればOKでした。忘れていました。DCMの位置が変更になっても全体の動作クロックの位相が変化するだけなので、パッドからの入力クロックを使っていなければ大丈夫かな?
さらに追加(2008/03/21):自分のかいたVerilog HDLソースをよく読みなおしてみると、DDR SDRAMへクロックを出力しているDCMだけフィードバック入力をフィードバック入力パッドからフィードバックしていて、DDR SDRAMコントローラの回路が使用するクロックを生成するDCMはFPGA内部でフィードバックされていた。やはりこれだとDDR SDRAMへクロックを出力しているDCMの位置でデータの遅延回路の遅延値が変わってくると思われるので、DCMを固定しようと思っている。
さらに私のテスト回路でISE9.2SP4でインプリメントしてみたのだが、データを受ける最初のDDR用のFFがIOBに入っていなかった。これではまずいのでIDDR2プリミティブを使用してVerilog HDLソースを書き直してみたが、出力ポートの半分を使用していないためINTERNAL_ERRORでMAPが通らなかった。これは出力ポートの半分を使用していないためIDDR2の半分のFFが消されたのでDRCエラーになったのかな? INTERNAL_ERRORはまずいと思うが、とりあえず使っていない出力も拡張ポートに出力するようにしたらINTERNAL_ERRORはでなくなった。
ついでに、そのほかのIOBに入れる予定のFFもUCFではなくVerilog HDLソースに制約を書くことにした。それは、UCFだとインスタンスを書かなくてはいけないので、IPとして階層が変わるとUCFを書き直す必要があるためだ。本当はDCMもVerilog HDLソースで位置固定する必要があるが、どうもできないような感じだ。これは仕方ないのでUCFで固定する。

DDR2 SDRAMコントローラの方はとまっている。125MHz動作、つまりDDR2-250で動作させてやってみようと思っていたのだが、64タップもあるので、そのたびにインプリメントしてやっているのも時間がかかって大変だ。それに私のDDR2 SDRAMコントローラはリードのときに1/4クロック分データをずらして受ける方式だが、どうもChipscopeの波形を見ているとIDELAYが0のときに1/4クロック以上データがずれているようだ。これでは受けられないので、3/4クロック分データをずらす方式に変更しながら、遅延を自動判定する回路をつけようと思っている。とりあえず前の200MHzでうまくいくかどうかやってみたい。
1/4クロック分データをずらして受ける方式については”Spratan3E Starter KitのDDR SDRAMコントローラまとめ3”を参照。
  1. 2008年03月19日 05:55 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0