仿真FPGA开发中常用的功能,通过给设计注入激励和观察输出结果,验证设计的功能性。Vivado设计套件支持如下仿真工具:Vivado Simulator、Questa、ModelSim、IES、VCS、Rivera-PRO和Active-HDl。
Vivado的仿真流程如下图所示:
仿真可以在设计阶段的不同时间点进行,主要包括如下三个阶段:
时序仿真相比功能仿真要耗费大量的时间,但是可以检测到功能仿真无法检测的问题,比如:
Vivado Simulator支持VHDL(IEEE-STD-1076-1993)、Verilog(IEEE-STD-1364-2001)、SystemVerilog中的可综合子集(IEEE-STD-1800-2009)三种硬件描述语言,此外还支持IEEE P1735加密标准。
TestBench也是由HDL语言代码编写,其实例化了需要仿真的设计,生成设计所需要的激励信号,监测设计输出结果并检查功能的正确性。一个简单的TestBench可以仅仅将激励顺序地加载到设计的输入管脚上;一个复杂的TestBench可能会包含子程序调用、从外部文件读取激励信号、条件化激励和其它更多复杂的结构。
下面是编写TestBench时极度推荐的一些注意事项:
点击Tools->Settings->Tool Settings->3rd Party Simulators:
Install Paths中定位仿真器的安装路径,Default Compiled Library Paths中指定与仿真器相关的编译库路径。只有第三方仿真器需要在此设置,Vivado Simulator不需要设置。
使用Vivado Simulator时,不需要编译仿真库。但是使用第三方仿真工具时,必须先编译仿真库,才能在第三方仿真工具中正确运行。仿真库中包含了仿真模型,比如FPGA和IP的行为模型和时序模型。编译之后的库可以在多个设计工程中使用。
在编译过程中,Vivado会创建一个仿真器用来参考编译库文件的初始化文件,该文件包含了一些控制变量,包括规定参考库路径、优化、编译和仿真设置。如果没有正确的初始化文件,就不能运行包含Xilinx原语的仿真。不同仿真器的初始化文件名称如下:
如果使用的仿真器版本不变,只需要编译一次库文件即可;如果更换了Vivado或仿真器的版本,就必须重新编译一次库文件。编译库文件有Vivado IDE和Tcl命令两种方法,本文介绍第一种。点击Tools->Compile Simulation Libraries(即使不打开工程也有此命令)打开如下窗口:
设计者可以将Xilinx仿真库用于任何支持VHDL-93和Verilog-2001语言标准的仿真器。库中包含延迟与模型信息,可以正确地仿真Xilinx硬件器件。
仿真时,如果数据和时钟同时发生变化,仿真器在判断当前时钟边缘时会采样上一个状态的输入,同时变换时刻的输入会安排在下一个始终边缘才有效。最好的做法当然是不要使数据信号和时钟信号同时变换,以避免出现意料之外的仿真结果。
当设计者在设计中实例化了一个组件后,仿真器必须在库中找到描述该组件功能的内容,以确保正确的仿真。下面列出Xilinx提供的仿真库:
除了SECUREIP外,其它库都位于Vivado安装目录data/Verilog或VHDL/src目录内。设计者必须根据运行的仿真来设定不同的仿真库。下表中给出了与不同仿真阶段相关的仿真库文件:
在仿真设置中规定目标仿真器、仿真集、仿真顶层模块名称等选项。打开Settings切换到Simulation标签中,或在Flow Navigator中的Simulation上右键->Simulation Settings,打开设置窗口:
其中Clean up simulation files表示重新运行仿真时会将现存的整个仿真目录全部移除,其余设置选项很熟悉了,不多作介绍。下面着重介绍Simulator language,理解背后的处理机制,其值可选择VHDL、Verilog或Mixed。
大多数的Xilinx IP只会生成单语言的行为仿真模型;某些第三方仿真工具也仅支持单语言仿真。通常应该将Simulator language设置为仿真工具支持的语言,以确保工具正常运行。如果IP核同时也可以生成该语言的行为模型再好不过,但是如果IP核不支持该设置,Vivado会自动从IP核的DCP文件中生成一个结构化仿真模型用于仿真,确保仿真可以正常运行。
仿真分辨率需要在TestBench中使用timescale设置,某些人认为设置一个粗略的仿真分辨率(如1s)可以提升仿真性能,这是错误的。在 Xilinx仿真模型中,大多数仿真时间是基于一个固定间隔,与仿真分辨率并无联系。设置仿真分辨率主要是为了观察更方便。但是某些Xilinx原语组件(如MMCM)需要1ps的分辨率才能在仿真中正常工作,最常用的分辨率设置是`timescale 1ns/1ps。
Vivado提供了仿真集(Simulation Sets)功能,该机制可以让用户将不同设计阶段所用到的不同源文件添加到各自的仿真集中。比如一个仿真集可以添加用于RTL行为级仿真的源文件,另一个仿真集添加用于实现后时序仿真的源文件。或者不同的仿真集提供对一个设计的不同测试方法,等等。
在创建或添加仿真源文件时,可以选择将文件加入到哪个仿真集,或者创建新的仿真集:
当设计中存在多个仿真集时,当前运行使用的仿真集会显示为Active状态:
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |