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. 函数buf_pool_init_instance

    buff_pool_t 结构体 详见 /********************************************************************//** Initial ...

  2. C#计算程序执行速度

    long t1 = DateTime.Now.Ticks; //执行程序,例如处理100个文件 long t2 = DateTime.Now.Ticks; Response.Write("执 ...

  3. Java [Leetcode 83]Remove Duplicates from Sorted List

    题目描述: Given a sorted linked list, delete all duplicates such that each element appear only once. For ...

  4. ORACLE RAC 监听配置 (listener.ora tnsnames.ora)

    Oracle RAC 监听器的配置与单实例稍有不同,但原理和实现方法基本上是相同的.在Oracle中 tns进程用于为指定网络地址上的一个或多个Oracle 实例提供服务注册,并响应来自客户端对该服务 ...

  5. 安装oracle XML Database 组件

    近期部署项目数据库,编译包时遇到错误:   PACKAGE CTG.CTG_CSB_COMMON 编译错误  错误:PLS-00201: identifier 'XMLDOM' must be dec ...

  6. ioctl()获取本地网卡设备信息

    获得eth0接口所有信息: #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #inclu ...

  7. UVA 10054 The Necklace

    完全就是哭瞎的节奏···QAQ 又是图论··· 题意:有一种项链,每个珠子上有两种颜色,相同颜色的两颗珠子的两头相连,如果能连成环输出珠子的顺序,不能连成环输出"some beads may ...

  8. hdu 2473 Junk-Mail Filter(并查集_虚节点)2008 Asia Regional Hangzhou

    感觉有些难的题,刚开始就想到了设立虚节点,但是实现总是出错,因为每次设立了虚节点之后,无法将原节点和虚节点分开,导致虚节点根本无意义. 以上纯属废话,可以忽略…… 题意—— 给定n个点(0, 1, 2 ...

  9. Libsvm的MATLAB调用和交叉验证

    今天听了一个师兄的讲课,才发现我一直在科研上特别差劲,主要表现在以下几个方面,(现在提出也为了督促自己在以后的学习工作道路上能够避免这些问题) 1.做事情总是有头无尾,致使知识点不能一次搞透,每次在用 ...

  10. 【原】Storm实战

    3.Storm实战 如何新建一个Storm 项目 本文简要概括如何新建一个Storm项目,步骤如下: 1.添加Storm 相关jar添加到类路径上. 2.如果使用多语言特性,将多语言实现的目录加到cl ...