-
makefile调用VCS及verdi
2020-02-12 22:18:51学习更多相关知识,... 继上次使用VCS基础操作和makefile的书写,如果我们最后不使用vcs而是使用verdi该如何调用呢?和上次一样,我们同样要把我们的.v文件和tb文件的路径放到file_list.f中(上次是file.list)之...学习更多相关知识,关注博主知乎账号,用户名Trustintruth https://www.zhihu.com/people/suo-yi-xin-90/activities
继上次使用VCS基础操作和makefile的书写,如果我们最后不使用vcs而是使用verdi该如何调用呢?和上次一样,我们同样要把我们的.v文件和tb文件的路径放到file_list.f中(上次是file.list)之后写makefile,制作好以后就可以使用make语句完成。
makefile如下
.PHONY: com sim cov clean debug OUTPUT = simv ALL_DEFINE = +define+DUMP_VPD # Code coverage command CM = -cm line+cond+fsm+branch+tgl CM_NAME = -cm_name $(OUTPUT) CN_DIR = -cm_dir ./$(OUTPUT).vdb # vpd file name VPD_NAME = +vpdfile+$(OUTPUT).vpd #Compile command #VCS = vcs +v2k -timescale=1ns/1ns VCS = vcs +v2k -override_timescale=1ns/100ps \ -full64 \ -fsdb \ -debug_all \ -sverilog \ +nospecify \ +vcs+flush+all \ $(CM) \ $(CM_NAME) \ $(CM_DIR) \ $(ALL_DEFINE) \ $(VPD_NAME) \ -o $(OUTPUT) \ -l compile.log #simulation command SIM = ./$(OUTPUT) \ +ntb_ramdom_seend_automatic \ $(CM) $(CM_NAME) $(CM_DIR) \ $(VPD_NAME) \ $(ALL_DEFINE) \ -l $(OUTPUT).log # start compile com: $(VCS) -f file_list.f #Start simulation sim: $(SIM) #show the coverage cov: dve -covdir *vdb & debug: dve -vpd $(OUTPUT).vpd & #start clean clean: rm -rf ./csrc *.daidir ./csrc \ *.log *.vpd *.vdb simv* *.key \ +race.out* novas* verdi* *fsdb apb2apb_async
保存好之后,首先make com
之后 make sim
之后ls一下,发现路径下出现一个.fsdb文件(我在makefile中是glitch_free_tb.fsdb,如果需要可以在makefile中更改文件名即可)输入指令
verdi -f file_list.f -ss glitch_free_tb.fsdb
在操作时我更改了file.list,按照文中的makefile制作的在此处按照上面的指令,不要按图里的
之后进入界面
点击最小化进入界面进行操作
如果需要删除中间文件 输入make clean
-
调用其他文件的define_makefile调用VCS及verdi
2020-11-28 14:33:47继上次使用VCS基础操作和makefile的书写,如果我们最后不使用vcs而是使用verdi该如何调用呢?和上次一样,我们同样要把我们的.v文件和tb文件的路径放到file_list.f中(上次是file.list)之后写makefile,制作好以后...继上次使用VCS基础操作和makefile的书写,如果我们最后不使用vcs而是使用verdi该如何调用呢?和上次一样,我们同样要把我们的.v文件和tb文件的路径放到file_list.f中(上次是file.list)之后写makefile,制作好以后就可以使用make语句完成。
makefile如下
.PHONY
保存好之后,首先make com
之后 make sim
之后ls一下,发现路径下出现一个.fsdb文件(我在makefile中是glitch_free_tb.fsdb,如果需要可以在makefile中更改文件名即可)输入指令
verdi -f file_list.f -ss glitch_free_tb.fsdb
在操作时我更改了file.list,按照文中的makefile制作的在此处按照上面的指令,不要按图里的 之后进入界面
点击最小化进入界面进行操作
如果需要删除中间文件 输入make clean
获取更多代码与资料,欢迎关注我啊!
-
【验证小白】无法忍受...阵地转移,虚拟机centOS+makefile+vcs+verdi继续验证学习——搭建简单的superbench
2020-07-16 00:42:44前言 之前的系列都是运行于windows+modelsim环境的,之所以这样运行呢,是因为我当时手头只有这个工具;...通过makefile搭建superbench平台,支持VCS仿真和verdi定位功能,包括如下指令: make cmp:VCS编前言
之前的系列都是运行于windows+modelsim环境的,之所以这样运行呢,是因为我当时手头只有这个工具;
但是今时不同往日,我终于找到了一个工具齐全的虚拟机centOS(忙猜很多人应该都是在用这个虚拟机),于是乎我决定把验证环境搬家,顺便也再好好的重构下;
当然了那是以后的事,这次的任务是搭建一个基本的superbench平台。
目标
通过makefile搭建superbench平台,支持VCS仿真和verdi定位功能,包括如下指令:
make cmp:VCS编译tb.f中的v/sv文件;
make ncrun tc=xxx wave=on/off seed=xxxxxx:运行编译后的simv文件,根据传惨执行仿真;
make run:cmp + ncrun;
make verdi:打开verdi并关联rtl结构;
make clean:删除编译生成的文件;
make clean_all:生成编译和仿真生成的文件;
sv代码
要进行仿真的verilog代码很简单,只有时钟复位和一些简单设置;
`define DELAY(N, clk) begin \ repeat(N) @(posedge clk);\ #1ps;\ end module testbench(); timeunit 1ns; timeprecision 1ps; string tc_name; int tc_seed; bit clk, rst_n; initial $timeformat(-9,3,"ns",6); initial begin if(!$value$plusargs("tc_name=%s", tc_name)) $error("no tc_name!"); else $display("tc name = %0s", tc_name); if(!$value$plusargs("ntb_random_seed=%0d", tc_seed)) $error("no tc_seed"); else $display("tc seed = %0d", tc_seed); end initial forever #5ns clk = ~clk; initial begin `DELAY(30, clk); rst_n = 1'b1; $display("rst_n over, urandom -> %0d", $urandom); end `ifdef WAVE_ON initial begin $fsdbDumpfile($sformatf("./sim_base/wave/%s_%0d.fsdb", tc_name, tc_seed)); $fsdbDumpvars(0); end `endif endmodule
VCS+verdi指令
VCS的指令仿佛星辰大海,本次用到了如下的指令;
cmp编译阶段指令
vcs -f ./tb.f -P $(NOVAS_HOME)/share/PLI/VCS/LINUX64/verdi.tab \ $(NOVAS_HOME)/share/PLI/VCS/LINUX64/pli.a \ -l $(SIM_LOG) \ -o $(EXEC_SIMV) \ -timescale=1ns/1ps -unit_timescale=1ns/1ps \ -top testbench \ +v2k +define+RTL_SAIF +notimingcheck +nospecify +vpi +memcbk +vcsd \ -sv_pragma -lca -kdb -sverilog -full64 -sverilog -debug_all -ntb_opts uvm-1.2 \
针对关键的解释几个好了:
-f:用于指定文件list,常用的命令行有-f/-F/-v/-y,其中作用和区别我们有时间再聊,先挖个坑好了;
-R:编译之后立即执行仿真,由于我是cmp和run分开的,因此没有加这个选项;
-P:对verdi的支持,“指定使用的PLI,这里指定verdi下的PLI,因为verdi是需要fsdb文件来显示波形的,而fsdb文件的生成,需要系统函数(如$fsdbDumpfile,$fsdbDumpvars等等),而这些系统函数,vcs中是没有的,但是在verdi的PLI中有,所以这里需要指定一下”;
-l:制定输出log文件路径;
-o:指定输出simv文件路径;
-timescale=1ns/1ps -unit_timescale=1ns/1ps:设定环境timescale,详见timescale设置规则;
-top testbench:设定顶层模块名称,目前的验证环境是单顶层,顶层名称即module名称;
-ntb_opts uvm-1.2:支持UVM1.2版本库;
-sverilog:支持system verilog语法;
-debug_all:支持交互式仿真;
-kdb:编译时生成后续verdi使用的KDB库;
-full64:64bit simulation
-memcbk:支持多维数组或mem波形dump;
其他的有幸去大家再查一下好啦~在此不再赘述;
run仿真阶段VCS指令
simv +ntb_random_seed=$(SEED) +tc_name=$(tc) +ucli -assert
simv是用来仿真的可执行文件,+ntb_random_seed=$(SEED)是传入随机种子,+tc_name=$(tc)传入tc名字,+ucli打开ucli特性,-assert打开断言检查;
verdi查看波形指令
verdi -simflow -dbdir simv.daidir
makefile组织
好的,接下来将以上的指令行封装进makefile中,共封装伪目标如下:
.PHONY: cmp ncrun run verdi clean clean_all
用户传参数
export seed := random export tc := sanity export wave := off
暂时只支持三个用户传参,分别是仿真种子seed,用例名称tc,波形开关wave;
封装CMP
ifeq ($(seed), random) SEED := $(shell python -c "from random import randint; print randint(0,99999999)") #SEED := $(shell perl -e "print int(rand(100000000))") else SEED := $(seed) endif export PRE_PROC:= mkdir -p ./sim_base/log ./sim_base/exec ./sim_base/wave export VERDI_P := $(NOVAS_HOME)/share/PLI/VCS/LINUX64/verdi.tab \ $(NOVAS_HOME)/share/PLI/VCS/LINUX64/pli.a export SIM_BASE := ./sim_base export SIM_LOG := $(SIM_BASE)/log/sim.log export RUN_LOG := $(SIM_BASE)/log/$(tc)_$(SEED).log export EXEC_SIMV := $(SIM_BASE)/exec/simv export FILELIST := ./tb.f ifeq ($(wave), on) CMP_OPTIONS += +define+WAVE_ON endif export CMP_OPTIONS := CMP_OPTIONS += +v2k +define+RTL_SAIF +notimingcheck +nospecify +vpi +memcbk +vcsd CMP_OPTIONS += -sverilog -full64 -sverilog -debug_all -ntb_opts uvm-1.2 CMP_OPTIONS += -sv_pragma -lca -kdb CMP_OPTIONS += -top testbench CMP_OPTIONS += -timescale=1ns/1ps -unit_timescale=1ns/1ps
将之前提到的VCS命令行进行封装,最后封装伪目标make cmp:
cmp: clean @$(PRE_PROC) @vcs -f ./tb.f -P $(VERDI_P) -l $(SIM_LOG) -o $(EXEC_SIMV) $(CMP_OPTIONS)
cmp执行时候会先执行clean,将之前的编译文件清除:
clean: @rm -rf $(SIM_BASE)/exec csrc DVEfiles novas.conf novas.rc vc_hdrs.h ucli.key verdiLog vfastLog *.fsdb *.log *.vcd
封装NCRUM
编译后执行仿真,将仿真指令simv封装到make ncrun中:
export RUN_OPTIONS := RUN_OPTIONS += +ntb_random_seed=$(SEED) +tc_name=$(tc) +ucli -assert ncrun: @$(EXEC_SIMV) $(RUN_OPTIONS) -l $(RUN_LOG) @check_fail.pl $(RUN_LOG) @echo "[Note] report log path: $(RUN_LOG)"
说明两点:
1. SEED的产生和使用着实让我伤脑筋,详见【makefile】makefile中产生能稳定使用的随机数
2.check_fail.pl用来检查成生log中有无error类型的关键字,判断编译是否通过;
结果验收
目录结构
执行代码
查看波形
make verdi &打开Verdi,吃进fsdb文件即可;
简
直
太
完
美
了
!
附代码
makefile
.PHONY: cmp ncrun run verdi clean clean_all # -R: immediately run after cmp # $$RANDOM export seed := random export tc := sanity export wave := off ifeq ($(seed), random) SEED := $(shell python -c "from random import randint; print randint(0,99999999)") #SEED := $(shell perl -e "print int(rand(100000000))") else SEED := $(seed) endif export PRE_PROC:= mkdir -p ./sim_base/log ./sim_base/exec ./sim_base/wave export VERDI_P := $(NOVAS_HOME)/share/PLI/VCS/LINUX64/verdi.tab \ $(NOVAS_HOME)/share/PLI/VCS/LINUX64/pli.a export SIM_BASE := ./sim_base export SIM_LOG := $(SIM_BASE)/log/sim.log export RUN_LOG := $(SIM_BASE)/log/$(tc)_$(SEED).log export EXEC_SIMV := $(SIM_BASE)/exec/simv export FILELIST := ./tb.f export CMP_OPTIONS := CMP_OPTIONS += +v2k +define+RTL_SAIF +notimingcheck +nospecify +vpi +memcbk +vcsd CMP_OPTIONS += -sverilog -full64 -sverilog -debug_all -ntb_opts uvm-1.2 CMP_OPTIONS += -sv_pragma -lca -kdb CMP_OPTIONS += -top testbench CMP_OPTIONS += -timescale=1ns/1ps -unit_timescale=1ns/1ps export RUN_OPTIONS := RUN_OPTIONS += +ntb_random_seed=$(SEED) +tc_name=$(tc) +ucli -assert ifeq ($(wave), on) CMP_OPTIONS += +define+WAVE_ON endif cmp: clean @$(PRE_PROC) @vcs -f ./tb.f -P $(VERDI_P) -l $(SIM_LOG) -o $(EXEC_SIMV) $(CMP_OPTIONS) ncrun: @$(EXEC_SIMV) $(RUN_OPTIONS) -l $(RUN_LOG) @check_fail.pl $(RUN_LOG) @echo "[Note] report log path: $(RUN_LOG)" run: cmp ncrun verdi: verdi -simflow -dbdir $(SIM_BASE)/exec/simv.daidir clean: @rm -rf $(SIM_BASE)/exec csrc DVEfiles novas.conf novas.rc vc_hdrs.h ucli.key verdiLog vfastLog *.fsdb *.log *.vcd clean_all: clean @rm -rf $(SIM_BASE)
checkfail.pl
#!/usr/bin/perl -w my $pass = 1; while(<ARGV>){ if($_ =~ /error|Error|failed|Failed/){ $pass = 0; last; } } if($pass == 1){ print "\033[42;37m SIMULATION PASS! \033[0m \n"; print_pass(); } else { print "\033[41;37m SIMULATION FAIL! \033[0m \n"; print_fail(); } sub print_pass{ print "\n"; print "############# # ############## ##############"; print "\n"; print "############# ### ############## ##############"; print "\n"; print "## ## # # # ## ##"; print "\n"; print "## ## ## ## ## ##"; print "\n"; print "## ## ## ## ## ##"; print "\n"; print "## ## ## ## ## ##"; print "\n"; print "############# ############## ############## ##############"; print "\n"; print "############# ############## ############## ##############"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ############## ##############"; print "\n"; print "## ## ## ############## ##############"; print "\n"; print "\n"; } sub print_fail{ print "\n"; print "############# # ############## ##"; print "\n"; print "############# ### ############## ##"; print "\n"; print "## # # # ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "############# ############## ## ##"; print "\n"; print "############# ############## ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ## ##"; print "\n"; print "## ## ## ############## ##############"; print "\n"; print "## ## ## ############## ##############"; print "\n"; print "\n"; }
-
VCS和Verdi学习
2021-03-25 21:12:13VCS和Verdi学习1.使用Makefile2.不使用Makefile直接执行 1.使用Makefile 首先设置环境变量$Verdi_HOME 建立Makefile 文件 design_name = asyn_fifo fsdb_name = $(design_name).fsdb #use command "make vs...VCS和Verdi学习
1.使用Makefile
Makefile参考:Makefile的一些基本应用
- 首先设置环境变量$Verdi_HOME
- 建立Makefile 文件
design_name = asyn_fifo fsdb_name = $(design_name).fsdb #use command "make vs" to run vsc and product fsdb file vcs: vcs \ -full64 \ #64bits -f flist.f \ include all design file -debug_all \ -l com.log \ # output log file +v2k \ -P ${Verdi_HOME}/share/PLI/VCS/LINUXAMD64/novas.tab ${Verdi_HOME}/share/PLI/VCS/LINUXAMD64/pli.a ./simv -l sim.log +fsdbfile+$(fsdb_name) #simulation:product fsdb file and sim log #use verdi to observe the waveform verdi: verdi \ +v2k \ -f flist.f \ -ssf $(fsdb_name) & #use fsdb file #delete all files except .v and makefile clean: rm -rf `ls | grep -v "Makefile"|grep -v "flist.f" | grep -v "\.v" | grep -v "script.tcl"`
- 仿真文件添加生成fsdb函数
initial begin
$fsdbDumpfile(“asyn_fifo.fsdb”);
$fsdbDumpvars;
end- 执行“make vcs” 编译仿真
- 执行“make verdi” 打开波形
- verdi常用快捷键
ctrl+w: 添加信号到波形图
h: 在波形窗口显示详细的信号名(路径)
File>save signal,命名*.rc,下次直接打开rc文件就行
c/t: 修改信号的颜色(t可以直接切换颜色)
在波形窗口显示状态机的名字:
在rtl窗口,tools>Extract internative FSM ,可选first stage(仅展开目前所指定的FSM state),all stage (展开所有的FSM state)
改变颜色填充波形:
Tools>waveform>view options>waveformpane> paint waveform with specified color/pattern
在rtl窗口按x: 标注出信号的值
z: 缩小波形窗口
Z: 放大波形窗口
f: 全屏
l: 上一个视图
L: 重新加载设计波形或文件
n: 向前查找
N: 向后查找
ctrl+→: 向右移动半屏
ctrl+←: 向左移动半屏
双击信号波形: 跳转到rtl中信号位置,并高亮新号
b: 跳到波形图开头
e: 跳到波形图尾部
2.不使用Makefile直接执行
vcs -R -f flist.f -full64 -fsdb -l name.log
verdi -f flist.f -ssf name.fsdb -
vcs + verdi 查看仿真波形
2018-08-14 16:51:01makefile可以看到makefile中共有四个目标:前三个分别是 : “compile”, “sim”, “verdi”。分别代表了编译,仿真,查看波形的三个过程。 vcs 调用命令 vcs -f run.f -kdb -debug_access+all -lc... -
vcs与verdi的简单使用
2019-12-13 12:04:41根据verdi和vcs安装的位置配置环境变量 在这里插入代码片 实际的路径需要根据软件安装的实际位置做调整。(如果有其他人配置好的bashrc,可以直接赋值过来使用) 修改成功后,执行如下命令,让bashrc生效 source ./... -
makefile for VCS from Syn@psys
2013-10-23 23:45:00已调试通过 ... 下载后把 Makefile_VCS.txt 修改为 Makefile 就可以使用 链接地址: http://files.cnblogs.com/allenogz/Makefile_VCS.zip 转载于:https://www.cnblogs.com/allenogz/p/3385177.html... -
VCS+VERDI 的环境配置(1)
2016-08-25 09:39:32最近,在64bit的LINUX(cent os 6.4)上安装好,synopsys的VERDI和VCS后,写好MAKEFILE脚本,在运行的时候总是出现不了FSDB文件,欲解决之。 vcs版本: vcs-2014 verdi版本: 在64位主机上运行32位软件,主要是... -
FPGA linux环境下vcs+verdi仿真编译工程的搭建
2018-07-24 17:16:381、源码存放在hdl路径下,将hdl路径下所有的.v文件加入到filielist中,新建file.f文件 file.f 文件如下: +define+FPGA //预编译宏 ./hdl/*.v //加入所有.v...2、makefile的编写,新建makefile内容如下: #+... -
Makefile中常用vcs仿真命令及含义
2020-06-26 21:52:14-debug —— (对应TB中的$vcdpluson加载波形函数)使能DVE、VERDI波形调试和UCLI命令行调试等;-debug_all —— 使能所有的debug调试功能;-debug_pp —— 同-debug_all,但是更加节约资源;-ntb_opts —— 常用... -
verdi与vcs结合编译验证
2016-12-17 16:44:26(1)首先编写makefile文件 run: vcs -f ./filelist.f -R -fsdb -full64 -l analyze.log verdi: verdi -f ./filelist.f -ssf ./mc1_manage_tb.fsdb -top mc1_manage_tb clean: rm -rf csrc novas* sim* -
integrate third IP using vcs, dve and verdi
2015-02-16 18:01:031. install verdi; 2. install vcs, dve; 3. write shell or perl script to call makefile 4. write makefile to generate gtech library, to compile the corresponding .v 5. sim -
VCS 编译仿真makefile指令
2021-04-10 08:44:54使用verdi需要加目录库 //定义 DEFINE = VPD_ON+FSDB_ON //测试模块 TEST = base test //种子 SEED = $(shell data+%s) 断言选项: //断言选项 ASS_OPTS = -assert enable_diag -debug_all -assert quiet+... -
VCS/irun/verdi编译命令/.so联合编译/sv_lib/sv_liblist/sv_root
2019-01-30 17:37:51目录 1.VCS的编译解析 1.1一步编译法 1.2 三步编译法 1.3 VCS动态加载DPI shared lib (.so) ...下面是一个可以使用的vcs makefile用于编译 VCS 编译仿真方法总结 VCS编译命令 摘自:SYNOPSYS... -
Verdi使用简介及Dump波形命令
2021-02-03 08:39:43Makefile加载verdi波形方法 1.编译参数增加verdi的PLI,使用32位编译的去掉64。 DUT_CMP_OPTIONS_WAVE += -P ${VERDI_HOME}/share/PLI/vcs/LINUX64/fsdb_vcs.tab ${VERDI_HOME}/share/PLI/vcs/LINUX64/fsdb_vcs... -
VCS初识
2020-06-30 10:22:393.verdi使用方法,以及VCS和VERDI的联合使用; 4.system verilog基础; 5.UVM方法学基础; 6.搭建最小仿真系统Makefile、骆驼语言、tcl、c/c++、汇编等基本使用。 要学得东西还是蛮多的。就以此博客作为开始,搜集个... -
VCS使用记录
2020-09-02 11:31:26一般公司都会搭建好仿真环境,用vcs进行仿真,verdi进行波形查看及代码debug。 在创建仿真环境时:写makefile 脚本进行仿真 如上即makefile脚本。 为了规范化文件分类,目录层次如下 -
【验证小白】编译、仿真与波形 —— 基于VCS的通用superbench平台搭建
2020-08-16 14:53:22阵地转移,虚拟机centOS+makefile+vcs+verdi继续验证学习——搭建简单的superbench 后续我希望搭建一个完整的、融合vcs/verdi/spyglass/dc等工具的superbench平台,今天就来进行第一步,先基于VCS将通用的... -
用VCS仿真运行RISC-V e203例子
2020-12-03 16:29:16操作步骤2.1 将 e200 opensource 项目下载到本机 Linux 环境中2.2 编译RTL代码2.3 修改vism/install/tb/tb_top.v2.4 修改vsim/bin/run.Makefile,2.5 在目录vsim执行make compile2.6 在run目录下执行make all2.7 在... -
I met a problem when use VCS to do Gate Level Simulation
2020-12-25 18:41:12/home/lh/synopsys/anzhuang/vcs/linux64/lib/libvirsim.so /home/lh/synopsys/anzhuang/vcs/linux64/lib/liberrorinf.so /home/lh/synopsys/...synopsys/anzhuang/verdi/share/PLI/VCS/LINUXAMD64/pli.a /home/lh/ai... -
linux makefile中命令前加 “-” 的妙用
2020-12-07 14:22:15文章目录前言举个栗子总结 前言 make执行的命令出错就立刻终止,不再执行后续命令,但是又想让后面的命令继续执行,该怎么处理。 举个栗子 在利用VCS进行仿真时,为了保证每次...有时候由于打开的verdi占用了output -
工具软件使用
2020-12-22 11:26:11以下内容均为转载,供自己学习查阅之用,版权归原作者,侵删。 你要的都在这里 - 数字IC设计EDA软件教程整理(超级全) Spyglass ...Makefile脚本应用-VCS与Verdi GVIM常用命令 DC Design Compiler -
一个合格数字IC设计工程师的知识结构
2019-05-03 14:09:16I. 技能清单 语言类 Verilog-2001/ VHDL ... Makefile/ Perl/ Python/ Shell Tcl 工具类 NCVerilog/ VCS/ ModelSim SimVision/ DVE/ Verdi ...