« MITOUJTAG Proを更新しました | トップページ | LatticeのXP2をはじめます »

2009.01.14

DDR2 SDRAMを非常にゆっくりアクセスしてみる

今日はDDR2 SDRAMを非常にゆっくりアクセスしてみました。

規格では、DDR2 SDRAMの最低クロック周波数は125MHzとされています。

しかし、今日はその100万分の1の速度で動かそうとしています。DDR2 SDRAMの中には、DLLという内部クロックを生成する機能があります。この機能を無効にしてやると、(デバッグ用のモードとして)非常にゆっくりと動かすことができるようになります。

なぜそんなことをしたいかというと、MITOUJTAG ProのAdvanced JTAG Function Generatorを使い、C++言語で作ったスクリプトを用いてFPGAの端子を上げ下げし、DDR2へアクセスしたいがためです。

MITOUJTAGでは、次のようなスクリプトを書けばDDR2メモリへNOPコマンドを与えることができます。

 static void cmd_nop()
 {
  DDR2_RAS_OP = "1";
  DDR2_CAS_OP = "1";
  DDR2_WEN_OP = "1";
  DDR2_CS_OP = "0";
  DDR2_CKP_OP = "0";
  DDR2_CKN_OP <= "1";
  DDR2_CKP_OP = "1";
  DDR2_CKN_OP <= "0";
 }

こういうスクリプトをいっぱい作れば、DDR2メモリへアクセスするための複雑な波形も作れるというわけです。

作ったスクリプトの全体は次のようになります。
「ddr2_test.cpp」をダウンロード

次の図は、実際に、そのスクリプトでDDR2 SDRAMメモリの初期設定(MRSやEMRSコマンドの発行)を行い、64バイトの乱数データを書き込んで、それを読み出した際の波形です。メモリから読み出したデータは、画面下のウィンドウにダンプされて表示されています。
Ddr2_ajfg
(クリックで拡大)

書き込みと、読み出しの部分を拡大すると、こんな感じです。リードコマンド(RAS=H、CAS=L、WEN=H)を与えてやると、SDRAMのほうからDQSを送ってきているのがわかります。
Ddr2_ajfg_mag
(クリックで拡大)


ところで、SDRAMはリフレッシュしなければデータが消えてしまうんではないの?と思う方もいるかもしれません。実は、そんなにすぐに消えるわけではありません。

データシート上では64ms以内に8192ラインをリフレッシュしなければならない・・などとされていますが、実際には(個体差もあるのでしょうが)リフレッシュをしなくても数秒間はデータを保ってくれます。今回試したMicronの256MbitSDRAMでは、4~5秒でメモリアレイのどこか1ビットが壊れるかどうかといったレベルなので、ゆっくりアクセスしたからといって、すぐにデータが全部壊れてしまうわけではないのです。

というわけで、バウンダリスキャンを用いて非常にゆっくりとSDRAMにアクセスしても、書き込んだデータをすぐに読み出せば、エラーなく読み出せるわけです。

こんなことして何が嬉しいのかというと、FPGAとSDRAMの間の結線を調べることができることや、FPGAのアプリケーションで書き込んだSDRAMのデータをちょこっと覗いて見ることができることです。

SDRAMの内容をちょいと見てみたいからといって、FPGAの論理回路を書き換えるのはとても面倒です。そういうときは、スクリプトを使ってFPGAの端子だけ操作して覗いてみるのがいいでしょう。論理合成もしないので、スクリプトを書き換えてから5秒程度で動きます。Additive Latencyを変えてみる実験やPosted Writeの実験などが気軽に行えます。
Ddr2_dos

FPGAで本番の論理合成をする前に、スクリプトでささっと書いて、遅くてもいいからテストができれば、FPGAの開発が今よりもずっと楽になるでしょう。

|

« MITOUJTAG Proを更新しました | トップページ | LatticeのXP2をはじめます »

コメント

コメントを書く



(ウェブ上には掲載しません)




« MITOUJTAG Proを更新しました | トップページ | LatticeのXP2をはじめます »