仕事の関係でDDR SDRAMコントローラを作ることになった。とりあえずDDR266を目指す。DDR333まで、DDR400になるとDRAMの電圧が2.6Vになるのでとりあえずパス。デバイスはXilinxのVirtex2pro。
以前SDRAMコントローラを作ったがこのときのやり方では、だめ。
DDR266となると、動作周波数133MHzなので、一周期7.5ns。
DDRはクロックの半分ずつでデータサンプルするので、3.75ns。これだと、FPGAのIOBのフリップフロップのセットアップタイム、基板の配線遅延を考えるととてもコントローラ側のクロックではDDR SDRAMのリードデータはサンプルできない。
それで、基板の配線遅延とセットアップタイムを換算した最適の位置にサンプリングポイントを移せないかと考えた。DQSをサンプルして、クロックの立ち上がりで1をサンプルできれば良いから、DCMの動的位相シフトを利用してクロックをシフトしていって、1になる位置と0になる位置を測定して、その中間にすれば良いじゃないか?(われながらいい考え!!)
もしかしてと思って、アプリケーションノート見ると、XAPP268動的位相調整を発見。なんだもうあるじゃないですか。
ちょっとがっかりしながら、ソースを見ると、なんと動作周波数が高い。DDR266ではある理由からだめ。
それで、自分で作り直す。
出来ました、ちゃんと、シミュレーションではDQSの真ん中まで、クロックシフトしてます。
これからDDR SDRAMコントローラ本体をある程度まででっち上げて、テストしなくちゃ。
なにしろ、DDRを初期化してから、同期取れるまでreadコマンド送らないといけないから。
回路を作らないと実機でテストできない。
希望があればソースを公開してもいいかな。でも、使う人いないでしょう。
それに、まだアンサーサーチを見ていると、不安な面があるから、実機でクリアしないとだめだ。
- 2005年07月03日 13:06 |
- DDR SDRAMコントローラ
-
| トラックバック:0
-
| コメント:0