赞
踩
Testbench仿真文件编写
Testbench是一种验证手段,从软件层面对设计的硬件电路进行仿真。在仿真文件里产生的激励信号,作用于被仿真设计文件DUT(Design Under Test) ,产生相应输出,然后根据输出信号检验设计的电路是否存在问题或存在哪些问题。
Verilog包含: 1)模块声明 2)信号声明 3)顶层设计实例化 4)提供激励 5)进行测试
testbench的一般结构:
- module Test_Bench();//通常无输入输出
-
- 信号或变量声明定义 //1
-
- 逻辑设计中输入对应的reg型 //2
-
- 逻辑设计中输出对应的wire型 //3
-
- 使用 initial 或 always 语句产生激励 //4 initial产生测试信号 ,发送到待测模块(相当于一个信号源);always语句反馈回来(相当于一个示波器)(不一定有)
-
- 例化待测试模块DUT //5 个人完成部分
-
- 监控和比较输出响应 //6 (不一定有)
-
- endmodule
操作:1.设置好仿真文件
2.通过quartus 自动生成testbench模板,选择 processing→start→start testbench template writer,默认在 simulation\modelsim文件夹下生成一个 Testbench.vt 格式文件
3.设置时间刻度, 'timescale 时间单位/时间精确
例:'timescale 1ns/1ps 表示仿真的时间单位为1ns,精度为1ps
4.编写测试模块
initial:主动产生激励;只执行一次
always:被动;重复
需要在initial里多次运行一个语句块,嵌入循环(while,repeat,for,forever等),如:
- initial
- begin
- forever/*无条件连续执行*/
- begin
- ……
- end
- end
5.激励产生
1)
- parameter ClockPerilod=10
- initial
- begin
- clk_i=0;
- forever
- #(ClockPerilod/2)clk_i=~clk_i;//最常用的产生方式
- end
10是时间精度的10倍,clockperiod是时间精度的倍数;#是延迟多少时间5ps,取反
2)
- parameter ClockPerilod=10
- initial
- begin
- clk_i=0;
- #(ClockPerilod/2)clk_i=~clk_i;
- end
1个
3)固定数量的时钟脉冲
- parameter ClockPerilod=10
- initial
- begin
- clk_i=0;
- repeat(6)
- #(ClockPerilod/2)clk_i=~clk_i;
- end
重复6次,周期为3
- 'timescale 1 ns/10ps
- module decoder38_vg_tst();
- reg clk; //test vector input registers*******输入激励设置为reg型
- reg[2:0]keyin;
- wire[7:0]led //tset vecoder output wires*******输出相性设置为wire类型
-
- decoder38 i1(.clk(clk)), .keyin(keyin), .led(led);//******例化待测模块
- initial
- begin //*******initial产生激励
- keyin=0;
- clk=0;
-
- repeat(20)
- begin
- #1
- clk=~clk;
- keyin=keyin+1
- end
- end
- endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。