インテル® FPGA の Nios® II プロセッサーを開発する際に、Nios II Software Build Tools for Eclipse (以下、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 のクロックが正しく入力されていない、 または、リセットがかかりっぱなしになっている
ソフトウェア的なアプローチでは見つかりにくいミスですが、Signal Tap ロジック・アナライザー などを使用して、Nios II に入力されるクロックとリセットの状態を確認してください。
要因 3. FPGA デザインがタイミング収束できていない
ダウンロードできたりできなかったり、デバッグ途中で切断されるなど、不安定になる場合の原因の1つです。
要因 4. JTAG ポートの接続または設計不良
接続不良または設計不良によって JTAG ポートにノイズが乗っている場合には、接続が不安定になる場合があります。
インテル FPGA ダウンロード・ケーブル II (USB-Blaster II) を使用している場合には、TCK 周波数の変更が可能です。低周波数へ設定し再度確認してください。
USB-Blaster II の TCK 周波数を変更してみよう
要因 5. Reset Vector や Exception Vector が ROM に割り当てられている場合 (.text が ROM に割り当てられている場合)
Nios II SBT から直接 ROM のプログラムを書き換えることはできません。
もし ROM に書かれた実行可能なプログラムのデバッグを行いたい場合は
Nios II SBT の Run Configuration > Target Connection タブ > Download ELF to selected target system オプション
のチェックを外して実行してください。
Run/Debug Configuraiton の各種オプション紹介は、下記コンテンツで紹介しています。
Nios® II SBT for Eclipse における Run/Debug Configuration 設定の使い方
要因 6. バスロックを誘発させるようなモジュールが実装されている場合
ユーザーが作成したモジュールを Platform Designer に実装した際などに多く見られる現象で、実装されていないアドレスにアクセスしたり、Avalon®-MM (Avalon® Memory Mapped Interface)で規定されていない信号の動作を行った場合、Platform Designer の Interconnect Bus がロックしてしまう場合があります。
要因 7. ダウンロード対象のメモリーがフラッシュメモリーになっている
Nios II SBT から直接ダウンロード可能なのは RAM のみです。
フラッシュの場合には、あらかじめ別のツールを用いてソフトウェアを書き込んでおく必要があります。(RAM に展開後、動作させる場合を除く)
つまり .text 領域を ROM に割り当てている場合、Nios II SBT は ROM に対してソフトウェアをダウンロードしようと試みますが、これは "エラーになる" ということです。
メモリーの割り当てを確認するには、bsp-editor を開き Linker Script タブを確認します。
以下のとおり、各セクションに割り当てられているメモリーが確認できます。(以下の例では、すべて nios_ram と名付けられたオンチップ・メモリーに配置されます。)
上記の通り Reset Vector が ROM であっても .text の配置が RAM 領域であれば Nios® II SBT からのダウンロードは可能です。
.text を ROM に配置する XIP 構成における Debug 方法は、下記コンテンツを参照してください。
Nios® II SBT for Eclipse における Run/Debug Configuration 設定の使い方 > 5. XIP 構成におけるデバッグの方法
ワンポイント・アドバイス
上記のエラーが発生した場合には、コマンドライン (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 からのリクエストを受け付けていない状態であることがわかります。
これは先に述べたとおり、リセットの接続や極性に起因していることが多くあります。
このような形で問題が推測できるかもしれませんので、ぜひ試してください。
おすすめ記事/資料はこちら