导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教一个用vhdl编写按键去抖动的问题[wzhauto]

 *第34354篇: 请教一个用vhdl编写按键去抖动的问题

  
楼 主:wzhauto 2005年9月12日23:00
 请教一个用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
 if (counter4=4) then
  timer_en  <=0;
 elsif (counter4/=4 and clk3'event and clk3='1') then
  timer_en  <=1;
 else    timer_en  <=timer_en;
 end if;
end process p3;

---------------------------------------------------------------------
 
 
p4: process(read_key)
    
 
    variable counter9:integer range 0 to 16;
    
    begin
      if (read_key'event and read_key=1 and clk3='1')then
       
         if (counter9=8)then
             counter9:=1;
            
         else 
              
              counter9:=counter9+1;
              
         end if;
      
      end if; 
 
            
   case counter9 is
                ……
              end case;
 
 
 
  end process p4;
-----------------------------------------------------------------


程序编译的时候通不过,报的错是“unknown problem”
请假一下各位能否指点一二,不甚感激。

另外想特别问一下
这句:
-----------------------------------------------------------------
 read_key  <=1 when counter4=4 else 0;
---------------------------------------------------------------
单独在进程外执行可以吗,是不是和别的进程是并行的关系?
如果不能这样使用,应该用什么方法?


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:招聘开发人员

[下一篇主题]:推荐一款fpga开发板低价400元 altera