TestBench的主要目标是:

  • 实例化DUT-Design Under Test
  • 为DUT产生激励波形
  • 产生参考输出,并将DUT的输出与参考输出进行比较
  • 提供测试通过或失败的指示

TestBench产生激励的三种方式:

  • 直接在testbench中产生
  • 从矢量中读入
  • 从单独的激励文件中读入

比较流行的做法是使用matlab产生激励文件,由testbench读入该激励文件并将激励馈送到DUT,DUT产生的相应输出以文件的形式存储,由matlab读取并与理想的响应作比较。

下面以一个简单的同步加法器为例,分析不同形式的testbench的写法。

1. 简单的TestBench

简单的testbench只适合于相对比较简单的设计。如图1-1所示,在testbench中只是简单的实例化了一个DUT,激励在testbench中产生。可见这种方式的testbench可重用性比较差。

图1-1 简单的testbench

图1-2 DUT VHDL代码

简单的testbench代码如图1-3所示。

图1-3 简单的testbench 代码

仿真结果如图1-4所示。

图1-4 仿真结果

2. 具有独立激励源的testbench

将激励源作为一个文件在testbench中进行实例化,比较适合于具有复杂输入和简单输出的设计。如图2-1所示。

图2-1 具有独立激励源的testbench

在本例中,DUT的激励源为一个计数器。相应的VHDL代码如下:

图2-2 激励源代码

编写完成激励源的VHDL码后,还需要在testbench中进行实例化,方法与实例化DUT的方法一致。相应的testbench代码如下:

图2-3 具有独立激励源的testbench代码

3. 使用TextIO的testbench

当设计的输入输出都比较复杂时,尤其是在做复杂的算法仿真时,需要产生多种形式的激励输入,还要对仿真结果输出做复杂的分析时,使用TextIO的testbench具有最高的效率。在使用TextIO的testbench中,为DUT从输入文件读取激励输入,激励信号经过DUT处理后写入到输出文件中。其原理如图3-1所示。

图3-1 使用TextIO的testbench原理框图

在本例中,我们将Matlab产生的两个激励输入文件加载到testbench中,在输入到DUT之前先进行类型转换,然后按照时钟节拍将数据一个一个的加载到DUT的输入端口,再按照时钟节拍从DUT输出端口将数据写入到输出文件,当然在写入输入文件之前也要先进行类型转换。如图3-2所示。

图3-2 针对本例的testbench原理框图

Matlab产生加法器两个输入激励的代码如下,激励输入为范围在0~7之间的随机数,最后保存到txt文件中供testbench读取。

图3-3 激励产生m代码

使用TextIO的testbench代码如下:

图3-4 testbench代码

仿真结果如图3-5所示。

图3-5 仿真结果

下面我们对于如何在TestBench中使用TextIO做一个小结。

(1).首先需要声明TextIO的包集

(2).然后在process中声明输入、输出文件

(3).接着声明读写文件的行变量

(4).再声明用于保存行变量中值的数据变量

(5).最后进行文件的读写,在读文件之前需要判断文件是否已经被读到末尾。读文件时,先从文件中按行读出一行数据,再将行中的数据读到数据变量中。写文件时,先将数据变量组合成一行,再将行变量中的数据写入文件。需要注意的是只有variable型才是文件存取类型,不能使用signal型。

TextIO包集中定义了一些常用的文件操作过程:

readline(file_var, line_var);

--用于从文件file_var中读取一行数据保存到line_var中

read(line_var, data_var);

--用于从line_var中读取数据保存到data_var中

writeline(file_var, line_var);

--用于将line_var写入到file_var中

write(line_var, data_var);

--用于将data_var写入到line_var中

endfile(file_var)

--判断file_var是否已经到文件末尾

4. Ref

[1] TKT-1210 Digital design Ⅱ,Lect5 VHDL Test Bench

VHDL TestBench基础(转)的更多相关文章

  1. VHDL testbench 例子,包含向文件中写数据

      LIBRARY ieee; USE ieee.std_logic_1164.ALL; use std.textio.all; use ieee.std_logic_textio.all;   EN ...

  2. VHDL TestBench 测试终止时自动结束仿真——assert方法

    可在结束仿真位置添加如下代码: assert false report "Simulation is finished!" severity Failure; 则在Modelsim ...

  3. 基于BASYS2的VHDL程序与仿真——50%占空比8分频器

    转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...

  4. RFID 仿真/模拟/监控/拦截/检测/嗅探器

    Sound card based RFID sniffer/emulator (Too tired after recon.cx to do draw the schematics better th ...

  5. VHDL----基础知识1

    摘要: 打算分几篇,来理清VHDL的基础知识 ----------------------------------------------------------------------------- ...

  6. 全平台轻量开源verilog仿真工具iverilog+GTKWave使用教程

    前言 如果你只是想检查Verilog文件的语法是否有错误,然后进行一些基本的时序仿真,那么Icarus Verilog 就是一个不错的选择.相比于各大FPGA厂商的IDE几个G的大小,Icarus V ...

  7. 能否使用GHDL+GTKWave代替Quartus ii (续——vhdl_testbench_cli)

    vhdl_testbench_cli项目介绍 这是我放在gitee上的一个项目. 项目是用于Mac系统下生成vhdl testbench的工具. 主要就是续着这篇文章<能否使用GHDL+GTKW ...

  8. 能否使用GHDL+GTKWave代替Quartus ii

    能否使用GHDL+GTKWave代替Quartus ii macOS High Sierra系统 10.13.6 [toc] 先给出答案 可以替代一部分功能 如果你是一个学工科的学生,正在学习EDA. ...

  9. VHDL的testbench的编写(转)

    大多数硬件设计人员对verilog的testbench比较熟悉,那是因为verilog被设计出来的目的就是为了用于测试使用,也正是因为这样verilog的语法规则才被设计得更像C语言,而verilog ...

随机推荐

  1. 安卓学习之--如何关闭所有的activity

    根据Activity的声明周期 方法1   我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent ...

  2. 函数fil_node_create

    /*******************************************************************//** Appends a new file to the c ...

  3. UVa 1640 (计数) The Counting Problem

    题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...

  4. CodeForces Round #278 (Div.2) (待续)

    A 这么简单的题直接贴代码好了. #include <cstdio> #include <cmath> using namespace std; bool islucky(in ...

  5. [LA 3887] Slim Span

    3887 - Slim SpanTime limit: 3.000 seconds Given an undirected weighted graph G <tex2html_verbatim ...

  6. 根据中国气象局提供的API接口实现天气查询

    中国气象局提供了三个天气查询的API接口: [1]http://www.weather.com.cn/data/sk/101190101.html [2]http://www.weather.com. ...

  7. Java [Leetcode 58]Length of Last Word

    题目描述: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return ...

  8. Dataguard三种保护模式

    Oracle Data Guard 提供三种高水平的数据保护模式来平衡成本.可用性.性能和事务保护.可以使用任意可用管理界面来轻松地设置这些模式.要确定适当的数据保护模式,企业需要根据用户对系统响应时 ...

  9. CentOS SVN服务器安装配置小记

    SVN的安装 安装很简单,尤其对于CentOS这种,直接: # yum install subversion# yum install mod_dav_svn 不同发行版的Package安装方法参见h ...

  10. IOS 五星评分控件

    程序中需要打分的功能,在网上找了几个,都不是很满意.下面是实现出的效果.可以点击,可以拖动. 使用方法:初始化控件. TQStarRatingView *starRatingView = [[TQSt ...