【转】Modelsim覆盖率检测
Modelsim 仿真工具是Model 公司开发的,它支持Verilog、VHDL 以及他们的混合仿真,它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow 窗口查看某一单元或模块的输入输出的连续变化等,比quartus 自带的仿真器功能强大的多,是目前业界最通用的仿真器之一。
在用ModelSim做硬件设计验证的时候,需要了解待测设计(DUT)的代码覆盖率(code coverage),这就需要用到ModelSim自带的Code Coverage功能,ModelSim代码覆盖率功能Code coverage,能报告出statement(语句) 、branch(分支)、condition(条件)、 expression(表达式)、toggle(信号反转)、fsm(有限状态机)等多种覆盖率情况,进一步提高了测试的完整性。本文简要介绍ModelSim Code Coverage的使用方法,写的不对的地方希望有朋友留言指教。
步骤:
1、编译选项(compile options):
在ModelSim的Workspace里选中需要查看代码覆盖率的文件,使用Ctrl键选择多个文件,然后点击右键选择compile->compile prperties->coverage,选择前四项(statement,brances,condition,expression)。
2、编译(compile):
对所选择的文件进行编译,可在命令行窗口敲compile -all,也可在编译菜单里选择compile all。
3、仿真(simulate ):
在命令行窗口输入vsim -coverage work.top,然后run -all,仿真一段时间之后break。
或者simulate时候添加选项如下图:enable code coverage
4、观察结果(coverage result):
选中View菜单,选择Code Coverage,然后打开Instance coverage和Missing coverage,就可以看到有两个coverage的窗口。其中,Instance coverage是对每个模块的语句覆盖率进行统计的结果,Missing coverage则显示了每个模块未覆盖部分的情况。
其中,每个统计项都有自己的含义,可根据英文意思理解,比如Stmt hits代表被执行的语句条数,这里主要看四个统计项:
Stmt,Brances,Condition和Expression的%覆盖率,覆盖率高于90%显示为绿色,低于90%则显示为红色。另外,在Instance coverage窗口中选中某个模块之后,会在ModelSim的代码编辑窗口中很方便地了解这个模块的代码执行情况,其中Hits表示这一行的语句被执行,BC表示到达这一条分支。
在Workspace中选择Files,在Files中选择需要查看的模块,打开Missing Coverage窗口即可查看。可以查看的选项包括:Statment,Branches,Expreession,Condition,Troggle,分别描述了这个模块里未执行的语句、分支、表达式等等,按行大小序号排列。