皆さんこんにちは。吉村(@alterakey)です。ATLでFPGAの調査をしています。

FPGAとは

FPGA(Field Programmable Gate Array)とは書き換え可能なカスタムチップです。カスタムチップとはある用途に特化した計算回路です。計算回路の汎用性を犠牲にすることで高い処理速度電力効率が得られます。身近なところでは、ハイエンドなレイヤ2スイッチの制御部に採用例があります。

アルゴリズムの実装

プロセッサ(CPU・GPU)やFPGAで処理を行なうにはアルゴリズムを実装します。アルゴリズムを実装するにはプログラムを与えます。しかしプロセッサとFPGAが要求するプログラムは異なります。以下、解説します。

プロセッサにとって、プログラムとは一連の指令です。プロセッサに一連の指令を与えると、順次読み取り動作します。プロセッサを使用した開発におけるアルゴリズムの実装とは、希望する処理に合わせ指令を正しく羅列することです。

一方でFPGAにとって、プログラムとは構成情報です。構成情報とは内部ユニット類(論理演算・DSP・メモリ)の設定・結線・信号線配置を含む情報で、フローと呼ばれます。FPGAにフローを与えると内部ユニットの構成が変化し、信号の流れ(パイプライン)が組まれます。FPGA開発におけるアルゴリズムの実装とは、希望する処理を行なうパイプラインを組むことです。

フローは電子回路図のようなものです。何かのアルゴリズムをフローとして実装するにはハードウェアに密着した設計が必要です。ハードウェアに密着した設計とは、信号の入出力はどのピンか、から始まりどのように信号を加工してゆくかというような低レイヤーの設計です。低レイヤーの設計では信号タイミングの問題を無視できないので緻密な設計が要求されます。そのためFPGA開発におけるアルゴリズム実装は、プロセッサを使用する場合と比べ敷居が一段と高いものでした。

開発環境

さてFPGA開発を実際に見てみましょう。FPGA開発には開発環境が必要です。FPGA関連技術においてはAltera社とXilinx社の2社が先行しています。本稿ではAltera社のFPGA開発環境について解説します。

Altera社の開発環境は統合開発環境です。Altera社のFPGAであればボードが違っても、共通の開発環境が使えます。ボードとはチップと周辺機器を搭載する基板です。

本稿で使うFPGAはAltera社のCyclone V SoCです。ボードにはDE1-SoC(Terasic社)を使用します。

開発環境のインストール

開発環境はQuartus IIです。Altera社から入手します。入手できる開発ツールには無償版と有償版があります。本稿では手軽に試せる無償版について解説します。

Note

現在、Quartus IIの名称がQuartus Primeに変更されています。

無償版のQuartus IIを入手するにはAltera社に登録する必要があります。登録にはメールアドレスが必要です。

shot0

メールアドレスの確認が完了すると登録フォームへ入力可能になります。登録フォームでは住所・名前・電話番号・所属・職種・企業規模・評価目的・評価期間・希望ユーザ名・希望パスワード・規約への同意を求められます。フォームに記載する評価期間はあくまでも見通しの申告です。ここで申告した期間が切れても引き続き使えます。

shot1

登録が完了するとサポートポータル(My Altera)へアクセス可能になります。

My Alteraへログインし、右メニューから「Download Quartus II」を選択します。選択するとダウンロードセンターへ移動します。

shot2

移動したら「Quartus II Web Edition」の横にある「Download」ボタンを選択します。

shot3

選択するとOS・ダウンロードの方法を選べます。選べるOSはWindows・Linuxの2つです。本稿ではWindowsを使います。ダウンロードの方法はダイレクトダウンロード・ダウンロードマネージャの2種類から選べます。ダウンロードマネージャを選ぶことをおすすめします。ダウンロードマネージャはダイレクトダウンロードに比べると、インストールの手間はかかりますがダウンロードがスムーズに行なえます。

shot4

ダウンロードしたらインストールします。インストールの手順は本稿では省略します。手順は クィック・スタート・ガイド をご参照ください。

ボードの初期設定

ボードを使うには初期設定が必要です。初期設定とはボードを評価用に設定するステップです。

本稿で使うDE1-SoCの場合、必要な初期設定はDIPスイッチ(MSEL)の設定です。MSELは基板の裏にあります。MSEL4〜0をOFFONONOFFON(10010)に設定します。

ボードが評価用に設定されているかを確認するにはボードを起動します。起動に成功するとボード上にカウントアップする数値が現われます。

shot5

ボードの接続

開発を行なうにはボードを開発マシンと接続する必要があります。開発マシンとボードとの接続にはUSB A-Bケーブルを使います。開発マシンを正しく接続してボードを起動すると、必要なドライバが開発マシンにインストールされます。

サンプルプロジェクト

では実際にFPGA開発を行なってみましょう。本稿ではサンプルプロジェクト(以下サンプル)を使用して解説します。本稿のサンプルはボード添付のシステムCDに収録されています。サンプルが収録されているディレクトリは/Demonstrations/FPGA/my_first_fpgaです。

Note

システムCDがない場合、http://www.terasic.com/downloads/cd-rom/de1-soc/[DE1-SoC CD-ROMs]からイメージをダウンロードできます。

サンプルは起動するとボタン入力を受け付けます。受け付けられるボタンはKEY0とKEY1の2つです。KEY1を押すと、押している間だけLEDが点滅します。KEY1とKEY0を同時に押すと、押している間だけ点滅速度が遅くなります。

サンプルを動作させるにはビルドプログラムの2つの手順を踏みます。ビルドするとはプロジェクトからフロー(sof)ファイルを作成することをいいます。プログラムするとはsofファイルをFPGAに書き込むことをいいます。以下解説します。

ビルド

ビルドするにはサンプルを統合開発環境で開いて、画面上部の再生ボタンを押します。

shot6

完了にはしばらくかかります。完了するとsofファイルができます。

shot7

プログラム

プログラムするには統合開発環境の画面上部からプログラマを起動します。

Note

プログラムする方法にはJTAGとASの2つがあります。2つの違いは電源切断後にフローが残るか(不揮発性)です。本稿では簡単のため、電源切断後にフローが残らないJTAGを使う手順を解説します。

shot7

shot8

プログラマを使うにあたり必要な設定があります。必要な設定はボードの選択とボード構成の検出の2つです。

ボードを選択するには[Hardware Setup…​]ボタンを押します。ボタンを押すとダイアログが現われるので、[Currently selected hardware]に[DE-SoC[USB-1]]を割り当てます。

shot9

次にボード構成を検出します。ボード構成の検出には[Auto Detect]ボタンを押し、チップモデルを選びます。本稿で使うDE1-SoCの場合、選ぶべきチップモデルは[5CSEMA5]です。

shot10

検出結果で構成を置き換えて良いかどうか尋ねるダイアログが出るので[Yes]を選択します。検出が完了すると2つのエントリがリストに現われます。

shot11

次にプログラムを行ないます。プログラムを行なうには3つの手順(sofファイルの読み込み・プログラム対象の指定・開始)が必要です。

sofファイルを読み込むには、まず検出が完了して現われたエントリのうちFPGAチップを表わすエントリを選びます。FPGAチップを表わすエントリは[5CSEMA5]で始まるエントリです。エントリを選択すると左メニューから[Change File]ボタンがクリックできるようになります。[Change File]ボタンをクリックするとsofファイルを選択するダイアログが開きます。sofファイルを選択すると[File]欄にファイル名が入ります。

次にプログラム対象の指定を行ないます。プログラム対象として指定するには、sofファイルを読みこんだエントリの右にある[Program/Configure]というチェックボックスをチェックします。対象が指定されると、左メニューの[Start]ボタンが有効になります。

shot12

最後に開始します。左メニューから[Start]ボタンをクリックするとプログラム作業を開始します。作業の進捗は画面右上のメータで把握できます。作業が終了すると自動的にフローが起動します。

まとめ

本稿ではFPGAの特徴をみました。FPGAは特定領域に特化した計算回路です。FPGAはプロセッサと違い指令を持ちません。FPGAでアルゴリズムを実装するには希望した信号処理を行なうパイプラインを組みます。パイプラインを組むには低レイヤーの設計が不可欠です。次に、実際のFPGA開発を見るために、Altera社のFPGA開発環境をインストールしました。インストールした開発環境でサンプルをビルドし、FPGAをプログラムし動作させました。

本稿では長さの関係上、サンプルプの詳細なソースコードには触れられませんでした。サンプルのソースコードを見ていただくと、プロセッサとを使用した開発との違いがより際立つと思います。

次回は高位合成について扱います。高位合成とは最近出てきたFPGA開発手法です。それではまた。