目录
1、IUS(Incisive Unified Simulator)
2、IES(Incisive Enterprise Simulator)
3、Xcelium(Cadence最新的仿真工具,Incisive(irun)的升级版本)
5、使用IMC(Incisive Metrics Center)工具分析覆盖率数据
一、仿真工具总结
1、IUS(Incisive Unified Simulator)
代表工具:ncverilog(基本不再使用)
2、IES(Incisive Enterprise Simulator)
代表工具:irun
3、Xcelium(Cadence最新的仿真工具,Incisive(irun)的升级版本)
代表工具:xrun
二、仿真工具启动方式
1、shell模式(命令行)
(1)三步模式(依次执行下述三个命令来完成仿真)
a、ncvlog:编译Verilog源文件
ncvlog命令示例:ncvlog -messages -work worklib1 test_tb.v test.v
常用的命令行选项:
-messages:在执行期间打印编译的信息。注:在irun命令中打印信息是默认的,无此选项。
-logfile filename:使用指定的日志文件名称,而不是默认名称(ncvlog.log)。
-nocopyright:禁止印刷版权信息。
-incdir:在指定的目录中搜索include files。
-sv:Enable the system verilog language constructs implemented in the release.
如果cds.lib和hdl.var设置文件不存在,编译器将自动创建默认的工作库(./INCA_libs/worklib),所有的设计单元都被编译到这个库中。
cds.lib文件
#cds.lib file #cd.Lib文件定义了不同名称的库 DEFINE worklib1 ./worklib1 DEFINE worklib2 ./worklib2
hdl.var文件
#hdl.var file #hdl.var文件指定名为worklib的库是工作库。 DEFINE WORK worklib1 DEFINE NCVLOGOPTS -messages
注:运行ncvlog命令前需要新建库目录。
-work xxx:将当前工作库定义为xxx。这将覆盖hdl.var文件中WORK变量定义的工作库。
-file args:从args加载命令行参数(可以为命令行选项或源文件)
b、ncelab:描述设计并生成snapshot
ncelab命令示例:ncelab -messages -work worklib1 -access rw test_tb
常用的命令行选项:
-messages:打印elab的信息
-logfile filename:使用指定的日志文件名称,而不是默认名称(ncelab.log)。
-file args:从args加载命令行参数
-work:使用指定位置作为默认绑定中的工作库。
-file args:从args加载命令行参数
-access:使用-access +/-rwc为设计中的所有对象设置访问权限(读、写、连接),没有+、-时默认为+。
在ncelab命令中还需要指明所有的顶层模块,在设计中这些顶层模块不允许被其他模块调用。
c、ncsim:对snapshot进行仿真
ncsim命令示例:ncsim -messages test_tb
常用的命令行选项:
-messages:打印simulation的信息
-logfile filename:使用指定的日志文件名称,而不是默认名称(ncsim.log)。
-gui:仿真后自动生成SimVision的GUI界面;
-file args:从args加载命令行参数
-input args:初始化时执行的脚本。
ncsim分为两模式:交互(interactive)的(simulation在0时刻停止)和非交互(noninteractive)的。
非交互模式下使用的命令行选项:
-run:无-gui时-run可省略;有-gui时必须有-run
交互模式下使用的命令行选项:
-tcl:无-gui时必须有-tcl;有-gui时-tcl可省略
在ncsim命令中还需要指明顶层模块。
(2)单步模式(执行下述命令之一即可完成仿真)
a、ncverilog
b、irun (IUS8.1后,使用ncverilog命令时会启动irun)
irun命令允许通过在单个命令行上指定所有的输入文件和命令行选项来运行模拟器。
irun可以支持各种源程序文件(verilog;VHDL;SystemC等)作为输入,并使用适当的编译器对它们进行编译。编译完输入文件后,irun会自动调用ncelab来详细设计,然后调用ncsim模拟器。
执行irun后,所有工具的输出都被写入一个名为run.log的公共日志文件,该文件位于调用irun的目录中。
irun命令示例:irun -cleanlib -access rw -work worklib1 xx_tb.v xx.v
(3)irun常用的命令行选项
-access:使用-access +/-rwc设置访问权限(读、写、连接),没有+、-时默认为+。
-clean:执行之前,删除INCA_libs文件夹(如果存在);
-cleanlib:删除cds.lib中找到的所有pak文件;
-top:使用-top 顶层module名声明顶层模块(如有多个,分别声明)。当所有源文件均为verilog文件时,无需声明,否则需要声明;
-gui:仿真后自动生成SimVision的GUI界面;
-compile:只编译源文件,不做elaborate;
-c:只生成snapshot,不仿真;
-R:只仿真,需要有提前生成的snapshot;
-l:可以使用-l选项更改日志文件的名称;
-work:使用指定位置作为默认绑定中的工作库;
-sv:enable the system verilog language constructs implemented in the release。注:如果system verilog源文件具有.sv文件扩展名,则不需要-sv选项。
irun.args文件:arguments file,指参数文件。在参数文件中可以指定输入文件和命令行选项。
-f:-f irun.args扫描相对于irun调用目录的文件。解释:irun.args文件中.v等源文件的位置应相对于要调用irun命令的地址进行填写。
-F:-F irun.args扫描相对于参数文件run.args位置的文件。解释:irun.args文件中.v等源文件的位置应相对于irun.args文件本身所在的地址填写;
-linedebug:启用对设置行断点和单步执行代码的支持。使用此选项将对仿真对象的默认访问设置为读/写/连接。
2、图形界面
输入命令nclaunch打开图形界面,然后选择仿真模式。
(1)mutiple step
(2)single step
三、查看波形工具SimVision
1、wave.shm文件夹
在testbench文件中添加以下代码:
initial begin
$shm_open("wave.shm");//打开波形保存文件wave.shm。运行后wave.shm中包含了.dsn和.trn两个文件
$shm_probe(top,"AS");//top指顶层模块名,一般为testbench文件中的顶层模块
$shm_close;
end
运行仿真命令irun后,会自动生成存储波形的wave.shm文件夹。
2、SimVision运行方式
(1)shell
首先可在.bashrc文件或.cshrc.user文件(根据使用的Shell解析器而定)中将SimVision命令简写为simv (可参考https://blog.csdn.net/qq_42922513/article/details/130767986?spm=1001.2014.3001.5502):
在.bashrc文件中添加:
#.bashrc
alias simv="/xx/xx/xx/INCISIVE152/tools/bin/simvision"
在.cshrc.user文件中添加:
#.cshrc.user
alias simv 'simvision'
source上述文件后,在终端输入命令simv wave.shm,即可运行SimVision。
(2)图形界面
在运行仿真的ncsim或irun命令中,添加命令行选项:-gui,以在仿真后自动运行SimVision。
四、覆盖率
1、覆盖率类型
(1)代码覆盖率(Code)
块覆盖率(Block):块覆盖识别代码中哪些块已执行,哪些未执行。块覆盖率确定测试用例是否执行块中的语句。一般来说,块覆盖是整个验证过程中必不可少的第一步。
分支覆盖率(Branch):分支覆盖通过为报告各个分支的覆盖数字提供更精确的覆盖结果来补充块覆盖。
表达式覆盖率(Expression):表达式覆盖率是一种在simulation期间分解逻辑表达式并监视它们的机制。
翻转覆盖率(Toggle):翻转覆盖率测量设计中各种信号的活动,并提供有关未切换信号或在模拟运行期间保持不变的信号的信息。
(2)功能覆盖率(Functional)
功能覆盖可以帮助识别设计中未测试的功能,并从功能的角度提供验证完整性的视图。它提供了关于如何满足测试计划所设置的验证目标的见解,并且可以在用户定义的覆盖点上执行,使用Property Specification 语言(PSL)、System Verilog assertions(SVA)或covergroup语句指定。
Control-oriented functional coverage:面向控制的功能覆盖。PSL,SVA
Data-oriented functional coverage:面向数据的功能覆盖。covergroup
(3)有限状态机覆盖率(FSM)
FSM覆盖解释HDL设计的综合语义,并监视设计中控制逻辑块的FSM表示的覆盖。
注:
1、代码覆盖率100%是验证工作完备性的必要条件,即代码覆盖率100%并不代表验证工作的完成;
2、某个功能在设计中可以被遗漏,代码覆盖率不能发现此错误,但是功能覆盖率可以。
2、三步模式生成覆盖率的命令行选项
(1)Compiling the Design
使用第二节所述命令即可,无需额外选项。
(2)Elaborating the Design
-coverage <coverage_types>:为所有编译模块使能覆盖数据生成,<coverage_types>可以是:B (bolck), E (expr), T (toggle), U (functionl), F (FSM), A (all)。这些参数不区分大小写,而且支持字符串或单字符名称。
-covfile <coverage_configuration_file>:使用此选项可以向ncelab传递一个配置文件来控制检测
-covdut <DUT_module>:将检测以及所选覆盖的覆盖数据库存储限制为DUT_module以及它的子层次结构。
(3)Simulating the Design
-covoverwrite:允许覆盖存储覆盖率的输出文件和目录。默认情况下,覆盖率输出数据被写入目录cov_work/scope/test。如果此路径已经存在,则不会覆盖输出目录,并且simulation将终止。使用此选项,将覆盖覆盖率数据。
-covworkdir <workdir>:指定工作目录的名称,默认情况下工作目录为cov_work。
-covscope <scope>:指定用于存储覆盖模型文件的替代目录。默认情况下模型文件存储在cov_work/scope目录。
-covtest <test>:指定当前运行的运行目录名。默认情况下当前运行的覆盖率数据文件存储在cov_work/scope/test
-covcleanworkdir:在simulation开始前,移除覆盖率工作目录(默认为cov_work),其中包括覆盖模型文件(.ucm)和覆盖数据文件(.ucd),以及icc.com。
3、覆盖率数据存储路径
默认情况下,覆盖率数据存储路径为:
cov_work
------scope
-------.ucm
-------test
------.ucd
4、单步模式(irun)生成覆盖率的命令行选项
-coverage <coverage_types>
-covfile <coverage_configuration_file>
-covdut <DUT_module>
-covoverwrite
-covworkdir <workdir>
-covscope <scope>
-covtest <test>
-covcleanworkdir
5、使用IMC(Incisive Metrics Center)工具分析覆盖率数据
(1)launch IMC
GUI模式:imc -gui
命令行交互模式:imc -batch
(2)loading runs
load -run <test>
(3)exiting IMC
exit
如果觉得有用可以点在并收藏!!!