testbench实例 vhdl_VHDL 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
testbench实例 vhdl_VHDL TestBench基础(转)相关推荐
- PHP开发实例大全(基础卷) 适合菜鸟新手学习
<PHP开发实例大全(基础卷)>筛选.汇集了PHP开发从基础知识到高级应用各个层面的大量实例及源代码,共有600个左右,每个实例及源代码按实例说明.关键技术.设计过程.详尽注释.秘笈心法的 ...
- Python 实例教学_01_基础语法
Python 实例教程 教学方法 课前准备 要求 Python 实例教学_01_基础语法 [Python 教学](https://blog.csdn.net/weixin_43955170/categ ...
- testbench实例 vhdl_学写 Testbench --- 结构篇VHDL实例
testbench.v: ---------------------------------------------------------------------- // // File heade ...
- matlab基础与实例教程,MATLAB基础与实例教程
系统全面,实例丰富 考虑到Matlab进行仿真和运算分析时的基础知识和实践操作,讲解从基础的变量.函数.数据类型等入手,涉及到数学分析.图形可视化.Simulink仿真.文件读写等,全面地介绍了Mat ...
- redis实例python_生产消费者模式与python+redis实例运用(基础篇)
根据这个图,我们举个简单的例子:假如你去某个餐厅吃饭,点了很多菜,厨师要一个一个菜的做,一个厨师不可能同时做出所有你点的菜,于是你有两个选择:第一个,厨师把所有菜都上齐了,你才开始吃:还有一个选择,做 ...
- python经典程序实例-Python简单基础小程序的实例代码
1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...
- python简单程序实例-Python简单基础小程序的实例代码
1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...
- vue的五个小实例解析其基础功能
学习vue,在网上看到5个小实例,很受用.拿过来和大家一起分享,都是比较常见,基础的功能. 1.利用vue实现导航功能 <!DOCTYPE html> <html lang=&quo ...
- 2个点马氏距离计算实例_数据分析基础:距离度量方式(欧式距离、马氏距离、曼哈顿距离)...
数据分析中,为了评定数据之间的相似度,有很多不同的距离的计算方法,如欧氏距离,马氏距离等等. 欧氏距离 Euclidean distance:欧几里得距离,m维空间中两个点之间的真实距离 离差平方和, ...
- vue结合php增删改查实例,从vue基础开始创建一个简单的增删改查的实例
1.安装vue-clicnpm install vue-cli -g --执行全局安装 2.创建一个webpack的基础项目:命令:vue init webpack myproject; 以下是项目 ...
最新文章
- 清除Squid缓存的小工具
- linux下的find文件查找命令与grep文件内容查找命令(转)
- Java TCP/IP Socket 编程 笔记
- 用vue实现模态框组件
- axure 倒计时_AxureRP教程—模拟倒计时
- python决策树代码解读_建模分析之机器学习算法(附pythonR代码)
- NumPy——生成随机数的学习笔记~
- 因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫 -- 解决方法...
- Atitit 软件体系的进化,是否需要一个处理中心
- JavaEE 企业级分布式高级架构师(七)MongoDB学习笔记(3)
- duliu题之狼抓兔子题解
- 富士施乐Fuji Xerox DocuPrint P158 b 驱动
- Pycharm进入debug模式后一直显示collecting data解决方法
- RE写作Issue问题题库分析与提纲
- java反向查找dns_windows – 反向DNS查找
- 【小睿精选·第七期】基于STM32的DIY蓝牙机械键盘
- Java开发——IDEA
- 【大数据分析】未开先火|北京环球影城网络传播热度洞察
- JAVA编写文件格式转换UTF-8
- 李翰卿治疗小儿五更咳嗽经验