【友晶科技Terasic】Modesim 完整教程 18.1版本(单口RAM的仿真)
Modelsim仿真
一、Modelsim的简介
ModelSim是Model Technology(Mentor Graphics的子公司)的HDL硬件描述语言的仿真软件,该软件可以用来实现对设计的VHDL、Verilog HDL 或是两种语言混合的程序进行仿真,同时也支持IEEE常见的各种硬件描述语言标准。在工程创建完成之后,通常需要使用专用的仿真工具,对设计进行功能仿真(也称之为前仿真),验证电路功能是否符合设计要求。通过功能仿真可以及时发现设计中的错误,在系统设计前期即可完成修改,提高设计的可靠性。
?
无论是从使用界面和调试环境,还是从仿真速度和效果上看,ModelSim都可以算的上是业界比较优秀的HDL语言仿真软件。它是唯一的单内核支持VHDL和Verilog HDL混合仿真的仿真器,是做FPGA/ASIC设计的RTL级和门级电路仿真的好选择,它采用直接优化的编译技术,Tcl/Tk技术和单一内核仿真技术,具有仿真速度快,编译的代码与仿真平台无关,便于IP核的保护和加快错误程序定位等优点。
ModelSim分几种不同的版本:ModelSim SE、ModelSim PE、ModelSim LE和ModelSim OEM,其中的SE、PE、LE是其最高版本,编译速度是所有版本中最快的,而OEM版本就是集成在FPGA厂家设计工具中的版本,它们专门和某个厂家的FPGA配套来使用,如后面使用到的ModelSim AE就是专门针对Intel公司Quartus Prime的配套的OEM产品 。
二、Modelsim软件的安装
- 软件下载
ModelSim软件的下载链接可以从MyFPGA论坛获取,然后按图2.1所示下载软件。本教程中所用到的ModelSim版本是Intel FPGA Starter Edition 10.5b。
- 软件安装
- 双击下载的ModelSimSetup-18.1.0.625-windows.exe应用程序,出现如图2.2所示的ModelSim安装界面,点击Next。
- 在出现的“Select the ModelSim edition you like to install 界面, 选择ModelSim-Intel FPGA Starter Edition(该版本是不需要License的),如图2.3所示,之后点击Next。
- 在License Agreement界面选择“I accept the agreement”,并点击Next。
- 将ModelSim软件的安装路径选择到Quartus的安装路径下,如图2.5所示,点击两次Next,便可以开始安装软件。
- 等待软件安装,如图2.6所示。
- 软件安装完成后,点击Finish,退出安装界面。到此,ModelSim仿真软件安装成功。
三、Test Bench测试平台的结构
Test Bench主要是为测试或仿真Verilog程序搭建了一个平台,给被测试的模块施加激励信号,通过观察被测试模块的输出响应,来判断其逻辑功能和时序关系是否正确。
测试模块与一般的Verilog代码书写方式类似,其主要特点如下:
- 时间单位和时间精度一般是1、10和100这三种整数,单位有s、ms、us、ns、ps和fs;
- 测试模块只有模块名字,没有端口列表;
- 输入信号(激励信号)必须定义为reg类型,用来保持信号值;
- 输出信号(显示信号)必须定义为wire类型;
- 例化测试模块时,需要注意端口排列的顺序与模块定义时的顺序要一致;
- 一般使用initial 、always来定义激励信号波形;
- 在激励信号的定义中还可以使用一些控制语句,比如if-else、case、while、repeat、wait、begin-end等;
四、Modelsim仿真应用实例
这部分将以单口ram工程为例,介绍如何编写仿真脚本文件(即test bench文件),以及使用ModelSim工具对创建的工程进行仿真测试。
1. ModelSim软件调用设置
在第一次用Quartus Prime调用ModelSim-Altera之前,需要指定EDA工具来为支持的模拟器生成仿真文件。首先,打开full_adder.qpf工程。然后,点击Tools --> Options --> EDA Tool Options,在ModelSim-Altera栏选择对应的ModleSim-Altera的安装路径,如图5.1所示。点击OK即可在Quartus Prime中调用ModelSim-Altera软件。
2. 新建Test Bench文件
- 选择 File --> New --> Verilog HDL,如图4.2所示,新建空白.v文档。
- 点击File --> Save as... ,这里将该.v文件命名为ram_tb.v,点击保存,如图4.3所示。
- 在名为ram_tb.v的Verilog空白文档中输入如下代码,并保存。
`timescale 1ns/1ns
module ram_tb;
reg clk;
reg rst_n;
wire [7:0]q;
initial
begin
clk=0;
rst_n=0;
#20 rst_n=1;
end
always #10 clk=~clk;
ram u_ram(
.clk(clk),
.rst_n(rst_n),
.q(q)
);
endmodule
3. 添加测试文件
- 点击Assignments --> Settings,如图4.4;然后选中Simulation栏,Tool name选择ModelSim-Altera,然后选择新建Test Bench文件,如图4.5所示的步骤。
- 按照图4.6所示的步骤选择ram_tb.v文件,点击Add进行添加,然后点击OK,如图4.6所示。
- 这样就可以在Test Bench看到添加的 ram_tb.v文件,点击OK ,如图4.7所示。添加完成后,在Settings窗口点击OK,然后将其关闭。
4. 开始仿真
- 在Quartus Prime中选择菜单项Tools --> Run Simulation Tool --> RTL Simulation,即可调用ModelSim工具进行仿真,如图4.8所示。
- 运仿真结果如图4.9所示,注意,如果wave窗口没有显示波形,可以在右下角点击一下Wave选项进行切换。
sim窗口显示的是需要仿真的激励模块;Objects(对象)窗口显示的是仿真中的激励信号和显示信号;Transcript窗口(命令行窗口)会按照系统任务 $monitor 规定的格式打印输出结果。
wave(波形)窗口显示的是仿真波形,如果发现波形显示的不够完整,可以在波形窗口右键–>Range,按自己的需要调整显示范围。
从4.9中的波形图可以看出:
wren为1时,数据写入到ram, wren为0时,ram的数据读出到q。
结果与预期一致,说明我们的ram控制功能已实现。