連載
» 2016年05月19日 07時00分 公開

「MAX 10 NEEK」に搭載されたDDR3メモリを使うMAX 10 FPGAで学ぶFPGA開発入門(10)(2/6 ページ)

[大原 雄介,MONOist]

MAX 10 NEEKに搭載されたDDR3メモリを使う

 さて、今回はNEEKに搭載されたDDR3メモリを使ってみたい。MAX 10 NEEKには、FPGA内に内蔵されたSRAMとは別に、外部にDDR3メモリが搭載されている。DDR3/LPDDR2のI/FはMAX 10に標準搭載されており、なので基本DDR3ないしLPDDR2を搭載すればMAX 10からこれを利用する事ができる。もちろん、NIOS IIからの利用も可能だ。

 MAX 10 NEEKのSystem CDを展開すると、Demonstrations\ddr3_niosの下に、NIOS IIからDDR3をアクセスするためのサンプルコードが用意されている。まずは手始めに、MAX 10 NEEKを起動してUSB Blaster IIを接続した状態で、Demonstrations\ddr3_nios\demo_batchの下にあるddr3_nios.batを起動すると、こんな画面になるはずだ(Photo02)。KEY0を押すと、NIOS IIからDDR3メモリへの読み書きがテストが開始される(Photo03)。問題がなければ、test結果は“Pass”になる。

Photo02 Photo02:ここで言う"KEY0"はNEEKのボード側のKEY0(スライドスイッチの左)である
Photo03 Photo03:ちなみにテストを止める方法は無いので、放っておくと延々とテストが繰り返される。

 このdemo_batchの下はバイナリの形で提供されているので、これを自分でビルドしなおしてみよう。

 Demonstrations\ddr3_nios の下を丸ごと他のフォルダにコピーして、Quartus IIから"File" → "Open Project..."でddr3_nios.qpfを選択してプロジェクトを開く(Photo04)。そのままコンパイルしてもいいのだが、構成を確認するためにQSYSを開いてみる(Photo05,06)。

Photo04:このサンプルはTerasic製 Photo04:このサンプルはTerasic製
Photo05 Photo05:先頭はTimerとかLED、スイッチ類が大量に入っている。ddr3_status、というデバイスがあることに注意
Photo06 Photo06:NIOS IIコアとかオンチップのSRAM、DDR3 I/Fなどは最後の方に

 メモリマップはこんな感じ(Photo07)で、0x08000000〜0xfffffffにDDR3メモリがマッピングされていることが分かる。マッピングを見る限り、スタックとかダイナミックな変数にDDR3の領域を使うのは、そのままでは無理(EclipseでC++のソースのビルドの際にリンクオプションで設定をしない限り自動では使ってくれない)だが、プログラム内からアドレスを指定して利用するのは問題なさそうだ。

Photo07 Photo07:オンチップメモリは0x0〜0x1f3ffまでにマッピングされている

関連キーワード

DDR3 | アルテラ | FPGA関連 | Eclipse


Copyright © ITmedia, Inc. All Rights Reserved.