我希望的判断方法:
当接受到第一个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;
---------------------------------------------------------------
单独在进程外执行可以吗,是不是和别的进程是并行的关系?
如果不能这样使用,应该用什么方法?