追記
最近複数方向から、A10 PACでやりたいんだけどうまくいかない的な相談を受けたので、以下の記事を書きました。本記事の更新版的な役割なので、こちらを見ていただいたほうが良いかもです。
はじめに
こんにちは。
以前こんな記事を書きました。
ここでFPGA向けoneAPI環境のインストール方法などを紹介したんですが、その後インストール方法が結構変わりました(個人的には正常進化と思ってます)。
そんなわけで、前の記事が参考にならなくなったのに放っておくのも何なので、最新の状況を調べておこうというのがこの記事の意図です。
さて、FPGA用のoneAPI環境は、ざっくり言って以下の3つから構成されます。
- インテル® oneAPI ベース・ツールキット
- FPGA開発ツール(インテル® Quartus® Prime 開発ソフトウェア)
- 使用する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を選択します。
もっと言えば、ブラウザによるダウンロードではなくこっちのwgetを使う方法が好みです。
この下に以前からあったFPGA Add-onの項目がありますが、既にここからダウンロードは出来ないようになっています。
さて、今回ポイントの一つになるのがこのページです。
下のほうにこんな表があります。
将来どうなるかわかりませんが、少なくとも当分の間、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というタブがあることに注意してください。
oneAPIタブをクリックすると、BSP及びパッチのリンクが表示されます。ここでは、intel_s10sx_pac.tar.gzとQuartusProSetup-19.2.0-Patch-0.05dcp-linux.tar.gzをダウンロードします。
インテル® Quartus® Prime 開発ソフトウェアについては、以下の全部入りパッケージをダウンロードいただいてもよいのですが、
恐ろしいファイルサイズなので、筆者は通常Individual Filesタブから必要なものだけダウンロードします。インストールの手間は全部入りと同じです。
今回は最低限、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ベースのインストーラーの場合、以下のような画面になります。
Tabキーを押すと選択部分が切り替わりますので、Nextを選択してリターンキーを押します。
これもTabキーでAccept & installを選択してリターン。
筆者の環境ではいつもこのOpenCL関係の警告が出ちゃいますが、気にせずに先に勧めます。TabキーでInstallを選択してリターン。
筆者はEclipse不要なので、Skipのところにチェックがついた状態のままTabキーでNextを選択してリターン。
Intel® Improvement Programに同意するしないを聞かれますので、どちらかを選択します。筆者は同意するので、Tabキーで「I consent to the collection of my information」を選択し、スペースキーを押してチェックを付けます。その後、Tabキーで「Begin Installation」を選択してリターン。
これでインストールが開始されます。筆者の環境では10分ほどかかりました。
インストール先はデフォルトの/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が起動します。
Nextをクリック。
License Agreementを確認し、I accept the agreementをクリックしてNext。
インストールディレクトリを指定します。sudoでインストーラを起動しないとダメな場合がありますのでご注意を。筆者はこのままユーザディレクトリにインストールしてしまいます。
今回は最小限のものしかダウンロードしてこなかったので、インストールされるコンポーネントはこれしかなく、何だか寂しいですが、oneAPIを使う上では問題ありません。Nextをクリック。
Nextをクリックしてインストール開始。
インストールが始まりました。しばらく待ちます。
インストールが終了しました。
今回は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が起動します。
Nextをクリック。
これも、License Agreementを読んで、I acceptをクリックしてNext。
先ほどインテル® Quartus® Prime 開発ソフトウェアをインストールしたディレクトリを指定してNextをクリック。
パッチのインストールはあっという間に終了します。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
これを
#include <sycl/sycl.hpp>
こう修正します。
#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.