概述
以前总是用ise,它会自动编写仿真文件,所以用了vivado以后就有点生疏。留一个备份,万一以后用到了方便找。
1. Testbench的概念
Testbench 是一种用任意语言编写的程序或模块,用于在模拟过程中执行和验证硬件模型的功能正确性。 Verilog 主要用于硬件建模(模拟),该语言包含各种资源,用于格式化,读取,存储,动态分配,比较和写入模拟数据,包括输入激励和输出结果。
2. Testbench的组成组件
Testbench 的主要组件如下:
-
时间表声明:指定所有延迟的时间单位
-
Module:它定义了测试文件的top模块,测试文件的top模块通常没有输入输出端口,测试是直接监控寄存器和线网这些内部信号的活动
-
内部信号:它将驱动激励信号进入 UUT 并监控 UUT 的响应,信号驱动和监控
-
UUT 实例化
-
激励生成:编写语句以创建激励和程序块
-
响应监控和比较:自我测试语句,能报告数值,错误和警告
简单来说,仿真tb文件主要包含4部分:顺序无所谓,可以打乱。
1、初始化
2、产生激励
3、仿真暂停
4、实例化
下面就以mealy型状态机,检测序列 “ 01101101 ”,编写仿真文件。
`timescale 1ns / 1ps module tb_mealy01101101; //注意分号,不加;仿真会出现未知态(红色)和高阻态(蓝色) //inputs reg clk; //在always和initial块里的变量要用reg型变量 reg rst_n; reg din; //如果输入是多位,别忘了加位宽。 reg [5:0] din; //outputs wire dout; //1、初始化 initial begin clk = 0; rst_n = 0; din = 0; end //2、产生激励 //时钟激励(写法1) always #10 clk=~clk; /*时钟激励(写法2) forever begin #10 clk=~clk; end*/ always @(posedge clk) begin #100; rst_n = 1'b1; din = 1'b1; #100; din = 1'b1; #100; //#100 din = 1'b0; din = 1'b0; //代表100ns后din由上一个状态1 变为此时的状态0 #100; din = 1'b1; end //3、仿真暂停 initial begin #600 $finish(); end //4、实例化 mealy01101101 uut ( .clk(clk), .rst_n(rst_n), .din(din), .dout(dout) ); endmodule
最后
以上就是现实耳机为你收集整理的verilog中tb仿真文件模板的全部内容,希望文章能够帮你解决verilog中tb仿真文件模板所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复