# How to construct NVDLA virtual platform? ## Target Construct NVDLA virtual platform and run demo image on ubuntu 16.04. ## Step-by-step instructions Prepare an empty directory, ${PROJECT_PATH}, for this construction. Make sure **cpp**, **gcc**, and **g++** are available for preliminary compilation. Use the following commands to confirm their existence. ``` $ cpp --version $ gcc --version $ g++ --version ``` ### 1. Download the virtual platform simulator and install dependencies ``` $ pushd ${PROJECT_PATH} $ git clone https://github.com/nvdla/vp.git $ cd vp $ git submodule update --init --recursive $ sudo apt-get update $ sudo apt-get install g++ cmake libboost-dev python-dev libglib2.0-dev libpixman-1-dev liblua5.2-dev swig libcap-dev libattr1-dev $ popd ``` ### 2. Install gcc 4.9.3 and some additional libraries ``` $ pushd ${PROJECT_PATH} $ wget https://ftp.gnu.org/gnu/gcc/gcc-4.9.3/gcc-4.9.3.tar.gz $ tar xvzf gcc-4.9.3.tar.gz $ sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev libc6-dev $ pushd gcc-4.9.3 $ ./contrib/download_prerequisites $ popd $ mkdir -p temp_dir $ pushd temp_dir $ ../gcc-4.9.3/configure --prefix=${PROJECT_PATH}/gcc-4.9.3 --enable-languages=c,c++,fortran,go --disable-multilib $ make; make install $ popd $ rm -rf temp_dir $ rm -f gcc-4.9.3.tar.gz $ popd ``` - Note: If "bootstrap comparison failure" happens, try to clean up the ${PROJECT_PATH}/gcc-4.9.3 and ${PROJECT_PATH}/temp_dir directories and install gcc 4.9.3 again. ### 3. Install SystemC-2.3.0a ``` $ pushd ${PROJECT_PATH} $ 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 $ pushd systemc-2.3.0a $ mkdir -p temp_dir $ pushd temp_dir $ ../configure --prefix=${PROJECT_PATH}/systemc-2.3.0a/ $ make $ sudo make install $ popd $ rm -rf temp_dir $ popd $ rm -f systemc-2.3.0a.tar.gz $ popd ``` ### 4. Install Perl packages required Install YAML-1.24 ``` $ pushd ${PROJECT_PATH} $ wget -O YAML-1.24.tar.gz $ http://search.cpan.org/CPAN/authors/id/T/TI/TINITA/YAML-1.24.tar.gz $ tar -xzvf YAML-1.24.tar.gz $ cd YAML-1.24 $ perl Makefile.PL $ make $ sudo make install $ popd ``` Install IO-Tee-0.65 ``` $ pushd ${PROJECT_PATH} $ wget -O IO-Tee-0.65.tar.gz $ http://search.cpan.org/CPAN/authors/id/N/NE/NEILB/IO-Tee-0.65.tar.gz $ tar -xzvf IO-Tee-0.65.tar.gz $ cd IO-Tee-0.65 $ perl Makefile.PL $ make $ sudo make install $ popd ``` Clean up ``` $ pushd ${PROJECT_PATH} $ rm -f YAML-1.24.tar.gz $ rm -f IO-Tee-0.65.tar.gz $ popd ``` ### 5. Build NVDLA C-model ``` $ pushd ${PROJECT_PATH} $ sudo rm -rf hw $ git clone https://github.com/nvdla/hw.git $ popd ``` Modify Makefile to use correct tool version ``` $ pushd ${PROJECT_PATH}/hw $ sed -i 's/home\/utils\/gcc/${PROJECT_PATH}\/gcc-4.9.3/g' Makefile $ sed -i 's/home\/utils\/perl-5.8.8/usr/g' Makefile $ sed -i 's/home\/utils\/java\/jdk1.8.0_131/usr/g' Makefile $ sed -i 's/usr\/local\/systemc-2.3.0/${PROJECT_PATH}\/systemc-2.3.0a/g Makefile $ popd ``` Build NVDLA C-model ``` $ pushd ${PROJECT_PATH}/hw $ sudo make $ sudo tools/bin/tmake -build cmod_top $ popd ``` - Reference settings for the C-model build-up ``` Enter project names: nv_small Enter c pre-processor path: ${PROJECT_PATH}/gcc-4.9.3/bin/cpp g++ path: ${PROJECT_PATH}/gcc-4.9.3/bin/g++ perl path: /usr/bin/perl java path: /usr/bin/java systemc path: ${PROJECT_PATH}/systemc-2.3.0a/ verilator path: "\r" clang path: "\r" ``` ### 6. Build and install the virtual platform simulator Workaround the template<class> class std::auto_ptr deprecation warning issue. ``` $ pushd ${PROJECT_PATH}/vp $ sed -i 's/set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' ./models/nvdla/CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' ./models/nvdla/CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' ./models/nvdla/CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' ./fpga/aws-fpga/fpga_sc_wrapper/CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' ./fpga/aws-fpga/fpga_sc_wrapper/CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' ./fpga/aws-fpga/fpga_sc_wrapper/CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' ./fpga/aws-fpga/cosim_sc_wrapper/CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' ./fpga/aws-fpga/cosim_sc_wrapper/CMakeLists.txt $ sed -i 's/set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall -Werror/set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSC_INCLUDE_DYNAMIC_PROCESSES -Wall/g' ./fpga/aws-fpga/cosim_sc_wrapper/CMakeLists.txt $ cmake -DCMAKE_INSTALL_PREFIX=${PROJECT_PATH}/nvdla_vs -DSYSTEMC_PREFIX=${PROJECT_PATH}/systemc-2.3.0a/ -DNVDLA_HW_PREFIX=${PROJECT_PATH}/hw/ -DNVDLA_HW_PROJECT=nv_small $ popd ``` Build and install the virtual platform. ``` $ pushd ${PROJECT_PATH}/vp $ make; make install $ popd ``` ### 7. Run the demo image Run virtual simulator using pre-built Linux kernel image ``` $ pushd ${PROJECT_PATH} $ git clone https://github.com/nvdla/sw.git $ pushd vp $ rm -f ./images $ ln -s ../sw/prebuilt/arm64-linux/images . $ export SC_SIGNAL_WRITE_CHECK=DISABLE $ ./aarch64_toplevel -c conf/aarch64_nvdla.lua $ popd $ popd ``` - Virtual platform Linux account ``` buildroot login: root Password: nvdla ``` - Reference screenshot ![](https://i.imgur.com/SjxYupo.png)
{"metaMigratedAt":"2023-06-15T05:08:49.396Z","metaMigratedFrom":"Content","title":"How to construct NVDLA virtual platform?","breaks":true,"contributors":"[{\"id\":\"b9903986-73ac-4692-a9f5-f8a606b9615b\",\"add\":11624,\"del\":4490}]"}
Expand menu