写作时间:2021-03-12
使用的FPGA开发板:xilinx KC705
开发环境: vivado2019.1
Readme:
昨天在流水灯的代码中添加了“按键消抖”功能。上板也进行了测试,测试结果OK。
但是对于有些上板测试,有时候还不能完全反应出逻辑设计时的意思。
因此,还是需要testbench测试下仿真的波形,通过波形来看,是不是真的完全表达了设计的初衷。
本文以按键消抖为例
本文目录:
1.编写测试文件的思路
2.怎么写以及文件结构
3.仿真结果
正文:
1.编写测试文件的思路
通常,编写测试文件的过程如下:
1)产生模拟激励(波形);
2)将产生的激励加入到被测试模块中并观察其响应;
3) 将输出响应与期望值相比较
2.怎么写
1)建立仿真文件
文件命名:文件命名保持一致,后边加一个尾缀“tb”,表示testbench.
此时,出来一个空文件:
- 编写内容
了解下testbench 的基本架构
module Test_bench();//通常无输入无输出
//信号或变量声明定义
//逻辑设计中输入对应 reg 型
//逻辑设计中输出对应 wire 型
reg key_in;//逻辑设计中输入对应 reg 型
reg rst_n;
reg clk;
reg [7:0] cnt;
wire key_out;//逻辑设计中输出对应 wire 型
//1.使用 initial 或 always 语句产生激励
// 一般包括:时钟,复位,以及(模拟)产生测试的输入信号
//2.例化待测试模块
key_noshake
#(
.cnt_max(8'd100)
)
key_noshake_inst
(
.key_in(key_in),
.rst_n(rst_n),
.clk(clk),
.key_out(key_out)
);
//3.监控和比较输出响应
//观察仿真后的输出波形即可
endmodule
3)完整代码如下:
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2021/03/12 10:58:46
// Design Name:
// Module Name: key_noshake_tb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module key_noshake_tb();//通常无输入无输出
//信号或变量声明定义
reg key_in;//逻辑设计中输入对应 reg 型
reg rst_n;
reg clk;
reg [7:0] cnt;
wire key_out;//逻辑设计中输出对应 wire 型
//1.使用 initial 或 always 语句产生激励
initial
begin
clk=1'b1;
rst_n=1'b0;
#50
rst_n=1'b1;
end
always #10 clk=~clk;//生成(模拟)时钟信号
always@(posedge clk or negedge rst_n)
if( rst_n==1'b0)
cnt<=8'b0;
else if(cnt==8'd249)
cnt<=8'b0;
else
cnt<=cnt+8'b1;
always@(posedge clk or negedge rst_n)//模拟按键key_in的前抖动,后抖动,以及稳定段
if( rst_n==1'b0)
key_in<=1'b1;
else if (cnt>=8'd02 && cnt<=8'd19)
key_in<={$random} %2;
else if (cnt>=8'd129 && cnt<=8'd149)
key_in<={$random} %2;
else
key_in<=1'b0;
// 2.例化待测试模块
key_noshake
#(
.cnt_max(8'd100)
)
key_noshake_inst
(
.key_in(key_in),
.rst_n(rst_n),
.clk(clk),
.key_out(key_out)
);
//3.监控和比较输出响应
endmodule
注:
3.仿真结果
放大(局部特写)
OK~ 大功告成~
THE END~
更多推荐
【FPGA】06_如何写testbench的verilog 代码?
发布评论