VCS常用仿真选项开关及步骤总结
转自:https://blog.csdn.net/bcs_01/article/details/79803304
转自:https://blog.csdn.net/wonder_coole/article/details/79618696
1.VCS的仿真选项分编译(compile-time)选项和运行(run-time)选项,同时本文增加了调试选项。
1.1 VCS常用的编译选项
|
选项 |
说明 |
|
-assert dumpoff | enable_diag | filter_past |
定义SystemVerilog断言(SVA) dumpoff:禁止将SVA信息DUMP到VPD中 enable_diag:使能SVA结果报告由运行选项进一步控制 filter_past:忽略$past中的子序列 |
|
-cm <options> |
指定覆盖率的类型,包括:line(行覆盖)、cond(条件覆盖)、fsm(状态机覆盖)、tgl(翻转率覆盖)、path(路径覆盖)、branch(分支覆盖)和assert(断言覆盖)。 如果包括两种或以上的覆盖率类型,可用“+”,如-cm line+cond+fsm+tgl |
|
-cm_assert_hier <filename> |
将SVA覆盖率统计限定在文件列表中指定的module层次。 |
|
-cm_cond <arguments> |
进一步细化条件覆盖率的统计方式,包括:basic,std,full,allops,event,anywidth,for,tf,sop等选项。 |
|
-cm_count |
在统计是否覆盖的基础上,进一步统计覆盖的次数 |
|
-cm_dir <directory_path_name> |
指定覆盖率统计结果的存放路径,默认是simv.cm |
|
-cm_hier <filename> |
指定覆盖率统计的范围,范围在文件中定义,可以指定module名、层次名和源文件等。 |
|
-cm_log <filename> |
指定仿真过程中记录覆盖率的log文件名 |
|
-cm_name <filename> |
指定保存覆盖率结果的文本文件的名称 |
|
-cm obc |
使能可观察(observed)覆盖率的编译。传统的覆盖率跟功能的正确性毫无关联,可观察覆盖率通过设置观察点,一定程度上将代码行覆盖率与功能正确性关联起来。 |
|
-comp64 |
在64-bit模式下对设计进行编译,并生成32-bit格式的可执行文件用于32-bit模式仿真 |
|
-debug 或 -debug_all |
使能UCLI命令行 |
|
-e <new_name_for_main> |
指定PLI应用时main()程序的名称 |
|
-f <filename> |
指定文件列表的文件名,文件中可包括源代码文件的路径和名称,也可以包括编译选项参数 |
|
-file filename |
类似于-f,但文件内容更灵活,可以包含PLI选项和对象文件,可以使用转义字符等 |
|
-full64 |
在64-bit模式下编译,生成64-bit模式仿真的可执行文件 |
|
-h or -help |
列举常用的编译选项和运行选项的参数 |
|
-I |
交互模式的编译,让VCS自动包括+cli,-P virsims.tab选项,并支持VirSim后处理模式下生成VCD+文件。 |
|
-ID |
显示及其的hostid或dongle ID |
|
-ignore <keyword_argument> |
屏蔽SV中unique/priority型的if或case语句的告警信息,参数包括:unique_checks、priority_checks、all。 |
|
-j<number_of_processes> |
设定并行编译的进程数,“j”后面没有空格 |
|
-l <filename> |
指定记录VCS编译和运行信息的log文件名 |
|
-line |
使能VriSim中的单步运行 |
|
-lmc-swift |
使能LMC SWIFT接口 |
|
-Mdir=<directory> |
指定一个目录让VCS存储编译产生的文件,默认是csrc |
|
-Mlib=<directory> |
指定一个目录让VCS搜索某个模块是否需要重新编译。 与-Mdir配合,可以实现不同模块的增量编译。 |
|
-Mmakeprogram=<program> |
指定用于make对象的程序,默认是make |
|
-Mupdate[=0] |
默认情况下,VCS编译时会覆盖上次编译生成的makefile。如果想保留上次的makefile,使用-Mupdate=0;如果不带=0,则进行增量编译,并覆盖上次的makefile。 |
|
-noIncrComp |
关闭增量编译 |
|
-notice |
显示详细的诊断信息 |
|
-ntb |
使能ntb(Native TestBench),支持OpenVera验证平台语言结构。 |
|
-o <name> |
指定编译生成的可执行文件的名称,默认是simv |
|
-timescale=<time_unit>/<time_precision> |
源代码文件中有的包括`timescale编译指令,有的不包括,如果在VCS命令行中,不包括`timescale的源代码文件在最前面,VCS会停止编译。使用-timescale选项为这些在前面且又没有`timescale的源文件指定timescale |
|
-override_timescale=<time_unit>/<time_precision> |
让源文件统一使用指定的timescale |
|
-P <pli.tab> |
指定PLI表文件 |
|
-pvalues+<parameter_name>=<value> |
改变指定参数的值 |
|
-parameters <filename> |
通过文件的方式改变参数的值,参数的路径和改变的值均在文件中定义 |
|
-q |
安静模式,屏蔽VCS的编译信息 |
|
-R |
在编译之后立即执行产生的可执行文件 |
|
-s |
刚开始仿真时即停止,一般与-R和+cli配合使用 |
|
-V |
使能verbose模式 |
|
-v <filename> |
指定verilog库文件 |
|
-y <dir_pathname> |
指定verilog库路径 |
|
+libext+<extension> |
让VCS在verilog库路径下搜索指定的扩展名文件,与-y配合 |
|
-vera |
指定标准的Vera PLI表文件和对象库 |
|
+acc+1|2|3|4 |
使能PLI中的ACC(PLI 1.0的一种方式) |
|
+cli+[<module_name>=]1|2|3|4 |
使能CLI调试功能 |
|
+autoprotect[<file_suffix>] |
生成一个加密的源文件 |
|
+protect[<file_suffix>] |
生成一个加密的源文件,只加密`protect/`endprotect部分 |
|
+putprotect+<target_dir> |
指定加密文件存放的目录 |
|
+csdf+precompile |
在VCS编译源代码时预先SDF文件 |
|
+define+<macro_name>=<value> |
定义一个文本宏,与源文件中的`ifdef配合 |
|
+error+<n> |
将编译时运行的NTB错误增加到N |
|
+incdir+<directory> |
指定VCS搜索`include指令使用的包含文件的目录,可以用“+”定义多个目录。 |
|
+maxdelays |
使用SDF文件中的max值 |
|
+mindelays |
使用SDF文件中的min值 |
|
+typdelays |
使用SDF文件中的typ值 |
|
+nbaopt |
删除非阻塞赋值语句中的延时 |
|
+neg_tchk |
使能时序检查中的负延时 |
|
+nospecify |
屏蔽specify块中的路径延时和时序检查 |
|
+notimingcheck |
屏蔽specify块中的时序检查 |
|
+nowarnTFMPC |
屏蔽编译时的“Too few module port connections”告警信息 |
|
+no_notifier |
屏蔽一些时序检查系统任务中定义的notifier寄存器的翻转(toggling),但不影响时序violation的报告 |
|
+no_tchk_msg |
屏蔽时序检查的告警信息,但不关闭时序检查时notifier寄存器的翻转(toggling) |
|
+optconfigfile+<filename> |
指定Radiant技术和二态仿真用到的配置文件名 |
|
+prof |
让VCS在仿真过程中生成一个vcs.prof文件,记录设计中最耗CPU时间的module、层次和verilog结构 |
|
+race |
让VCS在仿真过程中生成一个race.out文件,记录设计中所有的竞争冒险 |
|
+radincr |
增量编译时使能Radiant技术 |
|
+sdf_nocheck_celltype |
SDF反标时不检查SDF文件中的CELLTYPE的一致性 |
|
+sdfverbose |
显示SDF反标时的详细告警和错误信息 |
|
+v2k |
支持Verilog-2001标准 |
|
+vc[+abstract][+allhdrs][+list] |
使用DirectC接口时,使能verilog直接调用C/C++函数 |
|
+vcs+flush+log |
加速编译仿真时log文件缓存的刷新频率 |
|
+vcs+flush+all |
+vcs+flush+log,+vcs+flush+dump和+vcs+flush+fopen的集合 |
|
+vcs+initmem+0|1|x|z |
初始化设计中所有存储器的值 |
|
+vcs+initreg+0|1|x|z |
初始化设计中所有寄存器的值 |
|
+vcs+lic+wait |
一直等待license |
|
+vpi |
使能VPI |
|
+warn=[no]ID|none|all,... |
使能或关闭告警信息 |
1.2 VCS常用的运行选项
|
选项 |
说明 |
|
-a <filename> |
将仿真显示的log信息附件在指定文件尾部 |
|
-E <program> |
执行指定的程序用来显示生成simv可执行文件时VCS使用的编译选项 |
|
-i <filename> |
指定一个VCS执行仿真时包含CLI命令的文件,一般与-ucli配合 |
|
-k <filename> | off |
指定一个文件,用来记录VCS仿真过程中的CLI和VirSim交互命令,默认是vcs.key,off选项是关闭记录。 |
|
-sverilog |
支持SystemVerilog |
|
-ucli |
使能UCLI命令 |
|
-vcd <filename> |
指定VCD波形文件名,默认是verilog.dump,会被源代码文件中的$dumpfile覆盖 |
|
+vcs+learn+pli |
追踪当前仿真的ACC选项,记录在pli_learn.tab文件中,下次仿真时可以用+applylearn来重新编译。 |
|
+vcs+nostdout |
关闭所有$monitor和$display的文本输出,但依然会记录在-l的log文件中。 |
|
+vera_load=<filename.vro> |
定义Vera对象文件 |
|
+vera_mload=<filename> |
定义一个包括多个Vera对象文件的文本文件 |
1.3 VCS调试模式常用选项
|
选项 |
说明 |
|
-RI |
编译完成之后马上启动VirSim,进入交互模式 |
|
-RIG |
不编译,启动VirSim使用已有的可执行文件,进入交互调试模式。 |
|
+sim+<simv_name> |
指定使用的可执行文件名,与-RIG配合 |
|
-RPP |
运行后处理(Post-Processing)模式:启动VirSim,使用VCD+文件 |
|
-PP |
支持在源代码文件中调用$vcdpluson生成VPD文件 |
|
+cfgfile+<filename> |
定义一个VCS使用的已建好的场景配置文件 |
|
+vslogfile[+<filename>] |
保存一个VirSim命令的log文件,默认是VirSim.log |
2.VCS/VCSMX 一般仿真步骤
VCS仿真可以分成两步法或三步法, 对Mix language, 必须用三步法。仿真前要配置好synopsys_sim.setup文件,里边有lib mapping等信息。设置环境变量'setenv SYNOPSYS_SIM_SETUP /xxx/xxx/synopsys_sim.setup'. VCS对应的waveform工具有DVE和Verdi, DVE因为是原生的,所以VCS对DVE非常友好。但DVE已经过时了,其对uvm等新feature支持的不好。Verdi是Debussy公司的产品,现在已被Synopsys收购并着力发展,说以Verdi是未来的潮流。但由于其原来是Synopsys第三方产品,所以VCS对其支持并不是很友好。 如果要支持Verdi,需要设置好NOVAS_LIB_PATH的环境变量,并且在命令行中添加-kdb的option,knowledge database(kdb)是VCS支持Verdi时的重要概念。另外,VCS支持vpd和fsdb两个格式的dump wave。 fsdb的文件相对比较小。
Step 1: analysis verilog/system verilog/VHDL;
命令例子:
- vlogan -kdb -work DEFAULT [rtl.defs] -f filelistname -l logfilename +incdir+include_dir_name top.v //对verilog file 进行analysis
- vlogan -kdb -sverilog +define+SVA_OFF -work DEFAULT -f vlog.flist -l logfilename.log //对systemverilog进行analysis
- vhdlan -kdb -vhdl87 -full64 -work $VCS_LIB -f VHDL87_FILELIST -l vhdl87.log //对VHDL87进行analysis
- vhdlan -kdb -93 -full64 -work $VCS_LIB -f VHDL93_FILELIST -l vhdl93.log //对VHDL93进行analysis
Step 2: Elaboration
命令例子:
vcs -kdb -lca -noIncrComp +lint=TFIPC-L +lint=PCWM -debug_all -P /xxx/synopsys/verdi/xxxxxx/novas_new_dumper.tab /xxx/synopsys/verdi/xxx/pli.a top_module_name -l elab.log -Mdir=/xxx/incr_compile -o /xxx/simv
Step 3: Run simulation
命令例子:
simv +FSDBDUMP +FSDBFILE=xxx.rtl.fsdb +PLUSSEED +seed=146123456 -l /xxx/xxx.sim.log
simv +VPDDUMP +VPDFILE=xxx.rtl.fsdb +PLUSSEED +seed=146123456 -l /xxx/xxx.sim.log
在仿真中产生coverage database
1. 在analysis step不需要做特殊处理(vlogan/vhdlan)
2. 在elaboration step需要添加这些option:
“-cm line+cond+fsm+tgl+branch -cm_linecontassign -cm_cond allops+anywidth+event -cm_noseqconst -debug_all”
3. 在simulation step添加这些option:“-cm line+cond+fsm+tgl+branch”
仿真产生的coverage data会放在simv.vdb目录下,用“dve -covdir *.vdb”会以GUI形式打开
coverage 相关命令
产生coverage report的命令
urg -lca -dir <simv1.vdb simv2.vdb ….> -format <text|html|both> -log <log_file_name> -report <report directory name>
例如
urg -lca -dir simv.vdb -format text -log urg.log 在默认的report目录urgReport产生各个metrics(line/fsm/branch/condition)的报告
urg -lca -dir simv.vdb -metric line+fsm -format text -log urg.log 只产生line和fsm的报告
urg -lca -dir simv.vdb -format text -log urg.log –show summary <levels of hierarchy>
coverage merge的命令
urg -lca -f <file with list of simv.vdb directories> -map <module name> -format text -log <log_file_name> -dbname <merged .vdb name> -report <report directory name>
例如:
urg -lca -f urgfile -map dut_name -format text -log coverage.log -dbname merged_simv -report merged_coverage
urg -lca -dir simv1.vdb simv2.vdb -map dut_name -format text -log coverage.log -dbname merged_simv -report merged_coverage
VCS常用仿真选项开关及步骤总结的更多相关文章
- VCS 常用命令速查
VCS是编译型Verilog模拟器,它完全支持OVI标准的Verilog HDL语言.PLI和SDF.VCS具有目前行业中最高的模拟性能,其出色的内存管理能力足以支持千万门级的ASIC设计,而其模 ...
- 数字IC设计入门必备——VIM自定义模板调用与VCS基本仿真操作示例
一.前言 毕业论文答辩结束,闲下来写篇文章.芯片研发人员都在Linux系统下借助各种EDA工具和代码语言完成工作,因此提高代码开发效率,熟练运用开发工具是十分必要的.本文讲述VIM编辑神器的veril ...
- 9个 SSH常用命令选项
9个 SSH常用命令选项 SSH 是什么 SSH(全称 Secure Shell)是一种加密的网络协议.使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息.要使用 SS ...
- saltstack(二) master、minion常用配置选项
master常用配置选项: interface: 指定bind的地址(默认0.) publish_port:指定发布端口(默认4505) ret_port: 指定结果返回端口,与minion配置文件的 ...
- VCS编译仿真警告Warning
VCS编译仿真警告Warning 问题描述 在较大的SOC集成中,通常使用Perl脚本例化子模块到Top层,然而,有时会出现例化出来的输入端口名没有在Top层定义,而且端口的位宽为1bit,那么,ve ...
- 常用gcc选项
<Linux GCC常用命令> Makefile有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是: $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件 ...
- VCS常用指令
常用命令介绍 对VCS的常用命令进行介绍,便于工程师进行日常维护.本手册描述的命令仅供参考,具体描述请以Veritas公司提供的相关资料为准. VCS的安装和命令都在下列目录下:sbin, /usr/ ...
- 每天进步一点点------Modelsim添加Xilinx仿真库的详细步骤
Modelsim,可以选型SE和XE两个版本.Modelsim XE可以直接被ISE调用,而Modelsim SE需要手动添加仿真库.但SE版和OEM版在功能和性能方面有较大差别,比如对于大家都关心的 ...
- SSH常用命令选项
SSH 是什么 SSH(全称 Secure Shell)是一种加密的网络协议.使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息.要使用 SSH,目标机器应该安装 SS ...
随机推荐
- RocketMQ详解(二)安装使用详解
专题目录 RocketMQ详解(一)原理概览 RocketMQ详解(二)安装使用详解 RocketMQ详解(三)启动运行原理 RocketMQ详解(四)核心设计原理 RocketMQ详解(五)总结提高 ...
- JS验证监听输入银行卡号
$("#AccountNum").keydown(function(e) { if(!isNaN(this.value.replace(/[ ]/g,""))) ...
- 『GoLang』控制结构
条件语句 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行if后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码. if condition { // do so ...
- 华为云计算IE面试笔记-华为云计算解决方案业务迁移支持哪些迁移?有哪些特点?请描述基本的业务交付流程、业务迁移流程和原则。
1. 迁移场景:华为云计算解决方案按照源端环境来说,支持P2V.V2V(P2V:物理设备(操作系统及其上的应用软件和数据)迁移到华为虚拟化平台.V2V:其他厂商的虚拟化平台迁移到华为虚拟化平台.)以及 ...
- docker network 参数
一. 格式 docker network COMMAND 二.COMMAND 讲解 2.1 .docker network connect 格式 docker network connect [OPT ...
- 深入浅出WPF-08.Event( 事件)02
路由事件 为了方便程序中对象之间的通信常常需要我们定义一些路由事件.使用路由事件比直接事件方便得多. 创建自定义路由事件的步骤: 1)声明并注册路由 2)为路由事件添加CLR事件包装 3)创建可以激发 ...
- 项目配置shiro原缓存注解失效
项目用springboot + shiro + ehcache @cacheable 注解不起作用原因 Shiro框架初始化比Spring框架的某些部件早,导致使用@Autowire注入Shiro框架 ...
- 一个Electron的设计缺陷及应对方案
当你想实现阻止Electron窗口关闭,并弹出询问对话框,提示用户:"文章尚未保存,是否要关闭窗口"这类业务时,那么你99%会碰到这个BUG: https://github.com ...
- Apache Struts2 S2-013远程代码执行漏洞复现
墨者学院开的靶场 进入环境 Struts2-013好家伙,框架直接写脸上,怕人看不出来= = 看了看源码什么的啥都没发现= = 去了解了一下这个漏洞,爬回来继续做 漏洞原理 struts2的标签中&l ...
- 一个神秘的oj2093 花园的守护之神(最小割)
给定一张无向图,你每次可以将一条路的权值增加1,询问最少增加多少次才会使得\(s->t\)的最短路改变 QwQ一看到这个题,我就用种最小割的感觉 我们可以把最短路上的点取出来,然后做最小割呀!! ...