CQ出版のFPGA電子工作スーパーキット付属のMAX10基板にはSDRAMを搭載できるスペースがありますが、SDRAM自体は別に買わなければなりません。
書籍で推奨されているのはAlliancememoryのAS4C32M16SAまたは
AS4C16M16SAですが、秋月電子でも買えるELPIDA(現Micron)のEDS1216AGTAを搭載してみました。
なお AS4C32M16SAは64Mバイト、AS4C16M16SAは32Mバイトで、これに比べると今回取付けるEDS1216AGTAは16Mバイトと少な目ですが、これだけあれば大抵の事には困らないと思います。
取付けるにあたってまずAS4C16M16SAとEDS1216AGTAのデータシートを見比べるとEDS1216AGTA の方がアドレスピンが一本少ない(NCになっている)事以外はピン配置は同じです。なのでそのままハンダ付けしました。
動作確認のため、書籍「FPGA電子工作スーパーキット」の15章に従いQuartusPrimeを立ち上げてQsysを開きます。
QsysのSDRAMコントローラの設定ではRowアドレス幅を12本、Columnアドレス幅を9本にするのが書籍の説明と異なるところです。
以上のままでも動作したのですが、一応データーシートとにらめっこして最適と思うタイミングにしたのが下の設定。
あとは書籍の通りでコンフィグは完了し、NiosⅡ上でSDRAMのチェックプログラムを実行するためmain.cの先頭部分にあるSDRAMサイズ設定を次の様に変更しました。
#define SDRAM_SIZE (16 * 1024 * 1024) // 128Mbit
以上でメモリーチェックも問題なくパスしています。
どうも、初めまして。
同じボードをずっと持っていて、ぼちぼち取り掛かろうと思って(かなり遅れて)色々情報や部品を集めているところ、こちらのページにたどり着きました。
素晴らしいチャレンジを始めましたね😃
非常に参考になります。
ありがとうございます。
ちょくちょく見させていただいております。
春運さん、こんにちは。
私もこの記事を書いた後は放置状態で殆ど忘れています。
今も秋月電子にこのメモリーがあるかなーと思って見たところ、まだありますね。
更にHY57V281620ETPというパッと見が同等のが100円で売られているので、これも面白そうですね。
面白いものを作られたら是非教えてください。
ほいほい堂本舗さん
早速のお返事、ありがとうございます。正直、返事は来ないかもと思っていました。本当に嬉しい限りです。
秋月電子でもう確認済みですが、Timingのパラメータの設定方法がまだ解らず、今SDRAMの基本動作と各信号のタイミングを理解しようとひっそりやってるところです。素人に解りやすいページをご紹介いただけると非常にありがたいです。
色々探していますが、Timingの各パラメータを埋めるまでは到達していないんです、、、。
僕も同じEDS1216AGTAのデータシートとにらめっこしていますが、初っ端から解りません。
例えば、Initialization refresh cycles。どこ?何か算出するものなのか?とか、一人でぶつぶつです。
何かご教示いただけたら本当にありがたいです。
因みに、FPGAで何かして遊びたいと思っていて、具体的な目的があった方がいいと思って、ブラシレスモーターのコントローラーを作ってみたいと決めました。Arduinoとかで作れたんですが、やっぱ次はFPGAでしょうと、、、。
失礼いたします。
おお、私もちょうどブラシレスモーターをイジっているところです。
といってもオープンソースのファームウェアを使ってなのですけどね。(この内容はここ数日順次投稿しています)
SDRAMのタイミング設定ですが、すみません、殆ど忘れています。でも多分Initializetion refrash cyclesはEDS1216AGTAデーターシートの(手持ちのPDFでは)23ページに記載があるInitialization sequenceの説明を見たのだと思います。
ここに「After tRP delay, set 8 or more auto refresh commands (REF).」と書かれているので8回以上オートリフレッシュコマンドを入れると解釈したのだと思います(が、どうなんでしょうね?)。
書籍の例では2なので随分大きい気もしましたが、電源立上げ直後だけなので動作速度に影響ないだろうという目論みもあったと思います。