当前位置: 首页 > 工具软件 > testbench > 使用案例 >

Vivado中Testbench模板(自用)

劳法
2023-12-01

1.背景

        从ISE切换到Vivado后,一直不习惯该软件的仿真方式。因为有个大麻烦,软件无法自动生成testbench用例。即使网上有VScode搭配插件进行自动生成Testbench的方案,但是实践下来,需要配置python环境,公司电脑对软件的安装设置了很多麻烦,尝试了好久一直出问题,遂放弃。考虑到本身脚本生成的测试用例也只是简略的模板化代码,于是干脆回到原始时代,手写Testbench吧。因为Testbench本身有固定的套路可遵循,可以做一个总结归纳搞一个通用的,以后直接复制过来修修改改就能用。

2.Testbench模板

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/08/16 14:56:15
// Design Name: 
// Module Name: tb_AD9575_SPI_2
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

//============== (1) ==================
   //模块和相关信号声明
module tb_AD9575_SPI_2(

    );

    parameter		                   	SEND_DATA_WIDTH = 24;
    parameter		                   	RECE_DATA_WIDTH = 24;
// 输入信号作为reg  输出信号作为wire
    reg                                  clk;//主时钟
    reg                                  rst_n;

    reg                                  spi_start_i  ;                    
    reg   [24-1:0]                       spi_send_data ;    

    wire                                spi_trans_end;                         
    wire  [24-1:0]                      spi_rece_data;                     

    wire                                 spi_cs;                                 
    wire                                 spi_sclk ;                            
    wire                                 spi_mosi;                             
    reg                                  spi_miso;           

//============== (2) ==================
    //主时钟生成  两种生成时钟方法可选择  采用initial用法的话 initiala不能被编译
	initial begin//125M
		clk = 0;
		forever begin
		#4 clk = ~clk;end
	
	end

	// initial 
	// clk = 0;
	// always #20 clk = ~clk;
	
	

//============== (3) ==================
//复位产生
    initial begin
        rst_n         = 1'b0 ;
        #8 rst_n      = 1'b1 ;
    end


//============== (4) ==================
 //激励产生

	initial begin
		spi_start_i = 0;
		 
		#16 
        spi_start_i = 1;
        spi_send_data=2;
        #24
        spi_start_i = 0;
        spi_send_data=2;


        wait (spi_trans_end ) 

        spi_start_i = 1;
        spi_send_data=10485760;
        #24
        spi_start_i = 0;
       
        wait (spi_trans_end ) 


        begin  
         $display("SPI translation is over");
        end

        #500
        $stop;
	
	end


    //============== (5) ==================
    //所需仿真的模块例化

	 AD9575_SPI_2 #
     (
        .conf_width		(SEND_DATA_WIDTH),
        .rece_width		(RECE_DATA_WIDTH)
     )
     AD9575_SPI_2_inst(

		.clk			(clk			),
		.rst_n			(rst_n			),
		
		.spi_start_i	(spi_start_i	),
		.spi_send_data	(spi_send_data	),
		.spi_trans_end	(spi_trans_end	),
		.spi_rece_data	(spi_rece_data	),

		.spi_cs			(spi_cs			),
		.spi_sclk		(spi_sclk		),
		.spi_mosi		(spi_mosi		),
		.spi_miso		(spi_miso		)
		);



    //============== (6) ==================
    //自动检查对比 输出相关的信息





    //============== (7) ==================
    //仿真完成







endmodule

3.参考资料

1.6.6 Verilog 仿真激励 | 菜鸟教程

2.IC验证之“Timescale”使用小谈(一) - 腾讯云开发者社区-腾讯云

3.testbench中,forever产生时钟出错 FPGA,verilog,testbench,forever - 最大最专业的FPGA论坛

4.Testbench 的编写与应用 | 教程

5.十天学会FPGA之三——testbench的写法 - 知乎

6.testbench常用语句 很详细相当实用 - yf869778412 - 博客园

7.Testbench编写指南(4)自动化验证方法_FPGADesigner的博客-CSDN博客

 类似资料: