最後の壁になったのはSDRAMでした
と、言うより、とても面倒くさそうだったので、最後まで手を付けなかったのがSDRAMです。
さてここで問題です、FPGAでSDRAMをコントロールするにはどうしたら良いでしょうか?
・・・・
はい、正解です。IP-Coreを使います。
「正解です」と言ったのは、それが常識だからです。
何度も書きますが、私はそういう常識を全く知らずに仕事を始めたもので
IP-Coreの使い方で知っていたのはFIFOとSRAMとPLLくらいでした。
UARTすら自作していましたもので。
外部のデバイスへのアクセスは、全て自作していました。
SDRAMへのアクセスが、その最大のものとなりました。
デバイスの配線を調べます、DQ[0:63]とか、RAS ,CAS,WE等が繋がっている事を確認します
これは、どうするかと言うと、デバイスを一旦外し、FPGAの各ピンをアウトプットに設定します(インプットに設定する方法もありますが、この時はシグナルタップが使えなかった。)カウンタを作成して、各ビットに割り当てます。
50MHzのクロックでカウンタを作成すると、bit0の周期は40nsecになりますbit1は80nsecとなります。これらをオシロスコープで確認していきます。
そうやって全てのピンの繋がりを確認して行きました。
カメラの配線ではポカをしていた上司ですが、基本的にはこの上司の回路はしっかりしていました。
実は、この上司を含め、私がFPGAを担当した回路では、DRAMが動かなかったことはありませんでした。いつもとても不安なのですが、その分だけ慎重だったからかもしれません。
そうやって一つ一つの信号を確認した後はマニュアルに沿って信号を入れていきます
信号はほとんどアクティブlowなので、信号をHighにしておけば悪さはしません
そこで最初に行ったのは、readですcas,rasとアドレスをセットすれば
そこに書かれたデータが読み出せます
まずは2回同じ値が読み出せれば、読み出しは動いてるんだろうと考えて
試すところから始めました・・・