版本记录
| 版本号 |
描述 |
日期 |
作者 |
| 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
1 2 3 4 5 6 7 8 9
| 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
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
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
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 &
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
1 2 3
| #!/bin/sh export SYNOPSYS_SIM_SETUP=/proj/winkiliang/sim_lib/synopsys_sim.setup #配置xilinx编译库位置 export GITLAB=/proj/winkiliang/gitlab #配置filelist.f文件中的路径变量
|
使用说明
第一步 :编译仿真库
- 打开 Vivado
- 在 Tcl 命令窗中,输入
config_compile_simlib -cfgopt {vcs.verilog.global:-kdb}
- 点击
Tools -> Compile Simulation Libraries ,将会显示 Compile Simulation Libraries 窗口
- 根据自己所使用的语法和器件,选择对应的选项
- 点击
Compile,开始编译
| 选项 |
说明 |
| 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 命令 |
下面是我当前使用的编译库(复制上述操作的 tcl 命令)
Example
1 2 3 4 5 6 7 8 9 10 11 12
| 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
|
第二步 :设置环境参数
- 修改 Makefile 中
Set Variables 下方配置
- TIMESTAMP :当前时间戳,用于命名编译时产生的 log 文件时间(不需要修改)
- TB_TOP_NAME :testbench 名字(建议不作修改)
- TIMESCALE : 指定时间精度
- DEFINE :宏定义,与代码中的
ifdef / ifndef 配套使用
- compile_filelist :仿真中所使用到的子模块文件列表,请参考 本文的 “代码规范 — filelist.f” 一节说明

- 修改 setupENV. sh 中的环境变量
第三步 :输入命令
| 命令 |
说明 |
| 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 |
1 2 3 4 5
| source setupENV.sh make analy make elab make sim make verdi
|
1 2 3 4
| source setupENV.sh make analy make elab make sim_verdi
|
代码规范
filelist.f(文件列表)
背景:
- 在系统中,一般以功能模块去划分不同的子系统,并将子模块放到一个以功能模块命名的文件夹中。在这个子系统中,可能会使用一些公共模块去协助开发,而这些公共模块可能是存放在另外一个文件夹中;当其他人使用这个模块时,可能并不清楚会使用到哪些模块,也不清楚该模块放在哪。因此,这里建议开发人员在完成开发后,编写一个 filelist.f 文件列表,在 filelist.f 中列出所有该子系统所需的模块。这样,不论是添加该子系统到 Vivado 工程中或者是用于仿真,都只需要添加该 filelist.f 即可
目的:
- 如果该子系统有一个包含了所有子模块的文件列表,并且所有子模块都有一个共同的路径。那么我们在使用这个子系统的时候,只需要做 2 件事:
- 添加该文件列表
- 配置共同路径的环境变量
要求:
- 每个子系统中必须有一个包含该子系统所有子模块的文件列表
- 文件列表中的路径必须是相对路径,而且路径的前缀必须是 ${GITLAB}
1 2 3 4 5
| ${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 界面说明




参考文献
- Vivado Design Suite 用户指南: 逻辑仿真 (UG900)
- Verdi快速上手技巧大全
- Verification Continuum™ VCS User Guide, Version V-2023.12
- VCS使用教程 (Synopsys VCS Simulator Tutorial)