Article header library fpga article  5

MAX® 10 の On-Chip Flash を使用するときの注意点

インテル® 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

MAX® 10 は、低コスト、シングルチップ、スモール・フォーム・ファクターの不揮発性プログラマブル・ロジック・デバイスです。 アナログ・デジタル・コンバーター(ADC)や、2 つのイメージを格納してダイナミックに切り替えることが可能なデュアル・コンフィグレーション・フラッシュメモリーなどの機能をシングルチップ上に搭載しています。

また、Nios® II ソフト・コア・エンベデッド・プロセッサーのサポート、デジタル信号処理(DSP)ブロック、ソフト DDR3 メモリー・コントローラーといった、フル装備の FPGA 機能を備えています。

インテル® MAX® 10 FPGA についての詳細は、以下のページを参照ください。
インテル® MAX® 10 FPGA (インテル)

MAX® 10 には、On-Chip Flash が 2 つの部分に分割されています。

 ● Configuration Flash MemoryCFM
   MAX® 10 のハードウェア・コンフィギュレーション・データを格納します。
 ● User Flash MemoryUFM
   ユーザーデータまたはソフトウェア・アプリケーションを格納します。

MAX® 10 の UFM についての詳細は、以下の資料を参照ください。
Intel® MAX® 10 User Flash Memory User 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-Chip Flash として見えています(この資料では、MAX® 10  の 10M08 デバイスを例として説明しています)。

Article header 1  187

図1 On-Chip Flash IP の設定

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

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 のアレイサイズ

Article header 4  110

図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 を生成した場合のログ

【参考】
Nios® II SBT でプログラムを HEX ファイルに変換する方法や、Quartus® 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 の Linker Script タブにおいて、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

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

おすすめ FAQ はこちら

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

関連タグ