我是靠谱客的博主 现实耳机,最近开发中收集的这篇文章主要介绍verilog中tb仿真文件模板,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        以前总是用ise,它会自动编写仿真文件,所以用了vivado以后就有点生疏。留一个备份,万一以后用到了方便找。

1. Testbench的概念

​        Testbench 是一种用任意语言编写的程序或模块,用于在模拟过程中执行和验证硬件模型的功能正确性。 Verilog 主要用于硬件建模(模拟),该语言包含各种资源,用于格式化,读取,存储,动态分配,比较和写入模拟数据,包括输入激励和输出结果。

2. Testbench的组成组件

​ Testbench 的主要组件如下:

  1. 时间表声明:指定所有延迟的时间单位

  2. Module:它定义了测试文件的top模块,测试文件的top模块通常没有输入输出端口,测试是直接监控寄存器和线网这些内部信号的活动

  3. 内部信号:它将驱动激励信号进入 UUT 并监控 UUT 的响应,信号驱动和监控

  4. UUT 实例化

  5. 激励生成:编写语句以创建激励和程序块

  6. 响应监控和比较:自我测试语句,能报告数值,错误和警告

简单来说,仿真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仿真文件模板所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部