TestBench 基本写法与框架
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 基本写法与框架相关推荐
- verilog基础-状态机之FPGA独立按键消抖设计与验证(熟练testbench的写法)
独立按键消抖设计与验证 本实验主要是为了锻炼状态机的思维模式以及熟练掌握TB的写法 本节主要收获了:define的用法,另外就是,顶层的input在TB中是reg的真正含义,其实就是把激励当做寄存器来 ...
- TP框架对数据库的基本操作
数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作,一步步的讲述一下框架对数据库的操作 想要操作数据库,第一步必然是要:链接数据库 一.链接数据库 (1)找 ...
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
新建工程 打开Vivado软件,直接在欢迎界面点击Create New Project,或在开始菜单中选择File - New Project即可新建工程. 点击Next 输入工程名称和路径. 选择R ...
- Verilog的常用testbench模板分享
楼主在初学verilog的时候就一直对testbench该怎么写感到困惑,之后的学习过程中也陆陆续续地看过一些testbench文件,其中有一些其实相当于就在testbench里重写了一下要验证地 ...
- Vivado中Testbench模板(自用)
1.背景 从ISE切换到Vivado后,一直不习惯该软件的仿真方式.因为有个大麻烦,软件无法自动生成testbench用例.即使网上有VScode搭配插件进行自动生成Testbench ...
- 【PHP代码审计】TP框架初次了解学习
文章目录 TP框架介绍 TP框架审计要点 TP框架文件目录 TP框架入口目录 TP框架路由写法 TP框架调试模式 TP框架介绍 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最 ...
- 8086汇编4位bcd码_[走近FPGA]之二进制转BCD码
注:本文由不愿透露姓名的 @Bulingxx 撰写.以下为正文. 在上一篇文章中介绍了数码管如何在FPGA开发板上实现动态显示,其文章链接如下: 人生状态机:[走近FPGA]之数码管动态显示zhua ...
- Verilog HDL程序笔记2
Verilog HDL程序笔记2 Verilog HDL程序笔记1:写出属于你的第一个Verilog HDL模块 文章目录 Verilog HDL程序笔记2 前言 一.如何测试模块? 1.仿真平台 2 ...
- 搭建Modelsim SE仿真环境-使用do文件仿真
本章我们介绍仿真环境搭建是基于Modelsim SE的.Modelsim有很多版本,比如说Modelsim-Altera,但是笔者还是建议大家使用Modelsim-SE,Modelsim-Altera ...
- Gerrit代码Review入门实战
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...
最新文章
- 多点Dmall发布系统Mini OS 宣称要五年覆盖百万门店
- 浅谈代码审计入门实战:某博客系统最新版审计之旅
- 影院平台搭建 - (7)读多写少数据的缓存
- Android设备中直接通过shell操作GPIO或者上层c服务直接操作GPIO
- myEclipse-svn的安装使用
- 标准ACL(Standard ACL)
- 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)...
- Windows安全中心打不开,无法启动
- 苹果企业级开发者账号申请详解
- 艺术摄影--曝光与测光(2学时)--SDUST
- linux pppd ip up 脚本,Linux下pppd拨号脚本配置(转载)
- Excel、Word、PPT显示VB运行时错误53的解决办法
- 英雄联盟 LCUAPI
- 经典数值RPG游戏——《魔塔》调研报告
- Pytorch丨expand函数
- 北京宣武区一个居民区停电三个月
- 力扣算法学习(十二)
- 如何用SPSS进行数据分析?
- 基于uniapp校园帮外卖跑腿快递代拿平台设计【还可发布到小程序和HTML5】
- Mtk Ft6306 touch 驱动
热门文章
- 日常开支记账,自动统计用它就够了
- 微信开放平台授权登录详细流程-第三方登录
- c语言编写比赛评分程序,比赛评分系统c语言课程设计.doc
- android水印的添加,Android添加水印的正确方法 只要三步!
- 交互式应用安全测试(IAST)学习笔记
- windows系统更换鼠标指针
- 贱人工具箱使用技巧5——批量修改文字
- 计算机word如何计算年龄,Excel 如何自动计算年龄
- 【毕业季·进击的技术er】大学生计算机毕业设计应该这样写
- 我的盖洛普“优势识别器”测试证书