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、实例化
mealy #(
        .WIDTH        (8      ),    //宽度    模块内部的有参数,可以在外部配置
        .DEPTH        (16     )     //深度
) mealy_inst (
		.clk          (clk    ), 
		.rst_n        (rst_n  ), 
		.din          (din    ), 
		.dout         (dout   )
);

endmodule

 仿真全部报错原因:

  • 11
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

内有小猪卖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值