Synopsys MetaWare for Linux 安装与编译指南

Posted 17岁boy想当攻城狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Synopsys MetaWare for Linux 安装与编译指南相关的知识,希望对你有一定的参考价值。

目录

MetaWare简介

安装与编译前准备

安装GCC7.3

增加你的芯片文件

编译ev_runtime

编译cnn_tools

编译examples


MetaWare简介

MetaWare是一个针对ARC架构处理器的一款开发框架,它类似于Zephyr、FreeRtos,但它不是一个操作系统,它是一个针对于ARC架构上的开发解决方案,通过它可以快速构建AI项目或音频项目以及其它嵌入式项目,让开发者们快速上手ARC架构开发,由Synopsys公司专为ARC架构开发的解决方案,Synopsys有许多基于ARC架构的芯片,为了快速建立芯片程序开发了一套解决方案。

安装与编译前准备

安装GCC7.3

如果想要编译MetaWare项目需要“linux_gcc7_default.tar.gz”(GCC7.3)

你可以在这里下载到它:linux_gcc7_default.tar.gz-C文档类资源-CSDN下载

首先你需要卸载当前环境的gcc

下载完成之后解压:

tar -xvf linux_gcc7_default.tar.gz

解压之后会在解压目录里生成一个“linux”的文件夹,这个文件夹中包含了所需的gcc可执行文件

然后我们设置需要设置一个环境变量:VG_GNU_PACKAGE,这个环境变量指向gcc7存在的目录

export VG_GNU_PACKAGE=~/linux

然后执行source设置环境

source $VG_GNU_PACKAGE/source_me_gcc730.sh

然后使用gcc --version可以查看一下是否有7.3版本

zhihao@zhihao-Z590-UD-AC:~/ARC$ gcc --version
gcc (GCC) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

MetaWare安装

你可以在官网中进行申请于购买安装媒介:dw_arc_metaware_ev 

MetaWare是收费方案,不是免费的。

下载后你会得到四个文件:

文件名

作用

mwev_S-2021_06_linux_x64_install.bin安装程序
mwev_S-2021_06_linux_x64_install.001安装文件
mwev_S-2021_06_linux_x64_install.002安装文件
mwev_S-2021_06_linux_x64_install.003安装文件

将这四个文件放入同一文件夹中,并在Linux中给予可执行权限:

chmod +x mwev_S-2021_06_linux_x64_install.bin

然后执行:

	./mwev_S-2021_06_linux_x64_install.bin

可以看到如下界面,然后点击“Next”

 选中“I accept the terms of the License Agreement”然后点击Next

然后输入你购买的密钥,最后一直“Next”就可以自动安装了

然后选择好安装路径,在点击“Next”

这一步选择你需要的TOOLS,不需要的可以去掉,根据需求来定,一般全部选中。

这一步点击“Install”即可开始自动化安装,点击之后就可以等待安装完毕了。

 安装完成之后进入安装目录,执行setup.sh

cd ~/ARC
source setup.sh

正常情况下会出现如下输出:

Setup EV Runtime environment...
OCV_HOME is set to '/home/zhihao/ARC/opencv'
Setup EV CNN SDK environment...
EV_CNNSDK_HOME is set to '/home/zhihao/ARC/cnn_tools'
WARING: Synopsys models not found. EV_CNNMODELS_HOME is not defined.
Please clone latest release Synopsys Caffe models repository using Git LFS from:
https://github.com/foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models
INFO: MWEV ASIP tools set-up success for Tofino.
INFO: MWEV ASIP tools set-up success for Toronto.
INFO: MWEV ASIP tools set-up success for Vancouver.
EV_CAFFE_HOME is set to '/home/zhihao/ARC/synopsys_caffe'
EVSS_RT_HOME is set to '/home/zhihao/ARC/ev_runtime/software'
Setup EV CNN SDK environment... DONE!
Checking tools in EV CNN SDK environment...
Found Python version is 3.6.5 : OK
Found cmake version is 3.18.2 : OK
Found make version is 4.2.1 : OK
Found ccac version is 2021.06 : OK
Found gcc version is 7.3.0 : OK
Found g++ version is 7.3.0 : OK
All checked tools are available and have proper versions
Setup EV CNN SDK environment... DONE!
==================================================

可能会出现这个问题:

Setup EV CNN SDK environment...
EV_CNNSDK_HOME is set to '/<install_dir>/cnn_tools'
ERROR: Synopsys Caffe models not found. EV_CNNMODELS_HOME is not defined.
Please clone latest release Synopsys Caffe models repository using Git LFS from:
https://github.com/foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models

这个原因是因为EVSS_RT_HOME路径没有设置,你可以先设置这个环境变量指向安装路径里的“ev_runtime/software”就可以了

export EVSS_RT_HOME=~/ARC/ev_runtime/software

然后在重新执行一次“source setup.sh”即可,这个环境变量我下面会介绍一下它的作用是什么。

增加你的芯片文件

在MetaWare安装目录的“/ev_runtime/software/config/set”里可以看到不同的架构信息,这些芯片都是基于ARC架构,如EV系列是Synopsys公司开发的。

这些目录的作用就是描述芯片信息,如果你有新的框架,那么需要将它放入到这个目录中

zhihao@zhihao-Z590-UD-AC:~/ARC/ev_runtime/software/config/set$ ls
common                       EV64_full
EV61_2mpy                    EV64_full_cnn3520
EV61_base                    EV64_full_cnn880
EV61_base_cnn1760            EV64_full_dnn1760
EV61_base_cnn880             EV64_full_dnn3520
EV61_base_dnn1760            EV64_full_dnn3520_nhvdk
EV61_base_dnn3520            EV64_full_dnn880
EV61_base_dnn880             EV64_full_opencl
EV61_full                    EV71_base
EV61_full_cnn1760_demo       EV71_full
EV61_full_cnn880             EV71_full_dnn880_12b_demo
EV61_full_cnn880_demo        EV71_full_dnn880_12b_demo_nhvdk
EV61_full_cnn880_hsdkev_xio  EV71_full_dnn880_8b_demo
EV61_full_dnn1760            EV71_full_dnn880_8b_demo_nhvdk
EV61_full_dnn1760_demo       EV71_full_nhvdk
EV61_full_dnn3520_demo       EV71_vfpu
EV61_full_dnn880             EV72_base
EV61_full_dnn880_demo        EV72_full
EV61_full_dnn880_hsdkev      EV72_vfpu
EV61_full_dnn880_nhvdk       EV74_armlinux_vdk
EV61_vfpu                    EV74_full
EV62_base                    ev_native
EV62_base_dnn1760            host_aarch64-linux_vdk
EV62_base_dnn880             host_arclinux_hsdk
EV62_full                    host_native_vdk
EV62_full_cnn880             intel_mcf_ev71_dnn880
EV62_full_dnn1760            native
EV62_full_dnn1760_demo       vpx5_integer_base
EV62_full_dnn3520            vpx5_integer_full
EV62_full_dnn3520_hsevvdk    vpx5_max
EV62_full_dnn3520_nhvdk      vpx5_vfpu_base
EV62_full_dnn880             vpx5_vfpu_full
EV62_full_dnn880_demo        vpx5x2_integer_base
EV62_vfpu                    vpx5x2_vfpu_full
EV64_base                    vpx5x4_integer_base
EV64_base_dnn880             vpx5x4_vfpu_full

这些芯片描述目录一般由4个文件,1个文件夹组成

arc.met  arc.tcf  defs.cmake  evss  evss_config.mk

其中“arc.met”是最关键的文件,里面包含了芯片的内存信息,打开以后可以看到相关内存配置,如果是基于ARC架构的芯片,我们通常修改这个配置文件就可以了,将里面的内存地址信息修改成我们的架构就可以了。

_STACKSIZE = 0x0020_0000;
 
__INTV_BASE               = 0x0000_0000;
__HOSTCOM_OFFSET          = 0x0000_1000;
 
# __AUX_VOL_START and __AUX_VOL_SIZE need to be multiple of 256 MiB
__AUX_VOL_START           = 0x4000_0000; __AUX_VOL_SIZE           = 0xC000_0000;
 
# Coherent aperture size needs to be power of 2, >= 4096
# Coherent aperture start address needs to be a multiple of its size
__STU_COH0_START          = 0x0000_0000; __STU_COH0_SIZE          = 0x4000_0000;
__STU_COH1_START          = 0x0000_0000; __STU_COH1_SIZE          = 0x0000_0000;
__HEAP_AREA_START         = 0x1000_0000; _HEAPSIZE                = 0x3000_0000;
__AUX_APP_DATA_AREA_START = 0x4000_0000; __AUX_APP_DATA_AREA_SIZE = 0x1000_0000;
__UNCACHED_AREA_START     = 0x5000_0000; __UNCACHED_AREA_SIZE     = 0x3000_0000;
__CNDC_AREA_START         = 0x0000_0000; __CNDC_AREA_SIZE         = 0x0000_0000;
__CSM_HEAP_START          = 0x0000_0000; __CSM_HEAP_SIZE          = 0x0000_0000;
#__CNN_DMA_COH_START
 
MEMORY 
    DRAM    : ORIGIN = 0x0000_0000, LENGTH = 0x8000_0000
    CSM     : ORIGIN = 0xA000_0000, LENGTH = 0x0008_0000
    VCCM    : ORIGIN = 0x9000_0000, LENGTH = 0x0002_0000

 
SECTIONS 
    .ivt __INTV_BASE SIZE(1024) (TEXT): > DRAM  # Interrupt table
    .ivh                        (TEXT): > DRAM  # Interrupt handlers
    shr_mem __HOSTCOM_OFFSET   (TEXT): > DRAM  # Host/device shared ctl data
 
    # Loadable sections
    GROUP: 
        .text?   ALIGN(64):  *('.text$crt*') 
        * (TEXT) ALIGN(64): 
        * (LIT)  ALIGN(64): 
        .rodata  ALIGN(64): 
        .sdata?  ALIGN(64): 
        .sbss?   ALIGN(64): 
        * (DATA) ALIGN(64): 
     > DRAM

如果你想为你的项目加一些编译选项,可以在“arc.tcf”文件中增加

cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
if(__DEFS_CMAKE__)
    return()
endif()
set(__DEFS_CMAKE__ TRUE)
 
set(EVSS_VDSP 1)
set(EVSS_CFG_HAS_OCL 1)
add_definitions("-DMSS_CLKCTRL_CLOCK_RATIO_ENABLE")
set(EVCNN_VERSION 5)
set(VDSP_ONLY 1)
set(DEVSS_CFG_NUM_SLICE 0)
set(EVSS_CFG_NUM_CORE 1)

编译ev_runtime

首先我们需要编译“ev_runtime/software”项目,这个项目是为解决方案提供底层API,最终编译会生成一个.a的静态库

首先需要设置一个环境变量:

EVSS_RT_HOME:指向ev_runtime/software的完整路径

export EVSS_RT_HOME=~/ARC/ev_runtime/software

设置完成之后cd到ev_runtime/software

cd ev_runtime/software

然后使用make命令直接编译

make -j14 install EVSS_CFG=EV61_full_cnn880

这条命令的参数:

-j14:多线程编译,使用14个线程编译当前项目(根据你机器性能而定)

install:编译后安装到当前环境

EVSS_CFG:芯片描述目录,就是刚刚说到的“ev_runtime/software/config/set”里的描述目录,注意芯片描述目录只能放入到这个文件夹里,不能是绝对路径

编译cnn_tools

如果你的项目需要用到CNN人工智能方面的API,那么需要编译这个TOOLS

编译cnn_tools需要Synopsys Caffe的模型

你可以在: GitHub - foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models: Caffe models for use with Synopsys DesignWare EV6x Processors 下载到它,可以使用git clone下来,文件比较大,因为包含了ssd等不同的模型集合。

下载下来以后你可以看到如下文件体系:

zhihao@zhihao-Z590-UD-AC:~/synopsys-caffe-models$ ls
archived_models  caffe_models  git_sparse_download.bat  git_sparse_download.sh  README.md

其中的“caffe_models”目录就是Synopsys Caffe的模型文件,打开这个文件夹可以看到许多不同的文件模型:

zhihao@zhihao-Z590-UD-AC:~/synopsys-caffe-models/caffe_models$ ls
alexnet          facedetect_v1          icnet                inception_v2   mtcnn_v1    resnet_152    retinanet      srgan                  yolo_tiny
DAN              facedetect_v2          imagenet_mean        inception_v3   openpose    resnet_50     segnet         ssd                    yolo_v1
deeplab          face_net               images               inception_v4   pspnet      resnet50_ssd  shufflenet_v1  ssd_mobilenet_v2_coco  yolo_v2_coco
denoiser         faster_rcnn_resnet101  inception_resnet_v1  lenet          pvanet      ResNeXt_101   shufflenet_v2  unet                   yolo_v2_tiny
densenet         fcn                    inception_resnet_v2  mobilenet      README.md   ResNeXt_152   squeeze        vdsr                   yolo_v2_voc
evgen_util.bash  googlenet              inception_v1         mobilenet_ssd  resnet_101  ResNeXt_50    srcnn          vgg16                  yolo_v3

其中可以看到facedetect人脸,以及yolo物体识别方面的模型,这些模型文件是转化为Synopsys Caffe模型格式后的模型文件。

我们将这个“caffe_models”文件夹copy到cnn_tools文件夹中

首先在cnn_tools目录下创建一个"cnn_models"文件夹

mkdir cnn_models

然后将caffe_models文件夹copy到刚刚创建的cnn_models文件夹中

cp -r ~/synopsys-caffe-models/caffe_models ./cnn_models

然后设置两个环境变量:

EV_CNNMODELS_HOME:这个环境变量指向模型文件存在的文件夹,在编译cnn时,cmake脚本会自动读取这个变量获取models的地址

EV_CNNSDK_HOME:指向cnn_tools的完整路径

export EV_CNNMODELS_HOME=~/ARC/cnn_tools/cnn_models
export EV_CNNSDK_HOME==~/ARC/cnn_tools

设置完成之后cd进入到cnn_tools的目录中

cd cnn_tools

然后输入如下命令:

make -j14 install EVSS_CFG=EV61_full_cnn880

编译examples

我们可以编译一个cnn_tools里的一个演示项目

首先cd到examples目录中

cd cnn_tools/

然后ls可以查看下面有多少演示项目

zhihao@zhihao-Z590-UD-AC:~/ARC/cnn_tools/examples$ ls
classification  common  demos  detection  face_recognition  getting_started  image_processing  Makefile  pose_estimation  README.md  scene_segmentation

我这里编译getting_started里的项目

这里编译FaceDetect-V1项目,是一个面部识别的项目

zhihao@zhihao-Z590-UD-AC:~/ARC/cnn_tools/examples/getting_started$ ls
FaceDetect-V1  FaceDetect-V2  LeNet

cd进入这个目录

cd FaceDetect-V1

然后输入如下命令

make build EVSS_CFG=intel_mcf_ev71_dnn880 CNN_ABSTRACTION=host_fixed

编译完成之后会在当前目录下生成build目录,进去之后就可以看到生成的out文件:

CMakeCache.txt  cmake_install.cmake  cnn_src                evgencnn           Makefile  run_arc.args
CMakeFiles      cnn_obj              compile_commands.json  facedetect_v1.out  map.txt   run_arguments.mk

facedetect_v1.out就是可以烧录到芯片里去的文件

如果你想重新编译库的话,可以加上“EVSS_PROFILE=small”就可以快速编译,不需要完全重新编译,这个情况只在没有特别大的改动的情况下。

如果想要编译Debug版本的话可以加上“EVSS_DBG=1

如果不想每次编译都重新设置环境变量,可以将你的环境变量添加到bashrc文件中:

export LM_LICENSE_FILE=密钥
export SNPSLMD_LICENSE_FILE=密钥
export VG_GNU_PACKAGE=~/linux
source $VG_GNU_PACKAGE/source_me_gcc730.sh
source ~/ARC/setup.sh
export EV_CNNMODELS_HOME=~/ARC/cnn_tools/cnn_models
export EVSS_RT_HOME=~/ARC/ev_runtime/software
export EV_CNNSDK_HOME=~/ARC/cnn_tools

以上是关于Synopsys MetaWare for Linux 安装与编译指南的主要内容,如果未能解决你的问题,请参考以下文章

Synopsys DC综合脚本示例

synopsys的license程序在Centos6.8下的问题

SYNOPSYS VCS Makefile文件编写与研究

Synopsys VCS 学习笔记

synopsys license maker

Using tcl with synopsys command