guruguru123’s diary

かなり雑な作業日記です。

SDRAM動作の確認とADコンバータドライブ用ブロックの作成

前回AD9851の基準クロックをPapilioから供給すると言っていたが、あれは勘違いで実際にはAD9851基板に乗っている30MHz水晶発振器のクロックを6逓倍して180MHzを基準クロックとして用いている。そのため、w_clkは100MHzを供給しても問題ない。というか以前にAD9851ドライブプログラムを、w_clkを100Mhzでの動作試験をしたことを忘れていた。

W_CLKも100MHzにしたところで動作させると、どうも思ったとおりにAD9851の出力が出ない。おそらく高周波になっているため、配線が問題なのだろうとは思うがSDRAMが100MHzでも動作しているか確認することにした。

確認方法はSDRAMから読み出したデータをRS232CでPC上に表示させる。確認してみると、なぜだか0番目に2MHzのデータ、というようにアドレスとデータが一つずつずれている。

(データの書き込みはアドレスの0番目から1MHz,1番目に2MHz...,9番目に10MHzと格納している)

これでは一応SDRAMは動作しているといえるが、正しく動いているとはいえない。

この原因として、SDRAMへの書き込み、読み出しのリクエストのタイミングとデータの動機のタイミングのずれが考えられる。そこでRS232C通信の制御ブロックをSDRAMコントローラと同様なステートマシンとして記述しなおしてみた。すると、きちんと0番目に1MHzが書き込まれており、ずれが無くなった。

f:id:guruguru123:20171116221949p:plain上の画像を見ると16bitで10文字の40bitデータが10個SDRAMからの出力され、以下の各40bitデータと一致するため正しいことがわかる。

1Mhz :X"01016c16c1"; 2MHz :X"0102d82d82"; 3MHz :X"0104444444";
4MHZ:X"0105b05b05"; 5MHz:X"01071c71c7"; 6MHz: X"0108888888";
7MHz:X"0109f49f49"; 8MHz:X"010b60b60b"; 9MHz:X"010ccccccc";
10MHz:X"010e38e38e";

AD9851の出力波形も正しく出ていた。

これと平行してADコンバータドライブ用ブロックも作成した。内容はほとんどAD9851ドライブブロックと同じである。詳しい中身は次回書く。記述が終わったので、次回ADコンバータを実際に動かしてみる。