「MAX 10 NEEK」に搭載されたDDR3メモリを使う:MAX 10 FPGAで学ぶFPGA開発入門(10)(1/6 ページ)
MAX10搭載開発ボード「MAX 10 NEEK」には各周辺機器が備えられており、その中にはDDR3メモリも含まれる。ソフトコアCPU「Nios II」からの利用も含めて手順を紹介する。
Nios II On-die Temperature Sensor Design Example
先月も触れた、MAX 10 Evaluation BoardとTempSensorの話であるが、やっと問題が解決したので最初にこちらの話をしておきたい(MAX 10 FPGAで学ぶFPGA開発入門(9):「MAX 10 NEEK」へソフトコアCPUを組み込む)。
経緯を説明すると、アルテラのWebサイトで提供されるMAX 10 Evaluation Board用のサンプルである「Nios II On-die Temperature Sensor Design Example」(現在は存在しない:理由は後述)をダウンロードし、マニュアルの手順に従って構築する際、Quartus II 14.1を使う限りにおいては正常に動作するのだが、Quartus II 15.0、あるいはQuartus Primeを利用するとNIOS IIコアが正常に動作しないという現象が出ていた。この件に関して、Alteraより正式に原因と対処に関しての連絡を頂いた。
そもそも動かない原因は2つあり、1つはBSPの再ビルドが必要だった事、もう1つはADCの初期化コードが含まれていなかった事だ。1つ目については前回紹介した通り、TempSensor_bspの再構築を実施すればよい。問題は2つ目だ。
アルテラによれば、ADCに対してまず初期化の際に割り込み禁止を実施する必要があるとの事。ただしこれがAlteraのドキュメントから欠落しており、またサンプルコードにもこの割り込み禁止を行う処理が抜けていた。この結果、NIOS IIが起動してADCを有効にした途端、ADCからの割り込みが発生する事になる。悪い事に今回のサンプルでは割り込みハンドラが無いので、割り込みが発生してもユーザープログラムに制御が一切戻らないという事になっていた。
対策であるが、現在のサンプルでは初期化ルーティンが
//Starting the ADC sequencer IOWR(MODULAR_ADC_0_SEQUENCER_CSR_BASE, 0, 0); usleep(10); IOWR(MODULAR_ADC_0_SEQUENCER_CSR_BASE, 0, 1);
となっている。これを
//Starting the ADC sequencer IOWR(MODULAR_ADC_0_SEQUENCER_CSR_BASE, 0, 0); usleep(1000); IOWR(MODULAR_ADC_0_SAMPLE_STORE_CSR_BASE, 64, 0); IOWR(MODULAR_ADC_0_SEQUENCER_CSR_BASE, 0, 1);
と変更する事で解決できるとの話であった。この3行目に追加された "IOWR(MODULAR_ADC_0_SAMPLE_STORE_CSR_BASE, 64, 0);" が、ADCに割り込みの発生を禁止させる設定である。これを入れたところ、正常に動作するようになった(Photo01)。
ちなみになぜQuartus II 14.1で動作したのかであるが、Quartus IIでは明示的に初期化していない設定値をどう扱うか、に関してバージョン毎に異なっているのだそうで、「たまたま」Quartus II 14.1ではADCの割り込みを無効化する初期値になっていた。だが、Quartus II 15.0以降ではこれが変わってしまっていた、という事が真相の様だ。
既にこのNios II On-die Temperature Sensor Design Exampleは“Nios II On-die Temperature Sensor Design Example 2”(15.0用、15.1用)としてアップデートされており、こちらでは問題は解決している。またADCのドキュメントへの反映を現在本国に依頼中との事で、新しくサンプルをダウンロードすれば問題は解決する筈だ。ということで、やっと一件落着である。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「MAX 10 NEEK」へソフトコアCPUを組み込む
周辺機器の充実したMAX10搭載開発ボード「MAX 10 NEEK」に、ソフトコアCPU「NIOS II」を組み込み、ソフトコアCPUからボード搭載LEDの制御までを紹介する。 - 周辺機器の充実した「MAX 10 NEEK」で本格的な開発を目指す
FPGA開発において周辺機器(回路)は見落とせない要素の1つ。タッチパネルや各種出入力などを備えた「MAX 10 NEEK」を導入して、本格的な開発を目指す。 - FPGAのソフトコアCPUをベンチマークで測定する
FPGA「MAX10」に「NIOS II」と呼ばれるソフトIPコアを導入することで、ソフトコアCPUを構築できる。ではその処理能力はどれほどか。ベンチマークソフトで測定してみよう。 - FPGA上でソフトコアCPUを動かす手引き
これまでFPGAの開発基礎としてLチカなどを紹介してきたが、今回はちょっと目先を変えてFPGA上でのCPUコア動作に取り組む。今回も連載で使う「MAX 10 FPGA 評価キット」の読者プレゼントをご用意。 - よろしいならばダイナミック点灯だ――FPGAでLEDをダイナミックにLチカさせる
単純なLチカならばFPGAでもそう難しくない。ただ、ダイナミック点灯やそれに伴うソースの最適化については“ならでは”のポイントが散見される。今回も連載で利用している「MAX 10 FPGA 評価キット」の読者プレゼントをご用意。 - FPGAのLED制御プログラムを深く理解する
FPGA開発に必要なHDLへの理解を深めるため、MAX 10に用意されているArduino I/Oを利用してのLチカを行い、多灯LEDの制御を含めたプログラミングも解説する。今回も連載で使う「MAX 10 FPGA 評価キット」の読者プレゼントをご用意。