![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=1739253261-lmHMOowV0Lo6JOxzKBnJH6Vgippw32jH-0-a218dffb56bf36ff5a0532b028a7b7f3)
注
从 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=1739253261-aFEaXhVgWLcoBAtfD2lPK5ttkOkiiaER-0-d46b285b4c436a179bc1432ab15fc6cf)
仿真器支持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=1739253261-MOTPM8B9HUQSId8czqnr2h345P1ovNq1-0-bd8d20f16c933b27e63b6e059b30f87c)
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=1739253261-fn99VytyPzHH5rs1Lri2qVgoXWi07czx-0-0dd32de12c01f124f21d772f9eb8228f)
4.软件支持的仿真流程
Quartus Prime软件支持不同的仿真流程,如表2.9所示。
表2.9 仿真流程
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_178_1.jpg?sign=1739253261-K2cz7ZtKZD0xTUyDUfrgj9j95iOm9mfZ-0-6232b878759f279969b7c15e463d039f)
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=1739253261-Qw1IolZZ32kPc9xBRAX0Cj2YLjEzWtAX-0-1a3956cf72aeaecdb23d74ca3f705bb4)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_179_1.jpg?sign=1739253261-kkldlJK5JSiGWVraAxyKR8QFtyv4OjXc-0-c0bb16abc11f3f4b41580c186d148c44)
(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=1739253261-hrHfHciGTWIBwjCW99OSTwlK3IukxjtL-0-d0d87ca467e09017f102b77ff48a54e7)
图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=1739253261-ZeRQnhU9cJYSFfky9WSU8HNtdWpxlLda-0-865a0accb724377e1ae13fbff2443153)
图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=1739253261-n6rOs7veWwm8Oc3ALe1Y73TEYM5CN3k2-0-7112147da8cdf7851b5a26777528b281)
图2.52 “Objects”窗口
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_181_2.jpg?sign=1739253261-p0dfqiBpbrBY0IZGziqdahXt2umXnhSk-0-dcbfe4cb8b0ce96ebcb52ce9db21f2c6)
图2.53 “Wave-Default”窗口(1)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_181_3.jpg?sign=1739253261-7towApIkLHZeD4GYrCiLanBDQtPR8ORK-0-c2f7d69fddbdbe42ca27a9e297596860)
图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=1739253261-qMaY3PrMOhIzuTfHI9Kcp5vo12ldyshn-0-f1a3a0e96ffe7ae3d21840aa6619917d)
图2.55 “Wave-Default”窗口(2)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_181_5.jpg?sign=1739253261-O3lyINF9C9eTrb5AVVHSC3kA9Pljjssf-0-b515a0afbf729131733b87766104bd06)
图2.56 “Transcript”窗口
(30)执行完行为级仿真后的“Wave-Default”窗口,如图2.57所示。
(31)退出ModelSim仿真工具界面。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_182_1.jpg?sign=1739253261-uGUVVV9s0bZtfbW3h2C62VDc8uVFPIDe-0-700dcbdd7ac13237a1bb3caa946bc917)
图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=1739253261-DxcNY0VW4jAM3jhMemW43QfDsguG4w6S-0-6c362cd5708c5f5751559675a21811c2)
图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=1739253261-ba2jkJZVNVrZrs1R3YYgHHPCZM2Cl52O-0-1baf2f5719119b68928e29ea50bc486d)
图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=1739253261-CGhemaaxN5VRJQnvZ41GlFlo4VFwdmBb-0-f29a8564002937a49374528b348ff9c4)
图2.60 “Node Finder”对话框
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_183_4.jpg?sign=1739253261-5fijSG17nD7x4HfBm9jROtSNFB91TCT2-0-3cc11a8bdcb510d22aa1e6b89441f295)
图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=1739253261-b2DblFlNoaVDUlngGXmckYVQjhrJO97X-0-74d2621bb5c1b5f7a29cc9e4be6fa522)
图2.62 “Node Finder”对话框列出了发现的节点
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_184_2.jpg?sign=1739253261-YMtRWRip3FWpL9szUNecKEoZYqPd3Rfe-0-8a70d7e681c5e32778c205cfd8f6718d)
图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=1739253261-PswHTiKamwSR1HkBqMmh3OTVls9GigSl-0-acd761bc1250c1611c45bc4a4e173e4f)
图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=1739253261-3qvaySbUBq5pKUUlxaUNciD0muAdZ7mY-0-c50d7a015935faa9a75a656d6dd5a212)
图2.65 “Count Value”对话框
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_185_2.jpg?sign=1739253261-s3wI1BOOZs4dNXHIwsuEXOw4C911zGF9-0-cedfa98f952bcff75a833912ba337fbb)
图2.66 “Random Values”对话框
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_185_3.jpg?sign=1739253261-7toFe9J6QyZE20DdxbGLmA12BpzDSRs3-0-06c2cc60fe9d176f664d5b9df3a2a812)
图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=1739253261-6VjbgaCaui3YoKJt59yJfCxLINmlrHWt-0-542c1f80fd482130b5e47f450ffa0871)
图2.68 “Simulation Flow Progress”对话框
(25)运行完行为级仿真后的波形如图2.69所示。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_186_1.jpg?sign=1739253261-87XNAxq0hCbnEgI3yOJ2eOGWck7CuWPc-0-dc180ac39dae18f892762e62b5ec911e)
图2.69 仿真后的波形
思考与练习2-7:分析图2.69中的仿真波形图,验证仿真结果是否满足设计要求?