modelsim实验教程.docx
《modelsim实验教程.docx》由会员分享,可在线阅读,更多相关《modelsim实验教程.docx(19页珍藏版)》请在冰豆网上搜索。
![modelsim实验教程.docx](https://file1.bdocx.com/fileroot1/2022-10/21/54285e2d-1b18-4f31-a9ce-ffd15cf95d8c/54285e2d-1b18-4f31-a9ce-ffd15cf95d8c1.gif)
modelsim实验教程
实验一
1.实验目的
通过实验掌握如何用modelsim进行功能仿真以及时序仿真。
2.实验内容
(1)编译代码,进行功能仿真。
(2)用modelsim进行代码覆盖率检查及分析,并输出覆盖率报告。
(3)用modelsim将DC综合出来的门级网表以及时序文件进行后仿真。
(4)用do文件自动完成仿真步骤,即脚本自动化。
3.实验步骤
(1)功能仿真
前仿真主旨在于验证电路功能是否符合设计要求,它不考虑门延迟与线路延迟,旨在验证电路功能是否正确。
第一步:
打开modelsim软件并建立工程
登陆工作站后,进入命令界面,输入命令vsim,按回车键,打开modelsim软件,如下图所示
选择File选项,点击File-->new-->project,如下图所示:
然后弹出如下界面,需要给所建立的工程起名,为了方便管理,工程名可以与顶层模块名字相一致。
ProjectLocation一栏表示的是工程所在目录,work代表工作库,里面包含所有编译过的文件。
输入工程名,并确定了工程所在位置后,点OK。
第二步:
加入源文件并编译
建立好工程后,会弹出下图所示窗口,可以选择CreateNewFile来在modelsim中直接编辑代码文件,也可以选择AddExistingFile加入已有的源文件。
也可以通过选择File-->new-->source来编辑源文件,如下图所示:
加入源文件后,可以鼠标选择源文件,点击右键Compile-->CompileSelected来编译源文件。
也可以点击直接编译源文件。
选择,可以编译工程里面所有的源文件。
在Transcript窗口中可以查看编译结果。
如果有错误,可以双击错误提示,改正错误,再编译。
第三步:
仿真源文件
编译成功证明源代码没有语法错误,启动仿真器对源文件进行仿真。
选择Simulate-->StartSimulation或者点击按钮,会弹出一个选择框,将EnableOptimization选项勾掉,这是仿真优化选项,会对时钟等进行优化,在功能仿真阶段不需要优化时钟,在后续布局布线中会对其进行优化。
同时要选择仿真的测试文件在work工作库下,选择测试文件,点击OK。
选择后的选择框如下图所示:
在弹出的instance窗口中,选择测试文件点击右键,选择Add-->ToWave-->Allitemsinregion将信号加到波形图中:
加入信号后,点击按钮进行仿真,点击按钮可以停止仿真,查看波形图。
(2)代码覆盖率仿真
Modelsim代码覆盖率功能Codecoverage,能报告出statement(语句)、branch(分支)、condition(条件)、expression(表达)、toggle(信号翻转)、fsm(有限状态机)等多种覆盖率情况。
第一步:
编译选项
在Modelsim的Workspace里选中需要查看代码覆盖率的文件,然后点击右键选择compile—>compileproperties,如下图
之后选择“Coverage”选项,出现下图所示的窗口,根据需要选择选项,这里选statement、branch、condition、expression和toggle。
选完点ok。
第二步:
编译
点工具栏中的,编译所有的选中的文件,成功后进行下面的步骤。
第三步:
仿真
点工具栏中的,出现下面的窗口:
(注:
不要选择“Enableoptimization”)
选择Others,出现如下图所示的窗口:
选择“Enablecodecoverage”后点“ok”后出现下面的窗口:
然后就可以观察结果。
(3)后仿真
后仿真是将综合出的网表文件进行仿真,检查其时序是否符合要求。
第一步:
加入文件并反标函数。
首先将综合所映射的库文件(工作站的库文件目录为/tools/lib/smic13/SMIC0.13um/FEView_STDIO/Version1.0/STD/Verilog/)smic13.v拷贝到工程所在的目录下。
然后将综合出来的网表文件(一般是.v文件)以及延时文件(.sdf)文件也拷贝进来。
将测试文件也拷贝进来,并将这几个文件加入工程。
在测试文件中加上如下函数
initial
begin
$sdf_annotate("路径\延时文件名.sdf",实例名);
end
该函数的作用是把延时文件反标到综合网表中。
第二步编译
将网表文件、库文件、延时文件以及测试文件全部编译。
编译步骤与前仿真相同。
第三步仿真
编译通过后,启动仿真器,步骤与前仿真相同。
就可以看到带延时的仿真结果了。
(4)脚本自动化
DO文件是一种脚本文件,可以一次执行多条命令。
执行do文件可以一次完成多条仿真步骤,包括编译,加信号,仿真等。
下面是一个能完成简单仿真的do文件的实例:
#compilethefiles("vlog":
forverilog,"vcom":
forVHDL)
vlogdrink_machine.vtest_drink_machine.v
#Loadsimulation
vsimwork.test_drink_machine
#vsim-novoptwork.test_drink_machine
#-novopt:
don'tselect"Enableoptimmization".
#####################
#addwave
addwave-coloryellowsim:
/test_drink_machine/clk
addwavesim:
/test_drink_machine/rst_n
addwave-radixbinarysim:
/test_drink_machine/nickel_in
addwave-formatLiteralsim:
/test_drink_machine/dime_in
addwavesim:
/test_drink_machine/quarter_in
addwavesim:
/test_drink_machine/collect
addwavesim:
/test_drink_machine/dispense
addwavesim:
/test_drink_machine/nickel_out
addwavesim:
/test_drink_machine/dime_out
#-color:
setthewave'scolor
#-format:
setthewave'sformat,ithasthreeoption:
#"Logic","Literal"and"Event",ifyouhavenot
#setit,theformatis"Logic".
#-radix:
setthesignal'sradixnotation.
############################
#Runsimulation
run-all
执行步骤:
首先将写好的.do文件加入到工程中,然后在modelsim的命令界面中输入命令:
do文件名.do,如下图所示
然后modelsim会自动执行编译仿真等操作。
3.实验结果
(1)功能仿真实验结果观察
可以通过点击按钮将波形图解锁出来,到全屏状态
也可以点击菜单栏的按钮和,将波形放大或者缩小
(2)代码覆盖率结果观察
下面介绍反映代码覆盖率情况的各个窗口。
Workspace窗口
在workspace窗口选择Files标签页并拖动滚动条到右侧,设计的每个文件显示了语句、分支、条件和表达式等语句的执行覆盖率汇总统计信息。
在workspace窗口选择Files标签页并拖动滚动条到右侧,本窗口将以设计中的每一条目来显示执行覆盖统计。
MissedCoverage(未覆盖到对象列表窗)窗口
本窗口用于显示所选择文件未被执行的语句、分支、条件、表达式或未翻转过的信号。
在workspace窗口的Files标签页中选择不同的文件,MissedCoverage窗口的显示会随着选择的文件而更新。
下图为分支覆盖的情况:
下图为statementcoverage(语句覆盖率)的情况。
此时选择任何一个实体在源代码窗口中显示相应的行,设计如果包含为被执行的语句或分支的行,则被粉红色高亮显示,如下图。
图中包含了Hits和BC栏用来显示语句执行(statementHits)和分支覆盖(BC)的情况。
如下图所示,在主窗口菜单栏选择Tool—>CodeCoverage—>Showcoveragenumbe。
.
Hits和BC栏中的每一行图标将会被数字代替,这些数字代表了该语句或分支被执行的次数。
下表描述了个图标的含义:
图标
描述
表示本语句已被执行过
表示本行的某语句从未被执行过
或
表示条件语句的“真”或“假”分支未被执行过
表示本行被指示不做代码覆盖统计
CurrentExclusion(当前不做覆盖率统计列表窗)
本窗口用于列出所指定的不进行覆盖统计的所有文件和行。
1设置排出文件
如图,右击所选中的项,按图所示操作,
操作完后,在CurrentExclusion窗口就会出现被排除的文件,同时源代码窗口的Hits栏的一些行会出现,表明这些行不做代码覆盖统计。
在CurrentExclusion窗口中右击需要取消排除设置的文件,选择CancelSelectedExclusions,恢复成原状,可以做代码覆盖率。
2设置排出行
如图,在源代码窗口右击Hits栏中需要排除行的图标,图中为105行,选择第一个选项。
之后,在CurrentExclusion窗口会显示出被排除的行信息,同时在源代码窗口,被排除行的Hits栏会出现,表明该行不做代码覆盖统计。
取消排除行操作同上。
Details(详细资料窗)窗口:
本窗口显示了如真值表或翻转细节等详细的未被覆盖到的情况。
当在MissedCoverage窗口中选择一行,可以在Details窗口中查看相应的详细信息,如下图:
InstanceCoverage(实例覆盖列表窗)
本窗口显示了每个实例的覆盖统计。
ObjectsWindow(信号窗口)
在该窗口中可以查看状态翻转统计,翻转覆盖统计了信号从一个状态变换到另一个状态的次数。
具体操作入下图所示:
上述操作完之后出现Objects窗口,这样就可以查看每个信号翻转的具体情况。
4.实验结论
(1)查看波形图
方法及步骤在实验步骤里面有详细描述。
(2)创建代码覆盖率报告
如下图所示,在主窗口菜单栏选择Tool—>CodeCoverage—>Reports
出现下图所示的子窗口(报告设置窗口),根据需求设置各选项和报告存放路径。
点ok后即可查看CodeCoverageReport: