实 验 报 告
实验日期: 学 号:
姓 名:
实验名称:
消抖电路
总 分:
一、实验概述
运用LPM 原件定制DFF 触发器,并调用LPM 定制的DFF 触发器,用VHDL 语言的元件例化实现消抖电路并了解其工作原理。
二、实验原理 1、触发器原理
触发器是一种可存储1位二进制码的逻辑电路,是构成各种时序电路的最基本逻辑单元。
触发器有一对互补输出端,输出状态不仅与当前输入有关,还与前一输出状态有关。
触发器有两个稳定状态,在一定的外界信号作用下会发生状态翻转。
2、消抖电路原理
脉冲按键与电平按键通常采用机械式开关结构,其核心部件为弹性金属簧片。
按键信号在开关拨片与触电接触后经多次弹跳才会稳定,而在按键过程中,可能出现了多个脉冲。
因此需要根据实际情况进行按键消抖处理以提取稳定脉冲,在按键过程中提取稳定的电平状态,通过对抖动脉冲多次检测信号按键电平值,并提取一前一后两个信号按键电平值来进行比较,以此来获取开关状态。
输出一个周期的脉冲时,要求前一次检测到的电平信号为低电平,后一次检测到的电平信号为高电平时。
3、结构图:
三、实验设计
时钟信号 元件记忆当前的按键信号电平 元件记忆上一次按键信号电平 两次按键的电平进行比较 脉冲信号
1、LPM元件定制DFF触发器
(1)设置lpm_ff元件选择Installed Plug-Ins→Storage→lpm_ff项。
(2)LPM元件定制步骤,设置输入data为1位,clock为时钟信号,类型为D 型。
(3)添加异步清零和异步置1。
(4)aclr异步清零且高电平有效,aset异步置1且高电平有效,二者无效时,q输出由clock上升沿触发更新为data。
(5)调出其vhd文件添加至消抖电路的工程中。
(6)仿真验证并下载。
功能仿真波形分析
参数:end time 为2.0ns,grid size为100ns;
信号:alcr 异步清零且高电平有效,二进制;
aset异步置1且高电平有效,二进制;
二者无效,q(二进制)输出由clock(二进制)上升沿触发更新为
data(二进制)。
aclr输入无效,aset
输入有效,q输出1
aclr和aset均无效,q输出1;clock上升时,触发更新为data,q输出0 aclr和
aset均无
效,q输
出1;
clock上
升时,触
发更新
为data,
q输出1;
aclr异步
清零,q
输出0
aclr有
效,aset
无效,清
零得q输
出0;aclr
和aset
均无效,
q输出0;
clock上
升时,触
发更新
为data,
q输出0;
2、VHDL 语言元件例化。
library ieee;
use ieee.std_logic_1164.all; entity xiaodou is
port(clk:in std_logic; d_in:in std_logic; clk_out:out std_logic); end xiaodou;
architecture xiaodou_arch of xiaodou is signal s1,s2,s3:std_logic; component xiaodou0 is port(clock:in std_logic; data:in std_logic; q:out std_logic); end component xiaodou0; begin
g1:xiaodou0 port map(clk,d_in,s1); g2:xiaodou0 port map(clk,s1,s2); s3<=not s2;
clk_out<=s1 and s3; end xiaodou_arch;
仿真波形分析
参数:end time 为2.0ns ,grid size 为10ns 。
信号功能:clk :二进制时钟信号; d_in :二进制脉冲信号; clk_out :二进制输出信号。
,功能仿真:
时序仿真:
时钟信号上升沿,脉冲信号为0,按键按下后脉冲信号从0→1,q 输出1
时钟信号上升沿,按键按下一段时间后脉冲信号恒定为1,q 输出0
脉冲信号抖动,产
生多个不
稳定脉冲
结论:clk_out输出捕捉时钟信号上升沿的输入值,并保持不变,直至捕捉到下一个时钟信号上升沿的输入值。
按键抖动,d_in脉冲信号不稳定时,clk_out 输出保持稳定,实现消除抖动的目的。
四、管脚分配(小实验板)
clk input ---- PIN_125
d_in input ---- PIN_33
clk_out output --- PIN_86
五、下载验证(小实验板)
现象说明:每次按下PIN_33脉冲按键,PIN_86亮灯并且亮一段时间后熄灭,不再重复。
结论:此电路实现消抖作用。
分析:clk的时钟信号的频率要适宜,否则难以判定亮灯现象是否正确。
若频率过高,按键后观测到PIN_86发光二极管亮一段时间后,后续亮灯间断明显;若频率过低,按键后PIN_86不会亮灯。
六、实验日志
1、编写消抖电路的vhdl代码时,忘记将DFF的VHDL文件复制到消抖电路的文件夹中,便直接调用DFF,使得编译无法通过;
2、编写代码前,认真仔细的学习了P122的结构式描述和P141的元件例化,通过直接调用and和or,避免再一次对与门和或门进行vhdl的描述;
3、在建立vwf文件时,未重新建立新的工程文件,直接用DFF的工程文件,使得消抖电路的vhdl成功编译后,进行仿真图建立时,List无法找到消抖电路中的输入和输出结点;
七、实验心得
此次实验,让我初步学习了VHDL语言中的元件例化,并通过结构式描述的方法,学习编写与顶层文件相关的VHDL代码。
同时对于各类触发器的工作原理以及约束条件有了更深的认识,基本掌握消抖电路的原理以及实现方法。
八、思考题
(1)触发器、锁存器、移位寄存器的区别是什么?
答:触发器类似于移位寄存器,区别在于触发器仅在信号边沿触发时锁存数据,而锁存器是由电平信号触发的;移位寄存器是用来寄存二进制数字信息且能进行信息移位的时序逻辑电路;触发器是一种可存储一位二进制码的逻辑电路。
触发器有一对互补输出端,输出不仅与当前输入有关,还与前一输出状态有关,当两个状态稳定时,在一定的外界信号作用下进行状态翻转。
(2)与非门构成的基本R-S 触发器为什么需要约束条件?
答:约束条件是SR=0,因为S'=R'=0时为不定状态,应该避免这种状态。
(3)如何运用D 触发器实现JK触发器和T触发器的功能? 答:D 触发器实现JK 触发器 n n n Q K Q J D Q +==+1
J 1D C1
Q Q
CP ≥1
& &
1
K
D 触发器实现T 触发器
n n n Q T Q T D Q +==+1
T
1D C1
Q Q
CP =1
(4)如何运用JK 触发器实现D 触发器和T 触发器的功能? 答:JK 触发器实现D 触发器:
n n n n n n n Q K Q J DQ Q D Q Q D D Q +=+=+==+)(1
1J C1 1K
D
Q Q
1
CP
JK 触发器实现T 触发器:
n n n n n Q K Q J Q T Q T Q +=+=+1
1J T Q
(5)脉冲按键为什么要使用按键消抖电路?
答:因为脉冲是机械式开关结构,由于机械式开关的核心部件为弹性金属簧片,按键信号在开关拨片与出点接触后经多次弹跳才会稳定。
虽然只是进行了一次按键,结果在按键信号稳定的前后出现了多个脉冲,所以要进行按键消抖处理以提取稳定脉冲。
(6)VHDL元件例化语句作用是什么?如何调用标准的jkff(tff)元件?
答:元件例化是将预先设计好的设计实体定义为一元件,然后用映射语句定义一种连接关系将此元件与当前设计实体中指定的端口一一映射。
元件例化是实现自上而下层次化设计的一种重要途径。
元件例化语句由两部分组成,前一部分将实体设计好的实体定义为一个元件,第二部分则定义此元件与当前实体的连接关系。
格式:component 元件名
[generic <参数说明>;]
port <端口说明>;
end component;
标号:元件名 port map([端口名=>]连接端口名,...)
(7)VHDl语言中边沿触发的signal如何描述?VHDL描述时序电路是signal的作用是什么?
答:上升沿:clk’=1 ;下降沿:clk’=0
在时序电路中signal作为中间信号,起连线内部电路的作用。
(8)lpm_ff定制时clear、load、set输入有哪两类?
答:clear、load、set有synchronous inputs和asynchronous inputs两类,S类为同步清零操作,A类为异步清零操作。