问题描述:
在电子产品中我们会经常用到按键,比如电脑的键盘,手机的按键等等,按键就是人机交 互的一种工具。在 AX301/AX4010 开发板上有四个用户按键(Reset,KEY1~KEY3)供用户使用和体验,用户可以使用 FPGA 程序来检测与按键对应的 I/O 口的电平高低来判断按键是否 按下或松开。 本实验内容将介绍按键的检测及按键的防抖的程序设计,通过点亮/熄灭开发板上相应的 LED 灯来指示按键的动作。
Reset键按一下-----------LED0 反转;
按键 1 按一下-------------LED1 反转;
按键 2 按一下-------------LED2 反转;
按键 3 按一下-------------LED3 反转;
一、source
`timescale 1ns / 1ps
module key_test
(
input clk, //开发板上输入时钟: 50Mhz
input [3:0] key, //四个按键
output[3:0] led //四个led灯
);
//寄存器定义
reg[3:0] led_r;
reg[3:0] led_r1;
always@(posedge clk)
begin
led_r <= ~key; //first stage latched data
end
always@(posedge clk)
begin
led_r1 <= led_r; //second stage latched data
end
assign led = led_r1;
endmodule
二、testbench
`timescale 1ns/1ns
module key_test_tb;
reg clk;
reg[3:0] key;
wire[3:0] led;
initial
begin
clk = 1'b0;
key = 4'b1111;
#12 key = 4'b0101;
#25 key = 4'b1010;
#8 key[0] = 1'b1;
#16 key[0] = 1'b0;
#100
$stop;
end
always#10 clk = ~clk;//50Mhz
key_test dut
(
.clk (clk), //时钟输入——50Mhz
.key (key), //4位按键输入,按下是0,弹起是1
.led (led) //4位LED显示,1为亮,0为灭
);
endmodule
?
|