ModelSim-TestBench完整设计方法及实例

1 FPGA的三种验证功能

FPGA设计验证的功能体现在三个方面:功能仿真、时序仿真、电路验证。它们分别对应整个开发流程的每一步。

  • 功能仿真是指仅对逻辑功能进行模拟测试,类似于车辆控制算法开发中的SIL仿真,主要作用是实现的功能是否满足设计要求。仿真过程没有时序信息,不涉及具体器件的硬件特性,如延时特性等,因此又称为前仿真
  • 时序仿真则是在HDL满足功能要求的基础上,在布局布线后,提取有关的器件延迟、连线延时等时序参数信息,并在此基础上进行的仿真,因此又称为后仿真。它是接近于器件真实运行状态的一种仿真,但由于时序参数信息本身是对现实世界电路器件的模拟,因此仍停留在仿真阶段。后仿真一般就等同于实际板子上跑的结果。如果在PCB板上跑出现问题,则此问题就比较难解决。
  • 电路验证则是将仿真的HEX等格式的文件烧录到芯片或者控制器中,进行实验验证。

2 ModelSim介绍及仿真流程

ModelSim是Model Technology(Mentor
Graphics的子公司)的HDL硬件描述语言的仿真软件,该软件可以用来实现对设计的VHDL、Verilog HDL
或是两种语言混合的程序进行仿真,同时也支持IEEE常见的各种硬件描述语言标准。
无论是从使用界面和调试环境,还是从仿真速度和效果上看,ModelSim都可以算的上是业界比较优秀的HDL语言仿真软件。它是唯一的单内核支持VHDL和Verilog
HDL混合仿真的仿真器,是做FPGA/ASIC设计的RTL级和门级电路仿真的好选择,它采用直接优化的编译技术,Tcl/Tk技术和单一内核仿真技术,具有仿真速度快,编译的代码与仿真平台无关,便于IP核的保护和加快错误程序定位等优点。

ModelSim不仅可以用于数字电路系统设计的功能仿真,还能用于时序仿真。一般在ModelSim创建工程的步骤包括创建工程、编写或者添加源代码、编译、启动仿真器、debug与分析

3 测试(TestBench)程序的设计方法

随着设计量和工程复杂度的提高,测试工程师或者验证工程师必须依靠专业的验证工具、方法和流程进行工作。大型的设计可能包含几百万门的验证,必须要有一套规范的验证工具,小型的项目可以直接使用HDL TestBench仿真器。

和功能开发使用的语言相同,TestBench也使用Verilog或者VHDL语言描述。简单的TestBench直接调用功能开发的源文件进行仿真测试,复杂的TestBench还包括一些其他的功能,比如包含特定的激励向量作为输入,或者可以同时进行两项测试,从而能比较实际输出和期望输出。

在开始写TestBench之前,很重要的一点是实际实例化被测元件,也就是实例化DUT(Design UnderTest),还要详细了解整个的测试计划和案例。TestBench、Counter(被测对象)和监测器之间的关系如下图:
TestBench测试环境
分析:从图中可以看出,TestBench和被测对象构成了一个封闭系统,TestBench负责向Counter提供时钟激励和控制信号(逻辑复位和逻辑使能),另外Monitor/Checker还检测Counter的输入和输出,用来验证是否符合设计预期,并通过Display展示给我们。

端口关系:Test Bench程序和被测对象构成了一个封闭的循环,因此Test Bench的输入端口需要与被测对象的输出端口连接,Test Bench的输出端口则要与被测对象的输入端口相连接。所以在端口的定义上,Test Bench程序需要和被测对象相对应。

被测元器件是一个已经设计好的电路或系统,Test Bench是用元件例化语句将其嵌入程序中。VerilogHDL测试平台是一个设有输入输出端口的设计模块,被测元器件的输入端定义为reg(寄存器)型变量,在always块或initial块中赋值(产生测试条件),被测元器件的输出端定义为wire(线网)型变量,产生相应输入变化的输出结果(波形)。

4 TestBench设计

4.1 功能仿真——组合逻辑电路TestBench的设计

既然是功能仿真来验证组合逻辑,主要就是检查设计结果是否符合该电路的真值表功能。因此在编写功能仿真对应的TestBench时,用init块把被测电路的输入按照真值表提供的数据变化作为测试条件,在观察simulink之后的结果是否符合预期功能的结果,就完成了功能仿真部分TestBench的设计。

利用ModelSim进行功能仿真的例子:ModelSim入门教程和两个典型例子

4.2 时序仿真——时序逻辑电路TestBench的设计

时序电路TestBench的设计和组合电路的基本相同,区别在于时序电路还需要时钟信号,以驱动器件工作,从而引入器件的延时特性、系统连线的延时特性等。生成时钟信号需要用到always块。

利用ModelSim进行时序仿真的例子:ModelSim入门教程和两个典型例子

猜你喜欢

转载自blog.csdn.net/zhanshen112/article/details/107496139
今日推荐