实验五 Modelsim仿真 教案.docx

上传人:b****7 文档编号:9034064 上传时间:2023-02-02 格式:DOCX 页数:17 大小:469.63KB
下载 相关 举报
实验五 Modelsim仿真 教案.docx_第1页
第1页 / 共17页
实验五 Modelsim仿真 教案.docx_第2页
第2页 / 共17页
实验五 Modelsim仿真 教案.docx_第3页
第3页 / 共17页
实验五 Modelsim仿真 教案.docx_第4页
第4页 / 共17页
实验五 Modelsim仿真 教案.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

实验五 Modelsim仿真 教案.docx

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

实验五 Modelsim仿真 教案.docx

实验五Modelsim仿真教案

实验五ﻩModelSim仿真

【实验内容】

1.仔细阅读ModelSim软件简要使用说明(下文)。

(“实例代码”压缩包用于ModelSim软件学习用)

2.Testbench写法简要介绍。

(可以参考“Testbench模版”)

3.用ModelSim完成10位全加器得功能仿真。

ModelSim软件简要使用说明

ModelSim就是对VHDL,Verilog,SystemC以及混合语言编写得设计文件进行仿真与调试得工具软件。

1.仿真流程

在ModelSim中对一个设计进行仿真得基本步骤如下图所示:

2.仿真具体步骤

Createa newproject

选择“File> New>Project”,会弹出对话框,如图所示:

其中:

“ProjectName”项:

填写要创建得工程得名字。

“ProjectLocation”项:

确定创建得工程所要存放得位置。

请在E盘下建文件夹!

“DefaultLibrary Name”项:

填写工程得工作库得名字。

注:

在用ModelSim进行仿真之前,必须要对设计文件进行编译,生成与设计文件逻辑功能相对应得设计单元。

由于ModelSim就是用库文件来进行仿真得,所以编译后得设计单元需要存放在库文件里。

这个库文件叫作“工作库”。

926

以上三项填写完毕后,点击“OK”按钮,会在指定得位置处创建工程及工作库,如图所示:

在工作库文件夹内,有一个名为“_info”得特殊格式文件,如图所示:

这个文件指定了此文件夹为ModelSim得工作库文件夹。

在编译步骤内生成得所有设计单元都会被添加到工作库文件夹内。

Addingobjects to theproject

在上一步点击OK后,ModelSim会弹出一个对话框,如图所示:

其中:

“CreateNewFile”项:

在工程中创建新得设计文件。

“AddExisting File”项:

把已经存在得设计文件加入到工程中。

“CreateSimulation”项:

在工程中创建仿真配置文件。

“CreateNewFolder”项:

在工程中创建新得文件夹。

(1)创建文件夹。

(此步骤也可以不要,不过推荐采用此步骤,便于文件管理)

选择“CreateNewFolder”项,在弹出得对话框中输入要创建得文件夹得名字,如图所示:

点击“OK”按钮,会在“Workspace”列表里显示出新创建得文件夹。

如图所示:

(2)将设计文件加入到文件夹内。

选择“AddExisting File”项,会弹出对话框,如图所示:

其中:

“”项:

指定设计文件所在位置。

“Referencefromlocation”项:

表示只将设计文件与工程关联起来。

“Copy toprojectdirectory”项:

表示将设计文件复制一份到工程目录下。

存放得具体位置由“Folder”项指定。

指定设计文件得具体位置后,选择“Copyto projectdirectory”项,并通过“Folder”项,将存放位置改成“HDL”,如图所示:

点击“OK”按钮,会在工程文件夹内多出两个设计文件,如图所示:

这两个设计文件就就是从指定得路径下将源文件复制过来得。

点击“OK”按钮后,会在“Workspace”列表得“HDL”文件夹里新加入两个设计文件。

如图所示:

pilingyourdesign

将设计文件加入到工程中以后,就可以编译设计文件了,编译器会将编译生成得设计单元添加进您所创建得工作库中。

编译得步骤如下:

(1)编译设计文件。

在“Workspace”列表得“Project”栏内,点击右键,在弹出得列表中选择“pile> pileAll”,如图所示:

如果设计文件编译无误,每个设计文件后面得“Status”栏会有绿色得对勾,否则会有红色得错叉出现。

当有错叉出现时,需要根据ModelSim得“Transcript”栏内得提示信息修改设计文件,并重新编译,直到编译通过为止。

编译通过后,由设计文件编译成得设计单元会被加入到工作库中,如图所示:

(2)查瞧编译后得设计单元。

点击“Workspace”列表里得“Library”栏,展开“WorkLIB”库,会瞧到编译后加入到库中得设计单元。

如图所示:

Loadingthedesignintothe simulator

编译后生成得设计单元需要加入到仿真器中才能进行仿真。

由于测试文件(testbench)例化了要仿真得模块,所以只需要将测试文件生成得设计单元加载到仿真器中。

双击“Workspace”列表内工作库下测试文件生成得设计单元,就可以将其加载到仿真器中。

也可以选择“Simulate >StartSimulation”,会弹出一个对话框,展开“WorkLIB”工作库,选中测试文件生成得设计单元,如图所示:

点击“OK”按钮即可将测试文件生成得设计单元加载到仿真器中。

设计单元成功加载到仿真器后,ModelSim会自动弹出仿真器,并将“Workspace”列表切换成“sim”栏,如图所示:

Runningthe simulation

运行仿真器进行仿真得步骤如下:

(1)将信号加入到波形窗口中。

在“Workspace”列表内,选择“sim”栏。

右键点击测试文件生成得设计单元,在弹出得列表里选择“Add > AddtoWave”,如图所示:

加入信号后得波形窗口如图所示:

也可以在“Objects”列表里选择感兴趣得信号加入到波形窗口里。

方法就是选中信号,右键单击此信号,在弹出得列表里选择“AddtoWave”,会弹出三个选项,如图所示:

其中:

“SelectedSignals”项:

表示加入到波形窗口中得信号就是被选中得信号,即图中“Objects”列表里得“count”信号。

“SignalsinRegion”项:

表示加入到波形窗口中得信号就是“Objects”列表里得所有信号,即图中“Objects”列表里得“clk”、“reset”与“count”信号。

“SignalsinDesign”项:

表示加入到波形窗口中得信号就是测试文件生成得设计单元里得所有信号,即图中“Workspace”列表里得“test_counter”下面展开得所有设计单元得信号。

其中“Signals inDesign”得效果与上一种方法效果就是一样得。

(2)运行仿真器,开始仿真。

点击“run”按钮,就可以进行仿真了,如图所示:

需要注意得就是,“run”按钮每次只能仿真100ns,如果要一直仿真下去得话,点击“run all”按钮可以实现。

如图所示:

如果要停止仿真,可以按“break”按钮,如图所示:

如果要重新仿真,可以按“restart”按钮,如图所示:

Debuggingyourresults

对仿真波形进行分析,确定逻辑就是否正确。

如果没有得到您要得仿真结果,则需要修改设计文件,并重新编译,加载到仿真器中进行仿真。

注:

ModelSim得编译器在对设计文件进行编译时,并不会对设计文件进行综合,即将设计文件与硬件对应,这点从上面得仿真步骤也可以瞧出,仿真步骤中并没有选择器件型号得步骤。

因此编译时生成得设计单元并没有包含硬件信息,即不会存在器件延时,所以只用ModelSim作得仿真就是一种功能仿真,有时也称为“前仿真”。

如果想用ModelSim作仿真时加入器件得延时信息,模拟硬件来仿真,则需要Quartus得配合才能完成。

加入器件延时信息得仿真称为“后仿真”,仿真结果接近真实器件得运行结果。

关于ModelSim作“后仿真”,有兴趣得读者可查阅相关资料自学,我们这里只介绍“前仿真”。

Testbench写法简要介绍

描述测试信号得变化与测试过程得模块叫做测试平台(Testbench),它可以对电路模块进行动态得测试。

通过观测被测试模块得输出信号就是否符合要求,可以调试与验证逻辑系统得设计与结构就是否正确,便于发现问题并修改。

Testbench用于测试模块得示意图如图所示:

由示意图可知,Testbench要对被测模块进行测试,需要产生被测模块所需得激励信号(比如时钟信号,复位信号等),这个就像我们用Quartus波形仿真时拖波形一样,只就是Testbench里需要我们用代码来实现波形得变化。

产生得激励信号需要与被测模块对口(比如产生得时钟信号要送入时钟输入口,产生得复位信号要送入复位输入口等),如何实现对口,这就需要对被测试模块得例化来实现。

例化得写法如下:

被测模块名ﻩ 例化进Testbench后得模块名

.被测模块输入口ﻩTestbench产生得激励信号,

.被测模块输出口ﻩﻩTestbench里用来显示输出得信号

);

上面得示意图对应得例化写法为:

被测模块名ﻩﻩﻩﻩ例化进Testbench后得模块名

ﻩ、Input_1ﻩﻩﻩ(In_1),

ﻩﻩ、Input_2(In_2),

ﻩ、Input_3ﻩﻩﻩ(In_3),

ﻩ、Output_1ﻩﻩ(Out_1),

ﻩ、Output_2ﻩﻩ(Out_2),

ﻩ、Output_3ﻩﻩﻩﻩ(Out_3)

);

更具体得写法请参考Testbench模版。

10位全加器得功能仿真

实验要求

【输入端口】ﻩﻩ【输出端口】

clk,// 模块时钟ﻩﻩdout[9:

0],//与数

rst,ﻩ// 模块复位ﻩﻩcoutﻩ//高位进位

din_1[9:

0],// 加数1

din_2[9:

0],ﻩ//加数2

cinﻩ// 低位进位

以抓图得方式给出仿真波形图,并对结果作适当分析。

补充说明

`timescale10ns/1ns

时钟clk得产生写法:

Initial

Clk=0;

always#50 clk=~clk;ﻩ//表示从仿真开始算起,每隔50个时间单位,将clk翻转一次

复位rst得产生写法:

Initialﻩﻩ//下面得写法使rst=1持续得时间为120个时间单位

ﻩbegin

ﻩ#0rst=1'b0;ﻩ//仿真开始时,rst置0

ﻩ#5ﻩrst=1'b1;// 仿真开始后5个时间单位时,rst置1

ﻩﻩ#125ﻩrst=1'b0;// 仿真开始后125个时间单位时,rst置0

ﻩend

加数得产生写法:

always(negedgeclk)//时钟下降沿将加数改变

ﻩﻩbegin

din_1<=$random%1024;//随机数除以1024后取余数给加数,加数在[0,1023]

//之间。

din_2<= $random%1024;//$random调用了一个能产生随机数得系统任务。

ﻩ cin<=$random%2;

ﻩend

仿真时间得写法:

initial#5000$stop;ﻩ//$stop调用了一个使仿真器停止仿真得系统任务。

仿真时间为

  //2000个时间单位。

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

当前位置:首页 > 高中教育 > 数学

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

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