//------<testbench文件的基本结构>------
//`timescale 仿真单位/仿真精度
`timescale xx/xx
//仿真文件模块名
module xx_tb;
//定义声明信号或变量
...
...
//例化设计模块
...
...
//使用always语句产生激励波形
...
...
//使用initial产生激励波形
initial begin
...
...
...
$stop;
end
endmodule
🎈举个例子详细说明一下:
目前已经编写好了一个led闪烁的模块,我们需要对该模块进行测试,以确保模块设计的正确性,模块代码如下:
led_flash.v:
//------<模块代码>------
module led\_flash(
input Clk;
input Rst_n;
output reg led
);
//定义led状态
parameter led_on = 1'b0;
parameter led_off = 1'b1;
//定义计数器寄存器
reg [24:0]cnt;
//定义计数器参数
parameter cnt_max = 24'd24_999_999;
parameter cnt_min = 24'd0;
parameter cnt_add = 1'b1;
//计数器
always@(posedge Clk or negedge Rst_n)begin
if(!Rst_n)
cnt <= cnt_min;
else if(cnt == cnt_max)
cnt <= cnt_min;
else
cnt <= cnt + cnt_add;
end
//led
always@(posedge Clk or negedge Rst_n)begin
if(!Rst_n)
led <= led_off;
else if(cnt == cnt_max)
led <= ~led;
else
led <= led;
end
endmodule
接下来根据上述模块编写测试激励文件。
3.1 声明仿真的单位和精度
`timescale时间刻度指令用来说明模块工作的时间单位和时间精度,基本语句如下:
`timescale 时间单位/时间精度
时间单位和时间精度可以以秒、毫秒、纳秒、皮秒或飞秒作为度量,具体数值可以选择1、10或100,如:
`timescale 10ns/1ns
该语句定义了当前模块中的仿真时间单位是10ns,仿真精度是1ns,语法上要求时间精度必须小于等于时间单位,即前面的数值要大于等于后面的数值。
测试模块中经常使用 #号 延迟来生成信号,例如:
本文详细介绍了如何为一个LED闪烁模块编写Verilog测试激励文件,包括设置timescale仿真单位和精度,定义宏、模块名、输入输出信号,实例化模块,以及使用initial和always语句生成激励信号。
最低0.47元/天 解锁文章
622

被折叠的 条评论
为什么被折叠?



