命令行编译不包括路径集_VCS编译仿真常用选项

c8d17781fb39263e33f6d9d6ee2d6efb.gif 大家好,提前预祝大家儿童节快乐!!! 407f502da4d7d4d5e13b3e121ee904f1.png

儿童节快乐

        今天,整理了一下VCS编译和仿真常用的选项,需要的转走。a618e04b64c28d8d4874df2327ccdb1a.pnga618e04b64c28d8d4874df2327ccdb1a.png

VCS的仿真选项分编译(compile-time)选项和运行(run-time)选项。

常用编译选项

选项

说明

-debug_pp

产生vdp文件,enable DVE 后处理

-debug

相对-debug_pp,使能UCLI命令行

-debug_all

相对-debug,多了单步调试功能

-f

指定文件列表的文件名,文件中可包括源代码文件的路径和名称,也可以包括编译选项参数

-sverilog

支持SystemVerilog语法

-l  

指定记录VCS编译和运行信息的log文件名

+define+=

定义一个文本宏,与源文件中的`ifdef配合。如果value是字符串,需要用双引号括起来

+incdir+

指定VCS搜索`include指令使用的包含文件的目录,可以用“+”定义多个目录。

-fsdb

Dump fsdb格式波形文件,通过$fsdbDumpfile()来设置fsdb文件的名称。

+v2k

支持Verilog-2001标准

-timescale=/

源代码文件中有的包括`timescale编译指令,有的不包括,如果在VCS命令行中,不包括`timescale的源代码文件在最前面,VCS会停止编译。使用-timescale选项为这些在前面且又没有`timescale的源文件指定timescale

-override_timescale=

/

让源文件统一使用指定的timescale

-o

指定编译生成的可执行文件的名称,默认是simv

-R

在编译之后立即执行产生的可执行文件

-y  

指定verilog库路径

+libext+

让VCS在verilog库路径下搜索指定的扩展名文件,与-y配合

-v  

指定verilog库文件名(如果不使用-y指定库路径,这里需要给出相对路径)

-sdf  max/min:dut_top_name:

后仿,在编译中反标SDF文件,只是编译选项。其中,max和min表示最差和最优的延时文件,对应worst和best这两种Corner。

+sdfverbose

显示SDF反标时的详细告警和错误信息

+sdf_nocheck_celltype

SDF反标时不检查SDF文件中的CELLTYPE的一致性

-pvalue +parameter_hierarchical_name=value

改变设计中的参数值,例如:

vcs -pvalue+test.d1.paraml=32

-parameters filename

通过文件的方式改变参数的值,参数的路径和改变的值均在文件中定义

-notice

给出详细的编译信息

-q

不在终端输出编译时的信息

-gui

在仿真时,使用dve调试。

+vcs+flush+log

加速编译仿真时log文件缓存的刷新频率

+vcs+flush+all

+vcs+flush+log,+vcs+flush+dump和+vcs+flush+fopen的集合

-full64

在64-bit模式下编译,生成64-bit模式仿真的可执行文件

-ntb

使能ntb(Native TestBench),支持OpenVera验证平台语言结构。

VCS --  脉冲控制

+transport_path_delays  +pulse_e/num1+pulse_r/num2

+transport_int_delays  +pulse_e/num1 +pulse_r/num2

VCS默认的路径延迟(module path delay)sdf文件反标的互联延迟(interconnect delay)为惯性延迟;原语门、开关、连续赋值语句和MIPD(module input port delay)的延迟则只能是惯性延迟。上述两个选项开启了传输延迟模式,后面的两个选项是必须的:num1num2都是延时的百分比,小于num2的脉冲会被过滤掉(filter out),大于num2但小于num1的脉冲会被x值代替。如果想要实现真正的传输延迟,将num1和num2设置为0即可。

+pulse_e/num1  +pulse_r/num2

+pulse_int_e/num1  +pulse_int_r/num2

窄脉冲的尾沿安排的时间会取消起始沿安排的时间,若想使sdf反标的网线不适用原语、连续赋值、MIPD的惯性延迟模型,要加上+multisource_int_delays选项,否则使用MIPD的惯性延迟模型。对于惯性延迟,num1=0和num2=0并不表示传输延迟,而是指小于延时的脉冲宽度都被忽略。这两个选项对分布延迟不起作用。

+pulse_on_detect

探测到脉冲宽度小于延时,立即在对应时刻给出x,该选项对分布延迟不起作用。

+no_pulse_msg

当脉冲宽度小于延时的时候,不给出信息

+pulse_on_event

对上升、下降延时不同的情况,给出x

VCS -- 延时说明

不指定延时模式时,VCS使用路径延时和分布延时中的最大值。

+delay_mode_path

模块的延时适用路径延时

+delay_mode_distributed

模块的延时使用分布延时,对分布延时,只要脉冲宽度小于#后面的数字,直接滤掉(针对惯性延时)

+delay_mode_unit

模块的延时使用所有的时间精度中的最小值,specify中的延迟不起作用,#后面的所有数字变为1,单位使用最小精度。

+delay_mode_zero

模块的延时使用0延时

f02bed2832beb26223228c8e83468136.gif

涉及vmm验证环境的编译和仿真选项

-ntb_opts rvm

实现验证环境时,使用RVM(Reference  Verification Methology)。该选项仅仅是包含vmm的库文件(vmm.sv),在采用VMM验证方法学搭建TestBench时,需要加该选项。

+vmm_opts+var_name=value

编译时,通过选项传入vmm_opts::get(“var_name”,defaule_value)所获取的值。功能与vmm_opts::set_int/string/bit(“var_name”,value)类似

+define+VMM+LOG_FORMAT_FILE_LINE

编译时,显示消息的文件,行信息

+vmm_test=

在使用vmm_test类创建不同tc时,通过vmm_test指定仿真tc的名称

+vmm_force_verbosity=DEBUG/NOTE

指定仿真时,显示消息严重性值小于设定值得消息

+vmm_log_default=

控制仿真时,显示消息严重性值小于设定值得消息,功能与选项+vmm_force_verbosity类似

           0d8b2b27031b66d6c7cb71aff3bac27b.png   

涉及覆盖率选项

选项

说明

-cm  

指定覆盖率的类型,包括:line(行覆盖)、cond(条件覆盖)、fsm(状态机覆盖)、tgl(翻转率覆盖)、path(路径覆盖)、branch(分支覆盖)和assert(断言覆盖)。

如果包括两种或以上的覆盖率类型,可用“+”,-cm  line+cond+fsm+tgl

-cm_dir  

指定覆盖率统计结果的存放路径,默认是simv.cm

-cm_log

指定仿真过程中记录覆盖率的log文件名

-cm_name  

指定保存覆盖率结果的文本文件的名称

-cm_hier

指定覆盖率统计的范围,范围在文件中定义,可以指定module名、层次名和源文件等。

-cm_cond

进一步细化条件覆盖率的统计方式,包括:basic, std, full, allops, event, anywidth, for, tf, sop等选项。

-cm_count

在统计是否覆盖的基础上,进一步统计覆盖的次数

-cm_name

指定保存覆盖率结果的文本文件的名称

1e014173a1895c86a9e61041c3043436.png

涉及仿真选项

选项

说明

-l  sim.log

生产仿真日志文件,名称为sim.log

-sverilog

支持sv语法

-gui

启动dve

+ntb_random_seed_automatic

不指定随机化种子,自动随机

+ntb_random_seed=value

指定随机化种子

最后,提供一个我工作中常用的Makefile文件,用于编译和仿真,查看波形,统计覆盖率等。  Project目录说明结构说明:

…/project_sim

       ----|tests                所有test case的存放目录

        ----|run_dir              所有testcase的运行目录

        ----|urg_data           每个tc运行之后覆盖率*vdb文件存放目录

        ----|cov_report        最终覆盖率报告文件

        ----|其他目录或者文件是 Testbench所需要的目录结构

default: check mov

run: com sim

###### Global Var---MODE and SPEED select  ######

USB_MODE = HOST_MODE

USB_SPEED = HIGH_SPEED

TC_NAME = tc_basic

######COMMON ######

TC_NAME_SUF = $(USB_MODE)_$(USB_SPEED)_$(shell  date +”%m_%d_%H_%M”)

VCS = vcs -sverilog +v2k+pulse_r/0  + pulse_e/0 + transport_path_delays

INC = +incdir +  ./dir_1+./dir_2+…

RTL = if/usb_if.sv -f  rtl.lst

COM_OPT =  -sverilog  -ntb_opts  rvm   -l com.log  -fsdb  -lca \

        -timescale = 1ns/1ps \

        +lint=TFIPC-L   +lint=PCWM

RUN_OPT = +ntb_random_seed_automatic  - l   sim.log \

        +vmm_force_verbosity=DEBUG

DEF =  +define+HOST_MODE+HIGH_SPEED+USB_ADDR=10

###### COVERAGE ######

COV_OPT =  -cm line+cond+tgl+assert+path

#产生覆盖率vdb文件的名称

COV_OPT +=  -cm_dir  ./urg_data/$(TC_NAME)_$(TC_NAME_SUF)

COV_DATA_DIR = ./urg_data/*.vdb

#覆盖率报告存放目录

COV_REP_DIR =  ./cov_report

######  VCS   ######

com:

        $(VCS)   $(INC)  $(COM_OPT)  $(COV_OPT)  $(DEF)  $(RTL)   test/test.sv

sim:

        ./simv $(RUN_OPT)  $(DEF)   $(COV_OPT)

######  clean  ######

clean:

        @rm   -rf  *.log csrc* *.db

######  wave -- verdi ######

verdi:

        verdi  -2001 -ntb_opts  vmm   -sv  (RTL)  -ssf   ./xx.fsdb &

######  Coverage ######

cov:

        urg -dir  $(COV_DATA_DIR)  -report   $(COV_REP_DIR) -format both

cov_view:

        firefox  ./cov_report/dashboard.html &

#######Check the var  in Makefile###

check:

ifneq ($(USB_MODE),HOST_MODE)

ifneq ($(USB_MODE),DEVICE_MODE)

        $(error “The USB_MODE=$(USB_MODE) is  error, must be HOST_MODE or DEVICE_MODE”)

else

        @echo “DEVICE_MODE”

endif

else

        @echo “HOST_MODE”

endif

ifneq ($(USB_SPEED),HIGH_SPEED)

ifneq ($(USB_SPEED),FULL_SPEED)

        $(error “The USB_SPEED=$(USB_SPEED) is  error, must be HIGH_SPEED or DEVICE_SPEED”)

else

        @echo “FULL_SPEED”

endif

else

        @echo “HIGH_SPEED”

endif

####### OTHERS ###

TC_RUN_DIR=./run_dir/$(TC_NAME)/$(TC_NAME_SUF)

mov:

        @rm -rf $(TC_DIR)

        @mkdir -p $(TC_DIR)

        @cp -rf  dir_1  dir_2   if  tb_top.v  rtl.lst  env  Makefile  tests   $(TC_RUN_DIR)

        @sed -i ‘/default/d’  $( TC_RUN_DIR)/Makefile

        @sed -i ‘/OTHERS/, $$d’ $(TC_DIR)/Makfile

        @echo “Finish the pre-run work”

        @cd $(TC_RUN_DIR) && $(MAKE)

     使用说明:

    编译:    make com

    仿真:    make sim

    编译之后,自动运行:make

    生产覆盖率文件: make cov

    查看覆盖率报告:make cov_view

     Makefile中的ifneq主要是对全局变量的书写判断,仿真手误,在Makefile中,将全局变量设置错误。

    mov后的代码是实现,每次运行tc,生产一个单独的目录,保留不同testcase的运行情况,以作后续分析。

end

6cf24b265b77bf2895f05c99dd6d1c76.png

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值