参考资料:VCS2018在Ubuntu20 18安装步骤VCS compiling error issues - devinddUbuntu22.10安装VCS、Verdi

1 资源获取

百度网盘链接 提取码:3pib

  • 文件内容
    • libpng12.so.0:后面可能会需要这个包
    • scl_keygen_2030:这个是License生成器
    • scl_v2018.06:这个是SCL安装包,用来
    • synopsysinstaller_v5.0:这个是安装器
    • vcs_vO-2018.09-SP2:这个是vcs的安装包
    • verdi-2018.9:这个是verdi安装包

2 安装步骤

2.1 建立安装路径,更改权限

在这里插入图片描述
建立图2的安装目录文件:Liscen用来存放license文件,SCL2018vcs2018verdi是对应的安装路径;vcs_install用来存放安装包好安装器。

2.2 运行安装器进行安装

  1. 进入synopsysinstaller_v5.0文件夹,运行./SynopsysInstaller_v5.0.run,会出现下面界面,提示选择安装器安装路径,直接在本路径下安装即可
    在这里插入图片描述
    安装后出现setup.sh
    在这里插入图片描述

  2. 运行setup.sh,进入安装界面,当前安装器可以依次安装Scl、vcs、verdi。下面以vcs安装为例。

  3. 安装器安装的详细过程
    在这里插入图片描述
    选择安装包的路径
    在这里插入图片描述
    选择要安装的地址,也就是第一步创建的目录
    在这里插入图片描述
    点击next,进入下面界面,选择vcs
    在这里插入图片描述
    一路next,进入下面界面,点击Accept,install,然后等待安装
    在这里插入图片描述
    安装完后会弹出安装失败,不管这个错误,点击OK
    在这里插入图片描述
    然后跳转到这个目录,手动运行这个脚本,根据提示选择路径。
    在这里插入图片描述
    出现下面界面,点击Dismiss, vcs安装结束。
    在这里插入图片描述

  4. 重复第2步和第3步,选择不同的安装包和安装路径,继续安装verdiscl

2.3 生成License文件

  1. 在linux系统终端运行ifconfig获取电脑的物理地址和host-name,如下图所示;
    在这里插入图片描述
  2. 前往window系统运行这个scl_keygen.exe文件生成License文件Synopsys.dat
    在这里插入图片描述
    出现下面界面,图中需要修改三个地方,
    在这里插入图片描述
    1 2为电脑物理地址,填写物理地址的时候中间的记得去掉。3为linux的host-name。
  3. 打开Synopsys.dat文件,需要修改的地方有一个
    在这里插入图片描述
    需要在1这个地方添加snpslmd的路径,注意路径记得改成自己的路径,如下图所示
    在这里插入图片描述
    同时需要注意license有效期的问题,其他的license生成器可能生成的license有效期是2019,需要手动改成2030。本license生成器license有效期为2030,所以不需要改动。如下图所示
    在这里插入图片描述
  4. 修改完毕之后,将Synopsys.dat转移到Linux系统下的Liscen目录中。

2.4 设置环境变量

根目录下打开.bashrc,将下面内容复制进去,下面的路径记得改成自己的路径;设置好后运行source .bashrc命令使环境变量生效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#export export SYNOPSYS="/usr/software/synopsys"
export VCS_TARGET_ARCH="amd64"
export PATH="/usr/stone/software/vcs2018/vcs/O-2018.09-SP2/gui/dve/bin:"$PATH
export DVE_HOME="/usr/stone/software/vcs2018/vcs/O-2018.09-SP2/gui/dve"
export PATH="/usr/stone/software/vcs2018/vcs/O-2018.09-SP2/bin:"$PATH
export VCS_HOME="/usr/stone/software/vcs2018/vcs/O-2018.09-SP2"
#export VCS_ARCH_OVERRIDE="linux"
#verdi
export PATH="/usr/stone/software/verdi/verdi/Verdi_O-2018.09-SP2/bin:"$PATH
export VERDI_HOME="/usr/stone/software/verdi/verdi/Verdi_O-2018.09-SP2"
export LD_LIBRARY_PATH="/usr/stone/software/verdi/verdi/Verdi_O-2018.09-SP2/share/PLI/lib/LINUX64":$LD_LIBRARY_PATH
export VERDI_DIR="/usr/stone/software/verdi/verdi/Verdi_O-2018.09-SP2"
export NOVAS_INST_DIR="/usr/stone/software/verdi/verdi/Verdi_O-2018.09-SP2"
export NPI_PLATFORM="LINUX64_GNU_472"
export LD_LIBRARY_PATH="$NOVAS_INST_DIR/share/NPI/lib/LINUX64_GNU_520":$LD_LIBRARY_PATH
export NOVAS_HOME="/usr/stone/software/verdi/verdi/Verdi_O-2018.09-SP2"

#LICENSE
export SNPSLMD_LICENSE_FILE="/usr/stone/software/Liscen/Synopsys.dat"
export SNPSLMD_LICENSE_FILE=27000@自己的host-name
export LM_LICENSE_FILE="/usr/stone/software/Liscen/Synopsys.dat"
alias lmli="/usr/stone/software/SCL2018/scl/2018.06/linux64/bin/lmgrd -c /usr/stone/software/License/Synopsys.dat"
#SCL
export PATH=/usr/stone/software/SCL2018/scl/2018.06/linux64/bin:$PATH
alias dve="dve -full64 &"
alias vcs64="vcs -full64"
alias verdi="verdi -full64 &"

2.5 验证License

通过下面命令验证license,直到出现Passed,如下所示。如果多次验证依旧没有出现Passed,那么重新生成license,重新验证

1
sssverify 自己的license路径

在这里插入图片描述

2.6 启动lmgrd

lmgrd是license管理工具,用于将license运行在后台,使软件正常工作,目前对于lmgrd理解只有这些。由于在环境变量设置了命令,所以输入lmli就可以启动lmgrd

  1. 问题一:
    路径明明正确,通过ls也可以看到lmgrd,但它就是找不到lmgrd 。
    在这里插入图片描述
    解决方案: 这是因为没有32位运行库导致的通过下面命令安装即可。
1
apt-get install lsb
  1. 问题二:
    再次执行lmli,提示没有/usr/tmp目录和在/usr/local/flexlm/licenses目录下找不到license。这个是肯定的,因为你压根就没有建这些目录
    在这里插入图片描述
    解决方案: 在/usr建立tmp目录,建立local/flexlm/licenses目录,把Synopsys.dat复制到licenses目录下,并把名字改成license.bat

  2. 问题三:
    提示打不开license,这是因为环境变量SNPSLMD_LICENSE_FILE的问题,在这个环境变量中赋值了两次,第一次是license的位置,第二次是用户。
    在这里插入图片描述
    解决方案: 这里需要license的位置,所以先把第二个赋值注释,在后面启动DVE中,又会需要第二次赋值,再把注释打开

  3. 问题四:
    由于上面lmgrd没有启动成功,但是端口号他还是占用的。当你再次输入lmli,应该会出现下面错误,显示端口号被占用
    在这里插入图片描述
    解决方案: 输入下面命令终止该端口号。首先释放license,显示lmgrd占用的端口号,然后结束这个端口号进程,如下图所示

    1
    lmdown ps auf | grep lmgrd kill -9 2381

    在这里插入图片描述
    然后再次输入lmli,启动lmgrd。
    在这里插入图片描述

  4. 问题五:
    提示verdi语法错误Syntax error: “(“ unexpected
    7e05b497b9ef8075fd878404c3e94aa0.png
    解决方案: 代码对于标准bash而言没有错,因为Ubuntu为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼,解决方法就是取消dash。

    1
    sudo dpkg-reconfigure dash

    fcca05d088a62e2b3ee8f3c480f287c5.png
    选择no

2.7 验证软件是否安装成功

  1. dve
    输入dve,再次报错,提示SNPSLMD_LICENSE_FILE指示错误server。
    在这里插入图片描述
    解决方案: 不慌,这个就是咱上面遗留的问题,把上面的注释打开即可。再次输入dve,见证dve的真面目吧!!!
  2. verdi
    输入verdi,不要慌张,该来的总会来的。提示没有libpng12.so.0这个库
    在这里插入图片描述
    解决方案: 还记得第一步提到的那个库文件么,这时候就派上用场了。输入下面命令,注意libpng12.so.0是文件夹里面的文件,移动整个文件夹无法解决问题
    1
    sudo cp libpng12.so.0  /usr/lib/x86_64-linux-gnu/
    再次输入verdi,激动吧!
  3. VCS
    输入vcs -help,坚持就是胜利!出现下面错误
    1
    /bin/sh:0: illegal option –h
    解决方案: 这是因为Ubuntu下默认将sh链接到bash,输入下面命令重新链接。
    1
    rm -f /bin/sh ln -s /bin/bash /bin/sh
    输入vcs -help,好了,你的努力不是白费的。
    在这里插入图片描述

2.8 设置开机自启动License

/etc/profile.d/目录下创建lmli.sh

1
2
3
cd /etc/profile.d/  
sudo touch lmli.sh
sudo chmod 777 lmli.sh

写入下面内容

1
2
3
/usr/stone/software/SCL2018/scl/2018.06/linux64/bin/lmgrd -c 
/usr/stone/software/License/Synopsys.dat -l
/usr/stone/software/SCL2018/scl/2018.06/linux64/bin/lmgrd.log

至此,vcs安装结束!

3 VCS启动过程中的问题

1. VCS安装license激活的问题

在VCS安装好后,使用scl工具对license进行激活时,可能会遇到如下错误:

1
bash: /usr/synopsys/scl/scl/linux64/bin/lmgrd: No such file or directory

该问题的原因是没有lsb库,在保证license文件路径正确的情况下,使用如下命令安装lsb库:

1
sudo apt-get install lsb-core

安装完成后reboot虚拟机即可解决上述问题,但可能还会出现flexlm文件不存在的问题:

1
Can't make directory /usr/tmp/.flexlm, errno: 2(No such file or directory)

这个问题比较好解决,直接创建一个flexlm文件就行了:

1
2
1.  sudo mkdir /usr/tmp 
2. sudo touch /usr/tmp/.flexlm

4 VCS编译仿真中的问题

4.1 recipe for target ‘simv’ failed问题

在临时license授权成功后,就可以对编写的RTL代码编译和运行,但由于系统一开始缺少一些设置,直接运行VCS可能会出现一些问题,一开始会遇到这样的问题:

1
2
3
/bin/sh: 0: Illegal option -h
Makefile:4: recipe for target 'simv' failed
make: *** [simv] Error 2

该问题是由于Ubuntu操作系统将sh链接到了dash,手动修改sh链接到bash即可解决该问题:

1
2
sudo mv /bin/sh /bin/sh_bak
sudo ln -s /bin/bash /bin/sh

4.2 product_timestamp error问题

解决上述问题后,可能会遇到product_timestamp error的问题:

1
2
3
4
Makefile:109: recipe for target 'product_timestamp' failed
make[1]: *** [product_timestamp] Error 1
make[1]: Leaving directory '/home/alanwu/Documents/RISCV-SIM/csrc'
Make exited with status 2

这是因为操作系统安装的gcc版本太高,VCS调用的版本较低,需要修改VCS启动的变量,将gcc指定为g+±4.8,同时在你的vcs命令中添加如下命令:

1
2
3
4
5
6
7
8
simv:filelist.f	
vcs -full64 -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed \
-f filelist.f \
-sverilog \
-debug_access+all \
-kdb \
-timescale=1ns/1ps \
-l com.log

如果操作系统没有安装gcc 4.8,会报错:

1
2
make[1]: Entering directory '/home/alanwu/Documents/RISCV-SIM/csrc'
make[1]: gcc-4.8: Command not found

安装gcc 4.8即可,这里安装直接从官方下载安装(如下方式)即可,不建议使用安装包的方式完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd
mkdir install_g++-4.8
cd install_g++-4.8/
sudo apt update
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/g++-4.8_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/cpp-4.8_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libasan0_4.8.5-4ubuntu8_amd64.deb
sudo apt install ./gcc-4.8_4.8.5-4ubuntu8_amd64.deb ./gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb ./libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb ./cpp-4.8_4.8.5-4ubuntu8_amd64.deb ./libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb ./libasan0_4.8.5-4ubuntu8_amd64.deb ./g++-4.8_4.8.5-4ubuntu8_amd64.deb
cd
rm -rf install_g++-4.8

4.3 g+±4.8 unrecognized command line option '-no-pie’错误

这里重点强调下g++的-no-pie错误,在安装好gcc 4.8和g+±4.8以后,可能还会报出g+±4.8: error: unrecognized command line option '-no-pie’的错误:

1
2
g++-4.8: error: unrecognized command line option '-no-pie'
Makefile:109: recipe for target 'product_timestamp' failed

出现该错误的原因是g++版本较低,VCS的预编译选项中会添加-no-pie标志,但g++不能够识别该命令,在VCS编译完成后的/csrc/Makefile文件中,会增加预编译选项:

csrc是个临时文件,真正产生该文件的位置是在安装的VCS路径下面:

因此,进入VCS安装路径对应的/bin/文件夹下,打开vcs文件,将其中的PRE_LDFLAGS参数后面的-no-pie删除,即可成功解决该问题。

4.5 undefined reference to ‘vfs_set_dir_map’问题

在vcs编译选项中加入下列语句:

1
-LDFLAGS -Wl,--no-as-needed

4.5 undefined reference to pthread_yield问题

原因是:/home/synopsys/vcs_2018.9/vcs/O-2018.09-SP2/linux64/lib/vcs_save_restore_new.o 中的pthread_yield已在最新的glibc放弃使用了。注意文件夹路径

1
2
3
4
# 1. 备份 
mv /home/synopsys/vcs/O-2018.09-SP2/linux64/lib/vcs_save_restore_new.o /home/synopsys/vcs/O-2018.09-SP2/linux64/lib/vcs_save_restore_new.o.bak
# 2. 替换符号表中的pthread_yield
objcopy --redefine-sym pthread_yield=sched_yield /home/synopsys/vcs/O-2018.09-SP2/linux64/lib/vcs_save_restore_new.o.bak /home/synopsys/vcs/O-2018.09-SP2/linux64/lib/vcs_save_restore_new.o