ModelSim10.1中代码覆盖率查看
- 格式:pdf
- 大小:2.78 MB
- 文档页数:12
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文件,对应不同的工作模式,而且参数的选值与各个文件的名字相关,方便进行选取和测试。
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文件,如下图完成。
代码覆盖率说明一、指令介绍代码覆盖率分为行覆盖率、条件覆盖率、状态机覆盖率和翻转覆盖率。
在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 texturg -dir CovData/vcs/test_2.vdb -metric group -report FcovReport/vcs/test_2 -format texturg -dir CovData/vcs/test_3.vdb -metric group -report FcovReport/vcs/test_3 -format texturg -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 -format text2)指令说明(1)编译-lca:增加LCA的支持,vcs0812及以后的版本需要,此前的版本不需要。
一、代码覆盖率
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,出现如下图所示的窗口:。
浅析vivado和ModelSim联合仿真信号处理摘要:本文基于对识别音抗干扰模块的功能仿真,来浅析基于信号处理类的FPGA设计的仿真过程。
通过MATLAB仿真产生激励数据文件,由vivado开发软件读取测试数据作为输入数据源,联合Modelsim产生相应的输出波形和文件进行分析,以此来判断FPGA程序是否满足设计需求。
关键词:功能仿真;信号处理类;Vivado;Modelsim;1 引言数字信号处理系统在很多领域中,都发挥着十分重要的作用,随着社会的不断发展,对于数字信号处理系统的功能设计要求也日益提升。
FPGA技术的发展,在数字信号处理系统设计中,能够发挥出良好的作用与效果,而功能仿真是FPGA 项目开发中重要一环,它是确保HDL设计代码在功能上准确无误的重要方法,对于FPGA设计效率和质量的提升,有着极大的积极作用。
本文以对识别音抗干扰模块的功能仿真做为应用背景,结合实际经验,探究了信号处理类的FPGA设计的仿真过程。
2 识别音抗干扰模块的功能仿真2.1 识别音抗干扰模块功能简介仪表着陆功能不仅具备引导着陆功能,还可以通过识别音信号告知飞行员飞临的机场编码。
识别音信号是用1020Hz±50Hz单音幅度调制到航向射频载波上产生,调制度在5%至15%限度之间。
识别音发送采用国际莫尔斯电码形式,因此1020Hz±50Hz单音为键控调制。
飞机在进场着陆时(射频信号强度在-101dBm左右),作用距离较远处,本身射频载波信号幅度很小,空间存在干扰信号,加之识别音信号调制度浅,键控调制的识别音信号很难区分。
很有可能会出现识别音信号解析错误的情况。
针对上述问题,提出改进方法以提高识别音功能抗干扰能力。
此处的识别音抗干扰模块代码为mores_process.vhd。
2.2 在Vivado中和ModelSim进行联合仿真Modelsim是优秀的HDL仿真软件之一,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。
代码覆盖率说明一、指令介绍代码覆盖率分为行覆盖率、条件覆盖率、状态机覆盖率和翻转覆盖率。
在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及以后的版本需要,此前的版本不需要。
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与debussy在FPGA仿真和debug中的应⽤仿真是FPGA设计中的⼀个⾮常重要的环节,但很多朋友在做FPGA设计的过程中,却并没有意识到仿真的作⽤,也没有⼀个好的仿真流程来保证仿真验证的效果。
我们做仿真的⽬的是要通过仿真找到设计中潜在的问题并解决之,这就需要⼀个debug 的过程。
在这篇⽂章中,会讨论⼀下我对FPGA设计中仿真验证和debug的看法,也介绍⼀下modelsim+Debussy在仿真和debug中的应⽤流程。
记得在学校的时候,搭硬件系统要⽤到FPGA。
那时候没有任何FPGA设计的经验,也没有好的设计流程可以参考。
在做设计的时候,基本上是很随意的去写代码,很少顾及到甚⾄很基本的设计原则。
代码写好后,尽管有验证代码正确性的意识,但并没有成熟可靠的⽅法可以使⽤,基本上就是画⼀些简单的波形作为激励信号,通过开发软件⾃带的仿真⼯具,⼤概看⼀下输出的波形是不是正确。
这样做存在很多问题。
⾸先测试覆盖率⾮常的低,激励信号不可能做的很复杂,不可能涵盖所有需要验证的设计环节;再者就是要看被测设计的输出波形来检验设计是否正确,这样就需要⼤量的时间,效率很低。
在发现设计有问题的时候,检查设计代码,也⽤很原始的⼿段,⼀⾏⼀⾏的去查看,没有意识到或者说根本就不知道有⼯具软件可以来做trace。
更通常的验证⽅法就是在FPGA程序写好以后,综合出来,烧录到实际的系统中,在系统上直接验证。
但这种做法,效率低下且有问题的话,很难debug。
另外⽐较糟糕的是很难发现⼀些⽐较特殊的问题。
后来在公司的时候,做IC设计,公司有⽐较成熟和完善的设计流程。
主要⽤NC来做仿真,⽤debussy来做debug。
成熟和完善的设计流程带来的就是⽐较⾼的仿真的效率和⽐较⾼的覆盖率,我们在debug的时候,基于⽐较好的流程和⽅法,效率也⽐较⾼。
数年⼯作下来,让我建⽴起了⼀个基本的仿真验证的概念,这个时候,再回头看当初做FPGA设计的时候所遇到的问题,感触颇深。
ModeSim教程ModeSim○R SE教程版本: 6.1f发⾏:2009-031.本⽂源于Mentor Graphics ModeSim SE Tutorial,版权归Mentor公司所有。
2.本⽂仅供个⼈学习,严禁⽤于商业。
3.未尽事宜,请与Mentor公司磋商。
⽬录........................................................................................................................................ 1 ModeSim ○R SE 教程 .......................................................................................... 1 ⽬录 (2)第1课:ModelSim 仿真的基本概念 (3)1.1主要内容 (3)1.2 ModelSim 基本仿真(Basic Simulation )的流程 (3)1.3 ⽤⼯程(Project )进⾏仿真的流程 (3)1.4 多个库⽂件的仿真流程 (4)1.5 Debug ⼯具 (4)第2课:基本仿真 (5)2.1 主要内容 (5)2.2 简介 (5)2.3 创建⼯作库 (5)2.4 编译设计⽂件 (7)2.5 载⼊设计到仿真器中 (7)2.6 进⾏仿真 (9)2.7 设置断点并在源⽂件窗⼝单步运⾏ (10)2.8 ModelSim 界⾯导航 (13)2.9 本课⼩结 (14)第3课⽤⼯程进⾏仿真 (15)3.1 主要内容 (15)3.2 简介 (15)3.3 创建新⼯程 (15)3.4 编译并载⼊设计到仿真器 (17)3.5 利⽤⽂件夹组织⼯程 (17)3.6 仿真配置 (20)3.7 本课⼩结 (22)第1课:ModelSim仿真的基本概念1.1主要内容1.基本仿真流程;2.⼯程仿真流程;3.多个库⽂件仿真流程;4.调试⼯具。
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代码覆盖率功能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窗口的显示会随着选择的文件而更新。
第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使用流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!ModelSim 使用流程。
1. 项目设置。
启动 ModelSim 软件并新建一个项目。
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代码覆盖率功能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覆盖率步骤: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,虽然英文的,但是只要耐下心来看,收获肯定是很大的。
3、查看代码覆盖率
•代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。
•Modelsim代码覆盖率功能Code coverage,能报告出statement(语句)、branch(分支)、condition(条件)、expression(表达)、toggle(信号翻转)、fsm(有限状态机)等多种覆盖率情况。
Compile/Compile
Properties...)
覆盖率选项卡2、弹出Projiect
Compiler Settings选
项卡,单击
Coverage选项,如
下图
•3、选择如图,单击OK
后,Compile All
这4个都选上
这3个只能选一个丆
选上面二者之一丆
否则无法查看翻转
覆盖率0/1或1/0翻转高阻变为0或1也被认为是下
降沿丆在6.2之
后的版本才有
选择默认即可
选择前两项
•4、如图,切换到Library空间,右键如图所示,选择Simulate with
Coverage,如下图
为我在testbench中
调用了系统函数
$stop(),所以会自
动停止仿真。
或者
多单击几次Run,
然后单击Break暂
停仿真),如图
•7、这时仿真界面会
多出很多窗口,如右
最大化图标图,有Instance、Files
等窗口选项。
最大化
Instance窗口,如下图
覆盖率高显示绿色丆覆盖率低显示红色。
如果覆盖率低丆需要修改代码丆直到覆盖率满足要求为止。
出代码覆盖率报告
•9、选择默认就可以了,单击OK,得到覆盖率报告TXT文件,如下
图
完成。