FC2カウンター FPGAの部屋 2009年06月
FC2ブログ

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

FPGAの部屋

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

Spartan3A Starter KitのDDR2 SDRAMコントローラのシミュレーション1

Spartan3A Starter KitのDDR2 SDRAMコントローラの再開”で、また作り始めたSpartan3A Starter KitのDDR2 SDRAMコントローラだが、だいぶデバックが進んできた。DQSもDQも正常な動作になって、書き込みも読みだしもできるようになった。
下がVeritakでのシミュレーション波形。Veritak-Basic 3.65Aを使用している。たっくさん、いつもBasic版も最新の版を用意していただいて感謝しています。いつも、シミュレーションをする場合には、最新のVeritakをダウンロードして使うようにしている。
Spa3A_STKit_DDR2_2_090601.png

上の波形はDDR2 SDRAMへのWrite波形だ。緑の四角でバンクのACTIVATEコマンドを発行してバンクをアクティブにして、3つのピンクの四角でWRITEコマンドを発行して書き込みをしている。ddr2_dqsが書き込みのクロックで、ddr2_dqs_nがその反転信号。ddr2_dqがデータだ。DDR2 SDRAMはプリフェッチ4、つまり、1つのWRITEコマンドで4つのデータを書き込む。3つのWRITEコマンドがあるので、12個のデータがバースト(連続的に)で書き込まれる。ddr2_rasb, ddr2_casb, ddr2_webはコマンドを表す信号でアクティブローだ。"011"だとACTIVATEコマンド、"100"だとWRITEコマンド、"101"だとREADコマンドになる。その他、リフレッシュコマンドやプリチャージコマンドもあるが省略。マニュアルを参照。
一応正常に動作している。ちなみに、ddr2_dqやddr2_dqs, ddr2_dqs_nは、Write時にはDDR2 SDRAMコントローラがドライブしている。

このデータをREADしたのが下の波形。
Spa3A_STKit_DDR2_3_090601.png

同様に、緑の四角でバンクのACTIVATEコマンドを発行してバンクをアクティブにして、3つのピンクの四角でREADコマンドを発行して読み出しをしている。ddr2_dqにデータが出て、ddr2_dqs, ddr2_dqs_nにクロックが出力されている。READの場合のクロックはデータと位相が一致している。上のシミュレーション波形では次のプリチャージコマンド(黄色の四角)と次のバンクをアクティブにするためのACTIVATEコマンド(赤の四角)が見えている。
ddr2_dqやddr2_dqs, ddr2_dqs_nは、READ時にはDDR2 SDRAMがドライブしている。
このDDR2 SDRAMコントローラは1つのバンクのみアクティベートする仕様にしている。4つのバンクをアクティベートする方法のほうがACTIVEコマンドを発行する頻度が下がって性能が上がるが、管理するバンクが増えるので、回路が複雑になる。これは今後の課題とする。

現在、Spartan3A Starter KitのDDR2 SDRAMコントローラは完成したわけではなく、まだまだ途中だ。バイトレーンごとに書き込むためのddr2_dmがまだうまく動いていない。全体のチューニングもまだ。ユーザーインターフェースを用意しないと実機で試すことができないので、ロータリーエンコーダーやLCDをSpartan3A Starter Kit用にカスタマイズする必要がある。
  1. 2009年06月03日 06:15 |
  2. Spartan3A Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Spartan3A Starter KitのDDR2 SDRAMコントローラの再開

前回、”Spartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュール公開”でSpartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュール公開をして止まっていたSpartan3A Starter KitのDDR2 SDRAMコントローラだが、今回テスト出来きるまで作り上げることにした。
土日でddr2_sdram_cont.vのトップから階層を構築することができて、シミュレーションでコンパイルエラーを修正して、シミュレーションができるところまで持って行った。テストベンチは前回のSuzaku-V用のテストベンチが使えるが、sd_loop_in, sd_loop_outなどの新たな信号があるので、その処理を追加した。
現在はこの辺までできたが、内部の信号のタイミングは精査していないので、まだいい加減だ。とりあえず形になるのを優先した。DDR2 SDRAMコントローラのサンプルは、Spartan3E用のもあるし、DDR2のSuzaku-V用のもある。ただしSuzaku-V用はOSERDESやISERDESを使用しているので、大幅な改造が必要だ。Spartan3E用はIOは似ているのだが、DDR用だ。そういうことで、両方を合わせて、でっち上げているので、タイミングがまだおかしい。(ただし、IO部分は前回まで作ってきたIOモジュールを使った新設計)
下が現在のシミュレーション波形。
Spa3A_STKit_DDR2_1_090601.png

ddr2_dqやddr2_dqsのタイミングが2クロックほど前に来ている(ピンクの丸と矢印)。ddr2_dqのデータが出ていない(緑の四角)。
とりあえず分かっているだけで、これらの問題がある。これから修正していくつもりだ。

そういえば検討していくうちに、Suzaku-V用のDDR2 SDRAMコントローラであやしい部分があったので、後でUCFを追加してもう一度確かめてみようと思う。
  1. 2009年06月01日 06:02 |
  2. Spartan3A Starter Kit
  3. | トラックバック:0
  4. | コメント:0