FPGA通信设计基础第四章ModelSim使用课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《FPGA通信设计基础第四章ModelSim使用课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 通信 设计 基础 第四 ModelSim 使用 课件
- 资源描述:
-
1、第第4 4章章ModelSimModelSim使用使用本章内容可参考本章内容可参考Verilog HDL Verilog HDL 数字设计与综合(第二版)数字设计与综合(第二版)4.1 ModelSim4.1 ModelSim简介简介 Modelsim仿真工具是Model公司开发的。它支持Verilog、VHDL以及他们的混合仿真,它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程序执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow窗口查看某一单元或模块的输入输出的连续变化等,比Quartus自带的仿真器功能强大的多,是目前业界最通用的仿真器之
2、一。HDL代码TestBench逻辑模拟修改修改HDL代码代码综合 Modelsim是专业的HDL语言仿真器,比Quartus自带的仿真器功能强大的多,能支持Testbench仿真。而Quartus simulator不支持Testbench,只支持波形文件.vwf仿真。对于ModelSim初学者来说,modelsim软件自带的教程是一个很好的选择,在Help-SE PDF Documentation-Tutorial里面。它从简单到复杂、从低级到高级详细地讲述了modelsim的各项功能的使用,简单易懂。4.2 ModelSim4.2 ModelSim运行模式运行模式 ModelsimMod
3、elsim运行方式有运行方式有4 4种种:用户图形界面模式交互式命令行模式 不显示modelsim的可视化界面,仅通过命令控制台输入的命令完成所有工作。Tcl和宏模式 编写可执行扩展名为do或者tcl语法文件批处理模式 其所有操作都在后台进行,用户看不到modelsim的界面,也不需要交互式输入命令。当工程很大,文件比较多时,用批处理比较方便。直接运行批处理文件,在后台调用modelsim,执行modelsim的脚本文件*.do,完成操作。功能仿真功能仿真(前仿真前仿真,代码仿真代码仿真)主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致
4、。可综合FPGA代码是用RTL级代码语言描述的,其输入为RTL级代码与Testbench.在设计的最初阶段发现问题,可节省大量的精力。4.3 ModelSim仿真仿真门级仿真和时序列仿真门级仿真和时序列仿真(后仿真后仿真)使用综合软件综合后生成的门级网表进行仿真,不加入时延文件的仿真就是门级仿真.可以检验综合后的功能是否满足功能要求,其速度比功能仿真要慢,比时序仿真要快.在门级仿真的基础上加入时延文件(.sdf)的仿真就是时序仿真,比较真实地反映了逻辑的时延与功能.综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,是否存在时序违规。功能仿真需要的文件功能仿真
5、需要的文件1设计HDL源代码:可以使VHDL语言或Verilog语言。2测试激励代码:根据设计要求输入/输出的激励程序3仿真模型/库:根据设计内调用的器件供应商提供的模块而定,如:FIFO、ADD_SUB等 4.4 ModelSim仿真工作模式仿真工作模式 仿真步骤:以4 位计数器为例给出详细步骤1.启动modelsim软件先在c盘建立文件夹count4,在modelsim中选择File-Change Directory,在弹出的Choose folder对话框中设置目录路径为c:/count42.建立工程在modelsim中建立project,选择File-New-Project.在Proj
6、ect Name栏中填写你的项目名字,建议和你的顶层文件名字一致。Project Location是你的工作目录,你可通过Brose按钮来选择或改变。Ddfault Library Name可以采用工具默认的work。Workspace窗口的library中就会出现work库.3.为工程添加文件 工程建立后,选择Add Exsiting File后,根据相应提示将文件加到该Project中。这里是count4.v和其测试向量count_tp.v,源代码如下:12134.编译文件编译(包括源代码和库文件的编译)。编译可点击ComlileComlile All来完成。5.装载文件(1)双击libr
7、ay 中work中的count_tp装载(2)点击simulate start simulation按右图设置,点击ok146.开始仿真点击workspace下的sim,点击count_tp,选择add add to wave然后点run all,开始仿真157.退出仿真在仿真调试完成后退出仿真,在主窗口中选择simulateend simulation16补充补充:加testbench,仿真步骤跟前面相似,装载文件时双击count4在sim中点击count4,add add to wave对输入信号clk,reset编辑测试波形17点击run-all18(2)在modelsim内直接编写Te
8、stbenchModelsim提供了很多Testbench模板,可直接拿过来用可以减少工作量。点View-Source-Show Language Templates然后会出现一个加载工程,接着你会发现在刚才的文档编辑窗口左边出现了一个Language Templates窗口 展开Verilog项,双击Creat Testbench会出现一个创建向导选择Specify Design Unit工作库下的目标文件,点Next可以指定Testbench的名称以及要编译到的库等,此处我们使用默认设置直接点Finish。这时在Testbench内会出现对目标文件的各个端口的定义还有调用函数,以自己Tes
9、tbench内添加内容,然后保存为.v格式即可。按照前面的方法把Testbench文件也编译到工作库中。4.5 Verilog Testbench4.5 Verilog Testbench编写编写 Verilog Testbench是一种按照verilog来编写的HDL模型,只不过大量使用不可综合风格的仿真语句,比如延迟、赋值等等,通过使用testbench来验证行为级Verilog HDL模型是否正确。testbench三个目的:1.产生激励2.将激励加入被测模块(Unit under Test)并收集响应3.响应与期望比较设计组织设计组织虚线表示编译时检测输入文件是否存在及可读并允许生成输
10、出文件。简单的简单的test benchtest bench向要验证的设计提供向量,人工验证输出。向要验证的设计提供向量,人工验证输出。复杂的复杂的test benchtest bench是自检测的,其结果自动验证。是自检测的,其结果自动验证。stimulus要验证的设计简单的test bench复杂的test bench激励验证结果要验证的设计module TestBench_Name;参数说明;寄存器、线网类型变量的定义、说明;DUT 实例语句;时钟信号定义、赋初值;定义置/复位信号的变化情形;用一个或多个initial语句块产生DUT的模拟激励向量;用Task、function定义DUT
11、外部时序接口;endmoduleTestbenchTestbench架构架构输入激励寄存器、线网的设置输入激励寄存器、线网的设置 相对于被测试模块的输入激励设置为reg型,输出相应设置为wire类型,双向端口可设置中间变量inout_reg作为该inout的输出寄存,inout口在testbench中要定义为wire型变量,然后用输出使能控制传输方向。inout 0:0 bi_dir_port;wire 0:0 bi_dir_port;reg 0:0 bi_dir_port_reg;reg bi_dir_port_oe;assign bi_dir_port=bi_dir_port_oe?bi_
12、dir_port_reg:1bz;用bi_dir_port_oe控制端口数据方向,并利用中间变量寄存器改变其值。等于两个模块之间用inout双向口互连。往端口写(就是往模块里面输入)。并行块并行块forkjoin块在测试文件中很常用。他们的并行特性使用户可以说明块在测试文件中很常用。他们的并行特性使用户可以说明绝对时间,并且可以并行的执行复杂的过程结构,如循环或任务。绝对时间,并且可以并行的执行复杂的过程结构,如循环或任务。module inline_ tb;reg 7:0 data_ bus;/instance of DUT initial fork data_bus=8b00;#10 da
13、ta_bus=8h45;#20 repeat(10)#10 data_bus=data_bus+1;#25 repeat(5)#20 data_bus=data_bus 1;#140 data_bus=8h0f;joinendmodule上面的两个repeat循环从不同时间开始,并行执行。象这样的特殊的激励集在单个的beginend块中将很难实现。包含文件包含文件包含文件用于读入代码的重复部分或公共数据。包含文件用于读入代码的重复部分或公共数据。module clk_gen(clk);output clk;reg clk;include common.txtinitial begin whil
14、e($time sim_end)begin clk=initial_clock;#(period/2)clk=!initial_clock;#(period/2);end$finish;endendmodule在上面的例子中,公共参数在一个独立的文件中定义。此文件在不同在上面的例子中,公共参数在一个独立的文件中定义。此文件在不同的仿真中可被不同的测试文件调用。的仿真中可被不同的测试文件调用。/common.txt/clock and simulator constantsparameter initial_clock=1;parameter period=15;parameter max_cy
15、c=100;parameter sim_end=period*max_cyc施加激励施加激励产生激励并加到设计有很多产生激励并加到设计有很多 种方法。一些常用的方法有:种方法。一些常用的方法有:从一个从一个initialinitial块中施加线激励块中施加线激励 从一个循环或从一个循环或alwaysalways块施加激励块施加激励 从一个向量或整数数组施加激励从一个向量或整数数组施加激励 记录一个仿真过程,然后在另一个仿真中回放施加激励记录一个仿真过程,然后在另一个仿真中回放施加激励线性激励线性激励线性激励有以下特性:线性激励有以下特性:只有变量的值改变时才列出只有变量的值改变时才列出易于定义
16、复杂的时序关系易于定义复杂的时序关系对一个复杂的测试,测试基准对一个复杂的测试,测试基准(test bench)(test bench)可能非常大可能非常大module inline_ tb;reg 7:0 data_ bus,addr;wire 7:0 results;DUT u1(results,data_ bus,addr);initial fork data_bus=8h00;addr=8h3f;#10 data_ bus=8h45;#15 addr=8hf0;#40 data_ bus=8h0f;#60$finish;joinendmodule循环激励循环激励从循环产生激励有以下特性
17、:从循环产生激励有以下特性:在每一次循环,修改同一组激励变量在每一次循环,修改同一组激励变量时序关系规则时序关系规则代码紧凑代码紧凑 module loop_tb;reg clk;reg 7:0 stimulus;wire 7:0 results;integer i;DUT u1(results,stimulus);always begin/clock generation clk=1;#5 clk=0;#5 end initial begin for(i=0;i 1;i=i-1)/循环循环#50 stimulus=stim_arrayi;#30$finish;endendmodule矢量采样
展开阅读全文