Nios® II を実行しようとした時、エラーが発生して実行できない原因
Nios® II SBT で Build は通るのに、Nios® II を実行させようとするとエラーが発生する原因をいくつか紹介します。
特に、"Downloading ELF process failed" エラーが発生する事が多いかと思います。
下記の原因が全てではありませんが、一度、確認してみるのも良いかと思います。
1. FPGA がコンフィグレーションされていない。または、バージョンの異なる Quartus® Prime と Nios® II SBT で実行した場合
最も初歩的なミスです。実行しようとする Nios® II が実装された FPGA デザインでコンフィグレーションしてから使いましょう。
また、FPGA のデザインをコンパイルした Quartus® Prime のバージョンと、Nios® II を実行させる Nios® II SBT のバージョンが異なる場合も正常に動作しない場合があります。
System ID Peripheral Core を使用する事で、Configuration Data(SOF)と Nios II 実行ファイル(ELF)の整合性が取れていない事を確認してから、Run を実行できるようになります。
📖 Nios® II System ID Core で ID が一致しない際の確認事項
2. FPGA デザインで、Nios® II のクロックが正しく入力されていない。または、リセットがかかりっぱなしになっている
ソフトウェア的なアプローチでは見つかりにくいミスですが、シグナルタップ・ロジック・アナライザーなどを使って、Nios® II に入力されるクロックとリセットの状態を確認してください。
3. FPGA デザインがタイミング収束できていない
4. JTAG ポートの接続または設計不良
5. Reset Vector や Exception Vector がROMに割り当てられている場合(.text が ROM に割り当てられている場合)
6. バスロックを誘発させるようなモジュールが実装されている場合
7. ダウンロード対象のメモリがフラッシュメモリーになっている
ワンポイント・アドバイス
上記のエラーが発生した場合にはコマンドライン (Nios® II Command Shell) からソフトウェアを実行してみてください。その時のログによって原因の特定につながるかもしれません。
Nios® II Command Shell を起動して以下のコマンドを使用してソフトウェアをダウンロードします。
$ nios2-download -g xxx.elf
JTAG_UART からの出力もコマンドラインに出力するには
$ nios2-download -g xxx.elf && nios2-terminal
として実行します。
この時のログは以下のようになります。
・正常時
・異常時
上記の場合には Nios® II が Nios® II SBT からのリクエストを受け付けていない状態であることがわかります。これは先の通りリセットの接続や極性に起因していることが多くあります。
このような形で問題が推測できるかもしれませんのでぜひお試しください。
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。