No.83582 作者:wzhauto 邮件:wzhauto@126.com ID:39559 登陆:3次 文章数:2篇 最后登陆IP:202.114.106.32 最后登陆:2005/9/13 11:11:59 注册:2005/8/25 14:40:24 财富:112 发帖时间:2005/9/12 23:00:19 发贴者IP:202.114.106.32 标题:wzhauto:请教一个用vhdl编写按键去抖动的问题 摘要:No.83582请教一个用vhdl编写按键去抖动的问题 普通的cpu中,直接利用sleep之类的语句就可以直接延时去抖动 但是在cpld中,我却碰到了问题,想请教一下各位 问题如下(使用的芯片是altera公司的max7000s系列芯片,芯片型号为7128slc84): 我的程序中,clk3是按键的输入信号 clk2是一个标准的200赫兹输入信号,希望利用这个来计20ms的延时时间 我希望的判断方法: 当接受到第一个clk3=1时,延时20ms,延时以后,再判断此时clk3是否仍为1 如果此时clk3为1,则说明这个脉冲是真脉冲,加counter9 如果此时clk3不为1,则说明这个脉冲只是按键的毛刺,此时延时用的计数器清零,等待下一个clk3=1,再触发延时用的计数器。 关于这部分的程序如下: …… architecture rtl of clk_div728 is signal read_key:integer :=0; signal timer_en:integer :=0 ; signal counter4:integer:=0; …… p2: process(clk2) variable counter25:integer range 0 to 63; begin if (clk2'event and clk2='1' and timer_en=1) then counter4 <=counter4+1; elsif (clk2'event and clk2='1' and timer_en=0) then counter4 <=0; else counter4 <=counter4; end if; end process p2; ----------------------------------------------------------------- read_key <=1 when counter4=4 else 0; --------------------------------------------------------------- p3:process(clk3) begin i ......
>>返回讨论的主题
|