vcs部署与联合仿真

本文最后更新于:2024年12月20日 下午

Synopsys全套docker镜像使用指南 - 知乎

Windows | Docker Docs

VCS部署:使用docker搭建环境

  • 安装WSL2作为docker的后端支持

过程参考文章:

记录wsl安装

  • 下载docker

Windows | Docker Docs

  • 配置docker

为docker配置镜像加速器(阿里云)

  • 启动docker容器
    • 拉取镜像(由于镜像在github上,需要科学上网,否则一直拉取失败)
1
docker pull phyzli/ubuntu18.04_xfce4_vnc4server_synopsys2016
- 启动镜像(并创建容器)
1
docker run -it -p 5902:5902 -p 1234:22 --hostname lizhen --mac-address 02:42:ac:11:00:02 -v //d/wsl/docker-data/vcs-data:/mnt/vcsdata phyzli/ubuntu18.04_xfce4_vnc4server_synopsys2016
- 在容器内打开VNC远程桌面(图形界面比命令行界面更方便使用)
1
vncserver -geometry 1920x1080 :2
- 打开VNC viewer软件,配置连接,地址是127.0.0.1:5902,连接密码为zhenchen
- 打开之后就可以进入到类似于虚拟机的界面,可以在这里面使用vcs与verdi联合仿真了

ps:如果想要像使用虚拟机一样使用docker容器(即每次使用完毕之后“关机”,再次使用时“开机”后能恢复到关机之前的状态),那么我们在使用容器之后不能删除这个容器,而是将其终止(stop)。

我们可以在命令行使用指令docker container stop来终止一个运行中的容器,之后使用时使用docker container start启动即可,启动之后将会恢复之前的状态。也可以在docker desktop中点击“暂停”按钮进行终止操作。

对于使用了vncviewer的用户,每次容器重启后之前设置的虚拟机界面都无法重新打开了,会报一个下图中的错误:

解决方法是删除/tmp/.X2-lock和 /tmp/.X11-unix/X2这两个文件后再重洗输入vncserver指令打开,我们可以将其写到一个脚本,每次启动容器后自动执行即可。

1
2
3
rm -rf /tmp/.X2-lock
rm -rf /tmp/.X11-unix/X2
vncserver -geometry 1920x1080 :2

vcs与verdi联合仿真

VCS入门教程(一) - 知乎

IC入门 第三篇 VCS、Verdi - 知乎

  • 编译仿真文件
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
vcs [compile_time_option]	

[compile_time_option] : #编译选项用来控制编译过程
-f filename #指定编译源文件,可以同时编译多个源文件
-timescale=1ns/1ps #设置仿真精度
-sverilog #指定兼容SystemVerilog
## -o simv #默认编译后产生可执行文件为simv,可修改文件名,一般不使用
+v2k #兼容verilog 2001 以前的标准
-Mupdate #只编译有改动的.v文件
-R #编译后立即运行./simv文件
-l ***.log #编译信息存放在.log中,也就是出现在终端上的所有信息
-P ***/verdi/share/PLI/VCS/LINUX/novas.tab #调用verdi的库,也就是在tb文件中添加几行代码所需要的文件路径
***/verdi/share/PLI/VCS/LINUX/pli.a
-debug_all #用于产生debug所需的文件


-f filename参数适合同时编译多个源文件
将源文件名称写入.f文件中,并将其指定给这个参数
Eg:
----------------
verilog_file.f
./fa.v
./add4.v
./add8.v
./addertb.v
----------------
  • 执行仿真文件
1
2
3
4
5
./simv [run_time_option]						#默认编译后产生可执行文件为simv

[run_time_option]:
-l ***.log #编译信息存放在.log中,也就是出现在终端上的所有信息
-gui=verdi #使用verdi显示波形
  • 使用verdi查看波形

VCS与Verdi的联合仿真-腾讯云开发者社区-腾讯云

vcs + verdi 查看仿真波形_verdi里g1g2什么意思-CSDN博客

Verdi操作小结_verdi在代码里显示信号值-CSDN博客

Verdi只能查看fsdb格式的波形,而VCS可以生成供DVE查看的vpd格式的波形,如果想要输出fsdb格式的波形,需要额外在testbench中添加fsdb指令,或者通过脚本进行设置。FSDB全称为(Fast Signal Data Base):快速信号数据库,fsdb文件是Verdi使用的一种专用数据格式,fsdb通过verilog的PLI接口实现

verdi报错

要产生fsdb文件还需要在tb文件中加上一下几行代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
initial
begin
$fsdbDumpfile("tb_top.fsdb"); //产生波形的名字(指定生成的fsdb文件的文件名)
$fsdbDumpvars(0,tb_top); //testbench文件的名字(指定dump的变量,0表示存储所有的wave,tb为起始层)
$fsdbDumpSVA();
$fsdbDumpMDA();
end

当然,为了能够成功调用诸如fsdbDumpfile()、fsdbDumpvars()等非HDL标准语法规定的函数
我们还需要在上述编译选项中加上:
-P ***/verdi/share/PLI/VCS/LINUX/novas.tab
***/verdi/share/PLI/VCS/LINUX/pli.a
这用来调用verdi的库,也就是在tb文件中添加的这四行代码所需要的文件路径(这个路径根据个人电脑设置不同而有所差异)
1
2
3
4
5
verdi   -sv             						#Systemverilog的支持
+v2k #兼容verilog 2001 以前的标准
-f ***.f #添加.f文件里的源码
-ssf tb_top.fsdb #加载fsdb波形,tb.sv中产生的波形名字有关
-nologo #打开界面时不出现logo

export LD_LIBRARY_PATH=/usr/synopsys/verdi-L-2016.06-1/share/PLI/VCS/linux64

ps:当需要使用到vcs仿真,verdi查看波形时,在终端上一个一个敲指令变得十分不方便,我们可以使用makefile来帮助我们编译仿真

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-----------------------------makefile-------------------------------
.PHONY: com sim verdi clean

OUTPUT = tb_binary2bcd
FILE = b2bcd.f

com:
vcs -sverilog +v2k -f ${FILE} \
-timescale=1ns/1ns \
-o ${OUTPUT} \
-kdb \
-lca \
-debug_access+all \
-l compile.log \
-P /usr/synopsys/verdi-L-2016.06-1/share/PLI/VCS/linux64/novas.tab \
/usr/synopsys/verdi-L-2016.06-1/share/PLI/VCS/linux64/pli.a


sim:
./${OUTPUT} -l sim.log

verdi:
verdi +v2k -f ${FILE} \
-ssf ${OUTPUT}.fsdb \
-nologo

clean:
rm -rf ./csrc *.daidir *.log simv* *.key *.fsdb ${OUTPUT}

-----------------------------makefile-------------------------------

1、在终端中敲入make com,相当于输入:
vcs -sverilog +v2k -f b2bcd.f -timescale=1ns/1ns -o tb_binary2bcd -kdb -lca -debug_access+all -l compile.log \
-P /usr/synopsys/verdi-L-2016.06-1/share/PLI/VCS/linux64/novas.tab /usr/synopsys/verdi-L-2016.06-1/share/PLI/VCS/linux64/pli.a

2、在终端中敲入make sim,相当于输入:
./tb_binary2bcd -l sim.log

3、在终端中敲入make clean,相当于输入:
rm -rf ./csrc *.daidir *.log simv* *.key *.fsdb tb_binary2bcd


总结

总的来说,就是用shell、makefile脚本先去调用vcs,vcs进行对verilog文件进行编译、仿真并产生.fsdb文件,然后再调用verdi添加所有工程文件,打开.fsdb文件对波形进行查看。


vcs部署与联合仿真
http://example.com/2024/12/20/vcs部署与联合仿真/
作者
叶逸昇
发布于
2024年12月20日
许可协议