LoginSignup
4
1

追記

最近複数方向から、A10 PACでやりたいんだけどうまくいかない的な相談を受けたので、以下の記事を書きました。本記事の更新版的な役割なので、こちらを見ていただいたほうが良いかもです。

はじめに

こんにちは。

以前こんな記事を書きました。

ここでFPGA向けoneAPI環境のインストール方法などを紹介したんですが、その後インストール方法が結構変わりました(個人的には正常進化と思ってます)。
そんなわけで、前の記事が参考にならなくなったのに放っておくのも何なので、最新の状況を調べておこうというのがこの記事の意図です。

さて、FPGA用のoneAPI環境は、ざっくり言って以下の3つから構成されます。

  1. インテル® oneAPI ベース・ツールキット
  2. FPGA開発ツール(インテル® Quartus® Prime 開発ソフトウェア)
  3. 使用するFPGAボードのBoard Support Package(以下、BSP。最近はShimとも呼ばれます)

今までは、上記2と3(BSPについてはインテル® PACカードのもの)がまとめられて、FPGA Add-onとして提供されていました。でも、これだと、じゃあインテル®製以外のFPGAボードどうなるんじゃいと思いませんでした?
今回の変更では、このあたりがあるべき姿になった感があります。
基本的には、FPGA Add-onというものはなくなり、インテル® oneAPI ベース・ツールキットは今まで同様インストールし、それ以外にインテル® Quartus® Prime 開発ソフトウェアとボードベンダー提供のBSPを別途インストール、という流れになります。

なお、残念ながら現時点でFPGAボード対応しているOSはLinux系だけになりますので、今回の記事もLinuxベースになります。

必要なものをダウンロード

まずはこちらから。

若干ページのデザインが変わってますが、まあほぼ前と同じです。
好きなインストール方法を選択いただいて大丈夫ですが、私はいつもofflineを選択します。
image.png
もっと言えば、ブラウザによるダウンロードではなくこっちのwgetを使う方法が好みです。
image.png
この下に以前からあったFPGA Add-onの項目がありますが、既にここからダウンロードは出来ないようになっています。
image.png

さて、今回ポイントの一つになるのがこのページです。

下のほうにこんな表があります。
image.png
将来どうなるかわかりませんが、少なくとも当分の間、oneAPIに対応したFPGAボードはここにリストされ、必要なリンクが張られることになりそうです。
見ると分かる通り、典型的にはBSPへのリンク及び必要なバージョンのインテル® Quartus® Prime 開発ソフトウェア・ダウンロードサイトへのリンクがありますので、そこからBSP及びインテル® Quartus® Prime 開発ソフトウェアをダウンロードすることになります。
現時点では、Bittware社とHitek Systems社のボードに関しては、製品ページのリンクしか張られていないようですね。例えばBittware社の場合、専用の開発者向けサイトを持っていますので、そちらからBSPを入手することになると思います。詳しくは各ベンダー発行のインストールマニュアルを参照ください。

ここでは、筆者が使えるカードの都合上、インテル® FPGA PAC D5005用のBSPをインストールしたいと思います。

どのインテル® Quartus® Prime 開発ソフトウェアのバージョンに対応するかはFPGAボードベンダー次第です。インテル® FPGA PAC D5005に関しては、既に販売終了になっていることもあり(上の表にも、それを告知するページへのリンクがついてます。PDN2211というドキュメントです)、若干古いVersion 19.2での対応になっています。
(ただし、インテル® FPGA PAC D5005に関しては、OFSと呼ばれるオープンソースで公開される新しいファームウェア・シェルをインストールすることで、より新しい環境が使える可能性があります。興味がある方は、インテルの担当営業までお問い合わせください)
なお、使用するインテル® FPGA PAC D5005には、最新版(v2.0.1)のFPGAインターフェース・マネージャー(FIM)が焼いてある必要があります。

インテル® FPGA PAC D5005に関しては、上の表のBSP&BSP Patchというリンクをクリックすると、以下のページに飛びます。ここで、インテル® Quartus® Prime 開発ソフトウェアとBSP、及びインテル® Quartus® Prime 開発ソフトウェア用パッチをダウンロードします。このページには、通常のインテル® Quartus® Prime 開発ソフトウェア・ダウンロードページには無い、oneAPIというタブがあることに注意してください。
image.png
oneAPIタブをクリックすると、BSP及びパッチのリンクが表示されます。ここでは、intel_s10sx_pac.tar.gzとQuartusProSetup-19.2.0-Patch-0.05dcp-linux.tar.gzをダウンロードします。
image.png
インテル® Quartus® Prime 開発ソフトウェアについては、以下の全部入りパッケージをダウンロードいただいてもよいのですが、
image.png
恐ろしいファイルサイズなので、筆者は通常Individual Filesタブから必要なものだけダウンロードします。インストールの手間は全部入りと同じです。
image.png
今回は最低限、Intel(R) Quartus(R) PrimeとIntel(R) Stratix(R) 10 Device Supportの2つをダウンロードすればOKです。

ちなみに、インテル® Quartus® Prime 開発ソフトウェア Version19.2のOSサポート状況は以下のようになっていました。ちょっと古いバージョンなのでこんなもんですかね…

  • Windows 7 SP1(64 bit)
  • Windows 8.1 (64 bit)
  • Windows 10 (64 bit)
  • Windows Server 2008 R2 SP1 (64 bit)
  • Windows Server 2012 R2 (64 bit)
  • Red Hat Enterprise Linux 6.9 (64 bit)
  • Red Hat Enterprise Linux 7.5 (64 bit)
  • SUSE LES 12.1 (SP1)
  • Ubuntu 14.04.5 LTS (64 bit)
  • Ubuntu 16.04.2 LTS (64 bit)

インテル® oneAPI ベース・ツールキットのインストール

ではダウンロードしたものをインストールしていきます。まずはインテル® oneAPI ベース・ツールキットからです。

$ sudo sh ./l_BaseKit_p_2022.3.1.17310_offline.sh

筆者の環境だとインストール用のGUIが立ち上がってくれませんでした…
まあでも、気にせずに進めることにします。
CUIベースのインストーラーの場合、以下のような画面になります。
image.png
Tabキーを押すと選択部分が切り替わりますので、Nextを選択してリターンキーを押します。
image.png
これもTabキーでAccept & installを選択してリターン。
image.png
筆者の環境ではいつもこのOpenCL関係の警告が出ちゃいますが、気にせずに先に勧めます。TabキーでInstallを選択してリターン。
image.png
筆者はEclipse不要なので、Skipのところにチェックがついた状態のままTabキーでNextを選択してリターン。
image.png
Intel® Improvement Programに同意するしないを聞かれますので、どちらかを選択します。筆者は同意するので、Tabキーで「I consent to the collection of my information」を選択し、スペースキーを押してチェックを付けます。その後、Tabキーで「Begin Installation」を選択してリターン。
これでインストールが開始されます。筆者の環境では10分ほどかかりました。
image.png
インストール先はデフォルトの/opt/intel/oneapiになりました。TabキーでCloseを選択してリターンキーを押し、インストーラーを終了します。

インテル® Quartus® Prime 開発ソフトウェアのインストール

前述のとおり、以前はここでFPGA Add-onなるものをインストールしたわけですが、oneAPI最新版ではインテル® Quartus® Prime 開発ソフトウェアをインストールすることになります。
先ほどダウンロードした.runファイルをchmod +xして、実行します。ただし、先ほどダウンロードしたものは、すべて同じディレクトリに置いたままにしておく必要があります。
筆者はユーザディレクトリにインストールするつもりなので下のコマンドでOKですが、/opt以下等にインストールする場合はsudo ./QuartusProSetup-19.2.0.57-linux.runとしてください。

$ chmod +x QuartusProSetup-19.2.0.57-linux.run 
$ ./QuartusProSetup-19.2.0.57-linux.run 

これでインストール用のGUIが起動します。
image.png
Nextをクリック。
image.png
License Agreementを確認し、I accept the agreementをクリックしてNext。
image.png
インストールディレクトリを指定します。sudoでインストーラを起動しないとダメな場合がありますのでご注意を。筆者はこのままユーザディレクトリにインストールしてしまいます。
image.png
今回は最小限のものしかダウンロードしてこなかったので、インストールされるコンポーネントはこれしかなく、何だか寂しいですが、oneAPIを使う上では問題ありません。Nextをクリック。
image.png
Nextをクリックしてインストール開始。
image.png
インストールが始まりました。しばらく待ちます。
image.png
インストールが終了しました。
今回はoneAPI用にインストールしたこともあり、チェックは全部外してFinishを押します。
筆者の環境ではインストール完了まで5分程度でした。

通常はここでライセンスファイルのインストールをしたりするのですが、oneAPIの範囲内で使う限りインテル® Quartus® Prime 開発ソフトウェアのライセンスは必要ありません!ここ重要です。

次に、パッチをインストールします。

$ tar zxvf QuartusProSetup-19.2.0-Patch-0.05dcp-linux.tar.gz 
$ cd QuartusProSetup-19.2.0-Patch-0.05dcp-linux/
$ chmod +x QuartusProSetup-19.2.0-Patch-0.05dcp-linux.run 
$ ./QuartusProSetup-19.2.0-Patch-0.05dcp-linux.run 

インテル® Quartus® Prime 開発ソフトウェアのインストーラーと同じようなGUIが起動します。
image.png
Nextをクリック。
image.png
これも、License Agreementを読んで、I acceptをクリックしてNext。
image.png
先ほどインテル® Quartus® Prime 開発ソフトウェアをインストールしたディレクトリを指定してNextをクリック。
image.png
パッチのインストールはあっという間に終了します。Finishをクリック。
これで、インテル® Quartus® Prime 開発ソフトウェアについては準備完了です。

BSPのインストール

先ほどダウンロードしてきたintel_s10sx_pac.tar.gzを展開します。これがそのままBSPになりますので(インストーラーを走らせるとかはありません)、それっぽいところに展開しましょう。
筆者は、work/oneapiというディレクトリを掘ってそこに展開しました。

$ cd ~/work/oneapi
$ tar zxvf intel_s10sx_pac.tar.gz

ちょっと嫌なのがjsonschemaです。以下を実行してみてください。インストール場所は適当に読み替えてください。
(まだoneapiのsetvars.shはsourceしないほうが良いです!。インテル®のpythonとかにPATHが通ったりするので、変なことが起こるかもしれないし。)

$ cd ~/work/oneapi/intel_s10sx_pac/hardware/pac_s10/build
$ python2.7 ./tools/packager.pyz

Intel OPAE FPGA Packager

packager <cmd> [options]
(略)

これでエラーが出ると、恐らくjsonschemaがまだインストールされていません。上記は正常時の例ですので、こんな感じでエラーが出なければ、次に進んでください。エラーが出たらjsonschemaをインストールします。
筆者はこんな感じでインストールしました。もっとマシな方法ないんだろうか…

$ curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
$ python2.7 get-pip.py 
$ pip2 install jsonschema

そもそもpython2.7がインストールされてないという場合は、これも入れないとダメです。
筆者はRedhat系のOSを使っているので、こんな感じでインストールしました。

$ sudo yum -y install python2

後は、諸々環境変数を設定する必要があります。重要なのは上で展開したBSPの位置の指定と、インテル® Quartus® Prime 開発ソフトウェアの実行ファイルのPATH、それからライブラリのPATHです。
以下、oneAPIにとっては余計なものも入っていますが、筆者の設定を紹介しておきます。

export QSYS_ROOTDIR=/home/demo/intelFPGA_pro/19.2/qsys/bin
export QUARTUS_HOME=/home/demo/intelFPGA_pro/19.2/quartus
export QUARTUS_ROOTDIR=$QUARTUS_HOME
export QUARTUS_INSTALL_DIR=$QUARTUS_ROOTDIR
export QUARTUS_ROOTDIR_OVERRIDE=$QUARTUS_ROOTDIR
export IMPORT_IP_ROOTDIR=$QUARTUS_ROOTDIR/../ip
export IP_ROOTDIR=$QUARTUS_ROOTDIR/../ip
export QSYS_ROOTDIR=$QUARTUS_ROOTDIR/../qsys/bin
export PATH=$QUARTUS_HOME/bin:$QUARTUS_HOME/qsys/bin:$QUARTUS_HOME/sopc_builder/bin/:$PATH
export AOCL_BOARD_PACKAGE_ROOT=/home/demo/work/oneapi/intel_s10sx_pac
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$AOCL_BOARD_PACKAGE_ROOT/linux64/lib

環境のテスト

これで、FPGA実機及びFPGAエミュレーション向けのコンパイルが出来るようになっているはずです。早速テストしてみます。

まずは環境の設定。以下を実行しておきます。

$ source /opt/intel/oneapi/setvars.sh 

以前の私の記事ではoneapi-cliというサンプル生成用コマンドを使いましたが、同じことをしてもつまらないので、今回はgithub上にあるコンパイルを持ってくることにします。
(中身はoneapi-cliコマンドで取得できるものとほぼ同じですが、微妙にバージョンが異なるようです)
まずはこんな感じで、サンプル取得&コンパイルしてみましょう。

$ git clone https://github.com/oneapi-src/oneAPI-samples
$ cd oneAPI-samples/DirectProgramming/DPC++FPGA/Tutorials/GettingStarted/fpga_compile/
$ mkdir build
$ cd build
$ cmake -DFPGA_DEVICE=/home/demo/work/oneapi/intel_s10sx_pac:pac_s10 ..
$ make

……あれ、エラーが出ませんでした??
なぜこんなことになっているか私は調べ切れていませんが、何だかgithub上のサンプルと今回インストールしたoneAPIのヘッダファイルの位置があってないようですね。
ここでの例で言うと、以下の2つのファイルについて修正が必要でした。

  • oneAPI-samples/DirectProgramming/DPC++FPGA/Tutorials/GettingStarted/fpga_compile/src/fpga_compile.cpp
  • oneAPI-samples/DirectProgramming/DPC++FPGA/include/exception_handler.hpp

これを

fpga_compile.cpp
#include <sycl/sycl.hpp>

こう修正します。

fpga_compile.cpp
#include <sycl/CL/sycl.hpp>

exception_handler.hppのほうも同様に修正します。
これで先ほどのmakeが通るようになったのではないでしょうか。

では、いよいよFPGAのコンパイルを試してみます。先ほどmakeでコンパイルしたのはFPGAエミュレーション用のものなので、それほどコンパイルに時間はかからなかったはずです。今回はFPGAビットストリーム用のコンパイルになりますので、かなり時間がかかります。

$ make fpga

うまく行きました?

実機で試す

では実機で動かしてみます。
実機で動かす場合、まずボードのInitializationが必要です。

$ aocl initialize acl0 /home/demo/work/oneapi/intel_s10sx_pac:pac_s10 

これで準備OKです。では、先ほど作ったバイナリを実行してみましょう。

$ ./fpga_compile.fpga

うまく行きました?(2回目)

最後に

またネタに困ってインストールの仕方記事を書いてしまうのか…と思いましたが、意外とハマりどころが多かったので、役に立つ記事になったかもしれません。
皆さんの環境でもうまく行くことを祈ってます!

Notices & Disclaimers

Intel technologies may require enabled hardware, software or service activation.

No product or component can be absolutely secure.

Your costs and results may vary.

© Intel Corporation. Intel, the Intel logo, and other Intel marks are trademarks of Intel Corporation or its subsidiaries. Other names and brands may be claimed as the property of others.

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1