今度はDDR SDRAMの論理シミュレーションから動作を説明しようと思う。
DDR SDRAMの初期化は
エルピーダ社のユーザーズマニュアル、DDR SDRAMの使い方の初期化を参考に作った。下の図で言うとピンクの四角で囲まれた部分だ。ここでバースト長を2、バースト・シーケンスをシーケンシャル・タイプ、CASレイテンシを2にモードレジスタを設定している。

白い四角で囲んだ部分がリフレッシュ・コマンドで、7.8usごとに出力している。
黄色で囲んだ部分がデータのライト、赤で囲んだ部分がデータのリード、青で囲んだ部分がプリチャージ・コマンドとリフレッシュ・コマンドだ。ちなみにライト・コマンドもリード・コマンドもプリチャージなしである。
次にライト・コマンドの様子を詳しく見てみよう。下図はその様子だ。

ddr_cke=1, ddr_csb=0, ddr_casb=1, ddr_web=1の時にddr_rasb=0にするとACTコマンドで指定されたバンクをライト・コマンドやリード・コマンドで読み書きすることが出来る。このときにddr_ba(バンクアドレス)とddr_address(行アドレス)にはメモリのアドレスをFPGAがドライブする。
(オール0)
次に1クロック、ウエイトしてddr_casbとddr_webを0にするとライト・コマンドになる。その時にFPGAはddr_addressに列アドレスをドライブする。それと同時にといってもコマンドは半クロックずれているが、データをドライブする。データをドライブしてから1/4クロック後にDQSを立ち上げる。(データとDQSはFPGA側とSDRAM側に分かれていて遅延をくわえてある)
今度はリード・コマンドを簡単に説明する。下の図を見てほしい。

ddr_cke=1, ddr_csb=0, ddr_rasb=1, ddr_web=1の時にddr_casbだけを0にするとリード・コマンドになる。ライト・コマンドと一緒でFPGAはddr_addressに列アドレスをドライブする。そうするとSDRAMはCASレイテンシ後にデータを出力する。FPGAのIFD_DELAYと配線遅延でデータを遅延するが、現在はIFD_DELAY_VALUEをUCFに記述しているためシミュレーションのソースの方で遅延させている。それがddr_dq_fpgaである。そのデータをサンプルしてリードしている。
これでライトやリードは終了だが、バンクをアクティブにしてあるので、リフレッシュする場合はプリチャージしてからリフレッシュしている。それが一番上の図の青で囲まれた部分だ。
- 2006年07月03日 18:19 |
- Spartan3E Starter Kit
-
| トラックバック:0
-
| コメント:0