-full64 | 在64bit模式下编译、仿真,用于64位操作系统 |
---|---|
-j8 | 指定编译器可以并行编译的进程数为8 |
-timescale=1ns/1ps | 指定仿真时间和精度 |
-y <dir_pathname> | 指定verilog库路径 |
+libext+.v+.V+.sv+.svh | 识别.v、.sv、.svh等多种格式文件 |
-sverilog | 支持system verilog 语法的编译选项 |
-f xxx.lisf | 指定包含所有设计文件列表的文件名 |
-top test | 设置顶层模块为test。(指包含DUT和TB的top?) |
-l xx.log | 编译log输出到指定的文件xx.log |
+define+XX_MACRO | 定义一个宏变量XX_MACRO,可作用到dut或tb文件中。也可以具体给这个宏定义一个具体的值:+define+XX_MACRO = 9 |
+incdir+/xx/xx/ | 指定 `include指令使用的包含文件的目录,可以指定多个 |
-M | 使能增量编译,即编译时只对修改的文件进行重新编译 |
-Mdir=<directory> | 指定一个目录让VCS存储编译产生的文件,默认是csrc |
-Mlib=<directory> | 指定一个目录让VCS搜索某个模块是否需要重新编译。与-Mdir配合,可以实现不同模块的增量编译。 |
-Mupdate[=0] | 默认情况下,VCS编译时会覆盖上次编译生成的makefile。如果想保留上次的makefile,使用-Mupdate=0;如果不带=0,则进行增量编译,并覆盖上次的makefile。 |
-noIncrComp | 关闭增量编译 |
-notice | `-notice`是VCS编译器的一个选项,用于控制编译过程中的警告信息的显示方式。 通过使用`-notice`选项,您可以获得更多关于编译和仿真过程的信息,并且能够找到潜在的问题或改进的建议。这对于调试和优化设计非常有用。 |
-R | 编译完成后立即执行simv命令进行仿真;(一般还是先编译,再仿真;方便debug和调试) |
+memcbk | 使能多维数组变量的回调。为了可以查看多维数组变量的波形(vcs默认是不能查看多维数组或memory型变量) |
+warn=none | 忽略所有warning,不予显示 |
+warn=all | 显示所有warning |
-debug_access+all | |
-debug_all | 将debug的信息全部保存下来,如波形文件等 |
-debug 或 -debug_all | 使能UCLI命令行 |
-kdb | 选项在执行仿真时,打开KDB调试模式,以便可以通过命令行进行交互式的调试操作。 |
-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> | 指定保存覆盖率结果的文本文件的名称 |
-o <name> | 指定编译生成的可执行文件的名称,默认是simv |
+v2k | 支持Verilog-2001标准 |
+vcs+initmem+0/1/x/z | 初始化设计中所有存储器的值 |
+vcs+initreg+0/1/x/z | 初始化设计中所有寄存器的值 |
+vcs+lic+wait | 一直等待license |
+nospecify | 是一种仿真运行时的选项。它用于控制VCS在仿真过程中如何处理Verilog中的`specify`块。 `specify`块是一种用于描述和约束时序电路中时序行为的特殊语言结构。它可以定义信号的时序延迟、校准和约束规则等。在仿真过程中,通常使用`specify`块进行时序约束的模拟。 ,当我们希望对设计进行功能仿真或性能分析时,并不需要考虑`specify`块中的时序约束,而只关注设计本身的逻辑行为。这时,可以使用`+nospecify`选项告诉VCS在仿真过程中忽略`specify`块。 具体地说,当使用了`+nospecify`选项时,VCS会在编译时将`specify`块从Verilog源代码中移除,并在仿真过程中忽略时序约束,从而将仿真重点放在逻辑行为上。 |
+notimecheck | 是一种仿真运行时的选项。它用于控制VCS在仿真过程中是否执行时序约束的检查。 Verilog中的时序约束用于描述和约束时序电路中的时序行为,例如信号的时序延迟、时钟和数据的关系等。在仿真过程中,VCS默认会执行时序约束的检查,以确保设计是否满足约束规定的时序要求。 然而,有时在进行功能仿真或性能分析时,并不需要进行严格的时序约束检查,而只关注设计本身的逻辑行为。这时可以使用`+notimecheck`选项告诉VCS在仿真过程中跳过时序约束的检查。 具体来说,当使用了`+notimecheck`选项时,VCS会忽略时序约束,不执行相关的检查。这将加快仿真速度,并且更侧重于逻辑行为的仿真。 |
上面这2个编译有时候需要加上,之前遇到了自己的makefile跑用例没有问题,但是eman回归就有问题,最后发现是两边的编译选项不一样; | |
仿真选项(SIM) | |
+ntb_random_seed | |
-line | 使能VriSim中的单步运行 |
-ntb | 使能ntb(Native TestBench),支持OpenVera验证平台语言结构。 |
-timescale=<time_unit>/<time_precision> | 源代码文件中有的包括timescale编译指令,有的不包括,如果在VCS命令行中,不包括 timescale的源代码文件在最前面,VCS会停止编译。使用-timescale选项为这些在前面且又没有`timescale的源文件指定timescale |
-override_timescale=<time_unit>/<time_precision> | 让源文件统一使用指定的timescale |
-pvalues+<parameter_name>=<value> | 改变指定参数的值 -pvalue选项支持在编译阶段去更改parameter的值;然后直接在makefile里控制parameter的随机即可 |
-parameters <filename> | 通过文件的方式改变参数的值,参数的路径和改变的值均在文件中定义 |
+error+<n> | 将编译时运行的NTB错误增加到N |
-vcd <filename> | 指定VCD波形文件名,默认是verilog.dump,会被源代码文件中的$dumpfile覆盖 |
分离(块)(编译选项: -partcomp=adaptive_sched -fastpartcomp=j8
分离编译的优点
(1)拆分成多个线程去并行执行编译,节省了编译时间。-fastpartcom=jn,n代表并行线程的数量
(2)将DUT和TB分成若干partition,未修改的partition不需要重新编译
参考链接:
vcs把verilog文件编译完成后,会生成simv文件;
(跑仿真:./simv -l sim.log)
跑仿真:./simv +ntb_random_seed=12345 -l sim.log;(自动化脚本中,随机种子一般在makefile里面通过变量SEED传递进来)
vcs的单步仿真:
生成波形文件:在top_tb.sv中加入下面这个initial块
把数组型数据生成到波形文件中:
-F/-f的区别:
1. -F 使用相对路径索引include的文件。
2.-f 使用绝对路径索引include的文件。
UVM常用编译选项:
参考:
UVM实战 卷I学习笔记18——UVM常用宏汇总_菜鸡想要飞的博客-优快云博客https://blog.youkuaiyun.com/weixin_41979380/article/details/121656373UVM实战 卷I学习笔记17——UVM命令行参数汇总_菜鸡想要飞的博客-优快云博客
https://blog.youkuaiyun.com/weixin_41979380/article/details/121656117宏与运行时的命令行参数不同。它有两种定义方式,一是直接在源文件中中使用define进行定义:
`define MACRO 100
二是在编译时的命令行中使用如下方式:<compile command> +define+MACRO=100
常见的UVM宏有:
信息打印级别:USER_VCS_RUN_OPTS += +UVM_VERBOSITY=UVM_HIGH
指定用例:+UVM_TESTNAME=xxx_tc
打印出所有的命令行参数:<sim command> +UVM_DUMP_CMDLINE_ARGS
在命令行中设置冗余度阈值:+UVM_VERBOSITY=UVM_HIGH
ERROR到达一定数量退出仿真:<sim command> +UVM_MAX_QUIT_COUNT=6,NO (6数error数,no是不重载)(<sim command> +UVM_MAX_QUIT_COUNT=<count>,<overridable>
)
设置全局的超时时间:<sim command> +UVM_TIMEOUT="300ns, YES"
打开phase的调试功能:<sim command> +UVM_PHASE_TRACE
打开objection的调试功能:<sim command> +UVM_OBJECTION_TRACE
打开config_db的调试功能: <sim command> +UVM_CONFIG_DB_TRACE
打开resource_db的调试功能: <sim command> +UVM_RESOURCE_DB_TRACE
拓展寄存器模型的数据位宽:`define UVM_REG_DATA_WIDTH 128
拓展寄存器模型的地址位宽:`define UVM_REG_ADDR_WIDTH 64
自定义字选择位宽(很少见):`define UVM_REG_BYTENABLE_WIDTH 8