简单testbench测试代码的编写
编写testbench的主要目的是为了对使用硬件描述语言(HDL)设计的电路进行仿真验证,测试设计电路的功能、部分性能是否与预期的目标相符。
以以下源代码为例
module test(
input [1:0]SW,
output [1:0]LED
);
assign LED[1]=SW[1];
assign LED[0]=SW[0];
endmodule
testbench测试代码编写步骤如下:
测试代码模块命名
module tb_test(
);
定义变量类型
对于 testbench 而言,端口应当和被测试的 module 一一对应。
端口分为 input,output 和 inout 类型产生激励信号的时候,
input 对应的端口应当申明为 reg,
output 对应的端口申明为 wire。
reg [1:0]SW;
wire [1:0]LED;
例化模块,并将输入输出的信号和 2 中定义的变量进行关联。
test uut(
.SW(SW),
.LED(LED));
直接赋值,一般用 initial 块给信号赋初值,initial 块执行一次,always 或者 forever 表示由事件激发反复执行。
`timescale 1ns / 1ps
module tb_test(
);
reg [1:0]SW;
wire [1:0]LED;
test uut(
.SW(SW),
.LED(LED));
initial
SW=0;
always
begin
#50
SW=2'b00;
#50;
SW=2'b01;
#50;
SW=2'b10;
#50;
SW=2'b11;
end
endmodule
其中#50指延迟相应的时间单位,该时间单位由 timscale 决定。
一般在 testbench 的开头定义时间单位和仿真精度
timescale 1ns/1ps
前面一个是代表时间单位,后面一个代表仿真时间精度。
小结
module Test_bench()//一般简单的测试文件无输入输出
信号或变量声明定义
逻辑设计中输入信号在这里对应reg型变量
逻辑设计中的输出信号在这里对应wire型
使用initial或always语句块产生激励
例化猜测是模块UT
监控和比较输出响应
endmodule