TestBench基本写法与语法详解

一、TestBench简介

一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的。学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情。而 RTL 逻辑设计中,学会根据硬件逻辑来写测试程序,即Testbench 是尤其重要的。 Verilog 测试平台是一个例化的待测(MUT) 模块,重要的是给它施加激励并观测其输出。逻辑模块与其对应的测试平台共同组成仿真模型,应用这个模型可以测试该模块能否符合自己的设计要求。

编写 TESTBENCH 的目的是为了对使用硬件描述语言设计的电路进行仿真验证,测试设计电路的功能、性能与设计的预期是否相符。通常,编写测试文件的过程如下:

• 产生模拟激励(波形); • 将产生的激励加入到被测试模块中并观察其响应; • 将输出响应与期望值相比较。

二、完整的 Test bench文件结构

通常,一个完整的测试文件其结构为

`timescale 仿真单位/仿真精度

module Test_bench();//通常无输入无输出

信号或变量声明定义

逻辑设计中输入对应 reg 型

逻辑设计中输出对应 wire 型

使用 initial 或 always 语句产生激励

例化待测试模块

监控和比较输出响应

endmodule

声明仿真的单位和精度

三、时钟激励设计

下面列举出一些常用的封装子程序,这些是常用的写法,在很多应用中都能用到。

/*----------------------------------------------------------------

时钟激励产生方法一: 50%占空比时钟

----------------------------------------------------------------*/

parameter ClockPeriod=10;

initial

begin

clk_i=0;

forever

#(ClockPeriod/2) clk_i=~clk_i;

end

/*----------------------------------------------------------------

时钟激励产生方法二: 50%占空比时钟

----------------------------------------------------------------*/

initial

begin

clk_i=0;

always #(ClockPe