Loading

【Vcs + Verdi】仿真环境搭建

版本记录


版本号 描述 日期 作者
v1.0 初始版本 2024/10/10 winki
v2.0 根据代码仓环境重新修改仿真环境 2025/3/20 winki
v3.0 添加优化仿真时间的方法 2025/3/31 winki
v4.0 优化版本,重新定义环境配置以及代码添加、存放的方式 2025/12/3 winki
v5.0 重新整理环境结构,使用 vcs 三步法进行编译 2026/06/10 winki




环境代码


文件目录

  • 在使用环境时,请按照下方 Example 中的环境格式进行搭建。Makefile 中的编译选项以及输出路径都以该环境的相对路径编写
  • 使用该环境进行仿真时,请参考 本文的 “代码规范” 一节。该环境与 Vivado 工程管理 一文共同维护一个项目工程

[!example]+

sim_env
├──── 00_tb_file                        //所有testbench相关仿真文件
|     ├──── testbench.sv                //testbench
|     ├──── filelist.f                  //支撑仿真所需的文件列表
|     └──── driver.sv                   
├──── 01_temp_file                      //临时文件夹,仿真产生的中间文件都放到该文件夹中
├──── 02_log_file                       //日志文件夹
├──── Makefile                          //Makefile文件
└──── setupENV.sh                       //配置仿真环境变量

Makefile

[!example]+

#########################################################################
#																	   	#
#                   Set Variables									   	#
#																	   	#
#########################################################################
TIMESTAMP 	= 	$(shell date +%Y%m%d%H%M)
TB_TOP_NAME	=	testbench
TIMESCALE	=	-timescale=1ns/1ns
DEFINE		=	MASK_DDR+MASK_ILA

compile_filelist = \
	${GITLAB}/01_src/00_hdl/module_a/filelist.f \
	${GITLAB}/01_src/00_hdl/module_b/filelist.f \
	${GITLAB}/01_src/00_hdl/module_c/filelist.f \
	${GITLAB}/01_src/00_hdl/module_d/filelist.f \
	./00_tb_file/filelist.f




#########################################################################
#																	   	#
#                   VCS & Verdi Compile option						   	#
#																	   	#
#########################################################################
vlogan_opt= \
	-kdb -lca -full64 -notice -nc -sverilog +v2k \
	+define+${DEFINE} ${TIMESCALE} \
	${XILINX_VIVADO}/data/verilog/src/glbl.v \
	-l ./02_log_file/anly_${TIMESTAMP}.log


elab_opt = \
	-kdb -lca -full64 -nc -notice -top ${TB_TOP_NAME}+glbl -debug_access+all \
	-P ${VERDI_HOME}/share/PLI/VCS/LINUX64/novas.tab \
	${VERDI_HOME}/share/PLI/VCS/LINUX64/pli.a \
	-o ./01_temp_file/simv \
	-l ./02_log_file/elab_${TIMESTAMP}.log \
	-Mdir=./01_temp_file

run_options = \
	+no_notifier +notimingcheck \
	-cm line+cond+fsm+tgl+branch \
	+fsdb+dump_log=off \
	+fsdbfile+./01_temp_file/${TB_TOP_NAME}.fsdb \
 	-l ./02_log_file/sim_${TIMESTAMP}.log

verdi_options = \
	-nologo \
	-ssf   ./01_temp_file/${TB_TOP_NAME}.fsdb \
	-dbdir ./01_temp_file/simv.daidir &




########################################################################
#																	   #
#                   Makefile command						   		   #
#																	   #
########################################################################
merge_filelist:
	cat ${compile_filelist} | sort -u > ./00_tb_file/total_filelist.f

analy:
	vlogan ${vlogan_opt} -f ./00_tb_file/total_filelist.f

elab:
	vcs ${elab_opt}

sim:
	./01_temp_file/simv ${run_options}
	
sim_gui:
	./01_temp_file/simv ${run_options} -gui

verdi:
	verdi ${verdi_options}

clean:
	rm -rf ./01_temp_file/* ./02_log/* \
	novas* verdiLog* ucli*

setENV. sh

[!example]+

#!/bin/sh
export SYNOPSYS_SIM_SETUP=/proj/winkiliang/sim_lib/synopsys_sim.setup	#配置xilinx编译库位置
export GITLAB=/proj/winkiliang/gitlab									#配置filelist.f文件中的路径变量




使用说明


第一步 :编译仿真库

  1. 打开 Vivado
  2. 在 Tcl 命令窗中,输入 config_compile_simlib -cfgopt {vcs.verilog.global:-kdb}
  3. 点击 Tools -> Compile Simulation Libraries ,将会显示 Compile Simulation Libraries 窗口
  4. 根据自己所使用的语法和器件,选择对应的选项
    • Simulatior:仿真器,选择 VCS
    • Language:语言,选择 All
    • Library:编译库,选择 All
    • Family:系列,选择 All (也可以只编译项目的器件系列)
    • Compiled library location:编译库的输出路径
    • Simulator executable path:仿真器的路径 (需根据 Vivado 版本选择对应的 vcs 版本)
    • GCC executable path:GCC 可执行文件的路径 (需根据 Vivado 版本选择对应的 gcc 版本)
    • Miscellaneous Option:指定其他选项,这里添加 -no_xxx
    • Compile AMD IP:为 AMD IP 启动编译仿真库,这里 勾选
    • Overwrite current pre-compiled libraries:覆盖当前编译库,这里 不勾选
    • Verbose:暂时覆盖所有消息限制,这里 不勾选
    • Command:tcl 命令,上述选项所等效的 tcl 命令
  5. 点击 Compile,开始编译

下面是我当前使用的编译库(复制上述操作的 tcl 命令)

[!example]+

config_compile_simlib -cfgopt {vcs.vhdl.global:-kdb}

compile_simlib \
	-simulator vcs \
	-simulator_exec_path {/home/tools/Synopsys/vcs/I-2023.03-1/bin} \
	-gcc_exec_path {/home/tools/gcc/9.2.0/bin} \
	-family virtexuplus \
	-language verilog \
	-library all \
	-dir {/proj/winkiliang/sim_lib} \
	-no_systemc_compile



第二步 :设置环境参数

  1. 修改 MakefileSet Variables 下方配置
    • TIMESTAMP :当前时间戳,用于命名编译时产生的 log 文件时间(不需要修改)
    • TB_TOP_NAME :testbench 名字(建议不作修改)
    • TIMESCALE : 指定时间精度
    • DEFINE :宏定义,与代码中的 ifdef / ifndef 配套使用
    • compile_filelist :仿真中所使用到的子模块文件列表,请参考 本文的 “代码规范 — filelist.f” 一节说明
      700
  2. 修改 setupENV. sh 中的环境变量



第三步 :输入命令

[!Tip]

命令 说明
source setupENV.sh 配置仿真环境变量
make analy 对 total_filelist.f 中的文件进行语法检查并翻译成库文件
make elab 读取编译好的库文件,建立层次结构,生成可执行文件
make sim 运行可执行文件,输出仿真结果
make sim_verdi 用 verdi 打开可执行文件,在 verdi 中进行单步调试
make verdi 用 verdi 打开波形文件
make clean 清除仿真产生的所有文件
make merge_filelist 将 Makefile 中所有 filelist 合并成一个总的 total_filelist.f

[!example] 常规仿真流程

source setupENV.sh
make analy
make elab
make sim
make verdi

[!example] 单步调试流程

source setupENV.sh
make analy
make elab
make sim_verdi




代码规范


filelist.f(文件列表)

背景:

  • 在系统中,一般以功能模块去划分不同的子系统,并将子模块放到一个以功能模块命名的文件夹中。在这个子系统中,可能会使用一些公共模块去协助开发,而这些公共模块可能是存放在另外一个文件夹中;当其他人使用这个模块时,可能并不清楚会使用到哪些模块,也不清楚该模块放在哪。因此,这里建议开发人员在完成开发后,编写一个 filelist.f 文件列表,在 filelist.f 中列出所有该子系统所需的模块。这样,不论是添加该子系统到 Vivado 工程中或者是用于仿真,都只需要添加该 filelist.f 即可

目的:

  • 如果该子系统有一个包含了所有子模块的文件列表,并且所有子模块都有一个共同的路径。那么我们在使用这个子系统的时候,只需要做 2 件事:
    1. 添加该文件列表
    2. 配置共同路径的环境变量

要求:

  1. 每个子系统中必须有一个包含该子系统所有子模块的文件列表
  2. 文件列表中的路径必须是相对路径,而且路径的前缀必须是 ${GITLAB}

[!example]

${GITLAB}/i2c_master/i2c_master.v
${GITLAB}/i2c_master/a.v
${GITLAB}/i2c_master/b.v
...
${GITLAB}/common/test_reg.v




编译选项介绍


vlogan_opt

编译选项 说明
-full64 64 位编译模式
-kdb -lca 使能生成 verdi KDB 数据库
+v2k 支持 Verilog-2001
-sverilog 支持 SystemVerilog
-nc 屏蔽 Synopsys 版权消息
-notice 启用详细诊断消息
-l <analysis.log> 日志文件输出
-timescale=1ns/1ns 指定时间精度
+define+<macro> 定义一个文本宏

elabration_opt

编译选项 说明
-full64 64 位编译模式
-kdb -lca 使能生成 verdi KDB 数据库
-notice 启用详细诊断消息
-top <file> 设置 file 为顶层文件
-debug_access+all Full Debug mode
-P /xxx/novas.tab /xxx/pli.a 指定使用的 PLI 表文件与库文件 pli.a
-o /path/simv 指定运行文件路径和名称
-l <elab.log> 日志文件输出
-Mdir=./01_temp_file 指定增量编译的目录
-nc 屏蔽 Synopsys 版权消息

## run_opt
编译选项 说明
+no_notifier
+notimingcheck 不进行时序检查
-cm line+cond+fsm+tgl+branch 代码覆盖率收集选项
+fsdb+dump_log=off 关闭 dump 波形日志
+fsdbfile+<xxx.fsdb> 添加 fsdb 文件
-l <sim.log> 日志文件输出

verdi_opt

编译选项 说明
-nologo 不显示 verdi logo
-ssf /path/xxx. fsdb 打开 fsdb 波形文件
-dbdir /path/simv. daidir 打开仿真器数据库(database)文件夹,其中存放的是包含了编译信息的中间数据

Verdi 界面说明








参考文献


  1. Vivado Design Suite 用户指南: 逻辑仿真 (UG900)
  2. Verdi快速上手技巧大全
  3. Verification Continuum™ VCS User Guide, Version V-2023.12
  4. VCS使用教程 (Synopsys VCS Simulator Tutorial)
posted @ 2026-06-10 22:56  winki_0213  阅读(55)  评论(0)    收藏  举报