首页->【芯航线EDA助学小组】

1018 2

在这里主要总结一下关于我对Testbench的应用和Quartus软件中自带的模板使用

1.Testbench

        关于testbench,其实就是一种验证的手段。首先,任何设计都是会有输入输出的。但是在软件环境中没有激励输入,也不会对你设计的输出正确性进行评估。那么此时就体现出Testbench的重要了 --模拟实际环境的输入激励和输出校验的一种。在Testbench中你可以对你的设计从软件层面上进行分析和校验。

        testbench更像一个激励的产生器。

举个简单的例子 一个简单的功能模块可能有几个input和output。

 ///////////////////////////模块///////////////////////////////
    input   clk;
    input   rst_n;
    input   en;
    
    output reg [7:0]data;
    always @(posedge clk or negedge rst_n )
    if(!rst_n)
        data <= 8'd0;
    else if(en)
        data <= data + 1'b1;
    else
        data <= data;
//////////////////////testbench////////////////////////////////////    
    //待测模块中的input类型
    reg clock;////时钟输入
    reg rst_n;//复位
    reg en;//使能
    //待测模块中output类型
    wire [7:0]data;//数据输入
    //时钟产生模块
    initial clock=1;
    always #10 clock= ~clock;
    //激励信号产生
    initial begin
	rst_n = 1'b0;
	#20;
	rst_n = 1'b1;
	en = 1;//使能信号有效,data<= data+1;数据自加
	#1000;
	en = 0;	//使能信号无效,data<=data
	#500
	$stop;//以实现完整信号仿真要求,使用$stop结束仿真
    end
    //例化模块,其中XXX必须同模块名  ? 可以自定义 但最好使用模块名
    XXX  ?(//注意clock要和reg clock 相同 ,如果定义reg clk 那么此时应该用.clk(clk)
            .clk(clock),
            .rst_n(rst_n),
            .en(en),
            .data(data),
            );

然后保存,添加仿真脚本,即可在ModelSim查看仿真信号了.......

总之,简单的来说testbench就是给模块中的输入信号做出激励赋值,用来验证仿真结果是否同设计需求

下面为testbench的模板,可直接套用

`timescale 1ns/1ns
`define clock_period 20 //定义时钟
module XXX_tb;
        //input类型
        reg ...
       //output 类型
       wire ...
        //时钟产生
	initial clk =1;
	always #(`clock_period/2) clk = ~clk;
	//激励产生
	initial begin
		#1;//Difference clock edge
		rst_n = 1'b0;
		#(`clock_period*5) //延时几个周期
		rst_n = 1'b1;
		#(`clock_period);
		....
		....
		#(`clock_period*2000);
		$stop;//注意确保延时周期确保信号完整性
	end
    XXX XXX(
              //全部端口名例化连接 ,注意不要少 "."
              ...
              );
endmodule


2.Quartus软件中自带的模板

位置如图:

2016-05-23_195107.jpg

        关于Quartus软件中自带的模板我想很多伙伴应该和我一样刚学的时候都没仔细了解过....

实际对于初学者,Quartus软件中自带的模板是官方提供的各种使用语法使用规范。所谓一千个读者就有一千个哈姆雷特...无论是查资料还是看别人的代码,感觉每个人的代码有每个人的"个性".......尤其是见到各种奇葩的书写,难理解不说...很浪费时间.....有同感的举个爪^^...........我只想说代码规范点无论在哪都很重要!

不废话了,下面以 single_port_ram 举个例子介绍一下模板的使用

2016-05-23_195956.jpg

有没有一种原汁原味的感觉....代码风格是不是看着简洁清晰....个人感觉如此昂!

我们在Verilog 中找到自己需要的模板  点击右下角 insert  就OK了 

2016-05-23_200509.jpg

这样拿来直接用的模板  我们只要改写其中的一些数据就行,很简单吧.....有兴趣的自己看看别的,大致了解一下都有哪些模板,关键时刻直接插入就行了

下面再来介绍一下保存自己的模板,用的时候同样插入就行

2016-05-23_200918.jpg

好了....就介绍到这里.......各位如果有更多技能,请分享一下,谢谢!


备注:个人的工程习惯工程模板: 仅供参考

2016-05-23_201346.jpg

个人能力有限,出错请见谅,很期待能一起学习讨论

                    

                                                                                             编辑 :  Augus yang

                                                                                              时间  :2016/5/23





楼主可见

  1. Augus 2#

    期待各位补充。。。更多Get~

  2. 小梅哥 1#

    总结的很好,谢谢分享,赞一个