当前位置:文档之家› verilog按键消抖原理

verilog按键消抖原理

verilog按键消抖原理

(原创版)

目录

1.Verilog 简介

2.按键消抖的概念

3.按键消抖的实现原理

4.实际应用中的按键消抖设计

5.总结

正文

【1.Verilog 简介】

Verilog 是一种硬件描述语言,主要用于数字系统硬件的描述、模拟和验证。在数字电路设计和 FPGA 开发领域,Verilog 被广泛应用。通过Verilog,设计人员可以对硬件电路进行建模、模拟和验证,以确保设计满足性能要求。

【2.按键消抖的概念】

按键消抖,又称按键去抖,是一种在按键输入过程中消除误触发的技术。在实际应用中,按键输入可能会受到噪声、抖动等因素的影响,导致误触发。按键消抖的目的就是消除这些干扰,确保按键输入的准确性。

【3.按键消抖的实现原理】

按键消抖的实现原理主要有两种:软件消抖和硬件消抖。

(1)软件消抖:软件消抖是通过程序算法实现的。在按键触发时,程序会检测按键触发信号是否满足一定的条件,例如连续触发次数、触发时间间隔等。如果满足条件,则认为这是一个有效的按键触发,否则不予响应。

(2)硬件消抖:硬件消抖是通过硬件电路实现的。硬件消抖电路通常包括滤波器、延迟器等组件。当按键触发信号输入时,滤波器会滤除噪声,延迟器会消除触发信号的抖动,从而保证输出信号的稳定性。

【4.实际应用中的按键消抖设计】

在实际应用中,按键消抖设计需要考虑多种因素,如按键触发信号的噪声、抖动特性,系统的响应速度等。为了实现高效、可靠的按键消抖,设计人员需要对这些因素进行综合考虑,选择合适的消抖方案。

【5.总结】

按键消抖是一种重要的技术,可以有效消除按键输入中的误触发,提高系统的稳定性和可靠性。

Verilog写的按键消抖程序

前几天看了特权同学用Verilog写的按键消抖程序,感觉很经典。在这里将程序贴出来分享一下。 module lcd_button2(clk,rst,seg,wei,sw1,sw2,sw3,sw4);//按键按下,数码管依次显示0-9 input clk; input rst; input sw1,sw2,sw3,sw4; output [3:0] wei; output[7:0] seg; reg [7:0] seg; reg [3:0] wei; integer num; initial begin num = 0; end reg[3:0] key_rst; always @(posedge clk or negedge rst) if(!rst) key_rst <= 4'b1111; else key_rst <= {sw4,sw3,sw2,sw1}; reg[3:0] key_rst_r; always @(posedge clk or negedge rst) if(!rst) key_rst_r <= 4'b111; else key_rst_r <= key_rst; wire[3:0] key_an = key_rst_r & (~key_rst); reg[19:0] cnt; always @(posedge clk or negedge rst) if(!rst) cnt <= 0; else if(key_an) cnt <= 0; else cnt <= cnt+1'b1; reg [3:0] low_sw; always @(posedge clk or negedge rst)

(完整版)verilog实验之密码箱实验报告

Verilog实现密码箱 1.功能概述 小脚丫开发板的有4位拨码开关,可以表示数字0-9,有两个七段数码管,所以密码设为两位(00—99),初始密码00,利用四位拨码开关(sw)输入密码,,按下个位确认按键(low),在数码管上显示个位数字;再次输入密码,按下十位确认按键(high),在数码管上显示十位数字。按下确认按键(enter),比较密码正误,若正确,实现开锁功能,用led8灯亮表示;错误,实现报错功能,用led1灯亮表示;连续错三次,实现警报功能,用8个灯全亮表示,此时只有重置(rst)才能重新输入密码。初始密码为21。为保证安全性,只有在开锁状态下,才可修改密码,修改拨码开关数值,按下个位确认按键(low),设置新密码个位,再次修改拨码开关数值,按下个位确认按键(high),设置新密码十位(实际上两个位密码修改与输入顺序不影响)。再按下重置键(rst),即可重新输入密码。同时在使用按键时,注意到了消抖。 2.效果展示 密码错误

密码正确 修改后密码正确 视频展示(双击播放)

3.代码分析 一、密码显示在数码管上 always@(*) //数码管显示控制模块 begin case(code_low) 4'd0:seg_led1=9'b000111111;//数码管1显示0 4'd1:seg_led1=9'b000000110;//1 4'd2:seg_led1=9'b001011011;//2 4'd3:seg_led1=9'b001001111;//3 4'd4:seg_led1=9'b001100110;//4 4'd5:seg_led1=9'b001101101;//5 4'd6:seg_led1=9'b001111101;//6

verilog按键消抖原理

verilog按键消抖原理 (原创实用版) 目录 1.按键消抖的原理 2.Verilog 实现按键消抖的方法 3.按键消抖的具体设计 4.总结 正文 一、按键消抖的原理 按键消抖是指在按键输入过程中,由于机械特性的影响,导致按键在按下或松开的瞬间会产生抖动,即电平从一个状态转换到另一个状态时,会在短时间内出现多次变化。为了消除这种抖动,需要设计一种按键消抖电路或算法,确保输入信号的稳定性。 二、Verilog 实现按键消抖的方法 Verilog 是一种硬件描述语言,可以用来设计和验证数字电路。在Verilog 中实现按键消抖,主要可以通过计数器和寄存器来完成。当按键输入发生变化时,计数器清零;当按键输入稳定时,计数器累加到一定值,此时输出稳定信号。 三、按键消抖的具体设计 以下是一个基于 Verilog 的按键消抖设计示例: ```verilog module keyjitter(clk, keyin, keyout); input clk; // 50MHz clock in input keyin;

output keyout; reg [22:0] counthigh; reg [22:0] countlow; reg keyreg; always @(posedge clk) begin if (keyin == 1"b0) begin countlow <= countlow - 1; end else begin countlow <= 23"h000000; end end always @(posedge clk) begin if (keyin == 1"b1) begin counthigh <= counthigh + 1; end else begin counthigh <= 23"h000000; end end always @(posedge clk) begin if (counthigh == 23"h250000) begin keyreg <= 1"b1; end else if (countlow == 23"h250000) begin

数电EDA简易电子琴Verilo

数电EDA简易电子琴Verilog- 设计

数字电子技术课程设计 --简易电子琴设计 专业班级:电子 姓名: 201565 一、设计任务 用Verilog HDL语言设计简易电子琴。 (1)单独从左至右按下S1-S7每个按键后能够各自对应发出“哆来咪发唆啦西”的音乐声; (2)按下最右边按键(S8),同时再配合按下S1-S7键后,发高八度的对应音;(3)按键需要进行“消抖”处理; (4)外部输入脉冲信号频率为1mhz (5)扩展要求:自主设计(增加低8度功能)。

二、实验目的 1、学习verilogHDL语言的基本运用,能够利用其进行简单编程; 2、学习使用Quartus n 7.0的基本操作,能够利用其进行简单的设计; 3、结合实践加深对理论知识的理解。 三、设计原理 1)喇叭的振动频率不同,导致产生不同的声音;振动频率越低,声音越低沉,振动频率越高,声音越尖锐。题目中音乐基本音的“哆”对应频率为523Hz、“来”对应频率为587Hz、“咪”对应频率为659Hz、“发”对应频率为698Hz、“唆”对应频率为784Hz、“啦”对应频率为880Hz、“西”对应频率为998Hz= 低8度音:基本音频率/2,例如低音1的频率为523/2=261.5Hz。 高8度音:基本音频率X 2,例如高音1的频率为523X2=1046Hz.。 不同的频率产生利用给定的时钟脉冲来进行分频实现。 (2)消抖的原理:按键默认输入逻辑‘ 1'当有按键按下时对应的输入为逻辑 ‘ 0'(但会存在抖动),当FPGA开始检测到该引脚从‘ 1'变为‘ 0'后开始定时(按键抖动时间大约10mS,定时时间结束后若该引脚仍然为‘ 0'则表示确实发生按键按下,否则视为抖动而不予以理会;按键松开过程的消抖处理和按下时原理一样。 (3)原理框图

vivado按键消抖原理

vivado按键消抖原理 按键消抖是指在数字电路中,当按键按下或释放时,由于按键机械开关的特性,会导致电路出现不稳定的信号状态。这种不稳定状态可能会导致错误的触发,例如出现多次触发或漏触发。因此,为了确保按键信号的稳定性和可靠性,需要进行按键消抖处理。 按键消抖的原因主要有两个方面。首先,按键机械开关的接触面存在微小的弹跳现象,当按键按下或释放时,接触面会在短时间内反复接触和分离,导致电路信号出现多次变化。其次,由于电路中存在的噪声干扰,也会使得按键信号产生抖动。 为了解决按键消抖问题,可以采用硬件和软件两种方法。硬件方法主要通过添加滤波电路或使用稳定的按键开关来消除按键弹跳现象。滤波电路可以通过RC电路或者使用专用的按键消抖芯片来实现。而软件方法主要通过在数字电路中添加按键消抖算法来处理按键信号。 在Vivado中,按键消抖可以通过使用状态机来实现。状态机是一种用于描述系统行为的模型,可以根据输入信号的状态变化来改变系统的状态和输出。在按键消抖中,可以使用状态机来检测按键信号的变化,并根据一定的状态转换规则来消除按键弹跳现象。 具体实现时,可以将按键信号作为输入,将按键状态和输出作为状

态机的状态和输出。当按键信号发生变化时,状态机会根据一定的状态转换规则进行状态转换,并输出消抖后的按键信号。常用的状态转换规则包括按键按下时状态转换为按下状态,按键释放时状态转换为释放状态,以及连续按键时状态不变。 在Vivado中,可以使用Verilog或VHDL等硬件描述语言来编写状态机代码。首先,需要定义状态机的输入、输出和状态变量,并初始化各个变量的初始值。然后,需要编写状态转换规则和输出逻辑,根据输入信号的状态变化来改变状态和输出。最后,需要将状态机代码综合生成对应的逻辑电路,并进行仿真和验证。 总结起来,按键消抖是数字电路设计中常见的问题,为了确保按键信号的稳定性和可靠性,需要进行按键消抖处理。在Vivado中,可以使用状态机来实现按键消抖,通过定义状态转换规则和输出逻辑,消除按键弹跳现象。通过合理的设计和验证,可以实现按键消抖的功能,并提高数字电路的可靠性和稳定性。

verilog按键消抖原理

verilog按键消抖原理 (原创版) 目录 1.Verilog 简介 2.按键消抖的概念 3.按键消抖的实现原理 4.实际应用中的按键消抖设计 5.总结 正文 【1.Verilog 简介】 Verilog 是一种硬件描述语言,主要用于数字系统硬件的描述、模拟和验证。在数字电路设计和 FPGA 开发领域,Verilog 被广泛应用。通过Verilog,设计人员可以对硬件电路进行建模、模拟和验证,以确保设计满足性能要求。 【2.按键消抖的概念】 按键消抖,又称按键去抖,是一种在按键输入过程中消除误触发的技术。在实际应用中,按键输入可能会受到噪声、抖动等因素的影响,导致误触发。按键消抖的目的就是消除这些干扰,确保按键输入的准确性。 【3.按键消抖的实现原理】 按键消抖的实现原理主要有两种:软件消抖和硬件消抖。 (1)软件消抖:软件消抖是通过程序算法实现的。在按键触发时,程序会检测按键触发信号是否满足一定的条件,例如连续触发次数、触发时间间隔等。如果满足条件,则认为这是一个有效的按键触发,否则不予响应。

(2)硬件消抖:硬件消抖是通过硬件电路实现的。硬件消抖电路通常包括滤波器、延迟器等组件。当按键触发信号输入时,滤波器会滤除噪声,延迟器会消除触发信号的抖动,从而保证输出信号的稳定性。 【4.实际应用中的按键消抖设计】 在实际应用中,按键消抖设计需要考虑多种因素,如按键触发信号的噪声、抖动特性,系统的响应速度等。为了实现高效、可靠的按键消抖,设计人员需要对这些因素进行综合考虑,选择合适的消抖方案。 【5.总结】 按键消抖是一种重要的技术,可以有效消除按键输入中的误触发,提高系统的稳定性和可靠性。

Verilog的键盘源码keypad—有去抖功能

下面是转的一个源码,俺没有细看,有兴趣的看看,讲讲如何// author: Dandy Nee // mail: dandynee@https://www.doczj.com/doc/8e19189152.html, // module: HW KeyScan Module // version:0.1 // ************************** // all functions are provided as if okay // run at your own risk // ************************** // // problem: there is one keyvalue valid // indicator signal needed // //------------------------------------------------ // // ^ ^ ^ ^ Pull Up // | | | | // x0 >--|--|--|--|- // x1 >--|--|--|--|- // x2 >--|--|--|--|- // x3 >--|--|--|--|- // y0 <--+ | | | // y1 <-----+ | | // y2 <--------+ | // y3 <-----------+ // module m_keyscan( clk, //system clk rstb, //system a-rst, low active // clkdiv, //clock divide coef // keyvalue, //returned key // x, //x-row scan out y //y-col scan in ); input clk, rstb; input [19:0] clkdiv;

基于verilog的数字秒表的设计实现

数字秒表的设计实现 团队成员:董婷詹磊胡鹏 一、测试要求 1. 有源晶振频率:24MHZ 2. 测试计时范围:00’00”00 ~ 59’59”99,显示的最长时间为59分59 秒 3. 数字秒表的计时精度是10ms 4. 显示工作方式: a、用八位数码管显示读数 b、用两个按钮开关(一个按钮使秒表复位,另 一个按钮控制秒表的启动/暂停) 二、设计要求 1. 设计出符合设计要求的解决方案 2. 利用软件对各单元电路及整体电路进行仿真 3. 在开发板上实现设计 5. 撰写设计报告 三、秒表功能键 1、power:秒表电源键 2、Reset:秒表复位清零键 3、run/stop:秒表启动/停止键

四、实验原理 1 .实验设计原理 (1)秒表的逻辑结构较简单,它主要由十进制计数器、六进制计数器、分频器、数据选择器、和显示译码器等组成。在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止、启动以及清零复位。 (2)秒表有共有8个输出显示,其中6个显示输出数据,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应;另外两个为间隔符,显示‘-’。8个计数器的输出全都为BCD码输出,这样便与同显示译码器连接。 (3)可定义一个24位二进制的寄存器hour用于存放8个计数器的输出,寄存器从高位到低位每连续4位为一组,分别存放百分之一秒、十分之一秒、间隔符、秒、十秒、间隔符、分、十分。由频率信号输出端输出频率为100HZ的时钟信号,输入到百分之一秒模块的时钟端clk,百分之一秒模块为100进制的计数器,当计数到“1001”时,百分之一秒模块清零,同时十分之一秒模块加1;十分之一秒模块也为100进制的计数器,当计数到“1001”时,十分之一秒模块清零,同时秒模块加1;以此类推。直到分模块计数到59进59。(4)为了消除按键消抖问题,定义寄存器key-inner来存储按键key的输入信号,key-flag作为启动/暂停的转换标志,key-inner[0]出现一个下降沿时,key-flag取反一次,当key-flag为0时计数器

4 4矩阵键盘(未消抖)verilog

4*4矩阵键盘(未消抖): module Matrix_keyboard(clk,in_s,out_s,num); //定义模块端口信息 input clk; input [3:0] in_s; output [3:0] out_s; output [4:0] num; //定义输出信号类型及局部变量 reg [4:0] num; reg [1:0] cnt = 0; reg [1:0] tmp = 0; reg [3:0] o_ut_st = 0; wire [7:0] dsample; //将扫描输出和输入信号级联,得到矩阵扫描结果 assign dsample = {o_ut_st, in_s}; assign out_s = o_ut_st; //产生按钮矩阵的列扫描信号 always @(posedge clk) begin cnt <= cnt + 1'b1; case (cnt) 2'b00: o_ut_st <= 4'b1000; 2'b01: o_ut_st <= 4'b0100; 2'b10: o_ut_st <= 4'b0010; 2'b11: o_ut_st <= 4'b0001; endcase end //根据按钮的列扫描信号和行输入信号判断按钮是否被按下always @(posedge clk) begin //如果无按钮按下,定义num=16为无效状态 if (in_s == 4'b0000) begin if (tmp == 3) begin num <= 16; //无按键输入,输出16 tmp <= 0; end else begin num <= num; tmp <= tmp + 1'b1; //扫描周期,3个时钟周期 end end

verilog按键与led基础实验 实验小结

verilog按键与led基础实验实验小结 在Verilog按键与LED基础实验中,我们主要学习了如何使用Verilog语言编写一个简单的数字电路,实现按键控制LED灯的亮灭。以下是实验的主要内容和小结: 1. 实验目的:通过本实验,我们旨在掌握Verilog的基本语法和结构,了解按键与LED灯的工作原理,学会使用Verilog编写简单的数字电路。 2. 实验原理:按键与LED灯的工作原理是:当按下按键时,按键产生一个低电平信号,这个信号经过电路处理后,驱动LED灯亮起;当松开按键时,按键产生的信号恢复为高电平,LED灯熄灭。 3. 实验步骤: a. 设计电路原理图:首先,我们需要设计一个简单的电路原理图,包括按键、LED灯、电阻等元件。 b. 编写Verilog代码:根据电路原理图,我们可以编写如下Verilog代码:

verilog module key_led_test( input wire clk, // 时钟信号 input wire rst, // 复位信号 input wire btn, // 按键信号 output wire led // LED灯信号 ); always @(posedge clk or posedge rst) begin if (rst) begin led <= 1'b0; // 复位时,LED灯熄灭 end else begin if (btn) begin led <= 1'b1; // 按下按键时,LED灯亮起 end else begin led <= 1'b0; // 松开按键时,LED灯熄灭 end end end endmodule

Verilog项目设计报拔河游戏机

河海大学物联网工程学院Verilog HDL项目设计报告 题目拔河游戏机 专业电子科学与技术 学号1562910123、1562910125 授课班号6292758 学生姓名徐子豪、杨诗欣 指导教师华迪、齐本胜

摘要和关键字 为了掌握数字系统的设计方法,掌握硬件描述语言——Verilog HDL,掌握模块化设计方法,掌握开发软件的使用方法。选择 基于FPGA开发板设计的拔河游戏机,使用两个按键进行比赛,利用按键按下的快慢作为模拟的双方选手拔河过程,led灯的变化决定绳子的位置,led灯到了一边以后比赛终止,整个过程的难点在于,需要过滤信号,使按键产生的信号稳定,所以程序中需要有按键消抖模块,同时需标识符来控制比赛的开始与结束。关键词:verilog 拔河比赛消抖模块标识符 In order to master the design method of digital system, we must master the hardware description language -- Verilog HDL, grasp the modular design method and master the way of developing software. Choice Tug of war game FPGA development board based on the design, the use of two button game, using key press speed as both players tug of war of simulation, change led lamp decide the position of the rope, LED lights to the side after the end game, the difficulty lies in the whole process, need to filter the signal, the stable signal generated by the keys so, the procedure requires a key debounce module, also need to control the game's identifier and end start. Key words: Verilog tug shake-off module identifier.

FPGA实验四键盘扫描显示电路

实验四矩形键盘扫描显示电路设计 一、实验目的: 1、熟悉Verilog语言编写的键盘扫描显示电路。 2、在Libero软件中,并对其电路进行仿真。 二、实验原理: 键盘扫描显示电路的Verilog HDL程序主要由3个always模块构成:第一个为模4计数器模块;第二个为完成对键盘进行扫描和编程的功能,在计数器的每个状态从FPGA内部送出一列扫描数据给键盘,然后读入经过去抖处理的4行数据,并根据行,列数据之间的关系,对按键进行编码,确定按下的是哪个键;第三个模块完成键值的显示,即显示按键的编号。 下面是个键盘扫描的程序,大家仿真分析下。 module scankey(outled,scansig,dsw,clk,keyvaule); input clk;//键盘扫描时钟信号 input [3:0]dsw;//去抖后的按键信号 output [3:0]scansig;//输出扫描信号给键盘 output [7:0]keyvaule; output [7:0]outled; //输出七段码给共阴极数码管 reg [3:0]scansig; reg [7:0]keyvaule; reg [7:0]outled; reg [1:0] q; always @(posedge clk) begin q<=q+1’b1; end always @(q or dsw) case(q) 2’b00: begin scansig=4’b0111; case (dsw) 4'b0111: keyvaule=8'b0111_0111; //key0 4'b1011: keyvaule=8'b0111_1011; //4 4'b1101: keyvaule=8'b0111_1101; //8 4'b1110: keyvaule=8'b0111_1110; //c default : keyvaule=8'b1111_1111; endcase end

基于FPGA的LED流水灯与按键消抖实验

基于FPGA的LED流水灯与按键消抖实验1.实验目的 (1)通过实验进一步学习Quartus II软件的使用方法。 (2)通过实验学习流水灯的设计原理。 (3)通过实验学习按键消抖(边沿检测法)的基本原理。 2.实验仪器设备 (1)FPGA开发实验箱。 (2)数字万用表。 (3)电脑。 3.预习 (1)复习FPGA开发有关的流程。 (2)复习Verilog HDL语言语法。 (3)复习实验所用的相关原理。 (4)按要求编写实验中要求的硬件描述语言程序。 4.实验原理 (1)LED流水灯。流水灯是一个典型的FPGA程序设计,通过控制8位led向左依次循环点亮,达到对硬件语言、软件开发平台等的初步认识。 ①if语句的使用。 Verilog HDL语言中的if语句与C语言中的十分相似,其使用方法有以下三种: a.if(条件1)语句块1; b.if(条件1)语句块1; else 语句块2; c.if(条件1)语句块1; else if(条件2)语句块2; …… else if(条件n)语句块n; else 语句块n+1。 在上述三种方式中,“条件”一般为逻辑表达式或关系表达式,也可以是一

位的变量。如果表达式的值出现0(假),x(未知),z(高阻),则全部按“假”来处理;若为“1”,则按“真”来处理。语句块若为单句,直接书写即可;若为多句,则需要用“begin end”块括起来。建议无论多句还是单句都用“begin end”括起来。 ②case语句的使用。 case语句是一个多路条件分支语句,常用于多路译码、状态机和微处理机的指令译码等场合。case语句的语法格式为: case(条件表达式) 分支1:语句块1; 分支2:语句块2; …… default:语句块n endcase 其中,“分支n”通常都是一些常量表达式。case语句先对“条件表达式”求值,然后同时并行对各分支项求值并进行比较,这是与if语句最大不同。比较完成后,与条件表达式值相匹配的分支中的语句被执行。分支项需要互斥,否则会出现逻辑矛盾。default将覆盖所有没有被分支表达式覆盖的其他分支。此外,当case语句跳转到某一分支后,其余分支将不再比较,直接执行endcase 后的语句。 如果多个分支都对应着同一个操作,则可以通过逗号将各个不同分支的取值隔开,其格式为: 分支1,分支2,,…分支n:语句块; (2)按键的抖动以及消抖。 如下图所示,按键在闭合和断开时,触点会存在抖动现象。在按键按下或者释放的时候都会出现一个不稳定的抖动时间,如果不对抖动进行处理,则系统会认为出现了多个上升沿和下降沿,从而影响实验结果。

verilog打拍原理

verilog打拍原理 Verilog打拍原理详解 Verilog是一种硬件描述语言,是一种高级编程语言,主要用于数字电路设计。在数字电路设计中,打拍的原理是非常重要的一部分。本文 将先介绍打拍的概念和作用,然后介绍Verilog中的打拍应用及其原理。 一、打拍的概念及作用 打拍是指将一个电路中的信号在时钟信号到来时进行锁存的一种技术。所谓锁存,就是指将信号的值固定在某一个时刻,以实现对该信号的 保存、重复使用等操作。打拍的作用是将可能出现较小的干扰或抖动 信号转化为较为稳定的数字信号,以避免对后续电路的干扰,同时提 高系统的可靠性和稳定性。 二、Verilog中的打拍应用及原理 在Verilog中,打拍应用广泛,主要包括以下几种类型: 1、正边缘打拍:当时钟信号上升沿到达时,将输入信号的值进行锁存 并输出。 2、负边缘打拍:当时钟信号下降沿到达时,将输入信号的值进行锁存 并输出。 3、同步或异步打拍:同步打拍是指输入信号的锁存时钟和输出信号的 锁存时钟相同;异步打拍是指输入信号的锁存时钟和输出信号的锁存 时钟不同。

而在具体的实现中,Verilog中常用的打拍原理包括以下两种: 1、D触发器打拍原理:在D触发器打拍中,输入信号会先经过一个反 相器得到一个时钟相反的信号,然后经过一个与门和一个或门,将输 入信号和反相信号进行判断,最后经过一个寄存器,将结果锁存输出。 2、JK触发器打拍原理:在JK触发器打拍中,输入信号和时钟信号首 先经过一个与门和一个或门,用于对输入信号进行判断,然后将输出 信号再经过一个与门和一个或门,最后将结果经过一个寄存器,进行 锁存输出。 三、总结 打拍作为数字电路设计中的重要技术,对于提高系统的可靠性和稳定 性具有重要作用。而在Verilog中,实现打拍功能的方法主要有D触 发器和JK触发器两种,并根据需要分为正边沿打拍、负边沿打拍、同 步打拍和异步打拍等不同类型,设计时需要根据具体需求合理选择。

小梅哥和你一起深入学习FPGA之点亮LED灯(上)

小梅哥和你一起深入学习FPGA之点亮LED灯(上) 关键词: FPGA , LED 在之前更新的目录里面,并没有安排这个实验,第一个实验应该是独立按键的检测与消抖。可是,当小梅哥来做按键消抖的实验时,才发现没有做基本的输出设备,因此按键检测的结果无法直观的展示出来。也算是为后续实验做铺垫吧,第一个实验就安排成了点亮LED灯。 一、实验目的 实现4个LED灯的亮灭控制 二、实验原理 LED灯的典型电路如下2-1所示,我们控制led灯的亮灭,实质就是去控制FPGA的IO输给LED负极一个低电平或者高电平。从图中可知,我们给对应的led负极上一个低电平,就会有对应的电流通过电阻,流过led灯,于是LED灯就会被点亮;当给led负极一个高电平时,led两端电压相等,因此没有电流流过,led则呈熄灭状态。 图2-1 led灯典型电路 三、硬件设计 本实验的硬件电路即如图2-1所示,读者一看即懂,因此本节内容略。 四、架构设计 虽然本实验只是一个简单的点亮led灯实验,整个实验代码不过四五行,但是为了遵循小梅哥一直喜欢的那种模块化的设计理念,因此本设计还是将led的驱动做成子模块的形式。 本实验由两个模块组成,分别为led驱动模块和顶层例化模块,可能看过其它开发板资料的同学会觉得这样反而增加了系统的复杂程度,但是,小梅哥如此设计必定有我的道理,图4-1为本实验的模块组织结构 图4-1 led实验模块组织结构图 由图可知本实验仅有n个输出端口,对应了n个led灯(为了代码的可移植性,这里并没有将led的个数限定死,而是采用了参数化的设计,因此,在实际使用过程中,就可根据实际不同的需要,自由的调整led的个数)。在modelsim仿真过程中,所有信号必须要有复位初始值,因此复位信号(Rst_n)必不可少。可能读者这里会发现,与我昨天所写的端口命名规范有出入。如果

Verilog按键消抖的理解

Verilog按键消抖的理解 按键在按下时会产生抖动,释放时也会产生抖动,所以在设计键盘扫描程序时必须考虑按键的消抖,我们一般只考虑按下时的抖动,而放弃对释放时抖动的消抖。抖动时间一般为20ms左右。按下的最终结果是低电平' 在单片机设计的的按键去抖思路是:检测到按下时延时 20ms,再检测,如果状态仍为按下,贝U确认是按下的;如果状态为弹起的,则确认是干扰,无按键按下。

图1 按键抖动特性有一个概念要理一下,按键按下时会有抖动,也就是说我们其实只按一次,但是实际产生的“ 按下” 却是许多次的,这些许多次集中在这20ms 里。 我们按的只是一次,而实际却产生了许多次,那么就必须滤除其他的次数。单片机为了得到真正的“ 按下”,通过延时20ms,把其他的“按下” (也就是抖动)给滤除了。然后再次判断是否有按下,因为有的时候干扰很大。 而在FPGA中,基于下面的程序,理解如下:在这个程序里检测按键是否按下的方法是脉冲边沿检法。而在单片机里是判断是否为低电平的方法(那么在FPGA中可不可以也用这个方法呢?)第一次检测到后,启动20ms 计数器,时间到后再检测。这里的检测方法跟脉冲边沿检测法有异曲同工之处,FPGA过20ms检测按键是否按下, 存储检测到的值,并且按位取反与前一个20ms检测的值 相与,得到一个值,如果为1,则判断按键按下,否则则无按下。所以跟单片机按键扫描的原理是一样的,不同的是检测方法不一样。

图2 FPGA 按键的理解示意图 其中key_an 寄存器的功能是检测第一次的 “按 下”,是ent 的启动标志位。通过也能滤除干扰信 号。 led_etrl 是确实有按键按下的信号,维持一个时钟 周期。 特权同学的Verilog 键盘扫描程序 // 说明:当三个独立按键的某一个被按下后,相应的 LED 被点亮; // 再次按下后,LED 熄灭,按键控制 LED 亮灭 module sw_debounce( clk,rst_n, sw1_n,sw2_n,sw3_n, 下 的 JS 生 谨产汞 按时彼 伺隔勿吧时间轴 110 UCi 111] 边沿唸迴注检测到"m 零汁数器并启动⑷矶的 时间计数 tn in no 110

基于verilog数字秒表的设计实现

生产实习报告 班级:通信13-2班 姓名:闫振宇 学号: 成绩: 电子与信息工程学院 信息与通信工程系

基于verilog数字秒表的设计实现 1. 概述 硬件描述语言HDL ( HardwareDescription Langyage) 是一种用形式化方法来描述数字电路和系统的语言。数字电路系统的设计这里用这种语言可以从上层倒下层逐层描述自设计思想用一系列分层的模块来表示极其复杂的数字系统,然后用EDA 工具逐层验证,把其中需要为具体物理电路的模块组合由自动综合工具转换到门级电路网表。Verilog HDL 是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。使用VERILOG 进行系统设计时采用的是从顶至下的设计,自顶向下的设计是从系统机开始巴西同划分为若干个基本单元,然后再把每个单元划分为下一层的基本单元,这样下去直到可以直接用EDA 元件库中的基本元件来实现为止。 2. 设计目的及要求 a.有源晶振频率:50MHZ; b.测试计时范围:00’00”00 ~ 59’59”99,显示的最长时间为59分59 秒; c.数字秒表的计时精度是10ms; d.显示工作方式:六位BCD七段数码管显示读数,两个按钮开关(一个按钮使秒表复位,另一个按钮控制秒表的启动/暂停)。 3.设计原理 秒表的逻辑结构较简单,它主要由四进制计数器、十六进制计数器、分频器、数据选择器、和显示译码器等组成。在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止、启动以及清零复位。 秒表有共有6个输出显示,其中6个显示输出数据,分别为百分之一秒、十分之一秒、

相关主题
文本预览
相关文档 最新文档