目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-11-25 zgf 初次建立

实验十一:GPIO输入实验——识别按键输入

一、 实验目的与意义

  1. 了解按键特征和应用。
  2. 学习按键动作的识别和判断。
  3. 学习按键消抖的处理方法。

二、 实验设备及平台

  1. iCore3L 双核心板。
  2. XiST USB Cable(或相同功能)仿真器。
  3. Micro USB线缆。
  4. 装有HqFpga开发软件的电脑一台。

三、 实验原理

图 11-1 按键及FPGA_LED原理图

图11-2 按键动作过程电平变化示意图

四、 代码实现

//---------------------按键动作检测---------------------------//
	reg key_r;
	reg	key_rr;
 
	always@(posedge fpga_clkor negedge rst_n)
		if(!rst_n)
			begin
				key_r<=1'b0;
				key_rr<=1'b0;
			end
		else
			begin
				key_r<=key;			//输入信号延迟1拍
				key_rr<=key_r;		//输入信号延迟2拍
			end
 
	reg 	[19:0]cnt;
	reg		flag;
	always@(posedge fpga_clk or negedge rst_n)
		if(!rst_n)
			flag<=1'd1;
		else if((key_r==1'd0)&&(key_rr==1'd1))			//下降沿检测
				flag<=1'd0;
			else if((key_r==1'd1)&&(key_rr==1'd0))		//上升沿检测
				flag<=1'd1;
 
	always@(posedge fpga_clk or negedge rst_n)
		if(!rst_n)
			cnt<=20'd0;
		else if((cnt<20'd1000_000)&&(flag==1'b0))		//约40ms
			cnt<=cnt+1'd1;
		else if(flag==1'b1)
			cnt<=20'd0;
			else
				cnt<=20'd1000001;
 
	reg	[2:0]	led_r;
	always@(posedge fpga_clk or negedge rst_n)			//LED 状态切换
		if(!rst_n)
			led_r<=3'b110;
		else if(cnt==20'd1000_000)
			led_r<={led_r[1],led_r[0],led_r[2]};		//循环左移,三色LED颜色循环切换

五、 实验步骤

11-3 添加源文件及设置顶层模块

图 11-4	添加物理约束,绑定引脚信息

六、 实验现象