![Intel FPGA权威设计指南:基于Quartus Prime Pro 19集成开发环境](https://wfqqreader-1252317822.image.myqcloud.com/cover/850/41202850/b_41202850.jpg)
2.7 设计的行为级仿真
本节将介绍如何对设计执行行为级仿真,包括使用 ModelSim 工具的仿真和使用软件自带仿真工具的仿真。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_176_1.jpg?sign=1738848015-8Cb7f9RqBMRiHe3pHThINuO42VvpmkAS-0-16d228bccc636d2fefdbac5a0c8a89a1)
注
从 V 系列器件开始,Quartus Prime 不再提供对时序仿真的支持,因此本章不介绍时序仿真的内容。
2.7.1 使用Verilog HDL生成测试向量的仿真
本节将详细介绍使用Verilog HDL生成测试向量并实现仿真的方法。
1.软件支持的仿真工具
Intel Quartus Prime软件支持指定的EDA仿真器版本,用于RTL和门级仿真,如表2.6所示。
表2.6 支持的仿真器
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_176_2.jpg?sign=1738848015-Im9QaCB8jWEN2G0axtzt6iFW1bAYJQuE-0-a6b526b4709af601cf435082da5ae375)
仿真器支持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 支持的仿真级
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_177_1.jpg?sign=1738848015-O8BMkzn8d7hulSVqWccd6Jo2PLxBrKEI-0-2c990223d1fbfbecd074b9aaf52d6c06)
3.仿真器支持的HDL语言
Intel Quartus Prime软件为EDA仿真器提供下面的HDL支持,如表2.8所示。
表2.8 HDL支持
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_177_2.jpg?sign=1738848015-Nty8GwZs92fdiGBxu6wHTEccEG90GiYD-0-b04fb4462ccb80007016d27dd807736d)
4.软件支持的仿真流程
Quartus Prime软件支持不同的仿真流程,如表2.9所示。
表2.9 仿真流程
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_178_1.jpg?sign=1738848015-EmMsnXcXxaWICt6JyqweZVN6Vjcy0r1f-0-2a62a36e947abd7876028b544864a234)
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文件
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_178_2.jpg?sign=1738848015-xtoFo53UNhrybhgtLWJjAeFgys7rkT9i-0-f6122b3356bb9b7ca486e3baf738835b)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_179_1.jpg?sign=1738848015-OHfYaiyO9EgjYZT3Nha4k0k0Lgj1YQPf-0-b3ab67f8bed545865d534c3be8c17d23)
(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”。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_180_1.jpg?sign=1738848015-Xa32OXrJOFtdtIGxfUfCbzxSBBW4pw5z-0-b340e0519ec22521875cc94e76a822af)
图2.50 “Start Simulation”对话框
(22)单击“OK”按钮。
(23)出现仿真界面。在该界面底部的“Transcript”窗口中,出现“VSIM 8>”提示符,如图2.51所示。在“>”后面输入“restart”,按回车键,重新开始进行仿真。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_180_2.jpg?sign=1738848015-hvVK57lJLVKazAwcvLPk4XJgerJfDp1K-0-5c4da3fd43205310724470885f3f72cf)
图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”窗口中。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_181_1.jpg?sign=1738848015-tuoP42wJHli1YLNosxRKukYGusPAGESa-0-f0e8c348e4b8786344288b90d1453273)
图2.52 “Objects”窗口
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_181_2.jpg?sign=1738848015-euPH4xkXqNbO6bO79CSrajdeuN9Nn4aJ-0-22d9c18e694bcc7c43a8cb4f6c5552eb)
图2.53 “Wave-Default”窗口(1)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_181_3.jpg?sign=1738848015-xP3rdWrShqEiW51yl5HMB5URUv3gsYUx-0-044da510778ee3257027fcf5899c1d92)
图2.54 “sim-Default”窗口和“Objects”窗口
(29)在“Transcript”窗口内的“VSIM 8>”提示符后输入“run 1000 ns”,表示运行仿真1000ns,如图2.56所示。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_181_4.jpg?sign=1738848015-aD8y3ldOpHJNVZMruwuuJxuaLoK7ow5q-0-362fc394c3e988ca3b320c0734e4db8c)
图2.55 “Wave-Default”窗口(2)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_181_5.jpg?sign=1738848015-wrnGZ5U5q05Zu7RHSclivuS2Qp3nrNr9-0-218b9d03514916f5306d86eba9f39e71)
图2.56 “Transcript”窗口
(30)执行完行为级仿真后的“Wave-Default”窗口,如图2.57所示。
(31)退出ModelSim仿真工具界面。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_182_1.jpg?sign=1738848015-v2ZKOARsduJGIGQgtfjRhfmBUr1jLFOK-0-2839e8b4b40dd479f73f4dad80bb47fa)
图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...。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_182_2.jpg?sign=1738848015-sYuPRvIPgbx8UIj66fTsKlk7rPWqEbN7-0-ae1524b46544989f08da306afaeca0b4)
图2.58 “Simulation Waveform Editor”对话框
(5)弹出“Insert Node or Bus”对话框,如图 2.59 所示。在该对话框中,单击“Node Finder...”按钮。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_183_1.jpg?sign=1738848015-llN6TvNjEczXQjlULAVeZO2KNcyIA5a9-0-3577ae6c1b1052f5f5196ef724a2e5b9)
图2.59 “Insert Node or Bus”对话框
(6)弹出“Node Finder”对话框,如图2.60所示。单击“Look in:”标题后面的按钮。(7)弹出“Select Hierarchy Level”对话框,如图2.61所示。在该对话框中,选中top,然后单击“OK”按钮,退出“Select Hierarchy Level”对话框。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_183_3.jpg?sign=1738848015-5h2duK5jqV4cZla2O8R58FfxNySh5KSP-0-3724ea2f0df9e7ace356ac8464b1bae7)
图2.60 “Node Finder”对话框
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_183_4.jpg?sign=1738848015-6a894KZCSGTqpZ4OVOSvXczpXwKUQXlW-0-113197759b1c2945f3356feac4d89e77)
图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”对话框。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_184_1.jpg?sign=1738848015-K8aR207nD2zHaPiPDdpBj2mnLbqekVxf-0-619a2d2a1c080b03b6d149328d66483d)
图2.62 “Node Finder”对话框列出了发现的节点
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_184_2.jpg?sign=1738848015-ua27NVz41vNuHIPjJ8JQPGUOGUEOB5aj-0-0628d1a71cce7b85f93f28a466d27a59)
图2.63 将节点加到“Selected Nodes:”标题栏下
(11)单击“Insert Node or Bus”对话框中的“OK”按钮,退出该对话框。
(12)添加信号后的Simulation Waveform Editor界面如图2.64所示。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_184_3.jpg?sign=1738848015-KuNTY9ghFrec9aKjLuMThUpXlPzndEXi-0-40cb624cf0ea8c628c021353b7fcfcee)
图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所示。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_185_1.jpg?sign=1738848015-y5lcDhbaBmOBwFNAqlWtASuIDAqLB8St-0-44c2c00c692139a4d15f15f918887cc0)
图2.65 “Count Value”对话框
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_185_2.jpg?sign=1738848015-HEgm2SrrHsaVqMFHd28grC7mVHwK3oqp-0-cab270f82d457d682cf4ce81702576c4)
图2.66 “Random Values”对话框
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_185_3.jpg?sign=1738848015-eqfrHsv6KrTS7LUToIxiQuFJUz7sOQQA-0-109966124ceb858068761a673a536f60)
图2.67 给输入信号clk、a和b添加完测试信号后的Simulation Waveform Editor界面
(23)在Simulation Waveform Editor主界面主菜单内,选择Simulation->Run Functional Simulation。
(24)弹出“Simulation Flow Progress”对话框,如图2.68所示,图中显示了仿真的进度。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_185_4.jpg?sign=1738848015-sQ6OYS86aXlXDTEV1yzb5VYbM6qK986f-0-cf5ceed9bd95a63f28f7d3983550baa8)
图2.68 “Simulation Flow Progress”对话框
(25)运行完行为级仿真后的波形如图2.69所示。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_186_1.jpg?sign=1738848015-AuMLSlN5BjW7ck6t98xlHWUEnNjRuJrU-0-9fc3acbbf6cdf828bbacb8392574d388)
图2.69 仿真后的波形
思考与练习2-7:分析图2.69中的仿真波形图,验证仿真结果是否满足设计要求?