找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6787|回复: 0
收起左侧

VHDL防抖动模块程序以及解释

[复制链接]
ID:203367 发表于 2017-5-22 09:58 | 显示全部楼层 |阅读模式
libraryieee;  

useieee.std_logic_1164.all;

entityyou is定义实体

port(clk,din:in std_logic;系统时钟和开关里程输入脉冲

dout:out std_logic );输出信号

endyou;  

architecturertl of you is定义结构体

signalx,y:std_logic;定义两个中间标准逻辑信号

begin  

process(clk) 进程

begin

if clk'event and clk='1' then 判断是否为上升沿

x<=din; 变量赋值

y<=x;

end if;

dout<=x and (not y); 去抖动

end process;  

end rtl;



该模块的的核心部分在于

if clk'event and clk='1' then  

x<=din; y<=x;

end if;

dout<=x and (not y);

   这是一个同步整形电路,在进程中,信号不是在改变值之后立即变化的,其他语句使用的还是该信号的旧值(未执行进程时的值),所以假设y=0,那么在时钟的上升沿:

如果:

   din="1"小于一个时钟宽:则有x=1,y=0(虽然进程中改变了值,但不会立即被使用);

   则有dout=x and (not y)=1 and (not 0)=1;

如果:

   din="1"超过一个时钟宽:则有x=1,y=1(前次执行进程后,y的值已经改变为‘1’了);

   则有dout=x and (not y)=1 and (not 1)=0;

如果din在时钟周期内出现抖动,则因为不执行进程,所以输出无影响,还是被整成一个时钟宽度,所以不管是长按还是短按你的键,有效高电平宽度等于时钟。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表