admin管理员组

文章数量:1794759

【FPGA】06

【FPGA】06

写作时间: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 #( t_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 #( t_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