インテル® MAX® 10 FPGA にはフラッシュメモリーが内蔵されており、後述で示す通り CFM/UFM という形で提供されます。この時 Nios® II のソフトウェアをフラッシュメモリーに格納する場合 UFM に実装することになりますが、フラッシュメモリーのサイズとしては CFM を含めた全体のサイズで定義されます。
このため Nios® II を使用する際にプログラム・サイズが On-Chip Flash の UFM 領域のサイズを超えていても Error として通知されません。
その為、MAX® 10 の UFM にユーザープログラムを格納する場合には、ユーザー側で常にサイズに注意する必要があります。
この記事では、MAX® 10 で Nios® II を使用する際の On-Chip Flash での注意点と対処方法について説明します。
- MAX® 10 デバイスの On-Chip Flash
- MAX® 10 で Nios® II を使用する際の On-Chip Flash での注意点
- 対処方法
1. MAX® 10 デバイスの On-Chip Flash
MAX® 10 は、低コスト、シングルチップ、スモール・フォーム・ファクターの不揮発性プログラマブル・ロジック・デバイスです。アナログ・デジタル・コンバーター(ADC)や、2 つのイメージを格納してダイナミックに切り替えることが可能なデュアル・コンフィグレーション・フラッシュメモリーなどの機能をシングルチップ上に搭載しています。
また、Nios® II ソフト・コア・エンベデッド・プロセッサーのサポート、デジタル信号処理(DSP)ブロック、ソフト DDR3 メモリー・コントローラーといった、フル装備の FPGA 機能を備えています。
インテル® MAX® 10 FPGA についての詳細は、以下のページを参照ください。
インテル® MAX® 10 FPGA (インテル)
MAX® 10 には、On-Chip Flash が 2 つの部分に分割されています。
● ConfigurationFlash Memory(CFM)
MAX®10 のハードウェア・コンフィギュレーション・データを格納します。
● UserFlash Memory(UFM)
ユーザーデータまたはソフトウェア・アプリケーションを格納します。
MAX® 10 の UFM についての詳細は、以下の資料を参照ください。
Intel® MAX® 10 User Flash MemoryUser Guide (英語版)
MAX® 10 ユーザー・フラッシュメモリー・ユーザーガイド (日本語版)
2. MAX® 10 で Nios® II を使用する際の On-Chip Flash での注意点
Platform Designer(旧 Qsys)にて On-Chip Flash Intel FPGA IP(Altera On-Chip Flash IP)を下図のように設定した場合、Nios® II SBT では UFM 領域のみならず、CFM の領域まで On-ChipFlash として見えています(この資料では、MAX® 10 の 10M08 デバイスを例として説明しています)。
Nios® II SBT の BSP Editor から見ても、UFM と CFM の区別はしておらず、CFM も含めたサイズ(319456 Bytes)として On-ChipFlash 領域が見えています。
注意点1. プログラムが UFM より大きいサイズの場合でも Error にならずビルドが通ってしまう
上記のことから、.text を On-Chip Flash に配置する際は、プログラム(.elf ファイル)が UFM に収まるかではなく、On-Chip Flash に配置できるかでしかビルド時に判定されません。
つまりプログラムが UFM より大きいサイズの場合でも Error の表示無くビルドが通ってしまいます。
そのため UFM のサイズを考慮してプログラムを作成する必要があります。
注意点2. サイズオーバーした elf ファイルは HEX 変換や POF 生成を行っても Error にならない
.elf ファイルはその後、
● HEX に変換
● POF を生成
● プログラムする
などに使用されますが、サイズオーバーした elf ファイルは、これらのどの過程でも Error は発生しません。
【参考】
NiosR II SBT でプログラムを HEX ファイルに変換する方法や、QuartusR Prime で SOF ファイルと UFM 用 HEX ファイルから POF ファイルを生成する方法については、以下のページが参考になります。
MAX® 10 の UFM で Nios® II をブートさせてみよう [前編]
MAX® 10 の UFM で Nios® II をブートさせてみよう [後編]
3. 対処方法
Nios® II SBT の BSP Editor 上であらかじめ配置できるセクション・サイズに変更します。
セクション・サイズを変更することでビルド時に Error として出力されるようになります。
① Platform Designer の On-Chip Flash Intel FPGA IP(Altera On-Chip Flash IP)において UFM として使用できる領域を確認します。
例) この例では、0x0 ~ 0x1c7ff まで使用可能です(※ 0x1c800 → 116736 Byte)
② Nios® II SBT の BSP プロジェクトを右クリックし、「Nios II」⇒「BSP Editor」を開きます。
③ BSP Editor の LinkerScript タブにおいて、onchip_flash_data の領域を Platform Designer で確認したサイズに設定します。このとき、先頭の 32 Byte(リセットベクター領域)を引いた値で設定します。
例) 10M08 の場合は、 116736 -32 = 116704 Byte
④ [Generate]ボタンをクリックし、その後[Exit]ボタンをクリックします。
⑤ Nios® II SBT の Applicationプロジェクトを右クリックし、「Build Project」を実行します。
本問題に対応するために、MAX® 10 の UFM 内にソフトウェアが収まるかどうかを簡易的にチェックするソフトウェア check_size.exe (check_size.c)を用意しました(別途、ダウンロードしてください)。
※ ソフトウェアcheck_size.exe (check_size.c) は、参考として提供するものであり、運用した結果の影響については責任を負いかねますので、あらかじめご了承ください。
このソフトウェアでは、Nios® II SBT の Applicationプロジェクト内でビルド時に作成された .objdump ファイル内の記載から対象セクションのサイズを抜き出し足し合わせて、最終的にどれくらいのサイズが必要なのかを出力しています。
⑥ Nios® II SBT によるビルド後、Nios® II Command Shell より下記コマンドを入力し check_size.exe を実行して、作成したソフトウェアが指定したUFM に収まるかを確認します。
※ check_size.exe を実行する前に、Application プロジェクト・ディレクトリーに check_size.exe をコピーしておきます。
ソフトウェア・サイズ・チェック・プログラム(Cソースコード)
ソフトウェア・サイズ・チェック・プログラム (実行ファイル)
max10_ocflash_check_size_r1__1.pdf
PDF 版(内容は本記事と同一です。)/Rev.1
おすすめ記事/資料はこちら
おすすめ FAQ はこちら
おすすめセミナー/ワークショップはこちら
Quartus®Prime 入門編トライアル・コース <無料>
カスタムマイコン設計トライアル ~MAX® 10 FPGA を使った組込み設計を体感!~ <無料>