首页 > 其他分享 >基于状态机方法的按键消抖模块FPGA实现,包括testbench

基于状态机方法的按键消抖模块FPGA实现,包括testbench

时间:2023-05-24 15:56:30浏览次数:37  
标签:逻辑 FPGA always testbench timer 状态机 按键

1.算法仿真效果

vivado2019.2仿真结果如下:

 

 

 

系统RTL图:

 

 

 

2.算法涉及理论知识概要

        状态机,FSM(Finite State Machine),也称为同步有限状态机从。指的是在同步电路系统中使用的,跟随同步时钟变化的,状态数量有限的状态机,简称状态机。

 

状态机分类

 

        根据状态机的输出是否与输入有关可以分为迷你(Mealy)状态机和摩尔(Moore)状态机。迷你状态机的输出结果的判断条件是当前状态&&输入信号,摩尔状态机的输出结果的判断条件只有当前状态。

 

         根据状态机的写法分为一段式、二段式、三段式状态机。

 

一段式状态机是把状态跳转逻辑、状态机状态和状态机结果输出都写到一个always块里。

 

在信号少的情况容易理解,信号多的话容易出错且复杂。

 

二段式状态机是把状态跳转逻辑用always组合逻辑,状态机状态用always时序逻辑,状态机结果输出用assign组合逻辑。

 

二段式状态机结果输出用组合逻辑判断容易产生毛刺。

 

三段式状态机是把状态跳转逻辑用always组合逻辑,状态机状态用always时序逻辑,状态机结果输出用always时序逻辑。

 

三段式状态机描述方式使得FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,更有利于时序稳定。

 

         本次实验中使用的按键开关为机械弹簧按键开关,当机械触点断开、闭合时,由于机械触点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合、断开的瞬间会伴随有一连串的抖动,而FPGA是检测按键对应引脚的电平来判断按键是否按下,因此就会使得按键的一次按下、断开操作引发FPGA的多次触发,这违背了操作者的本意,即一次按键的按下操作引发FPGA的一次触发。为了实现“一次按键的按下操作引发FPGA的一次触发”所采取的措施就是按键消抖。

 

        按键抖动的时间长短有机械按键的机械特性决定,分为前抖动和后抖动,一般为5ms~10ms。按键稳定闭合时间的长短由操作者的按键动作决定,一般为零点几秒至数秒。按键消抖原理就是在按键稳定时读取按键的状态,将该值作为FPGA是否触发的条件,并且要考虑后抖动(按键抬起)的影响,保证一次按键的按下操作只能触发一次FPGA。为确保按键对FPGA的触发可靠,本次实验将按键稳定闭合时间定为按键保持低电平单次持续20ms。当按键保持低电平单次持续为20ms时,即可认为按键按下操作有效,进而触发FPGA操作。

 

3.Verilog核心程序

 

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
 
 
// Create Date: 2023/03/14 22:27:58
// Design Name: 
// Module Name: tops_key
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
 
 
module tops_key(
input clk,
input keyin,
output reg keyout
);
    
.....................................................		  
parameter state0 = 3'b000;
parameter state1 = 3'b001;
parameter state2 = 3'b010;
parameter state3 = 3'b011;
parameter state4 = 3'b100;				   
reg [2:0] state = state0;		
reg [16:0] timer = 17'b0;
reg timer_en = 1'b0, timer_tick = 1'b0;
    
always@ (posedge clk) 
begin
    
        case (state)
.......................................................
        
        if (timer_en == 1'b1) begin
            if (timer == (timerlim - 1)) begin
                timer_tick <= 1'b1;
                timer <= 17'b0;
            end    
            else begin
                timer_tick <= 1'b0;
                timer <= timer + 17'b1;
            end
        end       
        else begin
            timer <= 17'b0;
            timer_tick <= 1'b0;
        end    
            
end 
endmodule

 

  

 

标签:逻辑,FPGA,always,testbench,timer,状态机,按键
From: https://www.cnblogs.com/51matlab/p/17428551.html

相关文章

  • 基于FPGA的HDB3编译码verilog实现,包括testbench
    1.算法仿真效果vivado2019.2仿真结果如下:  2.算法涉及理论知识概要       数字基带信号的传输是数字通信系统的重要组成部分。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。采用AMI码的信号交替反转,有可能出现四连零现象,这不利于接......
  • 基于FPGA的LMS自适应滤波器verilog实现,包括testbench
    1.算法仿真效果vivado2019.2仿真结果如下:    2.算法涉及理论知识概要        自适应算法是数字信号处理(DSP)的主体。它们被用于各种应用,包括声学回声消除、雷达制导系统、无线信道估计等。         自适应算法用于估算随时间变化的信号。有许多自......
  • 【FPGA】Verilog 实践:奇偶校验生成器 | 奇偶校验检查器 | 2-bit 二进制比较器
    写在前面:ParitybitGenerator/Checker和2bitbinarycomparator的了解和确认动作。使用Verilog进行ParitybitGenerator/Checker、2bitbinary,实施comparator,生成输入信号后确认通过模拟器实现的每个Gate操作,通过FPGA验证Verilog实现的电路的行为。Ⅰ.前置知识0x00......
  • 基于状态机STM32/51密码锁
    1、状态机讲解状态机其实在学习数字电路的接触过但是我已经忘得差不多了,由于我的毕业设计是关于FPGA的题目,状态机是重中之重。刚才在贴吧有uu们问关于单片机之类的密码锁的问题,突然想到之前蓝桥杯当时也有类似的题目,我当时处理的不是特别好,所以现在想着用C去实现,本科毕设时我导师......
  • 基于FPGA的Hamming编译码verilog开发实现,包括testbench测试程序
    1.算法仿真效果vivado2019.2仿真结果如下:    2.算法涉及理论知识概要        汉明码(HammingCode),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦......
  • 使用命令行方式program Intel FPGA程序
    命令行下载程序方式右键打开Windows终端(管理员),切换到待下载程序所在目录下,输入指令:quartus_pgm-cUSB-BlasterII-mjtag-o"bpv;XXX.pof",这里的XXX.pof就是待下载程序的完整名称-c代表指定对应的cable名称,如果不确定cable名称,在终端输入jtagconfig-n就可以查看到,如下:-m......
  • 基于FPGA的FIR低通滤波器verilog开发,包含testbench测试程序,输入噪声信号使用MATLAB
    1.算法仿真效果VIVADO2019.2/matlab2022a仿真结果如下:运行matlab:将matlab得到的数据文件保存到FPGA的project_13.sim\sim_1\behav\xsim路径,测试仿真时,可以自动调用matlab任意产生的测试数据。rtl:2.算法涉及理论知识概要FIR(FiniteImpulseResponse)滤波器:有限长单位冲激......
  • 基于FPGA的FIR低通滤波器verilog开发,包含testbench测试程序,输入噪声信号使用MATLAB
    1.算法仿真效果VIVADO2019.2/matlab2022a仿真结果如下: 运行matlab:    将matlab得到的数据文件保存到FPGA的project_13.sim\sim_1\behav\xsim路径,测试仿真时,可以自动调用matlab任意产生的测试数据。   rtl:   2.算法涉及理论知识概要       ......
  • XILINX FPGA全套图纸 (ZYNQ板Altium原理图和PCB) ,10层ZedBoard原版AD工程,十层PCB设
    XILINXFPGA全套图纸(ZYNQ板Altium原理图和PCB),10层ZedBoard原版AD工程,十层PCB设计,6个信号层,4个电源层,是学习AD高速信号多层板的好素材,已打板验证。特别适合做此类项目的工程师参考,或者新手作为模板参考。里面有详细的叠层管理,布线规则设定,差分规则,尤其是DDR3和千兆网络的布线......
  • 开发板FPGA电机控制源码(verilog+nios2架构)FPGA电机控制源码, 方案为单FPGA方案才用
    开发板FPGA电机控制源码(verilog+nios2架构)FPGA电机控制源码,方案为单FPGA方案才用底层verilog+应用层nios2的软件架构,很具有学习价值。包括编码器模块算法,坐标变换算法,矢量调制算法等等。注:此代码不适合新手小白。YID:1611669469428085......