CPUを含めた回路はFPGAが便利
ARMはハードマクロとして物理的に組み込まれているので別ですが、
NIOSやMicroblazeなどのソフトマクロCPUは便利です。
私が論理回路からのエンジニアだったので、ソフト処理は極力少なくしようと設計していました。
そんな中、便利だなぁ~と思ったのが、
- CPUが何個も配置できる
- メモリサイズが変更できる
- 内部メモリにそのままプログラムが保存できる
でした。
CPUが何個も配置できる
FPGAのリソースもありますが、これは便利でした。
特に、レジスタのリード/ライトや低周期アクセスの通信系はCPU1に任せ、
Etherなど処理を速くするものは、CPU2で専門にさせるなどしていました。
メモリサイズが変更できる
CPU1とCPU2のプログラム量に応じてCPUが使用するメモリサイズを変更できるので、空いた分、User Logicで使うことができました。
内部メモリにそのままプログラムが保存できる
CPUが使うプログラムメモリを内蔵RAMに指定できることです。
これにより、外部(基板上)にプログラムを格納するFlashが不要になる。
ことでした。
Nios IIでは、「Nios II Software Build Tools for Eclipse」からCPU1またはCPU2を選択して書き込みができ、デバッグも容易でした。
どのような仕組み?
簡単に言うと、内蔵RAMの初期値ファイルをCPUのプログラムデータとしておく。
ということです。
下がイメージ図です。
① CPU1とCPU2のC言語ソースファイルを作成します。
「Nios II Software Build Tools for Eclipse」で、CPU1用とCPU2用を作ります。
② それぞれ「Nios II Software Build Tools for Eclipse」でコンパイルします。
コンパイル後、「Make Targets」で、内蔵RAMの初期値フォーマットに変換します。
③ Quartusを実行し、コンフィグレーションコードを生成します。
最初の場合、「Make Targets」で作成した「meminit.qip」をそれぞれQuartusに設定します。
以降は、関連付けされているので、設定する必要はないです。
④ コンフィグレーションコードを基板上のROMに書き込みます。
あとは、電源を投入するとROMの内容がFPGAに書き込まれ、自走します。
補足)
Quartusですでにコンパイルが済んでおり、NIOSのプログラムのみ修正した場合は、
- 「Nios II Software Build Tools for Eclipse」でソースをコンパイル
- 「Nios II Software Build Tools for Eclipse」で「Make Targets」を実行
- 「Quartus」で[Processing] ⇒ [Update Memory Initialization File] を実行
- 「Quartus」でAssembler を実行
の手順でコンフィグレーションコードを生成できます。
すでに論理合成と配置配線が完了しているので、内蔵RAMの初期値データだけ変更するだけで済み、Quartus実行時間も少なくてすみます。
最後に
仕組みを理解すると、手順のイメージが付くと思います。
Niosコードを修正した場合の手順、RTLソースを修正した場合の手順、Platform Designerで構成を修正した場合の手順などの実行イメージが付くと思います。