ZYNQ-按键消抖

文章目录

基础知识

  • 数值表示:位宽进制值,如 2d0 表示 2 位宽十进制 0,这里的位宽是 bit, 1 bit = 8 byte
  • input 和 output 默认是 wire 类型
  • 关于 管脚约束中 I/O std 的选择:

管脚约束

代码

复制代码
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: LWX 
// 
// Create Date: 2025/08/03 17:38:28
// Design Name: 
// Module Name: key
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module key_module(
       input clk,   
       output reg LED,
       input key 
   );

   reg [1:0] mode = 2'd0;       // 2bit 十进制 0
   reg [19:0] cnt = 20'd0;
   reg [1:0] key_r = 2'b11;       // 接收按键状态的 2 位 reg
   reg key_value = 0;      // 按键值

   always@(posedge clk) begin      // 按键信号同步时钟
       key_r[1] <= key_r[0];
       key_r[0] <= key;
   end

   wire key_negedge = key_r[1] & ~key_r[0];    // 按下为 1,弹起为 0,标志按键状态的检测,只有前一刻为 1,这一刻为 0 才是 按下


   always@(posedge clk) begin
       case (mode)
           2'd0 : begin            // 初始状态
               cnt <= 20'd0;
               if (key_negedge)   mode <= 2'd1;

               
           end 
           2'd1: begin
               if (cnt < 20'd1000000) begin        // 计数中
                   cnt <= cnt + 1'b1;
               end
               else begin
                   if (key == 0) begin             // 如果按键按下且 20s 之内还是按下
                       key_value <= ~key_value;
                       mode <= 2'd2;
                   end
                   else
                       mode <= 2'd0;                            // 如果按键松开,回到初始状态
               end
           end
           2'd2: begin                             // 等待按键松开
               if (key == 1)
                   mode <= 2'd0;
           end
           default: mode <= 2'd0;
       endcase
   end

   always@(posedge clk) begin
       LED <= key_value;
   end


endmodule
相关推荐
Terasic友晶科技9 小时前
DE25-Nano开发板在Programmer的 Auto Detect 下检测出来的器件和友晶官方提供的工程里器件不一样有没有关系?
fpga开发·auto detect·de25-nano·jtag id
ShiMetaPi14 小时前
GM-3568JHF丨ARM+FPGA异构开发板应用开发教程:04 MIPI屏幕检测案例
arm开发·fpga开发·rk3568
最遥远的瞬间16 小时前
四、呼吸灯实战
fpga开发
FPGA小c鸡16 小时前
FPGA高速收发器GTH完全指南:从零基础到10Gbps高速设计实战
fpga开发
乌恩大侠16 小时前
【AI-RAN 调研】软银株式会社的 “AITRAS” 基于 Arm 架构的 NVIDIA 平台 实现 集中式与分布式 AI-RAN 架构
人工智能·分布式·fpga开发·架构·usrp·mimo
Saniffer_SH2 天前
【高清视频】笔记本电脑出现蓝屏、死机、慢、不稳定是这样连接分析M.2 SSD的
运维·服务器·网络·人工智能·驱动开发·嵌入式硬件·fpga开发
Z22ZHaoGGGG2 天前
Verilog实现对采样信号有效值(RMS)的计算
fpga开发
简简单单做算法2 天前
基于FPGA的图像形态学腐蚀处理Verilog开发与开发板硬件测试
fpga开发·腐蚀·形态学处理·硬件调试
hong_fpgaer2 天前
XILINX ZYNQ FPGA PS端DMA握手流程
fpga开发·vivado
北城笑笑2 天前
FPGA 50 ,Xilinx Vivado 2020 版本安装流程,以及常见问题解析,附中文翻译( Vivado 2020 版本安装教程 )
fpga开发·fpga