Verilog硬件描述语言在数字电路的设计中使用的非常普遍,无论是哪种语言,仿真都是必不可少的。而且随着设计复杂度的提高,仿真工具的重要性就越来越凸显出来。在一些小的设计中,用TestBench来进行仿真是一个很不错的选择。VHDL与Verilog语言的语法规则不同,它们的TestBench的具体写法也不同,但是应包含的基本结构大体相似,在VHDL的仿真文件中应包含以下几点:实体和结构体声明、信号声明、顶层设计实例化、提供激励;Verilog的仿真文件应包括:模块声明、信号声明、顶层设计实例化、提供激励。大致思想都是相似的。

  简单的说,TestBench就是一种验证手段,从软件层面对设计的硬件电路进行仿真。具体来讲,一般是在你的仿真文件里,产生激励信号,作用于被仿真的设计文件DUT(Design Under Test),产生相应的输出,然后根据输出信号检验设计的电路是否存在问题或者存在哪些问题。

  下面以FPGA板中驱动流水灯的一段程序为例,简单介绍一下两种语言的TestBench的编写。

 1 module led_run(clk,rst,led);2   input  clk,rst;3   output reg [7:0] led;4   reg [25:0] clk_cnt;5   reg clk_tmp;6   reg [3:0] temp;7   8   always@(posedge clk or negedge rst)9   begin
10     if(!rst)
11       begin
12         clk_cnt<=26'd0;
13         clk_tmp<=1'b1;
14       end
15     else
16       begin
17         if(clk_cnt==26'b11111111111111111111111111)
18           begin
19             clk_cnt<=26'd0;
20             clk_tmp<=~clk_tmp;
21           end
22         else
23           clk_cnt<=clk_cnt+1'b1;
24       end
25   end
26
27   always@(posedge clk_tmp or negedge rst)
28   begin
29     if(!rst)
30       temp<=4'd15;
31     else
32       temp<=temp+1'b1;
33   end
34
35   always@(temp)
36   begin
37     case(temp)
38       4'd0 :led<=8'b11111110;
39       4'd1 :led<=8'b11111100;
40       4'd2 :led<=8'b11111000;
41       4'd3 :led<=8'b11110000;
42       4'd4 :led<=8'b11100000;
43       4'd5 :led<=8'b11000000;
44       4'd6 :led<=8'b10000000;
45       4'd7 :led<=8'b00000000;
46       4'd8 :led<=8'b00000001;
47       4'd9 :led<=8'b00000011;
48       4'd10:led<=8'b00000111;
49       4'd11:led<=8'b00001111;
50       4'd12:led<=8'b00011111;
51       4'd13:led<=8'b00111111;
52       4'd14:led<=8'b01111111;
53       4'd15:led<=8'b11111111;
54       default:;
55     endcase
56   end
57
58 endmodule

  上面是一段流水灯的代码,控制8位流水灯依次点亮,再依次熄灭。第一个always语句完成分频功能,第二个always语句用于计数,共16个值,第三个always语句根据计数的值选择LED灯的状态。其中clk、rst分别为时钟和复位信号,led为驱动流水灯的输出信号。接下来针对这一设计编写其TestBench文件。

 1 /************TestBench*************/2 module tb_led_run;3   reg clk,rst;4   wire led;5   6   initial7   begin8     rst=1;9     #30 rst=0;
10     #40 rst=1;
11   end
12
13   initial
14   begin
15     clk=1;
16     forever #20 clk=~clk;
17   end
18
19   led_run led1(.clk(clk),.rst(rst),.led(led));
20 endmodule

  由于只需要时钟和复位信号即可,故在其仿真文件并不复杂,建立测试模块,进行信号声明,在两个initial中分别提供clk和rst信号,最后进行例化。当然注意一点,在仿真时要把分频模块去掉,或者将分频系数改小,否则仿真时不容易观察波形。下面是在Modelsim中仿真得到的波形(分频模块改为2分频)。

  总结起来,Verilog的TestBench有着相对固定的写法:

module test_bench;端口声明语句initialbegin产生时钟信号endinitialbegin提供激励源end例化语句
endmodule

  最主要的是在initial语句中进行激励的生成,这要根据具体的设计来分析。

TestBench 基本写法与框架相关推荐

  1. verilog基础-状态机之FPGA独立按键消抖设计与验证(熟练testbench的写法)

    独立按键消抖设计与验证 本实验主要是为了锻炼状态机的思维模式以及熟练掌握TB的写法 本节主要收获了:define的用法,另外就是,顶层的input在TB中是reg的真正含义,其实就是把激励当做寄存器来 ...

  2. TP框架对数据库的基本操作

    数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作,一步步的讲述一下框架对数据库的操作 想要操作数据库,第一步必然是要:链接数据库 一.链接数据库 (1)找 ...

  3. Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench

    新建工程 打开Vivado软件,直接在欢迎界面点击Create New Project,或在开始菜单中选择File - New Project即可新建工程. 点击Next 输入工程名称和路径. 选择R ...

  4. Verilog的常用testbench模板分享

      楼主在初学verilog的时候就一直对testbench该怎么写感到困惑,之后的学习过程中也陆陆续续地看过一些testbench文件,其中有一些其实相当于就在testbench里重写了一下要验证地 ...

  5. Vivado中Testbench模板(自用)

    1.背景         从ISE切换到Vivado后,一直不习惯该软件的仿真方式.因为有个大麻烦,软件无法自动生成testbench用例.即使网上有VScode搭配插件进行自动生成Testbench ...

  6. 【PHP代码审计】TP框架初次了解学习

    文章目录 TP框架介绍 TP框架审计要点 TP框架文件目录 TP框架入口目录 TP框架路由写法 TP框架调试模式 TP框架介绍 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最 ...

  7. 8086汇编4位bcd码_[走近FPGA]之二进制转BCD码

    注:本文由不愿透露姓名的 @Bulingxx 撰写.以下为正文. 在上一篇文章中介绍了数码管如何在FPGA开发板上实现动态显示,其文章链接如下: 人生状态机:[走近FPGA]之数码管动态显示​zhua ...

  8. Verilog HDL程序笔记2

    Verilog HDL程序笔记2 Verilog HDL程序笔记1:写出属于你的第一个Verilog HDL模块 文章目录 Verilog HDL程序笔记2 前言 一.如何测试模块? 1.仿真平台 2 ...

  9. 搭建Modelsim SE仿真环境-使用do文件仿真

    本章我们介绍仿真环境搭建是基于Modelsim SE的.Modelsim有很多版本,比如说Modelsim-Altera,但是笔者还是建议大家使用Modelsim-SE,Modelsim-Altera ...

  10. Gerrit代码Review入门实战

    代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...

最新文章

  1. 多点Dmall发布系统Mini OS 宣称要五年覆盖百万门店
  2. 浅谈代码审计入门实战:某博客系统最新版审计之旅
  3. 影院平台搭建 - (7)读多写少数据的缓存
  4. Android设备中直接通过shell操作GPIO或者上层c服务直接操作GPIO
  5. myEclipse-svn的安装使用
  6. 标准ACL(Standard ACL)
  7. 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)...
  8. Windows安全中心打不开,无法启动
  9. 苹果企业级开发者账号申请详解
  10. 艺术摄影--曝光与测光(2学时)--SDUST
  11. linux pppd ip up 脚本,Linux下pppd拨号脚本配置(转载)
  12. Excel、Word、PPT显示VB运行时错误53的解决办法
  13. 英雄联盟 LCUAPI
  14. 经典数值RPG游戏——《魔塔》调研报告
  15. Pytorch丨expand函数
  16. 北京宣武区一个居民区停电三个月
  17. 力扣算法学习(十二)
  18. 如何用SPSS进行数据分析?
  19. 基于uniapp校园帮外卖跑腿快递代拿平台设计【还可发布到小程序和HTML5】
  20. Mtk Ft6306 touch 驱动

热门文章

  1. 日常开支记账,自动统计用它就够了
  2. 微信开放平台授权登录详细流程-第三方登录
  3. c语言编写比赛评分程序,比赛评分系统c语言课程设计.doc
  4. android水印的添加,Android添加水印的正确方法 只要三步!
  5. 交互式应用安全测试(IAST)学习笔记
  6. windows系统更换鼠标指针
  7. 贱人工具箱使用技巧5——批量修改文字
  8. 计算机word如何计算年龄,Excel 如何自动计算年龄
  9. 【毕业季·进击的技术er】大学生计算机毕业设计应该这样写
  10. 我的盖洛普“优势识别器”测试证书