
主要内容Modelsim介绍与应用.pdf
18页1Modelsim 介绍与应用 --基于Altera 的 FPGA与Verilog语言主要内容?一、Modelsim 简介?二、Testbench 的编写?三、后仿真实例讲解?四、Modelsim 高级应用?一、Modelsim 简介?二、Testbench 的编写?三、后仿真实例讲解?四、Modelsim 高级应用一、Modelsim 简介?1. Modelsim 窗口简介?2. Modelsim 菜单简介?3. Modelsim 功能仿真?4. Modelsim 的特点?1. Modelsim 窗口简介?2. Modelsim 菜单简介?3. Modelsim 功能仿真?4. Modelsim 的特点Modelsim 版本?Modelsim SE :全功能版,支持Modelsim 所 有的功能与平台;?Modelsim PE :个人版,支持基本的仿真功 能,只支持 windows操作系统;?Modelsim LE :是Modelsim 的 Linux 版;?Modelsim AE 与Modelsim XE :专门为Altera 与Xilinx 公司的器件定制的简化版本,功能、 性能与速度都不如SE和PE版,但是集成了特 定器件的库文件,使用简单方便。
2Modelsim多样的运行方式?1)用户界面方式?支持菜单输入和命令行的输入2)交互式的命令行输入?不显示可视化界面,只通过命令行的输入完成所有 功能3)tcl 和宏的方式?编写可执行扩展名为do或者tcl语法文件4)批处理方式?用DOS或UNIX命令运行,没有界面也不输入命 令1)用户界面方式?支持菜单输入和命令行的输入2)交互式的命令行输入?不显示可视化界面,只通过命令行的输入完成所有 功能3)tcl 和宏的方式?编写可执行扩展名为do或者tcl语法文件4)批处理方式?用DOS或UNIX命令运行,没有界面也不输入命 令1、Modelsim窗口简介?工作区:对当前的工程、库进行管理;?命令窗口区:输入交互的命令;?注意:有些操作是无法通过菜单和工具栏完成的, 学习 ModelSim 一定要学会使用命令行方式来操 作,常用的命令并不多例:quit -sim?状态栏和其它常用的子窗口?与窗口相关的两个菜单:?View / debug windows?Window /layouts / save一、Modelsim 简介?1. Modelsim 窗口简介?2. Modelsim 菜单简介?3. Modelsim 功能仿真?4. Modelsim 的特点2、Modelsim 菜单简介?常用菜单:?File:?New(建新库、工程、文件夹、文件)?Change Directory (改变当前的工作路径)?Save (点击不同的窗口,保存不同的数据、文 件)?Edit?Search (查找波形和列表中的数值)?其它用法与Office 相近32、Modelsim 菜单简介(续)?View?Debug Windows (显示各种子窗口)?Sort (对波形窗口排序)?Source (显示源文件的行数和语言模板)?Memory Contents (显示和改变存储器的内容)?Properties (改变各窗口的显示属性)?Compile?Compile (编译文件)?Compile Options (选择编译标准等)2、Modelsim 菜单简介(续)?Simulation?Start Simulation (进行仿真配置并开始仿真)?Run Time Options (设单步运行时间和迭代限 制)?其它选项和C语言的调试相似?Tools?Waveform Compare (波形比较)?Code Coverage (代码覆盖率测试)?Options (选择保存一些文件和脚本)?Edit Preferences (各个窗口的颜色和文字设置)2、Modelsim 菜单简介(续)?Window?Layouts (窗口的模式)?其它是窗口的排列样式?Help?SE PDF Documentation-> User’s Manual ?其它帮助文档一、Modelsim 简介?1. Modelsim 窗口简介?2. Modelsim 菜单简介?3. Modelsim 功能仿真?4. Modelsim 的特点43、Modelsim 功能仿真?仿真分为功能仿真,门级仿真,时序仿真。
功能仿真(前仿真,代码仿真)?主旨在于验证电路的功能是否符合设计要求,?特点是不考虑电路门延迟与线延迟,主要是验证电 路理想情况与设计意图是否一致可综合FPGA代码是用RTL级代码语言描述的,其 输入为RTL级代码与Testbench 在设计的最初阶段发现问题,可节省大量的精力3、Modelsim 功能仿真(续)?门级仿真 (综合后仿真)?使用综合软件综合后生成的门级网表进行仿 真,不加入网线时延的仿真就是门级仿真可以检 验综合后的功能是否满足功能要求,其速度比功能 仿真要慢,比时序仿真要快 由于没有考虑布线的延时,不能反映真实的情况, 所以通常可以略过这一步3、Modelsim 功能仿真(续)?后仿真(时序仿真 )?后仿真也称为时序仿真或者布局布线后仿真,是指 电路已经映射到特定的工艺环境以后,综合考虑电 路的路径延迟与门延迟的影响,验证电路能否在一 定时序条件下满足设计构想的过程,是否存在时序 违规输入文件为从布局布线结果中抽象出来的门级网 表、Testbench和扩展名为SDO或SDF的标准时延 文件,以及相关的器件文件 ? 通常后仿真是必选的,确保设计的可靠性与稳定 性3、Modelsim 功能仿真(续)?Modelsim仿真的主要步骤: 执行一个仿真前先建立一个单独的文件夹, 将当前路径修改到该文件夹下,后面的操作都 在此文件夹下进行,以防止工程间的误操作。
1)建立库(有时可以映射库)?2)编译原代码(包括Testbench)?3)执行仿真51)建立库(映射库)?Modelsim中有两类仿真库:一种是工作库, 默认的库名为work,另一种是资源库Work库下包含当前工程下所有已经编译过的文件 所以编译前一定要建一个work库,而且只能建一个 work库资源库存放work库中已经编译文件所要调用的资 源,这样的资源可能有很多,它们放在不同的资源 库内建立库的两种方法:?菜单:File->New->Library?命令:vlib work2)编译源代码(包括Testbench)?两种方法:?菜单:Compile->Compile 选中文件,点击compile,done?命令: vlog counter.v vlog test_counter.v ? 注意:如果源代码中用到了IP核与宏,还要将 FPGA 的原型文件编译进来: C:\altera\quartus71\eda\sim_lib 220model.v altera_mf.v3)执行仿真?启动仿真器三种方法:?双击workspace窗口work库中的测试文件?菜单:Simulation->Start Simulation 选择Design选项work库中的测试文件, 点击OK。
命令:vsim test_counter?执行仿真的过程:?菜单:Simulation->Run->用工具栏执行仿真编 译编 译仿 真仿 真停止 仿真停止 仿真重新 开始 仿真重新 开始 仿真仿真 步长仿真 步长运行 全部运行 全部继续 运行继续 运行运行 一步运行 一步单步 运行单步 运行主程序 单步 运行主程序 单步 运行6用命令执行仿真?run?run 运行一步?run 1000 运行一千个单位时间?run 1000ns 运行一千纳秒?run @1000ns 运行到时间为1000ns处?run -all运行全部?run -step单步运行?run -over主程序单步运行?run -continue继续运行?run -next 运行到下一事件用命令执行仿真?Force?force /clr 0 -在当前仿真时间强制 clr 到 0;?force /bus1 Z 100 ns–在当前仿真时间后100ns强制 bus1到 Z;?force /bus2 16#4F @200–在绝对时间200个单位把bus2强制设为16进制4F;?force /clk 0 0, 1 20 -repeat 50 -cancel 1000–每50时间单位重复直到1000. 因此, 下一个 1 将在 70时间单位发生一、Modelsim 简介?1. Modelsim 窗口简介?2. Modelsim 菜单简介?3. Modelsim 功能仿真?4. Modelsim 的特点4、 Modelsim 的特点?1)复杂激励的产生?2)灵活的调试模式?3)有效的仿真结果观察途径?4)准确的仿真结果自动比较 ……71)复杂激励的产生?Quartus simulator不支持 Testbench ,只支持 波形文件.vwf (Vector Waveform File)?Quartus II仿真要在.vwf中输入输出数据。
其中工作 量最大的就是输入数据的波形录入例如:要仿真1KB的串行输入数据量,则手工 输入信号的波形要画8000个周期,不仅费时费 力而且容易出错 输入352*288大小的一幅24位bmp图像?数据量:352*288*3+54=304182(字 节)用 Modelsim 仿真图像的硬件处理?读入文件数据:?1.定义一个存储器:reg [7:0] mem [15:0];?2.使用: $readmemh或 $readmemb将文件读入 存储器中;$readmemh(“*.txt ”,mem);?写数据到文件:?1.打开一个文件:File_ID=fopen(“*.txt“);?2.写文件:$fwrite (File_ID, “%h “,mem[i]);?3.关闭文件:$fclose(File_ID); ?注意:Modelsim 只读写ASCII 码2)灵活的调试模式?当编译失败,或者仿真出现异常结果时,我们 需要进行调试调试方法:?设置断点,单步运行源代码?观察代码覆盖率?数据流跟踪?用Profiler分析程序的性能设置断点?右键Workspace\Sim中的测试文件,点击 Edit在资源窗口中单击要设置断点处的行号(红色断 点)?双击行号,断点变为无效(灰色)?右键(Remove Breakpoint)可以去掉断点。
调试?菜单Simulate->Run->?工具栏调试?观察变量?将鼠标移至资源窗口变量上,即显示变量当前值8观察代码覆盖率?代码覆盖率即程序运行中执行过代码与总代码 的比例菜单法?Compile->Compiler Options->Coverage ->Enable Statement Coverage?重新编译源代码?Simulate->Start Simulation->Others ->Enable Code Coverage观察代码覆盖率(续)?命令法?vlog -cover bcst verge_test.v?vlog -cover bcst verge_test_tb.v?vsim -coverage verge_test_tb?三个窗口?Missed Coverage 列出没有执行的代码?Instance Coverage 显示分析的统计结果?Details 显示未执行代码的详细信息数据流跟踪?功能?观察设计中信号的物理连接?跟踪信号在设计中的传播?找到未知信号的来源?打开数据流观察窗口?法一:右键Workspace\sim中测试文件 Add ->Add to Dataflow?法二:双击信号波形?法三:命令view dataflow add dataflow 。
