modelsim实验教程.docx

上传人:b****2 文档编号:1686997 上传时间:2022-10-23 格式:DOCX 页数:19 大小:1.53MB
下载 相关 举报
modelsim实验教程.docx_第1页
第1页 / 共19页
modelsim实验教程.docx_第2页
第2页 / 共19页
modelsim实验教程.docx_第3页
第3页 / 共19页
modelsim实验教程.docx_第4页
第4页 / 共19页
modelsim实验教程.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

modelsim实验教程.docx

《modelsim实验教程.docx》由会员分享,可在线阅读,更多相关《modelsim实验教程.docx(19页珍藏版)》请在冰豆网上搜索。

modelsim实验教程.docx

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:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1