FPGA——按键消抖常用模板代码

2023-11-19

模板如下:

//`define UD #1
module key_jitter(
     input         clkin,
     
     input         key_in,
     output        key_value
  //   output [15:0] tout
);

// inner signal
reg [1:0] key_in_r;
wire pp;
reg [19:0] cnt_base;
reg key_value_r;

always @(posedge clkin)
    key_in_r<=  {key_in_r[0],key_in};

assign pp = key_in_r[0]^key_in_r[1]; 

always @(posedge clkin)
    if(pp==1'b1)
       cnt_base <=  20'd0;
    else
       cnt_base <=  cnt_base + 1;

always @(posedge clkin)
   if(cnt_base==20'hf_ffff)
        key_value_r <=  key_in_r[0];

assign key_value = key_value_r;
endmodule

使用时只需要将clkin替换成系统时钟,key_in替换成你要消抖的按键,再用key_value作为判断条件即可。


比如下面这个DA写入代码,为复位键(rst)消抖。在NL_SYNC置0的时候,写入NL_SDIN。

`timescale 1ns/1ns
`include "CLK_divide.v"

module AD5543_Nonlinear(clk,rst,NL_SCLK,NL_SDIN,NL_SYNC);
    input clk,rst;
    output NL_SCLK;
    output reg NL_SDIN,NL_SYNC;
    
    reg [1:0]NLcount;
    reg NLflag;
    wire [3:0]NL_SDIN_ALL;
    assign NL_SDIN_ALL  = 4'b0101;
    CLK_divide dvd1(clk,rst,NL_SCLK);
    
    reg [1:0] key_in_r;
wire pp;
reg [19:0] cnt_base;
reg key_value_r;
wire key_value;

//????
always @(posedge clk)
    key_in_r<=  {key_in_r[0],rst};

// ??????????
assign pp = key_in_r[0]^key_in_r[1]; 
//?????
always @(posedge clk)
    if(pp==1'b1)
       cnt_base <=  20'd0;
    else
       cnt_base <=  cnt_base + 1;

//??
always @(posedge clk)
   if(cnt_base==20'hf_ffff)
        key_value_r <=  key_in_r[0];

assign key_value = key_value_r;

    always @(posedge NL_SCLK or posedge key_value)           
    begin
        if(key_value) begin
            NL_SYNC <= 1; 
            NLcount <= 0; 
            NLflag  <= 0; 
            NL_SDIN <= 0;
        end
        else if(NLflag==0)begin  
            case(NLcount)
                4'b00: begin NL_SDIN = NL_SDIN_ALL[3] ; NLcount <= NLcount +1; NL_SYNC <= 0; end 
                4'b01: begin NL_SDIN = NL_SDIN_ALL[2] ; NLcount <= NLcount +1; NL_SYNC <= 0; end
                4'b10: begin NL_SDIN = NL_SDIN_ALL[1] ; NLcount <= NLcount +1; NL_SYNC <= 0; end
                4'b11: begin NL_SDIN = NL_SDIN_ALL[0]  ; NLcount <= 0;          NL_SYNC <= 0; NLflag<=1; end
                default: begin NL_SDIN = 0;              NLcount <= 0;          NL_SYNC <= 0; NLflag<=1; end
            endcase
        end
        else begin
            NL_SYNC <= 1; 
            NL_SDIN <= 0;
        end
    end
endmodule 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA——按键消抖常用模板代码 的相关文章

  • 64 位 ALU 输出在 TestBench 波上显示高阻抗

    我必须制作一个 64 位 ALU 它接受 A 和 B 64 位输入 进位输入输入并输出 64 位结果以及 1 位进位输出 还有一个 5 位功能选择 FS 其中 FS 0 控制 B 是否反转 使用 2to1 多路复用器 F 1 对 A 执行相
  • 如何使用触发器输出作为复位信号的输入

    我在柜台里放了 3D 触发器 一旦达到 5 101 我想将 FF 复位输入设置为高 使用或门 复位为低电平有效 这几乎可以工作 但是 当我最初运行程序时 触发器的 Q 输出都是未知的 因此 最初 或门的复位输入为低电平 但是 因为一开始 Q
  • 如何在 verilog 中不使用 while() 循环(用于综合)?

    我已经养成了开发大量测试平台并使用 for 和 while 循环进行测试的习惯 没关系 问题是我已经将这种习惯用于对应该可综合的电路进行编码 XST等拒绝合成代码 无需对合成参数进行额外修改 例如 while num lt test num
  • Verilog HDL ?操作员

    什么是 用 Verilog 做什么 例如 以下命令是什么意思 input first din input 7 0 din output 127 0 parity reg 127 0 parity wire 7 0 feedback assi
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • Verilog:添加寄存器的各个位(组合逻辑,寄存器宽度可参数化)

    我正在尝试想出一种方法来添加寄存器的各个位 例如 if regA 111000 then regB 3 位的总和regA 1 Verilog或SystemVerilog中是否有可以直接使用的可综合函数 运算符来执行此操作 如果不是 那么问题
  • 「HDLBits题解」Gates4

    本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接 Gates4 HDLBits module top module input 3 0 in out
  • 从测试台访问 uvm_config_db 的最佳方式?

    我想在我的顶级测试平台中创建一个时钟 其周期可以通过测试进行控制 我所做的是将周期设置到 uvm config db 中并将其返回到测试台中 我必须输入 1 以确保构建阶段已完成 否则 get 返回错误值 module testbench
  • 在verilog中将wire值转换为整数

    我想将电线中的数据转换为整数 例如 wire 2 0 w 3 b101 我想要一个将其转换为 5 并将其存储在整数中的方法 我怎样才能以比这更好的方式做到这一点 j 1 for i 0 i lt 2 i i 1 begin a a w i
  • Verilog 中的“net”代表什么?

    我刚刚开始学习Verilog 据我了解 Verilog有net数据类型 什么是net代表 网络就是这样一种数据类型 您不使用它来存储值 它们代表物理连接 您可以将线路视为一种网络数据类型 你可以去网上看看更多here http www ee
  • 始终块中的 Veriloggenerate/genvar

    我试图让一个模块通过 ISE 12 4 中的语法检查 但它给了我一个我不明白的错误 首先是代码片段 parameter ROWBITS 4 reg ROWBITS 1 0 temp genvar c generate always pose
  • VIM 高亮匹配开始/结束

    我正在尝试找到一个插件 它将突出显示与 Verilog 匹配的开始 结束语句 VIM 可以使用花括号 方括号 但不能使用它的开始 结束 我希望 VIM 突出显示正确的开始到正确的结束 在我看来 最好的选择是使用 matchit 该脚本是 v
  • Verilog 按位或 ("|") 单子

    我见过 Verilog 代码 其中使用了按位或运算符 目的是什么 例如 address 15 14 0 or address 15 14 io din ramrd 不能省略 吗在这些情况下 在这种情况下 它充当归约运算符 例如 4 b100
  • 系统 verilog 中没有类型的输入

    我在一个系统 verilog 代码的输入和输出的示例中遇到过module没有说明它们的类型 例如logic wire module mat to stream input 2 0 2 0 2 0 a b input newdata inpu
  • 具有内部赋值延迟的阻塞和非阻塞语句之间的区别

    以下 2 个 verilog 代码片段有什么区别 1 always in out 5 in AND 2 always in out lt 5 in 考虑到always块中不存在其他行 输出会有什么不同吗 问题参考幻灯片 16 参见 o5 和
  • Verilog 双向握手示例

    我正在完成一个项目 要求是处理器内部功能单元之间的双向握手 我知道它是什么 但是有没有任何 标准 或一个简单的例子 我唯一能想到的就是两个单元之间 当它们之间有一条数据线并且当 X 发送到 Y 时 会给出一个单独的 发送 信号 当 Y 接收
  • 如何在 icarus verilog 中包含文件?

    我知道基本的 include filename v 命令 但是 我试图包含另一个文件夹中的模块 现在 该模块还包括同一文件夹中存在的其他模块 但是 当我尝试在最顶层运行该模块时 出现错误 C Users Dell Desktop MIPS
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更
  • Verilog 数组语法

    我是 Verilog 新手 并且遇到了很多麻烦 例如 我想要一个包含八个单元的数组 每个单元都是 8 位宽 以下不起作用 reg 7 0 transitionTable 0 7 assign transitionTable 0 10 仅仅做
  • \add_34/U1_1_6 的 Verilog 命名约定

    有人可以解释一下这个命名约定在下面的 Verilog 行中意味着什么吗 我不知道这是什么 add 34 部分的意思是 ADDHXL add 34 U1 1 6 A n1022 B add 34 carry 6 CO add 34 carry

随机推荐

  • jvm 远程调试配置

    jstatd方式 创建配置文件 随便找个目录就可以 cat gt jstatd policy grant codebase file java home lib tools jar permission java security AllP
  • xcodebuild 命令打包

    xcodebuild命令行打包 在使用xcodebuild编译后发现有些东西有些临时性质的东西 依然存在 搜索了一些资料 找到有clean的命令 在之前打包都是生成app文件 将app打包成ipa文件需要编写一个脚本 操作起来相对麻烦 原来
  • 1.20 实现百度搜索

    1 axios不支持jsonp import React Component from react import ReactDOM from react dom https github com webmodules jsonp包 impo
  • 软件测试基础知识

    常用的软件测试方法有两大类 静态测试方法和动态测试方法 其中软件的静态测试不要求在计算机上实际执行所测程序 主要以一些人工的模拟技术对软件进行分析和测试 而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序 而达
  • 中国智慧能源行业行情监测及未来动向规划预测报告2022-2028年

    中国智慧能源行业行情监测及未来动向规划预测报告2022 2028年 报告目录 第一章 智慧能源的基本概述 第二章 2021 2021年全球智慧能源产业发展分析 2 1 2021 2021年全球智慧能源产业发展综况 2 1 1 全球智慧能源网
  • Electron 使用打印机

    1 问题 开发时使用打印机打印小票 2 开发环境 electron12 vue2 node14 electron 12 2 3 vue 2 6 12 node 14 21 3 3 问题解决 使用原生自带的 webview print 1 s
  • 新安装的ubuntu,遇到的问题记录

    镜像版本 https mirror nju edu cn ubuntu releases 22 04 ubuntu 22 04 1 live server amd64 iso 安装后无法切换 root 用户 问题截图 null 解决办法 解
  • glslViewer编译

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 glslViewer下载 二 编译步骤 1 使用CMake 前言 一 glslViewer下载 glslViewer下载地址 二 编译步骤 1 使用CMake 2 配置
  • android常用框架!万字长文轻松彻底入门Flutter,使用指南

    前言 说不焦虑其实是假的 因为无论是现在还是最近几年 很早就有人察觉Android开发的野蛮生长时代已经过去 过去的优势是市场需要 这个技术少有人有 所以在抢占市场的时候 基本上满足需要就已经可以了 但是现在 各式各样的APP层出不穷 AP
  • python类

    python是一种面向对象的变成语言 python几乎所有的东西都是对象 包括对象和属性 一 类的定义 python类的定义 class ClassName pass 实例 注意 类中的函数称为方法 有关于函数的一切适用于方法 唯一的区别在
  • MySQL出现“Lost connection to MySQL server during query”问题分析与解决

    问题重现 有一个表总是在写入数据的时候报2013的错误 原因分析 官方文档 总结一下3种可能性 一般都是第一或第二种原因 首先SQLAlchemy官方对该错误的解释 针对与数据库操作相关的错误而引发的异常 并且不一定在程序员的控制之下 例如
  • BUUCTF [CSAWQual 2019]Web_Unagi 1

    BUUCTF CSAWQual 2019 Web Unagi 1 提示在 flag 有提示了上传xml文件及其格式 直接用之前xml注入的上传即可 改文件名为1 xml上传即可得flag gt
  • 关于如何解决:Maven无法从aliyun仓库自动下载jar包(情况之一)

    如果你出现修改Maven配置文件settings xml无法生效 或者无法从aliyun仓库自动下载jar包的情况 除了其他博主提出的情况与解决方案以外 你如果还没有解决 检查是否遇到以下情况 最首先应当去aliyun官网 https de
  • C++之数据类型

    数据类型可以分为 基本数据类型 和 非基本数据类型 1 基本数据类型 整型 int 布尔值类型 bool 浮点数类型 double 字符类型 char void类型 2 非基本数据类型 指针类型 type 数组类型 type 引用类型 do
  • 1028 人口普查 (20分))(C语言)

    1028 人口普查 20分 某城镇进行人口普查 得到了全体居民的生日 现请你写个程序 找出镇上最年长和最年轻的人 这里确保每个输入的日期都是合法的 但不一定是合理的 假设已知镇上没有超过 200 岁的老人 而今天是 2014 年 9 月 6
  • 计算机修改桌面图标大小,windows更改桌面图标大小设置

    对于windows系统使用 不同的人有不同的使用习惯 有些人不习惯windows桌面的默认图标大小 想更改桌面图标大一些或小一些 小编就遇到一个有高度近视的同事 默认的桌面图标他根本看不清 需要把眼睛贴近显示器才能看清 所以他就需要把图标设
  • koa使用之node.js 文件加密与解密

    利用node js的crypto模块实现文件加密解密 代码 加密函数 param text 需要加密的内容 param key 秘钥 returns Query 密文 function encode text key var secret
  • 解释 RESTful API,以及如何使用它构建 web 应用程序

    RESTful API stands for Representational State Transfer Application Programming Interface It is a set of principles and g
  • uniapp开发app原生子窗体subNvue的使用

    用uniapp开发app的时候经常会有以下问题 1 覆盖原生导航栏 tabbar 的弹出层组件 比如侧滑菜单盖不住地图 视频 原生导航栏 比如 popup盖不住tabbar 2 弹出层内部元素可滚动 3 在map video等组件上的添加复
  • FPGA——按键消抖常用模板代码

    模板如下 define UD 1 module key jitter input clkin input key in output key value output 15 0 tout inner signal reg 1 0 key i