在FPGA整个开发周期中测试往往占大部分的时间,测试分为仿真测试和板级调试,大型的系统板级调试费事费力,在上板之前进行仿真测试,往往能尽早发现并修复各种大大小小的bug,减轻板级调试的难度。

testbench即测试平台,主要是设计一个测试平台,给待验证设计提供各种激励,验证相应响应是否满足要求。

        

1、一个完整的testbench可以包含:

1) 产生时钟和复位信号(必须)

2) 产生激励信号(非必须)

3) 例化待测试模块(必须)

4) 响应验证(非必须)

5) 终止仿真(非必须)

2、常用技巧

1) 封装常用子程序。如将打印功能封装成任务,使用时例化print_task模块,就可使用其打印任务。


module print_task();// 显示 warning 报告, 同时显示当前时间和警告内容(由用户输入)
task warning;input [80 * 8:1] msg;begin$write("WARNING at %t : %s", $time, msg);end
endtask// 显示 error 报告, 同时显示当前时间和错误内容(由用户输入)
task error;input [80 * 8:1] msg;begin$write("-ERROR- at %t : %s", $time, msg);end
endtask// 显示 fatal 报告, 同时显示当前时间和致命内容(由用户输入)
task fatal;input [80 * 8:1] msg;begin$write("*FATAL* at %t : %s", $time, msg);end
endtask// 显示 terminate 报告, 同时显示当前时间和结束信息(系统产生)
task terminate;begin$write("Simulation completed\n");end
endtaskendmodule

2) 封装常用功能

/** @Author: * @Date: * @LastEditors: * @LastEditTime: * @FilePath: sys_ctrl_task.v* @Description: testbench时钟与复位模块* */`timescale 1ns/1ps
module sys_ctrl_task(output  reg    clk,   // 时钟output  reg    rst_n  // 复位信号);parameter CLK_PERIOD = 20;  // 时钟周期,单位ns//----------------------------------------------------------------//系统时钟信号产生//----------------------------------------------------------------initial beginclk = 1'b0;forever begin#(CLK_PERIOD/2) clk = ~clk;endend//----------------------------------------------------------------//系统复位任务封装//----------------------------------------------------------------task reset;input [31:0] reset_time;begin rst_n = 1'b0;#reset_time;rst_n = 1'b1;endendtaskendmodule

3) 防止读写紊乱,使用非阻塞赋值语句

4) 防止同时调用任务,可加入检错机制,在该任务已被调用时,停止该次调用

10、Testbench设计技巧相关推荐

  1. 原始样式增加标题_好看又实用! 10个标题字体设计技巧

    很多新手设计师刚做海报设计的时候,经常直接使用字库的字体,觉得字体设计很难,所以很少自己去设计字体,其实字体设计有很多种形式,今天我们分享10种常见适用于标题的字体设计技巧,好看又实用,足够让你设计出 ...

  2. 10个用好模糊效果的超实用设计技巧

    http://bestwebgallery.com/ 模糊的(英: Blurred)照片图像:虽然在摄影中是犯了错误的照片,但也可以成为一个有用的设计工具. 这次的话题是,不是因为有了品质差的照片而在 ...

  3. 【模糊背景制作工具】Canva在线设计!10个用好模糊效果的超实用设计技巧

    编者按:模糊效果最近这两年特别流行,不过它的作用可不仅仅是模糊个背景这么简单,今天@喪心病狂十六夜貓 这篇好文,总结了10个能帮你用好模糊背景的设计技巧,绝对让你大开眼界!最后附上一个快速模糊的神器, ...

  4. 21个UI设计必会的设计技巧

    想要成为一名合格的UI设计师,必须要有扎实的基础,和丰富的设计经验,本期小编为大家介绍的UI设计培训教程是21个UI设计必会的设计技巧,可帮助大家提升自己. UI设计培训技术分享:一个好的UI设计是由 ...

  5. 14 个实用的数据库设计技巧,一次性教给你!

    目录 原始单据与实体之间的关系 主键与外键 基本表的性质 范式标准 通俗地理解三个范式 要善于识别与正确处理多对多的关系 主键PK的取值方法 正确认识数据冗余 E--R图没有标准答案 视图技术在数据库 ...

  6. .NET框架设计—常被忽视的框架设计技巧

    阅读目录: 1.开篇介绍 2.元数据缓存池模式(在运行时构造元数据缓存池) 2.1.元数据设计模式(抽象出对数据的描述数据) 2.2.借助Dynamic来改变IOC.AOP动态绑定的问题 2.3.元数 ...

  7. 十个简单好用的设计技巧[SM]

    复杂的设计技巧总是很花时间,也实在是-.复杂 (-_-||). 高级效果 为设计增色不少,但如果用得不对,只会影响用户对重点内容的关注.高级效果可能正好是一项好的设计的冲击力所在,但即便如此,也还是需 ...

  8. 14个数据库的设计技巧 (来自Blogcn中我的窝)

    1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对 ...

  9. 14个实用的数据库设计技巧!

    作者: sirfei 来源:blog.csdn.net/sirfei/article/details/434994 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它 ...

最新文章

  1. 【linux基础】重命名文件和文件夹
  2. login控件设置居中
  3. linux help命令编写,Linux shell命令帮助格式详解
  4. php调用image类提示不存在的字体,php – 无效的字体文件名(imagettfbox)
  5. java手动切换成独立显卡_MacBook如何一键切换显卡 MacBook显卡切换方法【详细介绍】...
  6. 编写高质量JS代码上
  7. 在window7 64位下Oracle 10g 数据库中PLSQL Developer配置和使用
  8. 考勤系统(源代码+论文+答辩PPT+指导书)
  9. windows编译python扩展Unable to find vcvarsall
  10. 基于Axis1.4的webservice接口开发(环境搭建)
  11. PHP关于按位取反结果的推导过程
  12. 顺序结构—— 华氏温度转摄氏温度
  13. 青龙脚本合集(不定期更新版)
  14. word打字时后面的字会消失是什么原因?如何解决?
  15. 小白先学哪一门编程语言
  16. Windows CMD中的findstr命令详解
  17. wps linux 程序转pdf文件,wps转pdf服务器
  18. Arduino控制数码管显示,亮度,冒号,字符(四段共阳)
  19. 乐学python慕课答案_乐学软件工程,中国大学MOOC(慕课)答案公众号搜题
  20. 数字签名算法的原理与设计

热门文章

  1. Java API操作ES
  2. oracle 标示符太长,Oracle PLS-00114: 标识符 ' ' 太长
  3. Python爬虫:制作一个属于自己的IP代理模块2
  4. 今天下午去京东物流应聘快递员
  5. Java------Thread线程
  6. 计算机应用自荐信,计算机应用毕业生自荐信
  7. 2020年魔兽联盟优势服务器,商业化的《魔兽世界》怀旧服,2020年又会带给我们怎样的惊喜?...
  8. 彻底解决 Ubuntu 10.04 对部分声卡不支持或耳机无声的问题
  9. 123720服务器网站,123720a.com
  10. python什么是类的继承_Python类的继承(进阶5)