modelsim-中代码覆盖率使用详解
PERL生成遍历文件和MODELSIM覆盖率检测方法
1用Perl语言编程生成不同工作模式的测试文件Perl是一种通用且应用广泛的脚本语言,可以不需要编译而直接解释运行,可移植能力强,兼有多种语言的精华和特性,效率也比较高,基于这些方面的优越性,其在实际的IC 设计和验证中得到了广泛的应用。
Perl的安装在Linux系统下和大部分的UNIX系统下,perl都是随系统安装的,Windows 需要下载安装perl,推荐使用ActivePerl,下载安装后可已在命令行输入perl–v来查看是否正确安装和perl的版本(见图1.1),通过perl xxx.pl来解释运行perl程序。
图 1.1perl版本查看test_enc.vhd文件中69-75行的作用是通过设置4个变量pat_code、pat_disturb、pat_mix 和pat_frame的值来指定一种工作模式,根据它们的取值范围可以得出总共会有8*4*4*16=2048种组合,对应2048种工作模式。
Perl语言有别于其他语言的特性中,最重要的就是对正则表达式的支持,可以方便快捷的处理字符串相关的问题,因此可以利用这种特性,通过查找变量字符串和替换指令(s///)进行对测试文件变量值的更改,产生不同工作模式的激励。
s///:替换运算符。
s/searchattern/replacement/表示查找searchattrn并用replacement代替。
利用4层for循环编写perl程序,每次循环查找一个变量并改变变量的值,然后输出一个文件名与变量值相关的vhd文件(例如4个变量值分别为“011”、“11”、“01”、“1111”时文件名可以设为test_3_3_1_15.vhd。
需要注意的是,变量的值是一定位的二进制数,循环变量则默认为十进制数,所以要进行十进制与二进制数的转换,并在高位为0时也要显示出来。
新建一个txt文件,并输入程序,保存文件名为test_gen并修改后缀为.pl,生成test_gen.pl 文件,打开命令行,跳转到文件所在目录,输入:perl test_gen.pl,按回车键解释运行便会得到2048个vhd文件,对应不同的工作模式,而且参数的选值与各个文件的名字相关,方便进行选取和测试。
ModelSim和QuestaSim功能简介及应用
ModelSim是工业界最优秀的语言仿真器,它提供最友好的调试环境,是作FPGA、ASIC设计的RTL级和门级电路仿真的首选。
它支持PC和UNIX、LINUX平台,是单一内核支持VHDL和Verilog混合仿真的仿真器。
它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真,编译仿真速度业界最快,编译的代码与平台无关,便于保护IP核,具有个性化的图形界面和用户接口,为用户加快调试提供强有力的手段。
全面支持VHDL和Verilog语言的IEEE 标准,以及IEEE VITAL 1076.4-95 标准,支持C语言功能调用, C的模型,基于SWIFT的SmartModel逻辑模型和硬件模型。
ModelSim支持RTL仿真,门级仿真,时序仿真:主要特点:*采用直接编译结构,编译仿真速度最快;*单一内核无缝地进行VHDL和Verilog混合仿真;*与机器和版本无关,便于数据移植和库维护;*与机器无关的编译代码编于保护和利用IP;*简单易用和丰富的图形用户界面,快速全面调试;*Tcl/Tk用户可定制仿真器;*完全支持VHDL/Verilog国际标准,完全支持Verilog 2001;*支持众多的ASIC和FPGA厂家库;*集成的Performance analyzer帮助分析性能瓶颈,加速仿真;*灵活的执行模式,Debug模式可以进行高效的调试,效率模式大幅度提高仿真速度。
*加强的代码覆盖率功能Code coverage,能报告出statement 、branch、condition、* expression、toggle、fsm等多种覆盖率情况,进一步提高了测试的完整性;*同一波形窗口可以显示多组波形,并且能进行多种模式的波形比较(Wave Compare);*先进的Signal Spy功能,可以方便地访问VHDL 或者 VHDL 和Verilog 混合设计中的下层模块的信号,便于设计调试;*支持加密IP;*集成的 C调试器,支持用C 语言完成测试平台和模块;支持64位的OS; ModelSim用户界面:ModelSim设计流程:ModelSim coverage验证:ModelSim Dataflow窗口QuestaSim是第一个基于标准的单核验证引擎,集成了一个HDL模拟器,一个约束求解器,一个判断引擎,功能覆盖,以及一个通用的用户界面。
modelsim使用教程
第8章 使用ModelSim进行设计仿真ModelSim为HDL仿真工具,我们可以利用该软件来实现对所设计的VHDL或Verilog程序进行仿真,支持IEEE常见的各种硬件描述语言标准。
可以进行两种语言的混合仿真,但推荐大家只对一种语言仿真。
ModelSim常见的版本分为ModelSim XE和ModelSim SE两种,ModelSim版本更新很快,目前最新版本为5.8版本,该版本支持VHDL的2002标准以及Verilog的2001标准,此外,在该版本的Linux、HP和SUN工作站等平台支持VHDL、Verilog 和SystemC的混合仿真,但在Windows平台上不支持SystemC的仿真。
本章将对ModelSim5.7版本进行介绍,目的是希望看完本章,读者可以简单地使用ModelSim进行仿真,有关更深入地教程,还是参考ModelSim附带的文档。
在网址/support/上也可以找到深入的教程,在该页面上注册以后,会在电子邮件中收到发过来的密码,根据邮件地址和密码登陆后,会有一些高级教程和使用要点(Application Notes)下载。
ModelSim5.7SE版本内部划分为更细的版本编号,从ModelSim5.7aSE到ModelSim5.7gSE等等。
读者可以选择任一版本。
另外,如果ModelSim是和ISE一起使用的话,你需要编译Xilinx的一些库文件,这些库文件包括unisim、simprim、xilinxcorelib、aim、pls、cpld等,有了这些库文件,可以在ISE中生成设计的行为仿真(将设计转换为RTL描述后进行的仿真)、转换后仿真(将设计转换为Xilinx器件的基本模块来实现后进行的仿真)、映射后仿真(将设计用Xilinx的具体器件的具体模块实现后进行的仿真,仿真中包含了器件的延时,但由于没有布局布线无法提取出互连线的信息,因此仿真中不包含互连线的延时、电容、电阻等信息)、布局布线后仿真(将设计对Xilinx具体器件进行布局布线后,提取出互连线的信息,进行的仿真包含了器件的延时以及互连线的延时等信息)的各种模型,然后在ModelSim中对这些模型进行仿真,由于ISE和ModelSim已经实现了无缝的连接,在ISE中只需设置一个可视的波形文件,然后点几下鼠标就可以实现各种仿真,具体的方法在ISE的使用一章中有较为详细的介绍,可以参阅具体的章节。
详细介绍modelsim的使用方法
测试台
- - Verilog 或 VHDL代码 非常复杂的仿真(交互式仿真、数据量大的仿真)
force命令
- - - 简单的模块仿真 直接从命令控制台输入 .DO 文件 (宏文件)
用ModelSim作功能仿真(19)
5 执行仿真----仿真器激励
force命令
用ModelSim作功能仿真(15)
5 执行仿真(UI)
选择 timesteps数量就 可以执行仿真
Restart – 重装任何已改动 的设计元素并把仿真时间设 为零
COM) restart
用ModelSim作功能仿真(16)
5 执行仿真----run 命令参数
可选的参数 - -<timesteps> <time_unit> • 指定运行的timesteps数量 • 单位可用{fs, ps, ns, ms, sec} - -step • Steps to the next HDL statement - -continue • 继续上次在-step或断点后的仿真 - -all • 运行仿真器直到没有其他的事件
用ModelSim作时序仿真(3)
时序仿真的实现方法:
unisim库是用来对ISE中画的电 路图进行前仿真时用的。
simprim则是在作布线后的时序 仿真时用。
用ModelSim作时序仿真(4)
时序仿真的实现方法:
以Foundation为例:
Foundation所产生的netlist不包含time delay的数据, 有一个time_sim.SDF文件来存储TIMING数据。(有 的厂商的布局布线所产生的NETLIST文件已经包含有 time delay的数据). Foundation所产生的NETLIST文件默认的文件名是 time_sim.vhd(或time_sim.v) time_sim.vhd或time_sim.v文件用到新的simprim库, 因此必须在仿真前先建立。 做时序仿真,要编译time_sim.vhd或time_sim.v,以 及time_sim.SDF 加载测试文件
代码覆盖率说明(个人总结)
代码覆盖率说明一、指令介绍代码覆盖率分为行覆盖率、条件覆盖率、状态机覆盖率和翻转覆盖率。
在vcs仿真工具下覆盖率信息存储在.cm文件中,使用urg工具解析、合并和生成报告;在ncsim仿真工具下覆盖率信息存储在icc.data文件中,使用iccr工具解析、合并和生成报告。
代码覆盖率指令主要包括编译、运行和生成覆盖率报告三个部分,指令结构大体同功能覆盖率。
为了工具的统一性和方便界面提取,先做如下规定:➢覆盖率数据库文件夹均放在CovData目录下,ncsim生成的放入ncsim子目录、vcs 生成的放入vcs子目录。
➢覆盖率报告均放在CovReport目录下,ncsim生成的放入ncsim子目录、vcs生成的放入vcs子目录。
➢每条用例都生成独自的同用例名的覆盖率数据库和覆盖率报告文件夹。
➢最后生成总的覆盖率数据库和覆盖率报告文件夹,名称为total。
文档指令描述中,{TC_NAME}表示匹配用例名。
1、vcs仿真环境1)样例rm -r simv* CovData/vcs/* FcovReport/vcs/* CovReport/vcs/*vcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_1.cm +define+marco=VCS+ test_1.sv./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_1.cm +ntb_random_seed=666666 2>&1 |tee log/vcs/test_1.logvcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_2.cm +define+marco=VCS+ test_2.sv./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_2.cm +ntb_random_seed=888888 2>&1 |tee log/vcs/test_2.logvcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_3.cm +define+marco=VCS+ test_3.sv./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_3.cm +ntb_random_seed=555555 2>&1 |tee log/vcs/test_3.logurg -dir CovData/vcs/test_1.vdb -metric group -report FcovReport/vcs/test_1 -format text urg -dir CovData/vcs/test_2.vdb -metric group -report FcovReport/vcs/test_2 -format text urg -dir CovData/vcs/test_3.vdb -metric group -report FcovReport/vcs/test_3 -format text urg -dir CovData/vcs/*.vdb -metric group -report FcovReport/vcs/total -format texturg -dir CovData/vcs/test_1.cm -metric line+cond+fsm+tgl -report CovReport/vcs/test_1 -format texturg -dir CovData/vcs/test_2.cm -metric line+cond+fsm+tgl -report CovReport/vcs/test_2 -format texturg -dir CovData/vcs/test_3.cm -metric line+cond+fsm+tgl -report CovReport/vcs/test_3 -format texturg -dir CovData/vcs/*.cm -metric line+cond+fsm+tgl -report CovReport/vcs/total -formattext2)指令说明(1)编译-lca:增加LCA的支持,vcs0812及以后的版本需要,此前的版本不需要。
Modelsim仿真流程-经验总结
Modelsim仿真流程-经验总结1.Modelsim简介略。
2.modelsim仿真流程:modelsim基本的仿真流程包括建立库、建立工程并编译、仿真、调试、但在libero环境中运行modelsim时,软件自动映射库和生成工程文件。
其中功能仿真、综合仿真以及后仿真分别映射presynth、postsynth和postlayout库。
基本流程是:建立工作库→编译源代码→启动仿真→分析、调试。
2.1建立库并映射在modelsim中,任何使用VHDL、Verilog HDL、SystemC等语言实现的设计,都被编译到一个库中。
♥方法一:File>New>Library选择新建并映射到该库;♥方法二:在modelsim>提示符下运行命令vlib work2-建立库,vmap work work2-建立映射库;2.2建立工程Modelsim仿真需要建立自己的工程,同时modelsim还提供了文件夹管理工程的功能。
♥step1:File>New>project,并指定库文件名;♥step2:新建文件或导入文件;2.3编译文件建立好工程后,使用compile功能对源文件进行编译。
Libero环境启动modelsim时,系统执行run.do脚本文件自动编译源文件。
♥鼠标右击文件,选择compile All对所有的工程文件执行编译操作;♥启动仿真,使用simulation>start simulation>选择design选项卡功能使modelsim进入仿真状态,之后可以运行仿真。
在libero环境下,运行modelsim直接从运行仿真这一步骤开始。
♥运行仿真可以设置仿真时间或选择仿真全部♥tcl命令:do run.do –当设计修改后,使用此命令重新导入设计;Do wave.do-打开波形列表文件,或者向当前波形添加列表;Restart-复位当前仿真,从0时刻重新仿真;Run 1ms-运行仿真1ms时间;Run all-运行全部的仿真;在libero环境下,可以自己编写脚本文件代替run.do文件,在项目比较大的情况下可以大大简化仿真的操作。
Modelsim SE 6.5a使用指南
Modelsim SE使用指南ModelSim的功能侧重于编译、仿真,不能指定编译的器件,不具有编程下载能力。
不象Synplify 和MAX+PLUS II可以在编译前选择器件。
而且ModelSim在时序仿真时无法编辑输入波形,不象MAX+PLUS II可以自行设置输入波形,仿真后自动产生输出波形,而是需要在源文件中就确定输入,如编写测试台程序来完成初始化、模块输入的工作,或者通过外部宏文件提供激励。
这样才可以看到仿真模块的时序波形图。
ModelSim还具有分析代码的能力,可以看出不同的代码段消耗资源的情况,从而可以对代码进行改善,以提高其效率。
菜单栏标题栏下方为菜单栏。
菜单栏有八个菜单项,分别是:File(文件)、Edit(编辑)、View (视图)、Compile(编译)、Simulate(仿真)、Tools(工具)、Window(窗口)、Help(帮助)。
下面分别罗列其具体选项。
1. File(文件)菜单文件菜单通常包含了对工程及文件等的操作。
ModelSim的文件菜单包含的命令有:New(新建),Open(打开),Close(关闭),Import(导入),Save(保存),Delete(删除),Change Directory(更改路径),Transcript(对脚本进行管理),Add to Project(为工程添加文件),Recent Directories(最近几次的工作路径),Recen Projects(最近几次工程),Quit(退出)。
(1)新建文件命令(File/ New)单击File/ New命令,将会出现一个子菜单,共包含四个选项:单击Floder(新建文件夹)后,会出现对话框,提示输入新建的文件夹的名字,即可在当前目录下新建一个文件夹;单击Source(新建源文件)后,会出现源文件类型的选项(VHDL,Verilog,Other),点击可分别新建对应格式的源文件;单击Project(新建工程)后,会出现对话框,提示在Project Name 处输入新建工程的名称,在Project Location处指定新建工程的存放路径,在Default Library Name处指明默认的设计库的名称,用户设计的文件将编译到该库中;单击Library(新建一个库)后,会出现对话框,提示选择Creat a New library and a logical mapping to it(新建一个库并建立一个逻辑映象)或A map to an existing library(新建一个到已存在库的映象),在Lirary name处输入新建库的名称,在Library phycial name处输入存放库的文件名称。
modelsim使用命令
1. 常用仿真命令vlib work // 建立work仿真库vmap work wrok // 映射库vlog -cover bcest *.v // 加覆盖率分析的编译vsim -coverage -voptargs="+acc" -t ns test // 仿真文件为test.vadd wave * // 将所有模块waveform. dump出来add wave sim:/test/t/M2/Reg_out // 将模块Reg_out中的waveform. dump出来delete wave /test/i2. SVA 断言仿真命令vlog -sv a.vvsim -assertdebug testview assertionsvsim -assertdebug ScaleBlock_tf -L xilinxcorelib_ver -L unisims_ver // 加载xilinxlib库3. verror 3601 // 查错4. 给仿真工具加载xilinx 库命令(1)加载之前将modelsim.ini改为非“只读”(2)“运行” cmd,到xilinx目录下(3) C:\Xilinx > compxlib -s mti_se -p c:\Modeltech_6.0\win32 -f all -l verilog -o C:\ Modeltech_6.0\Xilinx_lbis或者Xilinx目录下.\bin\nt\下有compxlib.exe简单得modelsim命令行仿真用do文件进行仿真真得很方便,比写testbench方便多了,我是深有感触呀,开始时因为不知道,只知道写testbence,在小得模块也写testbench,真得很烦躁!而且信号定义什么得比较多,采用do文件得方法就没有那么多信号定义了,管理也比较方便,呵呵,真得很方便,而且采用命令行得形式,感觉特有成就感,呵呵!1.运行仿真,在主窗口输入命令:vsim work.实体名2.为时钟信号添加驱动,输入命令:force clk 0 0,1 10 -r 20,将仿真时钟设为50MHz;(设时间单位为ns)3.打开波形窗口,输入命令:view wave4.为波形窗口添加信号,输入命令:add wave -hex *,这里的*表示添加设计中所有的信号,-hex 表示以十六进制来表示波形窗口中的信号值;5.开始仿真,输入命令,run 3us,这时候在波形窗口中出现仿真波形6.退出仿真,输入命令:quit –sim。
modelsim使用命令
modelsim使⽤命令1. 常⽤仿真命令vlib work // 建⽴work仿真库vmap work wrok // 映射库vlog -cover bcest *.v // 加覆盖率分析的编译vsim -coverage -voptargs="+acc" -t ns test // 仿真⽂件为test.vadd wave * // 将所有模块waveform. dump出来add wave sim:/test/t/M2/Reg_out // 将模块Reg_out中的waveform. dump出来delete wave /test/i2. SVA 断⾔仿真命令vlog -sv a.vvsim -assertdebug testview assertionsvsim -assertdebug ScaleBlock_tf -L xilinxcorelib_ver -L unisims_ver // 加载xilinxlib库3. verror 3601 // 查错4. 给仿真⼯具加载xilinx 库命令(1)加载之前将modelsim.ini改为⾮“只读”(2)“运⾏” cmd,到xilinx⽬录下(3) C:\Xilinx > compxlib -s mti_se -p c:\Modeltech_6.0\win32 -f all -l verilog -o C:\ Modeltech_6.0\Xilinx_lbis或者Xilinx⽬录下.\bin\nt\下有compxlib.exe简单得modelsim命令⾏仿真⽤do⽂件进⾏仿真真得很⽅便,⽐写testbench⽅便多了,我是深有感触呀,开始时因为不知道,只知道写testbence,在⼩得模块也写testbench,真得很烦躁!⽽且信号定义什么得⽐较多,采⽤do⽂件得⽅法就没有那么多信号定义了,管理也⽐较⽅便,呵呵,真得很⽅便,⽽且采⽤命令⾏得形式,感觉特有成就感,呵呵!1.运⾏仿真,在主窗⼝输⼊命令:vsim work.实体名2.为时钟信号添加驱动,输⼊命令:force clk 0 0,1 10 -r 20,将仿真时钟设为50MHz;(设时间单位为ns)3.打开波形窗⼝,输⼊命令:view wave4.为波形窗⼝添加信号,输⼊命令:add wave -hex *,这⾥的*表⽰添加设计中所有的信号,-hex 表⽰以⼗六进制来表⽰波形窗⼝中的信号值;5.开始仿真,输⼊命令,run 3us,这时候在波形窗⼝中出现仿真波形6.退出仿真,输⼊命令:quit –sim。
modelsim 中代码覆盖率使用详解
一、代码覆盖率Modelsim代码覆盖率功能Code coverage,能报告出statement(语句)、branch(分支)、condition(条件)、expression(表达)、toggle(信号翻转)、fsm(有限状态机)等多种覆盖率情况。
1、编译选项(compile option):在Modelsim的Workspace里选中需要查看代码覆盖率的文件,然后点击右键选择compile—>compile properties,如下图,之后选择“Coverage”选项,出现下图所示的窗口,根据需要选择选项,这里选statement、branch、condition、expression和toggle。
选完点ok。
2、编译(compile)点工具栏中的,编译所有的选中的文件,成功后进行下面的步骤。
3、仿真(simulate)点工具栏中的,出现下面的窗口:(注:不要选择“Enable optimization”)选择Others,出现如下图所示的窗口:选择“Enable code coverage”后点“ok”后出现下面的窗口:4、观察结果完成以上操作后,代码覆盖率的窗口就出现了,点击(run –all)之后代码覆盖率的情况就出现在各窗口中。
下面介绍各子窗口:(1)Workspace窗口在workspace窗口选择Files标签页并拖动滚动条到右侧,设计的每个文件显示了语句、分支、条件和表达式等语句的执行覆盖率汇总统计信息。
在workspace窗口选择Files标签页并拖动滚动条到右侧,本窗口将以设计中的每一条目来显示执行覆盖统计。
(2)Missed Coverage(未覆盖到对象列表窗)窗口本窗口用于显示所选择文件未被执行的语句、分支、条件、表达式或未翻转过的信号。
在workspace窗口的Files标签页中选择不同的文件,Missed Coverage窗口的显示会随着选择的文件而更新。
主要内容Modelsim介绍与应用
3、Modelsim 功能仿真(续)
Modelsim仿真的主要步骤: 执行一个仿真前先建立一个单独的文件夹,
将当前路径修改到该文件夹下,后面的操作都 在此文件夹下进行,以防止工程间的误操作。
1)建立库(有时可以映射库) 2)编译原代码(包括Testbench) 3)执行仿真
数据流跟踪
功能
观察设计中信号的物理连接 跟踪信号在设计中的传播 找到未知信号的来源
打开数据流观察窗口
法一:右键Workspace\sim中测试文件 Add ->Add to Dataflow
法二:双击信号波形 法三:命令 view dataflow
add dataflow clk
vlog -cover bcst verge_test.v vlog -cover bcst verge_test_tb.v vsim -coverage verge_test_tb
三个窗口
Missed Coverage 列出没有执行的代码 Instance Coverage 显示分析的统计结果 Details 显示未执行代码的详细信息
9 注意:Modelsim 只读写ASCII 码
2)灵活的调试模式
当编译失败,或者仿真出现异常结果时,我们 需要进行调试。
调试方法:
设置断点,单步运行源代码 观察代码覆盖率 数据流跟踪 用Profiler分析程序的性能
设置断点
右键Workspace\Sim中的测试文件,点击 Edit。
选择Design选项work库中的测试文件, 点击OK。 命令:vsim test_counter
systemverilog_coverage_merge规则
systemverilog coverage merge规则1. 引言1.1 概述在现代芯片设计中,通过使用覆盖率(coverage)来评估测试环境的有效性和完备性已经成为一种标准做法。
SystemVerilog作为一种硬件描述语言,在代码覆盖率的分析和验证过程中起到了关键作用。
而为了更好地评估测试环境的质量,我们需要使用合适的规则和方法来合并不同测试环境下产生的覆盖率数据。
本文将详细介绍SystemVerilog中coverage merge规则。
首先,我们将阐述什么是coverage merge以及它在验证工作中的重要性。
然后,我们将介绍基本的coverage merge规则,并提供一些注意事项以帮助读者避免常见的错误。
此外,我们还将探讨包括仿真环境下和验证环境下在内的各个实际应用场景中如何应用coverage merge策略。
1.2 文章结构本文共分为五个部分:引言、SystemVerilog Coverage Merge规则、Coverage Merge的应用场景、SystemVerilog中的Coverage工具支持与使用方法以及结论与展望。
每个部分都有对应子章节进行详细讲解,以便读者全面理解和掌握相关概念和方法。
1.3 目的本文的主要目的是通过对SystemVerilog coverage merge规则的介绍和应用场景的探讨,帮助读者深入理解如何使用合适的方法来合并不同测试环境下生成的覆盖率数据。
通过正确地应用coverage merge规则,可以更准确地评估测试环境的质量,并提高验证工作的效率和完整性。
此外,我们还将介绍常见的SystemVerilog coverage工具,并提供使用这些工具进行merge操作的步骤和示例代码,以帮助读者更好地掌握实际应用技巧。
在“2. SystemVerilog Coverage Merge规则”部分中,我们将从理解Coverage Merge概念开始,在此基础上介绍基本的Coverage Merge规则,并提供一些注意事项。
代码覆盖率说明(个人总结)
代码覆盖率说明(个⼈总结)代码覆盖率说明⼀、指令介绍代码覆盖率分为⾏覆盖率、条件覆盖率、状态机覆盖率和翻转覆盖率。
在vcs仿真⼯具下覆盖率信息存储在.cm⽂件中,使⽤urg⼯具解析、合并和⽣成报告;在ncsim仿真⼯具下覆盖率信息存储在icc.data⽂件中,使⽤iccr⼯具解析、合并和⽣成报告。
代码覆盖率指令主要包括编译、运⾏和⽣成覆盖率报告三个部分,指令结构⼤体同功能覆盖率。
为了⼯具的统⼀性和⽅便界⾯提取,先做如下规定:覆盖率数据库⽂件夹均放在CovData⽬录下,ncsim⽣成的放⼊ncsim⼦⽬录、vcs ⽣成的放⼊vcs⼦⽬录。
覆盖率报告均放在CovReport⽬录下,ncsim⽣成的放⼊ncsim⼦⽬录、vcs⽣成的放⼊vcs⼦⽬录。
每条⽤例都⽣成独⾃的同⽤例名的覆盖率数据库和覆盖率报告⽂件夹。
最后⽣成总的覆盖率数据库和覆盖率报告⽂件夹,名称为total。
⽂档指令描述中,{TC_NAME}表⽰匹配⽤例名。
1、vcs仿真环境1)样例rm -r simv* CovData/vcs/* FcovReport/vcs/* CovReport/vcs/*vcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_1.cm +define+marco=VCS+ test_1.sv./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_1.cm +ntb_random_seed=666666 2>&1 |tee log/vcs/test_1.logvcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_2.cm +define+marco=VCS+ test_2.sv./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_2.cm +ntb_random_seed=888888 2>&1 |tee log/vcs/test_2.logvcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_3.cm +define+marco=VCS+ test_3.sv./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_3.cm +ntb_random_seed=555555 2>&1 |tee log/vcs/test_3.logurg -dir CovData/vcs/test_1.vdb -metric group -report FcovReport/vcs/test_1 -format text urg -dir CovData/vcs/test_2.vdb -metric group -report FcovReport/vcs/test_2 -format text urg -dir CovData/vcs/test_3.vdb -metric group -reportFcovReport/vcs/test_3 -format text urg -dir CovData/vcs/*.vdb -metric group -report FcovReport/vcs/total -format texturg -dir CovData/vcs/test_1.cm -metric line+cond+fsm+tgl -report CovReport/vcs/test_1 -format texturg -dir CovData/vcs/test_2.cm -metric line+cond+fsm+tgl -report CovReport/vcs/test_2 -format texturg -dir CovData/vcs/test_3.cm -metric line+cond+fsm+tgl -report CovReport/vcs/test_3 -format texturg -dir CovData/vcs/*.cm -metric line+cond+fsm+tgl -report CovReport/vcs/total -formattext2)指令说明(1)编译-lca:增加LCA的⽀持,vcs0812及以后的版本需要,此前的版本不需要。
验证基础及modelsim使用方法
library ieee; library modelsim_lib; 将内部信号/top/uut/inst1/sig1的值 use ieee.std_logic_1164.all; 映射到顶层信号/top/top_sig1上 use modelsim_lib.util.all; 引用util library entity top is end; architecture only of top is 将映射信 signal top_sig1 : std_logic; 打开使能/ 息打印到 begin 关闭控制 ... 脚本命令 ,初始状 spy_process : process 窗口 态为使能 begin init_signal_spy("/top/uut/inst1/sig1","/top/top_sig1",1,1); wait; end process spy_process; ... spy_enable_disable : process(enable_sig) begin 使能信号映射 不打印使能信息 if (enable_sig = '1') then enable_signal_spy("/top/uut/inst1/sig1","/top/top_sig1",0); 不打印关闭信息 elseif (enable_sig = '0') 关闭信号映射 disable_signal_spy("/top/uut/inst1/sig1","/top/top_sig1",0); end if; end process spy_enable_disable; ... end;
例: vsim –novopt -L secureip my_design_lib.tb_top
modelsim覆盖率及merge
Modelsim 仿真工具是Model 公司开发的,它支持Verilog、VHDL 以及他们的混合仿真,它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow 窗口查看某一单元或模块的输入输出的连续变化等,比quartus 自带的仿真器功能强大的多,是目前业界最通用的仿真器之一。
在用ModelSim做硬件设计验证的时候,需要了解待测设计(DUT)的代码覆盖率(c ode coverage),这就需要用到ModelSim自带的Code Coverage功能,ModelSim 代码覆盖率功能Code coverage,能报告出statement(语句)、branch(分支)、c ondition(条件)、 expression(表达式)、toggle(信号反转)、fsm(有限状态机)等多种覆盖率情况,进一步提高了测试的完整性。
本文简要介绍ModelSim Code Cover age的使用方法,写的不对的地方希望有朋友留言指教。
步骤:1、编译选项(compile options):在ModelSim的Workspace里选中需要查看代码覆盖率的文件,使用Ctrl键选择多个文件,然后点击右键选择compile->compile prperties->coverage,选择前四项(s tatement,brances,condition,expression)。
2、编译(compile):对所选择的文件进行编译,可在命令行窗口敲compile -all,也可在编译菜单里选择compile all。
3、仿真(simulate ):在命令行窗口输入vsim -coverage work.top,然后run -all,仿真一段时间之后break。
4、观察结果(coverage result):选中View菜单,选择Code Coverage,然后打开Instance coverage和Missing coverage,就可以看到有两个coverage的窗口。
modelsim 中代码覆盖率使用详解
一、代码覆盖率Modelsim代码覆盖率功能Code coverage,能报告出statement(语句)、branch(分支)、condition(条件)、expression(表达)、toggle(信号翻转)、fsm(有限状态机)等多种覆盖率情况。
1、编译选项(compile option):在Modelsim的Workspace里选中需要查看代码覆盖率的文件,然后点击右键选择compile—>compile properties,如下图,之后选择“Coverage”选项,出现下图所示的窗口,根据需要选择选项,这里选statement、branch、condition、expression和toggle。
选完点ok。
2、编译(compile)点工具栏中的,编译所有的选中的文件,成功后进行下面的步骤。
3、仿真(simulate)点工具栏中的,出现下面的窗口:(注:不要选择“Enable optimization”)选择Others,出现如下图所示的窗口:选择“Enable code coverage”后点“ok”后出现下面的窗口:4、观察结果完成以上操作后,代码覆盖率的窗口就出现了,点击(run –all)之后代码覆盖率的情况就出现在各窗口中。
下面介绍各子窗口:(1)Workspace窗口在workspace窗口选择Files标签页并拖动滚动条到右侧,设计的每个文件显示了语句、分支、条件和表达式等语句的执行覆盖率汇总统计信息。
在workspace窗口选择Files标签页并拖动滚动条到右侧,本窗口将以设计中的每一条目来显示执行覆盖统计。
(2)Missed Coverage(未覆盖到对象列表窗)窗口本窗口用于显示所选择文件未被执行的语句、分支、条件、表达式或未翻转过的信号。
在workspace窗口的Files标签页中选择不同的文件,Missed Coverage窗口的显示会随着选择的文件而更新。
Modelsim覆盖率
Modelsim覆盖率步骤:pile选项 => compile options Covrage setting (或者可以点击选中文件,编辑properties,在coverage中选择要实现的覆盖选项)2.对所设计文件进行编译3.最关键的一步,仿真,选择simulate,选中文件,一定要在others选项中选择enable code coverage.4.OK ,总算看到我望眼欲穿的覆盖率了,英文原文;Enabling code coverage is a two-step process:1. Use the -cover argument to vcom or vlog when you compile your design. This a rgumenttells ModelSim which coverage statistics to collect. For example:vlog top.v proc.v cache.v -cover bcesxfEach character after the -cover argument identifies a type of coverage stati stic: "b"indicates branch, "c" indicates condition, "e" indicates expression, "s" ind icatesstatement, "t" indicates 2-transition toggle, "x" indicates extended 6-trans ition togglecoverage (t and x are mutually exclusive), and “f” indicates Finite State Machinecoverage. See Enabling Toggle Coverage for details on two other methods for enablingtoggle coverage.You can use graphic interface to perform the same task. Select Compile > Compile Options and select the Coverage tab. Alternatively, if you are using a project, rig ht-clickon a selected design object (or objects) and select Properties.2. Use the -coverage argument to vsim when you simulate your design. For exampvsim -coverage work.topOr, use the graphic interface. Select Simulate > Start Simulation and select the de signunit to be simulated in the Design tab. Then select the Others tab and check Enable codecoverage box as shown below.对R80515进行集体编译命令:do tools/mti/ee_macros/compile.doR80515 算法结构仿真覆盖结果如下图:PS:总算给我一点点的信心,发现自己还有那么一点点可救药的地方,呵呵终于搞定一个了覆盖率,这几天把我打击的都不行了,做什么什么不对,郁闷死了,自己哪怕是亲手做出一点点东西,也是满有成就感的嘛,呵呵,通过这件事有几点体会:1.一定要学会看user manual,虽然英文的,但是只要耐下心来看,收获肯定是很大的。
ModelSim10.1中代码覆盖率查看
3、查看代码覆盖率•代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。
•Modelsim代码覆盖率功能Code coverage,能报告出statement(语句)、branch(分支)、condition(条件)、expression(表达)、toggle(信号翻转)、fsm(有限状态机)等多种覆盖率情况。
Compile/CompileProperties...)覆盖率选项卡2、弹出ProjiectCompiler Settings选项卡,单击Coverage选项,如下图•3、选择如图,单击OK后,Compile All这4个都选上这3个只能选一个丆最好选上面二者之一丆否则后面无法加载波形图0/1或1/0翻转高阻变为0或1也被认为是下降沿丆在6.2之后的版本才有选择默认即可选择前两项•4、如图,切换到Library空间,右键如图所示,选择Simulate withCoverage,如下图为我在testbench中调用了系统函数$stop(),所以会自动停止仿真。
或者多单击几次Run,然后单击Break暂停仿真),如图•7、这时仿真界面会多出很多窗口,如右最大化图标图,有Instance、Files等窗口选项。
最大化Instance窗口,如下图覆盖率高显示绿色丆覆盖率低显示红色。
如果覆盖率低丆需要修改代码丆直到覆盖率满足要求为止。
出代码覆盖率报告•9、选择默认就可以了,单击OK,得到覆盖率报告TXT文件,如下图完成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、代码覆盖率
Modelsim代码覆盖率功能Code coverage,能报告出statement(语句)、branch(分支)、condition(条件)、expression(表达)、toggle(信号翻转)、fsm(有限状态机)等多种覆盖率情况。
1、编译选项(compile option):
在Modelsim的Workspace里选中需要查看代码覆盖率的文件,然后点击右键选择compile—>compile properties,如下图,
之后选择“Coverage”选项,出现下图所示的窗口,根据需要选择选项,这里选statement、branch、condition、expression和toggle。
选完点ok。
2、编译(compile)
点工具栏中的,编译所有的选中的文件,成功后进行下面的步骤。
3、仿真(simulate)
点工具栏中的,出现下面的窗口:
(注:不要选择“Enable optimization”)
选择Others,出现如下图所示的窗口:。