DE0 nano搭載SDRAM制御(便利なサイトまとめ)
1. はじめに
Amazonでも売っているFPGA評価ボードDE0 nanoを買いました。これ、マジでおすすめです。スペックは下のリンクの通り。1万でこれだけいろいろ揃っているのは素晴らしすぎるし、何より給電と書き込みがUSBで出来る点。これが実はかなり重要。ロジック規模なども個人で使うには十分すぎる量です。
2. SDRAMとは
SDRAM(Synchronous Dynamic Random Access Memory)とはシンクロナス、つまり同期式のDRAMです。DRAMは下図のような構造になっており、コンデンサに充電されているかどうかで1,0を記録します(充電されていれば1、されていなければ0)。
読み書き動作の説明はこのpdfがめちゃめちゃわかりやすい。
http://www.osakac.ac.jp/labs/matsuura/japanese/lecture/semicondic/oubun/ou001.pdf
この構造上、時間が経てばコンデンサは自然放電してデータを消失してしまいます。これを避けるために、DRAM/SDRAMは定期的にデータを書き直すのですが、これをリフレッシュと言います。またさっきのpdfにもありますが読み込み時にも放電するので、読み込み後もそのビットはデータを書き直さなければなりません。
こうやって見ると制御がすごく難しそうに見えますが、リフレッシュする時は定期的にリフレッシュコマンドを一つ投げれば、全データ自動でリフレッシュしてくれますし、読み込み後のデータ再書き込み(プリチャージ)も、オートプリチャージ付きリードコマンドを使う事で自動でやってくれます。
3 SDRAMの制御
制御信号について話す前に、DE0 nanoに乗っているSDRAM「IS42S16160G-7TLI」のアドレスマップについて紹介します。4M(Address)×4(bank)で、イメージとしては下記の図のようになります。これらのアドレスはRow Addressが13bit、Column Addressが9bitあり、2^13 × 2^9 = 2^22通りあります。2^22 = 2^2 × 2^10 × 2^10なので4M Addressとなります。ちなみに1アドレス当たり16bitのデータを保存できるので4M(Address)×4(bank)×2(byte data) = 32M(bit data)となります。
↓制御の状態遷移図と参考にしたVerilogソース
http://www.hmwr-lsi.co.jp/fpga/fpga_10.htm
↓SDRAMの基本的な書き込み読み込みコマンドについてわかりやすく解説しています。
技術レポート「マイコンによるSRAM、SDRAM制御」|ソフテックだより|株式会社ソフテック