FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

NVDLA Virtual Platformの試行 (1. ビルド試行 → 失敗)

この記事は 半導体・ハードウェア開発 Advent Calendar 2017 - Qiita の15日目の記事です。

Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 私一人では、クオリティのある記事を続けられそうにありません。。。(弱音)

目次


NVDLA Virtual Platform とは、簡単に言うとNVDLAを試行するための足回りや制御プロセッサなどを接続した、プラットフォームのことを言うらしい。

例えば制御コアとしてQEMU上で構成したARMプロセッサを接続したり、仮想的な外部メモリを接続してNVDLAを動作させることが出来る。 ソフトウェアプログラマは、このプラットフォームを利用してARMのプログラムを記述してNVDLAをコントロールし、実際の性能や挙動を確認することが出来るようになる、とうこと。

これには、QEMUとSystem-Cによる協調シミュレーションが利用されている。QEMUエミュレータはARMv8のものが使われており、高性能CPUをエミュレーションしている。 エミュレータは標準的なSystemCモジュールでラップされており、TLM(Transaction Level Modeling)という技術を使ってSystem-C経由で制御を行っているらしい。

仮想シミュレータプラットフォームの構築

基本的には、公式サイトの説明を参照した。

Virtual Platform — NVDLA Documentation

必要なリポジトリ

  • NVDLA HW : git clone https://github.com/nvdla/hw.git
  • NVDLA VP : git clone https://github.com/nvdla/vp.git

Ubuntu 17.10 上で構築を行った。まずはUbuntu上で必要なパッケージをインストールする。

sudo apt-get install g++ cmake libboost-dev python-dev libglib2.0-dev libpixman-1-dev liblua5.2-dev swig libcap-dev libattr1-dev

SystemCのインストール

公式サイトの説明の通りにインストールを進めることが出来る。

$ wget -O systemc-2.3.0a.tar.gz http://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.0a.tar.gz
$ tar -xzvf systemc-2.3.0a.tar.gz
$ cd systemc-2.3.0a
$ sudo mkdir -p /usr/local/systemc-2.3.0/
$ mkdir objdir
$ cd objdir
$ ../configure --prefix=/usr/local/systemc-2.3.0
$ make
$ sudo make install

NVDLA HWの構築

NVDLA HWリポジトリをダウンロードして、環境をビルドしておく。これをNVDLA CMODと呼んでいる。

$ git clone https://github.com/nvdla/hw.git
$ cd hw
$ make
$ CC=/usr/bin/gcc-5 CXX=/usr/bin/g++-5 tools/bin/tmake -build cmod_top

Ubuntu 17.10 の場合は、GCCのバージョンに気を付ける必要がある。最新版のGCC7.2ではビルド時にコンパイルエラーが発生してしまったため、GCC5を使うように環境変数を変えておく必要がある。

仮想シミュレータのビルドとインストール

これも公式サイトの説明通りに行った。また、同様にGCCの場所を切り替え、GCC5が利用されるようにしておく。

CXX=/usr/bin/g++-5 cmake -DCMAKE_INSTALL_PREFIX=build -DSYSTEMC_PREFIX=/usr/local/systemc-2.3.0/ -DNVDLA_HW_PREFIX=/home/msyksphinz/work/nvdla_hw -DNVDLA_HW_PROJECT=nv_full

次にビルドなのだが、以下のエラーが出てコンパイルが失敗してしまう。おかしいな、libpythonはちゃんとインストールしてあるのに。 ライブラリのパスなどが正しく設定されていないのかもしれない。引き続き調査が必要。

$ make
...
[ 75%] Completed 'qbox'
[ 75%] Built target qbox
Scanning dependencies of target greenscript
[ 75%] Building CXX object libs/greenlib/greenscript/lib/CMakeFiles/greenscript.dir/__/src/greenscript.cpp.o
/home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp: In constructor ‘gs::script::GreenScriptModule::GreenScriptModule(sc_core::sc_module_name, const char*)’:
/home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:178:39: error: ‘PyString_FromString’ was not declared in this scope
   name_py = PyString_FromString(name());  // new ref
                                       ^
/home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp: In member function ‘void gs::script::GreenScriptModule::load(const char*)’:
/home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:221:46: error: ‘PyString_AsString’ was not declared in this scope
       std::string s(PyString_AsString(path_py));
                                              ^
/home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp: In member function ‘void gs::script::GreenScriptModule::add_to_pythonpath(const char*)’:
/home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:262:47: error: ‘PyString_FromString’ was not declared in this scope
   PyObject *path_py = PyString_FromString(path);  // new ref
                                               ^
/home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp: In member function ‘bool gs::script::GreenScriptModule::private_load(const char*)’:
/home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:278:68: error: ‘PyFile_FromString’ was not declared in this scope
   PyObject* PyFileObject = PyFile_FromString((char *)fullname, mode);
                                                                    ^
In file included from /usr/include/python3.7m/Python.h:116:0,
                 from /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:38:
/home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:279:56: error: ‘PyFile_AsFile’ was not declared in this scope
   PyObject *ret = PyRun_File(PyFile_AsFile(PyFileObject),
                                                        ^
/usr/include/python3.7m/pythonrun.h:146:23: note: in definition of macro ‘PyRun_File’
     PyRun_FileExFlags(fp, p, s, g, l, 0, NULL)