本文首发于公众号【木叶芯】,版权所有,禁止转载。

如需转载,请在评论区留言或私信申请,经同意后可转载,否则属于侵权行为

作者昵称:城外南风起

原文链接:testbench编写流程的简单举例

————————————————

目录

  • 顶层结构
  • 生成clk_tb
  • 生成resetb
  • 初始化变量
  • DUT例化
  • 写任务
  • 读任务
  • 测试实现
  • 仿真结果
  • 参考文献

顶层结构

将模块device_regs_withfunction作为DUT编写一个简单的testbench。该模块的功能是对一组寄存器进行读写操作。下图为测试平台的顶层结构。任务reg_write产生和寄存器写操作相关的控制信号,任务reg_read产生和寄存器读操作相关的控制信号,reg_read还可以将期望读出的结果与实际读出的数据进行比较。如果二者不匹配,它将给出一条错误消息。

`timescale 1ns/10ps
module testbench_top ();//no inputs or outputs here
reg [3:0]   address_tb;
reg [7:OJ   wrdata_tb;
reg         write_en_tb, read_en_tb;
reg         clk_tb, resetb;
wire [7:0]  rddata_tb;
//**************************************************************
parameter   CLKTB_HALF_PERIOD = 5;    //100MHz clock
parameter   RST_DEASSERT_DLY = 100;
parameter   REG0_OFFSET = 4'b0000, REGl_OFFSET = 4'b0001, REG2_OFFSET = 4'b0010, REG3_OFfSET = 4'b0011;

生成clk_tb

生成resetb

初始化变量

DUT例化

写任务

写任务用于写操作,它驱动相应的地址,写入数据和写使能信号write_en。DUT接收这些信号,执行实际的写操作。我们可以通过写任务来给出需要的写入地址和数据。在后面的testbench中,我们将调用该任务。下面是写任务的例子。

读任务

此任务用于读操作。读任务将读出寄存器的地址和读使能信号read_en传递给DUT。DUT实现实际的读操作,并将对应的数据输出给testbench。读任务将期望的读出数据与实际读出的数据进行比较,并将比较结果显示出来。下面是读任务的例子。

测试实现

现在,我们将使用上面的任务将不同的数据写入寄存器,然后再将寄存器中的数据读取出来。在testbench中.我们写入的是不同的常数,我们还可以产生随机数或者从文本文件中读出数据并写入DUT中,此时可以进行更为全面和细致的仿真验证,举例如下。

仿真结果

data matches: expected_data = a5, actual data = a5
data matches: expected_data = a6, actual data = a6
data matches: expected_data = a7, actual data = a7
data matches: expected_data = a8. actual data = a8

参考文献

[1] (美),Kishore,Mishra著.Verilog高级数字系统设计技术与实例分析[M].电子工业出版社,2018.

————————————————

感谢您的阅读,欢迎 点赞 / 评论 / 收藏 / 打赏 ~

我是城外南风起,欢迎关注我的公众号【木叶芯】。


以下链接可以快速搜索公众号内的文章:号内搜

木叶飞舞之处,火亦生生不息。

testbench编写流程的简单举例相关推荐

  1. Java编程技巧之单元测试用例编写流程

    简介: 立足于"如何来编写单元测试用例",让大家"有章可循",快速编写出单元测试用例. 作者 | 常意 来源 | 阿里技术公众号 温馨提示:本文较长,同学们可收 ...

  2. ROS入门笔记(十一):编写与测试简单的Service和Client (Python)

    ROS入门笔记(十一):编写与测试简单的Service和Client (Python) 文章目录 01 导读 02 功能包的创建 03 在功能包中创建自定义服务类型 3.1 定义srv文件 3.2 在 ...

  3. ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)

    ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++) 文章目录 01 导读 02 功能包的创建 03 功能包的源代码编写 3.1 编写发布器节点(talker.cpp) 3.2 编写订阅 ...

  4. Testbench编写指南(2)文件的读写操作

    Testbench编写指南是博主新开的一个系列,主要介绍在编写testbench时使用到的技巧,让编写者的水平不再仅仅停留在时钟信号.复位信号等简单信号的设置上,更好的完成对设计的仿真工作. 第2篇的 ...

  5. 【testbench】第1篇:testbench编写规则

    本文依据网络资料及工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,禁止私自转载. 文章专栏:<黑猫的FPGA知识合集> 1 概述 实现仿真需要自己增加testbench文 ...

  6. 【审批工作流camunda教程】(四):不使用camunda-modeler,使用Fluent Builder API,代码编写流程定义并部署

    教程一: 创建camunda项目=>部署流程定义=>创建流程实例=>走完流程实例 教程二: camunda数据库中的48张表分别的大致含义,数据库表结构介绍 教程三: 下载camun ...

  7. 测试用例的基本介绍及编写流程

    1.什么是测试用例? (1)测试用列(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境.操作步骤.测试数据.预期结果等要素. (2)测试用列(Test Case ...

  8. 软件著作权申请流程很简单,不过这些事项需要格外注意

    上年年末时编写了一个软件,然后就想顺便申请一个软著.一开始在网上看到有人自主申请成功以后,就想着自己申请软著,但了解到自主申请软著需要一到四个月的时间,而找代理机构却可以最快几天就拿证以后,为避免夜长 ...

  9. 编写运行最简单的java程序——使用记事本编写java程序

    编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...

最新文章

  1. online Solver of a Bimatrix Game
  2. android 音乐播放器 获取sd卡所有音乐文件,Android Studio音乐播放器无法读取SD卡,只有内部存储器...
  3. numpy基础(part6)--协方差与相关系数
  4. vue --- vue中的几个钩子属性
  5. 浅谈HR谈薪水的技巧
  6. hdu 2795 Billboard
  7. matlab 等字符数 输出,Matlab 输入输出函数整理
  8. 怎样将PDF作为矢量图插入PPT中
  9. 毕业答辩ppt怎么做?
  10. 欧美风游戏音乐的特点
  11. Office快捷键大全之四(Frontpage快捷键)
  12. 关于ubuntu系统不显示wifi图标或WiFi无法连接问题解答
  13. 给刚入市朋友的几点建议
  14. [P4]源码管理 - perforce(p4)的分支与集成
  15. 毕业设计-基于机器学习的动态 CAPM 模型
  16. 初学编程,从抄代码开始就够了吗?看看我的故事!
  17. 驱动文件中只有cat/inf/dll文件,怎么安装
  18. html input跳转页面,html input type=button 页面跳转
  19. php纺织系统源码,XYCMS纺织企业建站系统
  20. java程序拦截dde漏洞问题_勒索病毒又更新 Office DDE漏洞被利用

热门文章

  1. android添加悬浮窗,在Android中使用WindowManager实现悬浮窗口
  2. 用vs2017写php,windows下开发php7.2拓展,vs2017
  3. 学习Nginx看这篇就够了
  4. c、c++的getchar()函数
  5. directives 自定义指令
  6. 使用Java打印字母菱形
  7. 计算机系统结构知识总结,计算机基础知识总结
  8. for循环的执行顺序,i++和++i
  9. jrtplib收发实例
  10. 汇编语言学习之基本指令(上)