首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[原创]请教CPLD,vhdl语言延时问题

[原创]请教CPLD,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; --------------------------------------------------------------- 单独在进程外执行可以吗,是不是和别的进程是并行的关系? 如果不能这样使用,应该用什么方法?
返回列表