はじめに
このコンテンツでは、System ID Peripheral Core(以降 System ID Core)の概要と、ID がうまく認識しない時の回避方法について紹介します。
System ID Peripheral Core の概要
System ID Core は、Nios® II を搭載している Platfoem Designer (旧 Qsys) のシステム1つに付き、1つ搭載することのできる ペリフェラル です。
System ID Core を搭載する事で、Nios® II SBT for Eclipse(以降 SBT)の Run Configuration や Debug Configuration を使用してデバッグを実行する際に、正しいハードウェア・デザインとソフトウェアでデバッグを行おうとしているかチェックすることができます。
ハードウェア・デザインとソフトウェアの整合性がとれておらず、デバッグがうまくいかないなどの現象に陥ることを防いでくれます。
詳しい仕様は、以下のユーザーガイドを参照ください。
Embedded Peripherals IP User Guide > 40. System ID Peripheral Core
使い方
図1 のように、Platform Designer で System ID Core を IP Catalog から選択し、System Contents に追加します。
図1:Platform Designer に System ID Core を追加
IP Parameters で System ID を任意に設定可能です。
- System ID :Parameters の 32 bit System ID にて任意の ID を設定できます。
- Timestamp :ツールが自動的に割り振る為、ユーザーは設定できません。
clk と reset 、control_slave(Avalon Memory Mapped Slave)を各種接続します。
control_slave を Nios® II と接続しておくと、Nios® II から 表1 のレジスターマップを参照できるようになります。
表1:System ID Core レジスターマップ
Offset | Register Map | R/W |
0 | id | R |
1 | timestamp | R |
System ID Core を追加して、Platform Designer の開発が終了したら、Generate HDL を実行して、Quartus® Prime で階層設計するハードウェア・デザインと SBT で使用する sopcinfo ファイルが生成されるのを確認します。
Quartus® Prime でハードウェア・デザインの開発が終了したら、Assembler を実行して SOF ファイルを生成し、Programmer にて SOF ファイルを FPGA に書き込んでおきます。
SBT で sopcinfo ファイルを使用したソフトウェア開発が終了したら、Build を実行して ELF ファイルを生成しておきます。
ソフトウェアの動作を実機確認する為に、Run Configuration を起動します。
そこで、System ID チェックを実行するので、チェックに問題が無ければ Run As を実行できます。
図2 のように、Run Configuration の System ID Properties を開くことで、System ID と Timestamp を確認することができます。
図2:チェック成功時の Run Configuration の System ID Properties
また、System ID が組み込まれていない SOF ファイルを使用すると、図3 のように ”Not Found” と表示されます。またエラー文も左上に表示されます。
図3:チェック失敗時の Run Configuration の System ID Properties
System ID チェックを無視したい場合は、図4 のように Ignore mismatched system ID / Timestamp を有効にすることで、チェックを省いて Run As を実行可能です。
図4:Ignore mismatched system ID / Timestamp
Nios® II SBT Run/Debug Configuration で ID が認識しない場合
SOF ファイルと ELF ファイルの整合性が取れているはずなのに、System ID が認識せず、図3 のように "Not Found" と表示されてしまう場合、まず Ignore mismatched system ID / Timestamp を有効にして、Run As を実行してみてください。
恐らくほとんどの場合で、図5 のように "Downloading ELF process failed" のポップアップが表示されます。
図5:Downloading ELF process failed
このエラーが発生する原因は下記コンテンツで紹介しておりますが、今回の主な原因は、Nios® II や各種ペリフェラルに対して、Reset がアサートされていることです。
Platform Designer の reset_n 信号を各種ペリフェラルの Reset に接続しているのであれば、reset_n 信号が ディアサート(High)となっている状態で、Run Configuration を実行してみてください。
System ID が認識されて Run As も実行できるようになります。
System ID Peripheral Core を使用しない場合
System ID Core は Development Kit のゴールデン・リファレンス・デザインなどにも組み込まれているペリフェラル になりますが、必須ではなく推奨となっているので、入れるか入れないかの判断は開発者に委ねられています。
System ID Core がシステムに悪影響を及ぼすことは無いので、特に理由が無ければ、とりあえず入れておくものとお考え下さい。
System ID Core を入れないと判断した場合、Run Configuration はデフォルトで、ID チェックを実行するようになっていますので、図4 のように Ignore mismatched system ID / Timestamp を有効にして、 Run As を実行してください。
よくある ID が不一致となるケース
以下のような場合において発生しやすい現象です。正しく実行しているつもりでも今一度以下のポイントを確認してみてください。
- Platform Designer のみ再ジェネレートして Quartus® Prime でのコンパイルを忘れた
- Platform Designer の再ジェネレートでタイムスタンプは更新されてしまうため不一致
- ROM から起動するシステムで ROM のデータの更新を忘れた (SOF の書き込みを忘れた)
- 元々書き込んである期待値と新しいソフトウェアが期待している値の不一致
おすすめコンテンツ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。
本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。