![零点起飞学Xilinx FPG](https://wfqqreader-1252317822.image.myqcloud.com/cover/469/31794469/b_31794469.jpg)
3.2 仿真验证
ISE中集成了测试激励生成器(HDL Bencher),在没有专业仿真工具的情况下,可以使用测试激励生成器产生激励信号,并调用ISE集成的仿真工具完成功能验证。此外,还可以联合ModelSim进行仿真验证。
3.2.1 在ISE中仿真验证
【例3-12】在ISE中进行仿真验证。
(1)在用ISE仿真前需要确认工程设置,单击菜单命令Project→Design Properties,如图3-28所示。确认Simulator的选择为ISim(VHDL/Verilog),这在新建工程时已经设定好了,为保万无一失,我们还是确认一下,如图3-29所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P58_40524.jpg?sign=1739485557-CSCuc2otwctVAh6GlLOqma2O2a7jY1ii-0-367b87a33204d1379380aa2320397e57)
图3-28 选择Design Properties命令
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P58_40527.jpg?sign=1739485557-EwIUILgjT5JMJMYjrgxpaCYuTHGCUnth-0-b8fb93884104dec5e07d5a03527e35a1)
图3-29 仿真器设置界面
(2)接下来写测试脚本文件,单击Project→New Source命令,如图3-30所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P59_40534.jpg?sign=1739485557-Lox06fmzg9hEoay6ZMHcVwXSIflOK6O4-0-a7b974b7d93bd0867efd619e864b938f)
图3-30 新建脚本文件
(3)如图3-31所示,选择新建源文件类型为Verilog Test Fixture,再输入测试脚本文件的名字vtf_led_test和存放目录。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P59_40537.jpg?sign=1739485557-EQkuD8EJRx2v1azP1peOLjtEn7MSBvJn-0-c2de100f47f91e6f25395b6d61a15b0b)
图3-31 定义文件名
(4)这里Associate Source界面用于选择测试脚本对应的设计源文件,由于只有一个设计源文件,因此选中led_test.v,然后单击Next按钮,如图3-32所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P60_40545.jpg?sign=1739485557-kC1BLTyZ77xv5ovqp97TIAMh3f2oFUdp-0-b4ecd895d5837f5f6f734e791677df3f)
图3-32 关联设置
(5)单击Finish按钮完成设置,如图3-33所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P60_40548.jpg?sign=1739485557-PKtZ2Vb1eURRR6tZEC6WjX3SZJ3BzIz4-0-19d6ad0f4c794c806253156467a91a4a)
图3-33 工程概要
(6)这里的测试脚本只是一个基本的模板,以流水灯为例,它把设计文件led_test的接口在这个模块里面例化声明了。我们还需要自己动手添加复位和时钟的激励设置,完成后的脚本文件如下。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P60_79490.jpg?sign=1739485557-u3wf9OHevu72V2jNhOZfllSntGkjUxqu-0-f7ffe11a5fa2076c4b154af37a949fdd)
(7)保存后vtf_led_test.v已经生成这个仿真Hierarchy的顶层了,下层是设计文件led_test.v。选中vtf_led_test.v文件,随后启动仿真,如图3-34所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P61_40717.jpg?sign=1739485557-JsRErxh0BLoqAnIgbdjJ9Aics9rXQvPb-0-eb8ee2d232623f6d0490ead1a30a4693)
图3-34 仿真图
3.2.2 在ISE中调用ModelSim
ModelSim是目前最流行的仿真工具,在ISE集成环境中有ModelSim的接口,可以调用ModelSim进行仿真。
【例3-13】在ISE中调用ModelSim。
(1)在用ISE仿真前需要确认项目设置,单击菜单命令Project→Design Properties,如图3-35所示。如图3-36所示,将Simulator的选择改为ModelSim-SE Mixed。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P62_40727.jpg?sign=1739485557-ovyVZu6zXqrC2CAUQu9yuc3cK15EPsno-0-3e98fc98709b7b6bf99334e344157f72)
图3-35 仿真器设置
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P62_40730.jpg?sign=1739485557-23G2uBiFHUyHwJwxLU2rSlM69Q2ldsDI-0-29fb701e7ff8654fe874329627df3faa)
图3-36 仿真器选择
(2)切换到Simulation模式,选中led_test.v文件,右击选择Simulate Behavioral Model后选择Process Properties,在对话框右边的Compiled Library Directory输入框填入之前编译库时设置的已编译库的路径C:\Xilinx\Xilinx_lib。其他选项使用默认设置即可,单击OK按钮完成设置,如图3-37所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P63_40739.jpg?sign=1739485557-0XZKiw3X8qIiiKb1Db3Opm5MuvX7KkeV-0-3ab1baff84112a28e23bb8feb8e5b5cc)
图3-37 路径设置
本节(3)~(6)步与3.2.1节(3)~(6)步骤相同,这里不再重复。
(7)保存后vtf_led_test.v成为这个仿真Hierarchy的顶层,它下面是设计文件led_test.v。选中vtf_led_test.v文件,随后启动仿真程序,如图3-38所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P63_40743.jpg?sign=1739485557-cqsgVdyBDNfTQgIcoLvl8IvaqKMs3HsO-0-3861d6d44f1cde80190a387ffd5ad74f)
图3-38 ModelSim界面
(8)弹出ModelSim窗口后,可以打开Wave窗格查看仿真结果。ModelSim的使用并不难,如何使用的资料网上也很多,大家要多动手,多尝试,相信很快就会上手。这里我们把led_test.v程序里的timer计数器放到Wave窗格中观察,如图3-39所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P64_40751.jpg?sign=1739485557-iamk2qdlLUYB1ai1IhGkKUXGlGF8PsHl-0-382f2ad50865579cc7e19572545ae3c7)
图3-39 添加波形
(9)将时间单位设置为1μs,单击Restart按钮复位,再多次单击Run按钮,ModelSim会运行到$stop行地方,如图3-40所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P64_40755.jpg?sign=1739485557-hpgeS6TJhLsnpz6iG93VDMyFLYsvPSB5-0-4db29b8307deeef5d6034f4d18deb3f8)
图3-40 运行界面
(10)在Wave格可以看到timer寄存器在复位信号rst_n变高后开始计数,如图3-41所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P65_40763.jpg?sign=1739485557-Ae9lNJnUxiCI840KGnrx6hm1yeg0hIBO-0-a78c3b6f9d069f2786b288ba82b93f33)
图3-41 计数波形
(11)因为在仿真程序vtf_led_test.v里设置的仿真时间比较短,所以可以屏蔽掉vtf_led_test.v程序中的$stop的语句,让程序一直运行。修改vtf_led_test.v文件后保存,如图3-42所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P65_40767.jpg?sign=1739485557-w0VqmPCckwuzTpuwCxFABMsHwX5mDR2a-0-39aef6be9cb19fef1cef03bc9dd6da03)
图3-42 屏蔽语句
(12)重新打开ModelSim软件,单击按钮和
按钮,ModelSim开始运行程序,多次单击
按钮,可以看到led的信号会逐个变0,说明LED灯会逐个点亮,如图3-43所示。
![](https://epubservercos.yuewen.com/B73CF9/17214368205514206/epubprivate/OEBPS/Images/Figure-P66_40784.jpg?sign=1739485557-oXCSWH4DtCMHYwm8M7xmWCLN4ZlLOOz2-0-d4c0ea312e344d717b87e6b02096c1e2)
图3-43 运行计数