インテル® 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 での注意点と対処方法について説明します。

  1. MAX® 10 デバイスの On-Chip Flash
  2. MAX® 10 で Nios® II を使用する際の On-Chip Flash での注意点
  3. 対処方法

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 MemoryCFM
   MAX®10 のハードウェア・コンフィギュレーション・データを格納します。
 ● UserFlash MemoryUFM
   ユーザーデータまたはソフトウェア・アプリケーションを格納します。

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 デバイスを例として説明しています)。

Article header 1  187
図1 On-Chip Flash IP の設定

Nios® II SBT の BSP Editor から見ても、UFM と CFM の区別はしておらず、CFM も含めたサイズ(319456 Bytes)として On-ChipFlash 領域が見えています。

Article header 2  185
図2 Nios® II SBT から見た On-Chip Flash 領域

注意点1. プログラムが UFM より大きいサイズの場合でも Error にならずビルドが通ってしまう

上記のことから、.text を On-Chip Flash に配置する際は、プログラム(.elf ファイル)が UFM に収まるかではなく、On-Chip Flash に配置できるかでしかビルド時に判定されません。

つまりプログラムが UFM より大きいサイズの場合でも Error の表示無くビルドが通ってしまいます。

そのため UFM のサイズを考慮してプログラムを作成する必要があります。

Article header 3  139
図3 UFM と CFM のアレイサイズ
図4 Nios® II SBT でビルドしたプログラムが 10M08 の UFM サイズ 32 KB を超えた例

注意点2. サイズオーバーした elf ファイルは HEX 変換や POF 生成を行っても Error にならない

.elf ファイルはその後、
 ● HEX に変換
 ● POF を生成
 ● プログラムする
などに使用されますが、サイズオーバーした elf ファイルは、これらのどの過程でも Error は発生しません。

Article header 5  79
図5 HEX に変更した場合のログ
Article header 6  55
図6 POF を生成した場合のログ

【参考】
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)

Article header 7  42
図7 On-Chip Flash IP において UFM として使用できる領域を確認

② Nios® II SBT の BSP プロジェクトを右クリックし、「Nios II」⇒「BSP Editor」を開きます。

Article header 8  28
図8 Nios II SBT の BSP Editor を開く

③ BSP Editor の LinkerScript タブにおいて、onchip_flash_data の領域を Platform Designer で確認したサイズに設定します。このとき、先頭の 32 Byte(リセットベクター領域)を引いた値で設定します。
  例) 10M08 の場合は、 116736 -32 = 116704 Byte

Article header 9  27
図9 変更前の onchip_flash_data のサイズ(10M08 の場合の例)
Article header 10  24
図10 変更後の onchip_flash_data のサイズ(10M08 の場合の例)

④ [Generate]ボタンをクリックし、その後[Exit]ボタンをクリックします。

Article header 11  19
図11 [Generate] ボタンをクリックし、その後 [Exit] ボタンをクリック

⑤ Nios® II SBT の Applicationプロジェクトを右クリックし、「Build Project」を実行します。

Article header 12  17
図12 Application プロジェクトのビルド

本問題に対応するために、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 に収まるかを確認します。

Article header command  1

※ check_size.exe を実行する前に、Application プロジェクト・ディレクトリーに check_size.exe をコピーしておきます。


Article header 13  21
図13 check_size.exe ツールによる UFM に収まる場合の表示例
Article header 14  13
図14 check_size.exe ツールによる UFM に収まらない場合の表示例

check_size__1.c

ソフトウェア・サイズ・チェック・プログラム(Cソースコード)

check_size__1.exe

ソフトウェア・サイズ・チェック・プログラム (実行ファイル)

max10_ocflash_check_size_r1__1.pdf

PDF 版(内容は本記事と同一です。)/Rev.1

おすすめ記事/資料はこちら

インテル®FPGA の開発フロー/FPGA トップページ

おすすめ FAQ はこちら

インテル® FPGA 関連の FAQ

おすすめセミナー/ワークショップはこちら

Quartus®Prime 入門編トライアル・コース <無料>
カスタムマイコン設計トライアル ~MAX® 10 FPGA を使った組込み設計を体感!~ <無料>