当前位置: 首页 > news >正文

广州建网站培训大型网站制作

广州建网站培训,大型网站制作,安卓做网站,日本做电子贺卡网站🎉欢迎来到FPGA专栏~按键消抖模块设计与验证 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大…

🎉欢迎来到FPGA专栏~按键消抖模块设计与验证


  • ☆* o(≧▽≦)o *☆~我是小夏与酒🍹
  • 博客主页:小夏与酒的博客
  • 🎈该系列文章专栏:FPGA学习之旅
  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️
    FPGQ2

CSDN

🎉 目录-按键消抖模块设计与验证

  • 一、效果演示
  • 二、模块设计
  • 三、仿真测试
    • 3.1 常规编写
    • 3.2 task编写
  • 四、仿真模型

遇见未来

一、效果演示

🥝模块设计:
模块设计


🥝按键消抖模块的完整代码,可直接使用:

//
//模块:按键消抖模块
//key_state:输出消抖之后按键的状态
//key_flag:按键消抖结束时产生一个时钟周期的高电平脉冲
/
module KeyFilter(input Clk,input Rst_n,input key_in,output reg key_flag,output reg key_state
);//按键的四个状态localparamIDLE 		= 4'b0001,FILTER1 	= 4'b0010,DOWN 		= 4'b0100,FILTER2 	= 4'b1000;//状态寄存器reg [3:0] curr_st;//边沿检测输出上升沿或下降沿wire pedge;wire nedge;//计数寄存器reg [19:0]cnt;//使能计数寄存器reg en_cnt;//计数满标志信号reg cnt_full;//计数满寄存器//------<边沿检测电路的实现>------//边沿检测电路寄存器reg key_tmp0;reg key_tmp1;//边沿检测always@(posedge Clk or negedge Rst_n)beginif(!Rst_n)beginkey_tmp0 <= 1'b0;key_tmp1 <= 1'b0;endelse beginkey_tmp0 <= key_in;key_tmp1 <= key_tmp0;end	endassign nedge = (!key_tmp0) & (key_tmp1);assign pedge = (key_tmp0)  & (!key_tmp1);//------<状态机主程序>------	//状态机主程序always@(posedge Clk or negedge Rst_n)beginif(!Rst_n)begincurr_st <= IDLE;en_cnt <= 1'b0;key_flag <= 1'b0;key_state <= 1'b1;endelse begincase(curr_st)IDLE:beginkey_flag <= 1'b0;if(nedge)begincurr_st <= FILTER1;en_cnt <= 1'b1;endelsecurr_st <= IDLE;endFILTER1:beginif(cnt_full)beginkey_flag <= 1'b1;key_state <= 1'b0;curr_st <= DOWN;en_cnt <= 1'b0;end	else if(pedge)begincurr_st <= IDLE;en_cnt <= 1'b0;endelsecurr_st <= FILTER1;endDOWN:beginkey_flag <= 1'b0;if(pedge)begincurr_st <= FILTER2;en_cnt <= 1'b1;endelsecurr_st <= DOWN;endFILTER2:beginif(cnt_full)beginkey_flag <= 1'b1;key_state <= 1'b1;curr_st <= IDLE;en_cnt <= 1'b0;end	else if(nedge)begincurr_st <= DOWN;en_cnt <= 1'b0;endelsecurr_st <= FILTER2;enddefault:begincurr_st <= IDLE;en_cnt <= 1'b0;key_flag <= 1'b0;key_state <= 1'b1;endendcaseendend//------<20ms计数器>------		//20ms计数器//Clk 50_000_000Hz//一个时钟周期为20ns//需要计数20_000_000 / 20 = 1_000_000次always@(posedge Clk or negedge Rst_n)beginif(!Rst_n)cnt <= 20'd0;else if(en_cnt)cnt <= cnt + 1'b1;elsecnt <= 20'd0;endalways@(posedge Clk or negedge Rst_n)beginif(!Rst_n)cnt_full <= 1'b0;else if(cnt == 999_999)cnt_full <= 1'b1;elsecnt_full <= 1'b0;endendmodule

🥝RTL视图:
RTL


🥝状态转移:
状态转移


🥝仿真结果:
仿真结果


二、模块设计

🥝模块设计:

信号作用
clk时钟信号输入
rst_n复位信号输入
key_in按键信号输入
key_flag消抖结束之后的标志位
key_state消抖结束之后按键的状态

模块设计


🥝上升沿检测电路:
上升


🥝下降沿检测电路:

下降


🥝边沿检测电路的实现:
检测到下降沿,nedge输出高电平;检测到上升沿,pedge输出高电平。

//------<边沿检测电路的实现>------
//边沿检测电路寄存器
reg key_tmp0;
reg key_tmp1;//边沿检测
always@(posedge Clk or negedge Rst_n)beginif(!Rst_n)beginkey_tmp0 <= 1'b0;key_tmp1 <= 1'b0;endelse beginkey_tmp0 <= key_in;key_tmp1 <= key_tmp0;end	
endassign nedge = (!key_tmp0) & (key_tmp1);//检测到下降沿,nedge输出高电平
assign pedge = (key_tmp0)  & (!key_tmp1);//检测到上升沿,pedge输出高电平

🥝一段式状态机设计:
按键的四种状态:

//按键的四个状态
localparamIDLE 		= 4'b0001,FILTER1 	= 4'b0010,DOWN 		= 4'b0100,FILTER2 	= 4'b1000;

计数器:

//------<20ms计数器>------		
//20ms计数器
//Clk 50_000_000Hz
//一个时钟周期为20ns
//需要计数20_000_000 / 20 = 1_000_000次//计数寄存器
reg [19:0]cnt;//使能计数寄存器
reg en_cnt;//计数满标志信号
reg cnt_full;//计数满寄存器always@(posedge Clk or negedge Rst_n)beginif(!Rst_n)cnt <= 20'd0;else if(en_cnt)cnt <= cnt + 1'b1;elsecnt <= 20'd0;
endalways@(posedge Clk or negedge Rst_n)beginif(!Rst_n)cnt_full <= 1'b0;else if(cnt == 999_999)cnt_full <= 1'b1;elsecnt_full <= 1'b0;
end

状态机主程序:

//------<状态机主程序>------	
//状态机主程序
always@(posedge Clk or negedge Rst_n)beginif(!Rst_n)begincurr_st <= IDLE;en_cnt <= 1'b0;key_flag <= 1'b0;key_state <= 1'b1;endelse begincase(curr_st)IDLE:beginkey_flag <= 1'b0;if(nedge)begincurr_st <= FILTER1;en_cnt <= 1'b1;endelsecurr_st <= IDLE;endFILTER1:beginif(cnt_full)beginkey_flag <= 1'b1;key_state <= 1'b0;curr_st <= DOWN;en_cnt <= 1'b0;end	else if(pedge)begincurr_st <= IDLE;en_cnt <= 1'b0;endelsecurr_st <= FILTER1;endDOWN:beginkey_flag <= 1'b0;if(pedge)begincurr_st <= FILTER2;en_cnt <= 1'b1;endelsecurr_st <= DOWN;endFILTER2:beginif(cnt_full)beginkey_flag <= 1'b1;key_state <= 1'b1;curr_st <= IDLE;en_cnt <= 1'b0;end	else if(nedge)begincurr_st <= DOWN;en_cnt <= 1'b0;endelsecurr_st <= FILTER2;enddefault:begincurr_st <= IDLE;en_cnt <= 1'b0;key_flag <= 1'b0;key_state <= 1'b1;endendcaseend
end

三、仿真测试

3.1 常规编写

`timescale 1ns/1ns
`define clock_period 20module KeyFilter_tb;reg Clk;reg Rst_n;reg key_in;wire key_flag;wire key_state;KeyFilter KeyFilter0(.Clk(Clk),.Rst_n(Rst_n),.key_in(key_in),.key_flag(key_flag),.key_state(key_state));initial Clk = 1;always#(`clock_period/2) Clk = ~Clk;initial beginRst_n = 1'b0;key_in = 1'b1;#(`clock_period*10);Rst_n = 1'b1;#(`clock_period*10 + 1);key_in = 0;#1000;key_in = 1;#2000;key_in = 0;#1400;key_in = 1;#2600;key_in = 0;#1300;key_in = 1;#200;key_in = 0;#20000100;#50000000;key_in = 1;#2600;key_in = 0;#1000;key_in = 1;#2000;key_in = 0;#1400;key_in = 1;#2600;key_in = 0;#1300;key_in = 1;#200;key_in = 1;#20000100;#50000000;$stop;endendmodule

仿真结果:
结果1


3.2 task编写

`timescale 1ns/1ns
`define clock_period 20module KeyFilter_tb;reg Clk;reg Rst_n;reg key_in;wire key_flag;wire key_state;KeyFilter KeyFilter0(.Clk(Clk),.Rst_n(Rst_n),.key_in(key_in),.key_flag(key_flag),.key_state(key_state));initial Clk = 1;always#(`clock_period/2) Clk = ~Clk;initial beginRst_n = 1'b0;key_in = 1'b1;#(`clock_period*10);Rst_n = 1'b1;#(`clock_period*10 + 1);#30000;PressKey; #10000;PressKey; #10000;PressKey; #10000;$stop;endreg [15:0]myrand;task PressKey;begin//50次随机时间按下抖动repeat(50)beginmyrand = {$random}%65536;//0~65535#myrand key_in = ~key_in;endkey_in = 0;#50_000_000;//按下稳定//50次随机时间释放抖动repeat(50)beginmyrand = {$random}%65536;//0~65535#myrand key_in = ~key_in;endkey_in = 1;#50_000_000;//释放稳定endendtaskendmodule

注意$random随机函数的用法:

$random这一系统函数可以产生一个有符号的32bit随机整数。一般的用法是 $random%b,其中 b>0。这样就会生成一个范围在(-b+1):(b-1)中的随机数。如果只得到正数的随机数,可采用{$random}%b 来产生。

myrand = {$random}%65536;//0~65535

上述语句的作用即是产生了0~65535之间的随机数。

通过repeat语句循环50次,就产生了50次不同的延时效果:

repeat(50)beginmyrand = {$random}%65536;//0~65535#myrand key_in = ~key_in;
end

仿真结果:
结果2


四、仿真模型

编写key_model并添加到测试激励文件中:

`timescale 1ns/1nsmodule key_model(key);output reg key;reg [15:0]myrand;initial beginkey = 1'b1;PressKey; #10000;PressKey; #10000;PressKey; #10000;$stop;endtask PressKey;begin//50次随机时间按下抖动repeat(50)beginmyrand = {$random}%65536;//0~65535#myrand key = ~key;endkey = 0;#50_000_000;//按下稳定//50次随机时间释放抖动repeat(50)beginmyrand = {$random}%65536;//0~65535#myrand key = ~key;endkey = 1;#50_000_000;//释放稳定endendtask	endmodule

修改KeyFilter_tb:

`timescale 1ns/1ns
`define clock_period 20module KeyFilter_tb;reg Clk;reg Rst_n;wire key_in;wire key_flag;wire key_state;KeyFilter KeyFilter0(.Clk(Clk),.Rst_n(Rst_n),.key_in(key_in),.key_flag(key_flag),.key_state(key_state));key_model key_model0(.key(key_in));initial Clk = 1;always#(`clock_period/2) Clk = ~Clk;initial beginRst_n = 1'b0;#(`clock_period*10);Rst_n = 1'b1;#(`clock_period*10 + 1);endendmodule

整个激励文件的内部结构:
仿真模型
仿真结果:
结果3

csdn

🧸结尾


  • ❤️ 感谢您的支持和鼓励! 😊🙏
  • 📜您可能感兴趣的内容:
  • 【FPGA】串口通信讲解-状态机判断数据值
  • 【Python】串口通信-与FPGA、蓝牙模块实现串口通信(Python+FPGA)
  • 【Arduino TinyGo】【最新】使用Go语言编写Arduino-环境搭建和点亮LED灯
  • 【全网首发开源教程】【Labview机器人仿真与控制】Labview与Solidworks多路支配关系-四足爬行机器人仿真与控制
    遇见未来

文章转载自:
http://wanjiagranitic.rywn.cn
http://wanjiamicrolite.rywn.cn
http://wanjiainteresting.rywn.cn
http://wanjiamaster.rywn.cn
http://wanjiachuse.rywn.cn
http://wanjiaquitch.rywn.cn
http://wanjiafencible.rywn.cn
http://wanjiavarietal.rywn.cn
http://wanjiabedclothes.rywn.cn
http://wanjiatupian.rywn.cn
http://wanjiaoverly.rywn.cn
http://wanjiaupsetting.rywn.cn
http://wanjiakaryosystematics.rywn.cn
http://wanjiasarcophile.rywn.cn
http://wanjiamim.rywn.cn
http://wanjiacorps.rywn.cn
http://wanjiablatherskite.rywn.cn
http://wanjiatetraspore.rywn.cn
http://wanjiausss.rywn.cn
http://wanjiafilature.rywn.cn
http://wanjiamagistracy.rywn.cn
http://wanjiaantenniform.rywn.cn
http://wanjiarhin.rywn.cn
http://wanjiadecolourize.rywn.cn
http://wanjiaprocedural.rywn.cn
http://wanjiacomminute.rywn.cn
http://wanjiaconfucianism.rywn.cn
http://wanjiaiatrical.rywn.cn
http://wanjiatx.rywn.cn
http://wanjiageotropism.rywn.cn
http://wanjiarehalogenize.rywn.cn
http://wanjiafluctuation.rywn.cn
http://wanjiawoodcraft.rywn.cn
http://wanjiadeoxygenize.rywn.cn
http://wanjiaenhearten.rywn.cn
http://wanjiapolaroid.rywn.cn
http://wanjiaazeotropy.rywn.cn
http://wanjiamillpond.rywn.cn
http://wanjiaunpardoned.rywn.cn
http://wanjianuclearize.rywn.cn
http://wanjiabarracoon.rywn.cn
http://wanjiaquenton.rywn.cn
http://wanjiajumpmaster.rywn.cn
http://wanjiamacon.rywn.cn
http://wanjiadistrust.rywn.cn
http://wanjiaasiadollar.rywn.cn
http://wanjiadempster.rywn.cn
http://wanjiacanis.rywn.cn
http://wanjiacomradeship.rywn.cn
http://wanjiasebastian.rywn.cn
http://wanjiatitularly.rywn.cn
http://wanjiacarbonade.rywn.cn
http://wanjiachlorosis.rywn.cn
http://wanjiachorology.rywn.cn
http://wanjiadissertation.rywn.cn
http://wanjiainsinuation.rywn.cn
http://wanjianebuly.rywn.cn
http://wanjiabackslid.rywn.cn
http://wanjiahidage.rywn.cn
http://wanjiaallsorts.rywn.cn
http://wanjiakaf.rywn.cn
http://wanjiagumboil.rywn.cn
http://wanjiatsamba.rywn.cn
http://wanjiadoorward.rywn.cn
http://wanjiatyrannical.rywn.cn
http://wanjiaunef.rywn.cn
http://wanjiahalogen.rywn.cn
http://wanjiainsole.rywn.cn
http://wanjiadecagon.rywn.cn
http://wanjiamonocoque.rywn.cn
http://wanjiasimplicidentate.rywn.cn
http://wanjiaampul.rywn.cn
http://wanjiaanhydration.rywn.cn
http://wanjiacloop.rywn.cn
http://wanjiablepharitis.rywn.cn
http://wanjiazunian.rywn.cn
http://wanjialeveling.rywn.cn
http://wanjiadruse.rywn.cn
http://wanjiacrayonist.rywn.cn
http://wanjiasidebone.rywn.cn
http://www.15wanjia.com/news/121410.html

相关文章:

  • 做家常菜的网站哪个好seo优化教程下载
  • 电子商务网站建设系统功能百度官网下载
  • 有没有建筑学做区位分析的网站小程序开发需要多少钱
  • 淘宝网站上做代购的是正品吗seo优化便宜
  • 网站小程序定制公司百度首页 百度一下
  • 网站建设 乐清网络公司国外免费推广平台有哪些
  • 小网站做几个关键词自己创建个人免费网站
  • 做网站开发所需的知识技能百度售后服务电话
  • 单页面 网站网站维护需要多长时间
  • 专业网站建设必要性百度指数网页版
  • 青岛做网站优化公司惠州seo全网营销
  • 网页设计素材网站知乎杭州网站推广大全
  • 云阳有没有做网站的连接交换
  • 网页游戏平台排行宁波seo智能优化
  • idea可以做网站吗公司注册
  • 微信开发者平台小程序seo招聘网
  • 老牌网站建设接广告的网站
  • 手机怎么做优惠券网站关联词有哪些小学
  • 做母婴产品哪个网站做的好处广州网站开发多少钱
  • 宽带动态ip如何做网站访问10种营销方法
  • 网站快速备案安全原创软文
  • 王烨当兵西安seo专员
  • 国外政府网站模板河北seo网络优化师
  • 网站备案照相公司域名注册步骤
  • 建设信用中国网站聊城seo
  • 网站建设物美价廉排位及资讯
  • 樟树网站建设微信信息流广告投放
  • 举报网站建设工作总结互联网广告代理商
  • 做公司官网大概多少钱企业网站优化推广
  • Discuz网站制作教程seo外链自动群发工具