Help us understand the problem. What is going on with this article?

Ubuntu で Intel HLS Compiler を使いたい

More than 1 year has passed since last update.

概要

Ubuntu 16.04 PC で 無料版 Intel HLS Compiler v18.0 を動かしてみました。その内容を書かせていただきます。

Intel HLS Compiler (Cコードから Intel FPGA -旧Altera FPGA- 用のRTLコードを生成してくれるやつ) が無償で使えるバージョン(Lite Edition)が出ているんですが、公式ドキュメントでは、実行できる Linux 環境は Red Hat 系 のみで Ubuntu はサポート外(有償版も状況は同じ)。
でもまぁ、何とかなるんじゃないの?同じLinuxなんだから、と思い、下記先人の記事を参考にさせていただきながら、チャレンジしてみました。おおまかに、必要な作業としては、

  • Quartusツールのインストール
  • ModelSimを動かすための細工
  • gcc 4.4.7 のインストール
  • HLSコンパイラを動かすための環境設定

といった内容になります。

参考資料:

"Install modelsim on linux" by Ho Huy Hung さん
"How to install gcc-4.4 on Ubuntu 16.04" from askubuntu.com
"Intel HLS Compilerを使える状態にする(CentOS編)" by @yukitaketakeさん
"Ubuntu16の上で手軽にIntel HLSを使うためにDockerでCentOS7を動かす" by @miyoxさん
"Intel HLS Compilerの感想" by @Vengineerさん

使った Ubuntu 16.04 PC:

Ubuntuの公式サイトからダウンロードしてきたisoイメージ(ubuntu-16.04.4-desktop-amd64.iso)でインストール後、デフォルトで動いている Software Updater のお勧めに従い、16.04のアップデートを行いました。lsb_release -d は 16.04.5 LTS 、 uname -r (Kernel version) は 4.15.0-33-generic となっています。この時点でインストールされている gcc は、5.4.0 です。

Quartus & HLSコンパイラのインストール:

Intel のサイトからダウンロードしてきた Quartus-lite-18.0.0.614-linux.tar を tar xf し、sudo setup.sh で、/opt の下にインストールしてます。ModelSim とのco-simulationがHLSのウリなので、ModelSim-Intel FPGA Starter Edition(Free) も忘れずインストール。この状態で、デスクトップに生成された Quartus アイコンから Quartus が起動できることを確認。
この先の便宜のため、ツールのインストールパスを環境変数に設定しておきます。
export INTELFPGA_TOOLDIR=/opt/intel/intelFPGA_lite/18.0 #お使いの環境に合わせて下さい
export MODELSIM_DIR=${INTELFPGA_TOOLDIR}/modelsim_ase
export QUARTUS_ROOTDIR=${INTELFPGA_TOOLDIR}/quartus

ModelSim を動作させる:

Quartus に付属の ModelSim の起動に必要なライブラリをインストールをします。
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libxft2:i386 libxext6:i386 libncurses5:i386 libstdc++6:i386
あと、不足しているフォルダを補います。
sudo ln -s $MODELSIM_DIR/linux $MODELSIM_DIR/linux_rh60
(これを行わず \$MODELSIM_DIR/bin/vsim を実行すると、linux_rh60 が無いぞ、という旨のエラーが。\$MODELSIM_DIR/bin/vsim はシェルスクリプトだったのでチラっと読んでみると、Kernel Versionが 4.x.x の場合はなぜか linux_rh60 フォルダ下のファイルを呼び出すようになっている、けどそんなフォルダは存在していない...エラーが出るはずです。で、対策として、3.x.x Kernel の時に使われるフォルダと同じものを linux_rh60 として作ってやる、を取ります。\$MODELSIM_DIR/bin/vsim を修正してしまうという手もアリです。)
以上により $MODELSIM_DIR/bin/vsim でModelSimが起動できるようになりました。

gcc 4.4.7 のインストール:

ドキュメントによると、HLS Compiler は gcc 4.4.7 でないと動かないとのことですので、インストールします。gcc 4.4.7 のバイナリは、14.04 (trusty) のリポジトリに入っているようなので、apt でのサーチ先に追加。
sudo add-apt-repository "deb http://jp.archive.ubuntu.com/ubuntu/ trusty main universe"
sudo add-apt-repository "deb http://jp.archive.ubuntu.com/ubuntu/ trusty-updates main universe"
sudo apt-get update
インストール実行
sudo apt-get install g++-4.4
sudo apt-get install g++-4.4-multilib
複数の gcc のバージョンがインストールされた状態になった(4.4.7と5.4.0)ので、どちらのバージョンをデフォルトで使うかを簡単に切り替えられるよう、update-alternatives コマンドに登録しておきます。で、4.4.7 をデフォルトに切り替えます。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10 --slave /usr/bin/g++ g++ /usr/bin/g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 5 --slave /usr/bin/g++ g++ /usr/bin/g++-4.4
sudo update-alternatives --set gcc /usr/bin/gcc-4.4
(ちなみに元の 5.4.0 に戻すには、sudo update-alternatives --set gcc /usr/bin/gcc-5 ですね)
gcc --version を実行してみて、表示内容に "4.4.7" が含まれていればOKです。

HLS を動作させるための設定:

まずは、co-sim のための dpi (Direct Programming Interface) を使うために追加で必要なライブラリのインストール。
sudo apt-get install gcc-multilib (不要ですね)

gcc 4.4.7 を使うために ModelSimに付属している別バージョンの gcc ライブラリが HLS コンパイル作業で使われないようデフォルトパスから適当なフォルダに待避させます。
cd $MODELSIM_DIR
sudo mkdir UnUsed_GCCFiles
sudo mv gcc-4.* UnUsed_GCCFiles

コマンドラインベースの HLS Compiler を動かすための環境変数の設定。
export QUARTUS_ROOTDIR_OVERRIDE=${QUARTUS_ROOTDIR}
export QSYS_ROOTDIR=${QUARTUS_ROOTDIR_OVERRIDE}/sopc_builder/bin
export PATH=${QUARTUS_ROOTDIR_OVERRIDE}/bin:${MODELSIM_DIR}/bin:$QSYS_ROOTDIR:$PATH
source ${INTELFPGA_TOOLDIR}/hls/init_hls.sh
最後に g++4.4.7 のインクルードパスを明示的に指定(i++ のコンパイルには必要)
export CPLUS_INCLUDE_PATH=/usr/include/c++/4.4.7:/usr/include/c++/4.4.7/x86_64-linux-gnu

以上で一通りの設定は終了です。ここまでに出てきた export XXXX=yyyy たちと source .../init_hls.sh は、コンパイルを実行する shell 毎に実行が必要なので、設定用の shell スクリプトとしてまとめておくと良いと思います。あと、update-alternatives での gcc バージョンのケアもお忘れなく。

おためし:

実際に使ってみます。作業ディレクトリを作って、そこにツール付属の examples フォルダをコピーし、コンパイル&実行を試します。
mkdir ~/HLS_work && cd ~/HLS_work
cp -r $INTELFPGA_TOOLDIR/hls/examples . && cd examples

各フォルダには、Makefile が用意されてますが、ターゲット FPGA が Arria10 となっているので、Lite Edition でサポートされている CycloneV に一括変更しちゃいます。
find . -name Makefile | xargs sed -i.org 's/Arria10/CycloneV/

counter フォルダでコンパイル。
cd counter
make test-fpga
エラー無く "Run ./test-fpga to execute the test." と最後に表示されるはずです。

出来上がった co-sim テストベンチを実行
./test-fpga
PASSED と表示されればOKです。これは、CPU で実行した結果と、ModelSim での RTL simulation から得られた回路出力が一致したことを示しています。詳細は、counter.cpp のメイン処理を見ると分かります。

さらに、RTL simulation の詳細結果波形を見たい場合は、make の引数に "HLS_CXX_FLAGS=-ghdl" を追加し(i++ コマンドのオプションに -ghdl を追加するのと等価)、テストベンチを実行し直します。
make HLS_CXX_FLAGS=-ghdl test-fpga
./test-fpga
PASSED
すると、test-fpga.prg/verification/vsim.wlf というファイルが出て来るので vsim で見えます。
vsim test-fpga.prg/verification/vsim.wlf
(Wave ウインドウを開いて、見たい信号を Objects ウインドウから D&D します)
Screenshot_modelsim.png

他のサンプルコードも同様に確認できます。ただし、画像処理系のサンプル image_downsample, YUV2RGB 等は co-sim では結構時間がかかる(無償版の ModelSim は sim 速度が遅い...) ので、co-sim の際は、入力データサイズを小さくしておくのが良い気がします。

まとめ

ということで、Intel HLS Compiler のウリである co-simlation も含め、無料の環境が Ubuntu 16.04 で動くことが確認できました。より新しい Ubuntu バージョンでも同様に動くと思います。また、HLS (Quartus) は Lite Edition を使いましたが、同様に、Standard, Pro Edition でも動くはずです。

以上でございます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away