2.7 设计的行为级仿真

本节将介绍如何对设计执行行为级仿真,包括使用 ModelSim 工具的仿真和使用软件自带仿真工具的仿真。

从 V 系列器件开始,Quartus Prime 不再提供对时序仿真的支持,因此本章不介绍时序仿真的内容。

2.7.1 使用Verilog HDL生成测试向量的仿真

本节将详细介绍使用Verilog HDL生成测试向量并实现仿真的方法。

1.软件支持的仿真工具

Intel Quartus Prime软件支持指定的EDA仿真器版本,用于RTL和门级仿真,如表2.6所示。

表2.6 支持的仿真器

仿真器支持Mentor验证IP总线功能模型(Bus Functional Models,BFM)。下面仿真器支持仿真用于仿真硬处理器系统(Hard Processor System,HPS)设计的BFM,包括:

(1)Mentor Graphics ModelSim(包括 ModelSim-Intel FPGA Edition)和 QuestaSim 10.1d。

(2)Synopsys VCS和VCS MX 2012.09。

(3)Cadence Incisive Enterprise Simulator(IES)12.10.013.

2.仿真工具支持的仿真级

在所支持的 EDA 仿真工具中,Quartus Prime 软件支持 IP 核的 RTL 和门级仿真,如表2.7所示。

表2.7 支持的仿真级

3.仿真器支持的HDL语言

Intel Quartus Prime软件为EDA仿真器提供下面的HDL支持,如表2.8所示。

表2.8 HDL支持

4.软件支持的仿真流程

Quartus Prime软件支持不同的仿真流程,如表2.9所示。

表2.9 仿真流程

5.创建测试文件并执行仿真

本节将为前面的设计创建Verilog HDL测试文件,主要步骤包括:

(1)在Quartus Prime设计主界面主菜单下,选择New->File...。

(2)弹出“New”对话框,在该对话框中,展开“Design Files”选项。在展开项中,找到并单击“Verilog HDL File”。

(3)单击“OK”按钮。

(4)出现名字为“Verilog1.v”的设计界面。在该界面中,输入设计代码,如代码清单2-3所示。

代码清单2-3 test.v文件

(5)按“Ctrl+S”组合键,将该文件命名为test.v。

(6)在Quartus Prime设计主界面主菜单下,选择Project->Add Current File to Project,将该文件添加到当前设计工程目录中。

(7)在Windows 10操作系统的桌面中,单击左下角的“开始”按钮,选中Intel FPGA 19.1.0.240 Pro Edition->ModelSim-Intel FPGA Starter Edition 10.6d(Quartus Prime Pro 19.1),单击鼠标右键,出现浮动菜单,选择更多->以管理员身份运行。

(8)弹出“用户账户控制”对话框,在该对话框中提示“你要允许此应用对你的设备进行更改吗?”的信息。

(9)单击“是”按钮。

(10)启动ModelSim-Intel FPGA Edition(注:该版本不需要预编译仿真库)。

(11)弹出“IMPORTANT Information”对话框。在该对话框的底部选中“Don’t show this dialog again”(不要再显示该对话框)前面的复选框。

(12)单击该对话框中的“Close”按钮。

(13)启动后的 ModelSim 主界面的顶部显示“ModelSim-INTEL FPGA STARTER EDITION 10.6d”。在主界面主菜单中,选择File->Change Directory...。

(14)弹出“选择文件夹”对话框,在该对话框中将路径定位到当前设计工程目录下,即E:\intel_example\example_2_1。

(15)在ModelSim主界面主菜单下,选择Compile->Compile...。

(16)弹出“Compile Source Files”对话框。在该对话框中,自动设置“Library”为“work”,并且列出了当前目录中可用的 Verilog HDL 文件。在该对话框中,同时选中 test.v文件和top.v文件。

(17)单击“Compile”按钮。

(18)弹出“Create Library”对话框。在该对话框中提示“The library ‘work’does not exist.Do you want to create this library?”(库“work”不存在。你是否想创建这个库?)的信息。单击“Yes”按钮。

(19)关闭“Compile Source File”对话框。

(20)在ModelSim主界面主菜单下,选择Simulate->Start Simulation...。

(21)弹出“Start Simulation”对话框,如图2.50所示。在该对话框中,单击“Design”标签。在该标签页中,找到并展开 work 文件夹。在该文件夹中,选中 test。在“Design Unit(s)”标题下的文本框中自动填入“work.test”。

图2.50 “Start Simulation”对话框

(22)单击“OK”按钮。

(23)出现仿真界面。在该界面底部的“Transcript”窗口中,出现“VSIM 8>”提示符,如图2.51所示。在“>”后面输入“restart”,按回车键,重新开始进行仿真。

图2.51 “Transcript”窗口

(24)弹出“Restart”对话框。在该对话框中,默认选中所有选项前面的默认框。

(25)单击“OK”按钮。

(26)在ModelSim的“Objects”窗口中,如图2.52所示,选中clk、a、b和z,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择 Add Wave。添加这些信号后的“Wave-Default”窗口如图 2.53 所示。从图中可知,将 clk、a、b 和 z 添加到了“Wave-Default”窗口中。

(27)在“sim-Default”窗口中,找到并展开 test,如图 2.54 所示。在展开项中,找到并展开Inst_top。在展开项中,找到并选中#ASSIGN#9选项。

(28)在“Objects”窗口中,可以看到新出现了a_1、b_1和z_1寄存器变量,如图2.54所示。在该窗口中,选中a_1、b_1和z_1,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择 Add Wave。添加这些信号后的“Wave-Default”窗口如图 2.55 所示。从图中可知,将a_1、b_1和z_1添加到了“Wave-Default”窗口中。

图2.52 “Objects”窗口

图2.53 “Wave-Default”窗口(1)

图2.54 “sim-Default”窗口和“Objects”窗口

(29)在“Transcript”窗口内的“VSIM 8>”提示符后输入“run 1000 ns”,表示运行仿真1000ns,如图2.56所示。

图2.55 “Wave-Default”窗口(2)

图2.56 “Transcript”窗口

(30)执行完行为级仿真后的“Wave-Default”窗口,如图2.57所示。

(31)退出ModelSim仿真工具界面。

图2.57 执行完行为级仿真后的“Wave-Default”窗口

思考与练习2-6:对图2.57给出的仿真结果进行分析,是否满足逻辑设计功能要求?

2.7.2 使用波形文件生成测试向量的仿真

除使用Verilog HDL生成测试向量外,还可以用Quartus Prime提供的VWF文件生成测试向量。本节将介绍使用波形文件生成测试向量并执行仿真的过程,主要步骤包括:

(1)在Quartus Prime主界面主菜单下,选择File->New...。

(2)出现“New”对话框。在该对话框中,找到并展开 Verification/Debugging Files。在展开项中,选择University Program VMF(大学计划VMF)。

(3)单击“OK”按钮。

(4)出现“Simulation Waveform Editor”对话框界面,如图2.58所示。在该对话框的主菜单下,选择Edit->Insert->Insert Node or Bus...。

图2.58 “Simulation Waveform Editor”对话框

(5)弹出“Insert Node or Bus”对话框,如图 2.59 所示。在该对话框中,单击“Node Finder...”按钮。

图2.59 “Insert Node or Bus”对话框

(6)弹出“Node Finder”对话框,如图2.60所示。单击“Look in:”标题后面的按钮。(7)弹出“Select Hierarchy Level”对话框,如图2.61所示。在该对话框中,选中top,然后单击“OK”按钮,退出“Select Hierarchy Level”对话框。

图2.60 “Node Finder”对话框

图2.61 “Select Hierarchy Level”对话框

(8)单击“Node Finder”对话框中的“List”按钮。

(9)在“Nodes Found:”标题栏下列出了找到的节点,如图 2.62 所示,依次选中节点clk、a、b 和 z,然后单击按钮,将这些节点依次加入到“Selected Nodes:”标题栏下,如图2.63所示。

(10)单击图2.63中的“OK”按钮,退出“Node Finder”对话框。

图2.62 “Node Finder”对话框列出了发现的节点

图2.63 将节点加到“Selected Nodes:”标题栏下

(11)单击“Insert Node or Bus”对话框中的“OK”按钮,退出该对话框。

(12)添加信号后的Simulation Waveform Editor界面如图2.64所示。

图2.64 添加信号后的Simulation Waveform Editor界面

(13)选中名字为“clk”的一行,然后单击工具栏内名字为“Count Value”的按钮。(14)弹出“Count Value”对话框,如图2.65所示。在该对话框“Count every:”右侧的文本框中输入10.0。

(15)单击“OK”按钮,退出“Count Value”对话框。

(16)选中名字为“a”的一行,单击工具栏中名字为“Random Values”的按钮

(17)弹出“Random Values”对话框,如图 2.66 所示。在“Interval period:”后面的文本框输入17。

(18)单击“OK”按钮,退出“Random Values”对话框。

(19)选中名字为“b”的一行,单击工具栏中名字为“Random Values”的按钮。(20)弹出“Random Values”对话框。在“Interval period:”后面的文本框输入17。

(21)单击“OK”按钮,退出“Random Values”对话框。

(22)给输入信号 clk、a 和 b 添加完测试信号后的 Simulation Waveform Editor 界面如图2.67所示。

图2.65 “Count Value”对话框

图2.66 “Random Values”对话框

图2.67 给输入信号clk、a和b添加完测试信号后的Simulation Waveform Editor界面

(23)在Simulation Waveform Editor主界面主菜单内,选择Simulation->Run Functional Simulation。

(24)弹出“Simulation Flow Progress”对话框,如图2.68所示,图中显示了仿真的进度。

图2.68 “Simulation Flow Progress”对话框

(25)运行完行为级仿真后的波形如图2.69所示。

图2.69 仿真后的波形

思考与练习2-7:分析图2.69中的仿真波形图,验证仿真结果是否满足设计要求?