はじめに
FPGA(Field Programmable Gate Array)は、ユーザーが自由に回路構成を定義できる柔軟なデバイスです。しかし、その特性ゆえに電源投入直後は何も動作しません。FPGA を機能させるためには、まず「コンフィグレーション」と呼ばれる初期化操作を行い、設計された回路データ(コンフィグデータ)をデバイスに書き込む必要があります。
本記事では、Agilex™ 3 FPGA を例にコンフィグレーションを行う方法を紹介します。
ポイント: Agilex™ 3 を例としていますが、他の Agilex™ ファミリーや Stratix® 10 など、Secure Device Manager (SDM) を採用したデバイスファミリー共通の手順となっています。SDM 非搭載のデバイスファミリーについても Quartus Programmer の操作方法としては参考にしていただけます。
1. コンフィグレーション方法の選択(MSEL)
Agilex™ 3 で選択可能なコンフィグレーション・スキームは以下の3通りです。どのモードを使用するかは MSEL と呼ばれる 3 本の FPGA 端子の状態で決定します。
【表 1】 コンフィグレーション方法の一覧
| スキーム | 説明 | MSEL[2:0] |
| JTAG コンフィグ | JTAG インターフェイス越しに FPGA に直接コンフィグレーション・データを流し込むモード。デバッグ時に頻繁に FPGA の回路データを変更する際に便利。 | 111 |
| AS (Active Serial) コンフィグ | FPGA が自ら Serial Flash ROM (QSPI Flash) へアクセスしてコンフィグレーションを行うモード。電源投入後、自動的にコンフィグレーションを実行させる最も一般的な方法。 |
001 (Fast mode) 011 (Normal mode) |
| AVST (Avalon-ST) コンフィグ | FPGA と 8bit もしくは 16bit のパラレルバスで接続されたマスターデバイス(CPLD, MCU など)からコンフィグレーションするモード。 |
101 (x16) 110 (x8) |
参考: Device Configuration User Guide Agilex™ 3 FPGAs and SoCs
ポイント: AVST コンフィグは SDM 搭載のデバイスファミリーから追加された新しいスキームです。JTAG コンフィグ、AS コンフィグについては SDM 非搭載のデバイスファミリーでも使用できます。
ここから、コンフィグデータを書き込む方法を紹介していきますが、AVST コンフィグについてはコンフィグデータの管理をマスターデバイス側で行うため本記事では扱いません。
2. コンフィグレーション手順(Quartus Programmer)
Quartus Programmer を起動してコンフィグデータを書き込むまでの流れを紹介します。JTAG コンフィグと AS コンフィグで書き込み対象が異なりますが基本的な操作は共通です。
ポイント: 書き込み対象のファイル形式が、JTAG コンフィグと AS コンフィグで異なります。JTAG コンフィグの場合は .sof もしくは .rbf を使用、AS コンフィグの場合は .jic 形式のファイルを使用します。
2-1. ツールを起動
Windows の場合はスタートメニューから、Linux の場合は Quartus のパスが通ったターミナルで "quartus_pgmw" を実行することでツールが起動します。
【図 1】 ツールの起動
2-2. デバイスの検出(Hardware Setup ~ Auto Detect)
Hardware Setup ボタンを押して、接続対象の JTAG ハードウェアとクロック周波数を指定します。続けて Auto Detect ボタンをクリックします。
【図 2】 デバイスの検出
2-3. ファイルと操作の選択
Auto Detect されたデバイスを選択した状態で、Change File ボタンをクリックして書き込み対象ファイルを選択します。続けて書き込み対象デバイスの Program/Configure にチェックを入れてください。
ポイント: JTAG コンフィグ用の .sof/.rbf 選択時と、AS コンフィグ用の .jic 選択時で表示されるデバイスに違いがあります。AS コンフィグの場合は QSPI Flash へ書き込みを行う点にご注意ください。Flash への書き込みの場合は書き込み後の Verify も選択可能です。
【図 3】 ファイルと操作の選択
2-4. 書き込み実行
Start ボタンをクリックすると書き込みが始まります。右上のプログレスバーが「100% (Successful)」の表示になれば書き込み完了です。
【図 4】 書き込み実行
Quartus Programmer を使用したコンフィグレーションの手順は以上です。
3. 応用:コマンドライン・ツールの利用
Quartus Programmer を毎回起動するのが面倒なユーザー向けに、コマンドラインで対応する方法についても紹介します。特に JTAG コンフィグを使用してデバッグを繰り返すような場合に便利です。
最初に紹介した Quartus Programmer ツールのコマンドライン版として、quartus_pgm というツールが利用できます。このツールは Nios V Command Shell など、Quartus Prime のパスが通ったターミナル上でコマンド入力して使用します。
ポイント: よく使うコマンドをテキストで保存しておけば、ターミナルを起動してコマンド列をコピー&ペーストするのみでコンフィグレーションが行えるため時短になります。
3-1. 基本的な使い方
ポイント: Windows 環境で使用する場合は quartus_pgm.exe (拡張子付き) でコマンドを入力します。
基本構文:
quartus_pgm -c <ケーブル番号> -m <モード> -o <操作>JTAG 接続の確認1(ケーブル番号のリストを表示):
quartus_pgm -lJTAG 接続の確認2(ケーブルに接続されるデバイスのリストを表示):
quartus_pgm -c <ケーブル番号> -a
【表 2】 quartus_pgm で良く使うオプション
| オプション | 説明 |
| -l | 接続されているケーブルの一覧を表示 |
| -c <ケーブル番号> | 使用するケーブルを指定(例: -c 1 ) |
| -m <モード> | コンフィグレーション・スキームを指定(例: jtag, as) |
| -o <操作> |
実行する操作(例 -o "P;filename.sof@1")
※@1 は JTAG チェーンに表示されるデバイスの番号(表示順)(ターゲットがチェーンの最初に表示されるなら @1) |
| --help または -h | ヘルプを表示 |
3-2. 実行例(JTAG モード:.sof ファイルの書き込み)
JTAG モードでコンフィグレーションを行うためのコマンドラインを実例として紹介します。
quartus_pgm -c 1 -m jtag -o "P;filename.sof@1" メモ: 以下の表示例だけ Agilex™ 5 デバイスで記載していますが、Agilex™ 3 でも同じです。
実行時のターミナル表示:
【図 5】 接続されるケーブル、デバイスの確認
【図 6】 書き込み実行、完了後のデバイス表示(HPS ありの場合)
注記: HPS (Hard Processor System) を含むデザインを使用する場合は、初回のコンフィグが完了して HPS がブート開始した時点で、JTAG チェーンに ARM の SoC デバイスが追加されます。そのため、初回と2回目以降で -o オプションの最後に指定するデバイス番号を @2 に変更する必要がある点にご留意ください。
まとめ
今回は Quartus Programmer を使用した FPGA コンフィグレーションの方法について紹介しました。GUI ツールとコマンドラインの両面からコンフィグレーションの操作を理解することで、用途に応じて使いやすい方法を選んで対応して頂ければと思います。
コンフィグレーションは FPGA を動かすための最初の手順です。コンフィグレーションを理解いただいたことで、Agilex™ 3 をはじめとする FPGA リファレンス・デザインを動かしてみるための準備ができました。
「Agilex™ 3 でやってみた」シリーズ一覧はこちら